aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog367
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/cobol/ChangeLog53
-rw-r--r--gcc/cobol/Make-lang.in2
-rw-r--r--gcc/cobol/cdf.y86
-rwxr-xr-xgcc/cobol/gcobc31
-rw-r--r--gcc/cobol/gcobol.137
-rw-r--r--gcc/cobol/genapi.cc11
-rw-r--r--gcc/cobol/genutil.cc108
-rw-r--r--gcc/cobol/genutil.h9
-rw-r--r--gcc/cobol/lexio.cc136
-rw-r--r--gcc/cobol/parse.y199
-rw-r--r--gcc/cobol/parse_ante.h98
-rw-r--r--gcc/cobol/scan.l51
-rw-r--r--gcc/cobol/scan_ante.h97
-rw-r--r--gcc/cobol/scan_post.h6
-rw-r--r--gcc/cobol/symbols.cc2
-rw-r--r--gcc/cobol/symbols.h8
-rw-r--r--gcc/cobol/token_names.h2738
-rw-r--r--gcc/cobol/util.cc76
-rw-r--r--gcc/common/config/riscv/riscv-common.cc1125
-rw-r--r--gcc/config.gcc4
-rw-r--r--gcc/config/aarch64/aarch64.md32
-rw-r--r--gcc/config/arm/aout.h5
-rw-r--r--gcc/config/arm/arm-builtins.cc1276
-rw-r--r--gcc/config/arm/arm-c.cc7
-rw-r--r--gcc/config/arm/arm-cpus.in28
-rw-r--r--gcc/config/arm/arm-generic.md4
-rw-r--r--gcc/config/arm/arm-opts.h1
-rw-r--r--gcc/config/arm/arm-protos.h8
-rw-r--r--gcc/config/arm/arm-tables.opt6
-rw-r--r--gcc/config/arm/arm-tune.md53
-rw-r--r--gcc/config/arm/arm.cc401
-rw-r--r--gcc/config/arm/arm.h169
-rw-r--r--gcc/config/arm/arm.md43
-rw-r--r--gcc/config/arm/arm.opt3
-rw-r--r--gcc/config/arm/constraints.md18
-rw-r--r--gcc/config/arm/iterators.md20
-rw-r--r--gcc/config/arm/iwmmxt.md1766
-rw-r--r--gcc/config/arm/iwmmxt2.md903
-rw-r--r--gcc/config/arm/marvell-f-iwmmxt.md189
-rw-r--r--gcc/config/arm/predicates.md8
-rw-r--r--gcc/config/arm/t-arm3
-rw-r--r--gcc/config/arm/thumb2.md2
-rw-r--r--gcc/config/arm/types.md123
-rw-r--r--gcc/config/arm/unspecs.md29
-rw-r--r--gcc/config/arm/vec-common.md31
-rw-r--r--gcc/config/i386/i386-features.cc17
-rw-r--r--gcc/config/i386/i386.cc26
-rw-r--r--gcc/config/nvptx/gen-multilib-matches-tests67
-rw-r--r--gcc/config/nvptx/nvptx-gen.h1
-rw-r--r--gcc/config/nvptx/nvptx-gen.opt3
-rw-r--r--gcc/config/nvptx/nvptx-opts.h1
-rw-r--r--gcc/config/nvptx/nvptx-sm.def1
-rw-r--r--gcc/config/nvptx/nvptx.cc6
-rw-r--r--gcc/config/nvptx/nvptx.h1
-rw-r--r--gcc/config/nvptx/nvptx.opt7
-rw-r--r--gcc/config/riscv/gen-riscv-ext-opt.cc105
-rw-r--r--gcc/config/riscv/gen-riscv-ext-texi.cc88
-rw-r--r--gcc/config/riscv/riscv-c.cc16
-rw-r--r--gcc/config/riscv/riscv-ext-corev.def87
-rw-r--r--gcc/config/riscv/riscv-ext-sifive.def87
-rw-r--r--gcc/config/riscv/riscv-ext-thead.def191
-rw-r--r--gcc/config/riscv/riscv-ext-ventana.def35
-rw-r--r--gcc/config/riscv/riscv-ext.def1824
-rw-r--r--gcc/config/riscv/riscv-ext.opt404
-rw-r--r--gcc/config/riscv/riscv-ext.opt.urls0
-rw-r--r--gcc/config/riscv/riscv-opts.h20
-rw-r--r--gcc/config/riscv/riscv-subset.h3
-rw-r--r--gcc/config/riscv/riscv-vector-builtins.cc20
-rw-r--r--gcc/config/riscv/riscv.cc8
-rw-r--r--gcc/config/riscv/riscv.opt313
-rw-r--r--gcc/config/riscv/t-riscv43
-rw-r--r--gcc/config/xtensa/xtensa.cc28
-rw-r--r--gcc/cp/ChangeLog10
-rw-r--r--gcc/cp/class.cc6
-rw-r--r--gcc/diagnostic-format-html.cc233
-rw-r--r--gcc/doc/extend.texi155
-rw-r--r--gcc/doc/gm2.texi2
-rw-r--r--gcc/doc/invoke.texi516
-rw-r--r--gcc/doc/md.texi9
-rw-r--r--gcc/doc/riscv-ext.texi637
-rw-r--r--gcc/doc/sourcebuild.texi4
-rw-r--r--gcc/fortran/ChangeLog25
-rw-r--r--gcc/fortran/dependency.cc6
-rw-r--r--gcc/fortran/gfortran.h3
-rw-r--r--gcc/fortran/resolve.cc7
-rw-r--r--gcc/lto-streamer-out.cc26
-rw-r--r--gcc/match.pd16
-rw-r--r--gcc/optabs.cc3
-rw-r--r--gcc/optabs.def1
-rw-r--r--gcc/optabs.h3
-rw-r--r--gcc/po/ChangeLog4
-rw-r--r--gcc/po/sv.po1847
-rw-r--r--gcc/range-op-float.cc31
-rw-r--r--gcc/range-op-mixed.h18
-rw-r--r--gcc/range-op.cc38
-rw-r--r--gcc/range-op.h13
-rw-r--r--gcc/testsuite/ChangeLog344
-rw-r--r--gcc/testsuite/cobol.dg/group1/simple-if.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob75
-rw-r--r--gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out21
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob113
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out17
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob73
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob35
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob27
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob25
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob45
-rw-r--r--gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob38
-rw-r--r--gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out7
-rw-r--r--gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob28
-rw-r--r--gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob32
-rw-r--r--gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob76
-rw-r--r--gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Complex_IF.cob23
-rw-r--r--gcc/testsuite/cobol.dg/group2/Complex_IF.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Concatenation_operator.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob23
-rw-r--r--gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob30
-rw-r--r--gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob64
-rw-r--r--gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out9
-rw-r--r--gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob21
-rw-r--r--gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob25
-rw-r--r--gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob43
-rw-r--r--gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob164
-rw-r--r--gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out24
-rw-r--r--gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob40
-rw-r--r--gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob107
-rw-r--r--gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out15
-rw-r--r--gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob28
-rw-r--r--gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out11
-rw-r--r--gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob28
-rw-r--r--gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out11
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob34
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob31
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out6
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob35
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out6
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob35
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out6
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob23
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob35
-rw-r--r--gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob27
-rw-r--r--gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob40
-rw-r--r--gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob40
-rw-r--r--gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out10
-rw-r--r--gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob9
-rw-r--r--gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob28
-rw-r--r--gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob44
-rw-r--r--gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob11
-rw-r--r--gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob38
-rw-r--r--gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob29
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob27
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob96
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out22
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob48
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob44
-rw-r--r--gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob27
-rw-r--r--gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob10
-rw-r--r--gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob9
-rw-r--r--gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob104
-rw-r--r--gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob20
-rw-r--r--gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob26
-rw-r--r--gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob56
-rw-r--r--gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob45
-rw-r--r--gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob35
-rw-r--r--gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob42
-rw-r--r--gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out20
-rw-r--r--gcc/testsuite/cobol.dg/group2/_-static__compilation.cob10
-rw-r--r--gcc/testsuite/cobol.dg/group2/_-static__compilation.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob34
-rw-r--r--gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out3
-rw-r--r--gcc/testsuite/g++.dg/abi/base-defaulted2.C12
-rw-r--r--gcc/testsuite/gcc.dg/html-output/missing-semicolon.py7
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c15
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py68
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py35
-rw-r--r--gcc/testsuite/gcc.dg/plugin/plugin.exp1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr119131-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr120211-1.c20
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c3
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp124.c31
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c12
-rw-r--r--gcc/testsuite/gcc.target/arm/ivopts.c3
-rw-r--r--gcc/testsuite/gcc.target/arm/mmx-1.c26
-rw-r--r--gcc/testsuite/gcc.target/arm/mmx-2.c166
-rw-r--r--gcc/testsuite/gcc.target/arm/pr64208.c25
-rw-r--r--gcc/testsuite/gcc.target/arm/pr79145.c16
-rw-r--r--gcc/testsuite/gcc.target/arm/pr99724.c31
-rw-r--r--gcc/testsuite/gcc.target/arm/pr99786.c30
-rw-r--r--gcc/testsuite/gcc.target/arm/unsigned-extend-2.c33
-rw-r--r--gcc/testsuite/gcc.target/i386/pr91446.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr99881.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/pr54240.c2
-rw-r--r--gcc/testsuite/gcc.target/nvptx/march-map=sm_61.c4
-rw-r--r--gcc/testsuite/gcc.target/nvptx/march-map=sm_62.c4
-rw-r--r--gcc/testsuite/gcc.target/nvptx/march=sm_61.c19
-rw-r--r--gcc/testsuite/gcc.target/nvptx/mptx=5.0.c19
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-49.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-50.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-51.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-52.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-53.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-54.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-ss-1.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-ss-2.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-zilsd-1.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-zilsd-2.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-zilsd-3.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h31
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u64.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u32-from-u64.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u64.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u32.c76
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u64.c76
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u32-from-u64.c76
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u16.c76
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u32.c76
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u64.c76
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_arith.h22
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c21
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c21
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c22
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c19
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c19
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c19
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u32.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u64.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u32-from-u64.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c26
-rw-r--r--gcc/testsuite/gfortran.dg/interface_61.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_array_subref.f9048
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/plugin/fail/assignvalue.mod25
-rw-r--r--gcc/testsuite/gm2.dg/doc/examples/plugin/fail/doc-examples-plugin-fail.exp25
-rw-r--r--gcc/testsuite/lib/gm2-dg.exp37
-rw-r--r--gcc/testsuite/lib/target-supports.exp27
-rw-r--r--gcc/tree-ssanames.cc2
-rw-r--r--gcc/tree-vect-stmts.cc1
-rw-r--r--gcc/value-range.cc57
317 files changed, 12329 insertions, 10368 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f4aa01b..d597002 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,370 @@
+2025-05-13 Andrew MacLeod <amacleod@redhat.com>
+
+ * tree-ssanames.cc (set_bitmask): Use int_range_max for temps.
+ * value-range.cc (irange::set_range_from_bitmask): Handle all
+ trailing zero values.
+
+2025-05-12 Pan Li <pan2.li@intel.com>
+
+ * match.pd: Add form 7 matching pattern for unsigned integer
+ SAT_ADD.
+
+2025-05-12 Andrew Pinski <quic_apinski@quicinc.com>
+
+ * config/aarch64/aarch64.md (cmov<mode>6): Remove.
+
+2025-05-12 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/120230
+ * optabs.cc (can_compare_p): Remove support for ccp_cmov.
+ * optabs.def (cmov_optab): Remove.
+ * optabs.h (can_compare_purpose): Remove ccp_cmov.
+
+2025-05-12 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/120231
+ * range-op-float.cc (operator_cast::fold_range): New variants.
+ (operator_cast::op1_range): Likewise.
+ * range-op-mixed.h (operator_cast::fold_range): Likewise.
+ (operator_cast::op1_range): Likewise
+ * range-op.cc (range_op_handler::fold_range): Add RO_FIF dispatch.
+ (range_op_handler::op1_range): Add RO_IFF and RO_FII patterns.
+ (range_operator::fold_range): Provide new variant default.
+ (range_operator::op1_range): Likewise.
+ * range-op.h (range_operator): Add new variant methods.
+
+2025-05-12 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/120188
+ * doc/gm2.texi (Semantic checking): Add -fm2-plugin command line option.
+
+2025-05-12 Thomas Schwinge <tschwinge@baylibre.com>
+
+ * config/nvptx/nvptx-sm.def: Add '61'.
+ * config/nvptx/nvptx-gen.h: Regenerate.
+ * config/nvptx/nvptx-gen.opt: Likewise.
+ * config/nvptx/nvptx.cc (first_ptx_version_supporting_sm): Adjust.
+ * config/nvptx/nvptx.opt (-march-map=sm_61, -march-map=sm_62):
+ Likewise.
+ * config.gcc: Likewise.
+ * doc/invoke.texi (Nvidia PTX Options): Document '-march=sm_61'.
+ * config/nvptx/gen-multilib-matches-tests: Extend.
+
+2025-05-12 Thomas Schwinge <tschwinge@baylibre.com>
+
+ * config/nvptx/nvptx-opts.h (enum ptx_version): Add
+ 'PTX_VERSION_5_0'.
+ * config/nvptx/nvptx.cc (ptx_version_to_string)
+ (ptx_version_to_number): Adjust.
+ * config/nvptx/nvptx.h (TARGET_PTX_5_0): New.
+ * config/nvptx/nvptx.opt (Enum(ptx_version)): Add 'EnumValue'
+ '5.0' for 'PTX_VERSION_5_0'.
+ * doc/invoke.texi (Nvidia PTX Options): Document '-mptx=5.0'.
+
+2025-05-12 Dongyan Chen <chendongyan@isrc.iscas.ac.cn>
+
+ * common/config/riscv/riscv-common.cc
+ (riscv_subset_list::check_conflict_ext): New extension.
+ * config/riscv/riscv.opt: Ditto.
+
+2025-05-12 Dongyan Chen <chendongyan@isrc.iscas.ac.cn>
+
+ * common/config/riscv/riscv-common.cc
+ (riscv_subset_list::check_conflict_ext): New extension.
+ * config/riscv/riscv.opt: Ditto.
+
+2025-05-12 Richard Biener <rguenther@suse.de>
+
+ * lto-streamer-out.cc (hash_tree): Hash TYPE_MODE_RAW.
+ When offloading hash modes as VOIDmode for aggregates
+ and vectors.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * doc/extend.texi: Remove the iwmmxt intrinsics.
+ * doc/md.texi: Remove the iwmmxt-related constraints.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/aout.h (REGISTER_NAMES): Remove iwmmxt registers.
+ * config/arm/arm.h (FIRST_IWMMXT_REGNUM): Delete.
+ (LAST_IWMMXT_REGNUM): Delete.
+ (FIRST_IWMMXT_GR_REGNUM): Delete.
+ (LAST_IWMMXT_GR_REGNUM): Delete.
+ (IS_IWMMXT_REGNUM): Delete.
+ (IS_IWMMXT_GR_REGNUM): Delete.
+ (FRAME_POINTER_REGNUM): Define relative to CC_REGNUM.
+ (ARG_POINTER_REGNUM): Define relative to FRAME_POINTER_REGNUM.
+ (FIRST_PSEUDO_REGISTER): Adjust.
+ (WREG): Delete.
+ (WGREG): Delete.
+ (REG_ALLOC_ORDER): Remove iWMMX registers.
+ (enum reg_class): Remove iWMMX register classes.
+ (REG_CLASS_NAMES): Likewise.
+ (REG_CLASS_CONTENTS): Remove iWMMX registers.
+ * config/arm/arm.md (CC_REGNUM): Adjust value.
+ (VFPCC_RENGUM): Likewise.
+ (APSRQ_REGNUM): Likewise.
+ (APSRGE_REGNUM): Likewise.
+ (VPR_REGNUM): Likewise.
+ (RA_AUTH_CODE): Likewise.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm-cpus.in (feature iwmmxt, feature iwmmxt2): Delete.
+ * config/arm/arm-protos.h (arm_output_iwmmxt_shift_immediate): Delete.
+ (arm_output_iwmmxt_tinsr): Delete.
+ (arm_arch_iwmmxt): Delete.
+ (arm_arch_iwmmxt2): Delete.
+ * config/arm/arm.h (TARGET_IWMMXT): Delete.
+ (TARGET_IWMMXT2): Delete.
+ (TARGET_REALLY_IWMMXT): Delete.
+ (TARGET_REALLY_IWMMXT2): Delete.
+ (VALID_IWMMXT_REG_MODE): Delete.
+ (ARM_HAVE_V8QI_ARITH): Remove iWMMXT.
+ (ARM_HAVE_V4HI_ARITH): Likewise.
+ (ARM_HAVE_V2SI_ARITH): Likewise.
+ (ARM_HAVE_V8QI_LDST): Likewise.
+ (ARM_HAVE_V4HI_LDST): Likewise.
+ (ARM_HAVE_V2SI_LDST): Likewise.
+ (SECONDARY_OUTPUT_RELOAD_CLASS): Remove iWMMXT cases.
+ (SECONDARY_INPUT_RELOAD_CLASS): Likewise.
+ * config/arm/arm.cc (arm_arch_iwmmxt): Delete.
+ (arm_arch_iwmmxt2): Delete.
+ (arm_option_reconfigure_globals): Don't initialize them.
+ (arm_register_move_cost): Remove costs for iwmmxt.
+ (struct minipool_node): Update comment.
+ (output_move_double): Likewise
+ (output_return_instruction): Likewise.
+ (arm_print_operand, cases 'U' and 'w'): Report an error if
+ used.
+ (arm_regno_class): Remove iWMMXT cases.
+ (arm_debugger_regno): Remove iWMMXT cases.
+ (arm_output_iwmmxt_shift_immediate): Delete.
+ (arm_output_iwmmxt_tinsr): Delete.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm-c.cc (arm_cpu_builtins): Remove predefines
+ for __IWWMXT__, __IWMMXT2__ and __ARM_WMMX.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/iterators.md (VMMX, VMMX2): Remove mode iterators.
+ (MMX_char): Remove mode iterator attribute.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm.md (core_cycles): Remove iwmmxt attributes.
+ * config/arm/types.md (autodetect_type): Likewise.
+ * config/arm/marvell-f-iwmmxt.md: Removed.
+ * config/arm/t-arm: Remove marvell-f-iwmmxt.md
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm.cc (arm_option_check_internal): Remove
+ IWMMXT check.
+ (arm_options_perform_arch_sanity_checks): Likewise.
+ (use_return_insn): Likewise.
+ (arm_init_cumulative_args): Likewise.
+ (arm_legitimate_index_p): Likewise.
+ (thumb2_legitimate_index_p): Likewise.
+ (arm_compute_save_core_reg_mask): Likewise.
+ (output_return_instruction): Likewise.
+ (arm_compute_frame_layout): Likewise.
+ (arm_save_coproc_regs): Likewise.
+ (arm_hard_regno_mode_ok): Likewise.
+ (arm_expand_epilogue_apcs_frame): Likewise.
+ (arm_expand_epilogue): Likewise.
+ (arm_vector_mode_supported_p): Likewise.
+ (arm_preferred_simd_mode): Likewise.
+ (arm_conditional_register_usage): Likewise.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config.gcc (arm, --with-abi): Remove iwmmxt abi option.
+ * config/arm/arm.opt (enum ARM_ABI_IWMMXT): Remove.
+ * config/arm/arm.h (TARGET_IWMMXT_ABI): Delete.
+ (enum arm_pcs): Remove ARM_PCS_AAPCS_IWMMXT.
+ (FUNCTION_ARG_REGNO_P): Remove IWMMXT ABI support.
+ (CUMULATIVE_ARGS): Remove iwmmxt_nregs.
+ * config/arm/arm.cc (arm_options_perform_arch_sanity_checks):
+ Remove IWMMXT ABI checks.
+ (arm_libcall_value_1): Likewise.
+ (arm_function_value_regno_p): Likewise.
+ (arm_apply_result_size): Remove adjustment for IWMMXT ABI.
+ (arm_function_arg): Remove IWMMXT ABI support.
+ (arm_arg_partial_bytes): Likewise.
+ (arm_function_arg_advance): Likewise.
+ (arm_init_cumulative_args): Don't initialize iwmmxt_nregs.
+ * doc/invoke.texi (arm -mabi): Remove mention of the iwmmxt
+ ABI option.
+ * config/arm/arm-opts.h (enum arm_abi_type): Remove ARM_ABI_IWMMXT.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm.md(attr arch): Remove iwmmxt and iwmmxt2.
+ Remove checks based on TARGET_REALLY_IWMMXT2 from all split
+ patterns.
+ (arm_movdi): Likewise.
+ (*arm_movt): Likewise.
+ (arch_enabled): Remove test for iwmmxt2.
+ * config/arm/constraints.md (y, z): Remove register constraints.
+ (Uy): Remove memory constraint.
+ * config/arm/thumb2.md (thumb2_pop_single): Remove check for
+ IWMMXT.
+ * config/arm/vec-common.md (mov<mode>): Remove check for IWMMXT.
+ (mul<mode>3): Likewise.
+ (xor<mode>3): Likewise.
+ (<absneg_str><mode>2): Likewise.
+ (@movmisalign<mode>): Likewise.
+ (@mve_<mve_insn>q_<supf><mode>): Likewise.
+ (vashl<mode>3): Likewise.
+ (vashr<mode>3): Likewise.
+ (vlshr<mode>3): Likewise.
+ (uavg<mode>3_ceil): Likewise.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm.md: Don't include iwmmxt.md.
+ * config/arm/t-arm (MD_INCLUDES): Remove iwmmxt*.md.
+ * config/arm/iwmmxt.md: Removed.
+ * config/arm/iwmmxt2.md: Removed.
+ * config/arm/unspecs.md: Remove comment referring to
+ iwmmxt2.md.
+ (enum unspec): Remove iWMMXt unspec values.
+ (enum unspecv): Likewise.
+ * config/arm/predicates.md (imm_or_reg_operand): Delete.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm-builtins.cc (enum arm_builtins): Delete iWMMX
+ builtin values.
+ (bdesc_2arg): Likewise.
+ (bdesc_1arg): Likewise.
+ (arm_init_iwmmxt_builtins): Delete.
+ (arm_init_builtins): Don't call arm_init_iwmmxt_builtins.
+ (safe_vector_operand): Use __builtin_unreachable instead of emitting
+ an iwmmxt builtin.
+ (arm_general_expand_builtin): Remove iWMMX builtins support.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm-cpus.in (arch iwmmxt): treat in the same
+ way as we would treat XScale.
+ (arch iwmmxt2): Likewise.
+ (cpu xscale): Add aliases for iwmmxt and iwmmxt2.
+ (cpu iwmmxt): Delete.
+ (cpu iwmmxt2): Delete.
+ * config/arm/arm-generic.md (load_ldsched_xscale): Remove references
+ to iwmmxt.
+ (load_ldsched): Likewise.
+ * config/arm/arm-tables.opt: Regenerated.
+ * config/arm/arm-tune.md: Regenerated.
+ * doc/sourcebuild.texi (arm_iwmmxt_ok): Delete.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/arm.h (SECONDARY_OUTPUT_RELOAD_CLASS): Add parentheis
+ and re-indent.
+ (SECONDARY_INPUT_RELOAD_CLASS): Likewise.
+
+2025-05-12 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/120228
+ * config/i386/i386-features.cc (ix86_place_single_vector_set):
+ Remove df_insn_rescan after emit_insn_*.
+ (remove_partial_avx_dependency): Likewise.
+ (replace_vector_const): Likewise.
+
+2025-05-11 Jan Hubicka <hubicka@ucw.cz>
+
+ * config/i386/i386.cc (ix86_widen_mult_cost): Use sse_op to cost
+ SSE integer addition.
+ (ix86_multiplication_cost): Use COSTS_N_INSNS (...)/2 to cost sse
+ loads.
+ (ix86_shift_rotate_cost): Likewise.
+ (ix86_vector_costs::add_stmt_cost): Likewise.
+
+2025-05-11 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
+
+ * config/xtensa/xtensa.cc (xtensa_register_move_cost):
+ Add appropriate move costs between AR_REGS and FP_REGS.
+
+2025-05-11 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/120211
+ * tree-vect-stmts.cc (vect_stmt_relevant_p): Only add PHIs
+ from the loop header to LOOP_VINFO_EARLY_BREAKS_LIVE_IVS.
+
+2025-05-11 Jiawei <jiawei@iscas.ac.cn>
+
+ * common/config/riscv/riscv-common.cc: New profile.
+
+2025-05-11 Jiawei <jiawei@iscas.ac.cn>
+
+ * common/config/riscv/riscv-common.cc (struct riscv_profiles): New struct.
+ (riscv_subset_list::parse_profiles): New parser.
+ (riscv_subset_list::parse_base_ext): Ditto.
+ * config/riscv/riscv-subset.h: New def.
+ * doc/invoke.texi: New option descriptions.
+
+2025-05-10 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/92080
+ PR target/117839
+ * config/i386/i386-features.cc (replace_vector_const): Change
+ dest to src.
+
+2025-05-10 Jan Hubicka <hubicka@ucw.cz>
+
+ * config/i386/i386-features.cc
+ (general_scalar_chain::vector_const_cost): Add BB parameter; handle
+ size costs; use COSTS_N_INSNS to compute move costs.
+ (general_scalar_chain::compute_convert_gain): Use optimize_bb_for_size
+ instead of optimize_insn_for size; use COSTS_N_INSNS to compute move costs;
+ update calls of general_scalar_chain::vector_const_cost; use
+ ix86_cost->integer_to_sse.
+ (timode_immed_const_gain): Add bb parameter; use
+ optimize_bb_for_size_p.
+ (timode_scalar_chain::compute_convert_gain): Use optimize_bb_for_size_p.
+ * config/i386/i386-features.h (class general_scalar_chain): Update
+ prototype of vector_const_cost.
+ * config/i386/i386.h (struct processor_costs): Add integer_to_sse.
+ * config/i386/x86-tune-costs.h (struct processor_costs): Copy
+ sse_to_integer to integer_to_sse everywhere.
+
+2025-05-10 Filip Kastl <fkastl@suse.cz>
+
+ PR tree-optimization/120080
+ * tree-switch-conversion.cc (bit_test_cluster::find_bit_tests):
+ Replace assert with return.
+
+2025-05-10 Shreya Munnangi <smunnangi1@ventanamicro.com>
+
+ * config/riscv/iterators.md (OPTAB): New iterator.
+ * config/riscv/predicates.md (arith_or_zbs_operand): Remove.
+ (reg_or_const_int_operand): New predicate.
+ * config/riscv/riscv-protos.h (synthesize_ior_xor): Prototype.
+ * config/riscv/riscv.cc (synthesize_ior_xor): New function.
+ * config/riscv/riscv.md (ior/xor expander): Use synthesize_ior_xor.
+
+2025-05-10 LIU Hao <lh_mouse@126.com>
+
+ PR target/111107
+ * config/i386/cygming.h (PREFERRED_STACK_BOUNDARY_DEFAULT): Override
+ definition from i386.h.
+ (STACK_REALIGN_DEFAULT): Undefine, as it no longer has an effect.
+ * config/i386/i386.cc (ix86_update_stack_boundary): Force minimum
+ 128-bit alignment if `force_align_arg_pointer`.
+
+2025-05-10 Anton Blanchard <antonb@tenstorrent.com>
+
+ * config/riscv/bitmanip.md (crc_rev<ANYI1:mode><ANYI:mode>4): Check
+ TARGET_ZVBC.
+ * config/riscv/riscv.cc (expand_crc_using_clmul): Emit code using
+ vclmul if TARGET_ZVBC.
+
2025-05-09 Eric Botcazou <ebotcazou@adacore.com>
* vr-values.cc (simplify_using_ranges::simplify) <BIT_AND_EXPR>:
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 21a86ae..83f5cb2 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250510
+20250513
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index e3af923..72d1322 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3703,7 +3703,7 @@ TEXI_GCC_FILES = gcc.texi gcc-common.texi gcc-vers.texi frontends.texi \
contribute.texi compat.texi funding.texi gnu.texi gpl_v3.texi \
fdl.texi contrib.texi cppenv.texi cppopts.texi avr-mmcu.texi \
implement-c.texi implement-cxx.texi gcov-tool.texi gcov-dump.texi \
- lto-dump.texi
+ lto-dump.texi riscv-ext.texi
# we explicitly use $(srcdir)/doc/tm.texi here to avoid confusion with
# the generated tm.texi; the latter might have a more recent timestamp,
diff --git a/gcc/cobol/ChangeLog b/gcc/cobol/ChangeLog
index 9f6a58c..87aeaba 100644
--- a/gcc/cobol/ChangeLog
+++ b/gcc/cobol/ChangeLog
@@ -1,3 +1,56 @@
+2025-05-10 Robert Dubner <rdubner@symas.com>
+
+ PR cobol/119337
+ * Make-lang.in: Change how $(FLEX) is invoked.
+ * cdf.y: Change parser tokens.
+ * gcobc: Changed how name is inferred for PR119337
+ * gcobol.1: Documentation for SOURCE format heuristic
+ * genapi.cc: Eliminate __gg__odo_violation.
+ (parser_display_field): Change comment.
+ * genutil.cc:Eliminate __gg__odo_violation.
+ (REFER): New macro for analyzing subscript/refmod calculations.
+ (get_integer_value): Likewise.
+ (get_data_offset): Eliminate __gg__odo_violation.
+ (scale_by_power_of_ten_N): Eliminate unnecessary var_decl_rdigits operation.
+ (refer_is_clean): Check for FldLiteralN.
+ (REFER_CHECK): Eliminate.
+ (refer_refmod_length): Streamline var_decl_rdigits processing.
+ (refer_fill_depends): Likewise.
+ (refer_offset): Streamline processing when FldLiteralN.
+ (refer_size): Tag with REFER macro.
+ (refer_size_dest): Likewise.
+ (refer_size_source): Likewise.
+ * genutil.h (get_integer_value): Delete declaration for odo_violation;
+ change comment for get_integer_value
+ (REFER_CHECK): Delete declaration.
+ (refer_check): Delete #define.
+ * lexio.cc (is_fixed_format): Changes for source format auto-detect.
+ (is_reference_format): Likewise.
+ (check_source_format_directive): Likewise.
+ (valid_sequence_area): Likewise.
+ (is_p): Likewise.
+ (is_program_id): Likewise.
+ (likely_nist_file): Likewise.
+ (infer_reference_format): Likewise.
+ (cdftext::free_form_reference_format): Likewise.
+ * parse.y: Token changes.
+ * parse_ante.h (class tokenset_t): Likewise.
+ (class current_tokens_t): Likewise.
+ (cmd_or_env_special_of): Likewise.
+ * scan.l: Likewise.
+ * scan_ante.h (bcomputable): Likewise.
+ (keyword_alias_add): Likewise.
+ (struct bint_t): Likewise.
+ (binary_integer_usage): Likewise.
+ (binary_integer_usage_of): Likewise.
+ * scan_post.h (start_condition_str): Likewise.
+ * symbols.cc (symbol_table_init): Formatting.
+ * symbols.h (struct cbl_field_data_t): Add "input" method to field_data_t.
+ (keyword_alias_add): Add forward declaration.
+ (binary_integer_usage_of): Likewise.
+ * token_names.h: Change list of tokens.
+ * util.cc (iso_cobol_word): Change list of COBOL reserved words.
+
2025-05-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR cobol/119217
diff --git a/gcc/cobol/Make-lang.in b/gcc/cobol/Make-lang.in
index 9b74dd3..a474123 100644
--- a/gcc/cobol/Make-lang.in
+++ b/gcc/cobol/Make-lang.in
@@ -157,7 +157,7 @@ cobol/cdf.cc: cobol/cdf.y
FLEX_WARNING = warning, dangerous trailing context
cobol/scan.cc: cobol/scan.l
- $(FLEX) -o$@ $(LFLAGS) $< >$@~ 2>&1
+ $(FLEX) -o$@ $(LFLAGS) $< 2>$@~ || { cat $@~ >&1; exit 1; }
awk '! /$(FLEX_WARNING)/ {print > "/dev/stderr"; nerr++} \
END {print "$(FLEX):", NR, "messages" > "/dev/stderr"; \
exit nerr}' $@~
diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y
index 994bf6a..7680f48 100644
--- a/gcc/cobol/cdf.y
+++ b/gcc/cobol/cdf.y
@@ -193,7 +193,7 @@ apply_cdf_turn( const exception_turn_t& turn ) {
%type <cdfarg> namelit name_any name_one
%type <string> name subscript subscripts inof
%token <boolean> BOOL
-%token <number> FEATURE 363 NUMBER 302 EXCEPTION_NAME 280 "EXCEPTION NAME"
+%token <number> FEATURE 365 NUMBER 303 EXCEPTION_NAME 280 "EXCEPTION NAME"
%type <cdfval> cdf_expr
%type <cdfval> cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
@@ -203,48 +203,48 @@ apply_cdf_turn( const exception_turn_t& turn ) {
%type <file> filename
%type <files> filenames
-%token BY 476
-%token COPY 360
-%token CDF_DISPLAY 382 ">>DISPLAY"
-%token IN 595
+%token BY 478
+%token COPY 362
+%token CDF_DISPLAY 384 ">>DISPLAY"
+%token IN 597
%token NAME 286
-%token NUMSTR 304 "numeric literal"
-%token OF 676
-%token PSEUDOTEXT 711
-%token REPLACING 733
-%token LITERAL 297
-%token SUPPRESS 374
-
-%token LSUB 365 "("
-%token SUBSCRIPT 373 RSUB 370 ")"
-
-%token CDF_DEFINE 381 ">>DEFINE"
-%token CDF_IF 383 ">>IF"
-%token CDF_ELSE 384 ">>ELSE"
-%token CDF_END_IF 385 ">>END-IF"
-%token CDF_EVALUATE 386 ">>EVALUATE"
-%token CDF_WHEN 387 ">>WHEN"
-%token CDF_END_EVALUATE 388 ">>END-EVALUATE"
-
-%token AS 458 CONSTANT 359 DEFINED 361
+%token NUMSTR 305 "numeric literal"
+%token OF 678
+%token PSEUDOTEXT 713
+%token REPLACING 735
+%token LITERAL 298
+%token SUPPRESS 376
+
+%token LSUB 367 "("
+%token SUBSCRIPT 375 RSUB 372 ")"
+
+%token CDF_DEFINE 383 ">>DEFINE"
+%token CDF_IF 385 ">>IF"
+%token CDF_ELSE 386 ">>ELSE"
+%token CDF_END_IF 387 ">>END-IF"
+%token CDF_EVALUATE 388 ">>EVALUATE"
+%token CDF_WHEN 389 ">>WHEN"
+%token CDF_END_EVALUATE 390 ">>END-EVALUATE"
+
+%token AS 460 CONSTANT 361 DEFINED 363
%type <boolean> DEFINED
-%token OTHER 688 PARAMETER_kw 366 "PARAMETER"
-%token OFF 677 OVERRIDE 367
-%token THRU 929
-%token TRUE_kw 803 "True"
+%token OTHER 690 PARAMETER_kw 368 "PARAMETER"
+%token OFF 679 OVERRIDE 369
+%token THRU 931
+%token TRUE_kw 805 "True"
-%token CALL_COBOL 389 "CALL"
-%token CALL_VERBATIM 390 "CALL (as C)"
+%token CALL_COBOL 391 "CALL"
+%token CALL_VERBATIM 392 "CALL (as C)"
-%token TURN 805 CHECKING 486 LOCATION 639 ON 679 WITH 831
+%token TURN 807 CHECKING 488 LOCATION 641 ON 681 WITH 833
-%left OR 930
-%left AND 931
-%right NOT 932
-%left '<' '>' '=' NE 933 LE 934 GE 935
+%left OR 932
+%left AND 933
+%right NOT 934
+%left '<' '>' '=' NE 935 LE 936 GE 937
%left '-' '+'
%left '*' '/'
-%right NEG 937
+%right NEG 939
%define api.prefix {ydf}
%define api.token.prefix{YDF_}
@@ -448,7 +448,6 @@ cdf_if: CDF_IF cdf_cond_expr {
scanner_parsing(YDF_CDF_IF, $2);
}
| CDF_IF error {
- ////if( scanner_parsing() ) yyerrok;
} CDF_END_IF { // not pushed, don't pop
if( ! scanner_parsing() ) YYACCEPT;
}
@@ -467,18 +466,17 @@ cdf_eval_obj: cdf_cond_expr
;
cdf_cond_expr: BOOL
- | NAME DEFINED[maybe]
+ | NAME DEFINED
{
auto p = dictionary.find($1);
bool found = p != dictionary.end();
- if( !$maybe ) found = ! found;
- if( ! found ) {
- $$ = !$2;
- dbgmsg("CDF: %s not found in dictionary (result %s)",
+ if( !$DEFINED ) found = ! found;
+ $$ = found;
+ if( found ) {
+ dbgmsg("CDF: %s found in dictionary (result %s)",
$1, $$? "true" : "false");
} else {
- $$ = $2;
- dbgmsg("CDF: %s found in dictionary (result %s)",
+ dbgmsg("CDF: %s not found in dictionary (result %s)",
$1, $$? "true" : "false");
}
}
diff --git a/gcc/cobol/gcobc b/gcc/cobol/gcobc
index 93e1bd302..1d469ed 100755
--- a/gcc/cobol/gcobc
+++ b/gcc/cobol/gcobc
@@ -142,6 +142,11 @@ do
if [ "$pending_arg" ]
then
+ case $pending_arg in
+ -o) output_name="$opt" # capture named output file
+ ;;
+ esac
+
opts="$opts $pending_arg $opt"
pending_arg=
continue
@@ -392,7 +397,13 @@ do
;;
# -main
# -nomain
- # -o
+
+ -o) pending_arg=$opt
+ ;;
+ -o*) output_name=$opt ## non-empty means do not infer
+ opts="$opts $opt"
+ ;;
+
# -O0, -Ox
-O | -O2 | -Os) warn "$opt"
;;
@@ -432,7 +443,23 @@ do
-x) mode=
;;
- *) opts="$opts $opt" # pass through
+ -) output_name=a.out # nonnull to prevent overriding gcc default
+ opts="$opts /dev/stdin"
+ ;;
+
+ *) if [ -z "$output_name" ] # first non-option argument is source file name
+ then
+ output_name=$(basename ${opt%.*})
+ case $mode in
+ -c) output_name="$output_name".o
+ ;;
+ -shared)
+ output_name="$output_name".so
+ ;;
+ esac
+ opts="$opts -o $output_name"
+ fi
+ opts="$opts $opt" # pass through
;;
esac
done
diff --git a/gcc/cobol/gcobol.1 b/gcc/cobol/gcobol.1
index 4377c14..0c3d2c1 100644
--- a/gcc/cobol/gcobol.1
+++ b/gcc/cobol/gcobol.1
@@ -97,8 +97,9 @@ Define a CDF name (for use with
to have the value of
.Ar expr .
.It Fl E
-Write the CDF-processed \*[lang] input to standard output in free-form
-reference format. Certain non-\*[lang] markers are included in the
+Write the CDF-processed \*[lang] input to standard output in
+.Em "free-form reference format".
+Certain non-\*[lang] markers are included in the
output to indicate where copybook files were included. For
line-number consistency with the input, blank lines are retained.
.Pp
@@ -147,13 +148,13 @@ and
in that order.
.It Fl ffixed-form
Use strict
-.Em "Reference Format"
+.Em "fixed-form reference format"
in reading the \*[lang] input:
72-character lines, with a 6-character sequence area, and an indicator
column. Data past column 72 are ignored.
.It Fl ffree-form
Force the \*[lang] input to be interpreted as
-.Em "free format" .
+.Em "free-form reference format".
Line breaks are insignificant, except that
.Ql *
at the start of a line acts as a comment marker.
@@ -187,12 +188,23 @@ the entire program could appear on one line.
.Pp
By default,
.Nm
-auto-detects the source code format by examining the
-.Em "sequence number area"
-of the first line of the first file: if those characters are all
-digits or blanks, the file is assumed to be in
-.Em "reference format" ,
+auto-detects the source code format by examining the line that
+contains the text "program-id". When there are characters on past column 72
+on that line, the file is assumed to be in
+.Em "extended source format",
with the indicator area in column 7.
+Otherwise, columns 1-6 are examined. If those characters are all digits
+or blanks, the file is assumed to be in
+.Em "fixed-form reference format",
+also with the indicator in column 7.
+
+If not auto-detected as
+.Em "fixed-form reference format"
+or
+.Em "extended source format",
+the file is assumed to be in
+.Em "free-form reference format".
+
.Pp
.
.It Fl fcobol-exceptions Ar exception Op Ns , Ns Ar exception Ns ...
@@ -1000,9 +1012,12 @@ to standard error as a warning message.
may be one of:
.Bl -tag -compact
.It Sy FIXED
-Source conforms to \*[lang] Reference Format with unlimited line length.
+Source conforms to \*[lang]
+.Em "fixed-form reference format"
+with unlimited line length.
.It Sy FREE
-Line endings and indentation are ignored by the compiler, except that a
+Source conforms to \*[lang]
+.Em "free-form reference format".
.Ql "*"
at the beginning of a line is recognized as a comment.
.El
diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 204b1ae..70df86a 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -3564,7 +3564,6 @@ parser_enter_file(const char *filename)
SET_VAR_DECL(var_decl_default_compute_error , INT , "__gg__default_compute_error");
SET_VAR_DECL(var_decl_rdigits , INT , "__gg__rdigits");
- SET_VAR_DECL(var_decl_odo_violation , INT , "__gg__odo_violation");
SET_VAR_DECL(var_decl_unique_prog_id , SIZE_T , "__gg__unique_prog_id");
SET_VAR_DECL(var_decl_entry_location , VOID_P , "__gg__entry_pointer");
@@ -5100,6 +5099,16 @@ parser_display_field(cbl_field_t *field)
DISPLAY_NO_ADVANCE);
}
+/*
+ * The first parameter to parser_display is the "device" upon which to display
+ * the data. Besides normal devices, these may include elements that define the
+ * Unix command line and environment:
+ * 1. ARG_NUM_e, the ARGUMENT-NUMBER
+ * 2. ARG_VALUE_e, the ARGUMENT-VALUE
+ * 3. ENV_NAME_e, the ENVIRONMENT-NAME
+ * 4. ENV_VALUE_e, the ENVIRONMENT-VALUE
+ * that need special care and feeding.
+ */
void
parser_display( const struct cbl_special_name_t *upon,
struct cbl_refer_t refs[],
diff --git a/gcc/cobol/genutil.cc b/gcc/cobol/genutil.cc
index 94e57f4..3235c38 100644
--- a/gcc/cobol/genutil.cc
+++ b/gcc/cobol/genutil.cc
@@ -68,7 +68,6 @@ tree var_decl_exception_paragraph; // const char *__gg__exception_paragraph;
tree var_decl_default_compute_error; // int __gg__default_compute_error;
tree var_decl_rdigits; // int __gg__rdigits;
-tree var_decl_odo_violation; // int __gg__odo_violation;
tree var_decl_unique_prog_id; // size_t __gg__unique_prog_id;
tree var_decl_entry_location; // This is for managing ENTRY statements
@@ -107,6 +106,18 @@ tree var_decl_treeplet_4s; // SIZE_T_P , "__gg__treeplet_4s"
tree var_decl_nop; // int __gg__nop;
tree var_decl_main_called; // int __gg__main_called;
+#if 0
+#define REFER
+#else
+#define REFER do \
+ { \
+ if( getenv("REFER") ) \
+ { \
+ fprintf(stderr, "REFER %s\n", __func__); \
+ } \
+ }while(0);
+#endif
+
int
get_scaled_rdigits(cbl_field_t *field)
{
@@ -231,8 +242,6 @@ get_integer_value(tree value,
}
-
-
Analyze();
// Call this routine when you know the result has to be an integer with no
// rdigits. This routine became necessary the first time I saw an
@@ -287,6 +296,11 @@ static tree
get_data_offset(cbl_refer_t &refer,
int *pflags = NULL)
{
+ REFER;
+ if( getenv("REFER") )
+ {
+ fprintf(stderr, " %s %s\n", refer.field->name, refer.field->data.initial);
+ }
Analyze();
// This routine returns a tree which is the size_t offset to the data in the
// refer/field
@@ -351,6 +365,7 @@ get_data_offset(cbl_refer_t &refer,
{
// The subscript isn't an integer
set_exception_code(ec_bound_subscript_e);
+ gg_assign(var_decl_rdigits, integer_zero_node);
}
ELSE
{
@@ -408,7 +423,7 @@ get_data_offset(cbl_refer_t &refer,
get_integer_value(value64, depending_on);
IF( subscript, ge_op, value64 )
{
- gg_assign(var_decl_odo_violation, integer_one_node);
+ set_exception_code(ec_bound_odo_e);
}
ELSE
ENDIF
@@ -439,6 +454,7 @@ get_data_offset(cbl_refer_t &refer,
{
// refmod offset is not an integer, and has to be
set_exception_code(ec_bound_ref_mod_e);
+ gg_assign(var_decl_rdigits, integer_zero_node);
}
ELSE
ENDIF
@@ -1139,17 +1155,9 @@ scale_by_power_of_ten_N(tree value,
Analyzer.Message("takes int N");
if( N == 0 )
{
- if( check_for_fractional )
- {
- gg_assign(var_decl_rdigits, integer_zero_node);
- }
}
else if( N > 0 )
{
- if( check_for_fractional )
- {
- gg_assign(var_decl_rdigits, integer_zero_node);
- }
tree value_type = TREE_TYPE(value);
FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(N);
gg_assign(value, gg_multiply(value, wide_int_to_tree( value_type,
@@ -1169,7 +1177,6 @@ scale_by_power_of_ten_N(tree value,
gg_assign(var_decl_rdigits, integer_one_node);
}
ELSE
- gg_assign(var_decl_rdigits, integer_zero_node);
ENDIF
}
gg_assign(value, gg_divide(value, wide_int_to_tree( value_type,
@@ -1722,11 +1729,14 @@ get_literal_string(cbl_field_t *field)
bool
refer_is_clean(cbl_refer_t &refer)
{
- if( !refer.field )
+ if( !refer.field || refer.field->type == FldLiteralN )
{
// It is routine for a refer to have no field. It happens when the parser
- // passes us a refer for an optional parameter that has been ommitted, for
+ // passes us a refer for an optional parameter that has been omitted, for
// example.
+
+ // It is also the case that a FldLiteralN will never have suscripts, or the
+ // like.
return true;
}
@@ -1739,38 +1749,6 @@ refer_is_clean(cbl_refer_t &refer)
;
}
-void
-REFER_CHECK(const char *func,
- int line,
- cbl_refer_t &refer
- )
- {
- static int counter=1;
-
- if( counter == 5 )
- {
- fprintf(stderr, "DING! %d\n", counter);
- }
-
-
- fprintf(stderr,
- "ct REFER_CHECK(%d): %s():%d %s\n",
- counter,
- func,
- line,
- refer.field->name);
-
- gg_printf("rt REFER_CHECK(%d): %s():%d %s (%s)\n",
- build_int_cst_type(INT, counter),
- gg_string_literal(func),
- build_int_cst_type(INT, line),
- gg_string_literal(refer.field->name),
- gg_string_literal(cbl_field_type_str(refer.field->type)),
- NULL_TREE);
- counter+=1;
- }
-
-
/* This routine returns the length portion of a refmod(start:length) reference.
It extracts both the start and the length so that it can add them together
to make sure that result falls within refer.capacity.
@@ -1779,6 +1757,7 @@ static
tree // size_t
refer_refmod_length(cbl_refer_t &refer)
{
+ REFER;
Analyze();
if( refer.refmod.from || refer.refmod.len )
{
@@ -1797,6 +1776,7 @@ refer_refmod_length(cbl_refer_t &refer)
{
set_exception_code(ec_bound_ref_mod_e);
gg_assign(refstart, gg_cast(LONG, integer_one_node));
+ gg_assign(var_decl_rdigits, integer_zero_node);
}
ELSE
ENDIF
@@ -1835,6 +1815,7 @@ refer_refmod_length(cbl_refer_t &refer)
// length is not an integer
set_exception_code(ec_bound_ref_mod_e);
gg_assign(reflen, gg_cast(LONG, integer_one_node));
+ gg_assign(var_decl_rdigits, integer_zero_node);
}
ELSE
{
@@ -1898,6 +1879,7 @@ static
tree // size_t
refer_fill_depends(cbl_refer_t &refer)
{
+ REFER;
// This returns a positive number which is the amount a depends-limited
// capacity needs to be reduced.
Analyze();
@@ -1928,6 +1910,7 @@ refer_fill_depends(cbl_refer_t &refer)
// This needs to evaluate to an integer
set_exception_code(ec_bound_odo_e);
gg_assign(value64, build_int_cst_type(TREE_TYPE(value64), odo->occurs.bounds.upper));
+ gg_assign(var_decl_rdigits, integer_zero_node);
}
ELSE
ENDIF
@@ -1973,27 +1956,27 @@ tree // size_t
refer_offset(cbl_refer_t &refer,
int *pflags)
{
+ // This routine calculates the effect of a refer offset on the
+ // refer.field->data location. When there are subscripts, the data location
+ // gets augmented by the (subscript-1)*element_size calculation. And when
+ // there is a refmod, the data location additionally gets augmented by
+ // (refmod.from-1)
+
+ REFER;
if( !refer.field )
{
+ // It's common for the field to be missing. It generally means that an
+ // optional parameter wasn't supplied.
return size_t_zero_node;
}
- if( !refer.nsubscript )
- {
- return get_data_offset(refer);
- }
-
- Analyze();
-
- tree retval = gg_define_variable(SIZE_T);
- gg_assign(var_decl_odo_violation, integer_zero_node);
- gg_assign(retval, get_data_offset(refer, pflags));
- IF( var_decl_odo_violation, ne_op, integer_zero_node )
+ if( refer.field->type == FldLiteralN || refer.field->type == FldLiteralA )
{
- set_exception_code(ec_bound_odo_e);
+ // We know that literals have no offset
+ return size_t_zero_node;
}
- ELSE
- ENDIF
+
+ tree retval = get_data_offset(refer, pflags);
return retval;
}
@@ -2001,6 +1984,7 @@ static
tree
refer_size(cbl_refer_t &refer, refer_type_t refer_type)
{
+ REFER;
Analyze();
static tree retval = gg_define_variable(SIZE_T, "..rs_retval", vs_file_static);
@@ -2042,12 +2026,14 @@ refer_size(cbl_refer_t &refer, refer_type_t refer_type)
tree // size_t
refer_size_dest(cbl_refer_t &refer)
{
+ REFER;
return refer_size(refer, refer_dest);
}
tree // size_t
refer_size_source(cbl_refer_t &refer)
{
+ REFER;
/* There are oddities involved with refer_size_source and refer_size_dest.
See the comments in refer_has_depends for some explanation. There are
other considerations, as well. For example, consider a move, where you
diff --git a/gcc/cobol/genutil.h b/gcc/cobol/genutil.h
index c216dba..8244481 100644
--- a/gcc/cobol/genutil.h
+++ b/gcc/cobol/genutil.h
@@ -56,7 +56,6 @@ extern tree var_decl_exception_paragraph; // const char *__gg__exception_para
extern tree var_decl_default_compute_error; // int __gg__default_compute_error;
extern tree var_decl_rdigits; // int __gg__rdigits;
-extern tree var_decl_odo_violation; // int __gg__odo_violation;
extern tree var_decl_unique_prog_id; // size_t __gg__unique_prog_id;
extern tree var_decl_entry_location; // This is for managing ENTRY statements
@@ -121,7 +120,7 @@ void set_exception_code_func(ec_type_t ec,
#define set_exception_code(ec) set_exception_code_func(ec, __LINE__)
bool process_this_exception(ec_type_t ec);
#define CHECK_FOR_FRACTIONAL_DIGITS true
-void get_integer_value(tree value,
+void get_integer_value(tree value, // This is always a LONG
cbl_field_t *field,
tree offset=NULL, // size_t
bool check_for_fractional_digits=false);
@@ -146,12 +145,6 @@ tree refer_offset(cbl_refer_t &refer,
tree refer_size_source(cbl_refer_t &refer);
tree refer_size_dest(cbl_refer_t &refer);
-void REFER_CHECK( const char *func,
- int line,
- cbl_refer_t &refer
- );
-#define refer_check(a) REFER_CHECK(__func__, __LINE__, a)
-
tree qualified_data_location(cbl_refer_t &refer);
void build_array_of_treeplets( int ngroup,
diff --git a/gcc/cobol/lexio.cc b/gcc/cobol/lexio.cc
index a992166..2db1af2 100644
--- a/gcc/cobol/lexio.cc
+++ b/gcc/cobol/lexio.cc
@@ -46,8 +46,22 @@ static struct {
first_file = false;
return tf;
}
+ inline bool is_fixed() const { return column == 7; }
+ inline bool is_reffmt() const { return is_fixed() && right_margin == 73; }
+ inline bool is_free() const { return ! is_fixed(); }
+
+ const char * description() const {
+ if( is_reffmt() ) return "REFERENCE";
+ if( is_fixed() ) return "FIXED";
+ if( is_free() ) return "FREE";
+ gcc_unreachable();
+ }
} indicator = { true, false, 0, 0 };
+// public source format test functions
+bool is_fixed_format() { return indicator.is_fixed(); }
+bool is_reference_format() { return indicator.is_reffmt(); }
+
static bool debug_mode = false;
/*
@@ -86,10 +100,6 @@ cobol_set_indicator_column( int column )
indicator.column = column;
}
-bool is_fixed_format() { return indicator.column == 7; }
-bool is_reference_format() {
- return indicator.column == 7 && indicator.right_margin == 73;
-}
bool include_debug() { return indicator.column == 7 && debug_mode; }
bool set_debug( bool tf ) { return debug_mode = tf && is_fixed_format(); }
@@ -348,13 +358,14 @@ check_source_format_directive( filespan_t& mfile ) {
gcc_assert(cm[3].length() == 4 || cm[3].length() == 5);
break;
}
- mfile.cur = const_cast<char*>(cm[0].second);
+
dbgmsg( "%s:%d: %s format set, on line " HOST_SIZE_T_PRINT_UNSIGNED,
__func__, __LINE__,
indicator.column == 7? "FIXED" : "FREE",
(fmt_size_t)mfile.lineno() );
- erase_line(const_cast<char*>(cm[0].first),
- const_cast<char*>(cm[0].second));
+ char *bol = indicator.is_fixed()? mfile.cur : const_cast<char*>(cm[0].first);
+ erase_line(bol, const_cast<char*>(cm[0].second));
+ mfile.cur = const_cast<char*>(cm[0].second);
}
}
@@ -393,33 +404,22 @@ struct buffer_t : public bytespan_t {
}
};
-static bool
-valid_sequence_area( const char *p, const char *eodata ) {
- const char *pend = p + 6;
- if ( eodata < pend ) return false;
+static inline bool is_p( char ch ) { return TOUPPER(ch) == 'P'; }
- for( ; p < pend; p++ ) {
- if( ! (ISDIGIT(*p) || *p == SPACE) ) {
- return false;
+static bool
+is_program_id( const char *p, const char *eol ) {
+ static const std::string program_id("PROGRAM-ID");
+ auto eop = p + program_id.size();
+ if( eop < eol ) {
+ // PROGRAM-ID must be followed by a dot, perhaps with intervening whitespace.
+ for( const char *dot=eop; dot < eol && *dot != '.'; dot++ ) {
+ if( !ISSPACE(*dot) ) return false;
}
+ std::string line (p, eop);
+ std::transform(line.begin(), line.end(), line.begin(), ::toupper);
+ return line == program_id;
}
- return true; // characters either digits or blanks
-}
-
-// Inspect the 2nd line for telltale signs of a NIST file.
-// If true, caller sets right margin to 73, indicating Reference Format
-static bool
-likely_nist_file( const char *p, const char *eodata ) {
- if( (p = std::find(p, eodata, '\n')) == eodata ) return false;
- if ( eodata < ++p + 80 ) return false;
- p += 72;
-
- return
- ISALPHA(p[0]) && ISALPHA(p[1]) &&
- ISDIGIT(p[2]) && ISDIGIT(p[3]) && ISDIGIT(p[4]) &&
- p[5] == '4' &&
- p[6] == '.' &&
- p[7] == '2';
+ return false;
}
const char * esc( size_t len, const char input[] );
@@ -1620,6 +1620,54 @@ cdftext::map_file( int fd ) {
bool lexio_dialect_mf();
+/*
+ * A valid sequence area is 6 digits or blanks at the begining of the line that
+ * contains PROGRAM-ID. Return NULL if no valid sequence area, else return
+ * pointer to BOL.
+ */
+static const char *
+valid_sequence_area( const char *data, const char *eodata ) {
+
+ for( const char *p = data;
+ (p = std::find_if(p, eodata, is_p)) != eodata;
+ p++ )
+ {
+ auto eol = std::find(p, eodata, '\n');
+ if( p == data || ISSPACE(p[-1]) ) {
+ if( is_program_id(p, eol) ) { // found program-id token
+ const char *bol = p;
+ for( ; data <= bol-1 && bol[-1] != '\n'; --bol )
+ ;
+ if( 6 < p - bol ) {
+ if( std::all_of(bol, bol+6, ::isdigit) ) {
+ return bol;
+ }
+ if( std::all_of(bol, bol+6, ::isblank) ) {
+ return bol;
+ }
+ break;
+ }
+ }
+ }
+ }
+ return nullptr;
+}
+
+/*
+ * Reference Format -- valid COBOL between columns 8 and 72 -- has data after
+ * column 72 on the PROGRAM-ID line. Extended Reference Format (that allows
+ * longer lines) has no reason to follow the PROGRAM-ID with more stuff.
+ */
+static bool
+infer_reference_format( const char *bol, const char *eodata ) {
+ assert(bol);
+ auto eol = std::find(bol, eodata, '\n');
+ if( 72 < eol - bol ) {
+ return ! std::all_of(bol + 72, eol, ::isspace);
+ }
+ return false;
+}
+
filespan_t
cdftext::free_form_reference_format( int input ) {
filespan_t source_buffer = map_file(input);
@@ -1638,27 +1686,19 @@ cdftext::free_form_reference_format( int input ) {
} current( mfile.data );
/*
- * If the format is not explicitly set on the command line, test the
- * first 6 bytes of the first file to determine the format
- * heuristically. If the first 6 characters are only digits or
- * blanks, then the file is in fixed format.
+ * Infer source code format.
*/
-
if( indicator.inference_pending() ) {
- const char *p = mfile.data;
- while( p < mfile.eodata ) {
- const char * pend =
- std::find(p, const_cast<const char *>(mfile.eodata), '\n');
- if( 6 < pend - p ) break;
- p = pend;
- if( p < mfile.eodata) p++;
+ const char *bol = valid_sequence_area(mfile.data, mfile.eodata);
+ if( bol ) {
+ indicator.column = 7;
+ if( infer_reference_format(bol, mfile.eodata) ) {
+ indicator.right_margin = 73;
+ }
}
- if( valid_sequence_area(p, mfile.eodata) ) indicator.column = 7;
- if( likely_nist_file(p, mfile.eodata) ) indicator.right_margin = 73;
- dbgmsg("%s:%d: %s%s format detected", __func__, __LINE__,
- indicator.column == 7? "FIXED" : "FREE",
- indicator.right_margin == 73? "" : "-extended");
+ dbgmsg("%s:%d: %s format detected", __func__, __LINE__,
+ indicator.description());
}
while( mfile.next_line() ) {
diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index c6b40fa..cecdd22 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -332,7 +332,7 @@
NUMED "NUMERIC-EDITED picture"
NUMED_CR "NUMERIC-EDITED CR picture"
NUMED_DB "NUMERIC-EDITED DB picture"
-%token <number> NINEDOT NINES NINEV PIC_P
+%token <number> NINEDOT NINES NINEV PIC_P ONES
%token <string> SPACES
%token <literal> LITERAL
%token <number> END EOP
@@ -341,7 +341,7 @@
%token <number> NUMBER NEGATIVE
%token <numstr> NUMSTR "numeric literal"
%token <number> OVERFLOW_kw "OVERFLOW"
-%token <computational> COMPUTATIONAL
+%token <computational> BINARY_INTEGER COMPUTATIONAL
%token <boolean> PERFORM BACKWARD
%token <number> POSITIVE
@@ -573,12 +573,12 @@
THAN TIME TIMES
TO TOP
TOP_LEVEL
- TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw "True" TRY
- TURN TYPE TYPEDEF
+ TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw "True"
+ TRY TURN TYPE TYPEDEF
- ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL UP UPON
- UPOS UPPER_CASE USAGE USING USUBSTR USUPPLEMENTARY
- UTILITY UUID4 UVALID UWIDTH
+ ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL
+ UP UPON UPOS UPPER_CASE USAGE USING
+ USUBSTR USUPPLEMENTARY UTILITY UUID4 UVALID UWIDTH
VALUE VARIANCE VARYING VOLATILE
@@ -659,7 +659,7 @@
%type <number> star_cbl_opt close_how
%type <number> test_before usage_clause1 might_be
-%type <boolean> all optional sign_leading on_off initialized strong
+%type <boolean> all optional sign_leading on_off initialized strong is_signed
%type <number> count data_clauses data_clause
%type <number> nine nines nps relop spaces_etc reserved_value signed
%type <number> variable_type
@@ -801,7 +801,7 @@
%type <switches> upsi_entry
-%type <special> acceptable disp_target
+%type <special> acceptable disp_upon
%type <display> disp_body
%type <false_domain> domains domain
@@ -2508,23 +2508,14 @@ dev_mnemonic: device_name is NAME
}
| NAME[device] is NAME[name]
{
- static const std::map< std::string, special_name_t > fujitsus
- { // Fujitsu calls these "function names", not device names
- { "ARGUMENT-NUMBER", ARG_NUM_e },
- { "ARGUMENT-VALUE", ARG_VALUE_e } ,
- { "ENVIRONMENT-NAME", ENV_NAME_e },
- { "ENVIRONMENT-VALUE", ENV_VALUE_e },
- };
- std::string device($device);
- std::transform($device, $device + strlen($device),
- device.begin(), toupper);
- auto p = fujitsus.find(device.c_str());
- if( p == fujitsus.end() ) {
+ auto p = cmd_or_env_special_of($device);
+ if( !p ) {
error_msg(@device, "%s is not a device name");
+ YYERROR;
}
- cbl_special_name_t special = { 0, p->second };
- if( !namcpy(@name, special.name, $name) ) YYERROR;
+ cbl_special_name_t special = { 0, *p };
+ namcpy(@name, special.name, $name);
symbol_special_add(PROGRAM, &special);
}
@@ -3286,7 +3277,7 @@ index_field1: ctx_name[name]
field.data = data;
if( !namcpy(@name, field.name, $name) ) YYERROR;
- auto symbol = symbol_field(PROGRAM, 0, $name);
+ auto symbol = symbol_field(PROGRAM, field.parent, $name);
if( symbol ) {
auto field( cbl_field_of(symbol) );
error_msg(@name, "'%s' already defined on line %d",
@@ -4104,7 +4095,13 @@ picture_clause: PIC signed nps[fore] nines nps[aft]
gcc_unreachable();
}
}
+ | PIC ones
;
+ones: ONES
+ {
+ cbl_unimplemented("Boolean type not implemented");
+ }
+ ;
alphanum_pic: alphanum_part {
current_field()->set_attr($1.attr);
@@ -4213,8 +4210,99 @@ usage_clause: usage_clause1[type]
}
}
;
-usage_clause1: usage COMPUTATIONAL[comp] native
+usage_clause1: usage BIT
+ {
+ cbl_unimplemented("Boolean type not implemented");
+ }
+| usage BINARY_INTEGER [comp] is_signed
{
+ // action for BINARY_INTEGER is repeated for COMPUTATIONAL, below.
+ // If it changes, consolidate in a function.
+ bool infer = true;
+ cbl_field_t *field = current_field();
+
+ if( ! $is_signed ) {
+ $comp.signable = false;
+ }
+
+ // Some binary types have defined capacity;
+ switch($comp.type) {
+ // COMPUTATIONAL and COMP-5 rely on PICTURE.
+ case FldNumericBinary:
+ field->attr |= big_endian_e;
+ __attribute__((fallthrough));
+ case FldNumericBin5:
+ // If no capacity yet, then no picture, infer $comp.capacity.
+ // If field has capacity, ensure USAGE is compatible.
+ if( field->data.capacity > 0 ) { // PICTURE before USAGE
+ infer = false;
+ switch( field->type ) {
+ case FldAlphanumeric: // PIC X COMP-5 or COMP-X
+ assert( field->data.digits == 0 );
+ assert( field->data.rdigits == 0 );
+ if( dialect_mf() ) {
+ field->type = $comp.type;
+ field->clear_attr(signable_e);
+ } else {
+ error_msg(@comp, "numeric USAGE invalid "
+ "with Alpnanumeric PICTURE");
+ dialect_error(@1, "Alpnanumeric COMP-5 or COMP-X", "mf");
+ YYERROR;
+ }
+ break;
+ case FldNumericDisplay: // PIC 9 COMP-5 or COMP-X
+ if( $comp.capacity == 0xFF ) { // comp-x is a bit like comp-5
+ assert( field->data.digits == field->data.capacity );
+ if( ! dialect_mf() ) {
+ dialect_error(@1, "COMP-X", "mf");
+ }
+ }
+ field->type = $comp.type;
+ field->data.capacity = type_capacity(field->type,
+ field->data.digits);
+ break;
+ default: break;
+ }
+ }
+ break;
+ case FldPacked: // comp-6 is unsigned comp-3
+ assert(! $comp.signable); // else PACKED_DECIMAL from scanner
+ field->attr |= separate_e;
+ if( ! dialect_mf() ) {
+ dialect_error(@1, "COMP-6", "mf");
+ }
+ if( field->type == FldNumericDisplay ) {// PICTURE before USAGE
+ infer = false;
+ assert(field->data.capacity > 0);
+ field->type = $comp.type;
+ field->data.capacity = type_capacity(field->type,
+ field->data.digits);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if( infer ) {
+ if( $comp.capacity > 0 ) {
+ if( field->data.capacity > 0 ) {
+ error_msg(@comp, "%s is BINARY type, incompatible with PICTURE",
+ field->name);
+ YYERROR;
+ }
+ field->data.capacity = $comp.capacity;
+ field->type = $comp.type;
+ if( $comp.signable ) {
+ field->attr = (field->attr | signable_e);
+ }
+ }
+ }
+ $$ = $comp.type;
+ }
+ | usage COMPUTATIONAL[comp] native
+ {
+ // logic below duplicates BINARY_INTEGER, above.
+ // If it changes, consolidate in a function.
bool infer = true;
cbl_field_t *field = current_field();
@@ -4238,7 +4326,8 @@ usage_clause1: usage COMPUTATIONAL[comp] native
field->clear_attr(signable_e);
} else {
error_msg(@comp, "numeric USAGE invalid "
- "with Alpnanumeric PICTURE");
+ "with Alpnanumeric PICTURE");
+ dialect_error(@1, "Alpnanumeric COMP-5 or COMP-X", "mf");
YYERROR;
}
break;
@@ -5429,7 +5518,7 @@ disp_body: disp_vargs[vargs]
$$.special = NULL;
$$.vargs = $vargs;
}
- | disp_vargs[vargs] UPON disp_target[special]
+ | disp_vargs[vargs] UPON disp_upon[special]
{
$$.special = $special;
$$.vargs = $vargs;
@@ -5441,17 +5530,25 @@ disp_vargs: DISPLAY vargs {
}
;
-disp_target: device_name {
+disp_upon: device_name {
$$ = symbol_special($1.id);
}
| NAME
{
- symbol_elem_t *e = symbol_special(PROGRAM, $1);
+ symbol_elem_t *e = symbol_special(PROGRAM, $NAME);
if( !e ) {
- error_msg(@NAME, "no such special name '%s'", $NAME);
- YYERROR;
- }
- $$ = cbl_special_name_of(e);
+ const special_name_t *special_type = cmd_or_env_special_of($NAME);
+ if( !special_type ) {
+ error_msg(@NAME, "no such special name '%s'", $NAME);
+ YYERROR;
+ }
+ // Add the name now, as a convenience.
+ cbl_special_name_t special = { 0, *special_type };
+ namcpy(@NAME, special.name, $NAME);
+
+ e = symbol_special_add(PROGRAM, &special);
+ }
+ $$ = cbl_special_name_of(e);
}
;
@@ -8961,6 +9058,19 @@ inspect: INSPECT backward inspected TALLYING tallies
error_msg(@all, "ALL must be part of a figurative constant");
YYERROR;
}
+ } else {
+ cbl_field_t *match = $match->field,
+ *replace = $replace_oper->field;
+ if( is_literal(match) && is_literal(replace) ) {
+ if( !$match->all && !$replace_oper->all) {
+ if( match->data.capacity != replace->data.capacity ) {
+ error_msg(@match, "'%s', size %u NOT EQUAL '%s', size %u",
+ nice_name_of(match), match->data.capacity,
+ nice_name_of(replace), replace->data.capacity);
+ YYERROR;
+ }
+ }
+ }
}
if( is_constant($inspected->field) ) {
auto name = nice_name_of($inspected->field);
@@ -10918,6 +11028,11 @@ sign: %empty
| SIGN
;
+is_signed: %empty { $$ = true; }
+ | SIGNED_kw { $$ = true; }
+ | UNSIGNED_kw { $$ = false; }
+ ;
+
start_after: %empty %prec AFTER
| START AFTER varg
;
@@ -11245,7 +11360,7 @@ tokenset_t::tokenset_t() {
#include "token_names.h"
}
-bool iso_cobol_word( const std::string& name, bool include_intrinsics );
+bool iso_cobol_word( const std::string& name, bool include_context );
// Look up the lowercase form of a keyword, excluding some CDF names.
int
@@ -11276,8 +11391,13 @@ tokenset_t::find( const cbl_name_t name, bool include_intrinsics ) {
}
}
- //// if( ! iso_cobol_word(uppercase(name), include_intrinsics) ) return 0;
-
+ /*
+ * The input name may be one of:
+ * 1. an intrinsic function name (OK if include_intrinsics)
+ * 2. an ISO/GCC reserved word or context-sensitive word (OK)
+ * 3. a token in our token list for convenience, such as BINARY_INTEGER (bzzt)
+ */
+
cbl_name_t lname;
std::transform(name, name + strlen(name) + 1, lname, ftolower);
auto p = tokens.find(lname);
@@ -11286,9 +11406,10 @@ tokenset_t::find( const cbl_name_t name, bool include_intrinsics ) {
if( token == SECTION ) yylval.number = 0;
- if( include_intrinsics ) return token;
-
- return intrinsic_cname(token)? 0 : token;
+ if( include_intrinsics && intrinsic_cname(token) ) return token;
+ if( iso_cobol_word(uppercase(name), true) ) return token;
+
+ return 0;
}
int
diff --git a/gcc/cobol/parse_ante.h b/gcc/cobol/parse_ante.h
index f3a002a..0369f7b 100644
--- a/gcc/cobol/parse_ante.h
+++ b/gcc/cobol/parse_ante.h
@@ -928,10 +928,11 @@ teed_up_names() {
}
class tokenset_t {
- std::vector<const char *>token_names;
- std::map <std::string, int> tokens;
- std::set<std::string> cobol_words;
-
+ // token_names is initialized from a generated header file.
+ std::vector<const char *>token_names; // position indicates token value
+ std::map <std::string, int> tokens; // aliases
+ std::set<std::string> cobol_words; // Anything in COBOL-WORDS may appear only once.
+ public:
static std::string
lowercase( const cbl_name_t name ) {
cbl_name_t lname;
@@ -949,40 +950,56 @@ class tokenset_t {
tokenset_t();
int find( const cbl_name_t name, bool include_intrinsics );
- bool equate( const YYLTYPE& loc, int token, const cbl_name_t name ) {
+ bool equate( const YYLTYPE& loc, int token,
+ const cbl_name_t name, const cbl_name_t verb = "EQUATE") {
auto lname( lowercase(name) );
auto cw = cobol_words.insert(lname);
if( ! cw.second ) {
- error_msg(loc, "COBOL-WORDS EQUATE: %s may appear but once", name);
+ error_msg(loc, "COBOL-WORDS %s: %s may appear but once", verb, name);
return false;
}
auto p = tokens.find(lowercase(name));
bool fOK = p == tokens.end();
if( fOK ) { // name not already in use
tokens[lname] = token;
+ dbgmsg("%s:%d: %d has alias %s", __func__, __LINE__, token, name);
} else {
- error_msg(loc, "EQUATE: %s already defined as a token", name);
+ error_msg(loc, "%s: %s already defined as a token", verb, name);
}
return fOK;
}
- bool undefine( const YYLTYPE& loc, const cbl_name_t name ) {
+ bool undefine( const YYLTYPE& loc,
+ const cbl_name_t name, const cbl_name_t verb = "UNDEFINE" ) {
auto lname( lowercase(name) );
auto cw = cobol_words.insert(lname);
if( ! cw.second ) {
- error_msg(loc, "COBOL-WORDS UNDEFINE: %s may appear but once", name);
+ error_msg(loc, "COBOL-WORDS %s: %s may appear but once", verb, name);
return false;
}
+
+ // Do not erase generic, multi-type tokens COMPUTATIONAL and BINARY_INTEGER.
+ if( binary_integer_usage_of(name) ) {
+ dbgmsg("%s:%d: generic %s remains valid as a token", __func__, __LINE__, name);
+ return true;
+ }
+
auto p = tokens.find(lname);
bool fOK = p != tokens.end();
if( fOK ) { // name in use
tokens.erase(p);
} else {
- error_msg(loc, "UNDEFINE: %s not defined as a token", name);
+ error_msg(loc, "%s: %s not defined as a token", verb, name);
}
+ dbgmsg("%s:%d: %s removed as a valid token name", __func__, __LINE__, name);
return fOK;
}
- bool substitute( const YYLTYPE& loc, const cbl_name_t extant, int token, const cbl_name_t name ) {
- return equate( loc, token, name ) && undefine( loc, extant );
+
+ bool substitute( const YYLTYPE& loc,
+ const cbl_name_t extant, int token, const cbl_name_t name ) {
+ return
+ equate( loc, token, name, "SUBSTITUTE" )
+ &&
+ undefine( loc, extant, "SUBSTITUTE" );
}
bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
auto lname( lowercase(name) );
@@ -1018,24 +1035,42 @@ class current_tokens_t {
int find( const cbl_name_t name, bool include_intrinsics ) {
return tokens.find(name, include_intrinsics);
}
- bool equate( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t name ) {
- int token = keyword_tok(keyword);
- if( 0 == token ) {
- error_msg(loc, "EQUATE %s: not a valid token", keyword);
- return false;
+ bool equate( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t alias ) {
+ int token;
+ if( 0 == (token = binary_integer_usage_of(keyword)) ) {
+ if( 0 == (token = keyword_tok(keyword)) ) {
+ error_msg(loc, "EQUATE %s: not a valid token", keyword);
+ return false;
+ }
}
- return tokens.equate(loc, token, name);
+ auto name = keyword_alias_add(tokens.uppercase(keyword),
+ tokens.uppercase(alias));
+ if( name != keyword ) {
+ error_msg(loc, "EQUATE: %s is already an alias for %s", alias, name.c_str());
+ return false;
+ }
+ return tokens.equate(loc, token, alias);
}
bool undefine( const YYLTYPE& loc, cbl_name_t keyword ) {
return tokens.undefine(loc, keyword);
}
- bool substitute( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t name ) {
- int token = keyword_tok(keyword);
- if( 0 == token ) {
- error_msg(loc, "SUBSTITUTE %s: not a valid token", keyword);
- return false;
+ bool substitute( const YYLTYPE& loc, cbl_name_t keyword, const cbl_name_t alias ) {
+ int token;
+ if( 0 == (token = binary_integer_usage_of(keyword)) ) {
+ if( 0 == (token = keyword_tok(keyword)) ) {
+ error_msg(loc, "SUBSTITUTE %s: not a valid token", keyword);
+ return false;
+ }
}
- return tokens.substitute(loc, keyword, token, name);
+ auto name = keyword_alias_add(tokens.uppercase(keyword),
+ tokens.uppercase(alias));
+ if( name != keyword ) {
+ error_msg(loc, "SUBSTITUTE: %s is already an alias for %s", alias, name.c_str());
+ return false;
+ }
+
+ dbgmsg("%s:%d: %s (%d) will have alias %s", __func__, __LINE__, keyword, token, alias);
+ return tokens.substitute(loc, keyword, token, alias);
}
bool reserve( const YYLTYPE& loc, const cbl_name_t name ) {
return tokens.reserve(loc, name);
@@ -3118,6 +3153,21 @@ special_of( const char F[], int L, const char name[] ) {
}
#define special_of( F ) special_of(__func__, __LINE__, (F))
+static const special_name_t *
+cmd_or_env_special_of( std::string name ) {
+ static const std::map< std::string, special_name_t > fujitsus
+ { // Fujitsu calls these "function names", not device names
+ { "ARGUMENT-NUMBER", ARG_NUM_e },
+ { "ARGUMENT-VALUE", ARG_VALUE_e } ,
+ { "ENVIRONMENT-NAME", ENV_NAME_e },
+ { "ENVIRONMENT-VALUE", ENV_VALUE_e },
+ };
+
+ std::transform(name.begin(), name.end(), name.begin(), ::toupper);
+ auto p = fujitsus.find(name.c_str());
+ return p != fujitsus.end()? &p->second : nullptr;
+}
+
static inline void
parser_add2( struct cbl_num_result_t& to,
struct cbl_refer_t from ) {
diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l
index f2a0bbe..dfc0c30 100644
--- a/gcc/cobol/scan.l
+++ b/gcc/cobol/scan.l
@@ -98,7 +98,6 @@ NP P+|(P{COUNT})
UNSIGNED [[:space:]]+UNSIGNED
SIGNED [[:space:]]+SIGNED
-DBLLONG (LONG-LONG|DOUBLE)
ALNUM [AX9]+
@@ -976,20 +975,19 @@ USE({SPC}FOR)? { return USE; }
COMP(UTATIONAL)? { return ucomputable(FldNumericBinary, 0); }
BINARY { return scomputable(FldNumericBinary, 0); }
- BINARY-CHAR{SIGNED} { return scomputable(FldNumericBin5, 1); }
- BINARY-CHAR{UNSIGNED} { return ucomputable(FldNumericBin5, 1); }
- BINARY-CHAR { return scomputable(FldNumericBin5, 1); }
- BINARY-SHORT{SIGNED} { return scomputable(FldNumericBin5, 2); }
- BINARY-SHORT{UNSIGNED} { return ucomputable(FldNumericBin5, 2); }
- BINARY-SHORT { return scomputable(FldNumericBin5, 2); }
- BINARY-LONG{SIGNED} { return scomputable(FldNumericBin5, 4); }
- BINARY-LONG{UNSIGNED} { return ucomputable(FldNumericBin5, 4); }
- BINARY-LONG { return scomputable(FldNumericBin5, 4); }
- BINARY-{DBLLONG}{SIGNED} { return scomputable(FldNumericBin5, 8); }
- BINARY-{DBLLONG}{UNSIGNED} { return ucomputable(FldNumericBin5, 8); }
- BINARY-{DBLLONG} { return scomputable(FldNumericBin5, 8); }
+ BINARY-CHAR { return bcomputable(FldNumericBin5, 1); }
+ BINARY-SHORT { return bcomputable(FldNumericBin5, 2); }
+ BINARY-LONG { return bcomputable(FldNumericBin5, 4); }
+ BINARY-DOUBLE { return bcomputable(FldNumericBin5, 8); }
+ BINARY-LONG-LONG { if( ! dialect_mf() ) {
+ error_msg(yylloc, "%s requires -dialect mf", yytext);
+ }
+ return bcomputable(FldNumericBin5, 8);
+ }
+
BIT { not_implemented("USAGE type: BIT");
return BIT; }
+
FLOAT-BINARY-32 { return ucomputable(FldFloat, 4); }
FLOAT-BINARY-64 { return ucomputable(FldFloat, 8); }
FLOAT-BINARY-128 { return ucomputable(FldFloat, 16); }
@@ -1003,6 +1001,9 @@ USE({SPC}FOR)? { return USE; }
FLOAT-LONG { return ucomputable(FldFloat, 8); }
FLOAT-SHORT { return ucomputable(FldFloat, 4); }
+ SIGNED { return SIGNED_kw; }
+ UNSIGNED { return UNSIGNED_kw; }
+
INDEX { return INDEX; }
MESSAGE-TAG { not_implemented("USAGE type: MESSAGE-TAG"); }
NATIONAL { not_implemented("USAGE type: NATIONAL");
@@ -1117,10 +1118,14 @@ USE({SPC}FOR)? { return USE; }
FD/[[:blank:]]+ { parsing.need_level(false); return FD; }
SD/[[:blank:]]+ { parsing.need_level(false); return SD; }
- {NAME} { // NAME here is never a token name
+ {NAME} { // NAME here might be a token alias
+ int token;
+ if( 0 != (token = binary_integer_usage(yytext)) ) {
+ return token;
+ }
if( is_integer_token() ) return numstr_of(yytext);
ydflval.string = yylval.string = xstrdup(yytext);
- auto token = typed_name(yytext);
+ token = typed_name(yytext);
return token == NAME88? NAME : token;
}
@@ -1204,6 +1209,11 @@ USE({SPC}FOR)? { return USE; }
{N9}/{N9}*[,.]? { yylval.number = ndigit(yyleng); return picset(NINES); }
P+/[,.]?\r?\n { yylval.number = yyleng; return picset(PIC_P); }
+ 1{1,31}/({COUNT}|[(]{NAME}[)]) {
+ yy_push_state(picture_count);
+ yylval.string = xstrdup(yytext); return picset(ONES); }
+ 1{1,31} { yylval.string = xstrdup(yytext); return picset(ONES); }
+
{ALNUM}/{COUNT}({ALNUM}{COUNT}?)+ {
yy_push_state(picture_count);
yylval.string = xstrdup(yytext); return picset(ALNUM); }
@@ -1613,15 +1623,17 @@ USE({SPC}FOR)? { return USE; }
*--p = '\0';
}
- int token = keyword_tok(yylval.string);
- if( token ) return token;
+ int token;
+ if( 0 != (token = binary_integer_usage(yylval.string)) )return token;
+ if( 0 != (token = keyword_tok(yylval.string)) ) return token;
if( is_integer_token() ) return numstr_of(yylval.string);
return typed_name(yylval.string);
}
{NAME}/{OSPC}{DOTSEP} {
assert(YY_START == procedure_div);
- int token = keyword_tok(yytext);
- if( token ) return token;
+ int token;
+ if( 0 != (token = binary_integer_usage(yytext)) ) return token;
+ if( 0 != (token = keyword_tok(yytext)) ) return token;
if( is_integer_token() ) return numstr_of(yytext);
ydflval.string = yylval.string = xstrdup(yytext);
@@ -2468,6 +2480,7 @@ BASIS { yy_push_state(basis); return BASIS; }
if( YY_START == quoted1 || YY_START == quoted2 ) {
error_msg(yylloc, "syntax error: unterminated string '%s'",
tmpstring);
+ return NO_CONDITION;
cbl_internal_error("");
}
yypop_buffer_state();
diff --git a/gcc/cobol/scan_ante.h b/gcc/cobol/scan_ante.h
index 784c9b0..c8c93ed 100644
--- a/gcc/cobol/scan_ante.h
+++ b/gcc/cobol/scan_ante.h
@@ -498,6 +498,10 @@ update_location_col( const char str[], int correction = 0) {
result = YY_NULL; \
}
+#define bcomputable(T, C) \
+ yylval.computational.type=T, \
+ yylval.computational.capacity=C, \
+ yylval.computational.signable=true, BINARY_INTEGER
#define scomputable(T, C) \
yylval.computational.type=T, \
yylval.computational.capacity=C, \
@@ -511,6 +515,99 @@ static char *tmpstring = NULL;
#define PROGRAM current_program_index()
+// map of alias => canonical
+static std::map <std::string, std::string> keyword_aliases;
+
+const std::string&
+keyword_alias_add( const std::string& keyword, const std::string& alias ) {
+ auto p = keyword_aliases.find(alias);
+ if( p != keyword_aliases.end() ) return p->second; // error: do not overwrite
+ return keyword_aliases[alias] = keyword;
+}
+
+/*
+ * Because numeric USAGE types don't have distinct tokens and may have aliases,
+ * we keep a table of their canonical names, which we use if we encounter an
+ * alias.
+ */
+struct bint_t {
+ int token;
+ cbl_field_type_t type;
+ uint32_t capacity;
+ bool signable;
+};
+static const std::map <std::string, bint_t > binary_integers {
+ { "COMP-X", { COMPUTATIONAL, FldNumericBin5, 0xFF, false } },
+ { "COMP-6", { COMPUTATIONAL, FldPacked, 0, false } },
+ { "COMP-5", { COMPUTATIONAL, FldNumericBin5, 0, false } },
+ { "COMP-4", { COMPUTATIONAL, FldNumericBinary, 0, true } },
+ { "COMP-2", { COMPUTATIONAL, FldFloat, 8, false } },
+ { "COMP-1", { COMPUTATIONAL, FldFloat, 4, false } },
+ { "COMP", { COMPUTATIONAL, FldNumericBinary, 0, false } },
+ { "COMPUTATIONAL-X", { COMPUTATIONAL, FldNumericBin5, 0xFF, false } },
+ { "COMPUTATIONAL-6", { COMPUTATIONAL, FldPacked, 0, false } },
+ { "COMPUTATIONAL-5", { COMPUTATIONAL, FldNumericBin5, 0, false } },
+ { "COMPUTATIONAL-4", { COMPUTATIONAL, FldNumericBinary, 0, true } },
+ { "COMPUTATIONAL-2", { COMPUTATIONAL, FldFloat, 8, false } },
+ { "COMPUTATIONAL-1", { COMPUTATIONAL, FldFloat, 4, false } },
+ { "COMPUTATIONAL", { COMPUTATIONAL, FldNumericBinary, 0, false } },
+ { "BINARY", { BINARY_INTEGER, FldNumericBinary, 0, true } },
+ { "BINARY-CHAR", { BINARY_INTEGER, FldNumericBin5, 1, true } },
+ { "BINARY-SHORT", { BINARY_INTEGER, FldNumericBin5, 2, true } },
+ { "BINARY-LONG", { BINARY_INTEGER, FldNumericBin5, 4, true } },
+ { "BINARY-DOUBLE", { BINARY_INTEGER, FldNumericBin5, 8, true } },
+ { "BINARY-LONG-LONG", { BINARY_INTEGER, FldNumericBin5, 8, true } },
+ { "FLOAT-BINARY-32", { COMPUTATIONAL, FldFloat, 4, false } },
+ { "FLOAT-BINARY-64", { COMPUTATIONAL, FldFloat, 8, false } },
+ { "FLOAT-BINARY-128", { COMPUTATIONAL, FldFloat, 16, false } },
+ { "FLOAT-EXTENDED", { COMPUTATIONAL, FldFloat, 16, false } },
+ { "FLOAT-LONG", { COMPUTATIONAL, FldFloat, 8, false } },
+ { "FLOAT-SHORT", { COMPUTATIONAL, FldFloat, 4, false } },
+};
+
+static int
+binary_integer_usage( const char name[]) {
+ cbl_name_t uname = {};
+ std::transform(name, name + strlen(name), uname, ftoupper);
+
+ dbgmsg("%s:%d: checking %s in %zu keyword_aliases",
+ __func__, __LINE__, uname, keyword_aliases.size() );
+
+ std::string key = uname;
+ auto alias = keyword_aliases.find(key);
+ if( alias != keyword_aliases.end() ) key = alias->second;
+
+ auto p = binary_integers.find(key);
+ if( p == binary_integers.end() ) return 0;
+
+ yylval.computational.type = p->second.type;
+ yylval.computational.capacity = p->second.capacity;
+ yylval.computational.signable = p->second.signable;
+ dbgmsg("%s:%d: %s has type %d", __func__, __LINE__,
+ uname, p->second.type );
+ return p->second.token;
+}
+
+int
+binary_integer_usage_of( const char name[] ) {
+ cbl_name_t uname = {};
+ std::transform(name, name + strlen(name), uname, ftoupper);
+
+ auto p = binary_integers.find(uname);
+ if( p != binary_integers.end() ) {
+ int token = p->second.token;
+ switch( token ) {
+ case COMPUTATIONAL:
+ case BINARY_INTEGER:
+ return token;
+ default:
+ gcc_unreachable();
+ assert(false);
+ }
+ }
+ return 0;
+}
+
static uint32_t
level_of( const char input[] ) {
unsigned int output = 0;
diff --git a/gcc/cobol/scan_post.h b/gcc/cobol/scan_post.h
index dabb168..85feac8 100644
--- a/gcc/cobol/scan_post.h
+++ b/gcc/cobol/scan_post.h
@@ -33,13 +33,15 @@ start_condition_str( int sc ) {
const char *state = "???";
switch(sc) {
case INITIAL: state = "INITIAL"; break;
+ case addr_of: state = "addr_of"; break;
case author_state: state = "author_state"; break;
case basis: state = "basis"; break;
case bool_state: state = "bool_state"; break;
case cdf_state: state = "cdf_state"; break;
case classify: state = "classify"; break;
- case copy_state: state = "copy_state"; break;
+ case cobol_words: state = "cobol_words"; break;
case comment_entries: state = "comment_entries"; break;
+ case copy_state: state = "copy_state"; break;
case date_state: state = "date_state"; break;
case datetime_fmt: state = "datetime_fmt"; break;
case dot_state: state = "dot_state"; break;
@@ -62,8 +64,8 @@ start_condition_str( int sc ) {
case quoted2: state = "quoted2"; break;
case quoteq: state = "quoteq"; break;
case raising: state = "raising"; break;
- case subscripts: state = "subscripts"; break;
case sort_state: state = "sort_state"; break;
+ case subscripts: state = "subscripts"; break;
}
return state;
}
diff --git a/gcc/cobol/symbols.cc b/gcc/cobol/symbols.cc
index 13e78ee..1d0acf90 100644
--- a/gcc/cobol/symbols.cc
+++ b/gcc/cobol/symbols.cc
@@ -2294,7 +2294,7 @@ symbol_table_init(void) {
"FILLER", 0, {}, {1,1,0,0, " "}, NULL },
{ 0, FldAlphanumeric, FldInvalid, signable_e | global_e, 0,0,2, nonarray, 0,
"DEBUG-CONTENTS", 0, {}, {76,76,0,0, NULL}, NULL },
-};
+ };
// debug registers
assert(table.nelem + COUNT_OF(debug_registers) < table.capacity);
diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h
index 50c5d48..e272907 100644
--- a/gcc/cobol/symbols.h
+++ b/gcc/cobol/symbols.h
@@ -348,9 +348,7 @@ struct cbl_field_data_t {
cbl_field_data_t& valify() {
assert(initial);
- const size_t len = strlen(initial);
- std::string input(len + 1, '\0'); // add a NUL
- std::copy(initial, initial + len, input.begin());
+ std::string input(initial);
if( decimal_is_comma() ) {
std::replace(input.begin(), input.end(), ',', '.');
}
@@ -2211,6 +2209,10 @@ class name_queue_t : private std::queue<cbl_namelocs_t>
};
+const std::string& keyword_alias_add( const std::string& keyword,
+ const std::string& alias );
+int binary_integer_usage_of( const char name[] );
+
void tee_up_empty();
void tee_up_name( const YYLTYPE& loc, const char name[] );
cbl_namelist_t teed_up_names();
diff --git a/gcc/cobol/token_names.h b/gcc/cobol/token_names.h
index d1e3b5d..682d68d 100644
--- a/gcc/cobol/token_names.h
+++ b/gcc/cobol/token_names.h
@@ -1,1373 +1,1377 @@
// generated by ./token_names.h.gen ../../build/gcc/cobol/parse.h
-// Fri Mar 21 10:13:54 CET 2025
+// Thu May 8 18:53:33 EDT 2025
tokens = {
- { "identification", IDENTIFICATION_DIV }, // 258
- { "environment", ENVIRONMENT_DIV }, // 259
- { "procedure", PROCEDURE_DIV }, // 260
- { "data", DATA_DIV }, // 261
- { "file", FILE_SECT }, // 262
- { "input-output", INPUT_OUTPUT_SECT }, // 263
- { "linkage", LINKAGE_SECT }, // 264
- { "local-storage", LOCAL_STORAGE_SECT }, // 265
- { "working-storage", WORKING_STORAGE_SECT }, // 266
- { "object-computer", OBJECT_COMPUTER }, // 267
- { "display-of", DISPLAY_OF }, // 268
- { "end-function", END_FUNCTION }, // 269
- { "end-program", END_PROGRAM }, // 270
- { "end-subprogram", END_SUBPROGRAM }, // 271
- { "justified", JUSTIFIED }, // 272
- { "returning", RETURNING }, // 273
- { "no-condition", NO_CONDITION }, // 274
- { "alnum", ALNUM }, // 275
- { "alphed", ALPHED }, // 276
- { "error", ERROR }, // 277
- { "exception", EXCEPTION }, // 278
- { "size-error", SIZE_ERROR }, // 279
- { "exception-name", EXCEPTION_NAME }, // 280
- { "level", LEVEL }, // 281
- { "level66", LEVEL66 }, // 282
- { "level78", LEVEL78 }, // 283
- { "level88", LEVEL88 }, // 284
- { "class-name", CLASS_NAME }, // 285
- { "name", NAME }, // 286
- { "name88", NAME88 }, // 287
- { "nume", NUME }, // 288
- { "numed", NUMED }, // 289
- { "numed-cr", NUMED_CR }, // 290
- { "numed-db", NUMED_DB }, // 291
- { "ninedot", NINEDOT }, // 292
- { "nines", NINES }, // 293
- { "ninev", NINEV }, // 294
- { "pic-p", PIC_P }, // 295
- { "spaces", SPACES }, // 296
- { "space", SPACES }, // 296
- { "literal", LITERAL }, // 297
- { "end", END }, // 298
- { "eop", EOP }, // 299
- { "filename", FILENAME }, // 300
- { "invalid", INVALID }, // 301
- { "number", NUMBER }, // 302
- { "negative", NEGATIVE }, // 303
- { "numstr", NUMSTR }, // 304
- { "overflow", OVERFLOW_kw }, // 305
- { "computational", COMPUTATIONAL }, // 306
- { "perform", PERFORM }, // 307
- { "backward", BACKWARD }, // 308
- { "positive", POSITIVE }, // 309
- { "pointer", POINTER }, // 310
- { "section", SECTION }, // 311
- { "standard-alphabet", STANDARD_ALPHABET }, // 312
- { "switch", SWITCH }, // 313
- { "upsi", UPSI }, // 314
- { "zero", ZERO }, // 315
- { "zeros", ZERO }, // 315
- { "zeroes", ZERO }, // 315
- { "sysin", SYSIN }, // 316
- { "sysipt", SYSIPT }, // 317
- { "sysout", SYSOUT }, // 318
- { "syslist", SYSLIST }, // 319
- { "syslst", SYSLST }, // 320
- { "syspunch", SYSPUNCH }, // 321
- { "syspch", SYSPCH }, // 322
- { "console", CONSOLE }, // 323
- { "c01", C01 }, // 324
- { "c02", C02 }, // 325
- { "c03", C03 }, // 326
- { "c04", C04 }, // 327
- { "c05", C05 }, // 328
- { "c06", C06 }, // 329
- { "c07", C07 }, // 330
- { "c08", C08 }, // 331
- { "c09", C09 }, // 332
- { "c10", C10 }, // 333
- { "c11", C11 }, // 334
- { "c12", C12 }, // 335
- { "csp", CSP }, // 336
- { "s01", S01 }, // 337
- { "s02", S02 }, // 338
- { "s03", S03 }, // 339
- { "s04", S04 }, // 340
- { "s05", S05 }, // 341
- { "afp-5a", AFP_5A }, // 342
- { "stdin", STDIN }, // 343
- { "stdout", STDOUT }, // 344
- { "stderr", STDERR }, // 345
- { "list", LIST }, // 346
- { "map", MAP }, // 347
- { "nolist", NOLIST }, // 348
- { "nomap", NOMAP }, // 349
- { "nosource", NOSOURCE }, // 350
- { "might-be", MIGHT_BE }, // 351
- { "function-udf", FUNCTION_UDF }, // 352
- { "function-udf-0", FUNCTION_UDF_0 }, // 353
- { "date-fmt", DATE_FMT }, // 354
- { "time-fmt", TIME_FMT }, // 355
- { "datetime-fmt", DATETIME_FMT }, // 356
- { "basis", BASIS }, // 357
- { "cbl", CBL }, // 358
- { "constant", CONSTANT }, // 359
- { "copy", COPY }, // 360
- { "defined", DEFINED }, // 361
- { "enter", ENTER }, // 362
- { "feature", FEATURE }, // 363
- { "insertt", INSERTT }, // 364
- { "lsub", LSUB }, // 365
- { "parameter", PARAMETER_kw }, // 366
- { "override", OVERRIDE }, // 367
- { "ready", READY }, // 368
- { "reset", RESET }, // 369
- { "rsub", RSUB }, // 370
- { "service-reload", SERVICE_RELOAD }, // 371
- { "star-cbl", STAR_CBL }, // 372
- { "subscript", SUBSCRIPT }, // 373
- { "suppress", SUPPRESS }, // 374
- { "title", TITLE }, // 375
- { "trace", TRACE }, // 376
- { "use", USE }, // 377
- { "cobol-words", COBOL_WORDS }, // 378
- { "equate", EQUATE }, // 379
- { "undefine", UNDEFINE }, // 380
- { "cdf-define", CDF_DEFINE }, // 381
- { "cdf-display", CDF_DISPLAY }, // 382
- { "cdf-if", CDF_IF }, // 383
- { "cdf-else", CDF_ELSE }, // 384
- { "cdf-end-if", CDF_END_IF }, // 385
- { "cdf-evaluate", CDF_EVALUATE }, // 386
- { "cdf-when", CDF_WHEN }, // 387
- { "cdf-end-evaluate", CDF_END_EVALUATE }, // 388
- { "call-cobol", CALL_COBOL }, // 389
- { "call-verbatim", CALL_VERBATIM }, // 390
- { "if", IF }, // 391
- { "then", THEN }, // 392
- { "else", ELSE }, // 393
- { "sentence", SENTENCE }, // 394
- { "accept", ACCEPT }, // 395
- { "add", ADD }, // 396
- { "alter", ALTER }, // 397
- { "call", CALL }, // 398
- { "cancel", CANCEL }, // 399
- { "close", CLOSE }, // 400
- { "compute", COMPUTE }, // 401
- { "continue", CONTINUE }, // 402
- { "delete", DELETE }, // 403
- { "display", DISPLAY }, // 404
- { "divide", DIVIDE }, // 405
- { "evaluate", EVALUATE }, // 406
- { "exit", EXIT }, // 407
- { "filler", FILLER_kw }, // 408
- { "goback", GOBACK }, // 409
- { "goto", GOTO }, // 410
- { "initialize", INITIALIZE }, // 411
- { "inspect", INSPECT }, // 412
- { "merge", MERGE }, // 413
- { "move", MOVE }, // 414
- { "multiply", MULTIPLY }, // 415
- { "open", OPEN }, // 416
- { "paragraph", PARAGRAPH }, // 417
- { "read", READ }, // 418
- { "release", RELEASE }, // 419
- { "return", RETURN }, // 420
- { "rewrite", REWRITE }, // 421
- { "search", SEARCH }, // 422
- { "set", SET }, // 423
- { "select", SELECT }, // 424
- { "sort", SORT }, // 425
- { "sort-merge", SORT_MERGE }, // 426
- { "string", STRING_kw }, // 427
- { "stop", STOP }, // 428
- { "subtract", SUBTRACT }, // 429
- { "start", START }, // 430
- { "unstring", UNSTRING }, // 431
- { "write", WRITE }, // 432
- { "when", WHEN }, // 433
- { "abs", ABS }, // 434
- { "access", ACCESS }, // 435
- { "acos", ACOS }, // 436
- { "actual", ACTUAL }, // 437
- { "advancing", ADVANCING }, // 438
- { "after", AFTER }, // 439
- { "all", ALL }, // 440
- { "allocate", ALLOCATE }, // 441
- { "alphabet", ALPHABET }, // 442
- { "alphabetic", ALPHABETIC }, // 443
- { "alphabetic-lower", ALPHABETIC_LOWER }, // 444
- { "alphabetic-upper", ALPHABETIC_UPPER }, // 445
- { "alphanumeric", ALPHANUMERIC }, // 446
- { "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 447
- { "also", ALSO }, // 448
- { "alternate", ALTERNATE }, // 449
- { "annuity", ANNUITY }, // 450
- { "anum", ANUM }, // 451
- { "any", ANY }, // 452
- { "anycase", ANYCASE }, // 453
- { "apply", APPLY }, // 454
- { "are", ARE }, // 455
- { "area", AREA }, // 456
- { "areas", AREAS }, // 457
- { "as", AS }, // 458
- { "ascending", ASCENDING }, // 459
- { "activating", ACTIVATING }, // 460
- { "asin", ASIN }, // 461
- { "assign", ASSIGN }, // 462
- { "at", AT }, // 463
- { "atan", ATAN }, // 464
- { "based", BASED }, // 465
- { "baseconvert", BASECONVERT }, // 466
- { "before", BEFORE }, // 467
- { "binary", BINARY }, // 468
- { "bit", BIT }, // 469
- { "bit-of", BIT_OF }, // 470
- { "bit-to-char", BIT_TO_CHAR }, // 471
- { "blank", BLANK }, // 472
- { "block", BLOCK_kw }, // 473
- { "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 474
- { "bottom", BOTTOM }, // 475
- { "by", BY }, // 476
- { "byte", BYTE }, // 477
- { "byte-length", BYTE_LENGTH }, // 478
- { "cf", CF }, // 479
- { "ch", CH }, // 480
- { "changed", CHANGED }, // 481
- { "char", CHAR }, // 482
- { "char-national", CHAR_NATIONAL }, // 483
- { "character", CHARACTER }, // 484
- { "characters", CHARACTERS }, // 485
- { "checking", CHECKING }, // 486
- { "class", CLASS }, // 487
- { "cobol", COBOL }, // 488
- { "code", CODE }, // 489
- { "code-set", CODESET }, // 490
- { "collating", COLLATING }, // 491
- { "column", COLUMN }, // 492
- { "combined-datetime", COMBINED_DATETIME }, // 493
- { "comma", COMMA }, // 494
- { "command-line", COMMAND_LINE }, // 495
- { "command-line-count", COMMAND_LINE_COUNT }, // 496
- { "commit", COMMIT }, // 497
- { "common", COMMON }, // 498
- { "concat", CONCAT }, // 499
- { "condition", CONDITION }, // 500
- { "configuration", CONFIGURATION_SECT }, // 501
- { "contains", CONTAINS }, // 502
- { "content", CONTENT }, // 503
- { "control", CONTROL }, // 504
- { "controls", CONTROLS }, // 505
- { "convert", CONVERT }, // 506
- { "converting", CONVERTING }, // 507
- { "corresponding", CORRESPONDING }, // 508
- { "cos", COS }, // 509
- { "count", COUNT }, // 510
- { "currency", CURRENCY }, // 511
- { "current", CURRENT }, // 512
- { "current-date", CURRENT_DATE }, // 513
- { "data", DATA }, // 514
- { "date", DATE }, // 515
- { "date-compiled", DATE_COMPILED }, // 516
- { "date-of-integer", DATE_OF_INTEGER }, // 517
- { "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 518
- { "date-written", DATE_WRITTEN }, // 519
- { "day", DAY }, // 520
- { "day-of-integer", DAY_OF_INTEGER }, // 521
- { "day-of-week", DAY_OF_WEEK }, // 522
- { "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 523
- { "dbcs", DBCS }, // 524
- { "de", DE }, // 525
- { "debugging", DEBUGGING }, // 526
- { "decimal-point", DECIMAL_POINT }, // 527
- { "declaratives", DECLARATIVES }, // 528
- { "default", DEFAULT }, // 529
- { "delimited", DELIMITED }, // 530
- { "delimiter", DELIMITER }, // 531
- { "depending", DEPENDING }, // 532
- { "descending", DESCENDING }, // 533
- { "detail", DETAIL }, // 534
- { "direct", DIRECT }, // 535
- { "direct-access", DIRECT_ACCESS }, // 536
- { "down", DOWN }, // 537
- { "duplicates", DUPLICATES }, // 538
- { "dynamic", DYNAMIC }, // 539
- { "e", E }, // 540
- { "ebcdic", EBCDIC }, // 541
- { "ec", EC }, // 542
- { "egcs", EGCS }, // 543
- { "entry", ENTRY }, // 544
- { "environment", ENVIRONMENT }, // 545
- { "equal", EQUAL }, // 546
- { "every", EVERY }, // 547
- { "examine", EXAMINE }, // 548
- { "exhibit", EXHIBIT }, // 549
- { "exp", EXP }, // 550
- { "exp10", EXP10 }, // 551
- { "extend", EXTEND }, // 552
- { "external", EXTERNAL }, // 553
- { "exception-file", EXCEPTION_FILE }, // 554
- { "exception-file-n", EXCEPTION_FILE_N }, // 555
- { "exception-location", EXCEPTION_LOCATION }, // 556
- { "exception-location-n", EXCEPTION_LOCATION_N }, // 557
- { "exception-statement", EXCEPTION_STATEMENT }, // 558
- { "exception-status", EXCEPTION_STATUS }, // 559
- { "factorial", FACTORIAL }, // 560
- { "false", FALSE_kw }, // 561
- { "fd", FD }, // 562
- { "file-control", FILE_CONTROL }, // 563
- { "file", FILE_KW }, // 564
- { "file-limit", FILE_LIMIT }, // 565
- { "final", FINAL }, // 566
- { "finally", FINALLY }, // 567
- { "find-string", FIND_STRING }, // 568
- { "first", FIRST }, // 569
- { "fixed", FIXED }, // 570
- { "footing", FOOTING }, // 571
- { "for", FOR }, // 572
- { "formatted-current-date", FORMATTED_CURRENT_DATE }, // 573
- { "formatted-date", FORMATTED_DATE }, // 574
- { "formatted-datetime", FORMATTED_DATETIME }, // 575
- { "formatted-time", FORMATTED_TIME }, // 576
- { "form-overflow", FORM_OVERFLOW }, // 577
- { "free", FREE }, // 578
- { "fraction-part", FRACTION_PART }, // 579
- { "from", FROM }, // 580
- { "function", FUNCTION }, // 581
- { "generate", GENERATE }, // 582
- { "giving", GIVING }, // 583
- { "global", GLOBAL }, // 584
- { "go", GO }, // 585
- { "group", GROUP }, // 586
- { "heading", HEADING }, // 587
- { "hex", HEX }, // 588
- { "hex-of", HEX_OF }, // 589
- { "hex-to-char", HEX_TO_CHAR }, // 590
- { "high-values", HIGH_VALUES }, // 591
- { "highest-algebraic", HIGHEST_ALGEBRAIC }, // 592
- { "hold", HOLD }, // 593
- { "ibm-360", IBM_360 }, // 594
- { "in", IN }, // 595
- { "include", INCLUDE }, // 596
- { "index", INDEX }, // 597
- { "indexed", INDEXED }, // 598
- { "indicate", INDICATE }, // 599
- { "initial", INITIAL_kw }, // 600
- { "initiate", INITIATE }, // 601
- { "input", INPUT }, // 602
- { "installation", INSTALLATION }, // 603
- { "interface", INTERFACE }, // 604
- { "integer", INTEGER }, // 605
- { "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 606
- { "integer-of-date", INTEGER_OF_DATE }, // 607
- { "integer-of-day", INTEGER_OF_DAY }, // 608
- { "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 609
- { "integer-part", INTEGER_PART }, // 610
- { "into", INTO }, // 611
- { "intrinsic", INTRINSIC }, // 612
- { "invoke", INVOKE }, // 613
- { "i-o", IO }, // 614
- { "i-o-control", IO_CONTROL }, // 615
- { "is", IS }, // 616
- { "isnt", ISNT }, // 617
- { "kanji", KANJI }, // 618
- { "key", KEY }, // 619
- { "label", LABEL }, // 620
- { "last", LAST }, // 621
- { "leading", LEADING }, // 622
- { "left", LEFT }, // 623
- { "length", LENGTH }, // 624
- { "length-of", LENGTH_OF }, // 625
- { "limit", LIMIT }, // 626
- { "limits", LIMITS }, // 627
- { "line", LINE }, // 628
- { "lines", LINES }, // 629
- { "line-counter", LINE_COUNTER }, // 630
- { "linage", LINAGE }, // 631
- { "linkage", LINKAGE }, // 632
- { "locale", LOCALE }, // 633
- { "locale-compare", LOCALE_COMPARE }, // 634
- { "locale-date", LOCALE_DATE }, // 635
- { "locale-time", LOCALE_TIME }, // 636
- { "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 637
- { "local-storage", LOCAL_STORAGE }, // 638
- { "location", LOCATION }, // 639
- { "lock", LOCK }, // 640
- { "lock-on", LOCK_ON }, // 641
- { "log", LOG }, // 642
- { "log10", LOG10 }, // 643
- { "lower-case", LOWER_CASE }, // 644
- { "low-values", LOW_VALUES }, // 645
- { "lowest-algebraic", LOWEST_ALGEBRAIC }, // 646
- { "lparen", LPAREN }, // 647
- { "manual", MANUAL }, // 648
- { "maxx", MAXX }, // 649
- { "mean", MEAN }, // 650
- { "median", MEDIAN }, // 651
- { "midrange", MIDRANGE }, // 652
- { "minn", MINN }, // 653
- { "multiple", MULTIPLE }, // 654
- { "mod", MOD }, // 655
- { "mode", MODE }, // 656
- { "module-name", MODULE_NAME }, // 657
- { "named", NAMED }, // 658
- { "nat", NAT }, // 659
- { "national", NATIONAL }, // 660
- { "national-edited", NATIONAL_EDITED }, // 661
- { "national-of", NATIONAL_OF }, // 662
- { "native", NATIVE }, // 663
- { "nested", NESTED }, // 664
- { "next", NEXT }, // 665
- { "no", NO }, // 666
- { "note", NOTE }, // 667
- { "nulls", NULLS }, // 668
- { "null", NULLS }, // 668
- { "nullptr", NULLPTR }, // 669
- { "numeric", NUMERIC }, // 670
- { "numeric-edited", NUMERIC_EDITED }, // 671
- { "numval", NUMVAL }, // 672
- { "numval-c", NUMVAL_C }, // 673
- { "numval-f", NUMVAL_F }, // 674
- { "occurs", OCCURS }, // 675
- { "of", OF }, // 676
- { "off", OFF }, // 677
- { "omitted", OMITTED }, // 678
- { "on", ON }, // 679
- { "only", ONLY }, // 680
- { "optional", OPTIONAL }, // 681
- { "options", OPTIONS }, // 682
- { "ord", ORD }, // 683
- { "order", ORDER }, // 684
- { "ord-max", ORD_MAX }, // 685
- { "ord-min", ORD_MIN }, // 686
- { "organization", ORGANIZATION }, // 687
- { "other", OTHER }, // 688
- { "otherwise", OTHERWISE }, // 689
- { "output", OUTPUT }, // 690
- { "packed-decimal", PACKED_DECIMAL }, // 691
- { "padding", PADDING }, // 692
- { "page", PAGE }, // 693
- { "page-counter", PAGE_COUNTER }, // 694
- { "pf", PF }, // 695
- { "ph", PH }, // 696
- { "pi", PI }, // 697
- { "pic", PIC }, // 698
- { "picture", PICTURE }, // 699
- { "plus", PLUS }, // 700
- { "present-value", PRESENT_VALUE }, // 701
- { "print-switch", PRINT_SWITCH }, // 702
- { "procedure", PROCEDURE }, // 703
- { "procedures", PROCEDURES }, // 704
- { "proceed", PROCEED }, // 705
- { "process", PROCESS }, // 706
- { "program-id", PROGRAM_ID }, // 707
- { "program", PROGRAM_kw }, // 708
- { "property", PROPERTY }, // 709
- { "prototype", PROTOTYPE }, // 710
- { "pseudotext", PSEUDOTEXT }, // 711
- { "quotes", QUOTES }, // 712
- { "quote", QUOTES }, // 712
- { "random", RANDOM }, // 713
- { "random-seed", RANDOM_SEED }, // 714
- { "range", RANGE }, // 715
- { "raise", RAISE }, // 716
- { "raising", RAISING }, // 717
- { "rd", RD }, // 718
- { "record", RECORD }, // 719
- { "recording", RECORDING }, // 720
- { "records", RECORDS }, // 721
- { "recursive", RECURSIVE }, // 722
- { "redefines", REDEFINES }, // 723
- { "reel", REEL }, // 724
- { "reference", REFERENCE }, // 725
- { "relative", RELATIVE }, // 726
- { "rem", REM }, // 727
- { "remainder", REMAINDER }, // 728
- { "remarks", REMARKS }, // 729
- { "removal", REMOVAL }, // 730
- { "renames", RENAMES }, // 731
- { "replace", REPLACE }, // 732
- { "replacing", REPLACING }, // 733
- { "report", REPORT }, // 734
- { "reporting", REPORTING }, // 735
- { "reports", REPORTS }, // 736
- { "repository", REPOSITORY }, // 737
- { "rerun", RERUN }, // 738
- { "reserve", RESERVE }, // 739
- { "restricted", RESTRICTED }, // 740
- { "resume", RESUME }, // 741
- { "reverse", REVERSE }, // 742
- { "reversed", REVERSED }, // 743
- { "rewind", REWIND }, // 744
- { "rf", RF }, // 745
- { "rh", RH }, // 746
- { "right", RIGHT }, // 747
- { "rounded", ROUNDED }, // 748
- { "run", RUN }, // 749
- { "same", SAME }, // 750
- { "screen", SCREEN }, // 751
- { "sd", SD }, // 752
- { "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 753
- { "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 754
- { "security", SECURITY }, // 755
- { "separate", SEPARATE }, // 756
- { "sequence", SEQUENCE }, // 757
- { "sequential", SEQUENTIAL }, // 758
- { "sharing", SHARING }, // 759
- { "simple-exit", SIMPLE_EXIT }, // 760
- { "sign", SIGN }, // 761
- { "sin", SIN }, // 762
- { "size", SIZE }, // 763
- { "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 764
- { "source", SOURCE }, // 765
- { "source-computer", SOURCE_COMPUTER }, // 766
- { "special-names", SPECIAL_NAMES }, // 767
- { "sqrt", SQRT }, // 768
- { "stack", STACK }, // 769
- { "standard", STANDARD }, // 770
- { "standard-1", STANDARD_1 }, // 771
- { "standard-deviation", STANDARD_DEVIATION }, // 772
- { "standard-compare", STANDARD_COMPARE }, // 773
- { "status", STATUS }, // 774
- { "strong", STRONG }, // 775
- { "substitute", SUBSTITUTE }, // 776
- { "sum", SUM }, // 777
- { "symbol", SYMBOL }, // 778
- { "symbolic", SYMBOLIC }, // 779
- { "synchronized", SYNCHRONIZED }, // 780
- { "tally", TALLY }, // 781
- { "tallying", TALLYING }, // 782
- { "tan", TAN }, // 783
- { "terminate", TERMINATE }, // 784
- { "test", TEST }, // 785
- { "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 786
- { "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 787
- { "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 788
- { "test-numval", TEST_NUMVAL }, // 789
- { "test-numval-c", TEST_NUMVAL_C }, // 790
- { "test-numval-f", TEST_NUMVAL_F }, // 791
- { "than", THAN }, // 792
- { "time", TIME }, // 793
- { "times", TIMES }, // 794
- { "to", TO }, // 795
- { "top", TOP }, // 796
- { "top-level", TOP_LEVEL }, // 797
- { "tracks", TRACKS }, // 798
- { "track-area", TRACK_AREA }, // 799
- { "trailing", TRAILING }, // 800
- { "transform", TRANSFORM }, // 801
- { "trim", TRIM }, // 802
- { "true", TRUE_kw }, // 803
- { "try", TRY }, // 804
- { "turn", TURN }, // 805
- { "type", TYPE }, // 806
- { "typedef", TYPEDEF }, // 807
- { "ulength", ULENGTH }, // 808
- { "unbounded", UNBOUNDED }, // 809
- { "unit", UNIT }, // 810
- { "units", UNITS }, // 811
- { "unit-record", UNIT_RECORD }, // 812
- { "until", UNTIL }, // 813
- { "up", UP }, // 814
- { "upon", UPON }, // 815
- { "upos", UPOS }, // 816
- { "upper-case", UPPER_CASE }, // 817
- { "usage", USAGE }, // 818
- { "using", USING }, // 819
- { "usubstr", USUBSTR }, // 820
- { "usupplementary", USUPPLEMENTARY }, // 821
- { "utility", UTILITY }, // 822
- { "uuid4", UUID4 }, // 823
- { "uvalid", UVALID }, // 824
- { "uwidth", UWIDTH }, // 825
- { "value", VALUE }, // 826
- { "variance", VARIANCE }, // 827
- { "varying", VARYING }, // 828
- { "volatile", VOLATILE }, // 829
- { "when-compiled", WHEN_COMPILED }, // 830
- { "with", WITH }, // 831
- { "working-storage", WORKING_STORAGE }, // 832
- { "xml", XML }, // 833
- { "xmlgenerate", XMLGENERATE }, // 834
- { "xmlparse", XMLPARSE }, // 835
- { "year-to-yyyy", YEAR_TO_YYYY }, // 836
- { "yyyyddd", YYYYDDD }, // 837
- { "yyyymmdd", YYYYMMDD }, // 838
- { "arithmetic", ARITHMETIC }, // 839
- { "attribute", ATTRIBUTE }, // 840
- { "auto", AUTO }, // 841
- { "automatic", AUTOMATIC }, // 842
- { "away-from-zero", AWAY_FROM_ZERO }, // 843
- { "background-color", BACKGROUND_COLOR }, // 844
- { "bell", BELL }, // 845
- { "binary-encoding", BINARY_ENCODING }, // 846
- { "blink", BLINK }, // 847
- { "capacity", CAPACITY }, // 848
- { "center", CENTER }, // 849
- { "classification", CLASSIFICATION }, // 850
- { "cycle", CYCLE }, // 851
- { "decimal-encoding", DECIMAL_ENCODING }, // 852
- { "entry-convention", ENTRY_CONVENTION }, // 853
- { "eol", EOL }, // 854
- { "eos", EOS }, // 855
- { "erase", ERASE }, // 856
- { "expands", EXPANDS }, // 857
- { "float-binary", FLOAT_BINARY }, // 858
- { "float-decimal", FLOAT_DECIMAL }, // 859
- { "foreground-color", FOREGROUND_COLOR }, // 860
- { "forever", FOREVER }, // 861
- { "full", FULL }, // 862
- { "highlight", HIGHLIGHT }, // 863
- { "high-order-left", HIGH_ORDER_LEFT }, // 864
- { "high-order-right", HIGH_ORDER_RIGHT }, // 865
- { "ignoring", IGNORING }, // 866
- { "implements", IMPLEMENTS }, // 867
- { "initialized", INITIALIZED }, // 868
- { "intermediate", INTERMEDIATE }, // 869
- { "lc-all", LC_ALL_kw }, // 870
- { "lc-collate", LC_COLLATE_kw }, // 871
- { "lc-ctype", LC_CTYPE_kw }, // 872
- { "lc-messages", LC_MESSAGES_kw }, // 873
- { "lc-monetary", LC_MONETARY_kw }, // 874
- { "lc-numeric", LC_NUMERIC_kw }, // 875
- { "lc-time", LC_TIME_kw }, // 876
- { "lowlight", LOWLIGHT }, // 877
- { "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 878
- { "nearest-even", NEAREST_EVEN }, // 879
- { "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 880
- { "none", NONE }, // 881
- { "normal", NORMAL }, // 882
- { "numbers", NUMBERS }, // 883
- { "prefixed", PREFIXED }, // 884
- { "previous", PREVIOUS }, // 885
- { "prohibited", PROHIBITED }, // 886
- { "relation", RELATION }, // 887
- { "required", REQUIRED }, // 888
- { "reverse-video", REVERSE_VIDEO }, // 889
- { "rounding", ROUNDING }, // 890
- { "seconds", SECONDS }, // 891
- { "secure", SECURE }, // 892
- { "short", SHORT }, // 893
- { "signed", SIGNED_kw }, // 894
- { "standard-binary", STANDARD_BINARY }, // 895
- { "standard-decimal", STANDARD_DECIMAL }, // 896
- { "statement", STATEMENT }, // 897
- { "step", STEP }, // 898
- { "structure", STRUCTURE }, // 899
- { "toward-greater", TOWARD_GREATER }, // 900
- { "toward-lesser", TOWARD_LESSER }, // 901
- { "truncation", TRUNCATION }, // 902
- { "ucs-4", UCS_4 }, // 903
- { "underline", UNDERLINE }, // 904
- { "unsigned", UNSIGNED_kw }, // 905
- { "utf-16", UTF_16 }, // 906
- { "utf-8", UTF_8 }, // 907
- { "address", ADDRESS }, // 908
- { "end-accept", END_ACCEPT }, // 909
- { "end-add", END_ADD }, // 910
- { "end-call", END_CALL }, // 911
- { "end-compute", END_COMPUTE }, // 912
- { "end-delete", END_DELETE }, // 913
- { "end-display", END_DISPLAY }, // 914
- { "end-divide", END_DIVIDE }, // 915
- { "end-evaluate", END_EVALUATE }, // 916
- { "end-multiply", END_MULTIPLY }, // 917
- { "end-perform", END_PERFORM }, // 918
- { "end-read", END_READ }, // 919
- { "end-return", END_RETURN }, // 920
- { "end-rewrite", END_REWRITE }, // 921
- { "end-search", END_SEARCH }, // 922
- { "end-start", END_START }, // 923
- { "end-string", END_STRING }, // 924
- { "end-subtract", END_SUBTRACT }, // 925
- { "end-unstring", END_UNSTRING }, // 926
- { "end-write", END_WRITE }, // 927
- { "end-if", END_IF }, // 928
- { "thru", THRU }, // 929
- { "through", THRU }, // 929
- { "or", OR }, // 930
- { "and", AND }, // 931
- { "not", NOT }, // 932
- { "ne", NE }, // 933
- { "le", LE }, // 934
- { "ge", GE }, // 935
- { "pow", POW }, // 936
- { "neg", NEG }, // 937
+ { "identification", IDENTIFICATION_DIV }, // 258
+ { "environment", ENVIRONMENT_DIV }, // 259
+ { "procedure", PROCEDURE_DIV }, // 260
+ { "data", DATA_DIV }, // 261
+ { "file", FILE_SECT }, // 262
+ { "input-output", INPUT_OUTPUT_SECT }, // 263
+ { "linkage", LINKAGE_SECT }, // 264
+ { "local-storage", LOCAL_STORAGE_SECT }, // 265
+ { "working-storage", WORKING_STORAGE_SECT }, // 266
+ { "object-computer", OBJECT_COMPUTER }, // 267
+ { "display-of", DISPLAY_OF }, // 268
+ { "end-function", END_FUNCTION }, // 269
+ { "end-program", END_PROGRAM }, // 270
+ { "end-subprogram", END_SUBPROGRAM }, // 271
+ { "justified", JUSTIFIED }, // 272
+ { "returning", RETURNING }, // 273
+ { "no-condition", NO_CONDITION }, // 274
+ { "alnum", ALNUM }, // 275
+ { "alphed", ALPHED }, // 276
+ { "error", ERROR }, // 277
+ { "exception", EXCEPTION }, // 278
+ { "size-error", SIZE_ERROR }, // 279
+ { "exception-name", EXCEPTION_NAME }, // 280
+ { "level", LEVEL }, // 281
+ { "level66", LEVEL66 }, // 282
+ { "level78", LEVEL78 }, // 283
+ { "level88", LEVEL88 }, // 284
+ { "class-name", CLASS_NAME }, // 285
+ { "name", NAME }, // 286
+ { "name88", NAME88 }, // 287
+ { "nume", NUME }, // 288
+ { "numed", NUMED }, // 289
+ { "numed-cr", NUMED_CR }, // 290
+ { "numed-db", NUMED_DB }, // 291
+ { "ninedot", NINEDOT }, // 292
+ { "nines", NINES }, // 293
+ { "ninev", NINEV }, // 294
+ { "pic-p", PIC_P }, // 295
+ { "ones", ONES }, // 296
+ { "spaces", SPACES }, // 297
+ { "space", SPACES }, // 297
+ { "literal", LITERAL }, // 298
+ { "end", END }, // 299
+ { "eop", EOP }, // 300
+ { "filename", FILENAME }, // 301
+ { "invalid", INVALID }, // 302
+ { "number", NUMBER }, // 303
+ { "negative", NEGATIVE }, // 304
+ { "numstr", NUMSTR }, // 305
+ { "overflow", OVERFLOW_kw }, // 306
+ { "binary-integer", BINARY_INTEGER }, // 307
+ { "computational", COMPUTATIONAL }, // 308
+ { "perform", PERFORM }, // 309
+ { "backward", BACKWARD }, // 310
+ { "positive", POSITIVE }, // 311
+ { "pointer", POINTER }, // 312
+ { "section", SECTION }, // 313
+ { "standard-alphabet", STANDARD_ALPHABET }, // 314
+ { "switch", SWITCH }, // 315
+ { "upsi", UPSI }, // 316
+ { "zero", ZERO }, // 317
+ { "zeros", ZERO }, // 317
+ { "zeroes", ZERO }, // 317
+ { "sysin", SYSIN }, // 318
+ { "sysipt", SYSIPT }, // 319
+ { "sysout", SYSOUT }, // 320
+ { "syslist", SYSLIST }, // 321
+ { "syslst", SYSLST }, // 322
+ { "syspunch", SYSPUNCH }, // 323
+ { "syspch", SYSPCH }, // 324
+ { "console", CONSOLE }, // 325
+ { "c01", C01 }, // 326
+ { "c02", C02 }, // 327
+ { "c03", C03 }, // 328
+ { "c04", C04 }, // 329
+ { "c05", C05 }, // 330
+ { "c06", C06 }, // 331
+ { "c07", C07 }, // 332
+ { "c08", C08 }, // 333
+ { "c09", C09 }, // 334
+ { "c10", C10 }, // 335
+ { "c11", C11 }, // 336
+ { "c12", C12 }, // 337
+ { "csp", CSP }, // 338
+ { "s01", S01 }, // 339
+ { "s02", S02 }, // 340
+ { "s03", S03 }, // 341
+ { "s04", S04 }, // 342
+ { "s05", S05 }, // 343
+ { "afp-5a", AFP_5A }, // 344
+ { "stdin", STDIN }, // 345
+ { "stdout", STDOUT }, // 346
+ { "stderr", STDERR }, // 347
+ { "list", LIST }, // 348
+ { "map", MAP }, // 349
+ { "nolist", NOLIST }, // 350
+ { "nomap", NOMAP }, // 351
+ { "nosource", NOSOURCE }, // 352
+ { "might-be", MIGHT_BE }, // 353
+ { "function-udf", FUNCTION_UDF }, // 354
+ { "function-udf-0", FUNCTION_UDF_0 }, // 355
+ { "date-fmt", DATE_FMT }, // 356
+ { "time-fmt", TIME_FMT }, // 357
+ { "datetime-fmt", DATETIME_FMT }, // 358
+ { "basis", BASIS }, // 359
+ { "cbl", CBL }, // 360
+ { "constant", CONSTANT }, // 361
+ { "copy", COPY }, // 362
+ { "defined", DEFINED }, // 363
+ { "enter", ENTER }, // 364
+ { "feature", FEATURE }, // 365
+ { "insertt", INSERTT }, // 366
+ { "lsub", LSUB }, // 367
+ { "parameter", PARAMETER_kw }, // 368
+ { "override", OVERRIDE }, // 369
+ { "ready", READY }, // 370
+ { "reset", RESET }, // 371
+ { "rsub", RSUB }, // 372
+ { "service-reload", SERVICE_RELOAD }, // 373
+ { "star-cbl", STAR_CBL }, // 374
+ { "subscript", SUBSCRIPT }, // 375
+ { "suppress", SUPPRESS }, // 376
+ { "title", TITLE }, // 377
+ { "trace", TRACE }, // 378
+ { "use", USE }, // 379
+ { "cobol-words", COBOL_WORDS }, // 380
+ { "equate", EQUATE }, // 381
+ { "undefine", UNDEFINE }, // 382
+ { "cdf-define", CDF_DEFINE }, // 383
+ { "cdf-display", CDF_DISPLAY }, // 384
+ { "cdf-if", CDF_IF }, // 385
+ { "cdf-else", CDF_ELSE }, // 386
+ { "cdf-end-if", CDF_END_IF }, // 387
+ { "cdf-evaluate", CDF_EVALUATE }, // 388
+ { "cdf-when", CDF_WHEN }, // 389
+ { "cdf-end-evaluate", CDF_END_EVALUATE }, // 390
+ { "call-cobol", CALL_COBOL }, // 391
+ { "call-verbatim", CALL_VERBATIM }, // 392
+ { "if", IF }, // 393
+ { "then", THEN }, // 394
+ { "else", ELSE }, // 395
+ { "sentence", SENTENCE }, // 396
+ { "accept", ACCEPT }, // 397
+ { "add", ADD }, // 398
+ { "alter", ALTER }, // 399
+ { "call", CALL }, // 400
+ { "cancel", CANCEL }, // 401
+ { "close", CLOSE }, // 402
+ { "compute", COMPUTE }, // 403
+ { "continue", CONTINUE }, // 404
+ { "delete", DELETE }, // 405
+ { "display", DISPLAY }, // 406
+ { "divide", DIVIDE }, // 407
+ { "evaluate", EVALUATE }, // 408
+ { "exit", EXIT }, // 409
+ { "filler", FILLER_kw }, // 410
+ { "goback", GOBACK }, // 411
+ { "goto", GOTO }, // 412
+ { "initialize", INITIALIZE }, // 413
+ { "inspect", INSPECT }, // 414
+ { "merge", MERGE }, // 415
+ { "move", MOVE }, // 416
+ { "multiply", MULTIPLY }, // 417
+ { "open", OPEN }, // 418
+ { "paragraph", PARAGRAPH }, // 419
+ { "read", READ }, // 420
+ { "release", RELEASE }, // 421
+ { "return", RETURN }, // 422
+ { "rewrite", REWRITE }, // 423
+ { "search", SEARCH }, // 424
+ { "set", SET }, // 425
+ { "select", SELECT }, // 426
+ { "sort", SORT }, // 427
+ { "sort-merge", SORT_MERGE }, // 428
+ { "string", STRING_kw }, // 429
+ { "stop", STOP }, // 430
+ { "subtract", SUBTRACT }, // 431
+ { "start", START }, // 432
+ { "unstring", UNSTRING }, // 433
+ { "write", WRITE }, // 434
+ { "when", WHEN }, // 435
+ { "abs", ABS }, // 436
+ { "access", ACCESS }, // 437
+ { "acos", ACOS }, // 438
+ { "actual", ACTUAL }, // 439
+ { "advancing", ADVANCING }, // 440
+ { "after", AFTER }, // 441
+ { "all", ALL }, // 442
+ { "allocate", ALLOCATE }, // 443
+ { "alphabet", ALPHABET }, // 444
+ { "alphabetic", ALPHABETIC }, // 445
+ { "alphabetic-lower", ALPHABETIC_LOWER }, // 446
+ { "alphabetic-upper", ALPHABETIC_UPPER }, // 447
+ { "alphanumeric", ALPHANUMERIC }, // 448
+ { "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 449
+ { "also", ALSO }, // 450
+ { "alternate", ALTERNATE }, // 451
+ { "annuity", ANNUITY }, // 452
+ { "anum", ANUM }, // 453
+ { "any", ANY }, // 454
+ { "anycase", ANYCASE }, // 455
+ { "apply", APPLY }, // 456
+ { "are", ARE }, // 457
+ { "area", AREA }, // 458
+ { "areas", AREAS }, // 459
+ { "as", AS }, // 460
+ { "ascending", ASCENDING }, // 461
+ { "activating", ACTIVATING }, // 462
+ { "asin", ASIN }, // 463
+ { "assign", ASSIGN }, // 464
+ { "at", AT }, // 465
+ { "atan", ATAN }, // 466
+ { "based", BASED }, // 467
+ { "baseconvert", BASECONVERT }, // 468
+ { "before", BEFORE }, // 469
+ { "binary", BINARY }, // 470
+ { "bit", BIT }, // 471
+ { "bit-of", BIT_OF }, // 472
+ { "bit-to-char", BIT_TO_CHAR }, // 473
+ { "blank", BLANK }, // 474
+ { "block", BLOCK_kw }, // 475
+ { "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 476
+ { "bottom", BOTTOM }, // 477
+ { "by", BY }, // 478
+ { "byte", BYTE }, // 479
+ { "byte-length", BYTE_LENGTH }, // 480
+ { "cf", CF }, // 481
+ { "ch", CH }, // 482
+ { "changed", CHANGED }, // 483
+ { "char", CHAR }, // 484
+ { "char-national", CHAR_NATIONAL }, // 485
+ { "character", CHARACTER }, // 486
+ { "characters", CHARACTERS }, // 487
+ { "checking", CHECKING }, // 488
+ { "class", CLASS }, // 489
+ { "cobol", COBOL }, // 490
+ { "code", CODE }, // 491
+ { "code-set", CODESET }, // 492
+ { "collating", COLLATING }, // 493
+ { "column", COLUMN }, // 494
+ { "combined-datetime", COMBINED_DATETIME }, // 495
+ { "comma", COMMA }, // 496
+ { "command-line", COMMAND_LINE }, // 497
+ { "command-line-count", COMMAND_LINE_COUNT }, // 498
+ { "commit", COMMIT }, // 499
+ { "common", COMMON }, // 500
+ { "concat", CONCAT }, // 501
+ { "condition", CONDITION }, // 502
+ { "configuration", CONFIGURATION_SECT }, // 503
+ { "contains", CONTAINS }, // 504
+ { "content", CONTENT }, // 505
+ { "control", CONTROL }, // 506
+ { "controls", CONTROLS }, // 507
+ { "convert", CONVERT }, // 508
+ { "converting", CONVERTING }, // 509
+ { "corresponding", CORRESPONDING }, // 510
+ { "cos", COS }, // 511
+ { "count", COUNT }, // 512
+ { "currency", CURRENCY }, // 513
+ { "current", CURRENT }, // 514
+ { "current-date", CURRENT_DATE }, // 515
+ { "data", DATA }, // 516
+ { "date", DATE }, // 517
+ { "date-compiled", DATE_COMPILED }, // 518
+ { "date-of-integer", DATE_OF_INTEGER }, // 519
+ { "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 520
+ { "date-written", DATE_WRITTEN }, // 521
+ { "day", DAY }, // 522
+ { "day-of-integer", DAY_OF_INTEGER }, // 523
+ { "day-of-week", DAY_OF_WEEK }, // 524
+ { "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 525
+ { "dbcs", DBCS }, // 526
+ { "de", DE }, // 527
+ { "debugging", DEBUGGING }, // 528
+ { "decimal-point", DECIMAL_POINT }, // 529
+ { "declaratives", DECLARATIVES }, // 530
+ { "default", DEFAULT }, // 531
+ { "delimited", DELIMITED }, // 532
+ { "delimiter", DELIMITER }, // 533
+ { "depending", DEPENDING }, // 534
+ { "descending", DESCENDING }, // 535
+ { "detail", DETAIL }, // 536
+ { "direct", DIRECT }, // 537
+ { "direct-access", DIRECT_ACCESS }, // 538
+ { "down", DOWN }, // 539
+ { "duplicates", DUPLICATES }, // 540
+ { "dynamic", DYNAMIC }, // 541
+ { "e", E }, // 542
+ { "ebcdic", EBCDIC }, // 543
+ { "ec", EC }, // 544
+ { "egcs", EGCS }, // 545
+ { "entry", ENTRY }, // 546
+ { "environment", ENVIRONMENT }, // 547
+ { "equal", EQUAL }, // 548
+ { "every", EVERY }, // 549
+ { "examine", EXAMINE }, // 550
+ { "exhibit", EXHIBIT }, // 551
+ { "exp", EXP }, // 552
+ { "exp10", EXP10 }, // 553
+ { "extend", EXTEND }, // 554
+ { "external", EXTERNAL }, // 555
+ { "exception-file", EXCEPTION_FILE }, // 556
+ { "exception-file-n", EXCEPTION_FILE_N }, // 557
+ { "exception-location", EXCEPTION_LOCATION }, // 558
+ { "exception-location-n", EXCEPTION_LOCATION_N }, // 559
+ { "exception-statement", EXCEPTION_STATEMENT }, // 560
+ { "exception-status", EXCEPTION_STATUS }, // 561
+ { "factorial", FACTORIAL }, // 562
+ { "false", FALSE_kw }, // 563
+ { "fd", FD }, // 564
+ { "file-control", FILE_CONTROL }, // 565
+ { "file", FILE_KW }, // 566
+ { "file-limit", FILE_LIMIT }, // 567
+ { "final", FINAL }, // 568
+ { "finally", FINALLY }, // 569
+ { "find-string", FIND_STRING }, // 570
+ { "first", FIRST }, // 571
+ { "fixed", FIXED }, // 572
+ { "footing", FOOTING }, // 573
+ { "for", FOR }, // 574
+ { "formatted-current-date", FORMATTED_CURRENT_DATE }, // 575
+ { "formatted-date", FORMATTED_DATE }, // 576
+ { "formatted-datetime", FORMATTED_DATETIME }, // 577
+ { "formatted-time", FORMATTED_TIME }, // 578
+ { "form-overflow", FORM_OVERFLOW }, // 579
+ { "free", FREE }, // 580
+ { "fraction-part", FRACTION_PART }, // 581
+ { "from", FROM }, // 582
+ { "function", FUNCTION }, // 583
+ { "generate", GENERATE }, // 584
+ { "giving", GIVING }, // 585
+ { "global", GLOBAL }, // 586
+ { "go", GO }, // 587
+ { "group", GROUP }, // 588
+ { "heading", HEADING }, // 589
+ { "hex", HEX }, // 590
+ { "hex-of", HEX_OF }, // 591
+ { "hex-to-char", HEX_TO_CHAR }, // 592
+ { "high-values", HIGH_VALUES }, // 593
+ { "highest-algebraic", HIGHEST_ALGEBRAIC }, // 594
+ { "hold", HOLD }, // 595
+ { "ibm-360", IBM_360 }, // 596
+ { "in", IN }, // 597
+ { "include", INCLUDE }, // 598
+ { "index", INDEX }, // 599
+ { "indexed", INDEXED }, // 600
+ { "indicate", INDICATE }, // 601
+ { "initial", INITIAL_kw }, // 602
+ { "initiate", INITIATE }, // 603
+ { "input", INPUT }, // 604
+ { "installation", INSTALLATION }, // 605
+ { "interface", INTERFACE }, // 606
+ { "integer", INTEGER }, // 607
+ { "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 608
+ { "integer-of-date", INTEGER_OF_DATE }, // 609
+ { "integer-of-day", INTEGER_OF_DAY }, // 610
+ { "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 611
+ { "integer-part", INTEGER_PART }, // 612
+ { "into", INTO }, // 613
+ { "intrinsic", INTRINSIC }, // 614
+ { "invoke", INVOKE }, // 615
+ { "i-o", IO }, // 616
+ { "i-o-control", IO_CONTROL }, // 617
+ { "is", IS }, // 618
+ { "isnt", ISNT }, // 619
+ { "kanji", KANJI }, // 620
+ { "key", KEY }, // 621
+ { "label", LABEL }, // 622
+ { "last", LAST }, // 623
+ { "leading", LEADING }, // 624
+ { "left", LEFT }, // 625
+ { "length", LENGTH }, // 626
+ { "length-of", LENGTH_OF }, // 627
+ { "limit", LIMIT }, // 628
+ { "limits", LIMITS }, // 629
+ { "line", LINE }, // 630
+ { "lines", LINES }, // 631
+ { "line-counter", LINE_COUNTER }, // 632
+ { "linage", LINAGE }, // 633
+ { "linkage", LINKAGE }, // 634
+ { "locale", LOCALE }, // 635
+ { "locale-compare", LOCALE_COMPARE }, // 636
+ { "locale-date", LOCALE_DATE }, // 637
+ { "locale-time", LOCALE_TIME }, // 638
+ { "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 639
+ { "local-storage", LOCAL_STORAGE }, // 640
+ { "location", LOCATION }, // 641
+ { "lock", LOCK }, // 642
+ { "lock-on", LOCK_ON }, // 643
+ { "log", LOG }, // 644
+ { "log10", LOG10 }, // 645
+ { "lower-case", LOWER_CASE }, // 646
+ { "low-values", LOW_VALUES }, // 647
+ { "lowest-algebraic", LOWEST_ALGEBRAIC }, // 648
+ { "lparen", LPAREN }, // 649
+ { "manual", MANUAL }, // 650
+ { "maxx", MAXX }, // 651
+ { "mean", MEAN }, // 652
+ { "median", MEDIAN }, // 653
+ { "midrange", MIDRANGE }, // 654
+ { "minn", MINN }, // 655
+ { "multiple", MULTIPLE }, // 656
+ { "mod", MOD }, // 657
+ { "mode", MODE }, // 658
+ { "module-name", MODULE_NAME }, // 659
+ { "named", NAMED }, // 660
+ { "nat", NAT }, // 661
+ { "national", NATIONAL }, // 662
+ { "national-edited", NATIONAL_EDITED }, // 663
+ { "national-of", NATIONAL_OF }, // 664
+ { "native", NATIVE }, // 665
+ { "nested", NESTED }, // 666
+ { "next", NEXT }, // 667
+ { "no", NO }, // 668
+ { "note", NOTE }, // 669
+ { "nulls", NULLS }, // 670
+ { "null", NULLS }, // 670
+ { "nullptr", NULLPTR }, // 671
+ { "numeric", NUMERIC }, // 672
+ { "numeric-edited", NUMERIC_EDITED }, // 673
+ { "numval", NUMVAL }, // 674
+ { "numval-c", NUMVAL_C }, // 675
+ { "numval-f", NUMVAL_F }, // 676
+ { "occurs", OCCURS }, // 677
+ { "of", OF }, // 678
+ { "off", OFF }, // 679
+ { "omitted", OMITTED }, // 680
+ { "on", ON }, // 681
+ { "only", ONLY }, // 682
+ { "optional", OPTIONAL }, // 683
+ { "options", OPTIONS }, // 684
+ { "ord", ORD }, // 685
+ { "order", ORDER }, // 686
+ { "ord-max", ORD_MAX }, // 687
+ { "ord-min", ORD_MIN }, // 688
+ { "organization", ORGANIZATION }, // 689
+ { "other", OTHER }, // 690
+ { "otherwise", OTHERWISE }, // 691
+ { "output", OUTPUT }, // 692
+ { "packed-decimal", PACKED_DECIMAL }, // 693
+ { "padding", PADDING }, // 694
+ { "page", PAGE }, // 695
+ { "page-counter", PAGE_COUNTER }, // 696
+ { "pf", PF }, // 697
+ { "ph", PH }, // 698
+ { "pi", PI }, // 699
+ { "pic", PIC }, // 700
+ { "picture", PICTURE }, // 701
+ { "plus", PLUS }, // 702
+ { "present-value", PRESENT_VALUE }, // 703
+ { "print-switch", PRINT_SWITCH }, // 704
+ { "procedure", PROCEDURE }, // 705
+ { "procedures", PROCEDURES }, // 706
+ { "proceed", PROCEED }, // 707
+ { "process", PROCESS }, // 708
+ { "program-id", PROGRAM_ID }, // 709
+ { "program", PROGRAM_kw }, // 710
+ { "property", PROPERTY }, // 711
+ { "prototype", PROTOTYPE }, // 712
+ { "pseudotext", PSEUDOTEXT }, // 713
+ { "quotes", QUOTES }, // 714
+ { "quote", QUOTES }, // 714
+ { "random", RANDOM }, // 715
+ { "random-seed", RANDOM_SEED }, // 716
+ { "range", RANGE }, // 717
+ { "raise", RAISE }, // 718
+ { "raising", RAISING }, // 719
+ { "rd", RD }, // 720
+ { "record", RECORD }, // 721
+ { "recording", RECORDING }, // 722
+ { "records", RECORDS }, // 723
+ { "recursive", RECURSIVE }, // 724
+ { "redefines", REDEFINES }, // 725
+ { "reel", REEL }, // 726
+ { "reference", REFERENCE }, // 727
+ { "relative", RELATIVE }, // 728
+ { "rem", REM }, // 729
+ { "remainder", REMAINDER }, // 730
+ { "remarks", REMARKS }, // 731
+ { "removal", REMOVAL }, // 732
+ { "renames", RENAMES }, // 733
+ { "replace", REPLACE }, // 734
+ { "replacing", REPLACING }, // 735
+ { "report", REPORT }, // 736
+ { "reporting", REPORTING }, // 737
+ { "reports", REPORTS }, // 738
+ { "repository", REPOSITORY }, // 739
+ { "rerun", RERUN }, // 740
+ { "reserve", RESERVE }, // 741
+ { "restricted", RESTRICTED }, // 742
+ { "resume", RESUME }, // 743
+ { "reverse", REVERSE }, // 744
+ { "reversed", REVERSED }, // 745
+ { "rewind", REWIND }, // 746
+ { "rf", RF }, // 747
+ { "rh", RH }, // 748
+ { "right", RIGHT }, // 749
+ { "rounded", ROUNDED }, // 750
+ { "run", RUN }, // 751
+ { "same", SAME }, // 752
+ { "screen", SCREEN }, // 753
+ { "sd", SD }, // 754
+ { "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 755
+ { "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 756
+ { "security", SECURITY }, // 757
+ { "separate", SEPARATE }, // 758
+ { "sequence", SEQUENCE }, // 759
+ { "sequential", SEQUENTIAL }, // 760
+ { "sharing", SHARING }, // 761
+ { "simple-exit", SIMPLE_EXIT }, // 762
+ { "sign", SIGN }, // 763
+ { "sin", SIN }, // 764
+ { "size", SIZE }, // 765
+ { "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 766
+ { "source", SOURCE }, // 767
+ { "source-computer", SOURCE_COMPUTER }, // 768
+ { "special-names", SPECIAL_NAMES }, // 769
+ { "sqrt", SQRT }, // 770
+ { "stack", STACK }, // 771
+ { "standard", STANDARD }, // 772
+ { "standard-1", STANDARD_1 }, // 773
+ { "standard-deviation", STANDARD_DEVIATION }, // 774
+ { "standard-compare", STANDARD_COMPARE }, // 775
+ { "status", STATUS }, // 776
+ { "strong", STRONG }, // 777
+ { "substitute", SUBSTITUTE }, // 778
+ { "sum", SUM }, // 779
+ { "symbol", SYMBOL }, // 780
+ { "symbolic", SYMBOLIC }, // 781
+ { "synchronized", SYNCHRONIZED }, // 782
+ { "tally", TALLY }, // 783
+ { "tallying", TALLYING }, // 784
+ { "tan", TAN }, // 785
+ { "terminate", TERMINATE }, // 786
+ { "test", TEST }, // 787
+ { "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 788
+ { "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 789
+ { "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 790
+ { "test-numval", TEST_NUMVAL }, // 791
+ { "test-numval-c", TEST_NUMVAL_C }, // 792
+ { "test-numval-f", TEST_NUMVAL_F }, // 793
+ { "than", THAN }, // 794
+ { "time", TIME }, // 795
+ { "times", TIMES }, // 796
+ { "to", TO }, // 797
+ { "top", TOP }, // 798
+ { "top-level", TOP_LEVEL }, // 799
+ { "tracks", TRACKS }, // 800
+ { "track-area", TRACK_AREA }, // 801
+ { "trailing", TRAILING }, // 802
+ { "transform", TRANSFORM }, // 803
+ { "trim", TRIM }, // 804
+ { "true", TRUE_kw }, // 805
+ { "try", TRY }, // 806
+ { "turn", TURN }, // 807
+ { "type", TYPE }, // 808
+ { "typedef", TYPEDEF }, // 809
+ { "ulength", ULENGTH }, // 810
+ { "unbounded", UNBOUNDED }, // 811
+ { "unit", UNIT }, // 812
+ { "units", UNITS }, // 813
+ { "unit-record", UNIT_RECORD }, // 814
+ { "until", UNTIL }, // 815
+ { "up", UP }, // 816
+ { "upon", UPON }, // 817
+ { "upos", UPOS }, // 818
+ { "upper-case", UPPER_CASE }, // 819
+ { "usage", USAGE }, // 820
+ { "using", USING }, // 821
+ { "usubstr", USUBSTR }, // 822
+ { "usupplementary", USUPPLEMENTARY }, // 823
+ { "utility", UTILITY }, // 824
+ { "uuid4", UUID4 }, // 825
+ { "uvalid", UVALID }, // 826
+ { "uwidth", UWIDTH }, // 827
+ { "value", VALUE }, // 828
+ { "variance", VARIANCE }, // 829
+ { "varying", VARYING }, // 830
+ { "volatile", VOLATILE }, // 831
+ { "when-compiled", WHEN_COMPILED }, // 832
+ { "with", WITH }, // 833
+ { "working-storage", WORKING_STORAGE }, // 834
+ { "xml", XML }, // 835
+ { "xmlgenerate", XMLGENERATE }, // 836
+ { "xmlparse", XMLPARSE }, // 837
+ { "year-to-yyyy", YEAR_TO_YYYY }, // 838
+ { "yyyyddd", YYYYDDD }, // 839
+ { "yyyymmdd", YYYYMMDD }, // 840
+ { "arithmetic", ARITHMETIC }, // 841
+ { "attribute", ATTRIBUTE }, // 842
+ { "auto", AUTO }, // 843
+ { "automatic", AUTOMATIC }, // 844
+ { "away-from-zero", AWAY_FROM_ZERO }, // 845
+ { "background-color", BACKGROUND_COLOR }, // 846
+ { "bell", BELL }, // 847
+ { "binary-encoding", BINARY_ENCODING }, // 848
+ { "blink", BLINK }, // 849
+ { "capacity", CAPACITY }, // 850
+ { "center", CENTER }, // 851
+ { "classification", CLASSIFICATION }, // 852
+ { "cycle", CYCLE }, // 853
+ { "decimal-encoding", DECIMAL_ENCODING }, // 854
+ { "entry-convention", ENTRY_CONVENTION }, // 855
+ { "eol", EOL }, // 856
+ { "eos", EOS }, // 857
+ { "erase", ERASE }, // 858
+ { "expands", EXPANDS }, // 859
+ { "float-binary", FLOAT_BINARY }, // 860
+ { "float-decimal", FLOAT_DECIMAL }, // 861
+ { "foreground-color", FOREGROUND_COLOR }, // 862
+ { "forever", FOREVER }, // 863
+ { "full", FULL }, // 864
+ { "highlight", HIGHLIGHT }, // 865
+ { "high-order-left", HIGH_ORDER_LEFT }, // 866
+ { "high-order-right", HIGH_ORDER_RIGHT }, // 867
+ { "ignoring", IGNORING }, // 868
+ { "implements", IMPLEMENTS }, // 869
+ { "initialized", INITIALIZED }, // 870
+ { "intermediate", INTERMEDIATE }, // 871
+ { "lc-all", LC_ALL_kw }, // 872
+ { "lc-collate", LC_COLLATE_kw }, // 873
+ { "lc-ctype", LC_CTYPE_kw }, // 874
+ { "lc-messages", LC_MESSAGES_kw }, // 875
+ { "lc-monetary", LC_MONETARY_kw }, // 876
+ { "lc-numeric", LC_NUMERIC_kw }, // 877
+ { "lc-time", LC_TIME_kw }, // 878
+ { "lowlight", LOWLIGHT }, // 879
+ { "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 880
+ { "nearest-even", NEAREST_EVEN }, // 881
+ { "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 882
+ { "none", NONE }, // 883
+ { "normal", NORMAL }, // 884
+ { "numbers", NUMBERS }, // 885
+ { "prefixed", PREFIXED }, // 886
+ { "previous", PREVIOUS }, // 887
+ { "prohibited", PROHIBITED }, // 888
+ { "relation", RELATION }, // 889
+ { "required", REQUIRED }, // 890
+ { "reverse-video", REVERSE_VIDEO }, // 891
+ { "rounding", ROUNDING }, // 892
+ { "seconds", SECONDS }, // 893
+ { "secure", SECURE }, // 894
+ { "short", SHORT }, // 895
+ { "signed", SIGNED_kw }, // 896
+ { "standard-binary", STANDARD_BINARY }, // 897
+ { "standard-decimal", STANDARD_DECIMAL }, // 898
+ { "statement", STATEMENT }, // 899
+ { "step", STEP }, // 900
+ { "structure", STRUCTURE }, // 901
+ { "toward-greater", TOWARD_GREATER }, // 902
+ { "toward-lesser", TOWARD_LESSER }, // 903
+ { "truncation", TRUNCATION }, // 904
+ { "ucs-4", UCS_4 }, // 905
+ { "underline", UNDERLINE }, // 906
+ { "unsigned", UNSIGNED_kw }, // 907
+ { "utf-16", UTF_16 }, // 908
+ { "utf-8", UTF_8 }, // 909
+ { "address", ADDRESS }, // 910
+ { "end-accept", END_ACCEPT }, // 911
+ { "end-add", END_ADD }, // 912
+ { "end-call", END_CALL }, // 913
+ { "end-compute", END_COMPUTE }, // 914
+ { "end-delete", END_DELETE }, // 915
+ { "end-display", END_DISPLAY }, // 916
+ { "end-divide", END_DIVIDE }, // 917
+ { "end-evaluate", END_EVALUATE }, // 918
+ { "end-multiply", END_MULTIPLY }, // 919
+ { "end-perform", END_PERFORM }, // 920
+ { "end-read", END_READ }, // 921
+ { "end-return", END_RETURN }, // 922
+ { "end-rewrite", END_REWRITE }, // 923
+ { "end-search", END_SEARCH }, // 924
+ { "end-start", END_START }, // 925
+ { "end-string", END_STRING }, // 926
+ { "end-subtract", END_SUBTRACT }, // 927
+ { "end-unstring", END_UNSTRING }, // 928
+ { "end-write", END_WRITE }, // 929
+ { "end-if", END_IF }, // 930
+ { "thru", THRU }, // 931
+ { "through", THRU }, // 931
+ { "or", OR }, // 932
+ { "and", AND }, // 933
+ { "not", NOT }, // 934
+ { "ne", NE }, // 935
+ { "le", LE }, // 936
+ { "ge", GE }, // 937
+ { "pow", POW }, // 938
+ { "neg", NEG }, // 939
};
token_names = {
- "IDENTIFICATION", // 0 (258)
- "ENVIRONMENT", // 1 (259)
- "PROCEDURE", // 2 (260)
- "DATA", // 3 (261)
- "FILE", // 4 (262)
- "INPUT-OUTPUT", // 5 (263)
- "LINKAGE", // 6 (264)
- "LOCAL-STORAGE", // 7 (265)
- "WORKING-STORAGE", // 8 (266)
- "OBJECT-COMPUTER", // 9 (267)
- "DISPLAY-OF", // 10 (268)
- "END-FUNCTION", // 11 (269)
- "END-PROGRAM", // 12 (270)
- "END-SUBPROGRAM", // 13 (271)
- "JUSTIFIED", // 14 (272)
- "RETURNING", // 15 (273)
- "NO-CONDITION", // 16 (274)
- "ALNUM", // 17 (275)
- "ALPHED", // 18 (276)
- "ERROR", // 19 (277)
- "EXCEPTION", // 20 (278)
- "SIZE-ERROR", // 21 (279)
- "EXCEPTION-NAME", // 22 (280)
- "LEVEL", // 23 (281)
- "LEVEL66", // 24 (282)
- "LEVEL78", // 25 (283)
- "LEVEL88", // 26 (284)
- "CLASS-NAME", // 27 (285)
- "NAME", // 28 (286)
- "NAME88", // 29 (287)
- "NUME", // 30 (288)
- "NUMED", // 31 (289)
- "NUMED-CR", // 32 (290)
- "NUMED-DB", // 33 (291)
- "NINEDOT", // 34 (292)
- "NINES", // 35 (293)
- "NINEV", // 36 (294)
- "PIC-P", // 37 (295)
- "SPACES", // 38 (296)
- "LITERAL", // 39 (297)
- "END", // 40 (298)
- "EOP", // 41 (299)
- "FILENAME", // 42 (300)
- "INVALID", // 43 (301)
- "NUMBER", // 44 (302)
- "NEGATIVE", // 45 (303)
- "NUMSTR", // 46 (304)
- "OVERFLOW", // 47 (305)
- "COMPUTATIONAL", // 48 (306)
- "PERFORM", // 49 (307)
- "BACKWARD", // 50 (308)
- "POSITIVE", // 51 (309)
- "POINTER", // 52 (310)
- "SECTION", // 53 (311)
- "STANDARD-ALPHABET", // 54 (312)
- "SWITCH", // 55 (313)
- "UPSI", // 56 (314)
- "ZERO", // 57 (315)
- "SYSIN", // 58 (316)
- "SYSIPT", // 59 (317)
- "SYSOUT", // 60 (318)
- "SYSLIST", // 61 (319)
- "SYSLST", // 62 (320)
- "SYSPUNCH", // 63 (321)
- "SYSPCH", // 64 (322)
- "CONSOLE", // 65 (323)
- "C01", // 66 (324)
- "C02", // 67 (325)
- "C03", // 68 (326)
- "C04", // 69 (327)
- "C05", // 70 (328)
- "C06", // 71 (329)
- "C07", // 72 (330)
- "C08", // 73 (331)
- "C09", // 74 (332)
- "C10", // 75 (333)
- "C11", // 76 (334)
- "C12", // 77 (335)
- "CSP", // 78 (336)
- "S01", // 79 (337)
- "S02", // 80 (338)
- "S03", // 81 (339)
- "S04", // 82 (340)
- "S05", // 83 (341)
- "AFP-5A", // 84 (342)
- "STDIN", // 85 (343)
- "STDOUT", // 86 (344)
- "STDERR", // 87 (345)
- "LIST", // 88 (346)
- "MAP", // 89 (347)
- "NOLIST", // 90 (348)
- "NOMAP", // 91 (349)
- "NOSOURCE", // 92 (350)
- "MIGHT-BE", // 93 (351)
- "FUNCTION-UDF", // 94 (352)
- "FUNCTION-UDF-0", // 95 (353)
- "DATE-FMT", // 96 (354)
- "TIME-FMT", // 97 (355)
- "DATETIME-FMT", // 98 (356)
- "BASIS", // 99 (357)
- "CBL", // 100 (358)
- "CONSTANT", // 101 (359)
- "COPY", // 102 (360)
- "DEFINED", // 103 (361)
- "ENTER", // 104 (362)
- "FEATURE", // 105 (363)
- "INSERTT", // 106 (364)
- "LSUB", // 107 (365)
- "PARAMETER", // 108 (366)
- "OVERRIDE", // 109 (367)
- "READY", // 110 (368)
- "RESET", // 111 (369)
- "RSUB", // 112 (370)
- "SERVICE-RELOAD", // 113 (371)
- "STAR-CBL", // 114 (372)
- "SUBSCRIPT", // 115 (373)
- "SUPPRESS", // 116 (374)
- "TITLE", // 117 (375)
- "TRACE", // 118 (376)
- "USE", // 119 (377)
- "COBOL-WORDS", // 120 (378)
- "EQUATE", // 121 (379)
- "UNDEFINE", // 122 (380)
- "CDF-DEFINE", // 123 (381)
- "CDF-DISPLAY", // 124 (382)
- "CDF-IF", // 125 (383)
- "CDF-ELSE", // 126 (384)
- "CDF-END-IF", // 127 (385)
- "CDF-EVALUATE", // 128 (386)
- "CDF-WHEN", // 129 (387)
- "CDF-END-EVALUATE", // 130 (388)
- "CALL-COBOL", // 131 (389)
- "CALL-VERBATIM", // 132 (390)
- "IF", // 133 (391)
- "THEN", // 134 (392)
- "ELSE", // 135 (393)
- "SENTENCE", // 136 (394)
- "ACCEPT", // 137 (395)
- "ADD", // 138 (396)
- "ALTER", // 139 (397)
- "CALL", // 140 (398)
- "CANCEL", // 141 (399)
- "CLOSE", // 142 (400)
- "COMPUTE", // 143 (401)
- "CONTINUE", // 144 (402)
- "DELETE", // 145 (403)
- "DISPLAY", // 146 (404)
- "DIVIDE", // 147 (405)
- "EVALUATE", // 148 (406)
- "EXIT", // 149 (407)
- "FILLER", // 150 (408)
- "GOBACK", // 151 (409)
- "GOTO", // 152 (410)
- "INITIALIZE", // 153 (411)
- "INSPECT", // 154 (412)
- "MERGE", // 155 (413)
- "MOVE", // 156 (414)
- "MULTIPLY", // 157 (415)
- "OPEN", // 158 (416)
- "PARAGRAPH", // 159 (417)
- "READ", // 160 (418)
- "RELEASE", // 161 (419)
- "RETURN", // 162 (420)
- "REWRITE", // 163 (421)
- "SEARCH", // 164 (422)
- "SET", // 165 (423)
- "SELECT", // 166 (424)
- "SORT", // 167 (425)
- "SORT-MERGE", // 168 (426)
- "STRING", // 169 (427)
- "STOP", // 170 (428)
- "SUBTRACT", // 171 (429)
- "START", // 172 (430)
- "UNSTRING", // 173 (431)
- "WRITE", // 174 (432)
- "WHEN", // 175 (433)
- "ABS", // 176 (434)
- "ACCESS", // 177 (435)
- "ACOS", // 178 (436)
- "ACTUAL", // 179 (437)
- "ADVANCING", // 180 (438)
- "AFTER", // 181 (439)
- "ALL", // 182 (440)
- "ALLOCATE", // 183 (441)
- "ALPHABET", // 184 (442)
- "ALPHABETIC", // 185 (443)
- "ALPHABETIC-LOWER", // 186 (444)
- "ALPHABETIC-UPPER", // 187 (445)
- "ALPHANUMERIC", // 188 (446)
- "ALPHANUMERIC-EDITED", // 189 (447)
- "ALSO", // 190 (448)
- "ALTERNATE", // 191 (449)
- "ANNUITY", // 192 (450)
- "ANUM", // 193 (451)
- "ANY", // 194 (452)
- "ANYCASE", // 195 (453)
- "APPLY", // 196 (454)
- "ARE", // 197 (455)
- "AREA", // 198 (456)
- "AREAS", // 199 (457)
- "AS", // 200 (458)
- "ASCENDING", // 201 (459)
- "ACTIVATING", // 202 (460)
- "ASIN", // 203 (461)
- "ASSIGN", // 204 (462)
- "AT", // 205 (463)
- "ATAN", // 206 (464)
- "BASED", // 207 (465)
- "BASECONVERT", // 208 (466)
- "BEFORE", // 209 (467)
- "BINARY", // 210 (468)
- "BIT", // 211 (469)
- "BIT-OF", // 212 (470)
- "BIT-TO-CHAR", // 213 (471)
- "BLANK", // 214 (472)
- "BLOCK", // 215 (473)
- "BOOLEAN-OF-INTEGER", // 216 (474)
- "BOTTOM", // 217 (475)
- "BY", // 218 (476)
- "BYTE", // 219 (477)
- "BYTE-LENGTH", // 220 (478)
- "CF", // 221 (479)
- "CH", // 222 (480)
- "CHANGED", // 223 (481)
- "CHAR", // 224 (482)
- "CHAR-NATIONAL", // 225 (483)
- "CHARACTER", // 226 (484)
- "CHARACTERS", // 227 (485)
- "CHECKING", // 228 (486)
- "CLASS", // 229 (487)
- "COBOL", // 230 (488)
- "CODE", // 231 (489)
- "CODE-SET", // 232 (490)
- "COLLATING", // 233 (491)
- "COLUMN", // 234 (492)
- "COMBINED-DATETIME", // 235 (493)
- "COMMA", // 236 (494)
- "COMMAND-LINE", // 237 (495)
- "COMMAND-LINE-COUNT", // 238 (496)
- "COMMIT", // 239 (497)
- "COMMON", // 240 (498)
- "CONCAT", // 241 (499)
- "CONDITION", // 242 (500)
- "CONFIGURATION", // 243 (501)
- "CONTAINS", // 244 (502)
- "CONTENT", // 245 (503)
- "CONTROL", // 246 (504)
- "CONTROLS", // 247 (505)
- "CONVERT", // 248 (506)
- "CONVERTING", // 249 (507)
- "CORRESPONDING", // 250 (508)
- "COS", // 251 (509)
- "COUNT", // 252 (510)
- "CURRENCY", // 253 (511)
- "CURRENT", // 254 (512)
- "CURRENT-DATE", // 255 (513)
- "DATA", // 256 (514)
- "DATE", // 257 (515)
- "DATE-COMPILED", // 258 (516)
- "DATE-OF-INTEGER", // 259 (517)
- "DATE-TO-YYYYMMDD", // 260 (518)
- "DATE-WRITTEN", // 261 (519)
- "DAY", // 262 (520)
- "DAY-OF-INTEGER", // 263 (521)
- "DAY-OF-WEEK", // 264 (522)
- "DAY-TO-YYYYDDD", // 265 (523)
- "DBCS", // 266 (524)
- "DE", // 267 (525)
- "DEBUGGING", // 268 (526)
- "DECIMAL-POINT", // 269 (527)
- "DECLARATIVES", // 270 (528)
- "DEFAULT", // 271 (529)
- "DELIMITED", // 272 (530)
- "DELIMITER", // 273 (531)
- "DEPENDING", // 274 (532)
- "DESCENDING", // 275 (533)
- "DETAIL", // 276 (534)
- "DIRECT", // 277 (535)
- "DIRECT-ACCESS", // 278 (536)
- "DOWN", // 279 (537)
- "DUPLICATES", // 280 (538)
- "DYNAMIC", // 281 (539)
- "E", // 282 (540)
- "EBCDIC", // 283 (541)
- "EC", // 284 (542)
- "EGCS", // 285 (543)
- "ENTRY", // 286 (544)
- "ENVIRONMENT", // 287 (545)
- "EQUAL", // 288 (546)
- "EVERY", // 289 (547)
- "EXAMINE", // 290 (548)
- "EXHIBIT", // 291 (549)
- "EXP", // 292 (550)
- "EXP10", // 293 (551)
- "EXTEND", // 294 (552)
- "EXTERNAL", // 295 (553)
- "EXCEPTION-FILE", // 296 (554)
- "EXCEPTION-FILE-N", // 297 (555)
- "EXCEPTION-LOCATION", // 298 (556)
- "EXCEPTION-LOCATION-N", // 299 (557)
- "EXCEPTION-STATEMENT", // 300 (558)
- "EXCEPTION-STATUS", // 301 (559)
- "FACTORIAL", // 302 (560)
- "FALSE", // 303 (561)
- "FD", // 304 (562)
- "FILE-CONTROL", // 305 (563)
- "FILE", // 306 (564)
- "FILE-LIMIT", // 307 (565)
- "FINAL", // 308 (566)
- "FINALLY", // 309 (567)
- "FIND-STRING", // 310 (568)
- "FIRST", // 311 (569)
- "FIXED", // 312 (570)
- "FOOTING", // 313 (571)
- "FOR", // 314 (572)
- "FORMATTED-CURRENT-DATE", // 315 (573)
- "FORMATTED-DATE", // 316 (574)
- "FORMATTED-DATETIME", // 317 (575)
- "FORMATTED-TIME", // 318 (576)
- "FORM-OVERFLOW", // 319 (577)
- "FREE", // 320 (578)
- "FRACTION-PART", // 321 (579)
- "FROM", // 322 (580)
- "FUNCTION", // 323 (581)
- "GENERATE", // 324 (582)
- "GIVING", // 325 (583)
- "GLOBAL", // 326 (584)
- "GO", // 327 (585)
- "GROUP", // 328 (586)
- "HEADING", // 329 (587)
- "HEX", // 330 (588)
- "HEX-OF", // 331 (589)
- "HEX-TO-CHAR", // 332 (590)
- "HIGH-VALUES", // 333 (591)
- "HIGHEST-ALGEBRAIC", // 334 (592)
- "HOLD", // 335 (593)
- "IBM-360", // 336 (594)
- "IN", // 337 (595)
- "INCLUDE", // 338 (596)
- "INDEX", // 339 (597)
- "INDEXED", // 340 (598)
- "INDICATE", // 341 (599)
- "INITIAL", // 342 (600)
- "INITIATE", // 343 (601)
- "INPUT", // 344 (602)
- "INSTALLATION", // 345 (603)
- "INTERFACE", // 346 (604)
- "INTEGER", // 347 (605)
- "INTEGER-OF-BOOLEAN", // 348 (606)
- "INTEGER-OF-DATE", // 349 (607)
- "INTEGER-OF-DAY", // 350 (608)
- "INTEGER-OF-FORMATTED-DATE", // 351 (609)
- "INTEGER-PART", // 352 (610)
- "INTO", // 353 (611)
- "INTRINSIC", // 354 (612)
- "INVOKE", // 355 (613)
- "I-O", // 356 (614)
- "I-O-CONTROL", // 357 (615)
- "IS", // 358 (616)
- "ISNT", // 359 (617)
- "KANJI", // 360 (618)
- "KEY", // 361 (619)
- "LABEL", // 362 (620)
- "LAST", // 363 (621)
- "LEADING", // 364 (622)
- "LEFT", // 365 (623)
- "LENGTH", // 366 (624)
- "LENGTH-OF", // 367 (625)
- "LIMIT", // 368 (626)
- "LIMITS", // 369 (627)
- "LINE", // 370 (628)
- "LINES", // 371 (629)
- "LINE-COUNTER", // 372 (630)
- "LINAGE", // 373 (631)
- "LINKAGE", // 374 (632)
- "LOCALE", // 375 (633)
- "LOCALE-COMPARE", // 376 (634)
- "LOCALE-DATE", // 377 (635)
- "LOCALE-TIME", // 378 (636)
- "LOCALE-TIME-FROM-SECONDS", // 379 (637)
- "LOCAL-STORAGE", // 380 (638)
- "LOCATION", // 381 (639)
- "LOCK", // 382 (640)
- "LOCK-ON", // 383 (641)
- "LOG", // 384 (642)
- "LOG10", // 385 (643)
- "LOWER-CASE", // 386 (644)
- "LOW-VALUES", // 387 (645)
- "LOWEST-ALGEBRAIC", // 388 (646)
- "LPAREN", // 389 (647)
- "MANUAL", // 390 (648)
- "MAXX", // 391 (649)
- "MEAN", // 392 (650)
- "MEDIAN", // 393 (651)
- "MIDRANGE", // 394 (652)
- "MINN", // 395 (653)
- "MULTIPLE", // 396 (654)
- "MOD", // 397 (655)
- "MODE", // 398 (656)
- "MODULE-NAME", // 399 (657)
- "NAMED", // 400 (658)
- "NAT", // 401 (659)
- "NATIONAL", // 402 (660)
- "NATIONAL-EDITED", // 403 (661)
- "NATIONAL-OF", // 404 (662)
- "NATIVE", // 405 (663)
- "NESTED", // 406 (664)
- "NEXT", // 407 (665)
- "NO", // 408 (666)
- "NOTE", // 409 (667)
- "NULLS", // 410 (668)
- "NULLPTR", // 411 (669)
- "NUMERIC", // 412 (670)
- "NUMERIC-EDITED", // 413 (671)
- "NUMVAL", // 414 (672)
- "NUMVAL-C", // 415 (673)
- "NUMVAL-F", // 416 (674)
- "OCCURS", // 417 (675)
- "OF", // 418 (676)
- "OFF", // 419 (677)
- "OMITTED", // 420 (678)
- "ON", // 421 (679)
- "ONLY", // 422 (680)
- "OPTIONAL", // 423 (681)
- "OPTIONS", // 424 (682)
- "ORD", // 425 (683)
- "ORDER", // 426 (684)
- "ORD-MAX", // 427 (685)
- "ORD-MIN", // 428 (686)
- "ORGANIZATION", // 429 (687)
- "OTHER", // 430 (688)
- "OTHERWISE", // 431 (689)
- "OUTPUT", // 432 (690)
- "PACKED-DECIMAL", // 433 (691)
- "PADDING", // 434 (692)
- "PAGE", // 435 (693)
- "PAGE-COUNTER", // 436 (694)
- "PF", // 437 (695)
- "PH", // 438 (696)
- "PI", // 439 (697)
- "PIC", // 440 (698)
- "PICTURE", // 441 (699)
- "PLUS", // 442 (700)
- "PRESENT-VALUE", // 443 (701)
- "PRINT-SWITCH", // 444 (702)
- "PROCEDURE", // 445 (703)
- "PROCEDURES", // 446 (704)
- "PROCEED", // 447 (705)
- "PROCESS", // 448 (706)
- "PROGRAM-ID", // 449 (707)
- "PROGRAM", // 450 (708)
- "PROPERTY", // 451 (709)
- "PROTOTYPE", // 452 (710)
- "PSEUDOTEXT", // 453 (711)
- "QUOTES", // 454 (712)
- "RANDOM", // 455 (713)
- "RANDOM-SEED", // 456 (714)
- "RANGE", // 457 (715)
- "RAISE", // 458 (716)
- "RAISING", // 459 (717)
- "RD", // 460 (718)
- "RECORD", // 461 (719)
- "RECORDING", // 462 (720)
- "RECORDS", // 463 (721)
- "RECURSIVE", // 464 (722)
- "REDEFINES", // 465 (723)
- "REEL", // 466 (724)
- "REFERENCE", // 467 (725)
- "RELATIVE", // 468 (726)
- "REM", // 469 (727)
- "REMAINDER", // 470 (728)
- "REMARKS", // 471 (729)
- "REMOVAL", // 472 (730)
- "RENAMES", // 473 (731)
- "REPLACE", // 474 (732)
- "REPLACING", // 475 (733)
- "REPORT", // 476 (734)
- "REPORTING", // 477 (735)
- "REPORTS", // 478 (736)
- "REPOSITORY", // 479 (737)
- "RERUN", // 480 (738)
- "RESERVE", // 481 (739)
- "RESTRICTED", // 482 (740)
- "RESUME", // 483 (741)
- "REVERSE", // 484 (742)
- "REVERSED", // 485 (743)
- "REWIND", // 486 (744)
- "RF", // 487 (745)
- "RH", // 488 (746)
- "RIGHT", // 489 (747)
- "ROUNDED", // 490 (748)
- "RUN", // 491 (749)
- "SAME", // 492 (750)
- "SCREEN", // 493 (751)
- "SD", // 494 (752)
- "SECONDS-FROM-FORMATTED-TIME", // 495 (753)
- "SECONDS-PAST-MIDNIGHT", // 496 (754)
- "SECURITY", // 497 (755)
- "SEPARATE", // 498 (756)
- "SEQUENCE", // 499 (757)
- "SEQUENTIAL", // 500 (758)
- "SHARING", // 501 (759)
- "SIMPLE-EXIT", // 502 (760)
- "SIGN", // 503 (761)
- "SIN", // 504 (762)
- "SIZE", // 505 (763)
- "SMALLEST-ALGEBRAIC", // 506 (764)
- "SOURCE", // 507 (765)
- "SOURCE-COMPUTER", // 508 (766)
- "SPECIAL-NAMES", // 509 (767)
- "SQRT", // 510 (768)
- "STACK", // 511 (769)
- "STANDARD", // 512 (770)
- "STANDARD-1", // 513 (771)
- "STANDARD-DEVIATION", // 514 (772)
- "STANDARD-COMPARE", // 515 (773)
- "STATUS", // 516 (774)
- "STRONG", // 517 (775)
- "SUBSTITUTE", // 518 (776)
- "SUM", // 519 (777)
- "SYMBOL", // 520 (778)
- "SYMBOLIC", // 521 (779)
- "SYNCHRONIZED", // 522 (780)
- "TALLY", // 523 (781)
- "TALLYING", // 524 (782)
- "TAN", // 525 (783)
- "TERMINATE", // 526 (784)
- "TEST", // 527 (785)
- "TEST-DATE-YYYYMMDD", // 528 (786)
- "TEST-DAY-YYYYDDD", // 529 (787)
- "TEST-FORMATTED-DATETIME", // 530 (788)
- "TEST-NUMVAL", // 531 (789)
- "TEST-NUMVAL-C", // 532 (790)
- "TEST-NUMVAL-F", // 533 (791)
- "THAN", // 534 (792)
- "TIME", // 535 (793)
- "TIMES", // 536 (794)
- "TO", // 537 (795)
- "TOP", // 538 (796)
- "TOP-LEVEL", // 539 (797)
- "TRACKS", // 540 (798)
- "TRACK-AREA", // 541 (799)
- "TRAILING", // 542 (800)
- "TRANSFORM", // 543 (801)
- "TRIM", // 544 (802)
- "TRUE", // 545 (803)
- "TRY", // 546 (804)
- "TURN", // 547 (805)
- "TYPE", // 548 (806)
- "TYPEDEF", // 549 (807)
- "ULENGTH", // 550 (808)
- "UNBOUNDED", // 551 (809)
- "UNIT", // 552 (810)
- "UNITS", // 553 (811)
- "UNIT-RECORD", // 554 (812)
- "UNTIL", // 555 (813)
- "UP", // 556 (814)
- "UPON", // 557 (815)
- "UPOS", // 558 (816)
- "UPPER-CASE", // 559 (817)
- "USAGE", // 560 (818)
- "USING", // 561 (819)
- "USUBSTR", // 562 (820)
- "USUPPLEMENTARY", // 563 (821)
- "UTILITY", // 564 (822)
- "UUID4", // 565 (823)
- "UVALID", // 566 (824)
- "UWIDTH", // 567 (825)
- "VALUE", // 568 (826)
- "VARIANCE", // 569 (827)
- "VARYING", // 570 (828)
- "VOLATILE", // 571 (829)
- "WHEN-COMPILED", // 572 (830)
- "WITH", // 573 (831)
- "WORKING-STORAGE", // 574 (832)
- "XML", // 575 (833)
- "XMLGENERATE", // 576 (834)
- "XMLPARSE", // 577 (835)
- "YEAR-TO-YYYY", // 578 (836)
- "YYYYDDD", // 579 (837)
- "YYYYMMDD", // 580 (838)
- "ARITHMETIC", // 581 (839)
- "ATTRIBUTE", // 582 (840)
- "AUTO", // 583 (841)
- "AUTOMATIC", // 584 (842)
- "AWAY-FROM-ZERO", // 585 (843)
- "BACKGROUND-COLOR", // 586 (844)
- "BELL", // 587 (845)
- "BINARY-ENCODING", // 588 (846)
- "BLINK", // 589 (847)
- "CAPACITY", // 590 (848)
- "CENTER", // 591 (849)
- "CLASSIFICATION", // 592 (850)
- "CYCLE", // 593 (851)
- "DECIMAL-ENCODING", // 594 (852)
- "ENTRY-CONVENTION", // 595 (853)
- "EOL", // 596 (854)
- "EOS", // 597 (855)
- "ERASE", // 598 (856)
- "EXPANDS", // 599 (857)
- "FLOAT-BINARY", // 600 (858)
- "FLOAT-DECIMAL", // 601 (859)
- "FOREGROUND-COLOR", // 602 (860)
- "FOREVER", // 603 (861)
- "FULL", // 604 (862)
- "HIGHLIGHT", // 605 (863)
- "HIGH-ORDER-LEFT", // 606 (864)
- "HIGH-ORDER-RIGHT", // 607 (865)
- "IGNORING", // 608 (866)
- "IMPLEMENTS", // 609 (867)
- "INITIALIZED", // 610 (868)
- "INTERMEDIATE", // 611 (869)
- "LC-ALL", // 612 (870)
- "LC-COLLATE", // 613 (871)
- "LC-CTYPE", // 614 (872)
- "LC-MESSAGES", // 615 (873)
- "LC-MONETARY", // 616 (874)
- "LC-NUMERIC", // 617 (875)
- "LC-TIME", // 618 (876)
- "LOWLIGHT", // 619 (877)
- "NEAREST-AWAY-FROM-ZERO", // 620 (878)
- "NEAREST-EVEN", // 621 (879)
- "NEAREST-TOWARD-ZERO", // 622 (880)
- "NONE", // 623 (881)
- "NORMAL", // 624 (882)
- "NUMBERS", // 625 (883)
- "PREFIXED", // 626 (884)
- "PREVIOUS", // 627 (885)
- "PROHIBITED", // 628 (886)
- "RELATION", // 629 (887)
- "REQUIRED", // 630 (888)
- "REVERSE-VIDEO", // 631 (889)
- "ROUNDING", // 632 (890)
- "SECONDS", // 633 (891)
- "SECURE", // 634 (892)
- "SHORT", // 635 (893)
- "SIGNED", // 636 (894)
- "STANDARD-BINARY", // 637 (895)
- "STANDARD-DECIMAL", // 638 (896)
- "STATEMENT", // 639 (897)
- "STEP", // 640 (898)
- "STRUCTURE", // 641 (899)
- "TOWARD-GREATER", // 642 (900)
- "TOWARD-LESSER", // 643 (901)
- "TRUNCATION", // 644 (902)
- "UCS-4", // 645 (903)
- "UNDERLINE", // 646 (904)
- "UNSIGNED", // 647 (905)
- "UTF-16", // 648 (906)
- "UTF-8", // 649 (907)
- "ADDRESS", // 650 (908)
- "END-ACCEPT", // 651 (909)
- "END-ADD", // 652 (910)
- "END-CALL", // 653 (911)
- "END-COMPUTE", // 654 (912)
- "END-DELETE", // 655 (913)
- "END-DISPLAY", // 656 (914)
- "END-DIVIDE", // 657 (915)
- "END-EVALUATE", // 658 (916)
- "END-MULTIPLY", // 659 (917)
- "END-PERFORM", // 660 (918)
- "END-READ", // 661 (919)
- "END-RETURN", // 662 (920)
- "END-REWRITE", // 663 (921)
- "END-SEARCH", // 664 (922)
- "END-START", // 665 (923)
- "END-STRING", // 666 (924)
- "END-SUBTRACT", // 667 (925)
- "END-UNSTRING", // 668 (926)
- "END-WRITE", // 669 (927)
- "END-IF", // 670 (928)
- "THRU", // 671 (929)
- "OR", // 672 (930)
- "AND", // 673 (931)
- "NOT", // 674 (932)
- "NE", // 675 (933)
- "LE", // 676 (934)
- "GE", // 677 (935)
- "POW", // 678 (936)
- "NEG", // 679 (937)
+ "IDENTIFICATION", // 0 (258)
+ "ENVIRONMENT", // 1 (259)
+ "PROCEDURE", // 2 (260)
+ "DATA", // 3 (261)
+ "FILE", // 4 (262)
+ "INPUT-OUTPUT", // 5 (263)
+ "LINKAGE", // 6 (264)
+ "LOCAL-STORAGE", // 7 (265)
+ "WORKING-STORAGE", // 8 (266)
+ "OBJECT-COMPUTER", // 9 (267)
+ "DISPLAY-OF", // 10 (268)
+ "END-FUNCTION", // 11 (269)
+ "END-PROGRAM", // 12 (270)
+ "END-SUBPROGRAM", // 13 (271)
+ "JUSTIFIED", // 14 (272)
+ "RETURNING", // 15 (273)
+ "NO-CONDITION", // 16 (274)
+ "ALNUM", // 17 (275)
+ "ALPHED", // 18 (276)
+ "ERROR", // 19 (277)
+ "EXCEPTION", // 20 (278)
+ "SIZE-ERROR", // 21 (279)
+ "EXCEPTION-NAME", // 22 (280)
+ "LEVEL", // 23 (281)
+ "LEVEL66", // 24 (282)
+ "LEVEL78", // 25 (283)
+ "LEVEL88", // 26 (284)
+ "CLASS-NAME", // 27 (285)
+ "NAME", // 28 (286)
+ "NAME88", // 29 (287)
+ "NUME", // 30 (288)
+ "NUMED", // 31 (289)
+ "NUMED-CR", // 32 (290)
+ "NUMED-DB", // 33 (291)
+ "NINEDOT", // 34 (292)
+ "NINES", // 35 (293)
+ "NINEV", // 36 (294)
+ "PIC-P", // 37 (295)
+ "ONES", // 38 (296)
+ "SPACES", // 39 (297)
+ "LITERAL", // 40 (298)
+ "END", // 41 (299)
+ "EOP", // 42 (300)
+ "FILENAME", // 43 (301)
+ "INVALID", // 44 (302)
+ "NUMBER", // 45 (303)
+ "NEGATIVE", // 46 (304)
+ "NUMSTR", // 47 (305)
+ "OVERFLOW", // 48 (306)
+ "BINARY-INTEGER", // 49 (307)
+ "COMPUTATIONAL", // 50 (308)
+ "PERFORM", // 51 (309)
+ "BACKWARD", // 52 (310)
+ "POSITIVE", // 53 (311)
+ "POINTER", // 54 (312)
+ "SECTION", // 55 (313)
+ "STANDARD-ALPHABET", // 56 (314)
+ "SWITCH", // 57 (315)
+ "UPSI", // 58 (316)
+ "ZERO", // 59 (317)
+ "SYSIN", // 60 (318)
+ "SYSIPT", // 61 (319)
+ "SYSOUT", // 62 (320)
+ "SYSLIST", // 63 (321)
+ "SYSLST", // 64 (322)
+ "SYSPUNCH", // 65 (323)
+ "SYSPCH", // 66 (324)
+ "CONSOLE", // 67 (325)
+ "C01", // 68 (326)
+ "C02", // 69 (327)
+ "C03", // 70 (328)
+ "C04", // 71 (329)
+ "C05", // 72 (330)
+ "C06", // 73 (331)
+ "C07", // 74 (332)
+ "C08", // 75 (333)
+ "C09", // 76 (334)
+ "C10", // 77 (335)
+ "C11", // 78 (336)
+ "C12", // 79 (337)
+ "CSP", // 80 (338)
+ "S01", // 81 (339)
+ "S02", // 82 (340)
+ "S03", // 83 (341)
+ "S04", // 84 (342)
+ "S05", // 85 (343)
+ "AFP-5A", // 86 (344)
+ "STDIN", // 87 (345)
+ "STDOUT", // 88 (346)
+ "STDERR", // 89 (347)
+ "LIST", // 90 (348)
+ "MAP", // 91 (349)
+ "NOLIST", // 92 (350)
+ "NOMAP", // 93 (351)
+ "NOSOURCE", // 94 (352)
+ "MIGHT-BE", // 95 (353)
+ "FUNCTION-UDF", // 96 (354)
+ "FUNCTION-UDF-0", // 97 (355)
+ "DATE-FMT", // 98 (356)
+ "TIME-FMT", // 99 (357)
+ "DATETIME-FMT", // 100 (358)
+ "BASIS", // 101 (359)
+ "CBL", // 102 (360)
+ "CONSTANT", // 103 (361)
+ "COPY", // 104 (362)
+ "DEFINED", // 105 (363)
+ "ENTER", // 106 (364)
+ "FEATURE", // 107 (365)
+ "INSERTT", // 108 (366)
+ "LSUB", // 109 (367)
+ "PARAMETER", // 110 (368)
+ "OVERRIDE", // 111 (369)
+ "READY", // 112 (370)
+ "RESET", // 113 (371)
+ "RSUB", // 114 (372)
+ "SERVICE-RELOAD", // 115 (373)
+ "STAR-CBL", // 116 (374)
+ "SUBSCRIPT", // 117 (375)
+ "SUPPRESS", // 118 (376)
+ "TITLE", // 119 (377)
+ "TRACE", // 120 (378)
+ "USE", // 121 (379)
+ "COBOL-WORDS", // 122 (380)
+ "EQUATE", // 123 (381)
+ "UNDEFINE", // 124 (382)
+ "CDF-DEFINE", // 125 (383)
+ "CDF-DISPLAY", // 126 (384)
+ "CDF-IF", // 127 (385)
+ "CDF-ELSE", // 128 (386)
+ "CDF-END-IF", // 129 (387)
+ "CDF-EVALUATE", // 130 (388)
+ "CDF-WHEN", // 131 (389)
+ "CDF-END-EVALUATE", // 132 (390)
+ "CALL-COBOL", // 133 (391)
+ "CALL-VERBATIM", // 134 (392)
+ "IF", // 135 (393)
+ "THEN", // 136 (394)
+ "ELSE", // 137 (395)
+ "SENTENCE", // 138 (396)
+ "ACCEPT", // 139 (397)
+ "ADD", // 140 (398)
+ "ALTER", // 141 (399)
+ "CALL", // 142 (400)
+ "CANCEL", // 143 (401)
+ "CLOSE", // 144 (402)
+ "COMPUTE", // 145 (403)
+ "CONTINUE", // 146 (404)
+ "DELETE", // 147 (405)
+ "DISPLAY", // 148 (406)
+ "DIVIDE", // 149 (407)
+ "EVALUATE", // 150 (408)
+ "EXIT", // 151 (409)
+ "FILLER", // 152 (410)
+ "GOBACK", // 153 (411)
+ "GOTO", // 154 (412)
+ "INITIALIZE", // 155 (413)
+ "INSPECT", // 156 (414)
+ "MERGE", // 157 (415)
+ "MOVE", // 158 (416)
+ "MULTIPLY", // 159 (417)
+ "OPEN", // 160 (418)
+ "PARAGRAPH", // 161 (419)
+ "READ", // 162 (420)
+ "RELEASE", // 163 (421)
+ "RETURN", // 164 (422)
+ "REWRITE", // 165 (423)
+ "SEARCH", // 166 (424)
+ "SET", // 167 (425)
+ "SELECT", // 168 (426)
+ "SORT", // 169 (427)
+ "SORT-MERGE", // 170 (428)
+ "STRING", // 171 (429)
+ "STOP", // 172 (430)
+ "SUBTRACT", // 173 (431)
+ "START", // 174 (432)
+ "UNSTRING", // 175 (433)
+ "WRITE", // 176 (434)
+ "WHEN", // 177 (435)
+ "ABS", // 178 (436)
+ "ACCESS", // 179 (437)
+ "ACOS", // 180 (438)
+ "ACTUAL", // 181 (439)
+ "ADVANCING", // 182 (440)
+ "AFTER", // 183 (441)
+ "ALL", // 184 (442)
+ "ALLOCATE", // 185 (443)
+ "ALPHABET", // 186 (444)
+ "ALPHABETIC", // 187 (445)
+ "ALPHABETIC-LOWER", // 188 (446)
+ "ALPHABETIC-UPPER", // 189 (447)
+ "ALPHANUMERIC", // 190 (448)
+ "ALPHANUMERIC-EDITED", // 191 (449)
+ "ALSO", // 192 (450)
+ "ALTERNATE", // 193 (451)
+ "ANNUITY", // 194 (452)
+ "ANUM", // 195 (453)
+ "ANY", // 196 (454)
+ "ANYCASE", // 197 (455)
+ "APPLY", // 198 (456)
+ "ARE", // 199 (457)
+ "AREA", // 200 (458)
+ "AREAS", // 201 (459)
+ "AS", // 202 (460)
+ "ASCENDING", // 203 (461)
+ "ACTIVATING", // 204 (462)
+ "ASIN", // 205 (463)
+ "ASSIGN", // 206 (464)
+ "AT", // 207 (465)
+ "ATAN", // 208 (466)
+ "BASED", // 209 (467)
+ "BASECONVERT", // 210 (468)
+ "BEFORE", // 211 (469)
+ "BINARY", // 212 (470)
+ "BIT", // 213 (471)
+ "BIT-OF", // 214 (472)
+ "BIT-TO-CHAR", // 215 (473)
+ "BLANK", // 216 (474)
+ "BLOCK", // 217 (475)
+ "BOOLEAN-OF-INTEGER", // 218 (476)
+ "BOTTOM", // 219 (477)
+ "BY", // 220 (478)
+ "BYTE", // 221 (479)
+ "BYTE-LENGTH", // 222 (480)
+ "CF", // 223 (481)
+ "CH", // 224 (482)
+ "CHANGED", // 225 (483)
+ "CHAR", // 226 (484)
+ "CHAR-NATIONAL", // 227 (485)
+ "CHARACTER", // 228 (486)
+ "CHARACTERS", // 229 (487)
+ "CHECKING", // 230 (488)
+ "CLASS", // 231 (489)
+ "COBOL", // 232 (490)
+ "CODE", // 233 (491)
+ "CODE-SET", // 234 (492)
+ "COLLATING", // 235 (493)
+ "COLUMN", // 236 (494)
+ "COMBINED-DATETIME", // 237 (495)
+ "COMMA", // 238 (496)
+ "COMMAND-LINE", // 239 (497)
+ "COMMAND-LINE-COUNT", // 240 (498)
+ "COMMIT", // 241 (499)
+ "COMMON", // 242 (500)
+ "CONCAT", // 243 (501)
+ "CONDITION", // 244 (502)
+ "CONFIGURATION", // 245 (503)
+ "CONTAINS", // 246 (504)
+ "CONTENT", // 247 (505)
+ "CONTROL", // 248 (506)
+ "CONTROLS", // 249 (507)
+ "CONVERT", // 250 (508)
+ "CONVERTING", // 251 (509)
+ "CORRESPONDING", // 252 (510)
+ "COS", // 253 (511)
+ "COUNT", // 254 (512)
+ "CURRENCY", // 255 (513)
+ "CURRENT", // 256 (514)
+ "CURRENT-DATE", // 257 (515)
+ "DATA", // 258 (516)
+ "DATE", // 259 (517)
+ "DATE-COMPILED", // 260 (518)
+ "DATE-OF-INTEGER", // 261 (519)
+ "DATE-TO-YYYYMMDD", // 262 (520)
+ "DATE-WRITTEN", // 263 (521)
+ "DAY", // 264 (522)
+ "DAY-OF-INTEGER", // 265 (523)
+ "DAY-OF-WEEK", // 266 (524)
+ "DAY-TO-YYYYDDD", // 267 (525)
+ "DBCS", // 268 (526)
+ "DE", // 269 (527)
+ "DEBUGGING", // 270 (528)
+ "DECIMAL-POINT", // 271 (529)
+ "DECLARATIVES", // 272 (530)
+ "DEFAULT", // 273 (531)
+ "DELIMITED", // 274 (532)
+ "DELIMITER", // 275 (533)
+ "DEPENDING", // 276 (534)
+ "DESCENDING", // 277 (535)
+ "DETAIL", // 278 (536)
+ "DIRECT", // 279 (537)
+ "DIRECT-ACCESS", // 280 (538)
+ "DOWN", // 281 (539)
+ "DUPLICATES", // 282 (540)
+ "DYNAMIC", // 283 (541)
+ "E", // 284 (542)
+ "EBCDIC", // 285 (543)
+ "EC", // 286 (544)
+ "EGCS", // 287 (545)
+ "ENTRY", // 288 (546)
+ "ENVIRONMENT", // 289 (547)
+ "EQUAL", // 290 (548)
+ "EVERY", // 291 (549)
+ "EXAMINE", // 292 (550)
+ "EXHIBIT", // 293 (551)
+ "EXP", // 294 (552)
+ "EXP10", // 295 (553)
+ "EXTEND", // 296 (554)
+ "EXTERNAL", // 297 (555)
+ "EXCEPTION-FILE", // 298 (556)
+ "EXCEPTION-FILE-N", // 299 (557)
+ "EXCEPTION-LOCATION", // 300 (558)
+ "EXCEPTION-LOCATION-N", // 301 (559)
+ "EXCEPTION-STATEMENT", // 302 (560)
+ "EXCEPTION-STATUS", // 303 (561)
+ "FACTORIAL", // 304 (562)
+ "FALSE", // 305 (563)
+ "FD", // 306 (564)
+ "FILE-CONTROL", // 307 (565)
+ "FILE", // 308 (566)
+ "FILE-LIMIT", // 309 (567)
+ "FINAL", // 310 (568)
+ "FINALLY", // 311 (569)
+ "FIND-STRING", // 312 (570)
+ "FIRST", // 313 (571)
+ "FIXED", // 314 (572)
+ "FOOTING", // 315 (573)
+ "FOR", // 316 (574)
+ "FORMATTED-CURRENT-DATE", // 317 (575)
+ "FORMATTED-DATE", // 318 (576)
+ "FORMATTED-DATETIME", // 319 (577)
+ "FORMATTED-TIME", // 320 (578)
+ "FORM-OVERFLOW", // 321 (579)
+ "FREE", // 322 (580)
+ "FRACTION-PART", // 323 (581)
+ "FROM", // 324 (582)
+ "FUNCTION", // 325 (583)
+ "GENERATE", // 326 (584)
+ "GIVING", // 327 (585)
+ "GLOBAL", // 328 (586)
+ "GO", // 329 (587)
+ "GROUP", // 330 (588)
+ "HEADING", // 331 (589)
+ "HEX", // 332 (590)
+ "HEX-OF", // 333 (591)
+ "HEX-TO-CHAR", // 334 (592)
+ "HIGH-VALUES", // 335 (593)
+ "HIGHEST-ALGEBRAIC", // 336 (594)
+ "HOLD", // 337 (595)
+ "IBM-360", // 338 (596)
+ "IN", // 339 (597)
+ "INCLUDE", // 340 (598)
+ "INDEX", // 341 (599)
+ "INDEXED", // 342 (600)
+ "INDICATE", // 343 (601)
+ "INITIAL", // 344 (602)
+ "INITIATE", // 345 (603)
+ "INPUT", // 346 (604)
+ "INSTALLATION", // 347 (605)
+ "INTERFACE", // 348 (606)
+ "INTEGER", // 349 (607)
+ "INTEGER-OF-BOOLEAN", // 350 (608)
+ "INTEGER-OF-DATE", // 351 (609)
+ "INTEGER-OF-DAY", // 352 (610)
+ "INTEGER-OF-FORMATTED-DATE", // 353 (611)
+ "INTEGER-PART", // 354 (612)
+ "INTO", // 355 (613)
+ "INTRINSIC", // 356 (614)
+ "INVOKE", // 357 (615)
+ "I-O", // 358 (616)
+ "I-O-CONTROL", // 359 (617)
+ "IS", // 360 (618)
+ "ISNT", // 361 (619)
+ "KANJI", // 362 (620)
+ "KEY", // 363 (621)
+ "LABEL", // 364 (622)
+ "LAST", // 365 (623)
+ "LEADING", // 366 (624)
+ "LEFT", // 367 (625)
+ "LENGTH", // 368 (626)
+ "LENGTH-OF", // 369 (627)
+ "LIMIT", // 370 (628)
+ "LIMITS", // 371 (629)
+ "LINE", // 372 (630)
+ "LINES", // 373 (631)
+ "LINE-COUNTER", // 374 (632)
+ "LINAGE", // 375 (633)
+ "LINKAGE", // 376 (634)
+ "LOCALE", // 377 (635)
+ "LOCALE-COMPARE", // 378 (636)
+ "LOCALE-DATE", // 379 (637)
+ "LOCALE-TIME", // 380 (638)
+ "LOCALE-TIME-FROM-SECONDS", // 381 (639)
+ "LOCAL-STORAGE", // 382 (640)
+ "LOCATION", // 383 (641)
+ "LOCK", // 384 (642)
+ "LOCK-ON", // 385 (643)
+ "LOG", // 386 (644)
+ "LOG10", // 387 (645)
+ "LOWER-CASE", // 388 (646)
+ "LOW-VALUES", // 389 (647)
+ "LOWEST-ALGEBRAIC", // 390 (648)
+ "LPAREN", // 391 (649)
+ "MANUAL", // 392 (650)
+ "MAXX", // 393 (651)
+ "MEAN", // 394 (652)
+ "MEDIAN", // 395 (653)
+ "MIDRANGE", // 396 (654)
+ "MINN", // 397 (655)
+ "MULTIPLE", // 398 (656)
+ "MOD", // 399 (657)
+ "MODE", // 400 (658)
+ "MODULE-NAME", // 401 (659)
+ "NAMED", // 402 (660)
+ "NAT", // 403 (661)
+ "NATIONAL", // 404 (662)
+ "NATIONAL-EDITED", // 405 (663)
+ "NATIONAL-OF", // 406 (664)
+ "NATIVE", // 407 (665)
+ "NESTED", // 408 (666)
+ "NEXT", // 409 (667)
+ "NO", // 410 (668)
+ "NOTE", // 411 (669)
+ "NULLS", // 412 (670)
+ "NULLPTR", // 413 (671)
+ "NUMERIC", // 414 (672)
+ "NUMERIC-EDITED", // 415 (673)
+ "NUMVAL", // 416 (674)
+ "NUMVAL-C", // 417 (675)
+ "NUMVAL-F", // 418 (676)
+ "OCCURS", // 419 (677)
+ "OF", // 420 (678)
+ "OFF", // 421 (679)
+ "OMITTED", // 422 (680)
+ "ON", // 423 (681)
+ "ONLY", // 424 (682)
+ "OPTIONAL", // 425 (683)
+ "OPTIONS", // 426 (684)
+ "ORD", // 427 (685)
+ "ORDER", // 428 (686)
+ "ORD-MAX", // 429 (687)
+ "ORD-MIN", // 430 (688)
+ "ORGANIZATION", // 431 (689)
+ "OTHER", // 432 (690)
+ "OTHERWISE", // 433 (691)
+ "OUTPUT", // 434 (692)
+ "PACKED-DECIMAL", // 435 (693)
+ "PADDING", // 436 (694)
+ "PAGE", // 437 (695)
+ "PAGE-COUNTER", // 438 (696)
+ "PF", // 439 (697)
+ "PH", // 440 (698)
+ "PI", // 441 (699)
+ "PIC", // 442 (700)
+ "PICTURE", // 443 (701)
+ "PLUS", // 444 (702)
+ "PRESENT-VALUE", // 445 (703)
+ "PRINT-SWITCH", // 446 (704)
+ "PROCEDURE", // 447 (705)
+ "PROCEDURES", // 448 (706)
+ "PROCEED", // 449 (707)
+ "PROCESS", // 450 (708)
+ "PROGRAM-ID", // 451 (709)
+ "PROGRAM", // 452 (710)
+ "PROPERTY", // 453 (711)
+ "PROTOTYPE", // 454 (712)
+ "PSEUDOTEXT", // 455 (713)
+ "QUOTES", // 456 (714)
+ "RANDOM", // 457 (715)
+ "RANDOM-SEED", // 458 (716)
+ "RANGE", // 459 (717)
+ "RAISE", // 460 (718)
+ "RAISING", // 461 (719)
+ "RD", // 462 (720)
+ "RECORD", // 463 (721)
+ "RECORDING", // 464 (722)
+ "RECORDS", // 465 (723)
+ "RECURSIVE", // 466 (724)
+ "REDEFINES", // 467 (725)
+ "REEL", // 468 (726)
+ "REFERENCE", // 469 (727)
+ "RELATIVE", // 470 (728)
+ "REM", // 471 (729)
+ "REMAINDER", // 472 (730)
+ "REMARKS", // 473 (731)
+ "REMOVAL", // 474 (732)
+ "RENAMES", // 475 (733)
+ "REPLACE", // 476 (734)
+ "REPLACING", // 477 (735)
+ "REPORT", // 478 (736)
+ "REPORTING", // 479 (737)
+ "REPORTS", // 480 (738)
+ "REPOSITORY", // 481 (739)
+ "RERUN", // 482 (740)
+ "RESERVE", // 483 (741)
+ "RESTRICTED", // 484 (742)
+ "RESUME", // 485 (743)
+ "REVERSE", // 486 (744)
+ "REVERSED", // 487 (745)
+ "REWIND", // 488 (746)
+ "RF", // 489 (747)
+ "RH", // 490 (748)
+ "RIGHT", // 491 (749)
+ "ROUNDED", // 492 (750)
+ "RUN", // 493 (751)
+ "SAME", // 494 (752)
+ "SCREEN", // 495 (753)
+ "SD", // 496 (754)
+ "SECONDS-FROM-FORMATTED-TIME", // 497 (755)
+ "SECONDS-PAST-MIDNIGHT", // 498 (756)
+ "SECURITY", // 499 (757)
+ "SEPARATE", // 500 (758)
+ "SEQUENCE", // 501 (759)
+ "SEQUENTIAL", // 502 (760)
+ "SHARING", // 503 (761)
+ "SIMPLE-EXIT", // 504 (762)
+ "SIGN", // 505 (763)
+ "SIN", // 506 (764)
+ "SIZE", // 507 (765)
+ "SMALLEST-ALGEBRAIC", // 508 (766)
+ "SOURCE", // 509 (767)
+ "SOURCE-COMPUTER", // 510 (768)
+ "SPECIAL-NAMES", // 511 (769)
+ "SQRT", // 512 (770)
+ "STACK", // 513 (771)
+ "STANDARD", // 514 (772)
+ "STANDARD-1", // 515 (773)
+ "STANDARD-DEVIATION", // 516 (774)
+ "STANDARD-COMPARE", // 517 (775)
+ "STATUS", // 518 (776)
+ "STRONG", // 519 (777)
+ "SUBSTITUTE", // 520 (778)
+ "SUM", // 521 (779)
+ "SYMBOL", // 522 (780)
+ "SYMBOLIC", // 523 (781)
+ "SYNCHRONIZED", // 524 (782)
+ "TALLY", // 525 (783)
+ "TALLYING", // 526 (784)
+ "TAN", // 527 (785)
+ "TERMINATE", // 528 (786)
+ "TEST", // 529 (787)
+ "TEST-DATE-YYYYMMDD", // 530 (788)
+ "TEST-DAY-YYYYDDD", // 531 (789)
+ "TEST-FORMATTED-DATETIME", // 532 (790)
+ "TEST-NUMVAL", // 533 (791)
+ "TEST-NUMVAL-C", // 534 (792)
+ "TEST-NUMVAL-F", // 535 (793)
+ "THAN", // 536 (794)
+ "TIME", // 537 (795)
+ "TIMES", // 538 (796)
+ "TO", // 539 (797)
+ "TOP", // 540 (798)
+ "TOP-LEVEL", // 541 (799)
+ "TRACKS", // 542 (800)
+ "TRACK-AREA", // 543 (801)
+ "TRAILING", // 544 (802)
+ "TRANSFORM", // 545 (803)
+ "TRIM", // 546 (804)
+ "TRUE", // 547 (805)
+ "TRY", // 548 (806)
+ "TURN", // 549 (807)
+ "TYPE", // 550 (808)
+ "TYPEDEF", // 551 (809)
+ "ULENGTH", // 552 (810)
+ "UNBOUNDED", // 553 (811)
+ "UNIT", // 554 (812)
+ "UNITS", // 555 (813)
+ "UNIT-RECORD", // 556 (814)
+ "UNTIL", // 557 (815)
+ "UP", // 558 (816)
+ "UPON", // 559 (817)
+ "UPOS", // 560 (818)
+ "UPPER-CASE", // 561 (819)
+ "USAGE", // 562 (820)
+ "USING", // 563 (821)
+ "USUBSTR", // 564 (822)
+ "USUPPLEMENTARY", // 565 (823)
+ "UTILITY", // 566 (824)
+ "UUID4", // 567 (825)
+ "UVALID", // 568 (826)
+ "UWIDTH", // 569 (827)
+ "VALUE", // 570 (828)
+ "VARIANCE", // 571 (829)
+ "VARYING", // 572 (830)
+ "VOLATILE", // 573 (831)
+ "WHEN-COMPILED", // 574 (832)
+ "WITH", // 575 (833)
+ "WORKING-STORAGE", // 576 (834)
+ "XML", // 577 (835)
+ "XMLGENERATE", // 578 (836)
+ "XMLPARSE", // 579 (837)
+ "YEAR-TO-YYYY", // 580 (838)
+ "YYYYDDD", // 581 (839)
+ "YYYYMMDD", // 582 (840)
+ "ARITHMETIC", // 583 (841)
+ "ATTRIBUTE", // 584 (842)
+ "AUTO", // 585 (843)
+ "AUTOMATIC", // 586 (844)
+ "AWAY-FROM-ZERO", // 587 (845)
+ "BACKGROUND-COLOR", // 588 (846)
+ "BELL", // 589 (847)
+ "BINARY-ENCODING", // 590 (848)
+ "BLINK", // 591 (849)
+ "CAPACITY", // 592 (850)
+ "CENTER", // 593 (851)
+ "CLASSIFICATION", // 594 (852)
+ "CYCLE", // 595 (853)
+ "DECIMAL-ENCODING", // 596 (854)
+ "ENTRY-CONVENTION", // 597 (855)
+ "EOL", // 598 (856)
+ "EOS", // 599 (857)
+ "ERASE", // 600 (858)
+ "EXPANDS", // 601 (859)
+ "FLOAT-BINARY", // 602 (860)
+ "FLOAT-DECIMAL", // 603 (861)
+ "FOREGROUND-COLOR", // 604 (862)
+ "FOREVER", // 605 (863)
+ "FULL", // 606 (864)
+ "HIGHLIGHT", // 607 (865)
+ "HIGH-ORDER-LEFT", // 608 (866)
+ "HIGH-ORDER-RIGHT", // 609 (867)
+ "IGNORING", // 610 (868)
+ "IMPLEMENTS", // 611 (869)
+ "INITIALIZED", // 612 (870)
+ "INTERMEDIATE", // 613 (871)
+ "LC-ALL", // 614 (872)
+ "LC-COLLATE", // 615 (873)
+ "LC-CTYPE", // 616 (874)
+ "LC-MESSAGES", // 617 (875)
+ "LC-MONETARY", // 618 (876)
+ "LC-NUMERIC", // 619 (877)
+ "LC-TIME", // 620 (878)
+ "LOWLIGHT", // 621 (879)
+ "NEAREST-AWAY-FROM-ZERO", // 622 (880)
+ "NEAREST-EVEN", // 623 (881)
+ "NEAREST-TOWARD-ZERO", // 624 (882)
+ "NONE", // 625 (883)
+ "NORMAL", // 626 (884)
+ "NUMBERS", // 627 (885)
+ "PREFIXED", // 628 (886)
+ "PREVIOUS", // 629 (887)
+ "PROHIBITED", // 630 (888)
+ "RELATION", // 631 (889)
+ "REQUIRED", // 632 (890)
+ "REVERSE-VIDEO", // 633 (891)
+ "ROUNDING", // 634 (892)
+ "SECONDS", // 635 (893)
+ "SECURE", // 636 (894)
+ "SHORT", // 637 (895)
+ "SIGNED", // 638 (896)
+ "STANDARD-BINARY", // 639 (897)
+ "STANDARD-DECIMAL", // 640 (898)
+ "STATEMENT", // 641 (899)
+ "STEP", // 642 (900)
+ "STRUCTURE", // 643 (901)
+ "TOWARD-GREATER", // 644 (902)
+ "TOWARD-LESSER", // 645 (903)
+ "TRUNCATION", // 646 (904)
+ "UCS-4", // 647 (905)
+ "UNDERLINE", // 648 (906)
+ "UNSIGNED", // 649 (907)
+ "UTF-16", // 650 (908)
+ "UTF-8", // 651 (909)
+ "ADDRESS", // 652 (910)
+ "END-ACCEPT", // 653 (911)
+ "END-ADD", // 654 (912)
+ "END-CALL", // 655 (913)
+ "END-COMPUTE", // 656 (914)
+ "END-DELETE", // 657 (915)
+ "END-DISPLAY", // 658 (916)
+ "END-DIVIDE", // 659 (917)
+ "END-EVALUATE", // 660 (918)
+ "END-MULTIPLY", // 661 (919)
+ "END-PERFORM", // 662 (920)
+ "END-READ", // 663 (921)
+ "END-RETURN", // 664 (922)
+ "END-REWRITE", // 665 (923)
+ "END-SEARCH", // 666 (924)
+ "END-START", // 667 (925)
+ "END-STRING", // 668 (926)
+ "END-SUBTRACT", // 669 (927)
+ "END-UNSTRING", // 670 (928)
+ "END-WRITE", // 671 (929)
+ "END-IF", // 672 (930)
+ "THRU", // 673 (931)
+ "OR", // 674 (932)
+ "AND", // 675 (933)
+ "NOT", // 676 (934)
+ "NE", // 677 (935)
+ "LE", // 678 (936)
+ "GE", // 679 (937)
+ "POW", // 680 (938)
+ "NEG", // 681 (939)
};
diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index edf4aa8..87b19b6 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -2331,6 +2331,75 @@ bool fisprint(int c)
// 8.9 Reserved words
static const std::set<std::string> reserved_words = {
+ // GCC COBOL keywords
+ "COMMAND-LINE",
+ "COMMAND-LINE-COUNT",
+
+ // GCC device names
+ "C01",
+ "C02",
+ "C03",
+ "C04",
+ "C05",
+ "C06",
+ "C07",
+ "C08",
+ "C09",
+ "C10",
+ "C11",
+ "C12",
+ "CONSOLE",
+ "S01",
+ "S02",
+ "S03",
+ "S04",
+ "S05",
+ "STDERR",
+ "STDIN",
+ "STDOUT",
+ "SYSIN",
+ "SYSIPT",
+ "SYSLIST",
+ "SYSLST",
+ "SYSOUT",
+ "SYSPCH",
+ "SYSPUNCH",
+ "UPSI",
+
+ // IBM keywords that GCC recognizes
+ "BASIS",
+ "CBL",
+ "ENTER",
+ "READY",
+ "TITLE",
+ "TRACE",
+ "ALTER",
+ "COBOL",
+ "DATE-COMPILED",
+ "DATE-WRITTEN",
+ "DBCS",
+ "DEBUGGING",
+ "EGCS",
+ "ENTRY",
+ "EVERY",
+ "INSTALLATION",
+ "I-O-CONTROL",
+ "KANJI",
+ "LABEL",
+ "NULLS",
+ "PADDING",
+ "PROCEDURES",
+ "PROCEED",
+ "RECORDING",
+ "RERUN",
+ "REVERSED",
+ "SECURITY",
+ "TALLY",
+ "VOLATILE",
+ "XML",
+ "END-START",
+
+ // ISO 2023 keywords
"ACCEPT",
"ACCESS",
"ACTIVE-CLASS",
@@ -2497,8 +2566,6 @@ static const std::set<std::string> reserved_words = {
"FLOAT-EXTENDED",
"FLOAT-INFINITY",
"FLOAT-LONG",
- "FLOAT-NOT-A-NUMBER",
- "FLOAT-NOT-A-NUMBER-",
"FLOAT-NOT-A-NUMBER-",
"FLOAT-SHORT",
"FOOTING",
@@ -2856,10 +2923,11 @@ static const std::set<std::string> context_sensitive_words = {
};
// Is the input a COBOL word, per ISO/IEC 1989:2023 (E) ?
+// We add a few GCC-specific keywords, and our supported IBM keywords.
bool
-iso_cobol_word( const std::string& name, bool include_intrinsics ) {
+iso_cobol_word( const std::string& name, bool include_context ) {
auto ok = 1 == reserved_words.count(name);
- if( include_intrinsics && !ok ) {
+ if( include_context && !ok ) {
ok = 1 == context_sensitive_words.count(name);
}
return ok;
diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc
index ca14eb9..3d3ca11 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3. If not see
#include <sstream>
#include <vector>
+#include <unordered_map>
#include <queue>
#define INCLUDE_STRING
@@ -41,229 +42,216 @@ along with GCC; see the file COPYING3. If not see
#define TARGET_DEFAULT_TARGET_FLAGS (MASK_BIG_ENDIAN)
#endif
+/* Type for pointer to member of gcc_options and cl_target_option. */
+typedef int (gcc_options::*opt_var_ref_t);
+typedef int (cl_target_option::*cl_opt_var_ref_t);
+
+/* Types for recording extension to internal flag. */
+struct riscv_extra_ext_flag_table_t
+{
+ const char *ext;
+ opt_var_ref_t var_ref;
+ cl_opt_var_ref_t cl_var_ref;
+ int mask;
+};
+
+/* Types for recording extension to internal flag. */
+struct riscv_ext_flag_table_t
+{
+ opt_var_ref_t var_ref;
+ cl_opt_var_ref_t cl_var_ref;
+ int mask;
+
+ void clean (gcc_options *opts) const { opts->*var_ref &= ~mask; }
+
+ void set (gcc_options *opts) const { opts->*var_ref |= mask; }
+
+ bool check (cl_target_option *opts) const
+ {
+ return (opts->*cl_var_ref & mask);
+ }
+};
+
+/* Type for hold RISC-V extension version. */
+struct riscv_version_t
+{
+ riscv_version_t (int major_version, int minor_version,
+ enum riscv_isa_spec_class isa_spec_class
+ = ISA_SPEC_CLASS_NONE)
+ : major_version (major_version), minor_version (minor_version),
+ isa_spec_class (isa_spec_class)
+ {}
+ int major_version;
+ int minor_version;
+ enum riscv_isa_spec_class isa_spec_class;
+};
+
typedef bool (*riscv_implied_predicator_t) (const riscv_subset_list *);
/* Type for implied ISA info. */
struct riscv_implied_info_t
{
- constexpr riscv_implied_info_t (const char *ext, const char *implied_ext,
+ constexpr riscv_implied_info_t (const char *implied_ext,
riscv_implied_predicator_t predicator
= nullptr)
- : ext (ext), implied_ext (implied_ext), predicator (predicator){};
+ : implied_ext (implied_ext), predicator (predicator)
+ {}
- bool match (const riscv_subset_list *subset_list, const char *ext_name) const
+ bool match (const riscv_subset_list *subset_list) const
{
- if (strcmp (ext_name, ext) != 0)
- return false;
-
if (predicator && !predicator (subset_list))
return false;
return true;
}
- bool match (const riscv_subset_list *subset_list,
- const riscv_subset_t *subset) const
- {
- return match (subset_list, subset->name.c_str());
- }
-
- const char *ext;
const char *implied_ext;
riscv_implied_predicator_t predicator;
};
-/* Implied ISA info, must end with NULL sentinel. */
-static const riscv_implied_info_t riscv_implied_info[] =
-{
- {"m", "zmmul"},
-
- {"d", "f"},
- {"f", "zicsr"},
- {"d", "zicsr"},
-
- {"a", "zaamo"},
- {"a", "zalrsc"},
-
- {"c", "zca"},
- {"c", "zcf",
- [] (const riscv_subset_list *subset_list) -> bool
- {
- return subset_list->xlen () == 32 && subset_list->lookup ("f");
- }},
- {"c", "zcd",
- [] (const riscv_subset_list *subset_list) -> bool
- {
- return subset_list->lookup ("d");
- }},
-
- {"zabha", "zaamo"},
- {"zacas", "zaamo"},
- {"zawrs", "zalrsc"},
-
- {"zcmop", "zca"},
-
- {"b", "zba"},
- {"b", "zbb"},
- {"b", "zbs"},
-
- {"zdinx", "zfinx"},
- {"zfinx", "zicsr"},
- {"zdinx", "zicsr"},
-
- {"zicfiss", "zicsr"},
- {"zicfiss", "zimop"},
- {"zicfilp", "zicsr"},
-
- {"zk", "zkn"},
- {"zk", "zkr"},
- {"zk", "zkt"},
- {"zkn", "zbkb"},
- {"zkn", "zbkc"},
- {"zkn", "zbkx"},
- {"zkn", "zkne"},
- {"zkn", "zknd"},
- {"zkn", "zknh"},
- {"zks", "zbkb"},
- {"zks", "zbkc"},
- {"zks", "zbkx"},
- {"zks", "zksed"},
- {"zks", "zksh"},
-
- {"v", "zvl128b"},
- {"v", "zve64d"},
-
- {"zve32f", "f"},
- {"zve64f", "f"},
- {"zve64d", "d"},
-
- {"zve32x", "zicsr"},
- {"zve32x", "zvl32b"},
- {"zve32f", "zve32x"},
- {"zve32f", "zvl32b"},
-
- {"zve64x", "zve32x"},
- {"zve64x", "zvl64b"},
- {"zve64f", "zve32f"},
- {"zve64f", "zve64x"},
- {"zve64f", "zvl64b"},
- {"zve64d", "zve64f"},
- {"zve64d", "zvl64b"},
-
- {"zvl64b", "zvl32b"},
- {"zvl128b", "zvl64b"},
- {"zvl256b", "zvl128b"},
- {"zvl512b", "zvl256b"},
- {"zvl1024b", "zvl512b"},
- {"zvl2048b", "zvl1024b"},
- {"zvl4096b", "zvl2048b"},
- {"zvl8192b", "zvl4096b"},
- {"zvl16384b", "zvl8192b"},
- {"zvl32768b", "zvl16384b"},
- {"zvl65536b", "zvl32768b"},
-
- {"zvkn", "zvkned"},
- {"zvkn", "zvknhb"},
- {"zvkn", "zvkb"},
- {"zvkn", "zvkt"},
- {"zvknc", "zvkn"},
- {"zvknc", "zvbc"},
- {"zvkng", "zvkn"},
- {"zvkng", "zvkg"},
- {"zvks", "zvksed"},
- {"zvks", "zvksh"},
- {"zvks", "zvkb"},
- {"zvks", "zvkt"},
- {"zvksc", "zvks"},
- {"zvksc", "zvbc"},
- {"zvksg", "zvks"},
- {"zvksg", "zvkg"},
- {"zvbb", "zvkb"},
- {"zvbc", "zve64x"},
- {"zvkb", "zve32x"},
- {"zvkg", "zve32x"},
- {"zvkned", "zve32x"},
- {"zvknha", "zve32x"},
- {"zvknhb", "zve64x"},
- {"zvksed", "zve32x"},
- {"zvksh", "zve32x"},
-
- {"zfbfmin", "zfhmin"},
- {"zfh", "zfhmin"},
- {"zfhmin", "f"},
-
- {"zfa", "f"},
-
- {"zvfbfmin", "zve32f"},
- {"zvfbfwma", "zvfbfmin"},
- {"zvfbfwma", "zfbfmin"},
- {"zvfhmin", "zve32f"},
- {"zvfh", "zve32f"},
- {"zvfh", "zfhmin"},
-
- {"zhinx", "zhinxmin"},
- {"zhinxmin", "zfinx"},
-
- {"zce", "zca"},
- {"zce", "zcb"},
- {"zce", "zcmp"},
- {"zce", "zcmt"},
- {"zcf", "zca"},
- {"zcd", "zca"},
- {"zcb", "zca"},
- {"zcmp", "zca"},
- {"zcmt", "zca"},
- {"zcmt", "zicsr"},
- {"zce", "zcf",
- [] (const riscv_subset_list *subset_list) -> bool
- {
- return subset_list->xlen () == 32 && subset_list->lookup ("f");
- }},
- {"zca", "c",
- [] (const riscv_subset_list *subset_list) -> bool
- {
- /* For RV32 Zca implies C for one of these combinations of
- extensions: Zca, F_Zca_Zcf and FD_Zca_Zcf_Zcd. */
- if (subset_list->xlen () == 32)
- {
- if (subset_list->lookup ("d"))
- return subset_list->lookup ("zcf") && subset_list->lookup ("zcd");
-
- if (subset_list->lookup ("f"))
- return subset_list->lookup ("zcf");
-
- return true;
- }
-
- /* For RV64 Zca implies C for one of these combinations of
- extensions: Zca and FD_Zca_Zcd (Zcf is not available
- for RV64). */
- if (subset_list->xlen () == 64)
- {
- if (subset_list->lookup ("d"))
- return subset_list->lookup ("zcd");
-
- return true;
- }
-
- /* Do nothing for future RV128 specification. Behaviour
- for this case is not yet well defined. */
- return false;
- }},
-
- {"smaia", "ssaia"},
- {"smstateen", "ssstateen"},
- {"smepmp", "zicsr"},
- {"ssaia", "zicsr"},
- {"sscofpmf", "zicsr"},
- {"ssstateen", "zicsr"},
- {"sstc", "zicsr"},
-
- {"xsfvcp", "zve32x"},
+static void
+apply_extra_extension_flags (const char *ext,
+ std::vector<riscv_ext_flag_table_t> &flag_table);
- {NULL, NULL}
+/* Class for hold the extension info. */
+class riscv_ext_info_t
+{
+public:
+ riscv_ext_info_t (const char *ext,
+ const std::vector<riscv_implied_info_t> &implied_exts,
+ const std::vector<riscv_version_t> &supported_versions,
+ const std::vector<riscv_ext_flag_table_t> &flag_table,
+ int bitmask_group_id, int bitmask_group_bit_pos,
+ unsigned extra_extension_flags)
+ : m_ext (ext), m_implied_exts (implied_exts),
+ m_supported_versions (supported_versions), m_flag_table (flag_table),
+ m_bitmask_group_id (bitmask_group_id),
+ m_bitmask_group_bit_pos (bitmask_group_bit_pos),
+ m_extra_extension_flags (extra_extension_flags)
+ {
+ apply_extra_extension_flags (ext, m_flag_table);
+ }
+
+ /* Return true if any change. */
+ bool apply_implied_ext (riscv_subset_list *subset_list) const;
+
+ const std::vector<riscv_implied_info_t> implied_exts () const
+ {
+ return m_implied_exts;
+ }
+
+ bool need_combine_p () const
+ {
+ return m_extra_extension_flags & EXT_FLAG_MACRO;
+ }
+
+ riscv_version_t default_version () const
+ {
+ if (m_supported_versions.size () == 1)
+ {
+ return *m_supported_versions.begin ();
+ }
+
+ for (const riscv_version_t &ver : m_supported_versions)
+ {
+ if (ver.isa_spec_class == riscv_isa_spec
+ || ver.isa_spec_class == ISA_SPEC_CLASS_NONE)
+ return ver;
+ }
+ gcc_unreachable ();
+ }
+
+ void clean_opts (gcc_options *opts) const
+ {
+ for (auto &flag : m_flag_table)
+ flag.clean (opts);
+ }
+
+ void set_opts (gcc_options *opts) const
+ {
+ for (auto &flag : m_flag_table)
+ flag.set (opts);
+ }
+
+ bool check_opts (cl_target_option *opts) const
+ {
+ bool result = true;
+ for (auto &flag : m_flag_table)
+ result = result && flag.check (opts);
+ return result;
+ }
+
+ const std::vector<riscv_version_t> &supported_versions () const
+ {
+ return m_supported_versions;
+ }
+
+private:
+ const char *m_ext;
+ std::vector<riscv_implied_info_t> m_implied_exts;
+ std::vector<riscv_version_t> m_supported_versions;
+ std::vector<riscv_ext_flag_table_t> m_flag_table;
+ int m_bitmask_group_id;
+ int m_bitmask_group_bit_pos;
+ unsigned m_extra_extension_flags;
};
+static const std::unordered_map<std::string, riscv_ext_info_t> riscv_ext_infos
+ = {
+#define DEFINE_RISCV_EXT(NAME, UPPERCAE_NAME, FULL_NAME, DESC, URL, DEP_EXTS, \
+ SUPPORTED_VERSIONS, FLAG_GROUP, BITMASK_GROUP_ID, \
+ BITMASK_BIT_POSITION, EXTRA_EXTENSION_FLAGS) \
+ {std::string (#NAME), \
+ riscv_ext_info_t (#NAME, std::vector<riscv_implied_info_t> DEP_EXTS, \
+ std::vector<riscv_version_t> SUPPORTED_VERSIONS, \
+ std::vector<riscv_ext_flag_table_t> ( \
+ {{&gcc_options::x_riscv_##FLAG_GROUP##_subext, \
+ &cl_target_option::x_riscv_##FLAG_GROUP##_subext, \
+ MASK_##UPPERCAE_NAME}}), \
+ BITMASK_GROUP_ID, BITMASK_BIT_POSITION, \
+ EXTRA_EXTENSION_FLAGS)},
+#include "../../../config/riscv/riscv-ext.def"
+#undef DEFINE_RISCV_EXT
+};
+
+static const riscv_ext_info_t &
+get_riscv_ext_info (const std::string &ext)
+{
+ auto itr = riscv_ext_infos.find (ext);
+ if (itr == riscv_ext_infos.end ())
+ {
+ gcc_unreachable ();
+ }
+ return itr->second;
+}
+
+/* Return true if any change. */
+bool
+riscv_ext_info_t::apply_implied_ext (riscv_subset_list *subset_list) const
+{
+ bool any_change = false;
+ for (const riscv_implied_info_t &implied_info : m_implied_exts)
+ {
+ /* Skip if implied extension already present. */
+ if (subset_list->lookup (implied_info.implied_ext))
+ continue;
+
+ any_change = true;
+ if (!implied_info.match (subset_list))
+ continue;
+
+ /* Version of implied extension will get from current ISA spec
+ version. */
+ subset_list->add (implied_info.implied_ext, true);
+
+ /* Recursively add implied extension by implied_info->implied_ext. */
+ const riscv_ext_info_t &implied_ext_info
+ = get_riscv_ext_info (implied_info.implied_ext);
+ implied_ext_info.apply_implied_ext (subset_list);
+ }
+ return any_change;
+}
+
/* This structure holds version information for specific ISA version. */
struct riscv_ext_version
@@ -274,232 +262,51 @@ struct riscv_ext_version
int minor_version;
};
-/* All standard extensions defined in all supported ISA spec. */
-static const struct riscv_ext_version riscv_ext_version_table[] =
+struct riscv_profiles
{
- /* name, ISA spec, major version, minor_version. */
- {"e", ISA_SPEC_CLASS_20191213, 2, 0},
- {"e", ISA_SPEC_CLASS_20190608, 2, 0},
- {"e", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"i", ISA_SPEC_CLASS_20191213, 2, 1},
- {"i", ISA_SPEC_CLASS_20190608, 2, 1},
- {"i", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"m", ISA_SPEC_CLASS_20191213, 2, 0},
- {"m", ISA_SPEC_CLASS_20190608, 2, 0},
- {"m", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"a", ISA_SPEC_CLASS_20191213, 2, 1},
- {"a", ISA_SPEC_CLASS_20190608, 2, 0},
- {"a", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"f", ISA_SPEC_CLASS_20191213, 2, 2},
- {"f", ISA_SPEC_CLASS_20190608, 2, 2},
- {"f", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"d", ISA_SPEC_CLASS_20191213, 2, 2},
- {"d", ISA_SPEC_CLASS_20190608, 2, 2},
- {"d", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"c", ISA_SPEC_CLASS_20191213, 2, 0},
- {"c", ISA_SPEC_CLASS_20190608, 2, 0},
- {"c", ISA_SPEC_CLASS_2P2, 2, 0},
-
- {"b", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"h", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"v", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zicsr", ISA_SPEC_CLASS_20191213, 2, 0},
- {"zicsr", ISA_SPEC_CLASS_20190608, 2, 0},
-
- {"zifencei", ISA_SPEC_CLASS_20191213, 2, 0},
- {"zifencei", ISA_SPEC_CLASS_20190608, 2, 0},
-
- {"zicond", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"za64rs", ISA_SPEC_CLASS_NONE, 1, 0},
- {"za128rs", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zawrs", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zaamo", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zalrsc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zabha", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zacas", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zama16b", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zba", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zbb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zbc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zbs", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zfinx", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zdinx", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zhinx", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zhinxmin", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zbkb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zbkc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zbkx", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zkne", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zknd", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zknh", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zkr", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zksed", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zksh", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zkt", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zihintntl", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zihintpause", ISA_SPEC_CLASS_NONE, 2, 0},
-
- {"zicboz",ISA_SPEC_CLASS_NONE, 1, 0},
- {"zicbom",ISA_SPEC_CLASS_NONE, 1, 0},
- {"zicbop",ISA_SPEC_CLASS_NONE, 1, 0},
- {"zic64b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"ziccamoa", ISA_SPEC_CLASS_NONE, 1, 0},
- {"ziccif", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zicclsm", ISA_SPEC_CLASS_NONE, 1, 0},
- {"ziccrse", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zicfiss", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zicfilp", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zimop", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zcmop", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zicntr", ISA_SPEC_CLASS_NONE, 2, 0},
- {"zihpm", ISA_SPEC_CLASS_NONE, 2, 0},
-
- {"zk", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zkn", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zks", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"ztso", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zve32x", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zve32f", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zve64x", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zve64f", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zve64d", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zvbb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvbc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkg", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkned", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvknha", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvknhb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvksed", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvksh", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkn", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvknc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkng", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvks", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvksc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvksg", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkt", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zvl32b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl64b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl128b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl256b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl512b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl1024b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl2048b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl4096b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl8192b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl16384b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl32768b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvl65536b", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zfbfmin", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zfh", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zfhmin", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvfbfmin", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvfbfwma", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvfhmin", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvfh", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zfa", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zmmul", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"zca", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zcb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zce", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zcf", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zcd", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zcmp", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zcmt", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"sdtrig", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"smaia", ISA_SPEC_CLASS_NONE, 1, 0},
- {"smepmp", ISA_SPEC_CLASS_NONE, 1, 0},
- {"smstateen", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"ssaia", ISA_SPEC_CLASS_NONE, 1, 0},
- {"sscofpmf", ISA_SPEC_CLASS_NONE, 1, 0},
- {"ssstateen", ISA_SPEC_CLASS_NONE, 1, 0},
- {"sstc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"ssstrict", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"svade", ISA_SPEC_CLASS_NONE, 1, 0},
- {"svadu", ISA_SPEC_CLASS_NONE, 1, 0},
- {"svinval", ISA_SPEC_CLASS_NONE, 1, 0},
- {"svnapot", ISA_SPEC_CLASS_NONE, 1, 0},
- {"svpbmt", ISA_SPEC_CLASS_NONE, 1, 0},
- {"svvptc", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"xcvmac", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xcvalu", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xcvelw", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xcvsimd", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xcvbi", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"xtheadba", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadbb", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadbs", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadcmo", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadcondmov", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadfmemidx", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadfmv", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadint", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadmac", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadmemidx", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadmempair", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadsync", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xtheadvector", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"xventanacondops", ISA_SPEC_CLASS_NONE, 1, 0},
-
- {"xsfvcp", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xsfcease", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xsfvqmaccqoq", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xsfvqmaccdod", ISA_SPEC_CLASS_NONE, 1, 0},
- {"xsfvfnrclipxfqf", ISA_SPEC_CLASS_NONE, 1, 0},
-
- /* Terminate the list. */
- {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
+ const char *profile_name;
+ const char *profile_string;
};
-/* Combine extensions defined in this table */
-static const struct riscv_ext_version riscv_combine_info[] =
-{
- {"a", ISA_SPEC_CLASS_20191213, 2, 1},
- {"b", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zk", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zkn", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zks", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkn", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvknc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvkng", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvks", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvksc", ISA_SPEC_CLASS_NONE, 1, 0},
- {"zvksg", ISA_SPEC_CLASS_NONE, 1, 0},
+/* This table records the mapping form RISC-V Profiles into march string. */
+static const riscv_profiles riscv_profiles_table[] =
+{
+ /* RVI20U only contains the base extension 'i' as mandatory extension. */
+ {"rvi20u64", "rv64i"},
+ {"rvi20u32", "rv32i"},
+
+ /* RVA20U contains the 'i,m,a,f,d,c,zicsr,zicntr,ziccif,ziccrse,ziccamoa,
+ zicclsm,za128rs' as mandatory extensions. */
+ {"rva20u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_za128rs"},
+
+ /* RVA22U contains the 'i,m,a,f,d,c,zicsr,zihintpause,zba,zbb,zbs,zicntr,
+ zihpm,ziccif,ziccrse,ziccamoa, zicclsm,zic64b,za64rs,zicbom,zicbop,zicboz,
+ zfhmin,zkt' as mandatory extensions. */
+ {"rva22u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt"},
+
+ /* RVA23 contains all mandatory base ISA for RVA22U64 and the new extension
+ 'v,zihintntl,zvfhmin,zvbb,zvkt,zicond,zimop,zcmop,zfa,zawrs' as mandatory
+ extensions. */
+ {"rva23u64", "rv64imafdcv_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb"
+ "_zfa_zawrs"},
+
+ /* RVB23 contains all mandatory base ISA for RVA22U64 and the new extension
+ 'zihintntl,zicond,zimop,zcmop,zfa,zawrs' as mandatory
+ extensions. */
+ {"rvb23u64", "rv64imafdc_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt_zihintntl_zicond_zimop_zcmop_zcb"
+ "_zfa_zawrs"},
+
+ /* Currently we do not define S/M mode Profiles in gcc part. */
+
/* Terminate the list. */
- {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
+ {NULL, NULL}
};
static const riscv_cpu_info riscv_cpu_tables[] =
@@ -735,11 +542,8 @@ subset_cmp (const std::string &a, const std::string &b)
static bool
standard_extensions_p (const char *ext)
{
- const riscv_ext_version *ext_ver;
- for (ext_ver = &riscv_ext_version_table[0]; ext_ver->name != NULL; ++ext_ver)
- if (strcmp (ext, ext_ver->name) == 0)
- return true;
- return false;
+ auto itr = riscv_ext_infos.find (ext);
+ return itr != riscv_ext_infos.end ();
}
/* Add new subset to list. */
@@ -869,24 +673,19 @@ get_default_version (const char *ext,
unsigned int *major_version,
unsigned int *minor_version)
{
- const riscv_ext_version *ext_ver;
- for (ext_ver = &riscv_ext_version_table[0];
- ext_ver->name != NULL;
- ++ext_ver)
- if (strcmp (ext, ext_ver->name) == 0)
- {
- if ((ext_ver->isa_spec_class == riscv_isa_spec) ||
- (ext_ver->isa_spec_class == ISA_SPEC_CLASS_NONE))
- {
- *major_version = ext_ver->major_version;
- *minor_version = ext_ver->minor_version;
- return;
- }
- }
+ auto itr = riscv_ext_infos.find (ext);
+ if (itr == riscv_ext_infos.end ())
+ {
+ /* Not found version info. */
+ *major_version = 0;
+ *minor_version = 0;
+ return;
+ }
- /* Not found version info. */
- *major_version = 0;
- *minor_version = 0;
+ riscv_version_t ver = itr->second.default_version ();
+ /* Get the version info from riscv_ext_infos. */
+ *major_version = ver.major_version;
+ *minor_version = ver.minor_version;
}
/* Add new subset to list, but using default version from ISA spec version. */
@@ -1109,6 +908,52 @@ riscv_subset_list::parsing_subset_version (const char *ext,
return p;
}
+/* Parsing RISC-V Profiles in -march string.
+ Return string with mandatory extensions of Profiles. */
+std::string
+riscv_subset_list::parse_profiles (const char *arch)
+{
+ /* Checking if input string contains a Profiles.
+ There are two cases use Profiles in -march option:
+
+ 1. Only use Profiles in '-march' as input
+ 2. Mixed Profiles with other extensions
+
+ Use '_' to split Profiles and other extension. */
+ std::string p(arch);
+ const size_t p_len = p.size();
+
+ for (int i = 0; riscv_profiles_table[i].profile_name != nullptr; ++i)
+ {
+ const std::string& p_name = riscv_profiles_table[i].profile_name;
+ const std::string& p_str = riscv_profiles_table[i].profile_string;
+ size_t pos = p.find(p_name);
+ /* Find profile at the begin. */
+ if (pos == 0 && pos + p_name.size() <= p_len)
+ {
+ size_t after_pos = pos + p_name.size();
+ std::string after_part = p.substr(after_pos);
+
+ /* If there're only profile, return the profile_string directly. */
+ if (after_part[0] == '\0')
+ return p_str;
+
+ /* If isn't '_' after profile, need to add it and mention the user. */
+ if (after_part[0] != '_')
+ {
+ warning_at (m_loc, 0, "Should use \"%c\" to contact Profiles with other "
+ "extensions", '_');
+ return p_str + "_" + after_part;
+ }
+
+ /* Return 'profiles_additional' extensions. */
+ return p_str + after_part;
+ }
+ }
+ /* Not found profile, return directly. */
+ return p;
+}
+
/* Parsing function for base extensions, rv[32|64][i|e|g]
Return Value:
@@ -1135,8 +980,8 @@ riscv_subset_list::parse_base_ext (const char *p)
}
else
{
- error_at (m_loc, "%<-march=%s%>: ISA string must begin with rv32 or rv64",
- m_arch);
+ error_at (m_loc, "%<-march=%s%>: ISA string must begin with rv32, rv64 "
+ "or Profiles", m_arch);
return NULL;
}
@@ -1244,25 +1089,8 @@ riscv_subset_list::parse_single_std_ext (const char *p, bool exact_single_p)
void
riscv_subset_list::handle_implied_ext (const char *ext)
{
- const riscv_implied_info_t *implied_info;
- for (implied_info = &riscv_implied_info[0];
- implied_info->ext;
- ++implied_info)
- {
- if (!implied_info->match (this, ext))
- continue;
-
- /* Skip if implied extension already present. */
- if (lookup (implied_info->implied_ext))
- continue;
-
- /* Version of implied extension will get from current ISA spec
- version. */
- add (implied_info->implied_ext, true);
-
- /* Recursively add implied extension by implied_info->implied_ext. */
- handle_implied_ext (implied_info->implied_ext);
- }
+ const riscv_ext_info_t &ext_info = get_riscv_ext_info (ext);
+ ext_info.apply_implied_ext (this);
/* For RISC-V ISA version 2.2 or earlier version, zicsr and zifence is
included in the base ISA. */
@@ -1283,14 +1111,13 @@ riscv_subset_list::check_implied_ext ()
riscv_subset_t *itr;
for (itr = m_head; itr != NULL; itr = itr->next)
{
- const riscv_implied_info_t *implied_info;
- for (implied_info = &riscv_implied_info[0]; implied_info->ext;
- ++implied_info)
+ auto &ext = *itr;
+ auto &ext_info = get_riscv_ext_info (ext.name);
+ for (auto &implied_ext : ext_info.implied_exts ())
{
- if (!implied_info->match (this, itr))
+ if (!implied_ext.match (this))
continue;
-
- if (!lookup (implied_info->implied_ext))
+ if (lookup (implied_ext.implied_ext) == NULL)
return false;
}
}
@@ -1301,27 +1128,23 @@ riscv_subset_list::check_implied_ext ()
void
riscv_subset_list::handle_combine_ext ()
{
- const riscv_ext_version *combine_info;
- const riscv_implied_info_t *implied_info;
- bool is_combined = false;
-
- for (combine_info = &riscv_combine_info[0]; combine_info->name;
- ++combine_info)
+ for (const auto &[ext_name, ext_info] : riscv_ext_infos)
{
- /* Skip if combine extensions are present */
- if (lookup (combine_info->name))
+ bool is_combined = true;
+ /* Skip if this extension don't need to combine. */
+ if (!ext_info.need_combine_p ())
+ continue;
+ /* Skip if combine extensions are present. */
+ if (lookup (ext_name.c_str ()))
continue;
- /* Find all extensions of the combine extension */
- for (implied_info = &riscv_implied_info[0]; implied_info->ext;
- ++implied_info)
+ /* Check all implied extensions is present. */
+ for (const auto &implied_ext : ext_info.implied_exts ())
{
- if (!implied_info->match (this, combine_info->name))
+ if (!implied_ext.match (this))
continue;
- if (lookup (implied_info->implied_ext))
- is_combined = true;
- else
+ if (!lookup (implied_ext.implied_ext))
{
is_combined = false;
break;
@@ -1331,11 +1154,9 @@ riscv_subset_list::handle_combine_ext ()
/* Add combine extensions */
if (is_combined)
{
- if (lookup (combine_info->name) == NULL)
- {
- add (combine_info->name, combine_info->major_version,
- combine_info->minor_version, false, true);
- }
+ riscv_version_t ver = ext_info.default_version();
+ add (ext_name.c_str (), ver.major_version,
+ ver.minor_version, false, true);
}
}
}
@@ -1346,6 +1167,34 @@ riscv_subset_list::check_conflict_ext ()
if (lookup ("zcf") && m_xlen == 64)
error_at (m_loc, "%<-march=%s%>: zcf extension supports in rv32 only",
m_arch);
+
+ if (lookup ("zilsd") && m_xlen == 64)
+ error_at (m_loc, "%<-march=%s%>: zilsd extension supports in rv32 only",
+ m_arch);
+
+ if (lookup ("zclsd") && m_xlen == 64)
+ error_at (m_loc, "%<-march=%s%>: zclsd extension supports in rv32 only",
+ m_arch);
+
+ if (lookup ("ssnpm") && m_xlen == 32)
+ error_at (m_loc, "%<-march=%s%>: ssnpm extension supports in rv64 only",
+ m_arch);
+
+ if (lookup ("smnpm") && m_xlen == 32)
+ error_at (m_loc, "%<-march=%s%>: smnpm extension supports in rv64 only",
+ m_arch);
+
+ if (lookup ("smmpm") && m_xlen == 32)
+ error_at (m_loc, "%<-march=%s%>: smmpm extension supports in rv64 only",
+ m_arch);
+
+ if (lookup ("sspm") && m_xlen == 32)
+ error_at (m_loc, "%<-march=%s%>: sspm extension supports in rv64 only",
+ m_arch);
+
+ if (lookup ("supm") && m_xlen == 32)
+ error_at (m_loc, "%<-march=%s%>: supm extension supports in rv64 only",
+ m_arch);
if (lookup ("zfinx") && lookup ("f"))
error_at (m_loc,
@@ -1527,8 +1376,10 @@ riscv_subset_list::parse (const char *arch, location_t loc)
return NULL;
riscv_subset_list *subset_list = new riscv_subset_list (arch, loc);
+
const char *p = arch;
- p = subset_list->parse_base_ext (p);
+ std::string a = subset_list->parse_profiles(p);
+ p = subset_list->parse_base_ext (a.c_str());
if (p == NULL)
goto fail;
@@ -1620,90 +1471,15 @@ riscv_arch_str (bool version_p)
return std::string();
}
-/* Type for pointer to member of gcc_options and cl_target_option. */
-typedef int (gcc_options::*opt_var_ref_t);
-typedef int (cl_target_option::*cl_opt_var_ref_t);
-
-/* Types for recording extension to internal flag. */
-struct riscv_ext_flag_table_t {
- const char *ext;
- opt_var_ref_t var_ref;
- cl_opt_var_ref_t cl_var_ref;
- int mask;
-};
-
#define RISCV_EXT_FLAG_ENTRY(NAME, VAR, MASK) \
{NAME, &gcc_options::VAR, &cl_target_option::VAR, MASK}
-/* Mapping table between extension to internal flag. */
-static const riscv_ext_flag_table_t riscv_ext_flag_table[] =
-{
- RISCV_EXT_FLAG_ENTRY ("e", x_target_flags, MASK_RVE),
- RISCV_EXT_FLAG_ENTRY ("m", x_target_flags, MASK_MUL),
- RISCV_EXT_FLAG_ENTRY ("a", x_target_flags, MASK_ATOMIC),
- RISCV_EXT_FLAG_ENTRY ("f", x_target_flags, MASK_HARD_FLOAT),
- RISCV_EXT_FLAG_ENTRY ("d", x_target_flags, MASK_DOUBLE_FLOAT),
- RISCV_EXT_FLAG_ENTRY ("c", x_target_flags, MASK_RVC),
- RISCV_EXT_FLAG_ENTRY ("v", x_target_flags, MASK_FULL_V),
- RISCV_EXT_FLAG_ENTRY ("v", x_target_flags, MASK_VECTOR),
-
- RISCV_EXT_FLAG_ENTRY ("zicsr", x_riscv_zi_subext, MASK_ZICSR),
- RISCV_EXT_FLAG_ENTRY ("zifencei", x_riscv_zi_subext, MASK_ZIFENCEI),
- RISCV_EXT_FLAG_ENTRY ("zicond", x_riscv_zi_subext, MASK_ZICOND),
-
- RISCV_EXT_FLAG_ENTRY ("za64rs", x_riscv_za_subext, MASK_ZA64RS),
- RISCV_EXT_FLAG_ENTRY ("za128rs", x_riscv_za_subext, MASK_ZA128RS),
- RISCV_EXT_FLAG_ENTRY ("zawrs", x_riscv_za_subext, MASK_ZAWRS),
- RISCV_EXT_FLAG_ENTRY ("zaamo", x_riscv_za_subext, MASK_ZAAMO),
- RISCV_EXT_FLAG_ENTRY ("zalrsc", x_riscv_za_subext, MASK_ZALRSC),
- RISCV_EXT_FLAG_ENTRY ("zabha", x_riscv_za_subext, MASK_ZABHA),
- RISCV_EXT_FLAG_ENTRY ("zacas", x_riscv_za_subext, MASK_ZACAS),
- RISCV_EXT_FLAG_ENTRY ("zama16b", x_riscv_za_subext, MASK_ZAMA16B),
-
- RISCV_EXT_FLAG_ENTRY ("zba", x_riscv_zb_subext, MASK_ZBA),
- RISCV_EXT_FLAG_ENTRY ("zbb", x_riscv_zb_subext, MASK_ZBB),
- RISCV_EXT_FLAG_ENTRY ("zbc", x_riscv_zb_subext, MASK_ZBC),
- RISCV_EXT_FLAG_ENTRY ("zbs", x_riscv_zb_subext, MASK_ZBS),
-
- RISCV_EXT_FLAG_ENTRY ("zfinx", x_riscv_zinx_subext, MASK_ZFINX),
- RISCV_EXT_FLAG_ENTRY ("zdinx", x_riscv_zinx_subext, MASK_ZDINX),
- RISCV_EXT_FLAG_ENTRY ("zhinx", x_riscv_zinx_subext, MASK_ZHINX),
- RISCV_EXT_FLAG_ENTRY ("zhinxmin", x_riscv_zinx_subext, MASK_ZHINXMIN),
-
- RISCV_EXT_FLAG_ENTRY ("zbkb", x_riscv_zk_subext, MASK_ZBKB),
- RISCV_EXT_FLAG_ENTRY ("zbkc", x_riscv_zk_subext, MASK_ZBKC),
- RISCV_EXT_FLAG_ENTRY ("zbkx", x_riscv_zk_subext, MASK_ZBKX),
- RISCV_EXT_FLAG_ENTRY ("zknd", x_riscv_zk_subext, MASK_ZKND),
- RISCV_EXT_FLAG_ENTRY ("zkne", x_riscv_zk_subext, MASK_ZKNE),
- RISCV_EXT_FLAG_ENTRY ("zknh", x_riscv_zk_subext, MASK_ZKNH),
- RISCV_EXT_FLAG_ENTRY ("zkr", x_riscv_zk_subext, MASK_ZKR),
- RISCV_EXT_FLAG_ENTRY ("zksed", x_riscv_zk_subext, MASK_ZKSED),
- RISCV_EXT_FLAG_ENTRY ("zksh", x_riscv_zk_subext, MASK_ZKSH),
- RISCV_EXT_FLAG_ENTRY ("zkt", x_riscv_zk_subext, MASK_ZKT),
-
- RISCV_EXT_FLAG_ENTRY ("zihintntl", x_riscv_zi_subext, MASK_ZIHINTNTL),
- RISCV_EXT_FLAG_ENTRY ("zihintpause", x_riscv_zi_subext, MASK_ZIHINTPAUSE),
- RISCV_EXT_FLAG_ENTRY ("ziccamoa", x_riscv_zi_subext, MASK_ZICCAMOA),
- RISCV_EXT_FLAG_ENTRY ("ziccif", x_riscv_zi_subext, MASK_ZICCIF),
- RISCV_EXT_FLAG_ENTRY ("zicclsm", x_riscv_zi_subext, MASK_ZICCLSM),
- RISCV_EXT_FLAG_ENTRY ("ziccrse", x_riscv_zi_subext, MASK_ZICCRSE),
-
- RISCV_EXT_FLAG_ENTRY ("zicboz", x_riscv_zicmo_subext, MASK_ZICBOZ),
- RISCV_EXT_FLAG_ENTRY ("zicbom", x_riscv_zicmo_subext, MASK_ZICBOM),
- RISCV_EXT_FLAG_ENTRY ("zicbop", x_riscv_zicmo_subext, MASK_ZICBOP),
- RISCV_EXT_FLAG_ENTRY ("zic64b", x_riscv_zicmo_subext, MASK_ZIC64B),
-
- RISCV_EXT_FLAG_ENTRY ("zicfiss", x_riscv_zi_subext, MASK_ZICFISS),
- RISCV_EXT_FLAG_ENTRY ("zicfilp", x_riscv_zi_subext, MASK_ZICFILP),
-
- RISCV_EXT_FLAG_ENTRY ("zimop", x_riscv_mop_subext, MASK_ZIMOP),
- RISCV_EXT_FLAG_ENTRY ("zcmop", x_riscv_mop_subext, MASK_ZCMOP),
-
- RISCV_EXT_FLAG_ENTRY ("zve32x", x_target_flags, MASK_VECTOR),
- RISCV_EXT_FLAG_ENTRY ("zve32f", x_target_flags, MASK_VECTOR),
- RISCV_EXT_FLAG_ENTRY ("zve64x", x_target_flags, MASK_VECTOR),
- RISCV_EXT_FLAG_ENTRY ("zve64f", x_target_flags, MASK_VECTOR),
- RISCV_EXT_FLAG_ENTRY ("zve64d", x_target_flags, MASK_VECTOR),
+/* Mapping table between extension to internal flag,
+ this table is not needed to add manually unless there is speical rule. */
+static const riscv_extra_ext_flag_table_t riscv_extra_ext_flag_table[] =
+{
+ RISCV_EXT_FLAG_ENTRY ("zve32x", x_riscv_isa_flags, MASK_VECTOR),
+ RISCV_EXT_FLAG_ENTRY ("v", x_riscv_isa_flags, MASK_FULL_V),
/* We don't need to put complete ELEN/ELEN_FP info here, due to the
implication relation of vector extension.
@@ -1720,108 +1496,40 @@ static const riscv_ext_flag_table_t riscv_ext_flag_table[] =
RISCV_EXT_FLAG_ENTRY ("zvfhmin", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_FP_16),
RISCV_EXT_FLAG_ENTRY ("zvfh", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_FP_16),
- RISCV_EXT_FLAG_ENTRY ("zvbb", x_riscv_zvb_subext, MASK_ZVBB),
- RISCV_EXT_FLAG_ENTRY ("zvbc", x_riscv_zvb_subext, MASK_ZVBC),
- RISCV_EXT_FLAG_ENTRY ("zvkb", x_riscv_zvb_subext, MASK_ZVKB),
- RISCV_EXT_FLAG_ENTRY ("zvkg", x_riscv_zvk_subext, MASK_ZVKG),
- RISCV_EXT_FLAG_ENTRY ("zvkned", x_riscv_zvk_subext, MASK_ZVKNED),
- RISCV_EXT_FLAG_ENTRY ("zvknha", x_riscv_zvk_subext, MASK_ZVKNHA),
- RISCV_EXT_FLAG_ENTRY ("zvknhb", x_riscv_zvk_subext, MASK_ZVKNHB),
- RISCV_EXT_FLAG_ENTRY ("zvksed", x_riscv_zvk_subext, MASK_ZVKSED),
- RISCV_EXT_FLAG_ENTRY ("zvksh", x_riscv_zvk_subext, MASK_ZVKSH),
- RISCV_EXT_FLAG_ENTRY ("zvkn", x_riscv_zvk_subext, MASK_ZVKN),
- RISCV_EXT_FLAG_ENTRY ("zvknc", x_riscv_zvk_subext, MASK_ZVKNC),
- RISCV_EXT_FLAG_ENTRY ("zvkng", x_riscv_zvk_subext, MASK_ZVKNG),
- RISCV_EXT_FLAG_ENTRY ("zvks", x_riscv_zvk_subext, MASK_ZVKS),
- RISCV_EXT_FLAG_ENTRY ("zvksc", x_riscv_zvk_subext, MASK_ZVKSC),
- RISCV_EXT_FLAG_ENTRY ("zvksg", x_riscv_zvk_subext, MASK_ZVKSG),
- RISCV_EXT_FLAG_ENTRY ("zvkt", x_riscv_zvk_subext, MASK_ZVKT),
-
- RISCV_EXT_FLAG_ENTRY ("zvl32b", x_riscv_zvl_flags, MASK_ZVL32B),
- RISCV_EXT_FLAG_ENTRY ("zvl64b", x_riscv_zvl_flags, MASK_ZVL64B),
- RISCV_EXT_FLAG_ENTRY ("zvl128b", x_riscv_zvl_flags, MASK_ZVL128B),
- RISCV_EXT_FLAG_ENTRY ("zvl256b", x_riscv_zvl_flags, MASK_ZVL256B),
- RISCV_EXT_FLAG_ENTRY ("zvl512b", x_riscv_zvl_flags, MASK_ZVL512B),
- RISCV_EXT_FLAG_ENTRY ("zvl1024b", x_riscv_zvl_flags, MASK_ZVL1024B),
- RISCV_EXT_FLAG_ENTRY ("zvl2048b", x_riscv_zvl_flags, MASK_ZVL2048B),
- RISCV_EXT_FLAG_ENTRY ("zvl4096b", x_riscv_zvl_flags, MASK_ZVL4096B),
- RISCV_EXT_FLAG_ENTRY ("zvl8192b", x_riscv_zvl_flags, MASK_ZVL8192B),
- RISCV_EXT_FLAG_ENTRY ("zvl16384b", x_riscv_zvl_flags, MASK_ZVL16384B),
- RISCV_EXT_FLAG_ENTRY ("zvl32768b", x_riscv_zvl_flags, MASK_ZVL32768B),
- RISCV_EXT_FLAG_ENTRY ("zvl65536b", x_riscv_zvl_flags, MASK_ZVL65536B),
-
- RISCV_EXT_FLAG_ENTRY ("zfbfmin", x_riscv_zf_subext, MASK_ZFBFMIN),
- RISCV_EXT_FLAG_ENTRY ("zfhmin", x_riscv_zf_subext, MASK_ZFHMIN),
- RISCV_EXT_FLAG_ENTRY ("zfh", x_riscv_zf_subext, MASK_ZFH),
- RISCV_EXT_FLAG_ENTRY ("zvfbfmin", x_riscv_zf_subext, MASK_ZVFBFMIN),
- RISCV_EXT_FLAG_ENTRY ("zvfbfwma", x_riscv_zf_subext, MASK_ZVFBFWMA),
- RISCV_EXT_FLAG_ENTRY ("zvfhmin", x_riscv_zf_subext, MASK_ZVFHMIN),
- RISCV_EXT_FLAG_ENTRY ("zvfh", x_riscv_zf_subext, MASK_ZVFH),
-
- RISCV_EXT_FLAG_ENTRY ("zfa", x_riscv_zfa_subext, MASK_ZFA),
-
- RISCV_EXT_FLAG_ENTRY ("zmmul", x_riscv_zm_subext, MASK_ZMMUL),
-
- /* Code-size reduction extensions. */
- RISCV_EXT_FLAG_ENTRY ("zca", x_riscv_zc_subext, MASK_ZCA),
- RISCV_EXT_FLAG_ENTRY ("zcb", x_riscv_zc_subext, MASK_ZCB),
- RISCV_EXT_FLAG_ENTRY ("zce", x_riscv_zc_subext, MASK_ZCE),
- RISCV_EXT_FLAG_ENTRY ("zcf", x_riscv_zc_subext, MASK_ZCF),
- RISCV_EXT_FLAG_ENTRY ("zcd", x_riscv_zc_subext, MASK_ZCD),
- RISCV_EXT_FLAG_ENTRY ("zcmp", x_riscv_zc_subext, MASK_ZCMP),
- RISCV_EXT_FLAG_ENTRY ("zcmt", x_riscv_zc_subext, MASK_ZCMT),
-
- RISCV_EXT_FLAG_ENTRY ("svade", x_riscv_sv_subext, MASK_SVADE),
- RISCV_EXT_FLAG_ENTRY ("svadu", x_riscv_sv_subext, MASK_SVADU),
- RISCV_EXT_FLAG_ENTRY ("svinval", x_riscv_sv_subext, MASK_SVINVAL),
- RISCV_EXT_FLAG_ENTRY ("svnapot", x_riscv_sv_subext, MASK_SVNAPOT),
- RISCV_EXT_FLAG_ENTRY ("svvptc", x_riscv_sv_subext, MASK_SVVPTC),
-
- RISCV_EXT_FLAG_ENTRY ("ztso", x_riscv_ztso_subext, MASK_ZTSO),
-
- RISCV_EXT_FLAG_ENTRY ("xcvmac", x_riscv_xcv_subext, MASK_XCVMAC),
- RISCV_EXT_FLAG_ENTRY ("xcvalu", x_riscv_xcv_subext, MASK_XCVALU),
- RISCV_EXT_FLAG_ENTRY ("xcvelw", x_riscv_xcv_subext, MASK_XCVELW),
- RISCV_EXT_FLAG_ENTRY ("xcvsimd", x_riscv_xcv_subext, MASK_XCVSIMD),
- RISCV_EXT_FLAG_ENTRY ("xcvbi", x_riscv_xcv_subext, MASK_XCVBI),
-
- RISCV_EXT_FLAG_ENTRY ("xtheadba", x_riscv_xthead_subext, MASK_XTHEADBA),
- RISCV_EXT_FLAG_ENTRY ("xtheadbb", x_riscv_xthead_subext, MASK_XTHEADBB),
- RISCV_EXT_FLAG_ENTRY ("xtheadbs", x_riscv_xthead_subext, MASK_XTHEADBS),
- RISCV_EXT_FLAG_ENTRY ("xtheadcmo", x_riscv_xthead_subext, MASK_XTHEADCMO),
- RISCV_EXT_FLAG_ENTRY ("xtheadcondmov", x_riscv_xthead_subext, MASK_XTHEADCONDMOV),
- RISCV_EXT_FLAG_ENTRY ("xtheadfmemidx", x_riscv_xthead_subext, MASK_XTHEADFMEMIDX),
- RISCV_EXT_FLAG_ENTRY ("xtheadfmv", x_riscv_xthead_subext, MASK_XTHEADFMV),
- RISCV_EXT_FLAG_ENTRY ("xtheadint", x_riscv_xthead_subext, MASK_XTHEADINT),
- RISCV_EXT_FLAG_ENTRY ("xtheadmac", x_riscv_xthead_subext, MASK_XTHEADMAC),
- RISCV_EXT_FLAG_ENTRY ("xtheadmemidx", x_riscv_xthead_subext, MASK_XTHEADMEMIDX),
- RISCV_EXT_FLAG_ENTRY ("xtheadmempair", x_riscv_xthead_subext, MASK_XTHEADMEMPAIR),
- RISCV_EXT_FLAG_ENTRY ("xtheadsync", x_riscv_xthead_subext, MASK_XTHEADSYNC),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_xthead_subext, MASK_XTHEADVECTOR),
RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_32),
RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_64),
RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_FP_32),
RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_FP_64),
RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_vector_elen_flags, MASK_VECTOR_ELEN_FP_16),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvl_flags, MASK_ZVL32B),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvl_flags, MASK_ZVL64B),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvl_flags, MASK_ZVL128B),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zf_subext, MASK_ZVFHMIN),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zf_subext, MASK_ZVFH),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_target_flags, MASK_FULL_V),
- RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_target_flags, MASK_VECTOR),
-
- RISCV_EXT_FLAG_ENTRY ("xventanacondops", x_riscv_xventana_subext, MASK_XVENTANACONDOPS),
-
- RISCV_EXT_FLAG_ENTRY ("xsfvcp", x_riscv_sifive_subext, MASK_XSFVCP),
- RISCV_EXT_FLAG_ENTRY ("xsfcease", x_riscv_sifive_subext, MASK_XSFCEASE),
- RISCV_EXT_FLAG_ENTRY ("xsfvqmaccqoq", x_riscv_sifive_subext, MASK_XSFVQMACCQOQ),
- RISCV_EXT_FLAG_ENTRY ("xsfvqmaccdod", x_riscv_sifive_subext, MASK_XSFVQMACCDOD),
- RISCV_EXT_FLAG_ENTRY ("xsfvfnrclipxfqf", x_riscv_sifive_subext, MASK_XSFVFNRCLIPXFQF),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvl_subext, MASK_ZVL32B),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvl_subext, MASK_ZVL64B),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvl_subext, MASK_ZVL128B),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvf_subext, MASK_ZVFHMIN),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_zvf_subext, MASK_ZVFH),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_isa_flags, MASK_FULL_V),
+ RISCV_EXT_FLAG_ENTRY ("xtheadvector", x_riscv_isa_flags, MASK_VECTOR),
{NULL, NULL, NULL, 0}
};
+/* Add extra extension flags into FLAG_TABLE for EXT. */
+static void
+apply_extra_extension_flags (const char *ext,
+ std::vector<riscv_ext_flag_table_t> &flag_table)
+{
+ const riscv_extra_ext_flag_table_t *arch_ext_flag_tab;
+ for (arch_ext_flag_tab = &riscv_extra_ext_flag_table[0];
+ arch_ext_flag_tab->ext; ++arch_ext_flag_tab)
+ {
+ if (strcmp (arch_ext_flag_tab->ext, ext) == 0)
+ {
+ flag_table.push_back ({arch_ext_flag_tab->var_ref,
+ arch_ext_flag_tab->cl_var_ref,
+ arch_ext_flag_tab->mask});
+ }
+ }
+}
+
/* Types for recording extension to RISC-V C-API bitmask. */
struct riscv_ext_bitmask_table_t {
const char *ext;
@@ -1848,24 +1556,21 @@ riscv_set_arch_by_subset_list (riscv_subset_list *subset_list,
{
if (opts)
{
- const riscv_ext_flag_table_t *arch_ext_flag_tab;
/* Clean up target flags before we set. */
- for (arch_ext_flag_tab = &riscv_ext_flag_table[0]; arch_ext_flag_tab->ext;
- ++arch_ext_flag_tab)
- opts->*arch_ext_flag_tab->var_ref &= ~arch_ext_flag_tab->mask;
+ for (const auto &[ext_name, ext_info] : riscv_ext_infos)
+ ext_info.clean_opts (opts);
if (subset_list->xlen () == 32)
- opts->x_target_flags &= ~MASK_64BIT;
+ opts->x_riscv_isa_flags &= ~MASK_64BIT;
else if (subset_list->xlen () == 64)
- opts->x_target_flags |= MASK_64BIT;
+ opts->x_riscv_isa_flags |= MASK_64BIT;
- for (arch_ext_flag_tab = &riscv_ext_flag_table[0];
- arch_ext_flag_tab->ext;
- ++arch_ext_flag_tab)
- {
- if (subset_list->lookup (arch_ext_flag_tab->ext))
- opts->*arch_ext_flag_tab->var_ref |= arch_ext_flag_tab->mask;
- }
+ for (const auto &[ext_name, ext_info] : riscv_ext_infos)
+ if (subset_list->lookup (ext_name.c_str ()))
+ {
+ /* Set the extension flag. */
+ ext_info.set_opts (opts);
+ }
}
}
@@ -1875,37 +1580,14 @@ bool
riscv_ext_is_subset (struct cl_target_option *opts,
struct cl_target_option *subset)
{
- const riscv_ext_flag_table_t *arch_ext_flag_tab;
- for (arch_ext_flag_tab = &riscv_ext_flag_table[0];
- arch_ext_flag_tab->ext;
- ++arch_ext_flag_tab)
+ for (const auto &[ext_name, ext_info] : riscv_ext_infos)
{
- if (subset->*arch_ext_flag_tab->cl_var_ref & arch_ext_flag_tab->mask)
- {
- if (!(opts->*arch_ext_flag_tab->cl_var_ref & arch_ext_flag_tab->mask))
- return false;
- }
+ if (ext_info.check_opts (opts) && !ext_info.check_opts (subset))
+ return false;
}
return true;
}
-/* Return the mask of ISA extension in x_target_flags of gcc_options. */
-
-int
-riscv_x_target_flags_isa_mask (void)
-{
- int mask = 0;
- const riscv_ext_flag_table_t *arch_ext_flag_tab;
- for (arch_ext_flag_tab = &riscv_ext_flag_table[0];
- arch_ext_flag_tab->ext;
- ++arch_ext_flag_tab)
- {
- if (arch_ext_flag_tab->var_ref == &gcc_options::x_target_flags)
- mask |= arch_ext_flag_tab->mask;
- }
- return mask;
-}
-
/* Get the minimal feature bits in Linux hwprobe of the given ISA string.
Used for generating Function Multi-Versioning (FMV) dispatcher for RISC-V.
@@ -1960,20 +1642,18 @@ riscv_minimal_hwprobe_feature_bits (const char *isa,
search_q.pop ();
/* Iterate through the implied extension table. */
- const riscv_implied_info_t *implied_info;
- for (implied_info = &riscv_implied_info[0];
- implied_info->ext;
- ++implied_info)
+ auto &ext_info = get_riscv_ext_info (search_ext);
+ for (const auto &implied_ext : ext_info.implied_exts ())
{
/* When the search extension matches the implied extension and
the implied extension has not been visited, mark the implied
extension in the implied_exts set and push it into the
queue. */
- if (implied_info->match (subset_list, search_ext)
- && implied_exts.count (implied_info->implied_ext) == 0)
+ if (implied_ext.match (subset_list)
+ && implied_exts.count (implied_ext.implied_ext) == 0)
{
- implied_exts.insert (implied_info->implied_ext);
- search_q.push (implied_info->implied_ext);
+ implied_exts.insert (implied_ext.implied_ext);
+ search_q.push (implied_ext.implied_ext);
}
}
}
@@ -2527,16 +2207,15 @@ riscv_arch_help (int, const char **)
}
};
std::map<std::string, std::set<unsigned>, extension_comparator> all_exts;
- for (const riscv_ext_version &ext : riscv_ext_version_table)
+ for (const auto &[ext_name, ext_info] : riscv_ext_infos)
{
- if (!ext.name)
- break;
- if (ext.name[0] == 'g')
- continue;
- unsigned version_value = (ext.major_version * RISCV_MAJOR_VERSION_BASE)
- + (ext.minor_version
- * RISCV_MINOR_VERSION_BASE);
- all_exts[ext.name].insert(version_value);
+ for (auto &supported_version : ext_info.supported_versions ())
+ {
+ unsigned version_value
+ = (supported_version.major_version * RISCV_MAJOR_VERSION_BASE)
+ + (supported_version.minor_version * RISCV_MINOR_VERSION_BASE);
+ all_exts[ext_name].insert (version_value);
+ }
}
printf("All available -march extensions for RISC-V:\n");
diff --git a/gcc/config.gcc b/gcc/config.gcc
index afbf82f..e552f469 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -558,6 +558,7 @@ riscv*)
extra_headers="riscv_vector.h riscv_crypto.h riscv_bitmanip.h riscv_th_vector.h sifive_vector.h"
target_gtfiles="$target_gtfiles \$(srcdir)/config/riscv/riscv-vector-builtins.cc"
target_gtfiles="$target_gtfiles \$(srcdir)/config/riscv/riscv-vector-builtins.h"
+ extra_options="${extra_options} riscv/riscv-ext.opt"
;;
rs6000*-*-*)
extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt"
@@ -4459,7 +4460,7 @@ case "${target}" in
case "$with_abi" in
"" \
- | apcs-gnu | atpcs | aapcs | iwmmxt | aapcs-linux )
+ | apcs-gnu | atpcs | aapcs | aapcs-linux )
#OK
;;
*)
@@ -5658,6 +5659,7 @@ case "${target}" in
#TODO 'sm_[...]' list per 'nvptx-sm.def'.
sm_30 | sm_35 | sm_37 \
| sm_52 | sm_53 \
+ | sm_61 \
| sm_70 | sm_75 \
| sm_80 | sm_89 )
TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG $nvptx_multilib"
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 5c30484..6dbc9fa 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -4555,38 +4555,6 @@
[(set_attr "type" "csel")]
)
-(define_expand "cmov<mode>6"
- [(set (match_operand:GPI 0 "register_operand")
- (if_then_else:GPI
- (match_operator 1 "aarch64_comparison_operator"
- [(match_operand:GPI 2 "register_operand")
- (match_operand:GPI 3 "aarch64_plus_operand")])
- (match_operand:GPI 4 "register_operand")
- (match_operand:GPI 5 "register_operand")))]
- ""
- "
- operands[2] = aarch64_gen_compare_reg (GET_CODE (operands[1]), operands[2],
- operands[3]);
- operands[3] = const0_rtx;
- "
-)
-
-(define_expand "cmov<mode>6"
- [(set (match_operand:GPF 0 "register_operand")
- (if_then_else:GPF
- (match_operator 1 "aarch64_comparison_operator"
- [(match_operand:GPF 2 "register_operand")
- (match_operand:GPF 3 "aarch64_fp_compare_operand")])
- (match_operand:GPF 4 "register_operand")
- (match_operand:GPF 5 "register_operand")))]
- ""
- "
- operands[2] = aarch64_gen_compare_reg (GET_CODE (operands[1]), operands[2],
- operands[3]);
- operands[3] = const0_rtx;
- "
-)
-
(define_insn "*cmov<mode>_insn"
[(set (match_operand:ALLI 0 "register_operand")
(if_then_else:ALLI
diff --git a/gcc/config/arm/aout.h b/gcc/config/arm/aout.h
index cdce361..a9b0dfa 100644
--- a/gcc/config/arm/aout.h
+++ b/gcc/config/arm/aout.h
@@ -69,11 +69,6 @@
"d20", "?20", "d21", "?21", "d22", "?22", "d23", "?23", \
"d24", "?24", "d25", "?25", "d26", "?26", "d27", "?27", \
"d28", "?28", "d29", "?29", "d30", "?30", "d31", "?31", \
- "wr0", "wr1", "wr2", "wr3", \
- "wr4", "wr5", "wr6", "wr7", \
- "wr8", "wr9", "wr10", "wr11", \
- "wr12", "wr13", "wr14", "wr15", \
- "wcgr0", "wcgr1", "wcgr2", "wcgr3", \
"cc", "vfpcc", "sfp", "afp", "apsrq", "apsrge", "p0", \
"ra_auth_code" \
}
diff --git a/gcc/config/arm/arm-builtins.cc b/gcc/config/arm/arm-builtins.cc
index c56ab5d..0ddc666 100644
--- a/gcc/config/arm/arm-builtins.cc
+++ b/gcc/config/arm/arm-builtins.cc
@@ -816,252 +816,6 @@ static arm_builtin_cde_datum cde_builtin_data[] =
enum arm_builtins
{
- ARM_BUILTIN_GETWCGR0,
- ARM_BUILTIN_GETWCGR1,
- ARM_BUILTIN_GETWCGR2,
- ARM_BUILTIN_GETWCGR3,
-
- ARM_BUILTIN_SETWCGR0,
- ARM_BUILTIN_SETWCGR1,
- ARM_BUILTIN_SETWCGR2,
- ARM_BUILTIN_SETWCGR3,
-
- ARM_BUILTIN_WZERO,
-
- ARM_BUILTIN_WAVG2BR,
- ARM_BUILTIN_WAVG2HR,
- ARM_BUILTIN_WAVG2B,
- ARM_BUILTIN_WAVG2H,
-
- ARM_BUILTIN_WACCB,
- ARM_BUILTIN_WACCH,
- ARM_BUILTIN_WACCW,
-
- ARM_BUILTIN_WMACS,
- ARM_BUILTIN_WMACSZ,
- ARM_BUILTIN_WMACU,
- ARM_BUILTIN_WMACUZ,
-
- ARM_BUILTIN_WSADB,
- ARM_BUILTIN_WSADBZ,
- ARM_BUILTIN_WSADH,
- ARM_BUILTIN_WSADHZ,
-
- ARM_BUILTIN_WALIGNI,
- ARM_BUILTIN_WALIGNR0,
- ARM_BUILTIN_WALIGNR1,
- ARM_BUILTIN_WALIGNR2,
- ARM_BUILTIN_WALIGNR3,
-
- ARM_BUILTIN_TMIA,
- ARM_BUILTIN_TMIAPH,
- ARM_BUILTIN_TMIABB,
- ARM_BUILTIN_TMIABT,
- ARM_BUILTIN_TMIATB,
- ARM_BUILTIN_TMIATT,
-
- ARM_BUILTIN_TMOVMSKB,
- ARM_BUILTIN_TMOVMSKH,
- ARM_BUILTIN_TMOVMSKW,
-
- ARM_BUILTIN_TBCSTB,
- ARM_BUILTIN_TBCSTH,
- ARM_BUILTIN_TBCSTW,
-
- ARM_BUILTIN_WMADDS,
- ARM_BUILTIN_WMADDU,
-
- ARM_BUILTIN_WPACKHSS,
- ARM_BUILTIN_WPACKWSS,
- ARM_BUILTIN_WPACKDSS,
- ARM_BUILTIN_WPACKHUS,
- ARM_BUILTIN_WPACKWUS,
- ARM_BUILTIN_WPACKDUS,
-
- ARM_BUILTIN_WADDB,
- ARM_BUILTIN_WADDH,
- ARM_BUILTIN_WADDW,
- ARM_BUILTIN_WADDSSB,
- ARM_BUILTIN_WADDSSH,
- ARM_BUILTIN_WADDSSW,
- ARM_BUILTIN_WADDUSB,
- ARM_BUILTIN_WADDUSH,
- ARM_BUILTIN_WADDUSW,
- ARM_BUILTIN_WSUBB,
- ARM_BUILTIN_WSUBH,
- ARM_BUILTIN_WSUBW,
- ARM_BUILTIN_WSUBSSB,
- ARM_BUILTIN_WSUBSSH,
- ARM_BUILTIN_WSUBSSW,
- ARM_BUILTIN_WSUBUSB,
- ARM_BUILTIN_WSUBUSH,
- ARM_BUILTIN_WSUBUSW,
-
- ARM_BUILTIN_WAND,
- ARM_BUILTIN_WANDN,
- ARM_BUILTIN_WOR,
- ARM_BUILTIN_WXOR,
-
- ARM_BUILTIN_WCMPEQB,
- ARM_BUILTIN_WCMPEQH,
- ARM_BUILTIN_WCMPEQW,
- ARM_BUILTIN_WCMPGTUB,
- ARM_BUILTIN_WCMPGTUH,
- ARM_BUILTIN_WCMPGTUW,
- ARM_BUILTIN_WCMPGTSB,
- ARM_BUILTIN_WCMPGTSH,
- ARM_BUILTIN_WCMPGTSW,
-
- ARM_BUILTIN_TEXTRMSB,
- ARM_BUILTIN_TEXTRMSH,
- ARM_BUILTIN_TEXTRMSW,
- ARM_BUILTIN_TEXTRMUB,
- ARM_BUILTIN_TEXTRMUH,
- ARM_BUILTIN_TEXTRMUW,
- ARM_BUILTIN_TINSRB,
- ARM_BUILTIN_TINSRH,
- ARM_BUILTIN_TINSRW,
-
- ARM_BUILTIN_WMAXSW,
- ARM_BUILTIN_WMAXSH,
- ARM_BUILTIN_WMAXSB,
- ARM_BUILTIN_WMAXUW,
- ARM_BUILTIN_WMAXUH,
- ARM_BUILTIN_WMAXUB,
- ARM_BUILTIN_WMINSW,
- ARM_BUILTIN_WMINSH,
- ARM_BUILTIN_WMINSB,
- ARM_BUILTIN_WMINUW,
- ARM_BUILTIN_WMINUH,
- ARM_BUILTIN_WMINUB,
-
- ARM_BUILTIN_WMULUM,
- ARM_BUILTIN_WMULSM,
- ARM_BUILTIN_WMULUL,
-
- ARM_BUILTIN_PSADBH,
- ARM_BUILTIN_WSHUFH,
-
- ARM_BUILTIN_WSLLH,
- ARM_BUILTIN_WSLLW,
- ARM_BUILTIN_WSLLD,
- ARM_BUILTIN_WSRAH,
- ARM_BUILTIN_WSRAW,
- ARM_BUILTIN_WSRAD,
- ARM_BUILTIN_WSRLH,
- ARM_BUILTIN_WSRLW,
- ARM_BUILTIN_WSRLD,
- ARM_BUILTIN_WRORH,
- ARM_BUILTIN_WRORW,
- ARM_BUILTIN_WRORD,
- ARM_BUILTIN_WSLLHI,
- ARM_BUILTIN_WSLLWI,
- ARM_BUILTIN_WSLLDI,
- ARM_BUILTIN_WSRAHI,
- ARM_BUILTIN_WSRAWI,
- ARM_BUILTIN_WSRADI,
- ARM_BUILTIN_WSRLHI,
- ARM_BUILTIN_WSRLWI,
- ARM_BUILTIN_WSRLDI,
- ARM_BUILTIN_WRORHI,
- ARM_BUILTIN_WRORWI,
- ARM_BUILTIN_WRORDI,
-
- ARM_BUILTIN_WUNPCKIHB,
- ARM_BUILTIN_WUNPCKIHH,
- ARM_BUILTIN_WUNPCKIHW,
- ARM_BUILTIN_WUNPCKILB,
- ARM_BUILTIN_WUNPCKILH,
- ARM_BUILTIN_WUNPCKILW,
-
- ARM_BUILTIN_WUNPCKEHSB,
- ARM_BUILTIN_WUNPCKEHSH,
- ARM_BUILTIN_WUNPCKEHSW,
- ARM_BUILTIN_WUNPCKEHUB,
- ARM_BUILTIN_WUNPCKEHUH,
- ARM_BUILTIN_WUNPCKEHUW,
- ARM_BUILTIN_WUNPCKELSB,
- ARM_BUILTIN_WUNPCKELSH,
- ARM_BUILTIN_WUNPCKELSW,
- ARM_BUILTIN_WUNPCKELUB,
- ARM_BUILTIN_WUNPCKELUH,
- ARM_BUILTIN_WUNPCKELUW,
-
- ARM_BUILTIN_WABSB,
- ARM_BUILTIN_WABSH,
- ARM_BUILTIN_WABSW,
-
- ARM_BUILTIN_WADDSUBHX,
- ARM_BUILTIN_WSUBADDHX,
-
- ARM_BUILTIN_WABSDIFFB,
- ARM_BUILTIN_WABSDIFFH,
- ARM_BUILTIN_WABSDIFFW,
-
- ARM_BUILTIN_WADDCH,
- ARM_BUILTIN_WADDCW,
-
- ARM_BUILTIN_WAVG4,
- ARM_BUILTIN_WAVG4R,
-
- ARM_BUILTIN_WMADDSX,
- ARM_BUILTIN_WMADDUX,
-
- ARM_BUILTIN_WMADDSN,
- ARM_BUILTIN_WMADDUN,
-
- ARM_BUILTIN_WMULWSM,
- ARM_BUILTIN_WMULWUM,
-
- ARM_BUILTIN_WMULWSMR,
- ARM_BUILTIN_WMULWUMR,
-
- ARM_BUILTIN_WMULWL,
-
- ARM_BUILTIN_WMULSMR,
- ARM_BUILTIN_WMULUMR,
-
- ARM_BUILTIN_WQMULM,
- ARM_BUILTIN_WQMULMR,
-
- ARM_BUILTIN_WQMULWM,
- ARM_BUILTIN_WQMULWMR,
-
- ARM_BUILTIN_WADDBHUSM,
- ARM_BUILTIN_WADDBHUSL,
-
- ARM_BUILTIN_WQMIABB,
- ARM_BUILTIN_WQMIABT,
- ARM_BUILTIN_WQMIATB,
- ARM_BUILTIN_WQMIATT,
-
- ARM_BUILTIN_WQMIABBN,
- ARM_BUILTIN_WQMIABTN,
- ARM_BUILTIN_WQMIATBN,
- ARM_BUILTIN_WQMIATTN,
-
- ARM_BUILTIN_WMIABB,
- ARM_BUILTIN_WMIABT,
- ARM_BUILTIN_WMIATB,
- ARM_BUILTIN_WMIATT,
-
- ARM_BUILTIN_WMIABBN,
- ARM_BUILTIN_WMIABTN,
- ARM_BUILTIN_WMIATBN,
- ARM_BUILTIN_WMIATTN,
-
- ARM_BUILTIN_WMIAWBB,
- ARM_BUILTIN_WMIAWBT,
- ARM_BUILTIN_WMIAWTB,
- ARM_BUILTIN_WMIAWTT,
-
- ARM_BUILTIN_WMIAWBBN,
- ARM_BUILTIN_WMIAWBTN,
- ARM_BUILTIN_WMIAWTBN,
- ARM_BUILTIN_WMIAWTTN,
-
- ARM_BUILTIN_WMERGE,
-
ARM_BUILTIN_GET_FPSCR,
ARM_BUILTIN_SET_FPSCR,
ARM_BUILTIN_GET_FPSCR_NZCVQC,
@@ -1878,115 +1632,6 @@ struct builtin_description
static const struct builtin_description bdesc_2arg[] =
{
-#define IWMMXT_BUILTIN(code, string, builtin) \
- { isa_bit_iwmmxt, CODE_FOR_##code, \
- "__builtin_arm_" string, \
- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
-
-#define IWMMXT2_BUILTIN(code, string, builtin) \
- { isa_bit_iwmmxt2, CODE_FOR_##code, \
- "__builtin_arm_" string, \
- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
-
- IWMMXT_BUILTIN (addv8qi3, "waddb", WADDB)
- IWMMXT_BUILTIN (addv4hi3, "waddh", WADDH)
- IWMMXT_BUILTIN (addv2si3, "waddw", WADDW)
- IWMMXT_BUILTIN (subv8qi3, "wsubb", WSUBB)
- IWMMXT_BUILTIN (subv4hi3, "wsubh", WSUBH)
- IWMMXT_BUILTIN (subv2si3, "wsubw", WSUBW)
- IWMMXT_BUILTIN (ssaddv8qi3, "waddbss", WADDSSB)
- IWMMXT_BUILTIN (ssaddv4hi3, "waddhss", WADDSSH)
- IWMMXT_BUILTIN (ssaddv2si3, "waddwss", WADDSSW)
- IWMMXT_BUILTIN (sssubv8qi3, "wsubbss", WSUBSSB)
- IWMMXT_BUILTIN (sssubv4hi3, "wsubhss", WSUBSSH)
- IWMMXT_BUILTIN (sssubv2si3, "wsubwss", WSUBSSW)
- IWMMXT_BUILTIN (usaddv8qi3, "waddbus", WADDUSB)
- IWMMXT_BUILTIN (usaddv4hi3, "waddhus", WADDUSH)
- IWMMXT_BUILTIN (usaddv2si3, "waddwus", WADDUSW)
- IWMMXT_BUILTIN (ussubv8qi3, "wsubbus", WSUBUSB)
- IWMMXT_BUILTIN (ussubv4hi3, "wsubhus", WSUBUSH)
- IWMMXT_BUILTIN (ussubv2si3, "wsubwus", WSUBUSW)
- IWMMXT_BUILTIN (mulv4hi3, "wmulul", WMULUL)
- IWMMXT_BUILTIN (smulv4hi3_highpart, "wmulsm", WMULSM)
- IWMMXT_BUILTIN (umulv4hi3_highpart, "wmulum", WMULUM)
- IWMMXT_BUILTIN (eqv8qi3, "wcmpeqb", WCMPEQB)
- IWMMXT_BUILTIN (eqv4hi3, "wcmpeqh", WCMPEQH)
- IWMMXT_BUILTIN (eqv2si3, "wcmpeqw", WCMPEQW)
- IWMMXT_BUILTIN (gtuv8qi3, "wcmpgtub", WCMPGTUB)
- IWMMXT_BUILTIN (gtuv4hi3, "wcmpgtuh", WCMPGTUH)
- IWMMXT_BUILTIN (gtuv2si3, "wcmpgtuw", WCMPGTUW)
- IWMMXT_BUILTIN (gtv8qi3, "wcmpgtsb", WCMPGTSB)
- IWMMXT_BUILTIN (gtv4hi3, "wcmpgtsh", WCMPGTSH)
- IWMMXT_BUILTIN (gtv2si3, "wcmpgtsw", WCMPGTSW)
- IWMMXT_BUILTIN (umaxv8qi3, "wmaxub", WMAXUB)
- IWMMXT_BUILTIN (smaxv8qi3, "wmaxsb", WMAXSB)
- IWMMXT_BUILTIN (umaxv4hi3, "wmaxuh", WMAXUH)
- IWMMXT_BUILTIN (smaxv4hi3, "wmaxsh", WMAXSH)
- IWMMXT_BUILTIN (umaxv2si3, "wmaxuw", WMAXUW)
- IWMMXT_BUILTIN (smaxv2si3, "wmaxsw", WMAXSW)
- IWMMXT_BUILTIN (uminv8qi3, "wminub", WMINUB)
- IWMMXT_BUILTIN (sminv8qi3, "wminsb", WMINSB)
- IWMMXT_BUILTIN (uminv4hi3, "wminuh", WMINUH)
- IWMMXT_BUILTIN (sminv4hi3, "wminsh", WMINSH)
- IWMMXT_BUILTIN (uminv2si3, "wminuw", WMINUW)
- IWMMXT_BUILTIN (sminv2si3, "wminsw", WMINSW)
- IWMMXT_BUILTIN (iwmmxt_anddi3, "wand", WAND)
- IWMMXT_BUILTIN (iwmmxt_nanddi3, "wandn", WANDN)
- IWMMXT_BUILTIN (iwmmxt_iordi3, "wor", WOR)
- IWMMXT_BUILTIN (iwmmxt_xordi3, "wxor", WXOR)
- IWMMXT_BUILTIN (iwmmxt_uavgv8qi3, "wavg2b", WAVG2B)
- IWMMXT_BUILTIN (iwmmxt_uavgv4hi3, "wavg2h", WAVG2H)
- IWMMXT_BUILTIN (iwmmxt_uavgrndv8qi3, "wavg2br", WAVG2BR)
- IWMMXT_BUILTIN (iwmmxt_uavgrndv4hi3, "wavg2hr", WAVG2HR)
- IWMMXT_BUILTIN (iwmmxt_wunpckilb, "wunpckilb", WUNPCKILB)
- IWMMXT_BUILTIN (iwmmxt_wunpckilh, "wunpckilh", WUNPCKILH)
- IWMMXT_BUILTIN (iwmmxt_wunpckilw, "wunpckilw", WUNPCKILW)
- IWMMXT_BUILTIN (iwmmxt_wunpckihb, "wunpckihb", WUNPCKIHB)
- IWMMXT_BUILTIN (iwmmxt_wunpckihh, "wunpckihh", WUNPCKIHH)
- IWMMXT_BUILTIN (iwmmxt_wunpckihw, "wunpckihw", WUNPCKIHW)
- IWMMXT2_BUILTIN (iwmmxt_waddsubhx, "waddsubhx", WADDSUBHX)
- IWMMXT2_BUILTIN (iwmmxt_wsubaddhx, "wsubaddhx", WSUBADDHX)
- IWMMXT2_BUILTIN (iwmmxt_wabsdiffb, "wabsdiffb", WABSDIFFB)
- IWMMXT2_BUILTIN (iwmmxt_wabsdiffh, "wabsdiffh", WABSDIFFH)
- IWMMXT2_BUILTIN (iwmmxt_wabsdiffw, "wabsdiffw", WABSDIFFW)
- IWMMXT2_BUILTIN (iwmmxt_avg4, "wavg4", WAVG4)
- IWMMXT2_BUILTIN (iwmmxt_avg4r, "wavg4r", WAVG4R)
- IWMMXT2_BUILTIN (iwmmxt_wmulwsm, "wmulwsm", WMULWSM)
- IWMMXT2_BUILTIN (iwmmxt_wmulwum, "wmulwum", WMULWUM)
- IWMMXT2_BUILTIN (iwmmxt_wmulwsmr, "wmulwsmr", WMULWSMR)
- IWMMXT2_BUILTIN (iwmmxt_wmulwumr, "wmulwumr", WMULWUMR)
- IWMMXT2_BUILTIN (iwmmxt_wmulwl, "wmulwl", WMULWL)
- IWMMXT2_BUILTIN (iwmmxt_wmulsmr, "wmulsmr", WMULSMR)
- IWMMXT2_BUILTIN (iwmmxt_wmulumr, "wmulumr", WMULUMR)
- IWMMXT2_BUILTIN (iwmmxt_wqmulm, "wqmulm", WQMULM)
- IWMMXT2_BUILTIN (iwmmxt_wqmulmr, "wqmulmr", WQMULMR)
- IWMMXT2_BUILTIN (iwmmxt_wqmulwm, "wqmulwm", WQMULWM)
- IWMMXT2_BUILTIN (iwmmxt_wqmulwmr, "wqmulwmr", WQMULWMR)
- IWMMXT_BUILTIN (iwmmxt_walignr0, "walignr0", WALIGNR0)
- IWMMXT_BUILTIN (iwmmxt_walignr1, "walignr1", WALIGNR1)
- IWMMXT_BUILTIN (iwmmxt_walignr2, "walignr2", WALIGNR2)
- IWMMXT_BUILTIN (iwmmxt_walignr3, "walignr3", WALIGNR3)
-
-#define IWMMXT_BUILTIN2(code, builtin) \
- { isa_bit_iwmmxt, CODE_FOR_##code, NULL, \
- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
-
-#define IWMMXT2_BUILTIN2(code, builtin) \
- { isa_bit_iwmmxt2, CODE_FOR_##code, NULL, \
- ARM_BUILTIN_##builtin, UNKNOWN, 0 },
-
- IWMMXT2_BUILTIN2 (iwmmxt_waddbhusm, WADDBHUSM)
- IWMMXT2_BUILTIN2 (iwmmxt_waddbhusl, WADDBHUSL)
- IWMMXT_BUILTIN2 (iwmmxt_wpackhss, WPACKHSS)
- IWMMXT_BUILTIN2 (iwmmxt_wpackwss, WPACKWSS)
- IWMMXT_BUILTIN2 (iwmmxt_wpackdss, WPACKDSS)
- IWMMXT_BUILTIN2 (iwmmxt_wpackhus, WPACKHUS)
- IWMMXT_BUILTIN2 (iwmmxt_wpackwus, WPACKWUS)
- IWMMXT_BUILTIN2 (iwmmxt_wpackdus, WPACKDUS)
- IWMMXT_BUILTIN2 (iwmmxt_wmacuz, WMACUZ)
- IWMMXT_BUILTIN2 (iwmmxt_wmacsz, WMACSZ)
-
-
#define FP_BUILTIN(L, U) \
{isa_nobit, CODE_FOR_##L, "__builtin_arm_"#L, ARM_BUILTIN_##U, \
UNKNOWN, 0},
@@ -2013,31 +1658,6 @@ static const struct builtin_description bdesc_2arg[] =
static const struct builtin_description bdesc_1arg[] =
{
- IWMMXT_BUILTIN (iwmmxt_tmovmskb, "tmovmskb", TMOVMSKB)
- IWMMXT_BUILTIN (iwmmxt_tmovmskh, "tmovmskh", TMOVMSKH)
- IWMMXT_BUILTIN (iwmmxt_tmovmskw, "tmovmskw", TMOVMSKW)
- IWMMXT_BUILTIN (iwmmxt_waccb, "waccb", WACCB)
- IWMMXT_BUILTIN (iwmmxt_wacch, "wacch", WACCH)
- IWMMXT_BUILTIN (iwmmxt_waccw, "waccw", WACCW)
- IWMMXT_BUILTIN (iwmmxt_wunpckehub, "wunpckehub", WUNPCKEHUB)
- IWMMXT_BUILTIN (iwmmxt_wunpckehuh, "wunpckehuh", WUNPCKEHUH)
- IWMMXT_BUILTIN (iwmmxt_wunpckehuw, "wunpckehuw", WUNPCKEHUW)
- IWMMXT_BUILTIN (iwmmxt_wunpckehsb, "wunpckehsb", WUNPCKEHSB)
- IWMMXT_BUILTIN (iwmmxt_wunpckehsh, "wunpckehsh", WUNPCKEHSH)
- IWMMXT_BUILTIN (iwmmxt_wunpckehsw, "wunpckehsw", WUNPCKEHSW)
- IWMMXT_BUILTIN (iwmmxt_wunpckelub, "wunpckelub", WUNPCKELUB)
- IWMMXT_BUILTIN (iwmmxt_wunpckeluh, "wunpckeluh", WUNPCKELUH)
- IWMMXT_BUILTIN (iwmmxt_wunpckeluw, "wunpckeluw", WUNPCKELUW)
- IWMMXT_BUILTIN (iwmmxt_wunpckelsb, "wunpckelsb", WUNPCKELSB)
- IWMMXT_BUILTIN (iwmmxt_wunpckelsh, "wunpckelsh", WUNPCKELSH)
- IWMMXT_BUILTIN (iwmmxt_wunpckelsw, "wunpckelsw", WUNPCKELSW)
- IWMMXT2_BUILTIN (iwmmxt_wabsv8qi3, "wabsb", WABSB)
- IWMMXT2_BUILTIN (iwmmxt_wabsv4hi3, "wabsh", WABSH)
- IWMMXT2_BUILTIN (iwmmxt_wabsv2si3, "wabsw", WABSW)
- IWMMXT_BUILTIN (tbcstv8qi, "tbcstb", TBCSTB)
- IWMMXT_BUILTIN (tbcstv4hi, "tbcsth", TBCSTH)
- IWMMXT_BUILTIN (tbcstv2si, "tbcstw", TBCSTW)
-
#define CRYPTO1(L, U, R, A) CRYPTO_BUILTIN (L, U)
#define CRYPTO2(L, U, R, A1, A2)
#define CRYPTO3(L, U, R, A1, A2, A3)
@@ -2059,387 +1679,6 @@ static const struct builtin_description bdesc_3arg[] =
};
#undef CRYPTO_BUILTIN
-/* Set up all the iWMMXt builtins. This is not called if
- TARGET_IWMMXT is zero. */
-
-static void
-arm_init_iwmmxt_builtins (void)
-{
- const struct builtin_description * d;
- size_t i;
-
- tree V2SI_type_node = build_vector_type_for_mode (intSI_type_node, V2SImode);
- tree V4HI_type_node = build_vector_type_for_mode (intHI_type_node, V4HImode);
- tree V8QI_type_node = build_vector_type_for_mode (intQI_type_node, V8QImode);
-
- tree v8qi_ftype_v8qi_v8qi_int
- = build_function_type_list (V8QI_type_node,
- V8QI_type_node, V8QI_type_node,
- integer_type_node, NULL_TREE);
- tree v4hi_ftype_v4hi_int
- = build_function_type_list (V4HI_type_node,
- V4HI_type_node, integer_type_node, NULL_TREE);
- tree v2si_ftype_v2si_int
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, integer_type_node, NULL_TREE);
- tree v2si_ftype_di_di
- = build_function_type_list (V2SI_type_node,
- long_long_integer_type_node,
- long_long_integer_type_node,
- NULL_TREE);
- tree di_ftype_di_int
- = build_function_type_list (long_long_integer_type_node,
- long_long_integer_type_node,
- integer_type_node, NULL_TREE);
- tree di_ftype_di_int_int
- = build_function_type_list (long_long_integer_type_node,
- long_long_integer_type_node,
- integer_type_node,
- integer_type_node, NULL_TREE);
- tree int_ftype_v8qi
- = build_function_type_list (integer_type_node,
- V8QI_type_node, NULL_TREE);
- tree int_ftype_v4hi
- = build_function_type_list (integer_type_node,
- V4HI_type_node, NULL_TREE);
- tree int_ftype_v2si
- = build_function_type_list (integer_type_node,
- V2SI_type_node, NULL_TREE);
- tree int_ftype_v8qi_int
- = build_function_type_list (integer_type_node,
- V8QI_type_node, integer_type_node, NULL_TREE);
- tree int_ftype_v4hi_int
- = build_function_type_list (integer_type_node,
- V4HI_type_node, integer_type_node, NULL_TREE);
- tree int_ftype_v2si_int
- = build_function_type_list (integer_type_node,
- V2SI_type_node, integer_type_node, NULL_TREE);
- tree v8qi_ftype_v8qi_int_int
- = build_function_type_list (V8QI_type_node,
- V8QI_type_node, integer_type_node,
- integer_type_node, NULL_TREE);
- tree v4hi_ftype_v4hi_int_int
- = build_function_type_list (V4HI_type_node,
- V4HI_type_node, integer_type_node,
- integer_type_node, NULL_TREE);
- tree v2si_ftype_v2si_int_int
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, integer_type_node,
- integer_type_node, NULL_TREE);
- /* Miscellaneous. */
- tree v8qi_ftype_v4hi_v4hi
- = build_function_type_list (V8QI_type_node,
- V4HI_type_node, V4HI_type_node, NULL_TREE);
- tree v4hi_ftype_v2si_v2si
- = build_function_type_list (V4HI_type_node,
- V2SI_type_node, V2SI_type_node, NULL_TREE);
- tree v8qi_ftype_v4hi_v8qi
- = build_function_type_list (V8QI_type_node,
- V4HI_type_node, V8QI_type_node, NULL_TREE);
- tree v2si_ftype_v4hi_v4hi
- = build_function_type_list (V2SI_type_node,
- V4HI_type_node, V4HI_type_node, NULL_TREE);
- tree v2si_ftype_v8qi_v8qi
- = build_function_type_list (V2SI_type_node,
- V8QI_type_node, V8QI_type_node, NULL_TREE);
- tree v4hi_ftype_v4hi_di
- = build_function_type_list (V4HI_type_node,
- V4HI_type_node, long_long_integer_type_node,
- NULL_TREE);
- tree v2si_ftype_v2si_di
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, long_long_integer_type_node,
- NULL_TREE);
- tree di_ftype_void
- = build_function_type_list (long_long_unsigned_type_node, NULL_TREE);
- tree int_ftype_void
- = build_function_type_list (integer_type_node, NULL_TREE);
- tree di_ftype_v8qi
- = build_function_type_list (long_long_integer_type_node,
- V8QI_type_node, NULL_TREE);
- tree di_ftype_v4hi
- = build_function_type_list (long_long_integer_type_node,
- V4HI_type_node, NULL_TREE);
- tree di_ftype_v2si
- = build_function_type_list (long_long_integer_type_node,
- V2SI_type_node, NULL_TREE);
- tree v2si_ftype_v4hi
- = build_function_type_list (V2SI_type_node,
- V4HI_type_node, NULL_TREE);
- tree v4hi_ftype_v8qi
- = build_function_type_list (V4HI_type_node,
- V8QI_type_node, NULL_TREE);
- tree v8qi_ftype_v8qi
- = build_function_type_list (V8QI_type_node,
- V8QI_type_node, NULL_TREE);
- tree v4hi_ftype_v4hi
- = build_function_type_list (V4HI_type_node,
- V4HI_type_node, NULL_TREE);
- tree v2si_ftype_v2si
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, NULL_TREE);
-
- tree di_ftype_di_v4hi_v4hi
- = build_function_type_list (long_long_unsigned_type_node,
- long_long_unsigned_type_node,
- V4HI_type_node, V4HI_type_node,
- NULL_TREE);
-
- tree di_ftype_v4hi_v4hi
- = build_function_type_list (long_long_unsigned_type_node,
- V4HI_type_node,V4HI_type_node,
- NULL_TREE);
-
- tree v2si_ftype_v2si_v4hi_v4hi
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, V4HI_type_node,
- V4HI_type_node, NULL_TREE);
-
- tree v2si_ftype_v2si_v8qi_v8qi
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, V8QI_type_node,
- V8QI_type_node, NULL_TREE);
-
- tree di_ftype_di_v2si_v2si
- = build_function_type_list (long_long_unsigned_type_node,
- long_long_unsigned_type_node,
- V2SI_type_node, V2SI_type_node,
- NULL_TREE);
-
- tree di_ftype_di_di_int
- = build_function_type_list (long_long_unsigned_type_node,
- long_long_unsigned_type_node,
- long_long_unsigned_type_node,
- integer_type_node, NULL_TREE);
-
- tree void_ftype_int
- = build_function_type_list (void_type_node,
- integer_type_node, NULL_TREE);
-
- tree v8qi_ftype_char
- = build_function_type_list (V8QI_type_node,
- signed_char_type_node, NULL_TREE);
-
- tree v4hi_ftype_short
- = build_function_type_list (V4HI_type_node,
- short_integer_type_node, NULL_TREE);
-
- tree v2si_ftype_int
- = build_function_type_list (V2SI_type_node,
- integer_type_node, NULL_TREE);
-
- /* Normal vector binops. */
- tree v8qi_ftype_v8qi_v8qi
- = build_function_type_list (V8QI_type_node,
- V8QI_type_node, V8QI_type_node, NULL_TREE);
- tree v4hi_ftype_v4hi_v4hi
- = build_function_type_list (V4HI_type_node,
- V4HI_type_node,V4HI_type_node, NULL_TREE);
- tree v2si_ftype_v2si_v2si
- = build_function_type_list (V2SI_type_node,
- V2SI_type_node, V2SI_type_node, NULL_TREE);
- tree di_ftype_di_di
- = build_function_type_list (long_long_unsigned_type_node,
- long_long_unsigned_type_node,
- long_long_unsigned_type_node,
- NULL_TREE);
-
- /* Add all builtins that are more or less simple operations on two
- operands. */
- for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
- {
- /* Use one of the operands; the target can have a different mode for
- mask-generating compares. */
- machine_mode mode;
- tree type;
-
- if (d->name == 0
- || !(d->feature == isa_bit_iwmmxt
- || d->feature == isa_bit_iwmmxt2))
- continue;
-
- mode = insn_data[d->icode].operand[1].mode;
-
- switch (mode)
- {
- case E_V8QImode:
- type = v8qi_ftype_v8qi_v8qi;
- break;
- case E_V4HImode:
- type = v4hi_ftype_v4hi_v4hi;
- break;
- case E_V2SImode:
- type = v2si_ftype_v2si_v2si;
- break;
- case E_DImode:
- type = di_ftype_di_di;
- break;
-
- default:
- gcc_unreachable ();
- }
-
- def_mbuiltin (d->feature, d->name, type, d->code);
- }
-
- /* Add the remaining MMX insns with somewhat more complicated types. */
-#define iwmmx_mbuiltin(NAME, TYPE, CODE) \
- def_mbuiltin (isa_bit_iwmmxt, "__builtin_arm_" NAME, \
- (TYPE), ARM_BUILTIN_ ## CODE)
-
-#define iwmmx2_mbuiltin(NAME, TYPE, CODE) \
- def_mbuiltin (isa_bit_iwmmxt2, "__builtin_arm_" NAME, \
- (TYPE), ARM_BUILTIN_ ## CODE)
-
- iwmmx_mbuiltin ("wzero", di_ftype_void, WZERO);
- iwmmx_mbuiltin ("setwcgr0", void_ftype_int, SETWCGR0);
- iwmmx_mbuiltin ("setwcgr1", void_ftype_int, SETWCGR1);
- iwmmx_mbuiltin ("setwcgr2", void_ftype_int, SETWCGR2);
- iwmmx_mbuiltin ("setwcgr3", void_ftype_int, SETWCGR3);
- iwmmx_mbuiltin ("getwcgr0", int_ftype_void, GETWCGR0);
- iwmmx_mbuiltin ("getwcgr1", int_ftype_void, GETWCGR1);
- iwmmx_mbuiltin ("getwcgr2", int_ftype_void, GETWCGR2);
- iwmmx_mbuiltin ("getwcgr3", int_ftype_void, GETWCGR3);
-
- iwmmx_mbuiltin ("wsllh", v4hi_ftype_v4hi_di, WSLLH);
- iwmmx_mbuiltin ("wsllw", v2si_ftype_v2si_di, WSLLW);
- iwmmx_mbuiltin ("wslld", di_ftype_di_di, WSLLD);
- iwmmx_mbuiltin ("wsllhi", v4hi_ftype_v4hi_int, WSLLHI);
- iwmmx_mbuiltin ("wsllwi", v2si_ftype_v2si_int, WSLLWI);
- iwmmx_mbuiltin ("wslldi", di_ftype_di_int, WSLLDI);
-
- iwmmx_mbuiltin ("wsrlh", v4hi_ftype_v4hi_di, WSRLH);
- iwmmx_mbuiltin ("wsrlw", v2si_ftype_v2si_di, WSRLW);
- iwmmx_mbuiltin ("wsrld", di_ftype_di_di, WSRLD);
- iwmmx_mbuiltin ("wsrlhi", v4hi_ftype_v4hi_int, WSRLHI);
- iwmmx_mbuiltin ("wsrlwi", v2si_ftype_v2si_int, WSRLWI);
- iwmmx_mbuiltin ("wsrldi", di_ftype_di_int, WSRLDI);
-
- iwmmx_mbuiltin ("wsrah", v4hi_ftype_v4hi_di, WSRAH);
- iwmmx_mbuiltin ("wsraw", v2si_ftype_v2si_di, WSRAW);
- iwmmx_mbuiltin ("wsrad", di_ftype_di_di, WSRAD);
- iwmmx_mbuiltin ("wsrahi", v4hi_ftype_v4hi_int, WSRAHI);
- iwmmx_mbuiltin ("wsrawi", v2si_ftype_v2si_int, WSRAWI);
- iwmmx_mbuiltin ("wsradi", di_ftype_di_int, WSRADI);
-
- iwmmx_mbuiltin ("wrorh", v4hi_ftype_v4hi_di, WRORH);
- iwmmx_mbuiltin ("wrorw", v2si_ftype_v2si_di, WRORW);
- iwmmx_mbuiltin ("wrord", di_ftype_di_di, WRORD);
- iwmmx_mbuiltin ("wrorhi", v4hi_ftype_v4hi_int, WRORHI);
- iwmmx_mbuiltin ("wrorwi", v2si_ftype_v2si_int, WRORWI);
- iwmmx_mbuiltin ("wrordi", di_ftype_di_int, WRORDI);
-
- iwmmx_mbuiltin ("wshufh", v4hi_ftype_v4hi_int, WSHUFH);
-
- iwmmx_mbuiltin ("wsadb", v2si_ftype_v2si_v8qi_v8qi, WSADB);
- iwmmx_mbuiltin ("wsadh", v2si_ftype_v2si_v4hi_v4hi, WSADH);
- iwmmx_mbuiltin ("wmadds", v2si_ftype_v4hi_v4hi, WMADDS);
- iwmmx2_mbuiltin ("wmaddsx", v2si_ftype_v4hi_v4hi, WMADDSX);
- iwmmx2_mbuiltin ("wmaddsn", v2si_ftype_v4hi_v4hi, WMADDSN);
- iwmmx_mbuiltin ("wmaddu", v2si_ftype_v4hi_v4hi, WMADDU);
- iwmmx2_mbuiltin ("wmaddux", v2si_ftype_v4hi_v4hi, WMADDUX);
- iwmmx2_mbuiltin ("wmaddun", v2si_ftype_v4hi_v4hi, WMADDUN);
- iwmmx_mbuiltin ("wsadbz", v2si_ftype_v8qi_v8qi, WSADBZ);
- iwmmx_mbuiltin ("wsadhz", v2si_ftype_v4hi_v4hi, WSADHZ);
-
- iwmmx_mbuiltin ("textrmsb", int_ftype_v8qi_int, TEXTRMSB);
- iwmmx_mbuiltin ("textrmsh", int_ftype_v4hi_int, TEXTRMSH);
- iwmmx_mbuiltin ("textrmsw", int_ftype_v2si_int, TEXTRMSW);
- iwmmx_mbuiltin ("textrmub", int_ftype_v8qi_int, TEXTRMUB);
- iwmmx_mbuiltin ("textrmuh", int_ftype_v4hi_int, TEXTRMUH);
- iwmmx_mbuiltin ("textrmuw", int_ftype_v2si_int, TEXTRMUW);
- iwmmx_mbuiltin ("tinsrb", v8qi_ftype_v8qi_int_int, TINSRB);
- iwmmx_mbuiltin ("tinsrh", v4hi_ftype_v4hi_int_int, TINSRH);
- iwmmx_mbuiltin ("tinsrw", v2si_ftype_v2si_int_int, TINSRW);
-
- iwmmx_mbuiltin ("waccb", di_ftype_v8qi, WACCB);
- iwmmx_mbuiltin ("wacch", di_ftype_v4hi, WACCH);
- iwmmx_mbuiltin ("waccw", di_ftype_v2si, WACCW);
-
- iwmmx_mbuiltin ("tmovmskb", int_ftype_v8qi, TMOVMSKB);
- iwmmx_mbuiltin ("tmovmskh", int_ftype_v4hi, TMOVMSKH);
- iwmmx_mbuiltin ("tmovmskw", int_ftype_v2si, TMOVMSKW);
-
- iwmmx2_mbuiltin ("waddbhusm", v8qi_ftype_v4hi_v8qi, WADDBHUSM);
- iwmmx2_mbuiltin ("waddbhusl", v8qi_ftype_v4hi_v8qi, WADDBHUSL);
-
- iwmmx_mbuiltin ("wpackhss", v8qi_ftype_v4hi_v4hi, WPACKHSS);
- iwmmx_mbuiltin ("wpackhus", v8qi_ftype_v4hi_v4hi, WPACKHUS);
- iwmmx_mbuiltin ("wpackwus", v4hi_ftype_v2si_v2si, WPACKWUS);
- iwmmx_mbuiltin ("wpackwss", v4hi_ftype_v2si_v2si, WPACKWSS);
- iwmmx_mbuiltin ("wpackdus", v2si_ftype_di_di, WPACKDUS);
- iwmmx_mbuiltin ("wpackdss", v2si_ftype_di_di, WPACKDSS);
-
- iwmmx_mbuiltin ("wunpckehub", v4hi_ftype_v8qi, WUNPCKEHUB);
- iwmmx_mbuiltin ("wunpckehuh", v2si_ftype_v4hi, WUNPCKEHUH);
- iwmmx_mbuiltin ("wunpckehuw", di_ftype_v2si, WUNPCKEHUW);
- iwmmx_mbuiltin ("wunpckehsb", v4hi_ftype_v8qi, WUNPCKEHSB);
- iwmmx_mbuiltin ("wunpckehsh", v2si_ftype_v4hi, WUNPCKEHSH);
- iwmmx_mbuiltin ("wunpckehsw", di_ftype_v2si, WUNPCKEHSW);
- iwmmx_mbuiltin ("wunpckelub", v4hi_ftype_v8qi, WUNPCKELUB);
- iwmmx_mbuiltin ("wunpckeluh", v2si_ftype_v4hi, WUNPCKELUH);
- iwmmx_mbuiltin ("wunpckeluw", di_ftype_v2si, WUNPCKELUW);
- iwmmx_mbuiltin ("wunpckelsb", v4hi_ftype_v8qi, WUNPCKELSB);
- iwmmx_mbuiltin ("wunpckelsh", v2si_ftype_v4hi, WUNPCKELSH);
- iwmmx_mbuiltin ("wunpckelsw", di_ftype_v2si, WUNPCKELSW);
-
- iwmmx_mbuiltin ("wmacs", di_ftype_di_v4hi_v4hi, WMACS);
- iwmmx_mbuiltin ("wmacsz", di_ftype_v4hi_v4hi, WMACSZ);
- iwmmx_mbuiltin ("wmacu", di_ftype_di_v4hi_v4hi, WMACU);
- iwmmx_mbuiltin ("wmacuz", di_ftype_v4hi_v4hi, WMACUZ);
-
- iwmmx_mbuiltin ("walign", v8qi_ftype_v8qi_v8qi_int, WALIGNI);
- iwmmx_mbuiltin ("tmia", di_ftype_di_int_int, TMIA);
- iwmmx_mbuiltin ("tmiaph", di_ftype_di_int_int, TMIAPH);
- iwmmx_mbuiltin ("tmiabb", di_ftype_di_int_int, TMIABB);
- iwmmx_mbuiltin ("tmiabt", di_ftype_di_int_int, TMIABT);
- iwmmx_mbuiltin ("tmiatb", di_ftype_di_int_int, TMIATB);
- iwmmx_mbuiltin ("tmiatt", di_ftype_di_int_int, TMIATT);
-
- iwmmx2_mbuiltin ("wabsb", v8qi_ftype_v8qi, WABSB);
- iwmmx2_mbuiltin ("wabsh", v4hi_ftype_v4hi, WABSH);
- iwmmx2_mbuiltin ("wabsw", v2si_ftype_v2si, WABSW);
-
- iwmmx2_mbuiltin ("wqmiabb", v2si_ftype_v2si_v4hi_v4hi, WQMIABB);
- iwmmx2_mbuiltin ("wqmiabt", v2si_ftype_v2si_v4hi_v4hi, WQMIABT);
- iwmmx2_mbuiltin ("wqmiatb", v2si_ftype_v2si_v4hi_v4hi, WQMIATB);
- iwmmx2_mbuiltin ("wqmiatt", v2si_ftype_v2si_v4hi_v4hi, WQMIATT);
-
- iwmmx2_mbuiltin ("wqmiabbn", v2si_ftype_v2si_v4hi_v4hi, WQMIABBN);
- iwmmx2_mbuiltin ("wqmiabtn", v2si_ftype_v2si_v4hi_v4hi, WQMIABTN);
- iwmmx2_mbuiltin ("wqmiatbn", v2si_ftype_v2si_v4hi_v4hi, WQMIATBN);
- iwmmx2_mbuiltin ("wqmiattn", v2si_ftype_v2si_v4hi_v4hi, WQMIATTN);
-
- iwmmx2_mbuiltin ("wmiabb", di_ftype_di_v4hi_v4hi, WMIABB);
- iwmmx2_mbuiltin ("wmiabt", di_ftype_di_v4hi_v4hi, WMIABT);
- iwmmx2_mbuiltin ("wmiatb", di_ftype_di_v4hi_v4hi, WMIATB);
- iwmmx2_mbuiltin ("wmiatt", di_ftype_di_v4hi_v4hi, WMIATT);
-
- iwmmx2_mbuiltin ("wmiabbn", di_ftype_di_v4hi_v4hi, WMIABBN);
- iwmmx2_mbuiltin ("wmiabtn", di_ftype_di_v4hi_v4hi, WMIABTN);
- iwmmx2_mbuiltin ("wmiatbn", di_ftype_di_v4hi_v4hi, WMIATBN);
- iwmmx2_mbuiltin ("wmiattn", di_ftype_di_v4hi_v4hi, WMIATTN);
-
- iwmmx2_mbuiltin ("wmiawbb", di_ftype_di_v2si_v2si, WMIAWBB);
- iwmmx2_mbuiltin ("wmiawbt", di_ftype_di_v2si_v2si, WMIAWBT);
- iwmmx2_mbuiltin ("wmiawtb", di_ftype_di_v2si_v2si, WMIAWTB);
- iwmmx2_mbuiltin ("wmiawtt", di_ftype_di_v2si_v2si, WMIAWTT);
-
- iwmmx2_mbuiltin ("wmiawbbn", di_ftype_di_v2si_v2si, WMIAWBBN);
- iwmmx2_mbuiltin ("wmiawbtn", di_ftype_di_v2si_v2si, WMIAWBTN);
- iwmmx2_mbuiltin ("wmiawtbn", di_ftype_di_v2si_v2si, WMIAWTBN);
- iwmmx2_mbuiltin ("wmiawttn", di_ftype_di_v2si_v2si, WMIAWTTN);
-
- iwmmx2_mbuiltin ("wmerge", di_ftype_di_di_int, WMERGE);
-
- iwmmx_mbuiltin ("tbcstb", v8qi_ftype_char, TBCSTB);
- iwmmx_mbuiltin ("tbcsth", v4hi_ftype_short, TBCSTH);
- iwmmx_mbuiltin ("tbcstw", v2si_ftype_int, TBCSTW);
-
-#undef iwmmx_mbuiltin
-#undef iwmmx2_mbuiltin
-}
-
static void
arm_init_fp16_builtins (void)
{
@@ -2454,9 +1693,6 @@ arm_init_fp16_builtins (void)
void
arm_init_builtins (void)
{
- if (TARGET_REALLY_IWMMXT)
- arm_init_iwmmxt_builtins ();
-
/* This creates the arm_simd_floatHF_type_node so must come before
arm_init_neon_builtins which uses it. */
arm_init_fp16_builtins ();
@@ -2546,15 +1782,11 @@ arm_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
clear instructions. */
static rtx
-safe_vector_operand (rtx x, machine_mode mode)
+safe_vector_operand (rtx x, machine_mode mode ATTRIBUTE_UNUSED)
{
if (x != const0_rtx)
return x;
- x = gen_reg_rtx (mode);
-
- emit_insn (gen_iwmmxt_clrdi (mode == DImode ? x
- : gen_rtx_SUBREG (DImode, x, 0)));
- return x;
+ __builtin_unreachable ();
}
/* Function to expand ternary builtins. */
@@ -3266,21 +2498,10 @@ arm_general_expand_builtin (unsigned int fcode,
const struct builtin_description * d;
enum insn_code icode;
tree arg0;
- tree arg1;
- tree arg2;
rtx op0;
rtx op1;
- rtx op2;
rtx pat;
size_t i;
- machine_mode tmode;
- machine_mode mode0;
- machine_mode mode1;
- machine_mode mode2;
- int opint;
- int selector;
- int mask;
- int imm;
if (fcode == ARM_BUILTIN_SIMD_LANE_CHECK)
{
@@ -3369,499 +2590,6 @@ arm_general_expand_builtin (unsigned int fcode,
emit_insn (gen_cstoresi4 (target, op1, target, const0_rtx));
return target;
- case ARM_BUILTIN_TEXTRMSB:
- case ARM_BUILTIN_TEXTRMUB:
- case ARM_BUILTIN_TEXTRMSH:
- case ARM_BUILTIN_TEXTRMUH:
- case ARM_BUILTIN_TEXTRMSW:
- case ARM_BUILTIN_TEXTRMUW:
- icode = (fcode == ARM_BUILTIN_TEXTRMSB ? CODE_FOR_iwmmxt_textrmsb
- : fcode == ARM_BUILTIN_TEXTRMUB ? CODE_FOR_iwmmxt_textrmub
- : fcode == ARM_BUILTIN_TEXTRMSH ? CODE_FOR_iwmmxt_textrmsh
- : fcode == ARM_BUILTIN_TEXTRMUH ? CODE_FOR_iwmmxt_textrmuh
- : CODE_FOR_iwmmxt_textrmw);
-
- arg0 = CALL_EXPR_ARG (exp, 0);
- arg1 = CALL_EXPR_ARG (exp, 1);
- op0 = expand_normal (arg0);
- op1 = expand_normal (arg1);
- tmode = insn_data[icode].operand[0].mode;
- mode0 = insn_data[icode].operand[1].mode;
- mode1 = insn_data[icode].operand[2].mode;
-
- if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
- if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
- {
- /* @@@ better error message */
- error ("selector must be an immediate");
- return gen_reg_rtx (tmode);
- }
-
- opint = INTVAL (op1);
- if (fcode == ARM_BUILTIN_TEXTRMSB || fcode == ARM_BUILTIN_TEXTRMUB)
- {
- if (opint > 7 || opint < 0)
- error ("the range of selector should be in 0 to 7");
- }
- else if (fcode == ARM_BUILTIN_TEXTRMSH || fcode == ARM_BUILTIN_TEXTRMUH)
- {
- if (opint > 3 || opint < 0)
- error ("the range of selector should be in 0 to 3");
- }
- else /* ARM_BUILTIN_TEXTRMSW || ARM_BUILTIN_TEXTRMUW. */
- {
- if (opint > 1 || opint < 0)
- error ("the range of selector should be in 0 to 1");
- }
-
- if (target == 0
- || GET_MODE (target) != tmode
- || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- pat = GEN_FCN (icode) (target, op0, op1);
- if (! pat)
- return 0;
- emit_insn (pat);
- return target;
-
- case ARM_BUILTIN_WALIGNI:
- /* If op2 is immediate, call walighi, else call walighr. */
- arg0 = CALL_EXPR_ARG (exp, 0);
- arg1 = CALL_EXPR_ARG (exp, 1);
- arg2 = CALL_EXPR_ARG (exp, 2);
- op0 = expand_normal (arg0);
- op1 = expand_normal (arg1);
- op2 = expand_normal (arg2);
- if (CONST_INT_P (op2))
- {
- icode = CODE_FOR_iwmmxt_waligni;
- tmode = insn_data[icode].operand[0].mode;
- mode0 = insn_data[icode].operand[1].mode;
- mode1 = insn_data[icode].operand[2].mode;
- mode2 = insn_data[icode].operand[3].mode;
- if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
- if (!(*insn_data[icode].operand[2].predicate) (op1, mode1))
- op1 = copy_to_mode_reg (mode1, op1);
- gcc_assert ((*insn_data[icode].operand[3].predicate) (op2, mode2));
- selector = INTVAL (op2);
- if (selector > 7 || selector < 0)
- error ("the range of selector should be in 0 to 7");
- }
- else
- {
- icode = CODE_FOR_iwmmxt_walignr;
- tmode = insn_data[icode].operand[0].mode;
- mode0 = insn_data[icode].operand[1].mode;
- mode1 = insn_data[icode].operand[2].mode;
- mode2 = insn_data[icode].operand[3].mode;
- if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
- if (!(*insn_data[icode].operand[2].predicate) (op1, mode1))
- op1 = copy_to_mode_reg (mode1, op1);
- if (!(*insn_data[icode].operand[3].predicate) (op2, mode2))
- op2 = copy_to_mode_reg (mode2, op2);
- }
- if (target == 0
- || GET_MODE (target) != tmode
- || !(*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- pat = GEN_FCN (icode) (target, op0, op1, op2);
- if (!pat)
- return 0;
- emit_insn (pat);
- return target;
-
- case ARM_BUILTIN_TINSRB:
- case ARM_BUILTIN_TINSRH:
- case ARM_BUILTIN_TINSRW:
- case ARM_BUILTIN_WMERGE:
- icode = (fcode == ARM_BUILTIN_TINSRB ? CODE_FOR_iwmmxt_tinsrb
- : fcode == ARM_BUILTIN_TINSRH ? CODE_FOR_iwmmxt_tinsrh
- : fcode == ARM_BUILTIN_WMERGE ? CODE_FOR_iwmmxt_wmerge
- : CODE_FOR_iwmmxt_tinsrw);
- arg0 = CALL_EXPR_ARG (exp, 0);
- arg1 = CALL_EXPR_ARG (exp, 1);
- arg2 = CALL_EXPR_ARG (exp, 2);
- op0 = expand_normal (arg0);
- op1 = expand_normal (arg1);
- op2 = expand_normal (arg2);
- tmode = insn_data[icode].operand[0].mode;
- mode0 = insn_data[icode].operand[1].mode;
- mode1 = insn_data[icode].operand[2].mode;
- mode2 = insn_data[icode].operand[3].mode;
-
- if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
- if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
- op1 = copy_to_mode_reg (mode1, op1);
- if (! (*insn_data[icode].operand[3].predicate) (op2, mode2))
- {
- error ("selector must be an immediate");
- return const0_rtx;
- }
- if (icode == CODE_FOR_iwmmxt_wmerge)
- {
- selector = INTVAL (op2);
- if (selector > 7 || selector < 0)
- error ("the range of selector should be in 0 to 7");
- }
- if ((icode == CODE_FOR_iwmmxt_tinsrb)
- || (icode == CODE_FOR_iwmmxt_tinsrh)
- || (icode == CODE_FOR_iwmmxt_tinsrw))
- {
- mask = 0x01;
- selector= INTVAL (op2);
- if (icode == CODE_FOR_iwmmxt_tinsrb && (selector < 0 || selector > 7))
- error ("the range of selector should be in 0 to 7");
- else if (icode == CODE_FOR_iwmmxt_tinsrh && (selector < 0 ||selector > 3))
- error ("the range of selector should be in 0 to 3");
- else if (icode == CODE_FOR_iwmmxt_tinsrw && (selector < 0 ||selector > 1))
- error ("the range of selector should be in 0 to 1");
- mask <<= selector;
- op2 = GEN_INT (mask);
- }
- if (target == 0
- || GET_MODE (target) != tmode
- || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- pat = GEN_FCN (icode) (target, op0, op1, op2);
- if (! pat)
- return 0;
- emit_insn (pat);
- return target;
-
- case ARM_BUILTIN_SETWCGR0:
- case ARM_BUILTIN_SETWCGR1:
- case ARM_BUILTIN_SETWCGR2:
- case ARM_BUILTIN_SETWCGR3:
- icode = (fcode == ARM_BUILTIN_SETWCGR0 ? CODE_FOR_iwmmxt_setwcgr0
- : fcode == ARM_BUILTIN_SETWCGR1 ? CODE_FOR_iwmmxt_setwcgr1
- : fcode == ARM_BUILTIN_SETWCGR2 ? CODE_FOR_iwmmxt_setwcgr2
- : CODE_FOR_iwmmxt_setwcgr3);
- arg0 = CALL_EXPR_ARG (exp, 0);
- op0 = expand_normal (arg0);
- mode0 = insn_data[icode].operand[0].mode;
- if (!(*insn_data[icode].operand[0].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
- pat = GEN_FCN (icode) (op0);
- if (!pat)
- return 0;
- emit_insn (pat);
- return 0;
-
- case ARM_BUILTIN_GETWCGR0:
- case ARM_BUILTIN_GETWCGR1:
- case ARM_BUILTIN_GETWCGR2:
- case ARM_BUILTIN_GETWCGR3:
- icode = (fcode == ARM_BUILTIN_GETWCGR0 ? CODE_FOR_iwmmxt_getwcgr0
- : fcode == ARM_BUILTIN_GETWCGR1 ? CODE_FOR_iwmmxt_getwcgr1
- : fcode == ARM_BUILTIN_GETWCGR2 ? CODE_FOR_iwmmxt_getwcgr2
- : CODE_FOR_iwmmxt_getwcgr3);
- tmode = insn_data[icode].operand[0].mode;
- if (target == 0
- || GET_MODE (target) != tmode
- || !(*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- pat = GEN_FCN (icode) (target);
- if (!pat)
- return 0;
- emit_insn (pat);
- return target;
-
- case ARM_BUILTIN_WSHUFH:
- icode = CODE_FOR_iwmmxt_wshufh;
- arg0 = CALL_EXPR_ARG (exp, 0);
- arg1 = CALL_EXPR_ARG (exp, 1);
- op0 = expand_normal (arg0);
- op1 = expand_normal (arg1);
- tmode = insn_data[icode].operand[0].mode;
- mode1 = insn_data[icode].operand[1].mode;
- mode2 = insn_data[icode].operand[2].mode;
-
- if (! (*insn_data[icode].operand[1].predicate) (op0, mode1))
- op0 = copy_to_mode_reg (mode1, op0);
- if (! (*insn_data[icode].operand[2].predicate) (op1, mode2))
- {
- error ("mask must be an immediate");
- return const0_rtx;
- }
- selector = INTVAL (op1);
- if (selector < 0 || selector > 255)
- error ("the range of mask should be in 0 to 255");
- if (target == 0
- || GET_MODE (target) != tmode
- || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- pat = GEN_FCN (icode) (target, op0, op1);
- if (! pat)
- return 0;
- emit_insn (pat);
- return target;
-
- case ARM_BUILTIN_WMADDS:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wmadds, exp, target);
- case ARM_BUILTIN_WMADDSX:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wmaddsx, exp, target);
- case ARM_BUILTIN_WMADDSN:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wmaddsn, exp, target);
- case ARM_BUILTIN_WMADDU:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wmaddu, exp, target);
- case ARM_BUILTIN_WMADDUX:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wmaddux, exp, target);
- case ARM_BUILTIN_WMADDUN:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wmaddun, exp, target);
- case ARM_BUILTIN_WSADBZ:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wsadbz, exp, target);
- case ARM_BUILTIN_WSADHZ:
- return arm_expand_binop_builtin (CODE_FOR_iwmmxt_wsadhz, exp, target);
-
- /* Several three-argument builtins. */
- case ARM_BUILTIN_WMACS:
- case ARM_BUILTIN_WMACU:
- case ARM_BUILTIN_TMIA:
- case ARM_BUILTIN_TMIAPH:
- case ARM_BUILTIN_TMIATT:
- case ARM_BUILTIN_TMIATB:
- case ARM_BUILTIN_TMIABT:
- case ARM_BUILTIN_TMIABB:
- case ARM_BUILTIN_WQMIABB:
- case ARM_BUILTIN_WQMIABT:
- case ARM_BUILTIN_WQMIATB:
- case ARM_BUILTIN_WQMIATT:
- case ARM_BUILTIN_WQMIABBN:
- case ARM_BUILTIN_WQMIABTN:
- case ARM_BUILTIN_WQMIATBN:
- case ARM_BUILTIN_WQMIATTN:
- case ARM_BUILTIN_WMIABB:
- case ARM_BUILTIN_WMIABT:
- case ARM_BUILTIN_WMIATB:
- case ARM_BUILTIN_WMIATT:
- case ARM_BUILTIN_WMIABBN:
- case ARM_BUILTIN_WMIABTN:
- case ARM_BUILTIN_WMIATBN:
- case ARM_BUILTIN_WMIATTN:
- case ARM_BUILTIN_WMIAWBB:
- case ARM_BUILTIN_WMIAWBT:
- case ARM_BUILTIN_WMIAWTB:
- case ARM_BUILTIN_WMIAWTT:
- case ARM_BUILTIN_WMIAWBBN:
- case ARM_BUILTIN_WMIAWBTN:
- case ARM_BUILTIN_WMIAWTBN:
- case ARM_BUILTIN_WMIAWTTN:
- case ARM_BUILTIN_WSADB:
- case ARM_BUILTIN_WSADH:
- icode = (fcode == ARM_BUILTIN_WMACS ? CODE_FOR_iwmmxt_wmacs
- : fcode == ARM_BUILTIN_WMACU ? CODE_FOR_iwmmxt_wmacu
- : fcode == ARM_BUILTIN_TMIA ? CODE_FOR_iwmmxt_tmia
- : fcode == ARM_BUILTIN_TMIAPH ? CODE_FOR_iwmmxt_tmiaph
- : fcode == ARM_BUILTIN_TMIABB ? CODE_FOR_iwmmxt_tmiabb
- : fcode == ARM_BUILTIN_TMIABT ? CODE_FOR_iwmmxt_tmiabt
- : fcode == ARM_BUILTIN_TMIATB ? CODE_FOR_iwmmxt_tmiatb
- : fcode == ARM_BUILTIN_TMIATT ? CODE_FOR_iwmmxt_tmiatt
- : fcode == ARM_BUILTIN_WQMIABB ? CODE_FOR_iwmmxt_wqmiabb
- : fcode == ARM_BUILTIN_WQMIABT ? CODE_FOR_iwmmxt_wqmiabt
- : fcode == ARM_BUILTIN_WQMIATB ? CODE_FOR_iwmmxt_wqmiatb
- : fcode == ARM_BUILTIN_WQMIATT ? CODE_FOR_iwmmxt_wqmiatt
- : fcode == ARM_BUILTIN_WQMIABBN ? CODE_FOR_iwmmxt_wqmiabbn
- : fcode == ARM_BUILTIN_WQMIABTN ? CODE_FOR_iwmmxt_wqmiabtn
- : fcode == ARM_BUILTIN_WQMIATBN ? CODE_FOR_iwmmxt_wqmiatbn
- : fcode == ARM_BUILTIN_WQMIATTN ? CODE_FOR_iwmmxt_wqmiattn
- : fcode == ARM_BUILTIN_WMIABB ? CODE_FOR_iwmmxt_wmiabb
- : fcode == ARM_BUILTIN_WMIABT ? CODE_FOR_iwmmxt_wmiabt
- : fcode == ARM_BUILTIN_WMIATB ? CODE_FOR_iwmmxt_wmiatb
- : fcode == ARM_BUILTIN_WMIATT ? CODE_FOR_iwmmxt_wmiatt
- : fcode == ARM_BUILTIN_WMIABBN ? CODE_FOR_iwmmxt_wmiabbn
- : fcode == ARM_BUILTIN_WMIABTN ? CODE_FOR_iwmmxt_wmiabtn
- : fcode == ARM_BUILTIN_WMIATBN ? CODE_FOR_iwmmxt_wmiatbn
- : fcode == ARM_BUILTIN_WMIATTN ? CODE_FOR_iwmmxt_wmiattn
- : fcode == ARM_BUILTIN_WMIAWBB ? CODE_FOR_iwmmxt_wmiawbb
- : fcode == ARM_BUILTIN_WMIAWBT ? CODE_FOR_iwmmxt_wmiawbt
- : fcode == ARM_BUILTIN_WMIAWTB ? CODE_FOR_iwmmxt_wmiawtb
- : fcode == ARM_BUILTIN_WMIAWTT ? CODE_FOR_iwmmxt_wmiawtt
- : fcode == ARM_BUILTIN_WMIAWBBN ? CODE_FOR_iwmmxt_wmiawbbn
- : fcode == ARM_BUILTIN_WMIAWBTN ? CODE_FOR_iwmmxt_wmiawbtn
- : fcode == ARM_BUILTIN_WMIAWTBN ? CODE_FOR_iwmmxt_wmiawtbn
- : fcode == ARM_BUILTIN_WMIAWTTN ? CODE_FOR_iwmmxt_wmiawttn
- : fcode == ARM_BUILTIN_WSADB ? CODE_FOR_iwmmxt_wsadb
- : CODE_FOR_iwmmxt_wsadh);
- arg0 = CALL_EXPR_ARG (exp, 0);
- arg1 = CALL_EXPR_ARG (exp, 1);
- arg2 = CALL_EXPR_ARG (exp, 2);
- op0 = expand_normal (arg0);
- op1 = expand_normal (arg1);
- op2 = expand_normal (arg2);
- tmode = insn_data[icode].operand[0].mode;
- mode0 = insn_data[icode].operand[1].mode;
- mode1 = insn_data[icode].operand[2].mode;
- mode2 = insn_data[icode].operand[3].mode;
-
- if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
- op0 = copy_to_mode_reg (mode0, op0);
- if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
- op1 = copy_to_mode_reg (mode1, op1);
- if (! (*insn_data[icode].operand[3].predicate) (op2, mode2))
- op2 = copy_to_mode_reg (mode2, op2);
- if (target == 0
- || GET_MODE (target) != tmode
- || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- pat = GEN_FCN (icode) (target, op0, op1, op2);
- if (! pat)
- return 0;
- emit_insn (pat);
- return target;
-
- case ARM_BUILTIN_WZERO:
- target = gen_reg_rtx (DImode);
- emit_insn (gen_iwmmxt_clrdi (target));
- return target;
-
- case ARM_BUILTIN_WSRLHI:
- case ARM_BUILTIN_WSRLWI:
- case ARM_BUILTIN_WSRLDI:
- case ARM_BUILTIN_WSLLHI:
- case ARM_BUILTIN_WSLLWI:
- case ARM_BUILTIN_WSLLDI:
- case ARM_BUILTIN_WSRAHI:
- case ARM_BUILTIN_WSRAWI:
- case ARM_BUILTIN_WSRADI:
- case ARM_BUILTIN_WRORHI:
- case ARM_BUILTIN_WRORWI:
- case ARM_BUILTIN_WRORDI:
- case ARM_BUILTIN_WSRLH:
- case ARM_BUILTIN_WSRLW:
- case ARM_BUILTIN_WSRLD:
- case ARM_BUILTIN_WSLLH:
- case ARM_BUILTIN_WSLLW:
- case ARM_BUILTIN_WSLLD:
- case ARM_BUILTIN_WSRAH:
- case ARM_BUILTIN_WSRAW:
- case ARM_BUILTIN_WSRAD:
- case ARM_BUILTIN_WRORH:
- case ARM_BUILTIN_WRORW:
- case ARM_BUILTIN_WRORD:
- icode = (fcode == ARM_BUILTIN_WSRLHI ? CODE_FOR_lshrv4hi3_iwmmxt
- : fcode == ARM_BUILTIN_WSRLWI ? CODE_FOR_lshrv2si3_iwmmxt
- : fcode == ARM_BUILTIN_WSRLDI ? CODE_FOR_lshrdi3_iwmmxt
- : fcode == ARM_BUILTIN_WSLLHI ? CODE_FOR_ashlv4hi3_iwmmxt
- : fcode == ARM_BUILTIN_WSLLWI ? CODE_FOR_ashlv2si3_iwmmxt
- : fcode == ARM_BUILTIN_WSLLDI ? CODE_FOR_ashldi3_iwmmxt
- : fcode == ARM_BUILTIN_WSRAHI ? CODE_FOR_ashrv4hi3_iwmmxt
- : fcode == ARM_BUILTIN_WSRAWI ? CODE_FOR_ashrv2si3_iwmmxt
- : fcode == ARM_BUILTIN_WSRADI ? CODE_FOR_ashrdi3_iwmmxt
- : fcode == ARM_BUILTIN_WRORHI ? CODE_FOR_rorv4hi3
- : fcode == ARM_BUILTIN_WRORWI ? CODE_FOR_rorv2si3
- : fcode == ARM_BUILTIN_WRORDI ? CODE_FOR_rordi3
- : fcode == ARM_BUILTIN_WSRLH ? CODE_FOR_lshrv4hi3_di
- : fcode == ARM_BUILTIN_WSRLW ? CODE_FOR_lshrv2si3_di
- : fcode == ARM_BUILTIN_WSRLD ? CODE_FOR_lshrdi3_di
- : fcode == ARM_BUILTIN_WSLLH ? CODE_FOR_ashlv4hi3_di
- : fcode == ARM_BUILTIN_WSLLW ? CODE_FOR_ashlv2si3_di
- : fcode == ARM_BUILTIN_WSLLD ? CODE_FOR_ashldi3_di
- : fcode == ARM_BUILTIN_WSRAH ? CODE_FOR_ashrv4hi3_di
- : fcode == ARM_BUILTIN_WSRAW ? CODE_FOR_ashrv2si3_di
- : fcode == ARM_BUILTIN_WSRAD ? CODE_FOR_ashrdi3_di
- : fcode == ARM_BUILTIN_WRORH ? CODE_FOR_rorv4hi3_di
- : fcode == ARM_BUILTIN_WRORW ? CODE_FOR_rorv2si3_di
- : fcode == ARM_BUILTIN_WRORD ? CODE_FOR_rordi3_di
- : CODE_FOR_nothing);
- arg1 = CALL_EXPR_ARG (exp, 1);
- op1 = expand_normal (arg1);
- if (GET_MODE (op1) == VOIDmode)
- {
- imm = INTVAL (op1);
- if ((fcode == ARM_BUILTIN_WRORWI || fcode == ARM_BUILTIN_WRORW)
- && (imm < 0 || imm > 32))
- {
- const char *builtin = (fcode == ARM_BUILTIN_WRORWI
- ? "_mm_rori_pi32" : "_mm_ror_pi32");
- error ("the range of count should be in 0 to 32; "
- "please check the intrinsic %qs in code", builtin);
- }
- else if ((fcode == ARM_BUILTIN_WRORHI || fcode == ARM_BUILTIN_WRORH)
- && (imm < 0 || imm > 16))
- {
- const char *builtin = (fcode == ARM_BUILTIN_WRORHI
- ? "_mm_rori_pi16" : "_mm_ror_pi16");
- error ("the range of count should be in 0 to 16; "
- "please check the intrinsic %qs in code", builtin);
- }
- else if ((fcode == ARM_BUILTIN_WRORDI || fcode == ARM_BUILTIN_WRORD)
- && (imm < 0 || imm > 64))
- {
- const char *builtin = (fcode == ARM_BUILTIN_WRORDI
- ? "_mm_rori_si64" : "_mm_ror_si64");
- error ("the range of count should be in 0 to 64; "
- "please check the intrinsic %qs in code", builtin);
- }
- else if (imm < 0)
- {
- const char *builtin;
- switch (fcode)
- {
- case ARM_BUILTIN_WSRLHI:
- builtin = "_mm_srli_pi16";
- break;
- case ARM_BUILTIN_WSRLWI:
- builtin = "_mm_srli_pi32";
- break;
- case ARM_BUILTIN_WSRLDI:
- builtin = "_mm_srli_si64";
- break;
- case ARM_BUILTIN_WSLLHI:
- builtin = "_mm_slli_pi16";
- break;
- case ARM_BUILTIN_WSLLWI:
- builtin = "_mm_slli_pi32";
- break;
- case ARM_BUILTIN_WSLLDI:
- builtin = "_mm_slli_si64";
- break;
- case ARM_BUILTIN_WSRAHI:
- builtin = "_mm_srai_pi16";
- break;
- case ARM_BUILTIN_WSRAWI:
- builtin = "_mm_srai_pi32";
- break;
- case ARM_BUILTIN_WSRADI:
- builtin = "_mm_srai_si64";
- break;
- case ARM_BUILTIN_WSRLH:
- builtin = "_mm_srl_pi16";
- break;
- case ARM_BUILTIN_WSRLW:
- builtin = "_mm_srl_pi32";
- break;
- case ARM_BUILTIN_WSRLD:
- builtin = "_mm_srl_si64";
- break;
- case ARM_BUILTIN_WSLLH:
- builtin = "_mm_sll_pi16";
- break;
- case ARM_BUILTIN_WSLLW:
- builtin = "_mm_sll_pi32";
- break;
- case ARM_BUILTIN_WSLLD:
- builtin = "_mm_sll_si64";
- break;
- case ARM_BUILTIN_WSRAH:
- builtin = "_mm_sra_pi16";
- break;
- case ARM_BUILTIN_WSRAW:
- builtin = "_mm_sra_si64";
- break;
- default:
- builtin = "_mm_sra_si64";
- break;
- }
- error ("the count should be no less than 0; "
- "please check the intrinsic %qs in code", builtin);
- }
- }
- return arm_expand_binop_builtin (icode, exp, target);
-
default:
break;
}
diff --git a/gcc/config/arm/arm-c.cc b/gcc/config/arm/arm-c.cc
index 15e4080..d257e62 100644
--- a/gcc/config/arm/arm-c.cc
+++ b/gcc/config/arm/arm-c.cc
@@ -373,13 +373,6 @@ arm_cpu_builtins (struct cpp_reader* pfile)
builtin_define (arm_arch_name);
if (arm_arch_xscale)
builtin_define ("__XSCALE__");
- if (arm_arch_iwmmxt)
- {
- builtin_define ("__IWMMXT__");
- builtin_define ("__ARM_WMMX");
- }
- if (arm_arch_iwmmxt2)
- builtin_define ("__IWMMXT2__");
/* ARMv6KZ was originally identified as the misspelled __ARM_ARCH_6ZK__. To
preserve the existing behavior, the misspelled feature macro must still be
defined. */
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 1939d55..7f5a8c6 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -102,12 +102,6 @@ define feature armv8
# ARMv8 CRC32 instructions.
define feature crc32
-# XScale v2 (Wireless MMX).
-define feature iwmmxt
-
-# XScale Wireless MMX2.
-define feature iwmmxt2
-
# Architecture rel 8.1.
define feature armv8_1
@@ -778,18 +772,19 @@ begin arch armv9-a
option bf16 add bf16 FP_ARMv8 DOTPROD
end arch armv9-a
+# We no-longer support the iwmmxt{,2} extensions, so treat these like xscale.
begin arch iwmmxt
- tune for iwmmxt
+ tune for xscale
tune flags LDSCHED STRONG XSCALE
base 5TE
- isa ARMv5te xscale iwmmxt
+ isa ARMv5te xscale
end arch iwmmxt
begin arch iwmmxt2
- tune for iwmmxt2
+ tune for xscale
tune flags LDSCHED STRONG XSCALE
base 5TE
- isa ARMv5te xscale iwmmxt iwmmxt2
+ isa ARMv5te xscale
end arch iwmmxt2
# CPU entries
@@ -924,23 +919,12 @@ end cpu arm10e
begin cpu xscale
tune flags LDSCHED XSCALE
+ alias iwmmxt iwmmxt2
architecture armv5te
isa xscale
costs xscale
end cpu xscale
-begin cpu iwmmxt
- tune flags LDSCHED XSCALE
- architecture iwmmxt
- costs xscale
-end cpu iwmmxt
-
-begin cpu iwmmxt2
- tune flags LDSCHED XSCALE
- architecture iwmmxt2
- costs xscale
-end cpu iwmmxt2
-
begin cpu fa606te
tune flags LDSCHED
architecture armv5te
diff --git a/gcc/config/arm/arm-generic.md b/gcc/config/arm/arm-generic.md
index c270056..a8af0e6 100644
--- a/gcc/config/arm/arm-generic.md
+++ b/gcc/config/arm/arm-generic.md
@@ -96,14 +96,14 @@
(and (eq_attr "generic_sched" "yes")
(and (eq_attr "ldsched" "yes")
(and (eq_attr "type" "load_byte,load_4")
- (eq_attr "tune" "xscale,iwmmxt,iwmmxt2"))))
+ (eq_attr "tune" "xscale"))))
"core")
(define_insn_reservation "load_ldsched" 2
(and (eq_attr "generic_sched" "yes")
(and (eq_attr "ldsched" "yes")
(and (eq_attr "type" "load_byte,load_4")
- (eq_attr "tune" "!xscale,iwmmxt,iwmmxt2"))))
+ (eq_attr "tune" "!xscale"))))
"core")
(define_insn_reservation "load_or_store" 2
diff --git a/gcc/config/arm/arm-opts.h b/gcc/config/arm/arm-opts.h
index 06a1939..5c543bf 100644
--- a/gcc/config/arm/arm-opts.h
+++ b/gcc/config/arm/arm-opts.h
@@ -46,7 +46,6 @@ enum arm_abi_type
ARM_ABI_APCS,
ARM_ABI_ATPCS,
ARM_ABI_AAPCS,
- ARM_ABI_IWMMXT,
ARM_ABI_AAPCS_LINUX
};
diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h
index 254c731..ff7e765 100644
--- a/gcc/config/arm/arm-protos.h
+++ b/gcc/config/arm/arm-protos.h
@@ -190,8 +190,6 @@ extern void arm_output_multireg_pop (rtx *, bool, rtx, bool, bool);
extern void arm_set_return_address (rtx, rtx);
extern int arm_eliminable_register (rtx);
extern const char *arm_output_shift(rtx *, int);
-extern const char *arm_output_iwmmxt_shift_immediate (const char *, rtx *, bool);
-extern const char *arm_output_iwmmxt_tinsr (rtx *);
extern unsigned int arm_sync_loop_insns (rtx , rtx *);
extern int arm_attr_length_push_multi(rtx, rtx);
extern int arm_attr_length_pop_multi(rtx *, bool, bool);
@@ -475,12 +473,6 @@ extern int arm_ld_sched;
/* Nonzero if this chip is a StrongARM. */
extern int arm_tune_strongarm;
-/* Nonzero if this chip supports Intel Wireless MMX technology. */
-extern int arm_arch_iwmmxt;
-
-/* Nonzero if this chip supports Intel Wireless MMX2 technology. */
-extern int arm_arch_iwmmxt2;
-
/* Nonzero if this chip is an XScale. */
extern int arm_arch_xscale;
diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt
index db7767a..544de84 100644
--- a/gcc/config/arm/arm-tables.opt
+++ b/gcc/config/arm/arm-tables.opt
@@ -67,12 +67,6 @@ EnumValue
Enum(processor_type) String(xscale) Value( TARGET_CPU_xscale)
EnumValue
-Enum(processor_type) String(iwmmxt) Value( TARGET_CPU_iwmmxt)
-
-EnumValue
-Enum(processor_type) String(iwmmxt2) Value( TARGET_CPU_iwmmxt2)
-
-EnumValue
Enum(processor_type) String(fa606te) Value( TARGET_CPU_fa606te)
EnumValue
diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md
index a04d1ee..20b5f93 100644
--- a/gcc/config/arm/arm-tune.md
+++ b/gcc/config/arm/arm-tune.md
@@ -25,31 +25,30 @@
fa526,fa626,arm7tdmi,
arm710t,arm9,arm9tdmi,
arm920t,arm10tdmi,arm9e,
- arm10e,xscale,iwmmxt,
- iwmmxt2,fa606te,fa626te,
- fmp626,fa726te,arm926ejs,
- arm1026ejs,arm1136js,arm1136jfs,
- arm1176jzs,arm1176jzfs,mpcorenovfp,
- mpcore,arm1156t2s,arm1156t2fs,
- cortexm1,cortexm0,cortexm0plus,
- cortexm1smallmultiply,cortexm0smallmultiply,cortexm0plussmallmultiply,
- genericv7a,cortexa5,cortexa7,
- cortexa8,cortexa9,cortexa12,
- cortexa15,cortexa17,cortexr4,
- cortexr4f,cortexr5,cortexr7,
- cortexr8,cortexm7,cortexm4,
- cortexm3,marvell_pj4,cortexa15cortexa7,
- cortexa17cortexa7,cortexa32,cortexa35,
- cortexa53,cortexa57,cortexa72,
- cortexa73,exynosm1,xgene1,
- cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,
- cortexa73cortexa53,cortexa55,cortexa75,
- cortexa76,cortexa76ae,cortexa77,
- cortexa78,cortexa78ae,cortexa78c,
- cortexa710,cortexx1,cortexx1c,
- neoversen1,cortexa75cortexa55,cortexa76cortexa55,
- neoversev1,neoversen2,cortexm23,
- cortexm33,cortexm35p,cortexm52,
- cortexm55,starmc1,cortexm85,
- cortexr52,cortexr52plus"
+ arm10e,xscale,fa606te,
+ fa626te,fmp626,fa726te,
+ arm926ejs,arm1026ejs,arm1136js,
+ arm1136jfs,arm1176jzs,arm1176jzfs,
+ mpcorenovfp,mpcore,arm1156t2s,
+ arm1156t2fs,cortexm1,cortexm0,
+ cortexm0plus,cortexm1smallmultiply,cortexm0smallmultiply,
+ cortexm0plussmallmultiply,genericv7a,cortexa5,
+ cortexa7,cortexa8,cortexa9,
+ cortexa12,cortexa15,cortexa17,
+ cortexr4,cortexr4f,cortexr5,
+ cortexr7,cortexr8,cortexm7,
+ cortexm4,cortexm3,marvell_pj4,
+ cortexa15cortexa7,cortexa17cortexa7,cortexa32,
+ cortexa35,cortexa53,cortexa57,
+ cortexa72,cortexa73,exynosm1,
+ xgene1,cortexa57cortexa53,cortexa72cortexa53,
+ cortexa73cortexa35,cortexa73cortexa53,cortexa55,
+ cortexa75,cortexa76,cortexa76ae,
+ cortexa77,cortexa78,cortexa78ae,
+ cortexa78c,cortexa710,cortexx1,
+ cortexx1c,neoversen1,cortexa75cortexa55,
+ cortexa76cortexa55,neoversev1,neoversen2,
+ cortexm23,cortexm33,cortexm35p,
+ cortexm52,cortexm55,starmc1,
+ cortexm85,cortexr52,cortexr52plus"
(const (symbol_ref "((enum attr_tune) arm_tune)")))
diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
index 6bdb68a..8737c22 100644
--- a/gcc/config/arm/arm.cc
+++ b/gcc/config/arm/arm.cc
@@ -948,12 +948,6 @@ int arm_ld_sched = 0;
/* Nonzero if this chip is a StrongARM. */
int arm_tune_strongarm = 0;
-/* Nonzero if this chip supports Intel Wireless MMX technology. */
-int arm_arch_iwmmxt = 0;
-
-/* Nonzero if this chip supports Intel Wireless MMX2 technology. */
-int arm_arch_iwmmxt2 = 0;
-
/* Nonzero if this chip is an XScale. */
int arm_arch_xscale = 0;
@@ -2970,11 +2964,6 @@ arm_option_check_internal (struct gcc_options *opts)
{
int flags = opts->x_target_flags;
- /* iWMMXt and NEON are incompatible. */
- if (TARGET_IWMMXT
- && bitmap_bit_p (arm_active_target.isa, isa_bit_neon))
- error ("iWMMXt and NEON are incompatible");
-
/* Make sure that the processor choice does not conflict with any of the
other command line choices. */
if (TARGET_ARM_P (flags)
@@ -2997,10 +2986,6 @@ arm_option_check_internal (struct gcc_options *opts)
warning (0, "%<-g%> with %<-mno-apcs-frame%> may not give sensible "
"debugging");
- /* iWMMXt unsupported under Thumb mode. */
- if (TARGET_THUMB_P (flags) && TARGET_IWMMXT)
- error ("iWMMXt unsupported under Thumb mode");
-
if (TARGET_HARD_TP && TARGET_THUMB1_P (flags))
error ("cannot use %<-mtp=cp15%> with 16-bit Thumb");
@@ -3928,8 +3913,6 @@ arm_option_reconfigure_globals (void)
arm_arch_thumb1 = bitmap_bit_p (arm_active_target.isa, isa_bit_thumb);
arm_arch_thumb2 = bitmap_bit_p (arm_active_target.isa, isa_bit_thumb2);
arm_arch_xscale = bitmap_bit_p (arm_active_target.isa, isa_bit_xscale);
- arm_arch_iwmmxt = bitmap_bit_p (arm_active_target.isa, isa_bit_iwmmxt);
- arm_arch_iwmmxt2 = bitmap_bit_p (arm_active_target.isa, isa_bit_iwmmxt2);
arm_arch_thumb_hwdiv = bitmap_bit_p (arm_active_target.isa, isa_bit_tdiv);
arm_arch_arm_hwdiv = bitmap_bit_p (arm_active_target.isa, isa_bit_adiv);
arm_arch_crc = bitmap_bit_p (arm_active_target.isa, isa_bit_crc32);
@@ -3997,12 +3980,6 @@ arm_options_perform_arch_sanity_checks (void)
if (arm_arch5t)
target_flags &= ~MASK_INTERWORK;
- if (TARGET_IWMMXT && !ARM_DOUBLEWORD_ALIGN)
- error ("iwmmxt requires an AAPCS compatible ABI for proper operation");
-
- if (TARGET_IWMMXT_ABI && !TARGET_IWMMXT)
- error ("iwmmxt abi requires an iwmmxt capable cpu");
-
/* BPABI targets use linker tricks to allow interworking on cores
without thumb support. */
if (TARGET_INTERWORK
@@ -4043,9 +4020,7 @@ arm_options_perform_arch_sanity_checks (void)
if (TARGET_AAPCS_BASED)
{
- if (arm_abi == ARM_ABI_IWMMXT)
- arm_pcs_default = ARM_PCS_AAPCS_IWMMXT;
- else if (TARGET_HARD_FLOAT_ABI)
+ if (TARGET_HARD_FLOAT_ABI)
{
arm_pcs_default = ARM_PCS_AAPCS_VFP;
if (!bitmap_bit_p (arm_active_target.isa, isa_bit_vfpv2)
@@ -4555,11 +4530,6 @@ use_return_insn (int iscond, rtx sibling)
if (reg_needs_saving_p (regno))
return 0;
- if (TARGET_REALLY_IWMMXT)
- for (regno = FIRST_IWMMXT_REGNUM; regno <= LAST_IWMMXT_REGNUM; regno++)
- if (reg_needs_saving_p (regno))
- return 0;
-
return 1;
}
@@ -6048,9 +6018,6 @@ arm_libcall_value_1 (machine_mode mode)
{
if (TARGET_AAPCS_BASED)
return aapcs_libcall_value (mode);
- else if (TARGET_IWMMXT_ABI
- && arm_vector_mode_supported_p (mode))
- return gen_rtx_REG (mode, FIRST_IWMMXT_REGNUM);
else
return gen_rtx_REG (mode, ARG_REGISTER (1));
}
@@ -6083,9 +6050,7 @@ arm_function_value_regno_p (const unsigned int regno)
|| (TARGET_32BIT
&& TARGET_AAPCS_BASED
&& TARGET_HARD_FLOAT
- && regno == FIRST_VFP_REGNUM)
- || (TARGET_IWMMXT_ABI
- && regno == FIRST_IWMMXT_REGNUM))
+ && regno == FIRST_VFP_REGNUM))
return true;
return false;
@@ -6102,8 +6067,6 @@ arm_apply_result_size (void)
{
if (TARGET_HARD_FLOAT_ABI)
size += 32;
- if (TARGET_IWMMXT_ABI)
- size += 8;
}
return size;
@@ -6265,7 +6228,6 @@ const struct pcs_attribute_arg
#if 0
/* We could recognize these, but changes would be needed elsewhere
* to implement them. */
- {"aapcs-iwmmxt", ARM_PCS_AAPCS_IWMMXT},
{"atpcs", ARM_PCS_ATPCS},
{"apcs", ARM_PCS_APCS},
#endif
@@ -7195,26 +7157,12 @@ arm_init_cumulative_args (CUMULATIVE_ARGS *pcum, tree fntype,
/* On the ARM, the offset starts at 0. */
pcum->nregs = 0;
- pcum->iwmmxt_nregs = 0;
pcum->can_split = true;
/* Varargs vectors are treated the same as long long.
named_count avoids having to change the way arm handles 'named' */
pcum->named_count = 0;
pcum->nargs = 0;
-
- if (TARGET_REALLY_IWMMXT && fntype)
- {
- tree fn_arg;
-
- for (fn_arg = TYPE_ARG_TYPES (fntype);
- fn_arg;
- fn_arg = TREE_CHAIN (fn_arg))
- pcum->named_count += 1;
-
- if (! pcum->named_count)
- pcum->named_count = INT_MAX;
- }
}
/* Return 2 if double word alignment is required for argument passing,
@@ -7308,22 +7256,6 @@ arm_function_arg (cumulative_args_t pcum_v, const function_arg_info &arg)
return pcum->aapcs_reg;
}
- /* Varargs vectors are treated the same as long long.
- named_count avoids having to change the way arm handles 'named' */
- if (TARGET_IWMMXT_ABI
- && arm_vector_mode_supported_p (arg.mode)
- && pcum->named_count > pcum->nargs + 1)
- {
- if (pcum->iwmmxt_nregs <= 9)
- return gen_rtx_REG (arg.mode,
- pcum->iwmmxt_nregs + FIRST_IWMMXT_REGNUM);
- else
- {
- pcum->can_split = false;
- return NULL_RTX;
- }
- }
-
/* Put doubleword aligned quantities in even register pairs. */
if ((pcum->nregs & 1) && ARM_DOUBLEWORD_ALIGN)
{
@@ -7383,9 +7315,6 @@ arm_arg_partial_bytes (cumulative_args_t pcum_v, const function_arg_info &arg)
return pcum->aapcs_partial;
}
- if (TARGET_IWMMXT_ABI && arm_vector_mode_supported_p (arg.mode))
- return 0;
-
if (NUM_ARG_REGS > nregs
&& (NUM_ARG_REGS < nregs + ARM_NUM_REGS2 (arg.mode, arg.type))
&& pcum->can_split)
@@ -7422,12 +7351,7 @@ arm_function_arg_advance (cumulative_args_t pcum_v,
else
{
pcum->nargs += 1;
- if (arm_vector_mode_supported_p (arg.mode)
- && pcum->named_count > pcum->nargs
- && TARGET_IWMMXT_ABI)
- pcum->iwmmxt_nregs += 1;
- else
- pcum->nregs += ARM_NUM_REGS2 (arg.mode, arg.type);
+ pcum->nregs += ARM_NUM_REGS2 (arg.mode, arg.type);
}
}
@@ -8906,12 +8830,6 @@ arm_legitimate_index_p (machine_mode mode, rtx index, RTX_CODE outer,
&& INTVAL (index) > -1024
&& (INTVAL (index) & 3) == 0);
- if (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (mode))
- return (code == CONST_INT
- && INTVAL (index) < 1024
- && INTVAL (index) > -1024
- && (INTVAL (index) & 3) == 0);
-
if (GET_MODE_SIZE (mode) <= 4
&& ! (arm_arch4
&& (mode == HImode
@@ -8991,17 +8909,6 @@ thumb2_legitimate_index_p (machine_mode mode, rtx index, int strict_p)
&& INTVAL (index) > -256
&& (INTVAL (index) & 3) == 0);
- if (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (mode))
- {
- /* For DImode assume values will usually live in core regs
- and only allow LDRD addressing modes. */
- if (!TARGET_LDRD || mode != DImode)
- return (code == CONST_INT
- && INTVAL (index) < 1024
- && INTVAL (index) > -1024
- && (INTVAL (index) & 3) == 0);
- }
-
/* For quad modes, we restrict the constant offset to be slightly less
than what the instruction format permits. We do this because for
quad mode moves, we will actually decompose them into two separate
@@ -12463,11 +12370,6 @@ arm_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
if ((IS_VFP_CLASS (from) && !IS_VFP_CLASS (to))
|| (!IS_VFP_CLASS (from) && IS_VFP_CLASS (to)))
return 15;
- else if ((from == IWMMXT_REGS && to != IWMMXT_REGS)
- || (from != IWMMXT_REGS && to == IWMMXT_REGS))
- return 4;
- else if (from == IWMMXT_GR_REGS || to == IWMMXT_GR_REGS)
- return 20;
else
return 2;
}
@@ -17583,8 +17485,7 @@ struct minipool_node
rtx value;
/* The mode of value. */
machine_mode mode;
- /* The size of the value. With iWMMXt enabled
- sizes > 4 also imply an alignment of 8-bytes. */
+ /* The size of the value. */
int fix_size;
};
@@ -20247,9 +20148,7 @@ output_move_double (rtx *operands, bool emit, int *count)
}
else
{
- /* Use a single insn if we can.
- FIXME: IWMMXT allows offsets larger than ldrd can
- handle, fix these up with a pair of ldr. */
+ /* Use a single insn if we can. */
if (can_ldrd
&& (TARGET_THUMB2
|| !CONST_INT_P (otherops[2])
@@ -20274,9 +20173,7 @@ output_move_double (rtx *operands, bool emit, int *count)
}
else
{
- /* Use a single insn if we can.
- FIXME: IWMMXT allows offsets larger than ldrd can handle,
- fix these up with a pair of ldr. */
+ /* Use a single insn if we can. */
if (can_ldrd
&& (TARGET_THUMB2
|| !CONST_INT_P (otherops[2])
@@ -20514,8 +20411,6 @@ output_move_double (rtx *operands, bool emit, int *count)
otherops[1] = XEXP (XEXP (XEXP (operands[0], 0), 1), 0);
otherops[2] = XEXP (XEXP (XEXP (operands[0], 0), 1), 1);
- /* IWMMXT allows offsets larger than strd can handle,
- fix these up with a pair of str. */
if (!TARGET_THUMB2
&& CONST_INT_P (otherops[2])
&& (INTVAL(otherops[2]) <= -256
@@ -21452,34 +21347,6 @@ arm_compute_save_core_reg_mask (void)
if (cfun->machine->lr_save_eliminated)
save_reg_mask &= ~ (1 << LR_REGNUM);
- if (TARGET_REALLY_IWMMXT
- && ((bit_count (save_reg_mask)
- + ARM_NUM_INTS (crtl->args.pretend_args_size +
- arm_compute_static_chain_stack_bytes())
- ) % 2) != 0)
- {
- /* The total number of registers that are going to be pushed
- onto the stack is odd. We need to ensure that the stack
- is 64-bit aligned before we start to save iWMMXt registers,
- and also before we start to create locals. (A local variable
- might be a double or long long which we will load/store using
- an iWMMXt instruction). Therefore we need to push another
- ARM register, so that the stack will be 64-bit aligned. We
- try to avoid using the arg registers (r0 -r3) as they might be
- used to pass values in a tail call. */
- for (reg = 4; reg <= 12; reg++)
- if ((save_reg_mask & (1 << reg)) == 0)
- break;
-
- if (reg <= 12)
- save_reg_mask |= (1 << reg);
- else
- {
- cfun->machine->sibcall_blocked = 1;
- save_reg_mask |= (1 << 3);
- }
- }
-
/* We may need to push an additional register for use initializing the
PIC base register. */
if (TARGET_THUMB2 && IS_NESTED (func_type) && flag_pic
@@ -21687,19 +21554,17 @@ output_return_instruction (rtx operand, bool really_return, bool reverse,
if ((live_regs_mask & (1 << IP_REGNUM)) == (1 << IP_REGNUM))
{
- /* There are three possible reasons for the IP register
- being saved. 1) a stack frame was created, in which case
- IP contains the old stack pointer, or 2) an ISR routine
- corrupted it, or 3) it was saved to align the stack on
- iWMMXt. In case 1, restore IP into SP, otherwise just
- restore IP. */
+ /* There are two possible reasons for the IP register being saved.
+ 1) a stack frame was created, in which case IP contains the old
+ stack pointer, or 2) an ISR routine corrupted it. In case 1,
+ restore IP into SP, otherwise just restore IP. */
if (frame_pointer_needed)
{
live_regs_mask &= ~ (1 << IP_REGNUM);
live_regs_mask |= (1 << SP_REGNUM);
}
else
- gcc_assert (IS_INTERRUPT (func_type) || TARGET_REALLY_IWMMXT);
+ gcc_assert (IS_INTERRUPT (func_type));
}
/* On some ARM architectures it is faster to use LDR rather than
@@ -23151,8 +23016,6 @@ arm_compute_frame_layout (void)
if (TARGET_32BIT)
{
- unsigned int regno;
-
offsets->saved_regs_mask = arm_compute_save_core_reg_mask ();
core_saved = bit_count (offsets->saved_regs_mask) * 4;
saved = core_saved;
@@ -23161,16 +23024,6 @@ arm_compute_frame_layout (void)
preserve that condition at any subroutine call. We also require the
soft frame pointer to be doubleword aligned. */
- if (TARGET_REALLY_IWMMXT)
- {
- /* Check for the call-saved iWMMXt registers. */
- for (regno = FIRST_IWMMXT_REGNUM;
- regno <= LAST_IWMMXT_REGNUM;
- regno++)
- if (reg_needs_saving_p (regno))
- saved += 8;
- }
-
func_type = arm_current_func_type ();
/* Space for saved VFP registers. */
if (! IS_VOLATILE (func_type)
@@ -23386,18 +23239,6 @@ arm_save_coproc_regs(void)
int saved_size = 0;
unsigned reg;
unsigned start_reg;
- rtx insn;
-
- if (TARGET_REALLY_IWMMXT)
- for (reg = LAST_IWMMXT_REGNUM; reg >= FIRST_IWMMXT_REGNUM; reg--)
- if (reg_needs_saving_p (reg))
- {
- insn = gen_rtx_PRE_DEC (Pmode, stack_pointer_rtx);
- insn = gen_rtx_MEM (V2SImode, insn);
- insn = emit_set_insn (insn, gen_rtx_REG (V2SImode, reg));
- RTX_FRAME_RELATED_P (insn) = 1;
- saved_size += 8;
- }
if (TARGET_VFP_BASE)
{
@@ -24556,42 +24397,9 @@ arm_print_operand (FILE *stream, rtx x, int code)
return;
case 'U':
- if (!REG_P (x)
- || REGNO (x) < FIRST_IWMMXT_GR_REGNUM
- || REGNO (x) > LAST_IWMMXT_GR_REGNUM)
- /* Bad value for wCG register number. */
- {
- output_operand_lossage ("invalid operand for code '%c'", code);
- return;
- }
-
- else
- fprintf (stream, "%d", REGNO (x) - FIRST_IWMMXT_GR_REGNUM);
- return;
-
- /* Print an iWMMXt control register name. */
case 'w':
- if (!CONST_INT_P (x)
- || INTVAL (x) < 0
- || INTVAL (x) >= 16)
- /* Bad value for wC register number. */
- {
- output_operand_lossage ("invalid operand for code '%c'", code);
- return;
- }
-
- else
- {
- static const char * wc_reg_names [16] =
- {
- "wCID", "wCon", "wCSSF", "wCASF",
- "wC4", "wC5", "wC6", "wC7",
- "wCGR0", "wCGR1", "wCGR2", "wCGR3",
- "wC12", "wC13", "wC14", "wC15"
- };
-
- fputs (wc_reg_names [INTVAL (x)], stream);
- }
+ /* Former iWMMXT support, removed after GCC-15. */
+ output_operand_lossage ("obsolete iWMMXT format code '%c'", code);
return;
/* Print the high single-precision register of a VFP double-precision
@@ -25926,15 +25734,6 @@ arm_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
return false;
}
- if (TARGET_REALLY_IWMMXT)
- {
- if (IS_IWMMXT_GR_REGNUM (regno))
- return mode == SImode;
-
- if (IS_IWMMXT_REGNUM (regno))
- return VALID_IWMMXT_REG_MODE (mode);
- }
-
/* We allow almost any value to be stored in the general registers.
Restrict doubleword quantities to even register pairs in ARM state
so that we can use ldrd. The same restriction applies for MVE
@@ -26040,12 +25839,6 @@ arm_regno_class (int regno)
return VFP_HI_REGS;
}
- if (IS_IWMMXT_REGNUM (regno))
- return IWMMXT_REGS;
-
- if (IS_IWMMXT_GR_REGNUM (regno))
- return IWMMXT_GR_REGS;
-
return NO_REGS;
}
@@ -27963,27 +27756,6 @@ arm_expand_epilogue_apcs_frame (bool really_return)
gen_rtx_REG (SImode, IP_REGNUM));
}
- if (TARGET_IWMMXT)
- {
- /* The frame pointer is guaranteed to be non-double-word aligned, as
- it is set to double-word-aligned old_stack_pointer - 4. */
- rtx_insn *insn;
- int lrm_count = (num_regs % 2) ? (num_regs + 2) : (num_regs + 1);
-
- for (i = LAST_IWMMXT_REGNUM; i >= FIRST_IWMMXT_REGNUM; i--)
- if (reg_needs_saving_p (i))
- {
- rtx addr = gen_frame_mem (V2SImode,
- plus_constant (Pmode, hard_frame_pointer_rtx,
- - lrm_count * 4));
- insn = emit_insn (gen_movsi (gen_rtx_REG (V2SImode, i), addr));
- REG_NOTES (insn) = alloc_reg_note (REG_CFA_RESTORE,
- gen_rtx_REG (V2SImode, i),
- NULL_RTX);
- lrm_count += 2;
- }
- }
-
/* saved_regs_mask should contain IP which contains old stack pointer
at the time of activation creation. Since SP and IP are adjacent registers,
we can restore the value directly into SP. */
@@ -28196,23 +27968,6 @@ arm_expand_epilogue (bool really_return)
stack_pointer_rtx);
}
- if (TARGET_IWMMXT)
- for (i = FIRST_IWMMXT_REGNUM; i <= LAST_IWMMXT_REGNUM; i++)
- if (reg_needs_saving_p (i))
- {
- rtx_insn *insn;
- rtx addr = gen_rtx_MEM (V2SImode,
- gen_rtx_POST_INC (SImode,
- stack_pointer_rtx));
- set_mem_alias_set (addr, get_frame_alias_set ());
- insn = emit_insn (gen_movsi (gen_rtx_REG (V2SImode, i), addr));
- REG_NOTES (insn) = alloc_reg_note (REG_CFA_RESTORE,
- gen_rtx_REG (V2SImode, i),
- NULL_RTX);
- arm_add_cfa_adjust_cfa_note (insn, UNITS_PER_WORD,
- stack_pointer_rtx, stack_pointer_rtx);
- }
-
if (saved_regs_mask)
{
rtx insn;
@@ -29853,7 +29608,7 @@ arm_vector_mode_supported_p (machine_mode mode)
|| mode == V8BFmode))
return true;
- if ((TARGET_NEON || TARGET_IWMMXT)
+ if (TARGET_NEON
&& ((mode == V2SImode)
|| (mode == V4HImode)
|| (mode == V8QImode)))
@@ -29945,19 +29700,6 @@ arm_preferred_simd_mode (scalar_mode mode)
default:;
}
- if (TARGET_REALLY_IWMMXT)
- switch (mode)
- {
- case E_SImode:
- return V2SImode;
- case E_HImode:
- return V4HImode;
- case E_QImode:
- return V8QImode;
-
- default:;
- }
-
if (TARGET_HAVE_MVE)
switch (mode)
{
@@ -30039,12 +29781,6 @@ arm_debugger_regno (unsigned int regno)
return 256 + (regno - FIRST_VFP_REGNUM) / 2;
}
- if (IS_IWMMXT_GR_REGNUM (regno))
- return 104 + regno - FIRST_IWMMXT_GR_REGNUM;
-
- if (IS_IWMMXT_REGNUM (regno))
- return 112 + regno - FIRST_IWMMXT_REGNUM;
-
if (IS_PAC_REGNUM (regno))
return DWARF_PAC_REGNUM;
@@ -30631,95 +30367,6 @@ arm_output_shift(rtx * operands, int set_flags)
return "";
}
-/* Output assembly for a WMMX immediate shift instruction. */
-const char *
-arm_output_iwmmxt_shift_immediate (const char *insn_name, rtx *operands, bool wror_or_wsra)
-{
- int shift = INTVAL (operands[2]);
- char templ[50];
- machine_mode opmode = GET_MODE (operands[0]);
-
- gcc_assert (shift >= 0);
-
- /* If the shift value in the register versions is > 63 (for D qualifier),
- 31 (for W qualifier) or 15 (for H qualifier). */
- if (((opmode == V4HImode) && (shift > 15))
- || ((opmode == V2SImode) && (shift > 31))
- || ((opmode == DImode) && (shift > 63)))
- {
- if (wror_or_wsra)
- {
- sprintf (templ, "%s\t%%0, %%1, #%d", insn_name, 32);
- output_asm_insn (templ, operands);
- if (opmode == DImode)
- {
- sprintf (templ, "%s\t%%0, %%0, #%d", insn_name, 32);
- output_asm_insn (templ, operands);
- }
- }
- else
- {
- /* The destination register will contain all zeros. */
- sprintf (templ, "wzero\t%%0");
- output_asm_insn (templ, operands);
- }
- return "";
- }
-
- if ((opmode == DImode) && (shift > 32))
- {
- sprintf (templ, "%s\t%%0, %%1, #%d", insn_name, 32);
- output_asm_insn (templ, operands);
- sprintf (templ, "%s\t%%0, %%0, #%d", insn_name, shift - 32);
- output_asm_insn (templ, operands);
- }
- else
- {
- sprintf (templ, "%s\t%%0, %%1, #%d", insn_name, shift);
- output_asm_insn (templ, operands);
- }
- return "";
-}
-
-/* Output assembly for a WMMX tinsr instruction. */
-const char *
-arm_output_iwmmxt_tinsr (rtx *operands)
-{
- int mask = INTVAL (operands[3]);
- int i;
- char templ[50];
- int units = mode_nunits[GET_MODE (operands[0])];
- gcc_assert ((mask & (mask - 1)) == 0);
- for (i = 0; i < units; ++i)
- {
- if ((mask & 0x01) == 1)
- {
- break;
- }
- mask >>= 1;
- }
- gcc_assert (i < units);
- {
- switch (GET_MODE (operands[0]))
- {
- case E_V8QImode:
- sprintf (templ, "tinsrb%%?\t%%0, %%2, #%d", i);
- break;
- case E_V4HImode:
- sprintf (templ, "tinsrh%%?\t%%0, %%2, #%d", i);
- break;
- case E_V2SImode:
- sprintf (templ, "tinsrw%%?\t%%0, %%2, #%d", i);
- break;
- default:
- gcc_unreachable ();
- break;
- }
- output_asm_insn (templ, operands);
- }
- return "";
-}
-
/* Output an arm casesi dispatch sequence. Used by arm_casesi_internal insn.
Responsible for the handling of switch statements in arm. */
const char *
@@ -31092,26 +30739,6 @@ arm_conditional_register_usage (void)
fixed_regs[VPR_REGNUM] = 0;
}
- if (TARGET_REALLY_IWMMXT && !TARGET_GENERAL_REGS_ONLY)
- {
- regno = FIRST_IWMMXT_GR_REGNUM;
- /* The 2002/10/09 revision of the XScale ABI has wCG0
- and wCG1 as call-preserved registers. The 2002/11/21
- revision changed this so that all wCG registers are
- scratch registers. */
- for (regno = FIRST_IWMMXT_GR_REGNUM;
- regno <= LAST_IWMMXT_GR_REGNUM; ++ regno)
- fixed_regs[regno] = 0;
- /* The XScale ABI has wR0 - wR9 as scratch registers,
- the rest as call-preserved registers. */
- for (regno = FIRST_IWMMXT_REGNUM;
- regno <= LAST_IWMMXT_REGNUM; ++ regno)
- {
- fixed_regs[regno] = 0;
- call_used_regs[regno] = regno < FIRST_IWMMXT_REGNUM + 10;
- }
- }
-
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
{
fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 08d3f0d..2e9d678 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -137,13 +137,6 @@ emission of floating point pcs attributes. */
#define TARGET_MAYBE_HARD_FLOAT (arm_float_abi != ARM_FLOAT_ABI_SOFT)
/* Use hardware floating point calling convention. */
#define TARGET_HARD_FLOAT_ABI (arm_float_abi == ARM_FLOAT_ABI_HARD)
-#define TARGET_IWMMXT (arm_arch_iwmmxt)
-#define TARGET_IWMMXT2 (arm_arch_iwmmxt2)
-#define TARGET_REALLY_IWMMXT (TARGET_IWMMXT && TARGET_32BIT \
- && !TARGET_GENERAL_REGS_ONLY)
-#define TARGET_REALLY_IWMMXT2 (TARGET_IWMMXT2 && TARGET_32BIT \
- && !TARGET_GENERAL_REGS_ONLY)
-#define TARGET_IWMMXT_ABI (TARGET_32BIT && arm_abi == ARM_ABI_IWMMXT)
#define TARGET_ARM (! TARGET_THUMB)
#define TARGET_EITHER 1 /* (TARGET_ARM | TARGET_THUMB) */
#define TARGET_BACKTRACE (crtl->is_leaf \
@@ -526,12 +519,6 @@ extern int arm_ld_sched;
/* Nonzero if this chip is a StrongARM. */
extern int arm_tune_strongarm;
-/* Nonzero if this chip supports Intel XScale with Wireless MMX technology. */
-extern int arm_arch_iwmmxt;
-
-/* Nonzero if this chip supports Intel Wireless MMX2 technology. */
-extern int arm_arch_iwmmxt2;
-
/* Nonzero if this chip is an XScale. */
extern int arm_arch_xscale;
@@ -855,10 +842,6 @@ extern const int arm_arch_cde_coproc_bits[];
1,1,1,1,1,1,1,1, \
1,1,1,1,1,1,1,1, \
1,1,1,1,1,1,1,1, \
- /* IWMMXT regs. */ \
- 1,1,1,1,1,1,1,1, \
- 1,1,1,1,1,1,1,1, \
- 1,1,1,1, \
/* Specials. */ \
1,1,1,1,1,1,1,1 \
}
@@ -885,10 +868,6 @@ extern const int arm_arch_cde_coproc_bits[];
1,1,1,1,1,1,1,1, \
1,1,1,1,1,1,1,1, \
1,1,1,1,1,1,1,1, \
- /* IWMMXT regs. */ \
- 1,1,1,1,1,1,1,1, \
- 1,1,1,1,1,1,1,1, \
- 1,1,1,1, \
/* Specials. */ \
1,1,1,1,1,1,1,1 \
}
@@ -1010,23 +989,11 @@ extern const int arm_arch_cde_coproc_bits[];
/* Register to use for pushing function arguments. */
#define STACK_POINTER_REGNUM SP_REGNUM
-#define FIRST_IWMMXT_REGNUM (LAST_HI_VFP_REGNUM + 1)
-#define LAST_IWMMXT_REGNUM (FIRST_IWMMXT_REGNUM + 15)
-
-/* Need to sync with WCGR in iwmmxt.md. */
-#define FIRST_IWMMXT_GR_REGNUM (LAST_IWMMXT_REGNUM + 1)
-#define LAST_IWMMXT_GR_REGNUM (FIRST_IWMMXT_GR_REGNUM + 3)
-
-#define IS_IWMMXT_REGNUM(REGNUM) \
- (((REGNUM) >= FIRST_IWMMXT_REGNUM) && ((REGNUM) <= LAST_IWMMXT_REGNUM))
-#define IS_IWMMXT_GR_REGNUM(REGNUM) \
- (((REGNUM) >= FIRST_IWMMXT_GR_REGNUM) && ((REGNUM) <= LAST_IWMMXT_GR_REGNUM))
-
/* Base register for access to local variables of the function. */
-#define FRAME_POINTER_REGNUM 102
+#define FRAME_POINTER_REGNUM (CC_REGNUM + 2)
/* Base register for access to arguments of the function. */
-#define ARG_POINTER_REGNUM 103
+#define ARG_POINTER_REGNUM (FRAME_POINTER_REGNUM + 1)
#define FIRST_VFP_REGNUM 16
#define D7_VFP_REGNUM (FIRST_VFP_REGNUM + 15)
@@ -1067,9 +1034,8 @@ extern const int arm_arch_cde_coproc_bits[];
/* The number of hard registers is 16 ARM + 1 CC + 1 SFP + 1 AFP
+ 1 APSRQ + 1 APSRGE + 1 VPR + 1 Pseudo register to save PAC. */
-/* Intel Wireless MMX Technology registers add 16 + 4 more. */
/* VFP (VFP3) adds 32 (64) + 1 VFPCC. */
-#define FIRST_PSEUDO_REGISTER 108
+#define FIRST_PSEUDO_REGISTER 88
#define DWARF_PAC_REGNUM 143
@@ -1086,9 +1052,6 @@ extern const int arm_arch_cde_coproc_bits[];
#define SUBTARGET_FRAME_POINTER_REQUIRED 0
#endif
-#define VALID_IWMMXT_REG_MODE(MODE) \
- (arm_vector_mode_supported_p (MODE) || (MODE) == DImode)
-
/* Modes valid for Neon D registers. */
#define VALID_NEON_DREG_MODE(MODE) \
((MODE) == V2SImode || (MODE) == V4HImode || (MODE) == V8QImode \
@@ -1168,9 +1131,9 @@ extern const int arm_arch_cde_coproc_bits[];
/* The conditions under which vector modes are supported for general
arithmetic by any vector extension. */
-#define ARM_HAVE_V8QI_ARITH (ARM_HAVE_NEON_V8QI_ARITH || TARGET_REALLY_IWMMXT)
-#define ARM_HAVE_V4HI_ARITH (ARM_HAVE_NEON_V4HI_ARITH || TARGET_REALLY_IWMMXT)
-#define ARM_HAVE_V2SI_ARITH (ARM_HAVE_NEON_V2SI_ARITH || TARGET_REALLY_IWMMXT)
+#define ARM_HAVE_V8QI_ARITH (ARM_HAVE_NEON_V8QI_ARITH)
+#define ARM_HAVE_V4HI_ARITH (ARM_HAVE_NEON_V4HI_ARITH)
+#define ARM_HAVE_V2SI_ARITH (ARM_HAVE_NEON_V2SI_ARITH)
#define ARM_HAVE_V16QI_ARITH (ARM_HAVE_NEON_V16QI_ARITH || TARGET_HAVE_MVE)
#define ARM_HAVE_V8HI_ARITH (ARM_HAVE_NEON_V8HI_ARITH || TARGET_HAVE_MVE)
@@ -1204,9 +1167,9 @@ extern const int arm_arch_cde_coproc_bits[];
/* The conditions under which vector modes are supported by load/store
instructions by any vector extension. */
-#define ARM_HAVE_V8QI_LDST (ARM_HAVE_NEON_V8QI_LDST || TARGET_REALLY_IWMMXT)
-#define ARM_HAVE_V4HI_LDST (ARM_HAVE_NEON_V4HI_LDST || TARGET_REALLY_IWMMXT)
-#define ARM_HAVE_V2SI_LDST (ARM_HAVE_NEON_V2SI_LDST || TARGET_REALLY_IWMMXT)
+#define ARM_HAVE_V8QI_LDST (ARM_HAVE_NEON_V8QI_LDST)
+#define ARM_HAVE_V4HI_LDST (ARM_HAVE_NEON_V4HI_LDST)
+#define ARM_HAVE_V2SI_LDST (ARM_HAVE_NEON_V2SI_LDST)
#define ARM_HAVE_V16QI_LDST (ARM_HAVE_NEON_V16QI_LDST || TARGET_HAVE_MVE)
#define ARM_HAVE_V8HI_LDST (ARM_HAVE_NEON_V8HI_LDST || TARGET_HAVE_MVE)
@@ -1238,8 +1201,6 @@ extern int arm_regs_in_sequence[];
function. */
#define VREG(X) (FIRST_VFP_REGNUM + (X))
-#define WREG(X) (FIRST_IWMMXT_REGNUM + (X))
-#define WGREG(X) (FIRST_IWMMXT_GR_REGNUM + (X))
#define REG_ALLOC_ORDER \
{ \
@@ -1265,12 +1226,6 @@ extern int arm_regs_in_sequence[];
VREG(20), VREG(21), VREG(22), VREG(23), \
VREG(24), VREG(25), VREG(26), VREG(27), \
VREG(28), VREG(29), VREG(30), VREG(31), \
- /* IWMMX registers. */ \
- WREG(0), WREG(1), WREG(2), WREG(3), \
- WREG(4), WREG(5), WREG(6), WREG(7), \
- WREG(8), WREG(9), WREG(10), WREG(11), \
- WREG(12), WREG(13), WREG(14), WREG(15), \
- WGREG(0), WGREG(1), WGREG(2), WGREG(3), \
/* Registers not for general use. */ \
CC_REGNUM, VFPCC_REGNUM, \
FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, \
@@ -1315,8 +1270,6 @@ enum reg_class
VFP_LO_REGS,
VFP_HI_REGS,
VFP_REGS,
- IWMMXT_REGS,
- IWMMXT_GR_REGS,
CC_REG,
VFPCC_REG,
SFP_REG,
@@ -1346,8 +1299,6 @@ enum reg_class
"VFP_LO_REGS", \
"VFP_HI_REGS", \
"VFP_REGS", \
- "IWMMXT_REGS", \
- "IWMMXT_GR_REGS", \
"CC_REG", \
"VFPCC_REG", \
"SFP_REG", \
@@ -1363,29 +1314,27 @@ enum reg_class
of length N_REG_CLASSES. */
#define REG_CLASS_CONTENTS \
{ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */ \
- { 0x000000FF, 0x00000000, 0x00000000, 0x00000000 }, /* LO_REGS */ \
- { 0x00002000, 0x00000000, 0x00000000, 0x00000000 }, /* STACK_REG */ \
- { 0x000020FF, 0x00000000, 0x00000000, 0x00000000 }, /* BASE_REGS */ \
- { 0x00005F00, 0x00000000, 0x00000000, 0x00000000 }, /* HI_REGS */ \
- { 0x0000100F, 0x00000000, 0x00000000, 0x00000000 }, /* CALLER_SAVE_REGS */ \
- { 0x00005555, 0x00000000, 0x00000000, 0x00000000 }, /* EVEN_REGS. */ \
- { 0x00005FFF, 0x00000000, 0x00000000, 0x00000000 }, /* GENERAL_REGS */ \
- { 0x00007FFF, 0x00000000, 0x00000000, 0x00000000 }, /* CORE_REGS */ \
- { 0xFFFF0000, 0x00000000, 0x00000000, 0x00000000 }, /* VFP_D0_D7_REGS */ \
- { 0xFFFF0000, 0x0000FFFF, 0x00000000, 0x00000000 }, /* VFP_LO_REGS */ \
- { 0x00000000, 0xFFFF0000, 0x0000FFFF, 0x00000000 }, /* VFP_HI_REGS */ \
- { 0xFFFF0000, 0xFFFFFFFF, 0x0000FFFF, 0x00000000 }, /* VFP_REGS */ \
- { 0x00000000, 0x00000000, 0xFFFF0000, 0x00000000 }, /* IWMMXT_REGS */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x0000000F }, /* IWMMXT_GR_REGS */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000010 }, /* CC_REG */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000020 }, /* VFPCC_REG */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000040 }, /* SFP_REG */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000080 }, /* AFP_REG */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000400 }, /* VPR_REG. */ \
- { 0x00000000, 0x00000000, 0x00000000, 0x00000800 }, /* PAC_REG. */ \
- { 0x00005FFF, 0x00000000, 0x00000000, 0x00000400 }, /* GENERAL_AND_VPR_REGS. */ \
- { 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000040F } /* ALL_REGS. */ \
+ { 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */ \
+ { 0x000000FF, 0x00000000, 0x00000000 }, /* LO_REGS */ \
+ { 0x00002000, 0x00000000, 0x00000000 }, /* STACK_REG */ \
+ { 0x000020FF, 0x00000000, 0x00000000 }, /* BASE_REGS */ \
+ { 0x00005F00, 0x00000000, 0x00000000 }, /* HI_REGS */ \
+ { 0x0000100F, 0x00000000, 0x00000000 }, /* CALLER_SAVE_REGS */ \
+ { 0x00005555, 0x00000000, 0x00000000 }, /* EVEN_REGS. */ \
+ { 0x00005FFF, 0x00000000, 0x00000000 }, /* GENERAL_REGS */ \
+ { 0x00007FFF, 0x00000000, 0x00000000 }, /* CORE_REGS */ \
+ { 0xFFFF0000, 0x00000000, 0x00000000 }, /* VFP_D0_D7_REGS */ \
+ { 0xFFFF0000, 0x0000FFFF, 0x00000000 }, /* VFP_LO_REGS */ \
+ { 0x00000000, 0xFFFF0000, 0x0000FFFF }, /* VFP_HI_REGS */ \
+ { 0xFFFF0000, 0xFFFFFFFF, 0x0000FFFF }, /* VFP_REGS */ \
+ { 0x00000000, 0x00000000, 0x00010000 }, /* CC_REG */ \
+ { 0x00000000, 0x00000000, 0x00020000 }, /* VFPCC_REG */ \
+ { 0x00000000, 0x00000000, 0x00040000 }, /* SFP_REG */ \
+ { 0x00000000, 0x00000000, 0x00080000 }, /* AFP_REG */ \
+ { 0x00000000, 0x00000000, 0x00400000 }, /* VPR_REG. */ \
+ { 0x00000000, 0x00000000, 0x00800000 }, /* PAC_REG. */ \
+ { 0x00005FFF, 0x00000000, 0x00400000 }, /* GENERAL_AND_VPR_REGS. */ \
+ { 0xFFFF7FFF, 0xFFFFFFFF, 0x0040FFFF } /* ALL_REGS. */ \
}
#define FP_SYSREGS \
@@ -1460,39 +1409,34 @@ extern const char *fp_sysreg_names[NB_FP_SYSREGS];
/* Return the register class of a scratch register needed to copy IN into
or out of a register in CLASS in MODE. If it can be done directly,
NO_REGS is returned. */
-#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
- /* Restrict which direct reloads are allowed for VFP/iWMMXt regs. */ \
- ((TARGET_HARD_FLOAT && IS_VFP_CLASS (CLASS)) \
- ? coproc_secondary_reload_class (MODE, X, FALSE) \
- : (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) \
- ? coproc_secondary_reload_class (MODE, X, TRUE) \
- : TARGET_32BIT \
- ? (((MODE) == HImode && ! arm_arch4 && true_regnum (X) == -1) \
- ? GENERAL_REGS : NO_REGS) \
- : THUMB_SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X))
+#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
+ /* Restrict which direct reloads are allowed for VFP regs. */ \
+ ((TARGET_HARD_FLOAT && IS_VFP_CLASS (CLASS)) \
+ ? coproc_secondary_reload_class (MODE, X, FALSE) \
+ : (TARGET_32BIT \
+ ? (((MODE) == HImode && ! arm_arch4 && true_regnum (X) == -1) \
+ ? GENERAL_REGS \
+ : NO_REGS) \
+ : THUMB_SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X)))
/* If we need to load shorts byte-at-a-time, then we need a scratch. */
-#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
- /* Restrict which direct reloads are allowed for VFP/iWMMXt regs. */ \
- ((TARGET_HARD_FLOAT && IS_VFP_CLASS (CLASS)) \
- ? coproc_secondary_reload_class (MODE, X, FALSE) : \
- (TARGET_IWMMXT && (CLASS) == IWMMXT_REGS) ? \
- coproc_secondary_reload_class (MODE, X, TRUE) : \
- (TARGET_32BIT ? \
- (((CLASS) == IWMMXT_REGS || (CLASS) == IWMMXT_GR_REGS) \
- && CONSTANT_P (X)) \
- ? GENERAL_REGS : \
- (((MODE) == HImode && ! arm_arch4 \
- && (MEM_P (X) \
- || ((REG_P (X) || GET_CODE (X) == SUBREG) \
- && true_regnum (X) == -1))) \
- ? GENERAL_REGS : NO_REGS) \
- : THUMB_SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)))
+#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
+ /* Restrict which direct reloads are allowed for VFP regs. */ \
+ ((TARGET_HARD_FLOAT && IS_VFP_CLASS (CLASS)) \
+ ? coproc_secondary_reload_class (MODE, X, FALSE) \
+ : (TARGET_32BIT \
+ ? (((MODE) == HImode \
+ && ! arm_arch4 \
+ && (MEM_P (X) \
+ || ((REG_P (X) || GET_CODE (X) == SUBREG) \
+ && true_regnum (X) == -1))) \
+ ? GENERAL_REGS \
+ : NO_REGS) \
+ : THUMB_SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X)))
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS.
- ARM regs are UNITS_PER_WORD bits.
- FIXME: Is this true for iWMMX? */
+ ARM regs are UNITS_PER_WORD bits. */
#define CLASS_MAX_NREGS(CLASS, MODE) \
(CLASS == VPR_REG) \
? CEIL (GET_MODE_SIZE (MODE), 2) \
@@ -1672,7 +1616,6 @@ enum arm_pcs
{
ARM_PCS_AAPCS, /* Base standard AAPCS. */
ARM_PCS_AAPCS_VFP, /* Use VFP registers for floating point values. */
- ARM_PCS_AAPCS_IWMMXT, /* Use iWMMXT registers for vectors. */
/* This must be the last AAPCS variant. */
ARM_PCS_AAPCS_LOCAL, /* Private call within this compilation unit. */
ARM_PCS_ATPCS, /* ATPCS. */
@@ -1690,8 +1633,6 @@ typedef struct
{
/* This is the number of registers of arguments scanned so far. */
int nregs;
- /* This is the number of iWMMXt register arguments scanned so far. */
- int iwmmxt_nregs;
int named_count;
int nargs;
/* Which procedure call variant to use for this call. */
@@ -1739,9 +1680,7 @@ typedef struct
#define FUNCTION_ARG_REGNO_P(REGNO) \
(IN_RANGE ((REGNO), 0, 3) \
|| (TARGET_AAPCS_BASED && TARGET_HARD_FLOAT \
- && IN_RANGE ((REGNO), FIRST_VFP_REGNUM, FIRST_VFP_REGNUM + 15)) \
- || (TARGET_IWMMXT_ABI \
- && IN_RANGE ((REGNO), FIRST_IWMMXT_REGNUM, FIRST_IWMMXT_REGNUM + 9)))
+ && IN_RANGE ((REGNO), FIRST_VFP_REGNUM, FIRST_VFP_REGNUM + 15)))
/* If your target environment doesn't prefix user functions with an
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 597ef67..5e5e112 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -37,12 +37,12 @@
(LR_REGNUM 14) ; Return address register
(PC_REGNUM 15) ; Program counter
(LAST_ARM_REGNUM 15) ;
- (CC_REGNUM 100) ; Condition code pseudo register
- (VFPCC_REGNUM 101) ; VFP Condition code pseudo register
- (APSRQ_REGNUM 104) ; Q bit pseudo register
- (APSRGE_REGNUM 105) ; GE bits pseudo register
- (VPR_REGNUM 106) ; Vector Predication Register - MVE register.
- (RA_AUTH_CODE 107) ; Pseudo register to save PAC.
+ (CC_REGNUM 80) ; Condition code pseudo register
+ (VFPCC_REGNUM 81) ; VFP Condition code pseudo register
+ (APSRQ_REGNUM 84) ; Q bit pseudo register
+ (APSRGE_REGNUM 85) ; GE bits pseudo register
+ (VPR_REGNUM 86) ; Vector Predication Register - MVE register.
+ (RA_AUTH_CODE 87) ; Pseudo register to save PAC.
]
)
;; 3rd operand to select_dominance_cc_mode
@@ -149,7 +149,7 @@
; This attribute is used to compute attribute "enabled",
; use type "any" to enable an alternative in all cases.
(define_attr "arch" "any, a, t, 32, t1, t2, v6,nov6, v6t2, \
- v8mb, fix_vlldm, iwmmxt, iwmmxt2, armv6_or_vfpv3, \
+ v8mb, fix_vlldm, armv6_or_vfpv3, \
neon, mve"
(const_string "any"))
@@ -197,10 +197,6 @@
(match_test "fix_vlldm"))
(const_string "yes")
- (and (eq_attr "arch" "iwmmxt2")
- (match_test "TARGET_REALLY_IWMMXT2"))
- (const_string "yes")
-
(and (eq_attr "arch" "armv6_or_vfpv3")
(match_test "arm_arch6 || TARGET_VFP3"))
(const_string "yes")
@@ -362,18 +358,7 @@
alus_ext, alus_imm, alus_sreg,\
alus_shift_imm, alus_shift_reg, bfm, csel, rev, logic_imm, logic_reg,\
logic_shift_imm, logic_shift_reg, logics_imm, logics_reg,\
- logics_shift_imm, logics_shift_reg, extend, shift_imm, float, fcsel,\
- wmmx_wor, wmmx_wxor, wmmx_wand, wmmx_wandn, wmmx_wmov, wmmx_tmcrr,\
- wmmx_tmrrc, wmmx_wldr, wmmx_wstr, wmmx_tmcr, wmmx_tmrc, wmmx_wadd,\
- wmmx_wsub, wmmx_wmul, wmmx_wmac, wmmx_wavg2, wmmx_tinsr, wmmx_textrm,\
- wmmx_wshufh, wmmx_wcmpeq, wmmx_wcmpgt, wmmx_wmax, wmmx_wmin, wmmx_wpack,\
- wmmx_wunpckih, wmmx_wunpckil, wmmx_wunpckeh, wmmx_wunpckel, wmmx_wror,\
- wmmx_wsra, wmmx_wsrl, wmmx_wsll, wmmx_wmadd, wmmx_tmia, wmmx_tmiaph,\
- wmmx_tmiaxy, wmmx_tbcst, wmmx_tmovmsk, wmmx_wacc, wmmx_waligni,\
- wmmx_walignr, wmmx_tandc, wmmx_textrc, wmmx_torc, wmmx_torvsc, wmmx_wsad,\
- wmmx_wabs, wmmx_wabsdiff, wmmx_waddsubhx, wmmx_wsubaddhx, wmmx_wavg4,\
- wmmx_wmulw, wmmx_wqmulm, wmmx_wqmulwm, wmmx_waddbhus, wmmx_wqmiaxy,\
- wmmx_wmiaxy, wmmx_wmiawxy, wmmx_wmerge")
+ logics_shift_imm, logics_shift_reg, extend, shift_imm, float, fcsel")
(const_string "single")
(const_string "multi")))
@@ -435,7 +420,6 @@
(const_string "yes")
(const_string "no"))))
-(include "marvell-f-iwmmxt.md")
(include "arm-generic.md")
(include "arm926ejs.md")
(include "arm1020e.md")
@@ -2893,14 +2877,12 @@
;; Split DImode and, ior, xor operations. Simply perform the logical
;; operation on the upper and lower halves of the registers.
;; This is needed for atomic operations in arm_split_atomic_op.
-;; Avoid splitting IWMMXT instructions.
(define_split
[(set (match_operand:DI 0 "s_register_operand" "")
(match_operator:DI 6 "logical_binary_operator"
[(match_operand:DI 1 "s_register_operand" "")
(match_operand:DI 2 "s_register_operand" "")]))]
- "TARGET_32BIT && reload_completed
- && ! IS_IWMMXT_REGNUM (REGNO (operands[0]))"
+ "TARGET_32BIT && reload_completed"
[(set (match_dup 0) (match_op_dup:SI 6 [(match_dup 1) (match_dup 2)]))
(set (match_dup 3) (match_op_dup:SI 6 [(match_dup 4) (match_dup 5)]))]
"
@@ -6345,7 +6327,6 @@
"TARGET_32BIT
&& !(TARGET_HARD_FLOAT)
&& !(TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT)
- && !TARGET_IWMMXT
&& ( register_operand (operands[0], DImode)
|| register_operand (operands[1], DImode))"
"*
@@ -6554,7 +6535,7 @@
(define_insn "*arm_movsi_insn"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m")
(match_operand:SI 1 "general_operand" "rk, I,K,j,mi,rk"))]
- "TARGET_ARM && !TARGET_IWMMXT && !TARGET_HARD_FLOAT
+ "TARGET_ARM && !TARGET_HARD_FLOAT
&& ( register_operand (operands[0], SImode)
|| register_operand (operands[1], SImode))"
"@
@@ -13123,10 +13104,8 @@
[(set_attr "conds" "unconditional")
(set_attr "type" "nop")])
-;; Vector bits common to IWMMXT, Neon and MVE
+;; Vector bits common to Neon and MVE
(include "vec-common.md")
-;; Load the Intel Wireless Multimedia Extension patterns
-(include "iwmmxt.md")
;; Load the VFP co-processor patterns
(include "vfp.md")
;; Thumb-1 patterns
diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
index 042cb54..d5eeeae 100644
--- a/gcc/config/arm/arm.opt
+++ b/gcc/config/arm/arm.opt
@@ -58,9 +58,6 @@ EnumValue
Enum(arm_abi_type) String(aapcs) Value(ARM_ABI_AAPCS)
EnumValue
-Enum(arm_abi_type) String(iwmmxt) Value(ARM_ABI_IWMMXT)
-
-EnumValue
Enum(arm_abi_type) String(aapcs-linux) Value(ARM_ABI_AAPCS_LINUX)
mabort-on-noreturn
diff --git a/gcc/config/arm/constraints.md b/gcc/config/arm/constraints.md
index 9f1a37a..24743a8 100644
--- a/gcc/config/arm/constraints.md
+++ b/gcc/config/arm/constraints.md
@@ -19,11 +19,12 @@
;; <http://www.gnu.org/licenses/>.
;; The following register constraints have been used:
-;; - in ARM/Thumb-2 state: t, w, x, y, z
+;; - in ARM/Thumb-2 state: t, w, x
;; - in Thumb state: h, b
;; - in both states: l, c, k, q, Cs, Ts, US
;; In ARM state, 'l' is an alias for 'r'
;; 'f' and 'v' were previously used for FPA and MAVERICK registers.
+;; 'y' and 'z' were previously used for iWMMX registers (removed after gcc-15)
;; The following normal constraints have been used:
;; in ARM/Thumb-2 state: G, I, j, J, K, L, M
@@ -39,7 +40,7 @@
;; in all states: Pg
;; The following memory constraints have been used:
-;; in ARM/Thumb-2 state: Uh, Ut, Uv, Uy, Un, Um, Us, Uo, Up, Uf, Ux, Ul, Uz
+;; in ARM/Thumb-2 state: Uh, Ut, Uv, Un, Um, Us, Uo, Up, Uf, Ux, Ul, Uz
;; in ARM state: Uq
;; in Thumb state: Uu, Uw
;; in all states: Q
@@ -112,13 +113,6 @@
(define_register_constraint "x" "TARGET_32BIT ? VFP_D0_D7_REGS : NO_REGS"
"The VFP registers @code{d0}-@code{d7}.")
-(define_register_constraint "y" "TARGET_REALLY_IWMMXT ? IWMMXT_REGS : NO_REGS"
- "The Intel iWMMX co-processor registers.")
-
-(define_register_constraint "z"
- "TARGET_REALLY_IWMMXT ? IWMMXT_GR_REGS : NO_REGS"
- "The Intel iWMMX GR registers.")
-
(define_register_constraint "l" "TARGET_THUMB ? LO_REGS : GENERAL_REGS"
"In Thumb state the core registers @code{r0}-@code{r7}.")
@@ -478,12 +472,6 @@
? arm_coproc_mem_operand_no_writeback (op)
: neon_vector_mem_operand (op, 2, true)")))
-(define_memory_constraint "Uy"
- "@internal
- In ARM/Thumb-2 state a valid iWMMX load/store address."
- (and (match_code "mem")
- (match_test "TARGET_32BIT && arm_coproc_mem_operand (op, TRUE)")))
-
(define_memory_constraint "Un"
"@internal
In ARM/Thumb-2 state a valid address for Neon doubleword vector
diff --git a/gcc/config/arm/iterators.md b/gcc/config/arm/iterators.md
index 743fe48..0c163ed 100644
--- a/gcc/config/arm/iterators.md
+++ b/gcc/config/arm/iterators.md
@@ -59,30 +59,25 @@
;; A list of modes which the VFP unit can handle
(define_mode_iterator SDF [(SF "") (DF "TARGET_VFP_DOUBLE")])
-;; Integer element sizes implemented by IWMMXT.
-(define_mode_iterator VMMX [V2SI V4HI V8QI])
-
-(define_mode_iterator VMMX2 [V4HI V2SI])
-
;; Integer element sizes for shifts.
(define_mode_iterator VSHFT [V4HI V2SI DI])
-;; Integer and float modes supported by Neon and IWMMXT.
+;; Integer and float modes supported by Neon.
(define_mode_iterator VALL [V2DI V2SI V4HI V8QI V2SF V4SI V8HI V16QI V4SF])
-;; Integer and float modes supported by Neon, IWMMXT and MVE.
+;; Integer and float modes supported by Neon and MVE.
(define_mode_iterator VNIM1 [V16QI V8HI V4SI V4SF V2DI])
-;; Integer and float modes supported by Neon and IWMMXT but not MVE.
+;; Integer and float modes supported by Neon but not MVE.
(define_mode_iterator VNINOTM1 [V2SI V4HI V8QI V2SF])
-;; Integer and float modes supported by Neon and IWMMXT, except V2DI.
+;; Integer and float modes supported by Neon, except V2DI.
(define_mode_iterator VALLW [V2SI V4HI V8QI V2SF V4SI V8HI V16QI V4SF])
-;; Integer modes supported by Neon and IWMMXT
+;; Integer modes supported by Neon
(define_mode_iterator VINT [V2DI V2SI V4HI V8QI V4SI V8HI V16QI])
-;; Integer modes supported by Neon and IWMMXT, except V2DI
+;; Integer modes supported by Neon, except V2DI
(define_mode_iterator VINTW [V2SI V4HI V8QI V4SI V8HI V16QI])
;; Double-width vector modes, on which we support arithmetic (no HF!)
@@ -1644,9 +1639,6 @@
;; distinguishes between 16-bit Thumb and 32-bit Thumb/ARM.
(define_mode_attr arch [(CC_Z "32") (SI "t1")])
-;; Determine element size suffix from vector mode.
-(define_mode_attr MMX_char [(V8QI "b") (V4HI "h") (V2SI "w") (DI "d")])
-
;; vtbl<n> suffix for NEON vector modes.
(define_mode_attr VTAB_n [(TI "2") (EI "3") (OI "4")])
diff --git a/gcc/config/arm/iwmmxt.md b/gcc/config/arm/iwmmxt.md
deleted file mode 100644
index 0aa5dcd..0000000
--- a/gcc/config/arm/iwmmxt.md
+++ /dev/null
@@ -1,1766 +0,0 @@
-;; Patterns for the Intel Wireless MMX technology architecture.
-;; Copyright (C) 2003-2025 Free Software Foundation, Inc.
-;; Contributed by Red Hat.
-
-;; This file is part of GCC.
-
-;; GCC is free software; you can redistribute it and/or modify it under
-;; the terms of the GNU General Public License as published by the Free
-;; Software Foundation; either version 3, or (at your option) any later
-;; version.
-
-;; GCC is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-;; License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GCC; see the file COPYING3. If not see
-;; <http://www.gnu.org/licenses/>.
-
-;; Register numbers. Need to sync with FIRST_IWMMXT_GR_REGNUM in arm.h
-(define_constants
- [(WCGR0 96)
- (WCGR1 97)
- (WCGR2 98)
- (WCGR3 99)
- ]
-)
-
-(define_insn "tbcstv8qi"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_duplicate:V8QI (match_operand:QI 1 "s_register_operand" "r")))]
- "TARGET_REALLY_IWMMXT"
- "tbcstb%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tbcst")]
-)
-
-(define_insn "tbcstv4hi"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_duplicate:V4HI (match_operand:HI 1 "s_register_operand" "r")))]
- "TARGET_REALLY_IWMMXT"
- "tbcsth%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tbcst")]
-)
-
-(define_insn "tbcstv2si"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_duplicate:V2SI (match_operand:SI 1 "s_register_operand" "r")))]
- "TARGET_REALLY_IWMMXT"
- "tbcstw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tbcst")]
-)
-
-(define_insn "iwmmxt_iordi3"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (ior:DI (match_operand:DI 1 "register_operand" "%y")
- (match_operand:DI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wor%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "length" "4")
- (set_attr "type" "wmmx_wor")]
-)
-
-(define_insn "iwmmxt_xordi3"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (xor:DI (match_operand:DI 1 "register_operand" "%y")
- (match_operand:DI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wxor%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "length" "4")
- (set_attr "type" "wmmx_wxor")]
-)
-
-(define_insn "iwmmxt_anddi3"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (and:DI (match_operand:DI 1 "register_operand" "%y")
- (match_operand:DI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wand%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "length" "4")
- (set_attr "type" "wmmx_wand")]
-)
-
-(define_insn "iwmmxt_nanddi3"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (and:DI (match_operand:DI 1 "register_operand" "y")
- (not:DI (match_operand:DI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wandn%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wandn")]
-)
-
-(define_insn "*iwmmxt_arm_movdi"
- [(set (match_operand:DI 0 "nonimmediate_di_operand" "=r, r, r, r, m,y,y,r, y,Uy,*w, r,*w,*w, *Uv")
- (match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,r,y,r,y,Uy,y, r,*w,*w,*Uvi,*w"))]
- "TARGET_REALLY_IWMMXT
- && ( register_operand (operands[0], DImode)
- || register_operand (operands[1], DImode))"
- "*
- switch (which_alternative)
- {
- case 0:
- case 1:
- case 2:
- return \"#\";
- case 3: case 4:
- return output_move_double (operands, true, NULL);
- case 5:
- return \"wmov%?\\t%0,%1\";
- case 6:
- return \"tmcrr%?\\t%0,%Q1,%R1\";
- case 7:
- return \"tmrrc%?\\t%Q0,%R0,%1\";
- case 8:
- return \"wldrd%?\\t%0,%1\";
- case 9:
- return \"wstrd%?\\t%1,%0\";
- case 10:
- return \"fmdrr%?\\t%P0, %Q1, %R1\\t%@ int\";
- case 11:
- return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\";
- case 12:
- if (TARGET_VFP_SINGLE)
- return \"fcpys%?\\t%0, %1\\t%@ int\;fcpys%?\\t%p0, %p1\\t%@ int\";
- else
- return \"fcpyd%?\\t%P0, %P1\\t%@ int\";
- case 13: case 14:
- return output_move_vfp (operands);
- default:
- gcc_unreachable ();
- }
- "
- [(set (attr "length") (cond [(eq_attr "alternative" "0,3,4") (const_int 8)
- (eq_attr "alternative" "1") (const_int 12)
- (eq_attr "alternative" "2") (const_int 16)
- (eq_attr "alternative" "12")
- (if_then_else
- (eq (symbol_ref "TARGET_VFP_SINGLE") (const_int 1))
- (const_int 8)
- (const_int 4))]
- (const_int 4)))
- (set_attr "type" "*,*,*,load_8,store_8,*,*,*,*,*,f_mcrr,f_mrrc,\
- ffarithd,f_loadd,f_stored")
- (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,*,*,*,*,*,*,1020,*")
- (set_attr "arm_neg_pool_range" "*,*,*,1008,*,*,*,*,*,*,*,*,*,1008,*")]
-)
-
-(define_insn "*iwmmxt_movsi_insn"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk, m,z,r,?z,?Uy,*t, r,*t,*t ,*Uv")
- (match_operand:SI 1 "general_operand" " rk,I,K,j,mi,rk,r,z,Uy, z, r,*t,*t,*Uvi, *t"))]
- "TARGET_REALLY_IWMMXT
- && ( register_operand (operands[0], SImode)
- || register_operand (operands[1], SImode))"
- "*
- switch (which_alternative)
- {
- case 0: return \"mov\\t%0, %1\";
- case 1: return \"mov\\t%0, %1\";
- case 2: return \"mvn\\t%0, #%B1\";
- case 3: return \"movw\\t%0, %1\";
- case 4: return \"ldr\\t%0, %1\";
- case 5: return \"str\\t%1, %0\";
- case 6: return \"tmcr\\t%0, %1\";
- case 7: return \"tmrc\\t%0, %1\";
- case 8: return arm_output_load_gr (operands);
- case 9: return \"wstrw\\t%1, %0\";
- case 10:return \"fmsr\\t%0, %1\";
- case 11:return \"fmrs\\t%0, %1\";
- case 12:return \"fcpys\\t%0, %1\\t%@ int\";
- case 13: case 14:
- return output_move_vfp (operands);
- default:
- gcc_unreachable ();
- }"
- [(set_attr "type" "*,*,*,*,load_4,store_4,*,*,*,*,f_mcr,f_mrc,\
- fmov,f_loads,f_stores")
- (set_attr "length" "*,*,*,*,*, *,*,*, 16, *,*,*,*,*,*")
- (set_attr "pool_range" "*,*,*,*,4096, *,*,*,1024, *,*,*,*,1020,*")
- (set_attr "neg_pool_range" "*,*,*,*,4084, *,*,*, *, 1012,*,*,*,1008,*")
- ;; Note - the "predicable" attribute is not allowed to have alternatives.
- ;; Since the wSTRw wCx instruction is not predicable, we cannot support
- ;; predicating any of the alternatives in this template. Instead,
- ;; we do the predication ourselves, in cond_iwmmxt_movsi_insn.
- (set_attr "predicable" "no")
- ;; Also - we have to pretend that these insns clobber the condition code
- ;; bits as otherwise arm_final_prescan_insn() will try to conditionalize
- ;; them.
- (set_attr "conds" "clob")]
-)
-
-;; Because iwmmxt_movsi_insn is not predicable, we provide the
-;; cond_exec version explicitly, with appropriate constraints.
-
-(define_insn "*cond_iwmmxt_movsi_insn"
- [(cond_exec
- (match_operator 2 "arm_comparison_operator"
- [(match_operand 3 "cc_register" "")
- (const_int 0)])
- (set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r, m,z,r")
- (match_operand:SI 1 "general_operand" "rI,K,mi,r,r,z")))]
- "TARGET_REALLY_IWMMXT
- && ( register_operand (operands[0], SImode)
- || register_operand (operands[1], SImode))"
- "*
- switch (which_alternative)
- {
- case 0: return \"mov%?\\t%0, %1\";
- case 1: return \"mvn%?\\t%0, #%B1\";
- case 2: return \"ldr%?\\t%0, %1\";
- case 3: return \"str%?\\t%1, %0\";
- case 4: return \"tmcr%?\\t%0, %1\";
- default: return \"tmrc%?\\t%0, %1\";
- }"
- [(set_attr "type" "*,*,load_4,store_4,*,*")
- (set_attr "pool_range" "*,*,4096, *,*,*")
- (set_attr "neg_pool_range" "*,*,4084, *,*,*")]
-)
-
-(define_insn "mov<mode>_internal"
- [(set (match_operand:VMMX 0 "nonimmediate_operand" "=y,m,y,?r,?y,?r,?r,?m")
- (match_operand:VMMX 1 "general_operand" "y,y,mi,y,r,r,mi,r"))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0: return \"wmov%?\\t%0, %1\";
- case 1: return \"wstrd%?\\t%1, %0\";
- case 2: return \"wldrd%?\\t%0, %1\";
- case 3: return \"tmrrc%?\\t%Q0, %R0, %1\";
- case 4: return \"tmcrr%?\\t%0, %Q1, %R1\";
- case 5: return \"#\";
- default: return output_move_double (operands, true, NULL);
- }"
- [(set_attr "predicable" "yes")
- (set_attr "length" "4, 4, 4,4,4,8, 8,8")
- (set_attr "type" "wmmx_wmov,wmmx_wstr,wmmx_wldr,wmmx_tmrrc,wmmx_tmcrr,*,load_4,store_4")
- (set_attr "pool_range" "*, *, 256,*,*,*, 256,*")
- (set_attr "neg_pool_range" "*, *, 244,*,*,*, 244,*")]
-)
-
-(define_expand "iwmmxt_setwcgr0"
- [(set (reg:SI WCGR0)
- (match_operand:SI 0 "register_operand"))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_setwcgr1"
- [(set (reg:SI WCGR1)
- (match_operand:SI 0 "register_operand"))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_setwcgr2"
- [(set (reg:SI WCGR2)
- (match_operand:SI 0 "register_operand"))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_setwcgr3"
- [(set (reg:SI WCGR3)
- (match_operand:SI 0 "register_operand"))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_getwcgr0"
- [(set (match_operand:SI 0 "register_operand")
- (reg:SI WCGR0))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_getwcgr1"
- [(set (match_operand:SI 0 "register_operand")
- (reg:SI WCGR1))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_getwcgr2"
- [(set (match_operand:SI 0 "register_operand")
- (reg:SI WCGR2))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_expand "iwmmxt_getwcgr3"
- [(set (match_operand:SI 0 "register_operand")
- (reg:SI WCGR3))]
- "TARGET_REALLY_IWMMXT"
- {}
-)
-
-(define_insn "*and<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (and:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wand\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wand")]
-)
-
-(define_insn "*ior<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (ior:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wor\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wor")]
-)
-
-(define_insn "*xor<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (xor:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wxor\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wxor")]
-)
-
-
-;; Vector add/subtract
-
-(define_insn "*add<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (plus:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wadd<MMX_char>%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "ssaddv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (ss_plus:V8QI (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "waddbss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "ssaddv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (ss_plus:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "waddhss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "ssaddv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (ss_plus:V2SI (match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "waddwss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "usaddv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (us_plus:V8QI (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "waddbus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "usaddv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (us_plus:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "waddhus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "usaddv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (us_plus:V2SI (match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "waddwus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "*sub<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (minus:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsub<MMX_char>%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "sssubv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (ss_minus:V8QI (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsubbss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "sssubv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (ss_minus:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsubhss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "sssubv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (ss_minus:V2SI (match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsubwss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "ussubv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (us_minus:V8QI (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsubbus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "ussubv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (us_minus:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsubhus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "ussubv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (us_minus:V2SI (match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wsubwus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsub")]
-)
-
-(define_insn "*mulv4hi3_iwmmxt"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (mult:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wmulul%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmul")]
-)
-
-(define_insn "smulv4hi3_highpart"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate:V4HI
- (lshiftrt:V4SI
- (mult:V4SI (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (sign_extend:V4SI (match_operand:V4HI 2 "register_operand" "y")))
- (const_int 16))))]
- "TARGET_REALLY_IWMMXT"
- "wmulsm%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmul")]
-)
-
-(define_insn "umulv4hi3_highpart"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate:V4HI
- (lshiftrt:V4SI
- (mult:V4SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y")))
- (const_int 16))))]
- "TARGET_REALLY_IWMMXT"
- "wmulum%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmul")]
-)
-
-(define_insn "iwmmxt_wmacs"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:DI 1 "register_operand" "0")
- (match_operand:V4HI 2 "register_operand" "y")
- (match_operand:V4HI 3 "register_operand" "y")] UNSPEC_WMACS))]
- "TARGET_REALLY_IWMMXT"
- "wmacs%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmac")]
-)
-
-(define_insn "iwmmxt_wmacsz"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WMACSZ))]
- "TARGET_REALLY_IWMMXT"
- "wmacsz%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmac")]
-)
-
-(define_insn "iwmmxt_wmacu"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:DI 1 "register_operand" "0")
- (match_operand:V4HI 2 "register_operand" "y")
- (match_operand:V4HI 3 "register_operand" "y")] UNSPEC_WMACU))]
- "TARGET_REALLY_IWMMXT"
- "wmacu%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmac")]
-)
-
-(define_insn "iwmmxt_wmacuz"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WMACUZ))]
- "TARGET_REALLY_IWMMXT"
- "wmacuz%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmac")]
-)
-
-;; Same as xordi3, but don't show input operands so that we don't think
-;; they are live.
-(define_insn "iwmmxt_clrdi"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(const_int 0)] UNSPEC_CLRDI))]
- "TARGET_REALLY_IWMMXT"
- "wxor%?\\t%0, %0, %0"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wxor")]
-)
-
-;; Seems like cse likes to generate these, so we have to support them.
-
-(define_insn "iwmmxt_clrv8qi"
- [(set (match_operand:V8QI 0 "s_register_operand" "=y")
- (const_vector:V8QI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)
- (const_int 0) (const_int 0)
- (const_int 0) (const_int 0)]))]
- "TARGET_REALLY_IWMMXT"
- "wxor%?\\t%0, %0, %0"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wxor")]
-)
-
-(define_insn "iwmmxt_clrv4hi"
- [(set (match_operand:V4HI 0 "s_register_operand" "=y")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)]))]
- "TARGET_REALLY_IWMMXT"
- "wxor%?\\t%0, %0, %0"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wxor")]
-)
-
-(define_insn "iwmmxt_clrv2si"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (const_vector:V2SI [(const_int 0) (const_int 0)]))]
- "TARGET_REALLY_IWMMXT"
- "wxor%?\\t%0, %0, %0"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wxor")]
-)
-
-;; Unsigned averages/sum of absolute differences
-
-(define_insn "iwmmxt_uavgrndv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (truncate:V8QI
- (lshiftrt:V8HI
- (plus:V8HI
- (plus:V8HI (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (zero_extend:V8HI (match_operand:V8QI 2 "register_operand" "y")))
- (const_vector:V8HI [(const_int 1)
- (const_int 1)
- (const_int 1)
- (const_int 1)
- (const_int 1)
- (const_int 1)
- (const_int 1)
- (const_int 1)]))
- (const_int 1))))]
- "TARGET_REALLY_IWMMXT"
- "wavg2br%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wavg2")]
-)
-
-(define_insn "iwmmxt_uavgrndv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate:V4HI
- (lshiftrt:V4SI
- (plus:V4SI
- (plus:V4SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y")))
- (const_vector:V4SI [(const_int 1)
- (const_int 1)
- (const_int 1)
- (const_int 1)]))
- (const_int 1))))]
- "TARGET_REALLY_IWMMXT"
- "wavg2hr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wavg2")]
-)
-
-(define_insn "iwmmxt_uavgv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (truncate:V8QI
- (lshiftrt:V8HI
- (plus:V8HI (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (zero_extend:V8HI (match_operand:V8QI 2 "register_operand" "y")))
- (const_int 1))))]
- "TARGET_REALLY_IWMMXT"
- "wavg2b%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wavg2")]
-)
-
-(define_insn "iwmmxt_uavgv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate:V4HI
- (lshiftrt:V4SI
- (plus:V4SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y")))
- (const_int 1))))]
- "TARGET_REALLY_IWMMXT"
- "wavg2h%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wavg2")]
-)
-
-;; Insert/extract/shuffle
-
-(define_insn "iwmmxt_tinsrb"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_merge:V8QI
- (vec_duplicate:V8QI
- (truncate:QI (match_operand:SI 2 "nonimmediate_operand" "r")))
- (match_operand:V8QI 1 "register_operand" "0")
- (match_operand:SI 3 "immediate_operand" "i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- {
- return arm_output_iwmmxt_tinsr (operands);
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tinsr")]
-)
-
-(define_insn "iwmmxt_tinsrh"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_merge:V4HI
- (vec_duplicate:V4HI
- (truncate:HI (match_operand:SI 2 "nonimmediate_operand" "r")))
- (match_operand:V4HI 1 "register_operand" "0")
- (match_operand:SI 3 "immediate_operand" "i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- {
- return arm_output_iwmmxt_tinsr (operands);
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tinsr")]
-)
-
-(define_insn "iwmmxt_tinsrw"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_merge:V2SI
- (vec_duplicate:V2SI
- (match_operand:SI 2 "nonimmediate_operand" "r"))
- (match_operand:V2SI 1 "register_operand" "0")
- (match_operand:SI 3 "immediate_operand" "i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- {
- return arm_output_iwmmxt_tinsr (operands);
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tinsr")]
-)
-
-(define_insn "iwmmxt_textrmub"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI (vec_select:QI (match_operand:V8QI 1 "register_operand" "y")
- (parallel
- [(match_operand:SI 2 "immediate_operand" "i")]))))]
- "TARGET_REALLY_IWMMXT"
- "textrmub%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_textrm")]
-)
-
-(define_insn "iwmmxt_textrmsb"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI (vec_select:QI (match_operand:V8QI 1 "register_operand" "y")
- (parallel
- [(match_operand:SI 2 "immediate_operand" "i")]))))]
- "TARGET_REALLY_IWMMXT"
- "textrmsb%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_textrm")]
-)
-
-(define_insn "iwmmxt_textrmuh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI (vec_select:HI (match_operand:V4HI 1 "register_operand" "y")
- (parallel
- [(match_operand:SI 2 "immediate_operand" "i")]))))]
- "TARGET_REALLY_IWMMXT"
- "textrmuh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_textrm")]
-)
-
-(define_insn "iwmmxt_textrmsh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI (vec_select:HI (match_operand:V4HI 1 "register_operand" "y")
- (parallel
- [(match_operand:SI 2 "immediate_operand" "i")]))))]
- "TARGET_REALLY_IWMMXT"
- "textrmsh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_textrm")]
-)
-
-;; There are signed/unsigned variants of this instruction, but they are
-;; pointless.
-(define_insn "iwmmxt_textrmw"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (vec_select:SI (match_operand:V2SI 1 "register_operand" "y")
- (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
- "TARGET_REALLY_IWMMXT"
- "textrmsw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_textrm")]
-)
-
-(define_insn "iwmmxt_wshufh"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:SI 2 "immediate_operand" "i")] UNSPEC_WSHUFH))]
- "TARGET_REALLY_IWMMXT"
- "wshufh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wshufh")]
-)
-
-;; Mask-generating comparisons
-;;
-;; Note - you cannot use patterns like these here:
-;;
-;; (set (match:<vector>) (<comparator>:<vector> (match:<vector>) (match:<vector>)))
-;;
-;; Because GCC will assume that the truth value (1 or 0) is installed
-;; into the entire destination vector, (with the '1' going into the least
-;; significant element of the vector). This is not how these instructions
-;; behave.
-
-(define_insn "eqv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (unspec_volatile:V8QI [(match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")]
- VUNSPEC_WCMP_EQ))]
- "TARGET_REALLY_IWMMXT"
- "wcmpeqb%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpeq")]
-)
-
-(define_insn "eqv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (unspec_volatile:V4HI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")]
- VUNSPEC_WCMP_EQ))]
- "TARGET_REALLY_IWMMXT"
- "wcmpeqh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpeq")]
-)
-
-(define_insn "eqv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec_volatile:V2SI
- [(match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")]
- VUNSPEC_WCMP_EQ))]
- "TARGET_REALLY_IWMMXT"
- "wcmpeqw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpeq")]
-)
-
-(define_insn "gtuv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (unspec_volatile:V8QI [(match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")]
- VUNSPEC_WCMP_GTU))]
- "TARGET_REALLY_IWMMXT"
- "wcmpgtub%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpgt")]
-)
-
-(define_insn "gtuv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (unspec_volatile:V4HI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")]
- VUNSPEC_WCMP_GTU))]
- "TARGET_REALLY_IWMMXT"
- "wcmpgtuh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpgt")]
-)
-
-(define_insn "gtuv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec_volatile:V2SI [(match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")]
- VUNSPEC_WCMP_GTU))]
- "TARGET_REALLY_IWMMXT"
- "wcmpgtuw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpgt")]
-)
-
-(define_insn "gtv8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (unspec_volatile:V8QI [(match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")]
- VUNSPEC_WCMP_GT))]
- "TARGET_REALLY_IWMMXT"
- "wcmpgtsb%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpgt")]
-)
-
-(define_insn "gtv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (unspec_volatile:V4HI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")]
- VUNSPEC_WCMP_GT))]
- "TARGET_REALLY_IWMMXT"
- "wcmpgtsh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpgt")]
-)
-
-(define_insn "gtv2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec_volatile:V2SI [(match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")]
- VUNSPEC_WCMP_GT))]
- "TARGET_REALLY_IWMMXT"
- "wcmpgtsw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wcmpgt")]
-)
-
-;; Max/min insns
-
-(define_insn "*smax<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (smax:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wmaxs<MMX_char>%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmax")]
-)
-
-(define_insn "*umax<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (umax:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wmaxu<MMX_char>%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmax")]
-)
-
-(define_insn "*smin<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (smin:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wmins<MMX_char>%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmin")]
-)
-
-(define_insn "*umin<mode>3_iwmmxt"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (umin:VMMX (match_operand:VMMX 1 "register_operand" "y")
- (match_operand:VMMX 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wminu<MMX_char>%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmin")]
-)
-
-;; Pack/unpack insns.
-
-(define_insn "iwmmxt_wpackhss"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_concat:V8QI
- (ss_truncate:V4QI (match_operand:V4HI 1 "register_operand" "y"))
- (ss_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wpackhss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wpack")]
-)
-
-(define_insn "iwmmxt_wpackwss"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_concat:V4HI
- (ss_truncate:V2HI (match_operand:V2SI 1 "register_operand" "y"))
- (ss_truncate:V2HI (match_operand:V2SI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wpackwss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wpack")]
-)
-
-(define_insn "iwmmxt_wpackdss"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_concat:V2SI
- (ss_truncate:SI (match_operand:DI 1 "register_operand" "y"))
- (ss_truncate:SI (match_operand:DI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wpackdss%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wpack")]
-)
-
-(define_insn "iwmmxt_wpackhus"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_concat:V8QI
- (us_truncate:V4QI (match_operand:V4HI 1 "register_operand" "y"))
- (us_truncate:V4QI (match_operand:V4HI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wpackhus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wpack")]
-)
-
-(define_insn "iwmmxt_wpackwus"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_concat:V4HI
- (us_truncate:V2HI (match_operand:V2SI 1 "register_operand" "y"))
- (us_truncate:V2HI (match_operand:V2SI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wpackwus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wpack")]
-)
-
-(define_insn "iwmmxt_wpackdus"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_concat:V2SI
- (us_truncate:SI (match_operand:DI 1 "register_operand" "y"))
- (us_truncate:SI (match_operand:DI 2 "register_operand" "y"))))]
- "TARGET_REALLY_IWMMXT"
- "wpackdus%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wpack")]
-)
-
-(define_insn "iwmmxt_wunpckihb"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_merge:V8QI
- (vec_select:V8QI (match_operand:V8QI 1 "register_operand" "y")
- (parallel [(const_int 4)
- (const_int 0)
- (const_int 5)
- (const_int 1)
- (const_int 6)
- (const_int 2)
- (const_int 7)
- (const_int 3)]))
- (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "y")
- (parallel [(const_int 0)
- (const_int 4)
- (const_int 1)
- (const_int 5)
- (const_int 2)
- (const_int 6)
- (const_int 3)
- (const_int 7)]))
- (const_int 85)))]
- "TARGET_REALLY_IWMMXT"
- "wunpckihb%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckih")]
-)
-
-(define_insn "iwmmxt_wunpckihh"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_merge:V4HI
- (vec_select:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (parallel [(const_int 2)
- (const_int 0)
- (const_int 3)
- (const_int 1)]))
- (vec_select:V4HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 0)
- (const_int 2)
- (const_int 1)
- (const_int 3)]))
- (const_int 5)))]
- "TARGET_REALLY_IWMMXT"
- "wunpckihh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckih")]
-)
-
-(define_insn "iwmmxt_wunpckihw"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_merge:V2SI
- (vec_select:V2SI (match_operand:V2SI 1 "register_operand" "y")
- (parallel [(const_int 1)
- (const_int 0)]))
- (vec_select:V2SI (match_operand:V2SI 2 "register_operand" "y")
- (parallel [(const_int 0)
- (const_int 1)]))
- (const_int 1)))]
- "TARGET_REALLY_IWMMXT"
- "wunpckihw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckih")]
-)
-
-(define_insn "iwmmxt_wunpckilb"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_merge:V8QI
- (vec_select:V8QI (match_operand:V8QI 1 "register_operand" "y")
- (parallel [(const_int 0)
- (const_int 4)
- (const_int 1)
- (const_int 5)
- (const_int 2)
- (const_int 6)
- (const_int 3)
- (const_int 7)]))
- (vec_select:V8QI (match_operand:V8QI 2 "register_operand" "y")
- (parallel [(const_int 4)
- (const_int 0)
- (const_int 5)
- (const_int 1)
- (const_int 6)
- (const_int 2)
- (const_int 7)
- (const_int 3)]))
- (const_int 85)))]
- "TARGET_REALLY_IWMMXT"
- "wunpckilb%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckil")]
-)
-
-(define_insn "iwmmxt_wunpckilh"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_merge:V4HI
- (vec_select:V4HI (match_operand:V4HI 1 "register_operand" "y")
- (parallel [(const_int 0)
- (const_int 2)
- (const_int 1)
- (const_int 3)]))
- (vec_select:V4HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 2)
- (const_int 0)
- (const_int 3)
- (const_int 1)]))
- (const_int 5)))]
- "TARGET_REALLY_IWMMXT"
- "wunpckilh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckil")]
-)
-
-(define_insn "iwmmxt_wunpckilw"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_merge:V2SI
- (vec_select:V2SI (match_operand:V2SI 1 "register_operand" "y")
- (parallel [(const_int 0)
- (const_int 1)]))
- (vec_select:V2SI (match_operand:V2SI 2 "register_operand" "y")
- (parallel [(const_int 1)
- (const_int 0)]))
- (const_int 1)))]
- "TARGET_REALLY_IWMMXT"
- "wunpckilw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckil")]
-)
-
-(define_insn "iwmmxt_wunpckehub"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_select:V4HI
- (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (parallel [(const_int 4) (const_int 5)
- (const_int 6) (const_int 7)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckehub%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckeh")]
-)
-
-(define_insn "iwmmxt_wunpckehuh"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_select:V2SI
- (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 2) (const_int 3)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckehuh%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckeh")]
-)
-
-(define_insn "iwmmxt_wunpckehuw"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (vec_select:DI
- (zero_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (parallel [(const_int 1)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckehuw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckeh")]
-)
-
-(define_insn "iwmmxt_wunpckehsb"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_select:V4HI
- (sign_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (parallel [(const_int 4) (const_int 5)
- (const_int 6) (const_int 7)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckehsb%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckeh")]
-)
-
-(define_insn "iwmmxt_wunpckehsh"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_select:V2SI
- (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 2) (const_int 3)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckehsh%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckeh")]
-)
-
-(define_insn "iwmmxt_wunpckehsw"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (vec_select:DI
- (sign_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (parallel [(const_int 1)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckehsw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckeh")]
-)
-
-(define_insn "iwmmxt_wunpckelub"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_select:V4HI
- (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckelub%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckel")]
-)
-
-(define_insn "iwmmxt_wunpckeluh"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_select:V2SI
- (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 1)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckeluh%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckel")]
-)
-
-(define_insn "iwmmxt_wunpckeluw"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (vec_select:DI
- (zero_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (parallel [(const_int 0)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckeluw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckel")]
-)
-
-(define_insn "iwmmxt_wunpckelsb"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_select:V4HI
- (sign_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckelsb%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckel")]
-)
-
-(define_insn "iwmmxt_wunpckelsh"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (vec_select:V2SI
- (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 1)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckelsh%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckel")]
-)
-
-(define_insn "iwmmxt_wunpckelsw"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (vec_select:DI
- (sign_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (parallel [(const_int 0)])))]
- "TARGET_REALLY_IWMMXT"
- "wunpckelsw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wunpckel")]
-)
-
-;; Shifts
-
-(define_insn "ror<mode>3"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (rotatert:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:SI 2 "imm_or_reg_operand" "z,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wror<MMX_char>g%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wror<MMX_char>\", operands, true);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wror, wmmx_wror")]
-)
-
-(define_insn "ashr<mode>3_iwmmxt"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (ashiftrt:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:SI 2 "imm_or_reg_operand" "z,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wsra<MMX_char>g%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wsra<MMX_char>\", operands, true);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wsra, wmmx_wsra")]
-)
-
-(define_insn "lshr<mode>3_iwmmxt"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (lshiftrt:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:SI 2 "imm_or_reg_operand" "z,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wsrl<MMX_char>g%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wsrl<MMX_char>\", operands, false);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wsrl, wmmx_wsrl")]
-)
-
-(define_insn "ashl<mode>3_iwmmxt"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (ashift:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:SI 2 "imm_or_reg_operand" "z,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wsll<MMX_char>g%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wsll<MMX_char>\", operands, false);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wsll, wmmx_wsll")]
-)
-
-(define_insn "ror<mode>3_di"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (rotatert:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:DI 2 "imm_or_reg_operand" "y,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wror<MMX_char>%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wror<MMX_char>\", operands, true);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wror, wmmx_wror")]
-)
-
-(define_insn "ashr<mode>3_di"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (ashiftrt:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:DI 2 "imm_or_reg_operand" "y,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wsra<MMX_char>%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wsra<MMX_char>\", operands, true);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wsra, wmmx_wsra")]
-)
-
-(define_insn "lshr<mode>3_di"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (lshiftrt:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:DI 2 "register_operand" "y,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wsrl<MMX_char>%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wsrl<MMX_char>\", operands, false);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wsrl, wmmx_wsrl")]
-)
-
-(define_insn "ashl<mode>3_di"
- [(set (match_operand:VSHFT 0 "register_operand" "=y,y")
- (ashift:VSHFT (match_operand:VSHFT 1 "register_operand" "y,y")
- (match_operand:DI 2 "imm_or_reg_operand" "y,i")))]
- "TARGET_REALLY_IWMMXT"
- "*
- switch (which_alternative)
- {
- case 0:
- return \"wsll<MMX_char>%?\\t%0, %1, %2\";
- case 1:
- return arm_output_iwmmxt_shift_immediate (\"wsll<MMX_char>\", operands, false);
- default:
- gcc_unreachable ();
- }
- "
- [(set_attr "predicable" "yes")
- (set_attr "arch" "*, iwmmxt2")
- (set_attr "type" "wmmx_wsll, wmmx_wsll")]
-)
-
-(define_insn "iwmmxt_wmadds"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (plus:V2SI
- (mult:V2SI
- (vec_select:V2SI (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 1) (const_int 3)]))
- (vec_select:V2SI (sign_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))
- (parallel [(const_int 1) (const_int 3)])))
- (mult:V2SI
- (vec_select:V2SI (sign_extend:V4SI (match_dup 1))
- (parallel [(const_int 0) (const_int 2)]))
- (vec_select:V2SI (sign_extend:V4SI (match_dup 2))
- (parallel [(const_int 0) (const_int 2)])))))]
- "TARGET_REALLY_IWMMXT"
- "wmadds%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmadd")]
-)
-
-(define_insn "iwmmxt_wmaddu"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (plus:V2SI
- (mult:V2SI
- (vec_select:V2SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 1) (const_int 3)]))
- (vec_select:V2SI (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))
- (parallel [(const_int 1) (const_int 3)])))
- (mult:V2SI
- (vec_select:V2SI (zero_extend:V4SI (match_dup 1))
- (parallel [(const_int 0) (const_int 2)]))
- (vec_select:V2SI (zero_extend:V4SI (match_dup 2))
- (parallel [(const_int 0) (const_int 2)])))))]
- "TARGET_REALLY_IWMMXT"
- "wmaddu%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmadd")]
-)
-
-(define_insn "iwmmxt_tmia"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (mult:DI (sign_extend:DI
- (match_operand:SI 2 "register_operand" "r"))
- (sign_extend:DI
- (match_operand:SI 3 "register_operand" "r")))))]
- "TARGET_REALLY_IWMMXT"
- "tmia%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmia")]
-)
-
-(define_insn "iwmmxt_tmiaph"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI (sign_extend:DI
- (truncate:HI (match_operand:SI 2 "register_operand" "r")))
- (sign_extend:DI
- (truncate:HI (match_operand:SI 3 "register_operand" "r"))))
- (mult:DI (sign_extend:DI
- (truncate:HI (ashiftrt:SI (match_dup 2) (const_int 16))))
- (sign_extend:DI
- (truncate:HI (ashiftrt:SI (match_dup 3) (const_int 16))))))))]
- "TARGET_REALLY_IWMMXT"
- "tmiaph%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmiaph")]
-)
-
-(define_insn "iwmmxt_tmiabb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (mult:DI (sign_extend:DI
- (truncate:HI (match_operand:SI 2 "register_operand" "r")))
- (sign_extend:DI
- (truncate:HI (match_operand:SI 3 "register_operand" "r"))))))]
- "TARGET_REALLY_IWMMXT"
- "tmiabb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmiaxy")]
-)
-
-(define_insn "iwmmxt_tmiatb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (mult:DI (sign_extend:DI
- (truncate:HI
- (ashiftrt:SI
- (match_operand:SI 2 "register_operand" "r")
- (const_int 16))))
- (sign_extend:DI
- (truncate:HI
- (match_operand:SI 3 "register_operand" "r"))))))]
- "TARGET_REALLY_IWMMXT"
- "tmiatb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmiaxy")]
-)
-
-(define_insn "iwmmxt_tmiabt"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (mult:DI (sign_extend:DI
- (truncate:HI
- (match_operand:SI 2 "register_operand" "r")))
- (sign_extend:DI
- (truncate:HI
- (ashiftrt:SI
- (match_operand:SI 3 "register_operand" "r")
- (const_int 16)))))))]
- "TARGET_REALLY_IWMMXT"
- "tmiabt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmiaxy")]
-)
-
-(define_insn "iwmmxt_tmiatt"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (mult:DI (sign_extend:DI
- (truncate:HI
- (ashiftrt:SI
- (match_operand:SI 2 "register_operand" "r")
- (const_int 16))))
- (sign_extend:DI
- (truncate:HI
- (ashiftrt:SI
- (match_operand:SI 3 "register_operand" "r")
- (const_int 16)))))))]
- "TARGET_REALLY_IWMMXT"
- "tmiatt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmiaxy")]
-)
-
-(define_insn "iwmmxt_tmovmskb"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:V8QI 1 "register_operand" "y")] UNSPEC_TMOVMSK))]
- "TARGET_REALLY_IWMMXT"
- "tmovmskb%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmovmsk")]
-)
-
-(define_insn "iwmmxt_tmovmskh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:V4HI 1 "register_operand" "y")] UNSPEC_TMOVMSK))]
- "TARGET_REALLY_IWMMXT"
- "tmovmskh%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmovmsk")]
-)
-
-(define_insn "iwmmxt_tmovmskw"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:V2SI 1 "register_operand" "y")] UNSPEC_TMOVMSK))]
- "TARGET_REALLY_IWMMXT"
- "tmovmskw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tmovmsk")]
-)
-
-(define_insn "iwmmxt_waccb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:V8QI 1 "register_operand" "y")] UNSPEC_WACC))]
- "TARGET_REALLY_IWMMXT"
- "waccb%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wacc")]
-)
-
-(define_insn "iwmmxt_wacch"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:V4HI 1 "register_operand" "y")] UNSPEC_WACC))]
- "TARGET_REALLY_IWMMXT"
- "wacch%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wacc")]
-)
-
-(define_insn "iwmmxt_waccw"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (unspec:DI [(match_operand:V2SI 1 "register_operand" "y")] UNSPEC_WACC))]
- "TARGET_REALLY_IWMMXT"
- "waccw%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wacc")]
-)
-
-;; use unspec here to prevent 8 * imm to be optimized by cse
-(define_insn "iwmmxt_waligni"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (unspec:V8QI [(subreg:V8QI
- (ashiftrt:TI
- (subreg:TI (vec_concat:V16QI
- (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")) 0)
- (mult:SI
- (match_operand:SI 3 "immediate_operand" "i")
- (const_int 8))) 0)] UNSPEC_WALIGNI))]
- "TARGET_REALLY_IWMMXT"
- "waligni%?\\t%0, %1, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_waligni")]
-)
-
-(define_insn "iwmmxt_walignr"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (subreg:V8QI (ashiftrt:TI
- (subreg:TI (vec_concat:V16QI
- (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")) 0)
- (mult:SI
- (zero_extract:SI (match_operand:SI 3 "register_operand" "z") (const_int 3) (const_int 0))
- (const_int 8))) 0))]
- "TARGET_REALLY_IWMMXT"
- "walignr%U3%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_walignr")]
-)
-
-(define_insn "iwmmxt_walignr0"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (subreg:V8QI (ashiftrt:TI
- (subreg:TI (vec_concat:V16QI
- (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")) 0)
- (mult:SI
- (zero_extract:SI (reg:SI WCGR0) (const_int 3) (const_int 0))
- (const_int 8))) 0))]
- "TARGET_REALLY_IWMMXT"
- "walignr0%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_walignr")]
-)
-
-(define_insn "iwmmxt_walignr1"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (subreg:V8QI (ashiftrt:TI
- (subreg:TI (vec_concat:V16QI
- (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")) 0)
- (mult:SI
- (zero_extract:SI (reg:SI WCGR1) (const_int 3) (const_int 0))
- (const_int 8))) 0))]
- "TARGET_REALLY_IWMMXT"
- "walignr1%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_walignr")]
-)
-
-(define_insn "iwmmxt_walignr2"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (subreg:V8QI (ashiftrt:TI
- (subreg:TI (vec_concat:V16QI
- (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")) 0)
- (mult:SI
- (zero_extract:SI (reg:SI WCGR2) (const_int 3) (const_int 0))
- (const_int 8))) 0))]
- "TARGET_REALLY_IWMMXT"
- "walignr2%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_walignr")]
-)
-
-(define_insn "iwmmxt_walignr3"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (subreg:V8QI (ashiftrt:TI
- (subreg:TI (vec_concat:V16QI
- (match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")) 0)
- (mult:SI
- (zero_extract:SI (reg:SI WCGR3) (const_int 3) (const_int 0))
- (const_int 8))) 0))]
- "TARGET_REALLY_IWMMXT"
- "walignr3%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_walignr")]
-)
-
-(define_insn "iwmmxt_wsadb"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [
- (match_operand:V2SI 1 "register_operand" "0")
- (match_operand:V8QI 2 "register_operand" "y")
- (match_operand:V8QI 3 "register_operand" "y")] UNSPEC_WSAD))]
- "TARGET_REALLY_IWMMXT"
- "wsadb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsad")]
-)
-
-(define_insn "iwmmxt_wsadh"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [
- (match_operand:V2SI 1 "register_operand" "0")
- (match_operand:V4HI 2 "register_operand" "y")
- (match_operand:V4HI 3 "register_operand" "y")] UNSPEC_WSAD))]
- "TARGET_REALLY_IWMMXT"
- "wsadh%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsad")]
-)
-
-(define_insn "iwmmxt_wsadbz"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V8QI 1 "register_operand" "y")
- (match_operand:V8QI 2 "register_operand" "y")] UNSPEC_WSADZ))]
- "TARGET_REALLY_IWMMXT"
- "wsadbz%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsad")]
-)
-
-(define_insn "iwmmxt_wsadhz"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WSADZ))]
- "TARGET_REALLY_IWMMXT"
- "wsadhz%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsad")]
-)
-
-(include "iwmmxt2.md")
diff --git a/gcc/config/arm/iwmmxt2.md b/gcc/config/arm/iwmmxt2.md
deleted file mode 100644
index 74cd148..0000000
--- a/gcc/config/arm/iwmmxt2.md
+++ /dev/null
@@ -1,903 +0,0 @@
-;; Patterns for the Intel Wireless MMX technology architecture.
-;; Copyright (C) 2011-2025 Free Software Foundation, Inc.
-;; Written by Marvell, Inc.
-;;
-;; This file is part of GCC.
-;;
-;; GCC is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 3, or (at your
-;; option) any later version.
-
-;; GCC is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-;; License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GCC; see the file COPYING3. If not see
-;; <http://www.gnu.org/licenses/>.
-
-(define_insn "iwmmxt_wabs<mode>3"
- [(set (match_operand:VMMX 0 "register_operand" "=y")
- (unspec:VMMX [(match_operand:VMMX 1 "register_operand" "y")] UNSPEC_WABS))]
- "TARGET_REALLY_IWMMXT"
- "wabs<MMX_char>%?\\t%0, %1"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wabs")]
-)
-
-(define_insn "iwmmxt_wabsdiffb"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (truncate:V8QI
- (abs:V8HI
- (minus:V8HI
- (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (zero_extend:V8HI (match_operand:V8QI 2 "register_operand" "y"))))))]
- "TARGET_REALLY_IWMMXT"
- "wabsdiffb%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wabsdiff")]
-)
-
-(define_insn "iwmmxt_wabsdiffh"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate: V4HI
- (abs:V4SI
- (minus:V4SI
- (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))))))]
- "TARGET_REALLY_IWMMXT"
- "wabsdiffh%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wabsdiff")]
-)
-
-(define_insn "iwmmxt_wabsdiffw"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (truncate: V2SI
- (abs:V2DI
- (minus:V2DI
- (zero_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (zero_extend:V2DI (match_operand:V2SI 2 "register_operand" "y"))))))]
- "TARGET_REALLY_IWMMXT"
- "wabsdiffw%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wabsdiff")]
-)
-
-(define_insn "iwmmxt_waddsubhx"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_merge:V4HI
- (ss_minus:V4HI
- (match_operand:V4HI 1 "register_operand" "y")
- (vec_select:V4HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 1) (const_int 0) (const_int 3) (const_int 2)])))
- (ss_plus:V4HI
- (match_dup 1)
- (vec_select:V4HI (match_dup 2)
- (parallel [(const_int 1) (const_int 0) (const_int 3) (const_int 2)])))
- (const_int 10)))]
- "TARGET_REALLY_IWMMXT"
- "waddsubhx%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_waddsubhx")]
-)
-
-(define_insn "iwmmxt_wsubaddhx"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (vec_merge:V4HI
- (ss_plus:V4HI
- (match_operand:V4HI 1 "register_operand" "y")
- (vec_select:V4HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 1) (const_int 0) (const_int 3) (const_int 2)])))
- (ss_minus:V4HI
- (match_dup 1)
- (vec_select:V4HI (match_dup 2)
- (parallel [(const_int 1) (const_int 0) (const_int 3) (const_int 2)])))
- (const_int 10)))]
- "TARGET_REALLY_IWMMXT"
- "wsubaddhx%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wsubaddhx")]
-)
-
-(define_insn "addc<mode>3"
- [(set (match_operand:VMMX2 0 "register_operand" "=y")
- (unspec:VMMX2
- [(plus:VMMX2
- (match_operand:VMMX2 1 "register_operand" "y")
- (match_operand:VMMX2 2 "register_operand" "y"))] UNSPEC_WADDC))]
- "TARGET_REALLY_IWMMXT"
- "wadd<MMX_char>c%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wadd")]
-)
-
-(define_insn "iwmmxt_avg4"
-[(set (match_operand:V8QI 0 "register_operand" "=y")
- (truncate:V8QI
- (vec_select:V8HI
- (vec_merge:V8HI
- (lshiftrt:V8HI
- (plus:V8HI
- (plus:V8HI
- (plus:V8HI
- (plus:V8HI
- (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (zero_extend:V8HI (match_operand:V8QI 2 "register_operand" "y")))
- (vec_select:V8HI (zero_extend:V8HI (match_dup 1))
- (parallel [(const_int 7) (const_int 0) (const_int 1) (const_int 2)
- (const_int 3) (const_int 4) (const_int 5) (const_int 6)])))
- (vec_select:V8HI (zero_extend:V8HI (match_dup 2))
- (parallel [(const_int 7) (const_int 0) (const_int 1) (const_int 2)
- (const_int 3) (const_int 4) (const_int 5) (const_int 6)])))
- (const_vector:V8HI [(const_int 1) (const_int 1) (const_int 1) (const_int 1)
- (const_int 1) (const_int 1) (const_int 1) (const_int 1)]))
- (const_int 2))
- (const_vector:V8HI [(const_int 0) (const_int 0) (const_int 0) (const_int 0)
- (const_int 0) (const_int 0) (const_int 0) (const_int 0)])
- (const_int 254))
- (parallel [(const_int 1) (const_int 2) (const_int 3) (const_int 4)
- (const_int 5) (const_int 6) (const_int 7) (const_int 0)]))))]
- "TARGET_REALLY_IWMMXT"
- "wavg4%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wavg4")]
-)
-
-(define_insn "iwmmxt_avg4r"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (truncate:V8QI
- (vec_select:V8HI
- (vec_merge:V8HI
- (lshiftrt:V8HI
- (plus:V8HI
- (plus:V8HI
- (plus:V8HI
- (plus:V8HI
- (zero_extend:V8HI (match_operand:V8QI 1 "register_operand" "y"))
- (zero_extend:V8HI (match_operand:V8QI 2 "register_operand" "y")))
- (vec_select:V8HI (zero_extend:V8HI (match_dup 1))
- (parallel [(const_int 7) (const_int 0) (const_int 1) (const_int 2)
- (const_int 3) (const_int 4) (const_int 5) (const_int 6)])))
- (vec_select:V8HI (zero_extend:V8HI (match_dup 2))
- (parallel [(const_int 7) (const_int 0) (const_int 1) (const_int 2)
- (const_int 3) (const_int 4) (const_int 5) (const_int 6)])))
- (const_vector:V8HI [(const_int 2) (const_int 2) (const_int 2) (const_int 2)
- (const_int 2) (const_int 2) (const_int 2) (const_int 2)]))
- (const_int 2))
- (const_vector:V8HI [(const_int 0) (const_int 0) (const_int 0) (const_int 0)
- (const_int 0) (const_int 0) (const_int 0) (const_int 0)])
- (const_int 254))
- (parallel [(const_int 1) (const_int 2) (const_int 3) (const_int 4)
- (const_int 5) (const_int 6) (const_int 7) (const_int 0)]))))]
- "TARGET_REALLY_IWMMXT"
- "wavg4r%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wavg4")]
-)
-
-(define_insn "iwmmxt_wmaddsx"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (plus:V2SI
- (mult:V2SI
- (vec_select:V2SI (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 1) (const_int 3)]))
- (vec_select:V2SI (sign_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 2)])))
- (mult:V2SI
- (vec_select:V2SI (sign_extend:V4SI (match_dup 1))
- (parallel [(const_int 0) (const_int 2)]))
- (vec_select:V2SI (sign_extend:V4SI (match_dup 2))
- (parallel [(const_int 1) (const_int 3)])))))]
- "TARGET_REALLY_IWMMXT"
- "wmaddsx%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmadd")]
-)
-
-(define_insn "iwmmxt_wmaddux"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (plus:V2SI
- (mult:V2SI
- (vec_select:V2SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 1) (const_int 3)]))
- (vec_select:V2SI (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 2)])))
- (mult:V2SI
- (vec_select:V2SI (zero_extend:V4SI (match_dup 1))
- (parallel [(const_int 0) (const_int 2)]))
- (vec_select:V2SI (zero_extend:V4SI (match_dup 2))
- (parallel [(const_int 1) (const_int 3)])))))]
- "TARGET_REALLY_IWMMXT"
- "wmaddux%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmadd")]
-)
-
-(define_insn "iwmmxt_wmaddsn"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (minus:V2SI
- (mult:V2SI
- (vec_select:V2SI (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 2)]))
- (vec_select:V2SI (sign_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 2)])))
- (mult:V2SI
- (vec_select:V2SI (sign_extend:V4SI (match_dup 1))
- (parallel [(const_int 1) (const_int 3)]))
- (vec_select:V2SI (sign_extend:V4SI (match_dup 2))
- (parallel [(const_int 1) (const_int 3)])))))]
- "TARGET_REALLY_IWMMXT"
- "wmaddsn%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmadd")]
-)
-
-(define_insn "iwmmxt_wmaddun"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (minus:V2SI
- (mult:V2SI
- (vec_select:V2SI (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 2)]))
- (vec_select:V2SI (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y"))
- (parallel [(const_int 0) (const_int 2)])))
- (mult:V2SI
- (vec_select:V2SI (zero_extend:V4SI (match_dup 1))
- (parallel [(const_int 1) (const_int 3)]))
- (vec_select:V2SI (zero_extend:V4SI (match_dup 2))
- (parallel [(const_int 1) (const_int 3)])))))]
- "TARGET_REALLY_IWMMXT"
- "wmaddun%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmadd")]
-)
-
-(define_insn "iwmmxt_wmulwsm"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (truncate:V2SI
- (ashiftrt:V2DI
- (mult:V2DI
- (sign_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (sign_extend:V2DI (match_operand:V2SI 2 "register_operand" "y")))
- (const_int 32))))]
- "TARGET_REALLY_IWMMXT"
- "wmulwsm%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmulw")]
-)
-
-(define_insn "iwmmxt_wmulwum"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (truncate:V2SI
- (lshiftrt:V2DI
- (mult:V2DI
- (zero_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (zero_extend:V2DI (match_operand:V2SI 2 "register_operand" "y")))
- (const_int 32))))]
- "TARGET_REALLY_IWMMXT"
- "wmulwum%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmulw")]
-)
-
-(define_insn "iwmmxt_wmulsmr"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate:V4HI
- (ashiftrt:V4SI
- (plus:V4SI
- (mult:V4SI
- (sign_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (sign_extend:V4SI (match_operand:V4HI 2 "register_operand" "y")))
- (const_vector:V4SI [(const_int 32768)
- (const_int 32768)
- (const_int 32768)]))
- (const_int 16))))]
- "TARGET_REALLY_IWMMXT"
- "wmulsmr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmul")]
-)
-
-(define_insn "iwmmxt_wmulumr"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (truncate:V4HI
- (lshiftrt:V4SI
- (plus:V4SI
- (mult:V4SI
- (zero_extend:V4SI (match_operand:V4HI 1 "register_operand" "y"))
- (zero_extend:V4SI (match_operand:V4HI 2 "register_operand" "y")))
- (const_vector:V4SI [(const_int 32768)
- (const_int 32768)
- (const_int 32768)
- (const_int 32768)]))
- (const_int 16))))]
- "TARGET_REALLY_IWMMXT"
- "wmulumr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmul")]
-)
-
-(define_insn "iwmmxt_wmulwsmr"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (truncate:V2SI
- (ashiftrt:V2DI
- (plus:V2DI
- (mult:V2DI
- (sign_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (sign_extend:V2DI (match_operand:V2SI 2 "register_operand" "y")))
- (const_vector:V2DI [(const_int 2147483648)
- (const_int 2147483648)]))
- (const_int 32))))]
- "TARGET_REALLY_IWMMXT"
- "wmulwsmr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmul")]
-)
-
-(define_insn "iwmmxt_wmulwumr"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (truncate:V2SI
- (lshiftrt:V2DI
- (plus:V2DI
- (mult:V2DI
- (zero_extend:V2DI (match_operand:V2SI 1 "register_operand" "y"))
- (zero_extend:V2DI (match_operand:V2SI 2 "register_operand" "y")))
- (const_vector:V2DI [(const_int 2147483648)
- (const_int 2147483648)]))
- (const_int 32))))]
- "TARGET_REALLY_IWMMXT"
- "wmulwumr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmulw")]
-)
-
-(define_insn "iwmmxt_wmulwl"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (mult:V2SI
- (match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")))]
- "TARGET_REALLY_IWMMXT"
- "wmulwl%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmulw")]
-)
-
-(define_insn "iwmmxt_wqmulm"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WQMULM))]
- "TARGET_REALLY_IWMMXT"
- "wqmulm%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmulm")]
-)
-
-(define_insn "iwmmxt_wqmulwm"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")] UNSPEC_WQMULWM))]
- "TARGET_REALLY_IWMMXT"
- "wqmulwm%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmulwm")]
-)
-
-(define_insn "iwmmxt_wqmulmr"
- [(set (match_operand:V4HI 0 "register_operand" "=y")
- (unspec:V4HI [(match_operand:V4HI 1 "register_operand" "y")
- (match_operand:V4HI 2 "register_operand" "y")] UNSPEC_WQMULMR))]
- "TARGET_REALLY_IWMMXT"
- "wqmulmr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmulm")]
-)
-
-(define_insn "iwmmxt_wqmulwmr"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "y")
- (match_operand:V2SI 2 "register_operand" "y")] UNSPEC_WQMULWMR))]
- "TARGET_REALLY_IWMMXT"
- "wqmulwmr%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmulwm")]
-)
-
-(define_insn "iwmmxt_waddbhusm"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_concat:V8QI
- (const_vector:V4QI [(const_int 0) (const_int 0) (const_int 0) (const_int 0)])
- (us_truncate:V4QI
- (ss_plus:V4HI
- (match_operand:V4HI 1 "register_operand" "y")
- (zero_extend:V4HI
- (vec_select:V4QI (match_operand:V8QI 2 "register_operand" "y")
- (parallel [(const_int 4) (const_int 5) (const_int 6) (const_int 7)])))))))]
- "TARGET_REALLY_IWMMXT"
- "waddbhusm%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_waddbhus")]
-)
-
-(define_insn "iwmmxt_waddbhusl"
- [(set (match_operand:V8QI 0 "register_operand" "=y")
- (vec_concat:V8QI
- (us_truncate:V4QI
- (ss_plus:V4HI
- (match_operand:V4HI 1 "register_operand" "y")
- (zero_extend:V4HI
- (vec_select:V4QI (match_operand:V8QI 2 "register_operand" "y")
- (parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)])))))
- (const_vector:V4QI [(const_int 0) (const_int 0) (const_int 0) (const_int 0)])))]
- "TARGET_REALLY_IWMMXT"
- "waddbhusl%?\\t%0, %1, %2"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_waddbhus")]
-)
-
-(define_insn "iwmmxt_wqmiabb"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 32))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 32))] UNSPEC_WQMIAxy))]
- "TARGET_REALLY_IWMMXT"
- "wqmiabb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiabt"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 32))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 48))] UNSPEC_WQMIAxy))]
- "TARGET_REALLY_IWMMXT"
- "wqmiabt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiatb"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 48))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 32))] UNSPEC_WQMIAxy))]
- "TARGET_REALLY_IWMMXT"
- "wqmiatb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiatt"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 48))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 48))] UNSPEC_WQMIAxy))]
- "TARGET_REALLY_IWMMXT"
- "wqmiatt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiabbn"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 32))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 32))] UNSPEC_WQMIAxyn))]
- "TARGET_REALLY_IWMMXT"
- "wqmiabbn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiabtn"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 32))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 48))] UNSPEC_WQMIAxyn))]
- "TARGET_REALLY_IWMMXT"
- "wqmiabtn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiatbn"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 48))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 0))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 32))] UNSPEC_WQMIAxyn))]
- "TARGET_REALLY_IWMMXT"
- "wqmiatbn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wqmiattn"
- [(set (match_operand:V2SI 0 "register_operand" "=y")
- (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "0")
- (zero_extract:V4HI (match_operand:V4HI 2 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 2) (const_int 16) (const_int 48))
- (zero_extract:V4HI (match_operand:V4HI 3 "register_operand" "y") (const_int 16) (const_int 16))
- (zero_extract:V4HI (match_dup 3) (const_int 16) (const_int 48))] UNSPEC_WQMIAxyn))]
- "TARGET_REALLY_IWMMXT"
- "wqmiattn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wqmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiabb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 0)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 0)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 2)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 2)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiabb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiabt"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 0)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 1)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 2)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 3)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiabt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiatb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 1)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 0)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 3)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 2)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiatb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiatt"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 1)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 1)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 3)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 3)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiatt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiabbn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 0)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 0)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 2)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 2)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiabbn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiabtn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 0)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 1)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 2)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 3)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiabtn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiatbn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 1)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 0)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 3)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 2)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiatbn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiattn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI (match_operand:DI 1 "register_operand" "0")
- (plus:DI
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 2 "register_operand" "y")
- (parallel [(const_int 1)])))
- (sign_extend:DI
- (vec_select:HI (match_operand:V4HI 3 "register_operand" "y")
- (parallel [(const_int 1)]))))
- (mult:DI
- (sign_extend:DI
- (vec_select:HI (match_dup 2)
- (parallel [(const_int 3)])))
- (sign_extend:DI
- (vec_select:HI (match_dup 3)
- (parallel [(const_int 3)])))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiattn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiaxy")]
-)
-
-(define_insn "iwmmxt_wmiawbb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 0)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 0)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawbb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawbt"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 0)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 1)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawbt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawtb"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 1)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 0)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawtb%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawtt"
-[(set (match_operand:DI 0 "register_operand" "=y")
- (plus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 1)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 1)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawtt%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawbbn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 0)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 0)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawbbn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawbtn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 0)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 1)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawbtn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawtbn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 1)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 0)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawtbn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmiawttn"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (minus:DI
- (match_operand:DI 1 "register_operand" "0")
- (mult:DI
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 2 "register_operand" "y") (parallel [(const_int 1)])))
- (sign_extend:DI (vec_select:SI (match_operand:V2SI 3 "register_operand" "y") (parallel [(const_int 1)]))))))]
- "TARGET_REALLY_IWMMXT"
- "wmiawttn%?\\t%0, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmiawxy")]
-)
-
-(define_insn "iwmmxt_wmerge"
- [(set (match_operand:DI 0 "register_operand" "=y")
- (ior:DI
- (ashift:DI
- (match_operand:DI 2 "register_operand" "y")
- (minus:SI
- (const_int 64)
- (mult:SI
- (match_operand:SI 3 "immediate_operand" "i")
- (const_int 8))))
- (lshiftrt:DI
- (ashift:DI
- (match_operand:DI 1 "register_operand" "y")
- (mult:SI
- (match_dup 3)
- (const_int 8)))
- (mult:SI
- (match_dup 3)
- (const_int 8)))))]
- "TARGET_REALLY_IWMMXT"
- "wmerge%?\\t%0, %1, %2, %3"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_wmerge")]
-)
-
-(define_insn "iwmmxt_tandc<mode>3"
- [(set (reg:CC CC_REGNUM)
- (subreg:CC (unspec:VMMX [(const_int 0)] UNSPEC_TANDC) 0))
- (unspec:CC [(reg:SI 15)] UNSPEC_TANDC)]
- "TARGET_REALLY_IWMMXT"
- "tandc<MMX_char>%?\\t r15"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_tandc")]
-)
-
-(define_insn "iwmmxt_torc<mode>3"
- [(set (reg:CC CC_REGNUM)
- (subreg:CC (unspec:VMMX [(const_int 0)] UNSPEC_TORC) 0))
- (unspec:CC [(reg:SI 15)] UNSPEC_TORC)]
- "TARGET_REALLY_IWMMXT"
- "torc<MMX_char>%?\\t r15"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_torc")]
-)
-
-(define_insn "iwmmxt_torvsc<mode>3"
- [(set (reg:CC CC_REGNUM)
- (subreg:CC (unspec:VMMX [(const_int 0)] UNSPEC_TORVSC) 0))
- (unspec:CC [(reg:SI 15)] UNSPEC_TORVSC)]
- "TARGET_REALLY_IWMMXT"
- "torvsc<MMX_char>%?\\t r15"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_torvsc")]
-)
-
-(define_insn "iwmmxt_textrc<mode>3"
- [(set (reg:CC CC_REGNUM)
- (subreg:CC (unspec:VMMX [(const_int 0)
- (match_operand:SI 0 "immediate_operand" "i")] UNSPEC_TEXTRC) 0))
- (unspec:CC [(reg:SI 15)] UNSPEC_TEXTRC)]
- "TARGET_REALLY_IWMMXT"
- "textrc<MMX_char>%?\\t r15, %0"
- [(set_attr "predicable" "yes")
- (set_attr "type" "wmmx_textrc")]
-)
diff --git a/gcc/config/arm/marvell-f-iwmmxt.md b/gcc/config/arm/marvell-f-iwmmxt.md
deleted file mode 100644
index c9c7b00..0000000
--- a/gcc/config/arm/marvell-f-iwmmxt.md
+++ /dev/null
@@ -1,189 +0,0 @@
-;; Marvell WMMX2 pipeline description
-;; Copyright (C) 2011-2025 Free Software Foundation, Inc.
-;; Written by Marvell, Inc.
-
-;; This file is part of GCC.
-
-;; GCC is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 3, or (at your
-;; option) any later version.
-
-;; GCC is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-;; License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GCC; see the file COPYING3. If not see
-;; <http://www.gnu.org/licenses/>.
-
-
-(define_automaton "marvell_f_iwmmxt")
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Pipelines
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; This is a 7-stage pipelines:
-;;
-;; MD | MI | ME1 | ME2 | ME3 | ME4 | MW
-;;
-;; There are various bypasses modelled to a greater or lesser extent.
-;;
-;; Latencies in this file correspond to the number of cycles after
-;; the issue stage that it takes for the result of the instruction to
-;; be computed, or for its side-effects to occur.
-
-(define_cpu_unit "mf_iwmmxt_MD" "marvell_f_iwmmxt")
-(define_cpu_unit "mf_iwmmxt_MI" "marvell_f_iwmmxt")
-(define_cpu_unit "mf_iwmmxt_ME1" "marvell_f_iwmmxt")
-(define_cpu_unit "mf_iwmmxt_ME2" "marvell_f_iwmmxt")
-(define_cpu_unit "mf_iwmmxt_ME3" "marvell_f_iwmmxt")
-(define_cpu_unit "mf_iwmmxt_ME4" "marvell_f_iwmmxt")
-(define_cpu_unit "mf_iwmmxt_MW" "marvell_f_iwmmxt")
-
-(define_reservation "mf_iwmmxt_ME"
- "mf_iwmmxt_ME1,mf_iwmmxt_ME2,mf_iwmmxt_ME3,mf_iwmmxt_ME4"
-)
-
-(define_reservation "mf_iwmmxt_pipeline"
- "mf_iwmmxt_MD, mf_iwmmxt_MI, mf_iwmmxt_ME, mf_iwmmxt_MW"
-)
-
-;; An attribute to indicate whether our reservations are applicable.
-(define_attr "marvell_f_iwmmxt" "yes,no"
- (const (if_then_else (symbol_ref "arm_arch_iwmmxt")
- (const_string "yes") (const_string "no"))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; instruction classes
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; An attribute appended to instructions for classification
-
-(define_attr "wmmxt_shift" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_wror, wmmx_wsll, wmmx_wsra, wmmx_wsrl")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_pack" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_waligni, wmmx_walignr, wmmx_wmerge,\
- wmmx_wpack, wmmx_wshufh, wmmx_wunpckeh,\
- wmmx_wunpckih, wmmx_wunpckel, wmmx_wunpckil")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_mult_c1" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_wmac, wmmx_wmadd, wmmx_wmiaxy,\
- wmmx_wmiawxy, wmmx_wmulw, wmmx_wqmiaxy,\
- wmmx_wqmulwm")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_mult_c2" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_wmul, wmmx_wqmulm")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_alu_c1" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_wabs, wmmx_wabsdiff, wmmx_wand,\
- wmmx_wandn, wmmx_wmov, wmmx_wor, wmmx_wxor")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_alu_c2" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_wacc, wmmx_wadd, wmmx_waddsubhx,\
- wmmx_wavg2, wmmx_wavg4, wmmx_wcmpeq,\
- wmmx_wcmpgt, wmmx_wmax, wmmx_wmin,\
- wmmx_wsub, wmmx_waddbhus, wmmx_wsubaddhx")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_alu_c3" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_wsad")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_transfer_c1" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_tbcst, wmmx_tinsr,\
- wmmx_tmcr, wmmx_tmcrr")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_transfer_c2" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_textrm, wmmx_tmovmsk,\
- wmmx_tmrc, wmmx_tmrrc")
- (const_string "yes") (const_string "no"))
-)
-
-(define_attr "wmmxt_transfer_c3" "yes,no"
- (if_then_else (eq_attr "type" "wmmx_tmia, wmmx_tmiaph, wmmx_tmiaxy")
- (const_string "yes") (const_string "no"))
-)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Main description
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(define_insn_reservation "marvell_f_iwmmxt_alu_c1" 1
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_alu_c1" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_pack" 1
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_pack" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_shift" 1
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_shift" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_transfer_c1" 1
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_transfer_c1" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_transfer_c2" 5
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_transfer_c2" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_alu_c2" 2
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_alu_c2" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_alu_c3" 3
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_alu_c3" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_transfer_c3" 4
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_transfer_c3" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_mult_c1" 4
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_mult_c1" "yes"))
- "mf_iwmmxt_pipeline")
-
-;There is a forwarding path from ME3 stage
-(define_insn_reservation "marvell_f_iwmmxt_mult_c2" 3
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "wmmxt_mult_c2" "yes"))
- "mf_iwmmxt_pipeline")
-
-(define_insn_reservation "marvell_f_iwmmxt_wstr" 0
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "type" "wmmx_wstr"))
- "mf_iwmmxt_pipeline")
-
-;There is a forwarding path from MW stage
-(define_insn_reservation "marvell_f_iwmmxt_wldr" 5
- (and (eq_attr "marvell_f_iwmmxt" "yes")
- (eq_attr "type" "wmmx_wldr"))
- "mf_iwmmxt_pipeline")
diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md
index 75c06d9..57d4ec6 100644
--- a/gcc/config/arm/predicates.md
+++ b/gcc/config/arm/predicates.md
@@ -806,14 +806,8 @@
;;-------------------------------------------------------------------------
;;
-;; iWMMXt predicates
-;;
-
-(define_predicate "imm_or_reg_operand"
- (ior (match_operand 0 "immediate_operand")
- (match_operand 0 "register_operand")))
-
;; Neon predicates
+;;
(define_predicate "const_multiple_of_8_operand"
(match_code "const_int")
diff --git a/gcc/config/arm/t-arm b/gcc/config/arm/t-arm
index 641f8f5..670f574 100644
--- a/gcc/config/arm/t-arm
+++ b/gcc/config/arm/t-arm
@@ -50,11 +50,8 @@ MD_INCLUDES= $(srcdir)/config/arm/arm1020e.md \
$(srcdir)/config/arm/fa726te.md \
$(srcdir)/config/arm/fmp626.md \
$(srcdir)/config/arm/iterators.md \
- $(srcdir)/config/arm/iwmmxt.md \
- $(srcdir)/config/arm/iwmmxt2.md \
$(srcdir)/config/arm/ldmstm.md \
$(srcdir)/config/arm/ldrdstrd.md \
- $(srcdir)/config/arm/marvell-f-iwmmxt.md \
$(srcdir)/config/arm/mve.md \
$(srcdir)/config/arm/neon.md \
$(srcdir)/config/arm/predicates.md \
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md
index 172c974..019f9d4 100644
--- a/gcc/config/arm/thumb2.md
+++ b/gcc/config/arm/thumb2.md
@@ -235,7 +235,7 @@
(define_insn "*thumb2_movsi_insn"
[(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,l,r,r,lk*r,m")
(match_operand:SI 1 "general_operand" "rk,I,Py,K,j,mi,lk*r"))]
- "TARGET_THUMB2 && !TARGET_IWMMXT && !TARGET_HARD_FLOAT
+ "TARGET_THUMB2 && !TARGET_HARD_FLOAT
&& ( register_operand (operands[0], SImode)
|| register_operand (operands[1], SImode))"
{
diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md
index b72c871..e517b91 100644
--- a/gcc/config/arm/types.md
+++ b/gcc/config/arm/types.md
@@ -184,70 +184,6 @@
; untyped insn without type information - default, and error,
; case.
;
-; The classification below is for instructions used by the Wireless MMX
-; Technology. Each attribute value is used to classify an instruction of the
-; same name or family.
-;
-; wmmx_tandc
-; wmmx_tbcst
-; wmmx_textrc
-; wmmx_textrm
-; wmmx_tinsr
-; wmmx_tmcr
-; wmmx_tmcrr
-; wmmx_tmia
-; wmmx_tmiaph
-; wmmx_tmiaxy
-; wmmx_tmrc
-; wmmx_tmrrc
-; wmmx_tmovmsk
-; wmmx_torc
-; wmmx_torvsc
-; wmmx_wabs
-; wmmx_wdiff
-; wmmx_wacc
-; wmmx_wadd
-; wmmx_waddbhus
-; wmmx_waddsubhx
-; wmmx_waligni
-; wmmx_walignr
-; wmmx_wand
-; wmmx_wandn
-; wmmx_wavg2
-; wmmx_wavg4
-; wmmx_wcmpeq
-; wmmx_wcmpgt
-; wmmx_wmac
-; wmmx_wmadd
-; wmmx_wmax
-; wmmx_wmerge
-; wmmx_wmiawxy
-; wmmx_wmiaxy
-; wmmx_wmin
-; wmmx_wmov
-; wmmx_wmul
-; wmmx_wmulw
-; wmmx_wldr
-; wmmx_wor
-; wmmx_wpack
-; wmmx_wqmiaxy
-; wmmx_wqmulm
-; wmmx_wqmulwm
-; wmmx_wror
-; wmmx_wsad
-; wmmx_wshufh
-; wmmx_wsll
-; wmmx_wsra
-; wmmx_wsrl
-; wmmx_wstr
-; wmmx_wsub
-; wmmx_wsubaddhx
-; wmmx_wunpckeh
-; wmmx_wunpckel
-; wmmx_wunpckih
-; wmmx_wunpckil
-; wmmx_wxor
-;
; The classification below is for NEON instructions. If a new neon type is
; added, please ensure this is added to the is_neon_type attribute below too.
;
@@ -714,65 +650,6 @@
umull,\
umulls,\
untyped,\
- wmmx_tandc,\
- wmmx_tbcst,\
- wmmx_textrc,\
- wmmx_textrm,\
- wmmx_tinsr,\
- wmmx_tmcr,\
- wmmx_tmcrr,\
- wmmx_tmia,\
- wmmx_tmiaph,\
- wmmx_tmiaxy,\
- wmmx_tmrc,\
- wmmx_tmrrc,\
- wmmx_tmovmsk,\
- wmmx_torc,\
- wmmx_torvsc,\
- wmmx_wabs,\
- wmmx_wabsdiff,\
- wmmx_wacc,\
- wmmx_wadd,\
- wmmx_waddbhus,\
- wmmx_waddsubhx,\
- wmmx_waligni,\
- wmmx_walignr,\
- wmmx_wand,\
- wmmx_wandn,\
- wmmx_wavg2,\
- wmmx_wavg4,\
- wmmx_wcmpeq,\
- wmmx_wcmpgt,\
- wmmx_wmac,\
- wmmx_wmadd,\
- wmmx_wmax,\
- wmmx_wmerge,\
- wmmx_wmiawxy,\
- wmmx_wmiaxy,\
- wmmx_wmin,\
- wmmx_wmov,\
- wmmx_wmul,\
- wmmx_wmulw,\
- wmmx_wldr,\
- wmmx_wor,\
- wmmx_wpack,\
- wmmx_wqmiaxy,\
- wmmx_wqmulm,\
- wmmx_wqmulwm,\
- wmmx_wror,\
- wmmx_wsad,\
- wmmx_wshufh,\
- wmmx_wsll,\
- wmmx_wsra,\
- wmmx_wsrl,\
- wmmx_wstr,\
- wmmx_wsub,\
- wmmx_wsubaddhx,\
- wmmx_wunpckeh,\
- wmmx_wunpckel,\
- wmmx_wunpckih,\
- wmmx_wunpckil,\
- wmmx_wxor,\
\
neon_add,\
neon_add_q,\
diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md
index a03609d..c1ee972 100644
--- a/gcc/config/arm/unspecs.md
+++ b/gcc/config/arm/unspecs.md
@@ -21,7 +21,6 @@
;; UNSPEC Usage:
;; Note: sin and cos are no-longer used.
;; Unspec enumerators for Neon are defined in neon.md.
-;; Unspec enumerators for iwmmxt2 are defined in iwmmxt2.md
(define_c_enum "unspec" [
UNSPEC_PUSH_MULT ; `push multiple' operation:
@@ -42,17 +41,6 @@
; and stack frame generation. Operand 0 is the
; register to "use".
UNSPEC_CHECK_ARCH ; Set CCs to indicate 26-bit or 32-bit mode.
- UNSPEC_WSHUFH ; Used by the intrinsic form of the iWMMXt WSHUFH instruction.
- UNSPEC_WACC ; Used by the intrinsic form of the iWMMXt WACC instruction.
- UNSPEC_TMOVMSK ; Used by the intrinsic form of the iWMMXt TMOVMSK instruction.
- UNSPEC_WSAD ; Used by the intrinsic form of the iWMMXt WSAD instruction.
- UNSPEC_WSADZ ; Used by the intrinsic form of the iWMMXt WSADZ instruction.
- UNSPEC_WMACS ; Used by the intrinsic form of the iWMMXt WMACS instruction.
- UNSPEC_WMACU ; Used by the intrinsic form of the iWMMXt WMACU instruction.
- UNSPEC_WMACSZ ; Used by the intrinsic form of the iWMMXt WMACSZ instruction.
- UNSPEC_WMACUZ ; Used by the intrinsic form of the iWMMXt WMACUZ instruction.
- UNSPEC_CLRDI ; Used by the intrinsic form of the iWMMXt CLRDI instruction.
- UNSPEC_WALIGNI ; Used by the intrinsic form of the iWMMXt WALIGN instruction.
UNSPEC_TLS ; A symbol that has been treated properly for TLS usage.
UNSPEC_PIC_LABEL ; A label used for PIC access that does not appear in the
; instruction stream.
@@ -164,18 +152,6 @@
(define_c_enum "unspec" [
- UNSPEC_WADDC ; Used by the intrinsic form of the iWMMXt WADDC instruction.
- UNSPEC_WABS ; Used by the intrinsic form of the iWMMXt WABS instruction.
- UNSPEC_WQMULWMR ; Used by the intrinsic form of the iWMMXt WQMULWMR instruction.
- UNSPEC_WQMULMR ; Used by the intrinsic form of the iWMMXt WQMULMR instruction.
- UNSPEC_WQMULWM ; Used by the intrinsic form of the iWMMXt WQMULWM instruction.
- UNSPEC_WQMULM ; Used by the intrinsic form of the iWMMXt WQMULM instruction.
- UNSPEC_WQMIAxyn ; Used by the intrinsic form of the iWMMXt WMIAxyn instruction.
- UNSPEC_WQMIAxy ; Used by the intrinsic form of the iWMMXt WMIAxy instruction.
- UNSPEC_TANDC ; Used by the intrinsic form of the iWMMXt TANDC instruction.
- UNSPEC_TORC ; Used by the intrinsic form of the iWMMXt TORC instruction.
- UNSPEC_TORVSC ; Used by the intrinsic form of the iWMMXt TORVSC instruction.
- UNSPEC_TEXTRC ; Used by the intrinsic form of the iWMMXt TEXTRC instruction.
UNSPEC_GET_FPSCR_NZCVQC ; Represent fetch of FPSCR_nzcvqc content.
])
@@ -205,12 +181,7 @@
; a 64-bit object.
VUNSPEC_POOL_16 ; `pool-entry(16)'. An entry in the constant pool for
; a 128-bit object.
- VUNSPEC_TMRC ; Used by the iWMMXt TMRC instruction.
- VUNSPEC_TMCR ; Used by the iWMMXt TMCR instruction.
VUNSPEC_ALIGN8 ; 8-byte alignment version of VUNSPEC_ALIGN
- VUNSPEC_WCMP_EQ ; Used by the iWMMXt WCMPEQ instructions
- VUNSPEC_WCMP_GTU ; Used by the iWMMXt WCMPGTU instructions
- VUNSPEC_WCMP_GT ; Used by the iwMMXT WCMPGT instructions
VUNSPEC_EH_RETURN ; Use to override the return address for exception
; handling.
VUNSPEC_ATOMIC_CAS ; Represent an atomic compare swap.
diff --git a/gcc/config/arm/vec-common.md b/gcc/config/arm/vec-common.md
index a485d05..061165e 100644
--- a/gcc/config/arm/vec-common.md
+++ b/gcc/config/arm/vec-common.md
@@ -1,4 +1,4 @@
-;; Machine Description for shared bits common to IWMMXT and Neon.
+;; Machine Description for shared bits common to Neon and MVE.
;; Copyright (C) 2006-2025 Free Software Foundation, Inc.
;; Written by CodeSourcery.
;;
@@ -24,7 +24,6 @@
[(set (match_operand:VNIM1 0 "nonimmediate_operand")
(match_operand:VNIM1 1 "general_operand"))]
"TARGET_NEON
- || (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))
|| (TARGET_HAVE_MVE && VALID_MVE_SI_MODE (<MODE>mode))
|| (TARGET_HAVE_MVE_FLOAT && VALID_MVE_SF_MODE (<MODE>mode))"
{
@@ -46,8 +45,7 @@
(define_expand "mov<mode>"
[(set (match_operand:VNINOTM1 0 "nonimmediate_operand")
(match_operand:VNINOTM1 1 "general_operand"))]
- "TARGET_NEON
- || (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))"
+ "TARGET_NEON"
{
gcc_checking_assert (aligned_operand (operands[0], <MODE>mode));
gcc_checking_assert (aligned_operand (operands[1], <MODE>mode));
@@ -83,7 +81,7 @@
})
;; Vector arithmetic. Expanders are blank, then unnamed insns implement
-;; patterns separately for Neon, IWMMXT and MVE.
+;; patterns separately for Neon and MVE.
(define_expand "add<mode>3"
[(set (match_operand:VDQ 0 "s_register_operand")
@@ -103,10 +101,7 @@
[(set (match_operand:VDQWH 0 "s_register_operand")
(mult:VDQWH (match_operand:VDQWH 1 "s_register_operand")
(match_operand:VDQWH 2 "s_register_operand")))]
- "ARM_HAVE_<MODE>_ARITH
- && (!TARGET_REALLY_IWMMXT
- || <MODE>mode == V4HImode
- || <MODE>mode == V2SImode)"
+ "ARM_HAVE_<MODE>_ARITH"
)
(define_expand "smin<mode>3"
@@ -216,13 +211,13 @@
(define_expand "one_cmpl<mode>2"
[(set (match_operand:VDQ 0 "s_register_operand")
(not:VDQ (match_operand:VDQ 1 "s_register_operand")))]
- "ARM_HAVE_<MODE>_ARITH && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
)
(define_expand "<absneg_str><mode>2"
[(set (match_operand:VDQWH 0 "s_register_operand" "")
(ABSNEG:VDQWH (match_operand:VDQWH 1 "s_register_operand" "")))]
- "ARM_HAVE_<MODE>_ARITH && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
)
(define_expand "cadd<rot><mode>3"
@@ -295,8 +290,7 @@
[(set (match_operand:VDQ 0 "nonimmediate_operand")
(unspec:VDQ [(match_operand:VDQ 1 "general_operand")]
UNSPEC_MISALIGNED_ACCESS))]
- "ARM_HAVE_<MODE>_LDST && !BYTES_BIG_ENDIAN
- && unaligned_access && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_LDST && !BYTES_BIG_ENDIAN && unaligned_access"
{
rtx *memloc;
bool for_store = false;
@@ -373,7 +367,7 @@
(unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w,w")
(match_operand:VDQIW 2 "imm_lshift_or_reg_neon" "w,Ds")]
VSHLQ))]
- "ARM_HAVE_<MODE>_ARITH && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
"@
<mve_insn>.<supf>%#<V_sz_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2
* return neon_output_shift_immediate (\"vshl\", 'i', &operands[2], <MODE>mode, VALID_NEON_QREG_MODE (<MODE>mode), true);"
@@ -385,7 +379,7 @@
[(set (match_operand:VDQIW 0 "s_register_operand" "")
(ashift:VDQIW (match_operand:VDQIW 1 "s_register_operand" "")
(match_operand:VDQIW 2 "imm_lshift_or_reg_neon" "")))]
- "ARM_HAVE_<MODE>_ARITH && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
{
emit_insn (gen_mve_vshlq_u<mode> (operands[0], operands[1], operands[2]));
DONE;
@@ -398,7 +392,7 @@
[(set (match_operand:VDQIW 0 "s_register_operand")
(ashiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand")
(match_operand:VDQIW 2 "imm_rshift_or_reg_neon")))]
- "ARM_HAVE_<MODE>_ARITH && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
{
if (s_register_operand (operands[2], <MODE>mode))
{
@@ -416,7 +410,7 @@
[(set (match_operand:VDQIW 0 "s_register_operand")
(lshiftrt:VDQIW (match_operand:VDQIW 1 "s_register_operand")
(match_operand:VDQIW 2 "imm_rshift_or_reg_neon")))]
- "ARM_HAVE_<MODE>_ARITH && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
{
if (s_register_operand (operands[2], <MODE>mode))
{
@@ -606,8 +600,7 @@
(define_expand "clz<mode>2"
[(set (match_operand:VDQIW 0 "s_register_operand")
(clz:VDQIW (match_operand:VDQIW 1 "s_register_operand")))]
- "ARM_HAVE_<MODE>_ARITH
- && !TARGET_REALLY_IWMMXT"
+ "ARM_HAVE_<MODE>_ARITH"
)
(define_expand "vec_init<mode><V_elem_l>"
[(match_operand:VDQX 0 "s_register_operand")
diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc
index 54b3f6d..cc8313b 100644
--- a/gcc/config/i386/i386-features.cc
+++ b/gcc/config/i386/i386-features.cc
@@ -3095,13 +3095,10 @@ ix86_place_single_vector_set (rtx dest, rtx src, bitmap bbs)
insn = NEXT_INSN (insn);
}
- rtx_insn *set_insn;
if (insn == BB_HEAD (bb))
- set_insn = emit_insn_before (set, insn);
+ emit_insn_before (set, insn);
else
- set_insn = emit_insn_after (set,
- insn ? PREV_INSN (insn) : BB_END (bb));
- df_insn_rescan (set_insn);
+ emit_insn_after (set, insn ? PREV_INSN (insn) : BB_END (bb));
}
/* At entry of the nearest common dominator for basic blocks with
@@ -3225,7 +3222,6 @@ remove_partial_avx_dependency (void)
/* Generate an XMM vector SET. */
set = gen_rtx_SET (vec, src);
set_insn = emit_insn_before (set, insn);
- df_insn_rescan (set_insn);
if (cfun->can_throw_non_call_exceptions)
{
@@ -3372,12 +3368,12 @@ replace_vector_const (machine_mode vector_mode, rtx vector_const,
/* Get the single SET instruction. */
rtx set = single_set (insn);
- rtx dest = SET_SRC (set);
- machine_mode mode = GET_MODE (dest);
+ rtx src = SET_SRC (set);
+ machine_mode mode = GET_MODE (src);
rtx replace;
/* Replace the source operand with VECTOR_CONST. */
- if (SUBREG_P (dest) || mode == vector_mode)
+ if (SUBREG_P (src) || mode == vector_mode)
replace = vector_const;
else
{
@@ -3396,8 +3392,7 @@ replace_vector_const (machine_mode vector_mode, rtx vector_const,
vreg = gen_reg_rtx (vmode);
rtx vsubreg = gen_rtx_SUBREG (vmode, vector_const, 0);
rtx pat = gen_rtx_SET (vreg, vsubreg);
- rtx_insn *vinsn = emit_insn_before (pat, insn);
- df_insn_rescan (vinsn);
+ emit_insn_before (pat, insn);
}
replace = gen_rtx_SUBREG (mode, vreg, 0);
}
diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index 9c24a92..3d629b0 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -21753,7 +21753,7 @@ ix86_widen_mult_cost (const struct processor_costs *cost,
/* pmuludq under sse2, pmuldq under sse4.1, for sign_extend,
require extra 4 mul, 4 add, 4 cmp and 2 shift. */
if (!TARGET_SSE4_1 && !uns_p)
- extra_cost = (cost->mulss + cost->addss + cost->sse_op) * 4
+ extra_cost = (cost->mulss + cost->sse_op + cost->sse_op) * 4
+ cost->sse_op * 2;
/* Fallthru. */
case V4DImode:
@@ -21803,11 +21803,11 @@ ix86_multiplication_cost (const struct processor_costs *cost,
else if (TARGET_AVX2)
nops += 2;
else if (TARGET_XOP)
- extra += cost->sse_load[2];
+ extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
else
{
nops += 1;
- extra += cost->sse_load[2];
+ extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
}
goto do_qimode;
@@ -21826,13 +21826,13 @@ ix86_multiplication_cost (const struct processor_costs *cost,
{
nmults += 1;
nops += 2;
- extra += cost->sse_load[2];
+ extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
}
else
{
nmults += 1;
nops += 4;
- extra += cost->sse_load[2];
+ extra += COSTS_N_INSNS (cost->sse_load[2]) / 2;
}
goto do_qimode;
@@ -21845,14 +21845,16 @@ ix86_multiplication_cost (const struct processor_costs *cost,
{
nmults += 1;
nops += 4;
- extra += cost->sse_load[3] * 2;
+ /* 2 loads, so no division by 2. */
+ extra += COSTS_N_INSNS (cost->sse_load[3]);
}
goto do_qimode;
case V64QImode:
nmults = 2;
nops = 9;
- extra = cost->sse_load[3] * 2 + cost->sse_load[4] * 2;
+ /* 2 loads of each size, so no division by 2. */
+ extra = COSTS_N_INSNS (cost->sse_load[3] + cost->sse_load[4]);
do_qimode:
return ix86_vec_cost (mode, cost->mulss * nmults
@@ -21945,7 +21947,7 @@ ix86_shift_rotate_cost (const struct processor_costs *cost,
/* Use vpbroadcast. */
extra = cost->sse_op;
else
- extra = cost->sse_load[2];
+ extra = COSTS_N_INSNS (cost->sse_load[2]) / 2;
if (constant_op1)
{
@@ -21976,7 +21978,7 @@ ix86_shift_rotate_cost (const struct processor_costs *cost,
shift with one insn set the cost to prefer paddb. */
if (constant_op1)
{
- extra = cost->sse_load[2];
+ extra = COSTS_N_INSNS (cost->sse_load[2]) / 2;
return ix86_vec_cost (mode, cost->sse_op) + extra;
}
else
@@ -21991,7 +21993,9 @@ ix86_shift_rotate_cost (const struct processor_costs *cost,
/* Use vpbroadcast. */
extra = cost->sse_op;
else
- extra = (mode == V16QImode) ? cost->sse_load[2] : cost->sse_load[3];
+ extra = COSTS_N_INSNS (mode == V16QImode
+ ? cost->sse_load[2]
+ : cost->sse_load[3]) / 2;
if (constant_op1)
{
@@ -26060,7 +26064,7 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind,
else
{
m_num_gpr_needed[where]++;
- stmt_cost += ix86_cost->sse_to_integer;
+ stmt_cost += COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
}
}
}
diff --git a/gcc/config/nvptx/gen-multilib-matches-tests b/gcc/config/nvptx/gen-multilib-matches-tests
index a07f19a..fbfae88 100644
--- a/gcc/config/nvptx/gen-multilib-matches-tests
+++ b/gcc/config/nvptx/gen-multilib-matches-tests
@@ -18,6 +18,7 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -32,14 +33,15 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
CMMC
-BEGIN '--with-arch=sm_30', '--with-multilib-list=sm_30,sm_35,sm_37,sm_52,sm_53,sm_70,sm_75,sm_80,sm_89'
+BEGIN '--with-arch=sm_30', '--with-multilib-list=sm_30,sm_35,sm_37,sm_52,sm_53,sm_61,sm_70,sm_75,sm_80,sm_89'
SMOID sm_30
-SMOIL sm_30 sm_35 sm_37 sm_52 sm_53 sm_70 sm_75 sm_80 sm_89
+SMOIL sm_30 sm_35 sm_37 sm_52 sm_53 sm_61 sm_70 sm_75 sm_80 sm_89
AEMM .=misa?sm_30
CMMC
@@ -52,6 +54,7 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -65,6 +68,7 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -79,6 +83,7 @@ AEMM misa?sm_30=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -93,6 +98,7 @@ AEMM misa?sm_35=misa?sm_30
AEMM misa?sm_35=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM misa?sm_75=misa?sm_80
AEMM misa?sm_75=misa?sm_89
@@ -106,6 +112,7 @@ AEMM misa?sm_30=misa?sm_35
AEMM misa?sm_30=misa?sm_37
AEMM misa?sm_30=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -119,19 +126,55 @@ AEMM misa?sm_37=misa?sm_30
AEMM misa?sm_37=misa?sm_35
AEMM misa?sm_37=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
AEMM .=misa?sm_89
CMMC
-BEGIN '--with-arch=sm_53', '--with-multilib-list=sm_53=sm_30,sm_35,sm_37,sm_52,sm_70,sm_75,sm_80,sm_89'
+BEGIN '--with-arch=sm_53', '--with-multilib-list=sm_30,sm_35,sm_37,sm_52,sm_61,sm_70,sm_75,sm_80,sm_89'
SMOID sm_53
-SMOIL sm_53 sm_30 sm_35 sm_37 sm_52 sm_70 sm_75 sm_80 sm_89
+SMOIL sm_53 sm_30 sm_35 sm_37 sm_52 sm_61 sm_70 sm_75 sm_80 sm_89
AEMM .=misa?sm_53
CMMC
+BEGIN '--with-arch=sm_61', '--with-multilib-list=sm_61,sm_30'
+SMOID sm_61
+SMOIL sm_61 sm_30
+AEMM misa?sm_30=misa?sm_35
+AEMM misa?sm_30=misa?sm_37
+AEMM misa?sm_30=misa?sm_52
+AEMM misa?sm_30=misa?sm_53
+AEMM .=misa?sm_61
+AEMM .=misa?sm_70
+AEMM .=misa?sm_75
+AEMM .=misa?sm_80
+AEMM .=misa?sm_89
+CMMC
+
+BEGIN '--with-arch=sm_61', '--with-multilib-list=sm_61,sm_37'
+SMOID sm_61
+SMOIL sm_61 sm_37
+AEMM misa?sm_37=misa?sm_30
+AEMM misa?sm_37=misa?sm_35
+AEMM misa?sm_37=misa?sm_52
+AEMM misa?sm_37=misa?sm_53
+AEMM .=misa?sm_61
+AEMM .=misa?sm_70
+AEMM .=misa?sm_75
+AEMM .=misa?sm_80
+AEMM .=misa?sm_89
+CMMC
+
+BEGIN '--with-arch=sm_61', '--with-multilib-list=sm_30,sm_35,sm_37,sm_52,sm_61,sm_70,sm_75,sm_80,sm_89'
+SMOID sm_61
+SMOIL sm_61 sm_30 sm_35 sm_37 sm_52 sm_53 sm_70 sm_75 sm_80 sm_89
+AEMM .=misa?sm_61
+CMMC
+
+
BEGIN '--with-arch=sm_70', '--with-multilib-list=sm_70'
SMOID sm_70
SMOIL sm_70
@@ -140,6 +183,7 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -153,6 +197,7 @@ AEMM misa?sm_30=misa?sm_35
AEMM misa?sm_30=misa?sm_37
AEMM misa?sm_30=misa?sm_52
AEMM misa?sm_30=misa?sm_53
+AEMM misa?sm_30=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -166,6 +211,7 @@ AEMM misa?sm_53=misa?sm_30
AEMM misa?sm_53=misa?sm_35
AEMM misa?sm_53=misa?sm_37
AEMM misa?sm_53=misa?sm_52
+AEMM misa?sm_53=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -178,6 +224,7 @@ SMOIL sm_70 sm_53 sm_30
AEMM misa?sm_30=misa?sm_35
AEMM misa?sm_30=misa?sm_37
AEMM misa?sm_30=misa?sm_52
+AEMM misa?sm_53=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -192,6 +239,7 @@ AEMM misa?sm_30=misa?sm_35
AEMM misa?sm_30=misa?sm_37
AEMM misa?sm_30=misa?sm_52
AEMM misa?sm_30=misa?sm_53
+AEMM misa?sm_30=misa?sm_61
AEMM misa?sm_30=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -205,6 +253,7 @@ AEMM misa?sm_53=misa?sm_30
AEMM misa?sm_53=misa?sm_35
AEMM misa?sm_53=misa?sm_37
AEMM misa?sm_53=misa?sm_52
+AEMM misa?sm_53=misa?sm_61
AEMM misa?sm_53=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -217,6 +266,7 @@ SMOIL sm_75 sm_30 sm_53
AEMM misa?sm_30=misa?sm_35
AEMM misa?sm_30=misa?sm_37
AEMM misa?sm_30=misa?sm_52
+AEMM misa?sm_53=misa?sm_61
AEMM misa?sm_53=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -232,6 +282,7 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -245,6 +296,7 @@ AEMM misa?sm_30=misa?sm_35
AEMM misa?sm_30=misa?sm_37
AEMM misa?sm_30=misa?sm_52
AEMM misa?sm_30=misa?sm_53
+AEMM misa?sm_30=misa?sm_61
AEMM misa?sm_30=misa?sm_70
AEMM misa?sm_30=misa?sm_75
AEMM .=misa?sm_80
@@ -259,6 +311,7 @@ AEMM misa?sm_75=misa?sm_35
AEMM misa?sm_75=misa?sm_37
AEMM misa?sm_75=misa?sm_52
AEMM misa?sm_75=misa?sm_53
+AEMM misa?sm_75=misa?sm_61
AEMM misa?sm_75=misa?sm_70
AEMM .=misa?sm_80
AEMM .=misa?sm_89
@@ -273,6 +326,7 @@ AEMM .=misa?sm_35
AEMM .=misa?sm_37
AEMM .=misa?sm_52
AEMM .=misa?sm_53
+AEMM .=misa?sm_61
AEMM .=misa?sm_70
AEMM .=misa?sm_75
AEMM .=misa?sm_80
@@ -286,6 +340,7 @@ AEMM misa?sm_52=misa?sm_30
AEMM misa?sm_52=misa?sm_35
AEMM misa?sm_52=misa?sm_37
AEMM misa?sm_52=misa?sm_53
+AEMM misa?sm_52=misa?sm_61
AEMM misa?sm_52=misa?sm_70
AEMM misa?sm_52=misa?sm_75
AEMM misa?sm_52=misa?sm_80
@@ -293,8 +348,8 @@ AEMM .=misa?sm_89
CMMC
-BEGIN '--with-arch=sm_89', '--with-multilib-list=sm_89,sm_30,sm_35,sm_37,sm_52,sm_53,sm_70,sm_75,sm_80'
+BEGIN '--with-arch=sm_89', '--with-multilib-list=sm_89,sm_30,sm_35,sm_37,sm_52,sm_53,sm_61,sm_70,sm_75,sm_80'
SMOID sm_89
-SMOIL sm_89 sm_30 sm_35 sm_37 sm_52 sm_53 sm_70 sm_75 sm_80
+SMOIL sm_89 sm_30 sm_35 sm_37 sm_52 sm_53 sm_61 sm_70 sm_75 sm_80
AEMM .=misa?sm_89
CMMC
diff --git a/gcc/config/nvptx/nvptx-gen.h b/gcc/config/nvptx/nvptx-gen.h
index 893df41..f5b9899 100644
--- a/gcc/config/nvptx/nvptx-gen.h
+++ b/gcc/config/nvptx/nvptx-gen.h
@@ -26,6 +26,7 @@
#define TARGET_SM37 (ptx_isa_option >= PTX_ISA_SM37)
#define TARGET_SM52 (ptx_isa_option >= PTX_ISA_SM52)
#define TARGET_SM53 (ptx_isa_option >= PTX_ISA_SM53)
+#define TARGET_SM61 (ptx_isa_option >= PTX_ISA_SM61)
#define TARGET_SM70 (ptx_isa_option >= PTX_ISA_SM70)
#define TARGET_SM75 (ptx_isa_option >= PTX_ISA_SM75)
#define TARGET_SM80 (ptx_isa_option >= PTX_ISA_SM80)
diff --git a/gcc/config/nvptx/nvptx-gen.opt b/gcc/config/nvptx/nvptx-gen.opt
index f45e8ef..bbae32d 100644
--- a/gcc/config/nvptx/nvptx-gen.opt
+++ b/gcc/config/nvptx/nvptx-gen.opt
@@ -39,6 +39,9 @@ EnumValue
Enum(ptx_isa) String(sm_53) Value(PTX_ISA_SM53)
EnumValue
+Enum(ptx_isa) String(sm_61) Value(PTX_ISA_SM61)
+
+EnumValue
Enum(ptx_isa) String(sm_70) Value(PTX_ISA_SM70)
EnumValue
diff --git a/gcc/config/nvptx/nvptx-opts.h b/gcc/config/nvptx/nvptx-opts.h
index d886701..07bcd32 100644
--- a/gcc/config/nvptx/nvptx-opts.h
+++ b/gcc/config/nvptx/nvptx-opts.h
@@ -40,6 +40,7 @@ enum ptx_version
PTX_VERSION_3_1,
PTX_VERSION_4_1,
PTX_VERSION_4_2,
+ PTX_VERSION_5_0,
PTX_VERSION_6_0,
PTX_VERSION_6_3,
PTX_VERSION_7_0,
diff --git a/gcc/config/nvptx/nvptx-sm.def b/gcc/config/nvptx/nvptx-sm.def
index 1485f89..9f9e864 100644
--- a/gcc/config/nvptx/nvptx-sm.def
+++ b/gcc/config/nvptx/nvptx-sm.def
@@ -25,6 +25,7 @@ NVPTX_SM (35, NVPTX_SM_SEP)
NVPTX_SM (37, NVPTX_SM_SEP)
NVPTX_SM (52, NVPTX_SM_SEP)
NVPTX_SM (53, NVPTX_SM_SEP)
+NVPTX_SM (61, NVPTX_SM_SEP)
NVPTX_SM (70, NVPTX_SM_SEP)
NVPTX_SM (75, NVPTX_SM_SEP)
NVPTX_SM (80, NVPTX_SM_SEP)
diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc
index f893971..b1c476e 100644
--- a/gcc/config/nvptx/nvptx.cc
+++ b/gcc/config/nvptx/nvptx.cc
@@ -220,6 +220,8 @@ first_ptx_version_supporting_sm (enum ptx_isa sm)
return PTX_VERSION_4_1;
case PTX_ISA_SM53:
return PTX_VERSION_4_2;
+ case PTX_ISA_SM61:
+ return PTX_VERSION_5_0;
case PTX_ISA_SM70:
return PTX_VERSION_6_0;
case PTX_ISA_SM75:
@@ -268,6 +270,8 @@ ptx_version_to_string (enum ptx_version v)
return "4.1";
case PTX_VERSION_4_2:
return "4.2";
+ case PTX_VERSION_5_0:
+ return "5.0";
case PTX_VERSION_6_0:
return "6.0";
case PTX_VERSION_6_3:
@@ -294,6 +298,8 @@ ptx_version_to_number (enum ptx_version v, bool major_p)
return major_p ? 4 : 1;
case PTX_VERSION_4_2:
return major_p ? 4 : 2;
+ case PTX_VERSION_5_0:
+ return major_p ? 5 : 0;
case PTX_VERSION_6_0:
return major_p ? 6 : 0;
case PTX_VERSION_6_3:
diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h
index 35ef4bd..a2bb2fb 100644
--- a/gcc/config/nvptx/nvptx.h
+++ b/gcc/config/nvptx/nvptx.h
@@ -101,6 +101,7 @@
PTX ISA Version 3.1. */
#define TARGET_PTX_4_1 (ptx_version_option >= PTX_VERSION_4_1)
#define TARGET_PTX_4_2 (ptx_version_option >= PTX_VERSION_4_2)
+#define TARGET_PTX_5_0 (ptx_version_option >= PTX_VERSION_5_0)
#define TARGET_PTX_6_0 (ptx_version_option >= PTX_VERSION_6_0)
#define TARGET_PTX_6_3 (ptx_version_option >= PTX_VERSION_6_3)
#define TARGET_PTX_7_0 (ptx_version_option >= PTX_VERSION_7_0)
diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt
index ce9fbc7..d326ca4 100644
--- a/gcc/config/nvptx/nvptx.opt
+++ b/gcc/config/nvptx/nvptx.opt
@@ -88,10 +88,10 @@ march-map=sm_60
Target RejectNegative Alias(misa=,sm_53)
march-map=sm_61
-Target RejectNegative Alias(misa=,sm_53)
+Target RejectNegative Alias(misa=,sm_61)
march-map=sm_62
-Target RejectNegative Alias(misa=,sm_53)
+Target RejectNegative Alias(misa=,sm_61)
march-map=sm_70
Target RejectNegative Alias(misa=,sm_70)
@@ -134,6 +134,9 @@ EnumValue
Enum(ptx_version) String(4.2) Value(PTX_VERSION_4_2)
EnumValue
+Enum(ptx_version) String(5.0) Value(PTX_VERSION_5_0)
+
+EnumValue
Enum(ptx_version) String(6.0) Value(PTX_VERSION_6_0)
EnumValue
diff --git a/gcc/config/riscv/gen-riscv-ext-opt.cc b/gcc/config/riscv/gen-riscv-ext-opt.cc
new file mode 100644
index 0000000..17b8f5b
--- /dev/null
+++ b/gcc/config/riscv/gen-riscv-ext-opt.cc
@@ -0,0 +1,105 @@
+#include <vector>
+#include <string>
+#include <set>
+#include <stdio.h>
+#include "riscv-opts.h"
+
+struct version_t
+{
+ int major;
+ int minor;
+ version_t (int major, int minor,
+ enum riscv_isa_spec_class spec = ISA_SPEC_CLASS_NONE)
+ : major (major), minor (minor)
+ {}
+ bool operator<(const version_t &other) const
+ {
+ if (major != other.major)
+ return major < other.major;
+ return minor < other.minor;
+ }
+
+ bool operator== (const version_t &other) const
+ {
+ return major == other.major && minor == other.minor;
+ }
+};
+
+static void
+print_ext_doc_entry (const std::string &ext_name, const std::string &full_name,
+ const std::string &desc,
+ const std::vector<version_t> &supported_versions)
+{
+ // Implementation of the function to print the documentation entry
+ // for the extension.
+ std::set<version_t> unique_versions;
+ for (const auto &version : supported_versions)
+ unique_versions.insert (version);
+ printf ("@item %s\n", ext_name.c_str ());
+ printf ("@tab");
+ for (const auto &version : unique_versions)
+ {
+ printf (" %d.%d", version.major, version.minor);
+ }
+ printf ("\n");
+ printf ("@tab %s", full_name.c_str ());
+ if (desc.size ())
+ printf (", %s", desc.c_str ());
+ printf ("\n\n");
+}
+
+int
+main ()
+{
+ puts ("; Target options for the RISC-V port of the compiler");
+ puts (";");
+ puts ("; Copyright (C) 2025 Free Software Foundation, Inc.");
+ puts (";");
+ puts ("; This file is part of GCC.");
+ puts (";");
+ puts (
+ "; GCC is free software; you can redistribute it and/or modify it under");
+ puts (
+ "; the terms of the GNU General Public License as published by the Free");
+ puts (
+ "; Software Foundation; either version 3, or (at your option) any later");
+ puts ("; version.");
+ puts (";");
+ puts ("; GCC is distributed in the hope that it will be useful, but WITHOUT");
+ puts ("; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY");
+ puts ("; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public");
+ puts ("; License for more details.");
+ puts (";");
+ puts ("; You should have received a copy of the GNU General Public License");
+ puts ("; along with GCC; see the file COPYING3. If not see ");
+ puts ("; <http://www.gnu.org/licenses/>.");
+
+ puts ("; This file is generated automatically using");
+ puts ("; gcc/config/riscv/gen-riscv-ext-opt.cc from:");
+ puts ("; gcc/config/riscv/riscv-ext.def");
+ puts ("");
+ puts ("; Please *DO NOT* edit manually.");
+
+ std::set<std::string> all_vars;
+#define DEFINE_RISCV_EXT(NAME, UPPERCAE_NAME, FULL_NAME, DESC, URL, DEP_EXTS, \
+ SUPPORTED_VERSIONS, FLAG_GROUP, BITMASK_GROUP_ID, \
+ BITMASK_BIT_POSITION, EXTRA_EXTENSION_FLAGS) \
+ all_vars.insert ("riscv_" #FLAG_GROUP "_subext");
+#include "riscv-ext.def"
+#undef DEFINE_RISCV_EXT
+
+ for (auto var : all_vars)
+ {
+ puts ("TargetVariable");
+ printf ("int %s\n\n", var.c_str ());
+ }
+
+#define DEFINE_RISCV_EXT(NAME, UPPERCAE_NAME, FULL_NAME, DESC, URL, DEP_EXTS, \
+ SUPPORTED_VERSIONS, FLAG_GROUP, BITMASK_GROUP_ID, \
+ BITMASK_BIT_POSITION, EXTRA_EXTENSION_FLAGS) \
+ puts ("Mask(" #UPPERCAE_NAME ") Var(riscv_" #FLAG_GROUP "_subext)\n");
+#include "riscv-ext.def"
+#undef DEFINE_RISCV_EXT
+
+ return 0;
+}
diff --git a/gcc/config/riscv/gen-riscv-ext-texi.cc b/gcc/config/riscv/gen-riscv-ext-texi.cc
new file mode 100644
index 0000000..e15fdbf
--- /dev/null
+++ b/gcc/config/riscv/gen-riscv-ext-texi.cc
@@ -0,0 +1,88 @@
+#include <vector>
+#include <string>
+#include <set>
+#include <stdio.h>
+#include "riscv-opts.h"
+
+struct version_t
+{
+ int major;
+ int minor;
+ version_t (int major, int minor,
+ enum riscv_isa_spec_class spec = ISA_SPEC_CLASS_NONE)
+ : major (major), minor (minor)
+ {}
+ bool operator<(const version_t &other) const
+ {
+ if (major != other.major)
+ return major < other.major;
+ return minor < other.minor;
+ }
+
+ bool operator== (const version_t &other) const
+ {
+ return major == other.major && minor == other.minor;
+ }
+};
+
+static void
+print_ext_doc_entry (const std::string &ext_name, const std::string &full_name,
+ const std::string &desc,
+ const std::vector<version_t> &supported_versions)
+{
+ // Implementation of the function to print the documentation entry
+ // for the extension.
+ std::set<version_t> unique_versions;
+ for (const auto &version : supported_versions)
+ unique_versions.insert (version);
+ printf ("@item %s\n", ext_name.c_str ());
+ printf ("@tab");
+ for (const auto &version : unique_versions)
+ {
+ printf (" %d.%d", version.major, version.minor);
+ }
+ printf ("\n");
+ printf ("@tab %s", full_name.c_str ());
+ if (desc.size ())
+ printf (", %s", desc.c_str ());
+ printf ("\n\n");
+}
+
+int
+main ()
+{
+ puts ("@c Copyright (C) 2025 Free Software Foundation, Inc.");
+ puts ("@c This is part of the GCC manual.");
+ puts ("@c For copying conditions, see the file gcc/doc/include/fdl.texi.");
+ puts ("");
+ puts ("@c This file is generated automatically using");
+ puts ("@c gcc/config/riscv/gen-riscv-ext-texi.cc from:");
+ puts ("@c gcc/config/riscv/riscv-ext.def");
+ puts ("@c gcc/config/riscv/riscv-opts.h");
+ puts ("");
+ puts ("@c Please *DO NOT* edit manually.");
+ puts ("");
+ puts ("@multitable @columnfractions .10 .10 .80");
+ puts ("@headitem Extension Name @tab Supported Version @tab Description");
+ puts ("");
+
+ /* g extension is a very speical extension that no clear version... */
+ puts ("@item g");
+ puts ("@tab -");
+ puts (
+ "@tab General-purpose computing base extension, @samp{g} will expand to");
+ puts ("@samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and");
+ puts ("@samp{zifencei}.");
+ puts ("");
+
+#define DEFINE_RISCV_EXT(NAME, UPPERCAE_NAME, FULL_NAME, DESC, URL, DEP_EXTS, \
+ SUPPORTED_VERSIONS, FLAG_GROUP, BITMASK_GROUP_ID, \
+ BITMASK_BIT_POSITION, EXTRA_EXTENSION_FLAGS) \
+ print_ext_doc_entry (#NAME, FULL_NAME, DESC, \
+ std::vector<version_t> SUPPORTED_VERSIONS);
+#include "riscv-ext.def"
+#undef DEFINE_RISCV_EXT
+
+ puts ("@end multitable");
+ return 0;
+}
diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc
index ab6dc83..1ff1968 100644
--- a/gcc/config/riscv/riscv-c.cc
+++ b/gcc/config/riscv/riscv-c.cc
@@ -36,10 +36,10 @@ along with GCC; see the file COPYING3. If not see
struct pragma_intrinsic_flags
{
- int intrinsic_target_flags;
+ int intrinsic_riscv_isa_flags;
int intrinsic_riscv_vector_elen_flags;
- int intrinsic_riscv_zvl_flags;
+ int intrinsic_riscv_zvl_subext;
int intrinsic_riscv_zvb_subext;
int intrinsic_riscv_zvk_subext;
};
@@ -47,16 +47,16 @@ struct pragma_intrinsic_flags
static void
riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
{
- flags->intrinsic_target_flags = target_flags;
+ flags->intrinsic_riscv_isa_flags = riscv_isa_flags;
flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags;
- flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags;
+ flags->intrinsic_riscv_zvl_subext = riscv_zvl_subext;
flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext;
flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext;
- target_flags = target_flags
+ riscv_isa_flags = riscv_isa_flags
| MASK_VECTOR;
- riscv_zvl_flags = riscv_zvl_flags
+ riscv_zvl_subext = riscv_zvl_subext
| MASK_ZVL32B
| MASK_ZVL64B
| MASK_ZVL128B
@@ -97,10 +97,10 @@ riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags)
static void
riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags)
{
- target_flags = flags->intrinsic_target_flags;
+ riscv_isa_flags = flags->intrinsic_riscv_isa_flags;
riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags;
- riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags;
+ riscv_zvl_subext = flags->intrinsic_riscv_zvl_subext;
riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext;
riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext;
}
diff --git a/gcc/config/riscv/riscv-ext-corev.def b/gcc/config/riscv/riscv-ext-corev.def
new file mode 100644
index 0000000..eb97399
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext-corev.def
@@ -0,0 +1,87 @@
+/* CORE-V extension definition file for RISC-V.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
+
+Please run `make riscv-regen` in build folder to make sure updated anything.
+
+Format of DEFINE_RISCV_EXT, please refer to riscv-ext.def. */
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xcvalu,
+ /* UPPERCAE_NAME */ XCVALU,
+ /* FULL_NAME */ "Core-V miscellaneous ALU extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xcv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xcvbi,
+ /* UPPERCAE_NAME */ XCVBI,
+ /* FULL_NAME */ "xcvbi extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xcv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xcvelw,
+ /* UPPERCAE_NAME */ XCVELW,
+ /* FULL_NAME */ "Core-V event load word extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xcv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xcvmac,
+ /* UPPERCAE_NAME */ XCVMAC,
+ /* FULL_NAME */ "Core-V multiply-accumulate extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xcv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xcvsimd,
+ /* UPPERCAE_NAME */ XCVSIMD,
+ /* FULL_NAME */ "xcvsimd extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xcv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
diff --git a/gcc/config/riscv/riscv-ext-sifive.def b/gcc/config/riscv/riscv-ext-sifive.def
new file mode 100644
index 0000000..c8d79da
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext-sifive.def
@@ -0,0 +1,87 @@
+/* SiFive extension definition file for RISC-V.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
+
+Please run `make riscv-regen` in build folder to make sure updated anything.
+
+Format of DEFINE_RISCV_EXT, please refer to riscv-ext.def. */
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xsfcease,
+ /* UPPERCAE_NAME */ XSFCEASE,
+ /* FULL_NAME */ "xsfcease extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xsf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xsfvcp,
+ /* UPPERCAE_NAME */ XSFVCP,
+ /* FULL_NAME */ "xsfvcp extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xsf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xsfvfnrclipxfqf,
+ /* UPPERCAE_NAME */ XSFVFNRCLIPXFQF,
+ /* FULL_NAME */ "xsfvfnrclipxfqf extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xsf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xsfvqmaccdod,
+ /* UPPERCAE_NAME */ XSFVQMACCDOD,
+ /* FULL_NAME */ "xsfvqmaccdod extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xsf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xsfvqmaccqoq,
+ /* UPPERCAE_NAME */ XSFVQMACCQOQ,
+ /* FULL_NAME */ "xsfvqmaccqoq extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xsf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
diff --git a/gcc/config/riscv/riscv-ext-thead.def b/gcc/config/riscv/riscv-ext-thead.def
new file mode 100644
index 0000000..327d2ae
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext-thead.def
@@ -0,0 +1,191 @@
+/* T-head extension definition file for RISC-V.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
+
+Please run `make riscv-regen` in build folder to make sure updated anything.
+
+Format of DEFINE_RISCV_EXT, please refer to riscv-ext.def. */
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadba,
+ /* UPPERCAE_NAME */ XTHEADBA,
+ /* FULL_NAME */ "T-head address calculation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadbb,
+ /* UPPERCAE_NAME */ XTHEADBB,
+ /* FULL_NAME */ "T-head basic bit-manipulation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadbs,
+ /* UPPERCAE_NAME */ XTHEADBS,
+ /* FULL_NAME */ "T-head single-bit instructions extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadcmo,
+ /* UPPERCAE_NAME */ XTHEADCMO,
+ /* FULL_NAME */ "T-head cache management operations extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadcondmov,
+ /* UPPERCAE_NAME */ XTHEADCONDMOV,
+ /* FULL_NAME */ "T-head conditional move extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadfmemidx,
+ /* UPPERCAE_NAME */ XTHEADFMEMIDX,
+ /* FULL_NAME */ "T-head indexed memory operations for floating-point registers extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadfmv,
+ /* UPPERCAE_NAME */ XTHEADFMV,
+ /* FULL_NAME */ "T-head double floating-point high-bit data transmission extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadint,
+ /* UPPERCAE_NAME */ XTHEADINT,
+ /* FULL_NAME */ "T-head acceleration interruption extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadmac,
+ /* UPPERCAE_NAME */ XTHEADMAC,
+ /* FULL_NAME */ "T-head multiply-accumulate extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadmemidx,
+ /* UPPERCAE_NAME */ XTHEADMEMIDX,
+ /* FULL_NAME */ "T-head indexed memory operation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadmempair,
+ /* UPPERCAE_NAME */ XTHEADMEMPAIR,
+ /* FULL_NAME */ "T-head two-GPR memory operation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadsync,
+ /* UPPERCAE_NAME */ XTHEADSYNC,
+ /* FULL_NAME */ "T-head multi-core synchronization extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xtheadvector,
+ /* UPPERCAE_NAME */ XTHEADVECTOR,
+ /* FULL_NAME */ "xtheadvector extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xthead,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
diff --git a/gcc/config/riscv/riscv-ext-ventana.def b/gcc/config/riscv/riscv-ext-ventana.def
new file mode 100644
index 0000000..deed47f
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext-ventana.def
@@ -0,0 +1,35 @@
+/* Ventana extension definition file for RISC-V.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
+
+Please run `make riscv-regen` in build folder to make sure updated anything.
+
+Format of DEFINE_RISCV_EXT, please refer to riscv-ext.def. */
+
+DEFINE_RISCV_EXT(
+ /* NAME */ xventanacondops,
+ /* UPPERCAE_NAME */ XVENTANACONDOPS,
+ /* FULL_NAME */ "Ventana integer conditional operations extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ xventana,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
diff --git a/gcc/config/riscv/riscv-ext.def b/gcc/config/riscv/riscv-ext.def
new file mode 100644
index 0000000..34742d9
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext.def
@@ -0,0 +1,1824 @@
+/* RISC-V extension definition file for RISC-V.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
+
+Please run `make riscv-regen` in build folder to make sure updated anything.
+
+Format of DEFINE_RISCV_EXT:
+ NAME:
+ The name of the extension, e.g. "i".
+ UPPERCASE_NAME:
+ The name of the extension in uppercase, e.g. "ZBA", this used
+ for generate TARGET_<ext-name> marco and MASK_<ext-name> macro.
+ For those extension only named with single letter, it should also come with
+ 'RV', e.g. 'v' should use 'RVV' here.
+ Some of old extension like 'i' and 'm' are not follow the rule.
+ FULL_NAME:
+ The full name of the extension, e.g. "Base integer extension".
+ DESC:
+ A short description of the extension, this will used during generating
+ documentation, GNU Texinfo format can be used this field.
+ URL:
+ A URL for the extension.
+ DEP_EXTS:
+ A list of dependent extensions, this is a list of strings or
+ a list of tuples. The first element of the tuple is the name
+ of the extension and the second element is a function that
+ takes a subset_list and returns true if the extension should be added as
+ a dependent extension, `c` and `zca` are examples of this.
+ SUPPORTED_VERSIONS:
+ A list of tuples, each tuple contains the major version number, minor
+ version number and the class of the specification. The version number is a
+ list of integers, e.g. {2, 0} for version 2.0. The class is
+ a string, e.g. "ISA_SPEC_CLASS_20191213", the class of the
+ specification is not required for any new extension.
+ FLAG_GROUP:
+ The group of the extension, this is used to group extensions
+ together. The group is a string, e.g. "base", "zi", "zm", "za", "zf",
+ "zc", "zb", "zk" and "zi".
+ This should be auto generated in theory in some day...
+ BITMASK_GROUP_ID:
+ The group id of the extension for the __riscv_feature_bits.
+ this field should sync with riscv-c-api-doc, and keep BITMASK_NOT_YET_ALLOCATED
+ if not got allocated.
+ https://github.com/riscv-non-isa/riscv-c-api-doc/blob/main/src/c-api.adoc#extension-bitmask-definitions
+ BITMASK_BIT_POSITION:
+ The bit position of the extension for the __riscv_feature_bits.
+ this field should sync with riscv-c-api-doc, and keep BITMASK_NOT_YET_ALLOCATED
+ if not got allocated.
+ https://github.com/riscv-non-isa/riscv-c-api-doc/blob/main/src/c-api.adoc#extension-bitmask-definitions
+ EXTRA_EXTENSION_FLAGS:
+ Extra flags for the extension, this is a bitmask of the
+ extra flags. The extra flags are:
+ - EXT_FLAG_MACRO: Set this flag if this extension is just a macro of set of
+ extensions, and not define any new instrcutions, new CSRs or new
+ behaviors, the example is `b` extension is just a macro of `zba`, `zbb`
+ and `zbs`.
+*/
+
+DEFINE_RISCV_EXT(
+ /* NAME */ e,
+ /* UPPERCAE_NAME */ RVE,
+ /* FULL_NAME */ "Reduced base integer extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ i,
+ /* UPPERCAE_NAME */ RVI,
+ /* FULL_NAME */ "Base integer extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 1, ISA_SPEC_CLASS_20191213},
+ {2, 1, ISA_SPEC_CLASS_20190608},
+ {2, 0, ISA_SPEC_CLASS_2P2}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 8,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ m,
+ /* UPPERCAE_NAME */ MUL,
+ /* FULL_NAME */ "Integer multiplication and division extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zmmul"}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 12,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ a,
+ /* UPPERCAE_NAME */ ATOMIC,
+ /* FULL_NAME */ "Atomic extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zaamo", "zalrsc"}),
+ /* SUPPORTED_VERSIONS */ ({{2, 1, ISA_SPEC_CLASS_20191213},
+ {2, 0, ISA_SPEC_CLASS_20190608},
+ {2, 0, ISA_SPEC_CLASS_2P2}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 0,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ f,
+ /* UPPERCAE_NAME */ HARD_FLOAT,
+ /* FULL_NAME */ "Single-precision floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{2, 2, ISA_SPEC_CLASS_20191213},
+ {2, 2, ISA_SPEC_CLASS_20190608},
+ {2, 0, ISA_SPEC_CLASS_2P2}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 5,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ d,
+ /* UPPERCAE_NAME */ DOUBLE_FLOAT,
+ /* FULL_NAME */ "Double-precision floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"f", "zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{2, 2, ISA_SPEC_CLASS_20191213},
+ {2, 2, ISA_SPEC_CLASS_20190608},
+ {2, 0, ISA_SPEC_CLASS_2P2}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 3,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ c,
+ /* UPPERCAE_NAME */ RVC,
+ /* FULL_NAME */ "Compressed extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca",
+ {"zcf",
+ [] (const riscv_subset_list *subset_list) -> bool
+ {
+ return subset_list->xlen () == 32
+ && subset_list->lookup ("f");
+ }},
+ {"zcd",
+ [] (const riscv_subset_list *subset_list) -> bool
+ {
+ return subset_list->lookup ("d");
+ }}}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 2,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ b,
+ /* UPPERCAE_NAME */ RVB,
+ /* FULL_NAME */ "b extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zba", "zbb", "zbs"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ v,
+ /* UPPERCAE_NAME */ RVV,
+ /* FULL_NAME */ "Vector extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl128b", "zve64d"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 21,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ h,
+ /* UPPERCAE_NAME */ RVH,
+ /* FULL_NAME */ "Hypervisor extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ base,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zic64b,
+ /* UPPERCAE_NAME */ ZIC64B,
+ /* FULL_NAME */ "Cache block size isf 64 bytes",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicbom,
+ /* UPPERCAE_NAME */ ZICBOM,
+ /* FULL_NAME */ "Cache-block management extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicbop,
+ /* UPPERCAE_NAME */ ZICBOP,
+ /* FULL_NAME */ "Cache-block prefetch extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicboz,
+ /* UPPERCAE_NAME */ ZICBOZ,
+ /* FULL_NAME */ "Cache-block zero extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 37,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ziccamoa,
+ /* UPPERCAE_NAME */ ZICCAMOA,
+ /* FULL_NAME */ "Main memory supports all atomics in A",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ziccif,
+ /* UPPERCAE_NAME */ ZICCIF,
+ /* FULL_NAME */ "Main memory supports instruction fetch with atomicity requirement",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicclsm,
+ /* UPPERCAE_NAME */ ZICCLSM,
+ /* FULL_NAME */ "Main memory supports misaligned loads/stores",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ziccrse,
+ /* UPPERCAE_NAME */ ZICCRSE,
+ /* FULL_NAME */ "Main memory supports forward progress on LR/SC sequences",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicfilp,
+ /* UPPERCAE_NAME */ ZICFILP,
+ /* FULL_NAME */ "zicfilp extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicfiss,
+ /* UPPERCAE_NAME */ ZICFISS,
+ /* FULL_NAME */ "zicfiss extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr", "zimop"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicntr,
+ /* UPPERCAE_NAME */ ZICNTR,
+ /* FULL_NAME */ "Standard extension for base counters and timers",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicond,
+ /* UPPERCAE_NAME */ ZICOND,
+ /* FULL_NAME */ "Integer conditional operations extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 38,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zicsr,
+ /* UPPERCAE_NAME */ ZICSR,
+ /* FULL_NAME */ "Control and status register access extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zifencei,
+ /* UPPERCAE_NAME */ ZIFENCEI,
+ /* FULL_NAME */ "Instruction-fetch fence extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zihintntl,
+ /* UPPERCAE_NAME */ ZIHINTNTL,
+ /* FULL_NAME */ "Non-temporal locality hints extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 39,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zihintpause,
+ /* UPPERCAE_NAME */ ZIHINTPAUSE,
+ /* FULL_NAME */ "Pause hint extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 40,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zihpm,
+ /* UPPERCAE_NAME */ ZIHPM,
+ /* FULL_NAME */ "Standard extension for hardware performance counters",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{2, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zimop,
+ /* UPPERCAE_NAME */ ZIMOP,
+ /* FULL_NAME */ "zimop extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 1,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zilsd,
+ /* UPPERCAE_NAME */ ZILSD,
+ /* FULL_NAME */ "Load/Store pair instructions extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zi,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 1,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zmmul,
+ /* UPPERCAE_NAME */ ZMMUL,
+ /* FULL_NAME */ "Integer multiplication extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zm,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ za128rs,
+ /* UPPERCAE_NAME */ ZA128RS,
+ /* FULL_NAME */ "Reservation set size of 128 bytes",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ za64rs,
+ /* UPPERCAE_NAME */ ZA64RS,
+ /* FULL_NAME */ "Reservation set size of 64 bytes",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zaamo,
+ /* UPPERCAE_NAME */ ZAAMO,
+ /* FULL_NAME */ "zaamo extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zabha,
+ /* UPPERCAE_NAME */ ZABHA,
+ /* FULL_NAME */ "zabha extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zaamo"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zacas,
+ /* UPPERCAE_NAME */ ZACAS,
+ /* FULL_NAME */ "zacas extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zaamo"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 26,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zalrsc,
+ /* UPPERCAE_NAME */ ZALRSC,
+ /* FULL_NAME */ "zalrsc extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zawrs,
+ /* UPPERCAE_NAME */ ZAWRS,
+ /* FULL_NAME */ "Wait-on-reservation-set extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zalrsc"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 7,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zama16b,
+ /* UPPERCAE_NAME */ ZAMA16B,
+ /* FULL_NAME */ "Zama16b extension",
+ /* DESC */ "Misaligned loads, stores, and AMOs to main memory regions that do"
+ " not cross a naturally aligned 16-byte boundary are atomic.",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ za,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zfa,
+ /* UPPERCAE_NAME */ ZFA,
+ /* FULL_NAME */ "Additional floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"f"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zf,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 34,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zfbfmin,
+ /* UPPERCAE_NAME */ ZFBFMIN,
+ /* FULL_NAME */ "zfbfmin extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zfhmin"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zfh,
+ /* UPPERCAE_NAME */ ZFH,
+ /* FULL_NAME */ "Half-precision floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zfhmin"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zf,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 35,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zfhmin,
+ /* UPPERCAE_NAME */ ZFHMIN,
+ /* FULL_NAME */ "Minimal half-precision floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"f"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zf,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 36,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zfinx,
+ /* UPPERCAE_NAME */ ZFINX,
+ /* FULL_NAME */ "Single-precision floating-point in integer registers extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zinx,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zdinx,
+ /* UPPERCAE_NAME */ ZDINX,
+ /* FULL_NAME */ "Double-precision floating-point in integer registers extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zfinx", "zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zinx,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zca,
+ /* UPPERCAE_NAME */ ZCA,
+ /* FULL_NAME */ "Integer compressed instruction extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({{"c",
+[] (const riscv_subset_list *subset_list) -> bool
+{
+ /* For RV32 Zca implies C for one of these combinations of
+ extensions: Zca, F_Zca_Zcf and FD_Zca_Zcf_Zcd. */
+ if (subset_list->xlen () == 32)
+ {
+ if (subset_list->lookup ("d"))
+ return subset_list->lookup ("zcf") && subset_list->lookup ("zcd");
+
+ if (subset_list->lookup ("f"))
+ return subset_list->lookup ("zcf");
+
+ return true;
+ }
+
+ /* For RV64 Zca implies C for one of these combinations of
+ extensions: Zca and FD_Zca_Zcd (Zcf is not available
+ for RV64). */
+ if (subset_list->xlen () == 64)
+ {
+ if (subset_list->lookup ("d"))
+ return subset_list->lookup ("zcd");
+
+ return true;
+ }
+
+ /* Do nothing for future RV128 specification. Behaviour
+ for this case is not yet well defined. */
+ return false;
+
+}}}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 2,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zcb,
+ /* UPPERCAE_NAME */ ZCB,
+ /* FULL_NAME */ "Simple compressed instruction extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 3,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zcd,
+ /* UPPERCAE_NAME */ ZCD,
+ /* FULL_NAME */ "Compressed double-precision floating point loads and stores extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 4,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zce,
+ /* UPPERCAE_NAME */ ZCE,
+ /* FULL_NAME */ "Compressed instruction extensions for embedded processors",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca", "zcb", "zcmp", "zcmt",
+ {"zcf",
+ [] (const riscv_subset_list *subset_list) -> bool
+ {
+ return subset_list->xlen () == 32
+ && subset_list->lookup ("f");
+ }}}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zcf,
+ /* UPPERCAE_NAME */ ZCF,
+ /* FULL_NAME */ "Compressed single-precision floating point loads and stores extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 5,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zcmop,
+ /* UPPERCAE_NAME */ ZCMOP,
+ /* FULL_NAME */ "zcmop extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 6,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zcmp,
+ /* UPPERCAE_NAME */ ZCMP,
+ /* FULL_NAME */ "Compressed push pop extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zcmt,
+ /* UPPERCAE_NAME */ ZCMT,
+ /* FULL_NAME */ "Table jump instruction extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca", "zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zclsd,
+ /* UPPERCAE_NAME */ ZCLSD,
+ /* FULL_NAME */ "Compressed load/store pair instructions extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zca", "zilsd"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zc,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zba,
+ /* UPPERCAE_NAME */ ZBA,
+ /* FULL_NAME */ "Address calculation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 27,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zbb,
+ /* UPPERCAE_NAME */ ZBB,
+ /* FULL_NAME */ "Basic bit manipulation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 28,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zbc,
+ /* UPPERCAE_NAME */ ZBC,
+ /* FULL_NAME */ "Carry-less multiplication extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 29,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zbkb,
+ /* UPPERCAE_NAME */ ZBKB,
+ /* FULL_NAME */ "Cryptography bit-manipulation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 30,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zbkc,
+ /* UPPERCAE_NAME */ ZBKC,
+ /* FULL_NAME */ "Cryptography carry-less multiply extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 31,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zbkx,
+ /* UPPERCAE_NAME */ ZBKX,
+ /* FULL_NAME */ "Cryptography crossbar permutation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 32,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zbs,
+ /* UPPERCAE_NAME */ ZBS,
+ /* FULL_NAME */ "Single-bit operation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 33,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zk,
+ /* UPPERCAE_NAME */ ZK,
+ /* FULL_NAME */ "Standard scalar cryptography extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zkn", "zkr", "zkt"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zkn,
+ /* UPPERCAE_NAME */ ZKN,
+ /* FULL_NAME */ "NIST algorithm suite extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zbkb", "zbkc", "zbkx", "zkne", "zknd", "zknh"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zknd,
+ /* UPPERCAE_NAME */ ZKND,
+ /* FULL_NAME */ "AES Decryption extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 41,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zkne,
+ /* UPPERCAE_NAME */ ZKNE,
+ /* FULL_NAME */ "AES Encryption extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 42,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zknh,
+ /* UPPERCAE_NAME */ ZKNH,
+ /* FULL_NAME */ "Hash function extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 43,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zkr,
+ /* UPPERCAE_NAME */ ZKR,
+ /* FULL_NAME */ "Entropy source extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zks,
+ /* UPPERCAE_NAME */ ZKS,
+ /* FULL_NAME */ "ShangMi algorithm suite extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zbkb", "zbkc", "zbkx", "zksed", "zksh"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zksed,
+ /* UPPERCAE_NAME */ ZKSED,
+ /* FULL_NAME */ "SM4 block cipher extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 44,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zksh,
+ /* UPPERCAE_NAME */ ZKSH,
+ /* FULL_NAME */ "SM3 hash function extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 45,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zkt,
+ /* UPPERCAE_NAME */ ZKT,
+ /* FULL_NAME */ "Data independent execution latency extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 46,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ztso,
+ /* UPPERCAE_NAME */ ZTSO,
+ /* FULL_NAME */ "Total store ordering extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zt,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 47,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvbb,
+ /* UPPERCAE_NAME */ ZVBB,
+ /* FULL_NAME */ "Vector basic bit-manipulation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvkb"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 48,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvbc,
+ /* UPPERCAE_NAME */ ZVBC,
+ /* FULL_NAME */ "Vector carryless multiplication extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve64x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvb,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 49,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zve32f,
+ /* UPPERCAE_NAME */ ZVE32F,
+ /* FULL_NAME */ "Vector extensions for embedded processors",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"f", "zve32x", "zvl32b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zve,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 61,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zve32x,
+ /* UPPERCAE_NAME */ ZVE32X,
+ /* FULL_NAME */ "Vector extensions for embedded processors",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr", "zvl32b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zve,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 60,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zve64d,
+ /* UPPERCAE_NAME */ ZVE64D,
+ /* FULL_NAME */ "Vector extensions for embedded processors",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"d", "zve64f", "zvl64b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zve,
+ /* BITMASK_GROUP_ID */ 1,
+ /* BITMASK_BIT_POSITION*/ 0,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zve64f,
+ /* UPPERCAE_NAME */ ZVE64F,
+ /* FULL_NAME */ "Vector extensions for embedded processors",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"f", "zve32f", "zve64x", "zvl64b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zve,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 63,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zve64x,
+ /* UPPERCAE_NAME */ ZVE64X,
+ /* FULL_NAME */ "Vector extensions for embedded processors",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x", "zvl64b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zve,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 62,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvfbfmin,
+ /* UPPERCAE_NAME */ ZVFBFMIN,
+ /* FULL_NAME */ "Vector BF16 converts extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32f"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvfbfwma,
+ /* UPPERCAE_NAME */ ZVFBFWMA,
+ /* FULL_NAME */ "zvfbfwma extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvfbfmin", "zfbfmin"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvf,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvfh,
+ /* UPPERCAE_NAME */ ZVFH,
+ /* FULL_NAME */ "Vector half-precision floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32f", "zfhmin"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvf,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 50,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvfhmin,
+ /* UPPERCAE_NAME */ ZVFHMIN,
+ /* FULL_NAME */ "Vector minimal half-precision floating-point extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32f"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvf,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 51,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvkb,
+ /* UPPERCAE_NAME */ ZVKB,
+ /* FULL_NAME */ "Vector cryptography bit-manipulation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 52,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvkg,
+ /* UPPERCAE_NAME */ ZVKG,
+ /* FULL_NAME */ "Vector GCM/GMAC extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 53,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvkn,
+ /* UPPERCAE_NAME */ ZVKN,
+ /* FULL_NAME */ "Vector NIST Algorithm Suite extension",
+ /* DESC */ "@samp{zvkn} will expand to",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvkned", "zvknhb", "zvkb", "zvkt"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvknc,
+ /* UPPERCAE_NAME */ ZVKNC,
+ /* FULL_NAME */ "Vector NIST Algorithm Suite with carryless multiply extension, @samp{zvknc}",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvkn", "zvbc"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvkned,
+ /* UPPERCAE_NAME */ ZVKNED,
+ /* FULL_NAME */ "Vector AES block cipher extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 54,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvkng,
+ /* UPPERCAE_NAME */ ZVKNG,
+ /* FULL_NAME */ "Vector NIST Algorithm Suite with GCM extension, @samp{zvkng} will expand",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvkn", "zvkg"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvknha,
+ /* UPPERCAE_NAME */ ZVKNHA,
+ /* FULL_NAME */ "Vector SHA-2 secure hash extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 55,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvknhb,
+ /* UPPERCAE_NAME */ ZVKNHB,
+ /* FULL_NAME */ "Vector SHA-2 secure hash extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve64x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 56,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvks,
+ /* UPPERCAE_NAME */ ZVKS,
+ /* FULL_NAME */ "Vector ShangMi algorithm suite extension, @samp{zvks} will expand",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvksed", "zvksh", "zvkb", "zvkt"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvksc,
+ /* UPPERCAE_NAME */ ZVKSC,
+ /* FULL_NAME */ "Vector ShangMi algorithm suite with carryless multiplication extension,",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvks", "zvbc"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvksed,
+ /* UPPERCAE_NAME */ ZVKSED,
+ /* FULL_NAME */ "Vector SM4 Block Cipher extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 57,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvksg,
+ /* UPPERCAE_NAME */ ZVKSG,
+ /* FULL_NAME */ "Vector ShangMi algorithm suite with GCM extension, @samp{zvksg} will expand",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvks", "zvkg"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ EXT_FLAG_MACRO)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvksh,
+ /* UPPERCAE_NAME */ ZVKSH,
+ /* FULL_NAME */ "Vector SM3 Secure Hash extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zve32x"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 58,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvkt,
+ /* UPPERCAE_NAME */ ZVKT,
+ /* FULL_NAME */ "Vector data independent execution latency extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvk,
+ /* BITMASK_GROUP_ID */ 0,
+ /* BITMASK_BIT_POSITION*/ 59,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl1024b,
+ /* UPPERCAE_NAME */ ZVL1024B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl512b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl128b,
+ /* UPPERCAE_NAME */ ZVL128B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl64b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl16384b,
+ /* UPPERCAE_NAME */ ZVL16384B,
+ /* FULL_NAME */ "zvl16384b extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl8192b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl2048b,
+ /* UPPERCAE_NAME */ ZVL2048B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl1024b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl256b,
+ /* UPPERCAE_NAME */ ZVL256B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl128b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl32768b,
+ /* UPPERCAE_NAME */ ZVL32768B,
+ /* FULL_NAME */ "zvl32768b extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl16384b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl32b,
+ /* UPPERCAE_NAME */ ZVL32B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl4096b,
+ /* UPPERCAE_NAME */ ZVL4096B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl2048b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl512b,
+ /* UPPERCAE_NAME */ ZVL512B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl256b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl64b,
+ /* UPPERCAE_NAME */ ZVL64B,
+ /* FULL_NAME */ "Minimum vector length standard extensions",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl32b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl65536b,
+ /* UPPERCAE_NAME */ ZVL65536B,
+ /* FULL_NAME */ "zvl65536b extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl32768b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zvl8192b,
+ /* UPPERCAE_NAME */ ZVL8192B,
+ /* FULL_NAME */ "zvl8192b extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zvl4096b"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zvl,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zhinx,
+ /* UPPERCAE_NAME */ ZHINX,
+ /* FULL_NAME */ "Half-precision floating-point in integer registers extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zhinxmin"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zinx,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ zhinxmin,
+ /* UPPERCAE_NAME */ ZHINXMIN,
+ /* FULL_NAME */ "Minimal half-precision floating-point in integer registers extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zfinx"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ zinx,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ sdtrig,
+ /* UPPERCAE_NAME */ SDTRIG,
+ /* FULL_NAME */ "sdtrig extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sd,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ smaia,
+ /* UPPERCAE_NAME */ SMAIA,
+ /* FULL_NAME */ "Advanced interrupt architecture extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"ssaia"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sm,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ smepmp,
+ /* UPPERCAE_NAME */ SMEPMP,
+ /* FULL_NAME */ "PMP Enhancements for memory access and execution prevention on Machine mode",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sm,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ smmpm,
+ /* UPPERCAE_NAME */ SMMPM,
+ /* FULL_NAME */ "smmpm extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sm,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ smnpm,
+ /* UPPERCAE_NAME */ SMNPM,
+ /* FULL_NAME */ "smnpm extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sm,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ smstateen,
+ /* UPPERCAE_NAME */ SMSTATEEN,
+ /* FULL_NAME */ "State enable extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"ssstateen"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sm,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ssaia,
+ /* UPPERCAE_NAME */ SSAIA,
+ /* FULL_NAME */ "Advanced interrupt architecture extension for supervisor-mode",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ sscofpmf,
+ /* UPPERCAE_NAME */ SSCOFPMF,
+ /* FULL_NAME */ "Count overflow & filtering extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ssnpm,
+ /* UPPERCAE_NAME */ SSNPM,
+ /* FULL_NAME */ "ssnpm extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ sspm,
+ /* UPPERCAE_NAME */ SSPM,
+ /* FULL_NAME */ "sspm extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ssstateen,
+ /* UPPERCAE_NAME */ SSSTATEEN,
+ /* FULL_NAME */ "State-enable extension for supervisor-mode",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ sstc,
+ /* UPPERCAE_NAME */ SSTC,
+ /* FULL_NAME */ "Supervisor-mode timer interrupts extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({"zicsr"}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ ssstrict,
+ /* UPPERCAE_NAME */ SSSTRICT,
+ /* FULL_NAME */ "ssstrict extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ ss,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ supm,
+ /* UPPERCAE_NAME */ SUPM,
+ /* FULL_NAME */ "supm extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ su,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ svinval,
+ /* UPPERCAE_NAME */ SVINVAL,
+ /* FULL_NAME */ "Fine-grained address-translation cache invalidation extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ svnapot,
+ /* UPPERCAE_NAME */ SVNAPOT,
+ /* FULL_NAME */ "NAPOT translation contiguity extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ svpbmt,
+ /* UPPERCAE_NAME */ SVPBMT,
+ /* FULL_NAME */ "Page-based memory types extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ svvptc,
+ /* UPPERCAE_NAME */ SVVPTC,
+ /* FULL_NAME */ "svvptc extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ svadu,
+ /* UPPERCAE_NAME */ SVADU,
+ /* FULL_NAME */ "Hardware Updating of A/D Bits extension",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+DEFINE_RISCV_EXT(
+ /* NAME */ svade,
+ /* UPPERCAE_NAME */ SVADE,
+ /* FULL_NAME */ "Cause exception when hardware updating of A/D bits is disabled",
+ /* DESC */ "",
+ /* URL */ ,
+ /* DEP_EXTS */ ({}),
+ /* SUPPORTED_VERSIONS */ ({{1, 0}}),
+ /* FLAG_GROUP */ sv,
+ /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED,
+ /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
+ /* EXTRA_EXTENSION_FLAGS */ 0)
+
+#include "riscv-ext-corev.def"
+#include "riscv-ext-sifive.def"
+#include "riscv-ext-thead.def"
+#include "riscv-ext-ventana.def"
diff --git a/gcc/config/riscv/riscv-ext.opt b/gcc/config/riscv/riscv-ext.opt
new file mode 100644
index 0000000..0c56dc9
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext.opt
@@ -0,0 +1,404 @@
+; Target options for the RISC-V port of the compiler
+;
+; Copyright (C) 2025 Free Software Foundation, Inc.
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT
+; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+; License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3. If not see
+; <http://www.gnu.org/licenses/>.
+; This file is generated automatically using
+; gcc/config/riscv/gen-riscv-ext-opt.cc from:
+; gcc/config/riscv/riscv-ext.def
+
+; Please *DO NOT* edit manually.
+TargetVariable
+int riscv_base_subext
+
+TargetVariable
+int riscv_sd_subext
+
+TargetVariable
+int riscv_sm_subext
+
+TargetVariable
+int riscv_ss_subext
+
+TargetVariable
+int riscv_su_subext
+
+TargetVariable
+int riscv_sv_subext
+
+TargetVariable
+int riscv_xcv_subext
+
+TargetVariable
+int riscv_xsf_subext
+
+TargetVariable
+int riscv_xthead_subext
+
+TargetVariable
+int riscv_xventana_subext
+
+TargetVariable
+int riscv_za_subext
+
+TargetVariable
+int riscv_zb_subext
+
+TargetVariable
+int riscv_zc_subext
+
+TargetVariable
+int riscv_zf_subext
+
+TargetVariable
+int riscv_zi_subext
+
+TargetVariable
+int riscv_zinx_subext
+
+TargetVariable
+int riscv_zk_subext
+
+TargetVariable
+int riscv_zm_subext
+
+TargetVariable
+int riscv_zt_subext
+
+TargetVariable
+int riscv_zvb_subext
+
+TargetVariable
+int riscv_zve_subext
+
+TargetVariable
+int riscv_zvf_subext
+
+TargetVariable
+int riscv_zvk_subext
+
+TargetVariable
+int riscv_zvl_subext
+
+Mask(RVE) Var(riscv_base_subext)
+
+Mask(RVI) Var(riscv_base_subext)
+
+Mask(MUL) Var(riscv_base_subext)
+
+Mask(ATOMIC) Var(riscv_base_subext)
+
+Mask(HARD_FLOAT) Var(riscv_base_subext)
+
+Mask(DOUBLE_FLOAT) Var(riscv_base_subext)
+
+Mask(RVC) Var(riscv_base_subext)
+
+Mask(RVB) Var(riscv_base_subext)
+
+Mask(RVV) Var(riscv_base_subext)
+
+Mask(RVH) Var(riscv_base_subext)
+
+Mask(ZIC64B) Var(riscv_zi_subext)
+
+Mask(ZICBOM) Var(riscv_zi_subext)
+
+Mask(ZICBOP) Var(riscv_zi_subext)
+
+Mask(ZICBOZ) Var(riscv_zi_subext)
+
+Mask(ZICCAMOA) Var(riscv_zi_subext)
+
+Mask(ZICCIF) Var(riscv_zi_subext)
+
+Mask(ZICCLSM) Var(riscv_zi_subext)
+
+Mask(ZICCRSE) Var(riscv_zi_subext)
+
+Mask(ZICFILP) Var(riscv_zi_subext)
+
+Mask(ZICFISS) Var(riscv_zi_subext)
+
+Mask(ZICNTR) Var(riscv_zi_subext)
+
+Mask(ZICOND) Var(riscv_zi_subext)
+
+Mask(ZICSR) Var(riscv_zi_subext)
+
+Mask(ZIFENCEI) Var(riscv_zi_subext)
+
+Mask(ZIHINTNTL) Var(riscv_zi_subext)
+
+Mask(ZIHINTPAUSE) Var(riscv_zi_subext)
+
+Mask(ZIHPM) Var(riscv_zi_subext)
+
+Mask(ZIMOP) Var(riscv_zi_subext)
+
+Mask(ZILSD) Var(riscv_zi_subext)
+
+Mask(ZMMUL) Var(riscv_zm_subext)
+
+Mask(ZA128RS) Var(riscv_za_subext)
+
+Mask(ZA64RS) Var(riscv_za_subext)
+
+Mask(ZAAMO) Var(riscv_za_subext)
+
+Mask(ZABHA) Var(riscv_za_subext)
+
+Mask(ZACAS) Var(riscv_za_subext)
+
+Mask(ZALRSC) Var(riscv_za_subext)
+
+Mask(ZAWRS) Var(riscv_za_subext)
+
+Mask(ZAMA16B) Var(riscv_za_subext)
+
+Mask(ZFA) Var(riscv_zf_subext)
+
+Mask(ZFBFMIN) Var(riscv_zf_subext)
+
+Mask(ZFH) Var(riscv_zf_subext)
+
+Mask(ZFHMIN) Var(riscv_zf_subext)
+
+Mask(ZFINX) Var(riscv_zinx_subext)
+
+Mask(ZDINX) Var(riscv_zinx_subext)
+
+Mask(ZCA) Var(riscv_zc_subext)
+
+Mask(ZCB) Var(riscv_zc_subext)
+
+Mask(ZCD) Var(riscv_zc_subext)
+
+Mask(ZCE) Var(riscv_zc_subext)
+
+Mask(ZCF) Var(riscv_zc_subext)
+
+Mask(ZCMOP) Var(riscv_zc_subext)
+
+Mask(ZCMP) Var(riscv_zc_subext)
+
+Mask(ZCMT) Var(riscv_zc_subext)
+
+Mask(ZCLSD) Var(riscv_zc_subext)
+
+Mask(ZBA) Var(riscv_zb_subext)
+
+Mask(ZBB) Var(riscv_zb_subext)
+
+Mask(ZBC) Var(riscv_zb_subext)
+
+Mask(ZBKB) Var(riscv_zb_subext)
+
+Mask(ZBKC) Var(riscv_zb_subext)
+
+Mask(ZBKX) Var(riscv_zb_subext)
+
+Mask(ZBS) Var(riscv_zb_subext)
+
+Mask(ZK) Var(riscv_zk_subext)
+
+Mask(ZKN) Var(riscv_zk_subext)
+
+Mask(ZKND) Var(riscv_zk_subext)
+
+Mask(ZKNE) Var(riscv_zk_subext)
+
+Mask(ZKNH) Var(riscv_zk_subext)
+
+Mask(ZKR) Var(riscv_zk_subext)
+
+Mask(ZKS) Var(riscv_zk_subext)
+
+Mask(ZKSED) Var(riscv_zk_subext)
+
+Mask(ZKSH) Var(riscv_zk_subext)
+
+Mask(ZKT) Var(riscv_zk_subext)
+
+Mask(ZTSO) Var(riscv_zt_subext)
+
+Mask(ZVBB) Var(riscv_zvb_subext)
+
+Mask(ZVBC) Var(riscv_zvb_subext)
+
+Mask(ZVE32F) Var(riscv_zve_subext)
+
+Mask(ZVE32X) Var(riscv_zve_subext)
+
+Mask(ZVE64D) Var(riscv_zve_subext)
+
+Mask(ZVE64F) Var(riscv_zve_subext)
+
+Mask(ZVE64X) Var(riscv_zve_subext)
+
+Mask(ZVFBFMIN) Var(riscv_zvf_subext)
+
+Mask(ZVFBFWMA) Var(riscv_zvf_subext)
+
+Mask(ZVFH) Var(riscv_zvf_subext)
+
+Mask(ZVFHMIN) Var(riscv_zvf_subext)
+
+Mask(ZVKB) Var(riscv_zvk_subext)
+
+Mask(ZVKG) Var(riscv_zvk_subext)
+
+Mask(ZVKN) Var(riscv_zvk_subext)
+
+Mask(ZVKNC) Var(riscv_zvk_subext)
+
+Mask(ZVKNED) Var(riscv_zvk_subext)
+
+Mask(ZVKNG) Var(riscv_zvk_subext)
+
+Mask(ZVKNHA) Var(riscv_zvk_subext)
+
+Mask(ZVKNHB) Var(riscv_zvk_subext)
+
+Mask(ZVKS) Var(riscv_zvk_subext)
+
+Mask(ZVKSC) Var(riscv_zvk_subext)
+
+Mask(ZVKSED) Var(riscv_zvk_subext)
+
+Mask(ZVKSG) Var(riscv_zvk_subext)
+
+Mask(ZVKSH) Var(riscv_zvk_subext)
+
+Mask(ZVKT) Var(riscv_zvk_subext)
+
+Mask(ZVL1024B) Var(riscv_zvl_subext)
+
+Mask(ZVL128B) Var(riscv_zvl_subext)
+
+Mask(ZVL16384B) Var(riscv_zvl_subext)
+
+Mask(ZVL2048B) Var(riscv_zvl_subext)
+
+Mask(ZVL256B) Var(riscv_zvl_subext)
+
+Mask(ZVL32768B) Var(riscv_zvl_subext)
+
+Mask(ZVL32B) Var(riscv_zvl_subext)
+
+Mask(ZVL4096B) Var(riscv_zvl_subext)
+
+Mask(ZVL512B) Var(riscv_zvl_subext)
+
+Mask(ZVL64B) Var(riscv_zvl_subext)
+
+Mask(ZVL65536B) Var(riscv_zvl_subext)
+
+Mask(ZVL8192B) Var(riscv_zvl_subext)
+
+Mask(ZHINX) Var(riscv_zinx_subext)
+
+Mask(ZHINXMIN) Var(riscv_zinx_subext)
+
+Mask(SDTRIG) Var(riscv_sd_subext)
+
+Mask(SMAIA) Var(riscv_sm_subext)
+
+Mask(SMEPMP) Var(riscv_sm_subext)
+
+Mask(SMMPM) Var(riscv_sm_subext)
+
+Mask(SMNPM) Var(riscv_sm_subext)
+
+Mask(SMSTATEEN) Var(riscv_sm_subext)
+
+Mask(SSAIA) Var(riscv_ss_subext)
+
+Mask(SSCOFPMF) Var(riscv_ss_subext)
+
+Mask(SSNPM) Var(riscv_ss_subext)
+
+Mask(SSPM) Var(riscv_ss_subext)
+
+Mask(SSSTATEEN) Var(riscv_ss_subext)
+
+Mask(SSTC) Var(riscv_ss_subext)
+
+Mask(SSSTRICT) Var(riscv_ss_subext)
+
+Mask(SUPM) Var(riscv_su_subext)
+
+Mask(SVINVAL) Var(riscv_sv_subext)
+
+Mask(SVNAPOT) Var(riscv_sv_subext)
+
+Mask(SVPBMT) Var(riscv_sv_subext)
+
+Mask(SVVPTC) Var(riscv_sv_subext)
+
+Mask(SVADU) Var(riscv_sv_subext)
+
+Mask(SVADE) Var(riscv_sv_subext)
+
+Mask(XCVALU) Var(riscv_xcv_subext)
+
+Mask(XCVBI) Var(riscv_xcv_subext)
+
+Mask(XCVELW) Var(riscv_xcv_subext)
+
+Mask(XCVMAC) Var(riscv_xcv_subext)
+
+Mask(XCVSIMD) Var(riscv_xcv_subext)
+
+Mask(XSFCEASE) Var(riscv_xsf_subext)
+
+Mask(XSFVCP) Var(riscv_xsf_subext)
+
+Mask(XSFVFNRCLIPXFQF) Var(riscv_xsf_subext)
+
+Mask(XSFVQMACCDOD) Var(riscv_xsf_subext)
+
+Mask(XSFVQMACCQOQ) Var(riscv_xsf_subext)
+
+Mask(XTHEADBA) Var(riscv_xthead_subext)
+
+Mask(XTHEADBB) Var(riscv_xthead_subext)
+
+Mask(XTHEADBS) Var(riscv_xthead_subext)
+
+Mask(XTHEADCMO) Var(riscv_xthead_subext)
+
+Mask(XTHEADCONDMOV) Var(riscv_xthead_subext)
+
+Mask(XTHEADFMEMIDX) Var(riscv_xthead_subext)
+
+Mask(XTHEADFMV) Var(riscv_xthead_subext)
+
+Mask(XTHEADINT) Var(riscv_xthead_subext)
+
+Mask(XTHEADMAC) Var(riscv_xthead_subext)
+
+Mask(XTHEADMEMIDX) Var(riscv_xthead_subext)
+
+Mask(XTHEADMEMPAIR) Var(riscv_xthead_subext)
+
+Mask(XTHEADSYNC) Var(riscv_xthead_subext)
+
+Mask(XTHEADVECTOR) Var(riscv_xthead_subext)
+
+Mask(XVENTANACONDOPS) Var(riscv_xventana_subext)
+
diff --git a/gcc/config/riscv/riscv-ext.opt.urls b/gcc/config/riscv/riscv-ext.opt.urls
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gcc/config/riscv/riscv-ext.opt.urls
diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h
index 9766b89..0f3bca5 100644
--- a/gcc/config/riscv/riscv-opts.h
+++ b/gcc/config/riscv/riscv-opts.h
@@ -136,16 +136,16 @@ enum rvv_vector_bits_enum {
/* Bit of riscv_zvl_flags will set continually, N-1 bit will set if N-bit is
set, e.g. MASK_ZVL64B has set then MASK_ZVL32B is set, so we can use
popcount to calculate the minimal VLEN. */
-#define TARGET_MIN_VLEN \
- ((riscv_zvl_flags == 0) \
- ? 0 \
- : 32 << (__builtin_popcount (riscv_zvl_flags) - 1))
+#define TARGET_MIN_VLEN \
+ ((riscv_zvl_subext == 0) \
+ ? 0 \
+ : 32 << (__builtin_popcount (riscv_zvl_subext) - 1))
/* Same as TARGET_MIN_VLEN, but take an OPTS as gcc_options. */
#define TARGET_MIN_VLEN_OPTS(opts) \
- ((opts->x_riscv_zvl_flags == 0) \
+ ((opts->x_riscv_zvl_subext == 0) \
? 0 \
- : 32 << (__builtin_popcount (opts->x_riscv_zvl_flags) - 1))
+ : 32 << (__builtin_popcount (opts->x_riscv_zvl_subext) - 1))
/* The maximum LMUL according to user configuration. */
#define TARGET_MAX_LMUL \
@@ -164,4 +164,12 @@ enum riscv_tls_type {
#define GPR2VR_COST_UNPROVIDED -1
+/* Extra extension flags, used for carry extra info for a RISC-V extension. */
+enum
+{
+ EXT_FLAG_MACRO = 1 << 0,
+};
+
+#define BITMASK_NOT_YET_ALLOCATED -1
+
#endif /* ! GCC_RISCV_OPTS_H */
diff --git a/gcc/config/riscv/riscv-subset.h b/gcc/config/riscv/riscv-subset.h
index 559e708..c5d9fab 100644
--- a/gcc/config/riscv/riscv-subset.h
+++ b/gcc/config/riscv/riscv-subset.h
@@ -82,6 +82,8 @@ private:
const char *parse_single_multiletter_ext (const char *, const char *,
const char *, bool);
+ std::string parse_profiles (const char*);
+
void handle_implied_ext (const char *);
bool check_implied_ext ();
void handle_combine_ext ();
@@ -127,6 +129,5 @@ extern bool riscv_minimal_hwprobe_feature_bits (const char *,
location_t);
extern bool
riscv_ext_is_subset (struct cl_target_option *, struct cl_target_option *);
-extern int riscv_x_target_flags_isa_mask (void);
#endif /* ! GCC_RISCV_SUBSET_H */
diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
index f3c706bf..f652a12 100644
--- a/gcc/config/riscv/riscv-vector-builtins.cc
+++ b/gcc/config/riscv/riscv-vector-builtins.cc
@@ -3842,26 +3842,26 @@ check_required_extensions (const function_instance &instance)
required_extensions |= RVV_REQUIRE_RV64BIT;
}
- uint64_t riscv_isa_flags = 0;
+ uint64_t isa_flags = 0;
if (TARGET_VECTOR_ELEN_BF_16)
- riscv_isa_flags |= RVV_REQUIRE_ELEN_BF_16;
+ isa_flags |= RVV_REQUIRE_ELEN_BF_16;
if (TARGET_VECTOR_ELEN_FP_16)
- riscv_isa_flags |= RVV_REQUIRE_ELEN_FP_16;
+ isa_flags |= RVV_REQUIRE_ELEN_FP_16;
if (TARGET_VECTOR_ELEN_FP_32)
- riscv_isa_flags |= RVV_REQUIRE_ELEN_FP_32;
+ isa_flags |= RVV_REQUIRE_ELEN_FP_32;
if (TARGET_VECTOR_ELEN_FP_64)
- riscv_isa_flags |= RVV_REQUIRE_ELEN_FP_64;
+ isa_flags |= RVV_REQUIRE_ELEN_FP_64;
if (TARGET_VECTOR_ELEN_64)
- riscv_isa_flags |= RVV_REQUIRE_ELEN_64;
+ isa_flags |= RVV_REQUIRE_ELEN_64;
if (TARGET_64BIT)
- riscv_isa_flags |= RVV_REQUIRE_RV64BIT;
+ isa_flags |= RVV_REQUIRE_RV64BIT;
if (TARGET_FULL_V)
- riscv_isa_flags |= RVV_REQUIRE_FULL_V;
+ isa_flags |= RVV_REQUIRE_FULL_V;
if (TARGET_MIN_VLEN > 32)
- riscv_isa_flags |= RVV_REQUIRE_MIN_VLEN_64;
+ isa_flags |= RVV_REQUIRE_MIN_VLEN_64;
- uint64_t missing_extensions = required_extensions & ~riscv_isa_flags;
+ uint64_t missing_extensions = required_extensions & ~isa_flags;
if (missing_extensions != 0)
return false;
return true;
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 8b77a35..d28aee4 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -7918,11 +7918,9 @@ riscv_can_inline_p (tree caller, tree callee)
struct cl_target_option *callee_opts = TREE_TARGET_OPTION (callee_tree);
struct cl_target_option *caller_opts = TREE_TARGET_OPTION (caller_tree);
- int isa_flag_mask = riscv_x_target_flags_isa_mask ();
-
- /* Callee and caller should have the same target options except for ISA. */
- int callee_target_flags = callee_opts->x_target_flags & ~isa_flag_mask;
- int caller_target_flags = caller_opts->x_target_flags & ~isa_flag_mask;
+ /* Callee and caller should have the same target options. */
+ int callee_target_flags = callee_opts->x_target_flags;
+ int caller_target_flags = caller_opts->x_target_flags;
if (callee_target_flags != caller_target_flags)
return false;
diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt
index 80593ee..527e095 100644
--- a/gcc/config/riscv/riscv.opt
+++ b/gcc/config/riscv/riscv.opt
@@ -168,23 +168,14 @@ momit-leaf-frame-pointer
Target Mask(OMIT_LEAF_FRAME_POINTER) Save
Omit the frame pointer in leaf functions.
-Mask(64BIT)
-
-Mask(MUL)
-
-Mask(ATOMIC)
-
-Mask(HARD_FLOAT)
-
-Mask(DOUBLE_FLOAT)
-
-Mask(RVC)
+TargetVariable
+int riscv_isa_flags
-Mask(RVE)
+Mask(64BIT) Var(riscv_isa_flags)
-Mask(VECTOR)
+Mask(VECTOR) Var(riscv_isa_flags)
-Mask(FULL_V)
+Mask(FULL_V) Var(riscv_isa_flags)
mriscv-attribute
Target Var(riscv_emit_attribute_p) Init(-1)
@@ -233,95 +224,6 @@ TargetVariable
long riscv_stack_protector_guard_offset = 0
TargetVariable
-int riscv_zi_subext
-
-Mask(ZICSR) Var(riscv_zi_subext)
-
-Mask(ZIFENCEI) Var(riscv_zi_subext)
-
-Mask(ZIHINTNTL) Var(riscv_zi_subext)
-
-Mask(ZIHINTPAUSE) Var(riscv_zi_subext)
-
-Mask(ZICOND) Var(riscv_zi_subext)
-
-Mask(ZICCAMOA) Var(riscv_zi_subext)
-
-Mask(ZICCIF) Var(riscv_zi_subext)
-
-Mask(ZICCLSM) Var(riscv_zi_subext)
-
-Mask(ZICCRSE) Var(riscv_zi_subext)
-
-Mask(ZICFISS) Var(riscv_zi_subext)
-
-Mask(ZICFILP) Var(riscv_zi_subext)
-
-TargetVariable
-int riscv_za_subext
-
-Mask(ZAWRS) Var(riscv_za_subext)
-
-Mask(ZAAMO) Var(riscv_za_subext)
-
-Mask(ZALRSC) Var(riscv_za_subext)
-
-Mask(ZABHA) Var(riscv_za_subext)
-
-Mask(ZACAS) Var(riscv_za_subext)
-
-Mask(ZA64RS) Var(riscv_za_subext)
-
-Mask(ZA128RS) Var(riscv_za_subext)
-
-Mask(ZAMA16B) Var(riscv_za_subext)
-
-TargetVariable
-int riscv_zb_subext
-
-Mask(ZBA) Var(riscv_zb_subext)
-
-Mask(ZBB) Var(riscv_zb_subext)
-
-Mask(ZBC) Var(riscv_zb_subext)
-
-Mask(ZBS) Var(riscv_zb_subext)
-
-TargetVariable
-int riscv_zinx_subext
-
-Mask(ZFINX) Var(riscv_zinx_subext)
-
-Mask(ZDINX) Var(riscv_zinx_subext)
-
-Mask(ZHINX) Var(riscv_zinx_subext)
-
-Mask(ZHINXMIN) Var(riscv_zinx_subext)
-
-TargetVariable
-int riscv_zk_subext
-
-Mask(ZBKB) Var(riscv_zk_subext)
-
-Mask(ZBKC) Var(riscv_zk_subext)
-
-Mask(ZBKX) Var(riscv_zk_subext)
-
-Mask(ZKNE) Var(riscv_zk_subext)
-
-Mask(ZKND) Var(riscv_zk_subext)
-
-Mask(ZKNH) Var(riscv_zk_subext)
-
-Mask(ZKR) Var(riscv_zk_subext)
-
-Mask(ZKSED) Var(riscv_zk_subext)
-
-Mask(ZKSH) Var(riscv_zk_subext)
-
-Mask(ZKT) Var(riscv_zk_subext)
-
-TargetVariable
int riscv_vector_elen_flags
Mask(VECTOR_ELEN_32) Var(riscv_vector_elen_flags)
@@ -337,211 +239,6 @@ Mask(VECTOR_ELEN_FP_16) Var(riscv_vector_elen_flags)
Mask(VECTOR_ELEN_BF_16) Var(riscv_vector_elen_flags)
TargetVariable
-int riscv_zvl_flags
-
-Mask(ZVL32B) Var(riscv_zvl_flags)
-
-Mask(ZVL64B) Var(riscv_zvl_flags)
-
-Mask(ZVL128B) Var(riscv_zvl_flags)
-
-Mask(ZVL256B) Var(riscv_zvl_flags)
-
-Mask(ZVL512B) Var(riscv_zvl_flags)
-
-Mask(ZVL1024B) Var(riscv_zvl_flags)
-
-Mask(ZVL2048B) Var(riscv_zvl_flags)
-
-Mask(ZVL4096B) Var(riscv_zvl_flags)
-
-Mask(ZVL8192B) Var(riscv_zvl_flags)
-
-Mask(ZVL16384B) Var(riscv_zvl_flags)
-
-Mask(ZVL32768B) Var(riscv_zvl_flags)
-
-Mask(ZVL65536B) Var(riscv_zvl_flags)
-
-TargetVariable
-int riscv_zvb_subext
-
-Mask(ZVBB) Var(riscv_zvb_subext)
-
-Mask(ZVBC) Var(riscv_zvb_subext)
-
-Mask(ZVKB) Var(riscv_zvb_subext)
-
-TargetVariable
-int riscv_zvk_subext
-
-Mask(ZVKG) Var(riscv_zvk_subext)
-
-Mask(ZVKNED) Var(riscv_zvk_subext)
-
-Mask(ZVKNHA) Var(riscv_zvk_subext)
-
-Mask(ZVKNHB) Var(riscv_zvk_subext)
-
-Mask(ZVKSED) Var(riscv_zvk_subext)
-
-Mask(ZVKSH) Var(riscv_zvk_subext)
-
-Mask(ZVKN) Var(riscv_zvk_subext)
-
-Mask(ZVKNC) Var(riscv_zvk_subext)
-
-Mask(ZVKNG) Var(riscv_zvk_subext)
-
-Mask(ZVKS) Var(riscv_zvk_subext)
-
-Mask(ZVKSC) Var(riscv_zvk_subext)
-
-Mask(ZVKSG) Var(riscv_zvk_subext)
-
-Mask(ZVKT) Var(riscv_zvk_subext)
-
-TargetVariable
-int riscv_zicmo_subext
-
-Mask(ZICBOZ) Var(riscv_zicmo_subext)
-
-Mask(ZICBOM) Var(riscv_zicmo_subext)
-
-Mask(ZICBOP) Var(riscv_zicmo_subext)
-
-Mask(ZIC64B) Var(riscv_zicmo_subext)
-
-TargetVariable
-int riscv_mop_subext
-
-Mask(ZIMOP) Var(riscv_mop_subext)
-
-Mask(ZCMOP) Var(riscv_mop_subext)
-
-TargetVariable
-int riscv_zf_subext
-
-Mask(ZFBFMIN) Var(riscv_zf_subext)
-
-Mask(ZFHMIN) Var(riscv_zf_subext)
-
-Mask(ZFH) Var(riscv_zf_subext)
-
-Mask(ZVFBFMIN) Var(riscv_zf_subext)
-
-Mask(ZVFBFWMA) Var(riscv_zf_subext)
-
-Mask(ZVFHMIN) Var(riscv_zf_subext)
-
-Mask(ZVFH) Var(riscv_zf_subext)
-
-TargetVariable
-int riscv_zfa_subext
-
-Mask(ZFA) Var(riscv_zfa_subext)
-
-TargetVariable
-int riscv_zm_subext
-
-Mask(ZMMUL) Var(riscv_zm_subext)
-
-TargetVariable
-int riscv_zc_subext
-
-Mask(ZCA) Var(riscv_zc_subext)
-
-Mask(ZCB) Var(riscv_zc_subext)
-
-Mask(ZCE) Var(riscv_zc_subext)
-
-Mask(ZCF) Var(riscv_zc_subext)
-
-Mask(ZCD) Var(riscv_zc_subext)
-
-Mask(ZCMP) Var(riscv_zc_subext)
-
-Mask(ZCMT) Var(riscv_zc_subext)
-
-Mask(XCVBI) Var(riscv_xcv_subext)
-
-TargetVariable
-int riscv_sv_subext
-
-Mask(SVADE) Var(riscv_sv_subext)
-
-Mask(SVADU) Var(riscv_sv_subext)
-
-Mask(SVINVAL) Var(riscv_sv_subext)
-
-Mask(SVNAPOT) Var(riscv_sv_subext)
-
-Mask(SVVPTC) Var(riscv_sv_subext)
-
-TargetVariable
-int riscv_ztso_subext
-
-Mask(ZTSO) Var(riscv_ztso_subext)
-
-TargetVariable
-int riscv_xcv_subext
-
-Mask(XCVMAC) Var(riscv_xcv_subext)
-
-Mask(XCVALU) Var(riscv_xcv_subext)
-
-Mask(XCVELW) Var(riscv_xcv_subext)
-
-Mask(XCVSIMD) Var(riscv_xcv_subext)
-
-TargetVariable
-int riscv_xthead_subext
-
-Mask(XTHEADBA) Var(riscv_xthead_subext)
-
-Mask(XTHEADBB) Var(riscv_xthead_subext)
-
-Mask(XTHEADBS) Var(riscv_xthead_subext)
-
-Mask(XTHEADCMO) Var(riscv_xthead_subext)
-
-Mask(XTHEADCONDMOV) Var(riscv_xthead_subext)
-
-Mask(XTHEADFMEMIDX) Var(riscv_xthead_subext)
-
-Mask(XTHEADFMV) Var(riscv_xthead_subext)
-
-Mask(XTHEADINT) Var(riscv_xthead_subext)
-
-Mask(XTHEADMAC) Var(riscv_xthead_subext)
-
-Mask(XTHEADMEMIDX) Var(riscv_xthead_subext)
-
-Mask(XTHEADMEMPAIR) Var(riscv_xthead_subext)
-
-Mask(XTHEADSYNC) Var(riscv_xthead_subext)
-
-Mask(XTHEADVECTOR) Var(riscv_xthead_subext)
-
-TargetVariable
-int riscv_xventana_subext
-
-Mask(XVENTANACONDOPS) Var(riscv_xventana_subext)
-
-TargetVariable
-int riscv_sifive_subext
-
-Mask(XSFVCP) Var(riscv_sifive_subext)
-
-Mask(XSFCEASE) Var(riscv_sifive_subext)
-
-Mask(XSFVQMACCQOQ) Var(riscv_sifive_subext)
-
-Mask(XSFVQMACCDOD) Var(riscv_sifive_subext)
-
-Mask(XSFVFNRCLIPXFQF) Var(riscv_sifive_subext)
-
-TargetVariable
int riscv_fmv_priority = 0
Enum
diff --git a/gcc/config/riscv/t-riscv b/gcc/config/riscv/t-riscv
index 12e2b6e..e99d668 100644
--- a/gcc/config/riscv/t-riscv
+++ b/gcc/config/riscv/t-riscv
@@ -187,3 +187,46 @@ s-riscv-vector-type-indexer.gen.defs: build/genrvv-type-indexer$(build_exeext)
$(STAMP) s-riscv-vector-type-indexer.gen.defs
genprog+=rvv-type-indexer
+
+RISCV_EXT_DEFS = \
+ $(srcdir)/config/riscv/riscv-ext.def \
+ $(srcdir)/config/riscv/riscv-ext-corev.def \
+ $(srcdir)/config/riscv/riscv-ext.def \
+ $(srcdir)/config/riscv/riscv-ext-sifive.def \
+ $(srcdir)/config/riscv/riscv-ext-thead.def \
+ $(srcdir)/config/riscv/riscv-ext-ventana.def
+
+$(srcdir)/config/riscv/riscv-ext.opt: $(RISCV_EXT_DEFS)
+
+$(srcdir)/config/riscv/riscv-ext.opt: s-riscv-ext.opt ; @true
+
+build/gen-riscv-ext-opt$(build_exeext): $(srcdir)/config/riscv/gen-riscv-ext-opt.cc \
+ $(RISCV_EXT_DEFS)
+ $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $< -o $@
+
+s-riscv-ext.opt: build/gen-riscv-ext-opt$(build_exeext)
+ $(RUN_GEN) build/gen-riscv-ext-opt$(build_exeext) > tmp-riscv-ext.opt
+ $(SHELL) $(srcdir)/../move-if-change tmp-riscv-ext.opt $(srcdir)/config/riscv/riscv-ext.opt
+ $(STAMP) s-riscv-ext.opt
+
+build/gen-riscv-ext-texi$(build_exeext): $(srcdir)/config/riscv/gen-riscv-ext-texi.cc \
+ $(RISCV_EXT_DEFS)
+ $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $< -o $@
+
+
+$(srcdir)/doc/riscv-ext.texi: $(RISCV_EXT_DEFS)
+$(srcdir)/doc/riscv-ext.texi: s-riscv-ext.texi ; @true
+
+# Generate the doc when generating option file.
+$(srcdir)/config/riscv/riscv-ext.opt: s-riscv-ext.texi ; @true
+
+s-riscv-ext.texi: build/gen-riscv-ext-texi$(build_exeext)
+ $(RUN_GEN) build/gen-riscv-ext-texi$(build_exeext) > tmp-riscv-ext.texi
+ $(SHELL) $(srcdir)/../move-if-change tmp-riscv-ext.texi $(srcdir)/doc/riscv-ext.texi
+ $(STAMP) s-riscv-ext.texi
+
+# Run `riscv-regen' after you changed or added anything from riscv-ext*.def
+
+.PHONY: riscv-regen
+
+riscv-regen: s-riscv-ext.texi s-riscv-ext.opt
diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc
index 53db06e..621fb0a 100644
--- a/gcc/config/xtensa/xtensa.cc
+++ b/gcc/config/xtensa/xtensa.cc
@@ -4430,17 +4430,27 @@ static int
xtensa_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
reg_class_t from, reg_class_t to)
{
- if (from == to && from != BR_REGS && to != BR_REGS)
+ /* If both are equal (except for BR_REGS) or belong to AR_REGS,
+ the cost is 2 (the default value). */
+ if ((from == to && from != BR_REGS && to != BR_REGS)
+ || (reg_class_subset_p (from, AR_REGS)
+ && reg_class_subset_p (to, AR_REGS)))
return 2;
- else if (reg_class_subset_p (from, AR_REGS)
- && reg_class_subset_p (to, AR_REGS))
- return 2;
- else if (reg_class_subset_p (from, AR_REGS) && to == ACC_REG)
- return 3;
- else if (from == ACC_REG && reg_class_subset_p (to, AR_REGS))
+
+ /* The cost between AR_REGS and FR_REGS must be <= 8 (2x the default
+ MEMORY_MOVE_COST) to avoid unwanted spills, and > 4 (2x the above
+ case) to avoid excessive register-to-register moves. */
+ if ((reg_class_subset_p (from, AR_REGS) && to == FP_REGS)
+ || (from == FP_REGS && reg_class_subset_p (to, AR_REGS)))
+ return 5;
+
+ if ((reg_class_subset_p (from, AR_REGS) && to == ACC_REG)
+ || (from == ACC_REG && reg_class_subset_p (to, AR_REGS)))
return 3;
- else
- return 10;
+
+ /* Otherwise, spills to stack (because greater than 2x the default
+ MEMORY_MOVE_COST). */
+ return 10;
}
/* Compute a (partial) cost for rtx X. Return true if the complete
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 51672a7..764e158 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,13 @@
+2025-05-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/120012
+ * class.cc (check_non_pod_aggregate): Check is_empty_class.
+
+2025-05-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/120204
+ * pt.cc (tsubst_baselink): Always error if lookup fails.
+
2025-05-09 Jason Merrill <jason@redhat.com>
* decl2.cc (determine_visibility): Ignore args for friend templates.
diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc
index 2764bb5..db39e57 100644
--- a/gcc/cp/class.cc
+++ b/gcc/cp/class.cc
@@ -6879,8 +6879,10 @@ check_non_pod_aggregate (tree field)
tree type = TREE_TYPE (field);
if (TYPE_IDENTIFIER (type) == as_base_identifier)
type = TYPE_CONTEXT (type);
- if (!CLASS_TYPE_P (type) || (!CLASSTYPE_NON_POD_AGGREGATE (type)
- && !CLASSTYPE_NON_AGGREGATE_POD (type)))
+ if (!CLASS_TYPE_P (type)
+ || is_empty_class (type)
+ || (!CLASSTYPE_NON_POD_AGGREGATE (type)
+ && !CLASSTYPE_NON_AGGREGATE_POD (type)))
return;
tree size = end_of_class (type, (DECL_FIELD_IS_BASE (field)
? eoc_nvsize : eoc_nv_or_dsize));
diff --git a/gcc/diagnostic-format-html.cc b/gcc/diagnostic-format-html.cc
index 2d642df..6bb1caf 100644
--- a/gcc/diagnostic-format-html.cc
+++ b/gcc/diagnostic-format-html.cc
@@ -27,11 +27,14 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic-metadata.h"
#include "diagnostic-format.h"
#include "diagnostic-format-html.h"
+#include "diagnostic-format-text.h"
#include "diagnostic-output-file.h"
#include "diagnostic-buffer.h"
#include "selftest.h"
#include "selftest-diagnostic.h"
#include "pretty-print-format-impl.h"
+#include "pretty-print-urlifier.h"
+#include "edit-context.h"
#include "intl.h"
namespace xml {
@@ -280,8 +283,8 @@ public:
friend class diagnostic_html_format_buffer;
html_builder (diagnostic_context &context,
- pretty_printer &pp,
- const line_maps *line_maps);
+ pretty_printer &pp,
+ const line_maps *line_maps);
void on_report_diagnostic (const diagnostic_info &diagnostic,
diagnostic_t orig_diag_kind,
@@ -303,11 +306,27 @@ public:
m_printer = &pp;
}
+ std::unique_ptr<xml::element>
+ make_element_for_metadata (const diagnostic_metadata &metadata);
+
+ std::unique_ptr<xml::element>
+ make_element_for_source (const diagnostic_info &diagnostic);
+
+ std::unique_ptr<xml::element>
+ make_element_for_path (const diagnostic_path &path);
+
+ std::unique_ptr<xml::element>
+ make_element_for_patch (const diagnostic_info &diagnostic);
+
private:
std::unique_ptr<xml::element>
make_element_for_diagnostic (const diagnostic_info &diagnostic,
diagnostic_t orig_diag_kind);
+ std::unique_ptr<xml::element>
+ make_metadata_element (label_text label,
+ label_text url);
+
diagnostic_context &m_context;
pretty_printer *m_printer;
const line_maps *m_line_maps;
@@ -560,28 +579,11 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
if (diagnostic.metadata)
{
- int cwe = diagnostic.metadata->get_cwe ();
- if (cwe)
- {
- diag_element->add_text (label_text::borrow (" "));
- auto cwe_span = make_span (label_text::borrow ("gcc-cwe-metadata"));
- cwe_span->add_text (label_text::borrow ("["));
- {
- auto anchor = std::make_unique<xml::element> ("a", true);
- anchor->set_attr ("href", label_text::take (get_cwe_url (cwe)));
- pretty_printer pp;
- pp_printf (&pp, "CWE-%i", cwe);
- anchor->add_text
- (label_text::take (xstrdup (pp_formatted_text (&pp))));
- cwe_span->add_child (std::move (anchor));
- }
- cwe_span->add_text (label_text::borrow ("]"));
- diag_element->add_child (std::move (cwe_span));
- }
+ diag_element->add_text (label_text::borrow (" "));
+ diag_element->add_child
+ (make_element_for_metadata (*diagnostic.metadata));
}
- // TODO: show any rules
-
label_text option_text = label_text::take
(m_context.make_option_name (diagnostic.option_id,
orig_diag_kind, diagnostic.kind));
@@ -608,20 +610,122 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
diag_element->add_child (std::move (option_span));
}
+ /* Source (and fix-it hints). */
+ if (auto source_element = make_element_for_source (diagnostic))
+ diag_element->add_child (std::move (source_element));
+
+ /* Execution path. */
+ if (auto path = diagnostic.richloc->get_path ())
+ if (auto path_element = make_element_for_path (*path))
+ diag_element->add_child (std::move (path_element));
+
+ if (auto patch_element = make_element_for_patch (diagnostic))
+ diag_element->add_child (std::move (patch_element));
+
+ return diag_element;
+}
+
+std::unique_ptr<xml::element>
+html_builder::make_element_for_source (const diagnostic_info &diagnostic)
+{
+ // TODO: ideally we'd like to capture elements within the following:
+ m_context.m_last_location = UNKNOWN_LOCATION;
+ pp_clear_output_area (m_printer);
+ diagnostic_show_locus (&m_context,
+ m_context.m_source_printing,
+ diagnostic.richloc, diagnostic.kind,
+ m_printer);
+ auto text = label_text::take (xstrdup (pp_formatted_text (m_printer)));
+ pp_clear_output_area (m_printer);
+
+ if (strlen (text.get ()) == 0)
+ return nullptr;
+
+ auto pre = std::make_unique<xml::element> ("pre", true);
+ pre->set_attr ("class", label_text::borrow ("gcc-annotated-source"));
+ pre->add_text (std::move (text));
+ return pre;
+}
+
+std::unique_ptr<xml::element>
+html_builder::make_element_for_path (const diagnostic_path &path)
+{
+ m_context.m_last_location = UNKNOWN_LOCATION;
+ diagnostic_text_output_format text_format (m_context);
+ pp_show_color (text_format.get_printer ()) = false;
+ pp_buffer (text_format.get_printer ())->m_flush_p = false;
+ // TODO: ideally we'd like to capture elements within the following:
+ text_format.print_path (path);
+ auto text = label_text::take
+ (xstrdup (pp_formatted_text (text_format.get_printer ())));
+
+ if (strlen (text.get ()) == 0)
+ return nullptr;
+
+ auto pre = std::make_unique<xml::element> ("pre", true);
+ pre->set_attr ("class", label_text::borrow ("gcc-execution-path"));
+ pre->add_text (std::move (text));
+ return pre;
+}
+
+std::unique_ptr<xml::element>
+html_builder::make_element_for_patch (const diagnostic_info &diagnostic)
+{
+ edit_context ec (m_context.get_file_cache ());
+ ec.add_fixits (diagnostic.richloc);
+ if (char *diff = ec.generate_diff (true))
+ if (strlen (diff) > 0)
+ {
+ auto element = std::make_unique<xml::element> ("pre", true);
+ element->set_attr ("class", label_text::borrow ("gcc-generated-patch"));
+ element->add_text (label_text::take (diff));
+ return element;
+ }
+ return nullptr;
+}
+
+std::unique_ptr<xml::element>
+html_builder::make_metadata_element (label_text label,
+ label_text url)
+{
+ auto item = make_span (label_text::borrow ("gcc-metadata-item"));
+ item->add_text (label_text::borrow ("["));
{
- auto pre = std::make_unique<xml::element> ("pre", true);
- pre->set_attr ("class", label_text::borrow ("gcc-annotated-source"));
- // TODO: ideally we'd like to capture elements within the following:
- diagnostic_show_locus (&m_context, m_context.m_source_printing,
- diagnostic.richloc, diagnostic.kind,
- m_printer);
- pre->add_text
- (label_text::take (xstrdup (pp_formatted_text (m_printer))));
- pp_clear_output_area (m_printer);
- diag_element->add_child (std::move (pre));
+ auto anchor = std::make_unique<xml::element> ("a", true);
+ anchor->set_attr ("href", std::move (url));
+ anchor->add_child (std::make_unique<xml::text> (std::move (label)));
+ item->add_child (std::move (anchor));
}
+ item->add_text (label_text::borrow ("]"));
+ return item;
+}
- return diag_element;
+std::unique_ptr<xml::element>
+html_builder::make_element_for_metadata (const diagnostic_metadata &metadata)
+{
+ auto span_metadata = make_span (label_text::borrow ("gcc-metadata"));
+
+ int cwe = metadata.get_cwe ();
+ if (cwe)
+ {
+ pretty_printer pp;
+ pp_printf (&pp, "CWE-%i", cwe);
+ label_text label = label_text::take (xstrdup (pp_formatted_text (&pp)));
+ label_text url = label_text::take (get_cwe_url (cwe));
+ span_metadata->add_child
+ (make_metadata_element (std::move (label), std::move (url)));
+ }
+
+ for (unsigned idx = 0; idx < metadata.get_num_rules (); ++idx)
+ {
+ auto &rule = metadata.get_rule (idx);
+ label_text label = label_text::take (rule.make_description ());
+ label_text url = label_text::take (rule.make_url ());
+ span_metadata->add_child
+ (make_metadata_element (std::move (label), std::move (url)));
+ }
+
+ return span_metadata;
}
/* Implementation of diagnostic_context::m_diagrams.m_emission_cb
@@ -734,6 +838,8 @@ public:
return m_builder.get_document ();
}
+ html_builder &get_builder () { return m_builder; }
+
protected:
html_output_format (diagnostic_context &context,
const line_maps *line_maps)
@@ -852,6 +958,11 @@ public:
return m_format->get_document ();
}
+ html_builder &get_builder () const
+ {
+ return m_format->get_builder ();
+ }
+
private:
class html_buffered_output_format : public html_output_format
{
@@ -880,7 +991,7 @@ test_simple_log ()
test_html_diagnostic_context dc;
rich_location richloc (line_table, UNKNOWN_LOCATION);
- dc.report (DK_ERROR, richloc, nullptr, 0, "this is a test: %i", 42);
+ dc.report (DK_ERROR, richloc, nullptr, 0, "this is a test: %qs", "foo");
const xml::document &doc = dc.get_document ();
@@ -899,20 +1010,70 @@ test_simple_log ()
" <body>\n"
" <div class=\"gcc-diagnostic-list\">\n"
" <div class=\"gcc-diagnostic\">\n"
- " <span class=\"gcc-message\">this is a test: 42</span>\n"
- " <pre class=\"gcc-annotated-source\"></pre>\n"
+ " <span class=\"gcc-message\">this is a test: `<span class=\"gcc-quoted-text\">foo</span>&apos;</span>\n"
" </div>\n"
" </div>\n"
" </body>\n"
"</html>"));
}
+static void
+test_metadata ()
+{
+ test_html_diagnostic_context dc;
+ html_builder &b = dc.get_builder ();
+
+ {
+ diagnostic_metadata metadata;
+ metadata.add_cwe (415);
+ auto element = b.make_element_for_metadata (metadata);
+ pretty_printer pp;
+ element->write_as_xml (&pp, 0, true);
+ ASSERT_STREQ
+ (pp_formatted_text (&pp),
+ "\n"
+ "<span class=\"gcc-metadata\">"
+ "<span class=\"gcc-metadata-item\">"
+ "["
+ "<a href=\"https://cwe.mitre.org/data/definitions/415.html\">"
+ "CWE-415"
+ "</a>"
+ "]"
+ "</span>"
+ "</span>");
+ }
+
+ {
+ diagnostic_metadata metadata;
+ diagnostic_metadata::precanned_rule rule ("MISC-42",
+ "http://example.com");
+ metadata.add_rule (rule);
+ auto element = b.make_element_for_metadata (metadata);
+ pretty_printer pp;
+ element->write_as_xml (&pp, 0, true);
+ ASSERT_STREQ
+ (pp_formatted_text (&pp),
+ "\n"
+ "<span class=\"gcc-metadata\">"
+ "<span class=\"gcc-metadata-item\">"
+ "["
+ "<a href=\"http://example.com\">"
+ "MISC-42"
+ "</a>"
+ "]"
+ "</span>"
+ "</span>");
+ }
+}
+
/* Run all of the selftests within this file. */
void
diagnostic_format_html_cc_tests ()
{
+ auto_fix_quotes fix_quotes;
test_simple_log ();
+ test_metadata ();
}
} // namespace selftest
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 212d248..40ccf22 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -17905,7 +17905,6 @@ instructions, but allow the compiler to schedule those calls.
* Alpha Built-in Functions::
* ARC Built-in Functions::
* ARC SIMD Built-in Functions::
-* ARM iWMMXt Built-in Functions::
* ARM C Language Extensions (ACLE)::
* ARM Floating Point Status and Control Intrinsics::
* ARM ARMv8-M Security Extensions::
@@ -18521,160 +18520,6 @@ _v4hi __builtin_arc_vaddsub4h (__v4hi, __v4hi);
_v4hi __builtin_arc_vsubadd4h (__v4hi, __v4hi);
@end example
-@node ARM iWMMXt Built-in Functions
-@subsection ARM iWMMXt Built-in Functions
-
-These built-in functions are available for the ARM family of
-processors when the @option{-mcpu=iwmmxt} switch is used:
-
-@smallexample
-typedef int v2si __attribute__ ((vector_size (8)));
-typedef short v4hi __attribute__ ((vector_size (8)));
-typedef char v8qi __attribute__ ((vector_size (8)));
-
-int __builtin_arm_getwcgr0 (void);
-void __builtin_arm_setwcgr0 (int);
-int __builtin_arm_getwcgr1 (void);
-void __builtin_arm_setwcgr1 (int);
-int __builtin_arm_getwcgr2 (void);
-void __builtin_arm_setwcgr2 (int);
-int __builtin_arm_getwcgr3 (void);
-void __builtin_arm_setwcgr3 (int);
-int __builtin_arm_textrmsb (v8qi, int);
-int __builtin_arm_textrmsh (v4hi, int);
-int __builtin_arm_textrmsw (v2si, int);
-int __builtin_arm_textrmub (v8qi, int);
-int __builtin_arm_textrmuh (v4hi, int);
-int __builtin_arm_textrmuw (v2si, int);
-v8qi __builtin_arm_tinsrb (v8qi, int, int);
-v4hi __builtin_arm_tinsrh (v4hi, int, int);
-v2si __builtin_arm_tinsrw (v2si, int, int);
-long long __builtin_arm_tmia (long long, int, int);
-long long __builtin_arm_tmiabb (long long, int, int);
-long long __builtin_arm_tmiabt (long long, int, int);
-long long __builtin_arm_tmiaph (long long, int, int);
-long long __builtin_arm_tmiatb (long long, int, int);
-long long __builtin_arm_tmiatt (long long, int, int);
-int __builtin_arm_tmovmskb (v8qi);
-int __builtin_arm_tmovmskh (v4hi);
-int __builtin_arm_tmovmskw (v2si);
-long long __builtin_arm_waccb (v8qi);
-long long __builtin_arm_wacch (v4hi);
-long long __builtin_arm_waccw (v2si);
-v8qi __builtin_arm_waddb (v8qi, v8qi);
-v8qi __builtin_arm_waddbss (v8qi, v8qi);
-v8qi __builtin_arm_waddbus (v8qi, v8qi);
-v4hi __builtin_arm_waddh (v4hi, v4hi);
-v4hi __builtin_arm_waddhss (v4hi, v4hi);
-v4hi __builtin_arm_waddhus (v4hi, v4hi);
-v2si __builtin_arm_waddw (v2si, v2si);
-v2si __builtin_arm_waddwss (v2si, v2si);
-v2si __builtin_arm_waddwus (v2si, v2si);
-v8qi __builtin_arm_walign (v8qi, v8qi, int);
-long long __builtin_arm_wand(long long, long long);
-long long __builtin_arm_wandn (long long, long long);
-v8qi __builtin_arm_wavg2b (v8qi, v8qi);
-v8qi __builtin_arm_wavg2br (v8qi, v8qi);
-v4hi __builtin_arm_wavg2h (v4hi, v4hi);
-v4hi __builtin_arm_wavg2hr (v4hi, v4hi);
-v8qi __builtin_arm_wcmpeqb (v8qi, v8qi);
-v4hi __builtin_arm_wcmpeqh (v4hi, v4hi);
-v2si __builtin_arm_wcmpeqw (v2si, v2si);
-v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi);
-v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi);
-v2si __builtin_arm_wcmpgtsw (v2si, v2si);
-v8qi __builtin_arm_wcmpgtub (v8qi, v8qi);
-v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi);
-v2si __builtin_arm_wcmpgtuw (v2si, v2si);
-long long __builtin_arm_wmacs (long long, v4hi, v4hi);
-long long __builtin_arm_wmacsz (v4hi, v4hi);
-long long __builtin_arm_wmacu (long long, v4hi, v4hi);
-long long __builtin_arm_wmacuz (v4hi, v4hi);
-v4hi __builtin_arm_wmadds (v4hi, v4hi);
-v4hi __builtin_arm_wmaddu (v4hi, v4hi);
-v8qi __builtin_arm_wmaxsb (v8qi, v8qi);
-v4hi __builtin_arm_wmaxsh (v4hi, v4hi);
-v2si __builtin_arm_wmaxsw (v2si, v2si);
-v8qi __builtin_arm_wmaxub (v8qi, v8qi);
-v4hi __builtin_arm_wmaxuh (v4hi, v4hi);
-v2si __builtin_arm_wmaxuw (v2si, v2si);
-v8qi __builtin_arm_wminsb (v8qi, v8qi);
-v4hi __builtin_arm_wminsh (v4hi, v4hi);
-v2si __builtin_arm_wminsw (v2si, v2si);
-v8qi __builtin_arm_wminub (v8qi, v8qi);
-v4hi __builtin_arm_wminuh (v4hi, v4hi);
-v2si __builtin_arm_wminuw (v2si, v2si);
-v4hi __builtin_arm_wmulsm (v4hi, v4hi);
-v4hi __builtin_arm_wmulul (v4hi, v4hi);
-v4hi __builtin_arm_wmulum (v4hi, v4hi);
-long long __builtin_arm_wor (long long, long long);
-v2si __builtin_arm_wpackdss (long long, long long);
-v2si __builtin_arm_wpackdus (long long, long long);
-v8qi __builtin_arm_wpackhss (v4hi, v4hi);
-v8qi __builtin_arm_wpackhus (v4hi, v4hi);
-v4hi __builtin_arm_wpackwss (v2si, v2si);
-v4hi __builtin_arm_wpackwus (v2si, v2si);
-long long __builtin_arm_wrord (long long, long long);
-long long __builtin_arm_wrordi (long long, int);
-v4hi __builtin_arm_wrorh (v4hi, long long);
-v4hi __builtin_arm_wrorhi (v4hi, int);
-v2si __builtin_arm_wrorw (v2si, long long);
-v2si __builtin_arm_wrorwi (v2si, int);
-v2si __builtin_arm_wsadb (v2si, v8qi, v8qi);
-v2si __builtin_arm_wsadbz (v8qi, v8qi);
-v2si __builtin_arm_wsadh (v2si, v4hi, v4hi);
-v2si __builtin_arm_wsadhz (v4hi, v4hi);
-v4hi __builtin_arm_wshufh (v4hi, int);
-long long __builtin_arm_wslld (long long, long long);
-long long __builtin_arm_wslldi (long long, int);
-v4hi __builtin_arm_wsllh (v4hi, long long);
-v4hi __builtin_arm_wsllhi (v4hi, int);
-v2si __builtin_arm_wsllw (v2si, long long);
-v2si __builtin_arm_wsllwi (v2si, int);
-long long __builtin_arm_wsrad (long long, long long);
-long long __builtin_arm_wsradi (long long, int);
-v4hi __builtin_arm_wsrah (v4hi, long long);
-v4hi __builtin_arm_wsrahi (v4hi, int);
-v2si __builtin_arm_wsraw (v2si, long long);
-v2si __builtin_arm_wsrawi (v2si, int);
-long long __builtin_arm_wsrld (long long, long long);
-long long __builtin_arm_wsrldi (long long, int);
-v4hi __builtin_arm_wsrlh (v4hi, long long);
-v4hi __builtin_arm_wsrlhi (v4hi, int);
-v2si __builtin_arm_wsrlw (v2si, long long);
-v2si __builtin_arm_wsrlwi (v2si, int);
-v8qi __builtin_arm_wsubb (v8qi, v8qi);
-v8qi __builtin_arm_wsubbss (v8qi, v8qi);
-v8qi __builtin_arm_wsubbus (v8qi, v8qi);
-v4hi __builtin_arm_wsubh (v4hi, v4hi);
-v4hi __builtin_arm_wsubhss (v4hi, v4hi);
-v4hi __builtin_arm_wsubhus (v4hi, v4hi);
-v2si __builtin_arm_wsubw (v2si, v2si);
-v2si __builtin_arm_wsubwss (v2si, v2si);
-v2si __builtin_arm_wsubwus (v2si, v2si);
-v4hi __builtin_arm_wunpckehsb (v8qi);
-v2si __builtin_arm_wunpckehsh (v4hi);
-long long __builtin_arm_wunpckehsw (v2si);
-v4hi __builtin_arm_wunpckehub (v8qi);
-v2si __builtin_arm_wunpckehuh (v4hi);
-long long __builtin_arm_wunpckehuw (v2si);
-v4hi __builtin_arm_wunpckelsb (v8qi);
-v2si __builtin_arm_wunpckelsh (v4hi);
-long long __builtin_arm_wunpckelsw (v2si);
-v4hi __builtin_arm_wunpckelub (v8qi);
-v2si __builtin_arm_wunpckeluh (v4hi);
-long long __builtin_arm_wunpckeluw (v2si);
-v8qi __builtin_arm_wunpckihb (v8qi, v8qi);
-v4hi __builtin_arm_wunpckihh (v4hi, v4hi);
-v2si __builtin_arm_wunpckihw (v2si, v2si);
-v8qi __builtin_arm_wunpckilb (v8qi, v8qi);
-v4hi __builtin_arm_wunpckilh (v4hi, v4hi);
-v2si __builtin_arm_wunpckilw (v2si, v2si);
-long long __builtin_arm_wxor (long long, long long);
-long long __builtin_arm_wzero ();
-@end smallexample
-
-
@node ARM C Language Extensions (ACLE)
@subsection ARM C Language Extensions (ACLE)
diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi
index cb52e8c..8293da4 100644
--- a/gcc/doc/gm2.texi
+++ b/gcc/doc/gm2.texi
@@ -1495,7 +1495,7 @@ from @samp{bad} will cause an overflow to @samp{foo}. If we compile
the code with the following options:
@example
-$ gm2 -g -fsoft-check-all -O2 -c assignvalue.mod
+$ gm2 -g -fsoft-check-all -O2 -fm2-plugin -c assignvalue.mod
assignvalue.mod:16:0:inevitable that this error will occur at run time,
assignment will result in an overflow
@end example
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index f31d504..ee71801 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1268,7 +1268,7 @@ See RS/6000 and PowerPC Options.
-mfence-tso -mno-fence-tso
-mdiv -mno-div
-misa-spec=@var{ISA-spec-string}
--march=@var{ISA-string}
+-march=@var{ISA-string|Profiles|Profiles_ISA-string}
-mtune=@var{processor-string}
-mpreferred-stack-boundary=@var{num}
-msmall-data-limit=@var{N-bytes}
@@ -23520,7 +23520,7 @@ These @samp{-m} options are defined for the ARM port:
@opindex mabi
@item -mabi=@var{name}
Generate code for the specified ABI@. Permissible values are: @samp{apcs-gnu},
-@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
+@samp{atpcs}, @samp{aapcs} and @samp{aapcs-linux}.
@opindex mapcs-frame
@item -mapcs-frame
@@ -30698,6 +30698,7 @@ Generate code for the specified PTX ISA target architecture.
Valid architecture strings are
@samp{sm_30}, @samp{sm_35}, @samp{sm_37},
@samp{sm_52}, @samp{sm_53},
+@samp{sm_61},
@samp{sm_70}, @samp{sm_75},
@samp{sm_80}, and @samp{sm_89}.
The default depends on how the compiler has been configured, see
@@ -30724,6 +30725,7 @@ Generate code for the specified PTX ISA version.
Valid version strings are
@samp{3.1},
@samp{4.1}, @samp{4.2},
+@samp{5.0},
@samp{6.0}, @samp{6.3},
@samp{7.0}, @samp{7.3}, and @samp{7.8}.
The default PTX ISA version is the one that added support for the
@@ -31115,11 +31117,16 @@ The default is @option{-misa-spec=20191213} unless GCC has been configured
with @option{--with-isa-spec=} specifying a different default version.
@opindex march
-@item -march=@var{ISA-string}
-Generate code for given RISC-V ISA (e.g.@: @samp{rv64im}). ISA strings must be
-lower-case. Examples include @samp{rv64i}, @samp{rv32g}, @samp{rv32e}, and
-@samp{rv32imaf}. Additionally, a special value @option{help}
-(@option{-march=help}) is accepted to list all supported extensions.
+@item -march=@var{ISA-string|Profiles|Profile_ISA-string}
+Generate code for given RISC-V ISA or Profiles or a combination of them
+(e.g.@: @samp{rv64im} @samp{rvi20u64} @samp{rvi20u64_zbb}). ISA strings and
+Profiles must be lower-case. Examples include @samp{rv64i}, @samp{rv32g},
+@samp{rv32e}, @samp{rv32imaf}, @samp{rva22u64} and @samp{rva23u64}.
+To combine Profiles and optional RISC-V ISA extention, the profile should start
+at the beginning of the option, then use underline connect ISA-string (e.g.@:
+@samp{rvi20u64_zca_zcb} @samp{rva23u64_zacas}). Additionally, a special value
+@option{help} (@option{-march=help}) is accepted to list all supported
+extensions.
The syntax of the ISA string is defined as follows:
@@ -31138,501 +31145,8 @@ syntax @samp{<major>p<minor>} or @samp{<major>}, (e.g.@: @samp{m2p1} or
@end table
Supported extension are listed below:
-@multitable @columnfractions .10 .10 .80
-@headitem Extension Name @tab Supported Version @tab Description
-@item i
-@tab 2.0, 2.1
-@tab Base integer extension.
-
-@item e
-@tab 2.0
-@tab Reduced base integer extension.
-
-@item g
-@tab -
-@tab General-purpose computing base extension, @samp{g} will expand to
-@samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and
-@samp{zifencei}.
-
-@item m
-@tab 2.0
-@tab Integer multiplication and division extension.
-
-@item a
-@tab 2.0, 2.1
-@tab Atomic extension.
-
-@item f
-@tab 2.0, 2.2
-@tab Single-precision floating-point extension.
-
-@item d
-@tab 2.0, 2.2
-@tab Double-precision floating-point extension.
-
-@item c
-@tab 2.0
-@tab Compressed extension.
-
-@item h
-@tab 1.0
-@tab Hypervisor extension.
-
-@item v
-@tab 1.0
-@tab Vector extension.
-
-@item zicsr
-@tab 2.0
-@tab Control and status register access extension.
-
-@item zifencei
-@tab 2.0
-@tab Instruction-fetch fence extension.
-
-@item zicond
-@tab 1.0
-@tab Integer conditional operations extension.
-
-@item za64rs
-@tab 1.0
-@tab Reservation set size of 64 bytes.
-
-@item za128rs
-@tab 1.0
-@tab Reservation set size of 128 bytes.
-
-@item zawrs
-@tab 1.0
-@tab Wait-on-reservation-set extension.
-
-@item zba
-@tab 1.0
-@tab Address calculation extension.
-
-@item zbb
-@tab 1.0
-@tab Basic bit manipulation extension.
-
-@item zbc
-@tab 1.0
-@tab Carry-less multiplication extension.
-
-@item zbs
-@tab 1.0
-@tab Single-bit operation extension.
-
-@item zfinx
-@tab 1.0
-@tab Single-precision floating-point in integer registers extension.
-
-@item zdinx
-@tab 1.0
-@tab Double-precision floating-point in integer registers extension.
-
-@item zhinx
-@tab 1.0
-@tab Half-precision floating-point in integer registers extension.
-
-@item zhinxmin
-@tab 1.0
-@tab Minimal half-precision floating-point in integer registers extension.
-
-@item zbkb
-@tab 1.0
-@tab Cryptography bit-manipulation extension.
-
-@item zbkc
-@tab 1.0
-@tab Cryptography carry-less multiply extension.
-
-@item zbkx
-@tab 1.0
-@tab Cryptography crossbar permutation extension.
-
-@item zkne
-@tab 1.0
-@tab AES Encryption extension.
-
-@item zknd
-@tab 1.0
-@tab AES Decryption extension.
-
-@item zknh
-@tab 1.0
-@tab Hash function extension.
-
-@item zkr
-@tab 1.0
-@tab Entropy source extension.
-
-@item zksed
-@tab 1.0
-@tab SM4 block cipher extension.
-
-@item zksh
-@tab 1.0
-@tab SM3 hash function extension.
-
-@item zkt
-@tab 1.0
-@tab Data independent execution latency extension.
-
-@item zk
-@tab 1.0
-@tab Standard scalar cryptography extension.
-
-@item zkn
-@tab 1.0
-@tab NIST algorithm suite extension.
-
-@item zks
-@tab 1.0
-@tab ShangMi algorithm suite extension.
-@item zihintntl
-@tab 1.0
-@tab Non-temporal locality hints extension.
-
-@item zihintpause
-@tab 1.0
-@tab Pause hint extension.
-
-@item zicboz
-@tab 1.0
-@tab Cache-block zero extension.
-
-@item zicbom
-@tab 1.0
-@tab Cache-block management extension.
-
-@item zicbop
-@tab 1.0
-@tab Cache-block prefetch extension.
-
-@item zic64b
-@tab 1.0
-@tab Cache block size isf 64 bytes.
-
-@item ziccamoa
-@tab 1.0
-@tab Main memory supports all atomics in A.
-
-@item ziccif
-@tab 1.0
-@tab Main memory supports instruction fetch with atomicity requirement.
-
-@item zicclsm
-@tab 1.0
-@tab Main memory supports misaligned loads/stores.
-
-@item ziccrse
-@tab 1.0
-@tab Main memory supports forward progress on LR/SC sequences.
-
-@item zicntr
-@tab 2.0
-@tab Standard extension for base counters and timers.
-
-@item zihpm
-@tab 2.0
-@tab Standard extension for hardware performance counters.
-
-@item ztso
-@tab 1.0
-@tab Total store ordering extension.
-
-@item zve32x
-@tab 1.0
-@tab Vector extensions for embedded processors.
-
-@item zve32f
-@tab 1.0
-@tab Vector extensions for embedded processors.
-
-@item zve64x
-@tab 1.0
-@tab Vector extensions for embedded processors.
-
-@item zve64f
-@tab 1.0
-@tab Vector extensions for embedded processors.
-
-@item zve64d
-@tab 1.0
-@tab Vector extensions for embedded processors.
-
-@item zvl32b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl64b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl128b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl256b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl512b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl1024b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl2048b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvl4096b
-@tab 1.0
-@tab Minimum vector length standard extensions
-
-@item zvbb
-@tab 1.0
-@tab Vector basic bit-manipulation extension.
-
-@item zvbc
-@tab 1.0
-@tab Vector carryless multiplication extension.
-
-@item zvkb
-@tab 1.0
-@tab Vector cryptography bit-manipulation extension.
-
-@item zvkg
-@tab 1.0
-@tab Vector GCM/GMAC extension.
-
-@item zvkned
-@tab 1.0
-@tab Vector AES block cipher extension.
-
-@item zvknha
-@tab 1.0
-@tab Vector SHA-2 secure hash extension.
-
-@item zvknhb
-@tab 1.0
-@tab Vector SHA-2 secure hash extension.
-
-@item zvksed
-@tab 1.0
-@tab Vector SM4 Block Cipher extension.
-
-@item zvksh
-@tab 1.0
-@tab Vector SM3 Secure Hash extension.
-
-@item zvkn
-@tab 1.0
-@tab Vector NIST Algorithm Suite extension, @samp{zvkn} will expand to
-@samp{zvkned}, @samp{zvknhb}, @samp{zvkb} and @samp{zvkt}.
-
-@item zvknc
-@tab 1.0
-@tab Vector NIST Algorithm Suite with carryless multiply extension, @samp{zvknc}
-will expand to @samp{zvkn} and @samp{zvbc}.
-
-@item zvkng
-@tab 1.0
-@tab Vector NIST Algorithm Suite with GCM extension, @samp{zvkng} will expand
-to @samp{zvkn} and @samp{zvkg}.
-
-@item zvks
-@tab 1.0
-@tab Vector ShangMi algorithm suite extension, @samp{zvks} will expand
-to @samp{zvksed}, @samp{zvksh}, @samp{zvkb} and @samp{zvkt}.
-
-@item zvksc
-@tab 1.0
-@tab Vector ShangMi algorithm suite with carryless multiplication extension,
-@samp{zvksc} will expand to @samp{zvks} and @samp{zvbc}.
-
-@item zvksg
-@tab 1.0
-@tab Vector ShangMi algorithm suite with GCM extension, @samp{zvksg} will expand
-to @samp{zvks} and @samp{zvkg}.
-
-@item zvkt
-@tab 1.0
-@tab Vector data independent execution latency extension.
-
-@item zfh
-@tab 1.0
-@tab Half-precision floating-point extension.
-
-@item zfhmin
-@tab 1.0
-@tab Minimal half-precision floating-point extension.
-
-@item zvfh
-@tab 1.0
-@tab Vector half-precision floating-point extension.
-
-@item zvfhmin
-@tab 1.0
-@tab Vector minimal half-precision floating-point extension.
-
-@item zvfbfmin
-@tab 1.0
-@tab Vector BF16 converts extension.
-
-@item zfa
-@tab 1.0
-@tab Additional floating-point extension.
-
-@item zmmul
-@tab 1.0
-@tab Integer multiplication extension.
-
-@item zca
-@tab 1.0
-@tab Integer compressed instruction extension.
-
-@item zcf
-@tab 1.0
-@tab Compressed single-precision floating point loads and stores extension.
-
-@item zcd
-@tab 1.0
-@tab Compressed double-precision floating point loads and stores extension.
-
-@item zcb
-@tab 1.0
-@tab Simple compressed instruction extension.
-
-@item zce
-@tab 1.0
-@tab Compressed instruction extensions for embedded processors.
-
-@item zcmp
-@tab 1.0
-@tab Compressed push pop extension.
-
-@item zcmt
-@tab 1.0
-@tab Table jump instruction extension.
-
-@item smaia
-@tab 1.0
-@tab Advanced interrupt architecture extension.
-
-@item smepmp
-@tab 1.0
-@tab PMP Enhancements for memory access and execution prevention on Machine mode.
-
-@item smstateen
-@tab 1.0
-@tab State enable extension.
-
-@item ssaia
-@tab 1.0
-@tab Advanced interrupt architecture extension for supervisor-mode.
-
-@item sscofpmf
-@tab 1.0
-@tab Count overflow & filtering extension.
-
-@item ssstateen
-@tab 1.0
-@tab State-enable extension for supervisor-mode.
-
-@item sstc
-@tab 1.0
-@tab Supervisor-mode timer interrupts extension.
-
-@item svade
-@tab 1.0
-@tab Cause exception when hardware updating of A/D bits is disabled
-
-@item svadu
-@tab 1.0
-@tab Hardware Updating of A/D Bits extension.
-
-@item svinval
-@tab 1.0
-@tab Fine-grained address-translation cache invalidation extension.
-
-@item svnapot
-@tab 1.0
-@tab NAPOT translation contiguity extension.
-
-@item svpbmt
-@tab 1.0
-@tab Page-based memory types extension.
-
-@item xcvmac
-@tab 1.0
-@tab Core-V multiply-accumulate extension.
-
-@item xcvalu
-@tab 1.0
-@tab Core-V miscellaneous ALU extension.
-
-@item xcvelw
-@tab 1.0
-@tab Core-V event load word extension.
-
-@item xtheadba
-@tab 1.0
-@tab T-head address calculation extension.
-
-@item xtheadbb
-@tab 1.0
-@tab T-head basic bit-manipulation extension.
-
-@item xtheadbs
-@tab 1.0
-@tab T-head single-bit instructions extension.
-
-@item xtheadcmo
-@tab 1.0
-@tab T-head cache management operations extension.
-
-@item xtheadcondmov
-@tab 1.0
-@tab T-head conditional move extension.
-
-@item xtheadfmemidx
-@tab 1.0
-@tab T-head indexed memory operations for floating-point registers extension.
-
-@item xtheadfmv
-@tab 1.0
-@tab T-head double floating-point high-bit data transmission extension.
-
-@item xtheadint
-@tab 1.0
-@tab T-head acceleration interruption extension.
-
-@item xtheadmac
-@tab 1.0
-@tab T-head multiply-accumulate extension.
-
-@item xtheadmemidx
-@tab 1.0
-@tab T-head indexed memory operation extension.
-
-@item xtheadmempair
-@tab 1.0
-@tab T-head two-GPR memory operation extension.
-
-@item xtheadsync
-@tab 1.0
-@tab T-head multi-core synchronization extension.
-
-@item xventanacondops
-@tab 1.0
-@tab Ventana integer conditional operations extension.
-
-@end multitable
+@include riscv-ext.texi
When @option{-march=} is not specified, use the setting from @option{-mcpu}.
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index ae7a601..f6314af 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -2171,12 +2171,6 @@ VFP floating-point registers @code{d0}-@code{d31} and the appropriate
subset @code{d0}-@code{d15} based on command line options.
Used for 64 bit values only. Not valid for Thumb1.
-@item y
-The iWMMX co-processor registers.
-
-@item z
-The iWMMX GR registers.
-
@item G
The floating-point constant 0.0
@@ -2210,9 +2204,6 @@ A symbol in the text segment of the current file
@item Uv
A memory reference suitable for VFP load/store insns (reg+constant offset)
-@item Uy
-A memory reference suitable for iWMMXt load/store instructions.
-
@item Uq
A memory reference suitable for the ARMv4 ldrsb instruction.
@end table
diff --git a/gcc/doc/riscv-ext.texi b/gcc/doc/riscv-ext.texi
new file mode 100644
index 0000000..968654b
--- /dev/null
+++ b/gcc/doc/riscv-ext.texi
@@ -0,0 +1,637 @@
+@c Copyright (C) 2025 Free Software Foundation, Inc.
+@c This is part of the GCC manual.
+@c For copying conditions, see the file gcc/doc/include/fdl.texi.
+
+@c This file is generated automatically using
+@c gcc/config/riscv/gen-riscv-ext-texi.cc from:
+@c gcc/config/riscv/riscv-ext.def
+@c gcc/config/riscv/riscv-opts.h
+
+@c Please *DO NOT* edit manually.
+
+@multitable @columnfractions .10 .10 .80
+@headitem Extension Name @tab Supported Version @tab Description
+
+@item g
+@tab -
+@tab General-purpose computing base extension, @samp{g} will expand to
+@samp{i}, @samp{m}, @samp{a}, @samp{f}, @samp{d}, @samp{zicsr} and
+@samp{zifencei}.
+
+@item e
+@tab 2.0
+@tab Reduced base integer extension
+
+@item i
+@tab 2.0 2.1
+@tab Base integer extension
+
+@item m
+@tab 2.0
+@tab Integer multiplication and division extension
+
+@item a
+@tab 2.0 2.1
+@tab Atomic extension
+
+@item f
+@tab 2.0 2.2
+@tab Single-precision floating-point extension
+
+@item d
+@tab 2.0 2.2
+@tab Double-precision floating-point extension
+
+@item c
+@tab 2.0
+@tab Compressed extension
+
+@item b
+@tab 1.0
+@tab b extension
+
+@item v
+@tab 1.0
+@tab Vector extension
+
+@item h
+@tab 1.0
+@tab Hypervisor extension
+
+@item zic64b
+@tab 1.0
+@tab Cache block size isf 64 bytes
+
+@item zicbom
+@tab 1.0
+@tab Cache-block management extension
+
+@item zicbop
+@tab 1.0
+@tab Cache-block prefetch extension
+
+@item zicboz
+@tab 1.0
+@tab Cache-block zero extension
+
+@item ziccamoa
+@tab 1.0
+@tab Main memory supports all atomics in A
+
+@item ziccif
+@tab 1.0
+@tab Main memory supports instruction fetch with atomicity requirement
+
+@item zicclsm
+@tab 1.0
+@tab Main memory supports misaligned loads/stores
+
+@item ziccrse
+@tab 1.0
+@tab Main memory supports forward progress on LR/SC sequences
+
+@item zicfilp
+@tab 1.0
+@tab zicfilp extension
+
+@item zicfiss
+@tab 1.0
+@tab zicfiss extension
+
+@item zicntr
+@tab 2.0
+@tab Standard extension for base counters and timers
+
+@item zicond
+@tab 1.0
+@tab Integer conditional operations extension
+
+@item zicsr
+@tab 2.0
+@tab Control and status register access extension
+
+@item zifencei
+@tab 2.0
+@tab Instruction-fetch fence extension
+
+@item zihintntl
+@tab 1.0
+@tab Non-temporal locality hints extension
+
+@item zihintpause
+@tab 2.0
+@tab Pause hint extension
+
+@item zihpm
+@tab 2.0
+@tab Standard extension for hardware performance counters
+
+@item zimop
+@tab 1.0
+@tab zimop extension
+
+@item zilsd
+@tab 1.0
+@tab Load/Store pair instructions extension
+
+@item zmmul
+@tab 1.0
+@tab Integer multiplication extension
+
+@item za128rs
+@tab 1.0
+@tab Reservation set size of 128 bytes
+
+@item za64rs
+@tab 1.0
+@tab Reservation set size of 64 bytes
+
+@item zaamo
+@tab 1.0
+@tab zaamo extension
+
+@item zabha
+@tab 1.0
+@tab zabha extension
+
+@item zacas
+@tab 1.0
+@tab zacas extension
+
+@item zalrsc
+@tab 1.0
+@tab zalrsc extension
+
+@item zawrs
+@tab 1.0
+@tab Wait-on-reservation-set extension
+
+@item zama16b
+@tab 1.0
+@tab Zama16b extension, Misaligned loads, stores, and AMOs to main memory regions that do not cross a naturally aligned 16-byte boundary are atomic.
+
+@item zfa
+@tab 1.0
+@tab Additional floating-point extension
+
+@item zfbfmin
+@tab 1.0
+@tab zfbfmin extension
+
+@item zfh
+@tab 1.0
+@tab Half-precision floating-point extension
+
+@item zfhmin
+@tab 1.0
+@tab Minimal half-precision floating-point extension
+
+@item zfinx
+@tab 1.0
+@tab Single-precision floating-point in integer registers extension
+
+@item zdinx
+@tab 1.0
+@tab Double-precision floating-point in integer registers extension
+
+@item zca
+@tab 1.0
+@tab Integer compressed instruction extension
+
+@item zcb
+@tab 1.0
+@tab Simple compressed instruction extension
+
+@item zcd
+@tab 1.0
+@tab Compressed double-precision floating point loads and stores extension
+
+@item zce
+@tab 1.0
+@tab Compressed instruction extensions for embedded processors
+
+@item zcf
+@tab 1.0
+@tab Compressed single-precision floating point loads and stores extension
+
+@item zcmop
+@tab 1.0
+@tab zcmop extension
+
+@item zcmp
+@tab 1.0
+@tab Compressed push pop extension
+
+@item zcmt
+@tab 1.0
+@tab Table jump instruction extension
+
+@item zclsd
+@tab 1.0
+@tab Compressed load/store pair instructions extension
+
+@item zba
+@tab 1.0
+@tab Address calculation extension
+
+@item zbb
+@tab 1.0
+@tab Basic bit manipulation extension
+
+@item zbc
+@tab 1.0
+@tab Carry-less multiplication extension
+
+@item zbkb
+@tab 1.0
+@tab Cryptography bit-manipulation extension
+
+@item zbkc
+@tab 1.0
+@tab Cryptography carry-less multiply extension
+
+@item zbkx
+@tab 1.0
+@tab Cryptography crossbar permutation extension
+
+@item zbs
+@tab 1.0
+@tab Single-bit operation extension
+
+@item zk
+@tab 1.0
+@tab Standard scalar cryptography extension
+
+@item zkn
+@tab 1.0
+@tab NIST algorithm suite extension
+
+@item zknd
+@tab 1.0
+@tab AES Decryption extension
+
+@item zkne
+@tab 1.0
+@tab AES Encryption extension
+
+@item zknh
+@tab 1.0
+@tab Hash function extension
+
+@item zkr
+@tab 1.0
+@tab Entropy source extension
+
+@item zks
+@tab 1.0
+@tab ShangMi algorithm suite extension
+
+@item zksed
+@tab 1.0
+@tab SM4 block cipher extension
+
+@item zksh
+@tab 1.0
+@tab SM3 hash function extension
+
+@item zkt
+@tab 1.0
+@tab Data independent execution latency extension
+
+@item ztso
+@tab 1.0
+@tab Total store ordering extension
+
+@item zvbb
+@tab 1.0
+@tab Vector basic bit-manipulation extension
+
+@item zvbc
+@tab 1.0
+@tab Vector carryless multiplication extension
+
+@item zve32f
+@tab 1.0
+@tab Vector extensions for embedded processors
+
+@item zve32x
+@tab 1.0
+@tab Vector extensions for embedded processors
+
+@item zve64d
+@tab 1.0
+@tab Vector extensions for embedded processors
+
+@item zve64f
+@tab 1.0
+@tab Vector extensions for embedded processors
+
+@item zve64x
+@tab 1.0
+@tab Vector extensions for embedded processors
+
+@item zvfbfmin
+@tab 1.0
+@tab Vector BF16 converts extension
+
+@item zvfbfwma
+@tab 1.0
+@tab zvfbfwma extension
+
+@item zvfh
+@tab 1.0
+@tab Vector half-precision floating-point extension
+
+@item zvfhmin
+@tab 1.0
+@tab Vector minimal half-precision floating-point extension
+
+@item zvkb
+@tab 1.0
+@tab Vector cryptography bit-manipulation extension
+
+@item zvkg
+@tab 1.0
+@tab Vector GCM/GMAC extension
+
+@item zvkn
+@tab 1.0
+@tab Vector NIST Algorithm Suite extension, @samp{zvkn} will expand to
+
+@item zvknc
+@tab 1.0
+@tab Vector NIST Algorithm Suite with carryless multiply extension, @samp{zvknc}
+
+@item zvkned
+@tab 1.0
+@tab Vector AES block cipher extension
+
+@item zvkng
+@tab 1.0
+@tab Vector NIST Algorithm Suite with GCM extension, @samp{zvkng} will expand
+
+@item zvknha
+@tab 1.0
+@tab Vector SHA-2 secure hash extension
+
+@item zvknhb
+@tab 1.0
+@tab Vector SHA-2 secure hash extension
+
+@item zvks
+@tab 1.0
+@tab Vector ShangMi algorithm suite extension, @samp{zvks} will expand
+
+@item zvksc
+@tab 1.0
+@tab Vector ShangMi algorithm suite with carryless multiplication extension,
+
+@item zvksed
+@tab 1.0
+@tab Vector SM4 Block Cipher extension
+
+@item zvksg
+@tab 1.0
+@tab Vector ShangMi algorithm suite with GCM extension, @samp{zvksg} will expand
+
+@item zvksh
+@tab 1.0
+@tab Vector SM3 Secure Hash extension
+
+@item zvkt
+@tab 1.0
+@tab Vector data independent execution latency extension
+
+@item zvl1024b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl128b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl16384b
+@tab 1.0
+@tab zvl16384b extension
+
+@item zvl2048b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl256b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl32768b
+@tab 1.0
+@tab zvl32768b extension
+
+@item zvl32b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl4096b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl512b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl64b
+@tab 1.0
+@tab Minimum vector length standard extensions
+
+@item zvl65536b
+@tab 1.0
+@tab zvl65536b extension
+
+@item zvl8192b
+@tab 1.0
+@tab zvl8192b extension
+
+@item zhinx
+@tab 1.0
+@tab Half-precision floating-point in integer registers extension
+
+@item zhinxmin
+@tab 1.0
+@tab Minimal half-precision floating-point in integer registers extension
+
+@item sdtrig
+@tab 1.0
+@tab sdtrig extension
+
+@item smaia
+@tab 1.0
+@tab Advanced interrupt architecture extension
+
+@item smepmp
+@tab 1.0
+@tab PMP Enhancements for memory access and execution prevention on Machine mode
+
+@item smmpm
+@tab 1.0
+@tab smmpm extension
+
+@item smnpm
+@tab 1.0
+@tab smnpm extension
+
+@item smstateen
+@tab 1.0
+@tab State enable extension
+
+@item ssaia
+@tab 1.0
+@tab Advanced interrupt architecture extension for supervisor-mode
+
+@item sscofpmf
+@tab 1.0
+@tab Count overflow & filtering extension
+
+@item ssnpm
+@tab 1.0
+@tab ssnpm extension
+
+@item sspm
+@tab 1.0
+@tab sspm extension
+
+@item ssstateen
+@tab 1.0
+@tab State-enable extension for supervisor-mode
+
+@item sstc
+@tab 1.0
+@tab Supervisor-mode timer interrupts extension
+
+@item ssstrict
+@tab 1.0
+@tab ssstrict extension
+
+@item supm
+@tab 1.0
+@tab supm extension
+
+@item svinval
+@tab 1.0
+@tab Fine-grained address-translation cache invalidation extension
+
+@item svnapot
+@tab 1.0
+@tab NAPOT translation contiguity extension
+
+@item svpbmt
+@tab 1.0
+@tab Page-based memory types extension
+
+@item svvptc
+@tab 1.0
+@tab svvptc extension
+
+@item svadu
+@tab 1.0
+@tab Hardware Updating of A/D Bits extension
+
+@item svade
+@tab 1.0
+@tab Cause exception when hardware updating of A/D bits is disabled
+
+@item xcvalu
+@tab 1.0
+@tab Core-V miscellaneous ALU extension
+
+@item xcvbi
+@tab 1.0
+@tab xcvbi extension
+
+@item xcvelw
+@tab 1.0
+@tab Core-V event load word extension
+
+@item xcvmac
+@tab 1.0
+@tab Core-V multiply-accumulate extension
+
+@item xcvsimd
+@tab 1.0
+@tab xcvsimd extension
+
+@item xsfcease
+@tab 1.0
+@tab xsfcease extension
+
+@item xsfvcp
+@tab 1.0
+@tab xsfvcp extension
+
+@item xsfvfnrclipxfqf
+@tab 1.0
+@tab xsfvfnrclipxfqf extension
+
+@item xsfvqmaccdod
+@tab 1.0
+@tab xsfvqmaccdod extension
+
+@item xsfvqmaccqoq
+@tab 1.0
+@tab xsfvqmaccqoq extension
+
+@item xtheadba
+@tab 1.0
+@tab T-head address calculation extension
+
+@item xtheadbb
+@tab 1.0
+@tab T-head basic bit-manipulation extension
+
+@item xtheadbs
+@tab 1.0
+@tab T-head single-bit instructions extension
+
+@item xtheadcmo
+@tab 1.0
+@tab T-head cache management operations extension
+
+@item xtheadcondmov
+@tab 1.0
+@tab T-head conditional move extension
+
+@item xtheadfmemidx
+@tab 1.0
+@tab T-head indexed memory operations for floating-point registers extension
+
+@item xtheadfmv
+@tab 1.0
+@tab T-head double floating-point high-bit data transmission extension
+
+@item xtheadint
+@tab 1.0
+@tab T-head acceleration interruption extension
+
+@item xtheadmac
+@tab 1.0
+@tab T-head multiply-accumulate extension
+
+@item xtheadmemidx
+@tab 1.0
+@tab T-head indexed memory operation extension
+
+@item xtheadmempair
+@tab 1.0
+@tab T-head two-GPR memory operation extension
+
+@item xtheadsync
+@tab 1.0
+@tab T-head multi-core synchronization extension
+
+@item xtheadvector
+@tab 1.0
+@tab xtheadvector extension
+
+@item xventanacondops
+@tab 1.0
+@tab Ventana integer conditional operations extension
+
+@end multitable
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 65eeecc..1c718c4 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -2042,10 +2042,6 @@ ARM target uses emulated floating point operations.
ARM target supports @code{-mfpu=vfp -mfloat-abi=hard}.
Some multilibs may be incompatible with these options.
-@item arm_iwmmxt_ok
-ARM target supports @code{-mcpu=iwmmxt}.
-Some multilibs may be incompatible with this option.
-
@item arm_neon
ARM target supports generating NEON instructions.
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 7298ffc..aa6d6cb 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,28 @@
+2025-05-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/120163
+ * gfortran.h: Add formal_resolved to gfc_symbol.
+ * resolve.cc (gfc_resolve_formal_arglist): Set it.
+ (resolve_function): Do not call gfc_get_formal_from_actual_arglist
+ if we already resolved a formal arglist.
+ (resolve_call): Likewise.
+
+2025-05-10 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/102891
+ * dependency.cc (gfc_ref_needs_temporary_p): Within an array
+ reference, inquiry references of complex variables generally
+ need a temporary.
+
+2025-05-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/120193
+ * trans-types.cc (gfc_init_types): For flag_unsigned use
+ build_distinct_type_copy or build_variant_type_copy from
+ gfc_character_types[index_char] if index_char > -1 instead of
+ gfc_character_types[index_char] or
+ gfc_build_unsigned_type (&gfc_unsigned_kinds[index]).
+
2025-05-08 Harald Anlauf <anlauf@gmx.de>
PR fortran/120179
diff --git a/gcc/fortran/dependency.cc b/gcc/fortran/dependency.cc
index 57c0c49..aa8a57a 100644
--- a/gcc/fortran/dependency.cc
+++ b/gcc/fortran/dependency.cc
@@ -944,8 +944,12 @@ gfc_ref_needs_temporary_p (gfc_ref *ref)
types), not in characters. */
return subarray_p;
- case REF_COMPONENT:
case REF_INQUIRY:
+ /* Within an array reference, inquiry references of complex
+ variables generally need a temporary. */
+ return subarray_p;
+
+ case REF_COMPONENT:
break;
}
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 46310a0..4740c36 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -2028,6 +2028,9 @@ typedef struct gfc_symbol
This is legal in Fortran, but can cause problems with autogenerated
C prototypes for C23. */
unsigned ext_dummy_arglist_mismatch:1;
+ /* Set if the formal arglist has already been resolved, to avoid
+ trying to generate it again from actual arguments. */
+ unsigned formal_resolved:1;
/* Reference counter, used for memory management.
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 1e62e94..bf1aa70 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -533,7 +533,8 @@ gfc_resolve_formal_arglist (gfc_symbol *proc)
}
}
}
-
+ if (sym)
+ sym->formal_resolved = 1;
gfc_current_ns = orig_current_ns;
}
@@ -3472,7 +3473,7 @@ resolve_function (gfc_expr *expr)
&expr->where, &sym->formal_at);
}
}
- else
+ else if (!sym->formal_resolved)
{
gfc_get_formal_from_actual_arglist (sym, expr->value.function.actual);
sym->formal_at = expr->where;
@@ -4033,7 +4034,7 @@ resolve_call (gfc_code *c)
&c->loc, &csym->formal_at);
}
}
- else
+ else if (!csym->formal_resolved)
{
gfc_get_formal_from_actual_arglist (csym, c->ext.actual);
csym->formal_at = c->loc;
diff --git a/gcc/lto-streamer-out.cc b/gcc/lto-streamer-out.cc
index a055d12..86d3384 100644
--- a/gcc/lto-streamer-out.cc
+++ b/gcc/lto-streamer-out.cc
@@ -1256,7 +1256,17 @@ hash_tree (struct streamer_tree_cache_d *cache, hash_map<tree, hashval_t> *map,
if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
{
- hstate.add_hwi (DECL_MODE (t));
+ /* Similar to TYPE_MODE, avoid streaming out host-specific DECL_MODE
+ for aggregate type with offloading enabled, and while streaming-in
+ recompute appropriate DECL_MODE for accelerator. */
+ if (lto_stream_offload_p
+ && (VAR_P (t)
+ || TREE_CODE (t) == PARM_DECL
+ || TREE_CODE (t) == FIELD_DECL)
+ && AGGREGATE_TYPE_P (TREE_TYPE (t)))
+ hstate.add_hwi (VOIDmode);
+ else
+ hstate.add_hwi (DECL_MODE (t));
hstate.add_flag (DECL_NONLOCAL (t));
hstate.add_flag (DECL_VIRTUAL_P (t));
hstate.add_flag (DECL_IGNORED_P (t));
@@ -1354,7 +1364,19 @@ hash_tree (struct streamer_tree_cache_d *cache, hash_map<tree, hashval_t> *map,
if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON))
{
- hstate.add_hwi (TYPE_MODE (t));
+ /* For offloading, avoid streaming out TYPE_MODE for aggregate type since
+ it may be host-specific. For eg, aarch64 uses OImode for ARRAY_TYPE
+ whose size is 256-bits, which is not representable on accelerator.
+ Instead stream out VOIDmode, and while streaming-in, recompute
+ appropriate TYPE_MODE for accelerator. */
+ if (lto_stream_offload_p
+ && (AGGREGATE_TYPE_P (t) || VECTOR_TYPE_P (t)))
+ hstate.add_hwi (VOIDmode);
+ /* for VECTOR_TYPE, TYPE_MODE reevaluates the mode using target_flags
+ not necessary valid in a global context.
+ Use the raw value previously set by layout_type. */
+ else
+ hstate.add_hwi (TYPE_MODE_RAW (t));
/* TYPE_NO_FORCE_BLK is private to stor-layout and need
no streaming. */
hstate.add_flag (TYPE_PACKED (t));
diff --git a/gcc/match.pd b/gcc/match.pd
index ab496d9..f405068 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -3242,7 +3242,21 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM) */
(cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 INTEGER_CST@1)) integer_zerop)
integer_minus_onep (realpart @2))
- (if (types_match (type, @0) && int_fits_type_p (@1, type)))))
+ (if (types_match (type, @0) && int_fits_type_p (@1, type))))
+ (match (unsigned_integer_sat_add @0 @1)
+ /* WIDEN_SUM = (WT)X + (WT)Y
+ SAT_U_ADD = WIDEN_SUM > MAX ? MAX : (NT)WIDEN_SUM */
+ (cond^ (le (plus (convert@2 @0) (convert@3 @1)) INTEGER_CST@4)
+ (plus:c @0 @1) integer_minus_onep)
+ (if (types_match (type, @0, @1) && types_match (@2, @3))
+ (with
+ {
+ unsigned precision = TYPE_PRECISION (type);
+ unsigned widen_precision = TYPE_PRECISION (TREE_TYPE (@2));
+ wide_int max = wi::mask (precision, false, widen_precision);
+ wide_int c4 = wi::to_wide (@4);
+ }
+ (if (wi::eq_p (c4, max) && widen_precision > precision))))))
/* Saturation sub for unsigned integer. */
(if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
diff --git a/gcc/optabs.cc b/gcc/optabs.cc
index 0a14b1e..fe68a25 100644
--- a/gcc/optabs.cc
+++ b/gcc/optabs.cc
@@ -4304,9 +4304,6 @@ can_compare_p (enum rtx_code code, machine_mode mode,
&& (icode = optab_handler (cstore_optab, mode)) != CODE_FOR_nothing
&& insn_operand_matches (icode, 1, test))
return true;
- if (purpose == ccp_cmov
- && optab_handler (cmov_optab, mode) != CODE_FOR_nothing)
- return true;
mode = GET_MODE_WIDER_MODE (mode).else_void ();
PUT_MODE (test, mode);
diff --git a/gcc/optabs.def b/gcc/optabs.def
index 23f7923..0c1435d 100644
--- a/gcc/optabs.def
+++ b/gcc/optabs.def
@@ -294,7 +294,6 @@ OPTAB_D (cond_len_fnms_optab, "cond_len_fnms$a")
OPTAB_D (cond_len_neg_optab, "cond_len_neg$a")
OPTAB_D (cond_len_one_cmpl_optab, "cond_len_one_cmpl$a")
OPTAB_D (vcond_mask_len_optab, "vcond_mask_len_$a")
-OPTAB_D (cmov_optab, "cmov$a6")
OPTAB_D (cstore_optab, "cstore$a4")
OPTAB_D (ctrap_optab, "ctrap$a4")
OPTAB_D (addv4_optab, "addv$I$a4")
diff --git a/gcc/optabs.h b/gcc/optabs.h
index 23fa77b..ae525c8 100644
--- a/gcc/optabs.h
+++ b/gcc/optabs.h
@@ -244,11 +244,10 @@ extern void emit_unop_insn (enum insn_code, rtx, rtx, enum rtx_code);
extern void emit_libcall_block (rtx_insn *, rtx, rtx, rtx);
/* The various uses that a comparison can have; used by can_compare_p:
- jumps, conditional moves, store flag operations. */
+ jumps, store flag operations. */
enum can_compare_purpose
{
ccp_jump,
- ccp_cmov,
ccp_store_flag
};
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index a9ed995..cfc235c 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,7 @@
+2025-05-12 Joseph Myers <josmyers@redhat.com>
+
+ * sv.po: Update.
+
2025-04-30 Joseph Myers <josmyers@redhat.com>
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
diff --git a/gcc/po/sv.po b/gcc/po/sv.po
index 3296bed..31e5502 100644
--- a/gcc/po/sv.po
+++ b/gcc/po/sv.po
@@ -32,7 +32,7 @@ msgstr ""
"Project-Id-Version: gcc 15.1.0\n"
"Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n"
"POT-Creation-Date: 2025-04-23 19:27+0000\n"
-"PO-Revision-Date: 2025-04-28 09:09+0200\n"
+"PO-Revision-Date: 2025-05-10 14:36+0200\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@@ -75706,10 +75706,9 @@ msgid "Expected associate name at %C"
msgstr "Ett associationsnamn förväntade vid %C"
#: fortran/match.cc:1940
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Bad continuation line at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Bad bounds remapping list at %C"
-msgstr "Felaktig fortsättningsrad vid %C"
+msgstr "Felaktig litea på gränsavbildningar vid %C"
#: fortran/match.cc:1946
#, gcc-internal-format, gfc-internal-format
@@ -75747,10 +75746,9 @@ msgid "The associate name %s with an assumed rank target at %L must have a bound
msgstr "Det associerade namnet %s med ett mål med antagen ordning vid %L måste ha en lista för omavbildning av gränser (lista av nedtregräns:övregräns för varje dimension)"
#: fortran/match.cc:2018
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "The assumed-rank array at %C shall not have a codimension"
+#, gcc-internal-format, gfc-internal-format
msgid "The assumed rank target at %C must be contiguous"
-msgstr "Vektorn med antagen ordning vid %C får inte ha en co-dimension"
+msgstr "Målet med antagen ordning vid %C måste vara sammanhängande"
#: fortran/match.cc:2037
#, gcc-internal-format
@@ -75783,16 +75781,14 @@ msgid "DO CONCURRENT construct at %C"
msgstr "DO CONCURRENT-konstruktion vid %C"
#: fortran/match.cc:2826
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "selector %qs specified more than once in set %qs"
+#, gcc-internal-format, gfc-internal-format
msgid "DEFAULT (NONE) specified more than once in DO CONCURRENT at %C"
-msgstr "väljaren %qs anges mer än en gång i mängden %qs"
+msgstr "DEFAULT (NONE) anges mer än en gång i DO CONCURRENT vid %C"
#: fortran/match.cc:2915
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected structure component name at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected reduction operator or function name at %C"
-msgstr "Postkomponentnamn förväntades vid %C"
+msgstr "En reduktionsoperator eller ett funktionsnamn förväntades vid %C"
#: fortran/match.cc:2935 fortran/openmp.cc:2439 fortran/openmp.cc:2475
#: fortran/openmp.cc:2885 fortran/openmp.cc:2910
@@ -75801,28 +75797,24 @@ msgid "Expected %<:%> at %C"
msgstr "%<:%> förväntades vid %C"
#: fortran/match.cc:2945
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected variable name at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected variable name in reduction list at %C"
-msgstr "Variabelnamn förväntades vid %C"
+msgstr "Variabelnamn förväntades i reduktionslistan vid %C"
#: fortran/match.cc:2964
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected association list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected ',' or ')' in reduction list at %C"
-msgstr "Associationslista förväntades vid %C"
+msgstr "”,” eller ”)” förväntades i reduktionslistan vid %C"
#: fortran/match.cc:2970
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "PROCEDURE list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "REDUCE locality spec at %L"
-msgstr "PROCEDURE-lista vid %C"
+msgstr "REDUCE-likalitestsspecifikation vid %L"
#: fortran/match.cc:2977
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid type-spec at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Locality spec at %L"
-msgstr "Ogiltig typspecifikation vid %C"
+msgstr "Lokalitetsspecifikation vid %L"
#: fortran/match.cc:3112
#, gcc-internal-format
@@ -76920,16 +76912,14 @@ msgid "Unexpected junk at %C"
msgstr "Oväntad skräp vid %C"
#: fortran/openmp.cc:464
-#, fuzzy, gcc-internal-format
-#| msgid "%<omp_all_memory%> at %C not permitted in this clause"
+#, gcc-internal-format
msgid "%<omp_all_memory%> at %L not permitted in this clause"
-msgstr "%<omp_all_memory%> vid %C är inte tillåtet i denna klausul"
+msgstr "%<omp_all_memory%> vid %L är inte tillåtet i denna klausul"
#: fortran/openmp.cc:509
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "List item shall not be coindexed at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "List item shall not be coindexed at %L"
-msgstr "Listobjektet skall inte vara co-indexerat vid %C"
+msgstr "Listobjektet skall inte vara co-indexerat vid %L"
#: fortran/openmp.cc:535
#, gcc-internal-format
@@ -76937,10 +76927,9 @@ msgid "%qs at %L is part of the common block %</%s/%> and may only be specificed
msgstr "%qs vid %L är del av common-blocket %</%s/%> och kan endast anges implicit via det namngivna common-blocket"
#: fortran/openmp.cc:562
-#, fuzzy, gcc-internal-format
-#| msgid "COMMON block /%s/ not found at %C"
+#, gcc-internal-format
msgid "COMMON block %</%s/%> not found at %L"
-msgstr "COMMON-block /%s/ finns inte vid %C"
+msgstr "COMMON-block %</%s/%> finns inte vid %L"
#: fortran/openmp.cc:606 fortran/openmp.cc:696
#, gcc-internal-format, gfc-internal-format
@@ -76958,10 +76947,9 @@ msgid "Syntax error in OpenMP detach clause at %C"
msgstr "Syntaxfel i OpenMP-frånkopplingsklausul vid %C"
#: fortran/openmp.cc:755
-#, fuzzy, gcc-internal-format
-#| msgid "%<omp_all_memory%> used with dependence-type other than OUT or INOUT at %C"
+#, gcc-internal-format
msgid "%<omp_all_memory%> used with dependence-type other than OUT or INOUT at %L"
-msgstr "%<omp_all_memory%> använt med en annan beroendetyp än OUT eller INOUT vid %C"
+msgstr "%<omp_all_memory%> använt med en annan beroendetyp än OUT eller INOUT vid %L"
#: fortran/openmp.cc:808
#, gcc-internal-format, gfc-internal-format
@@ -76969,10 +76957,9 @@ msgid "Syntax error in OpenMP SINK dependence-type list at %C"
msgstr "Syntaxfel i OpenMP DEPEND SINK beroendetyplista vid %C"
#: fortran/openmp.cc:871
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Syntax error in OpenACC expression list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Syntax error in OpenMP expression list at %C"
-msgstr "Syntaxfel i OpenACC-uttryckslista vid %C"
+msgstr "Syntaxfel i OpenMP-uttryckslista vid %C"
#: fortran/openmp.cc:873
#, gcc-internal-format, gfc-internal-format
@@ -77040,8 +77027,7 @@ msgid "Invalid combined or composite directive at %L"
msgstr "Ogiltigt kombinerat eller sammansatt direktiv vid %L"
#: fortran/openmp.cc:1644
-#, fuzzy, gcc-internal-format
-#| msgid "Invalid %qs directive at %L in %s clause: declarative, informational and meta directives not permitted"
+#, gcc-internal-format
msgid "Invalid %qs directive at %L in %s clause: declarative, informational, and meta directives not permitted"
msgstr "Felaktigt %qs-direktiv vid %L i %s-klausul: direktiven declarative, informational och meta är inte tillåtna"
@@ -77073,52 +77059,44 @@ msgid "Unexpected %<(%> at %C"
msgstr "Oväntat %<(%> vid %C"
#: fortran/openmp.cc:1909
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<{%> at %C"
+#, gcc-internal-format
msgid "Expected %<{%> at %C"
msgstr "%<{%> förväntades vid %C"
#: fortran/openmp.cc:1919
-#, fuzzy, gcc-internal-format
-#| msgid "expected trait selector name at %C"
+#, gcc-internal-format
msgid "Duplicated %<fr%> preference-selector-name at %C"
-msgstr "trait-väljarnamn förväntades vid %C"
+msgstr "Dubblerad %<fr%>-preferensväljarnamn vid %C"
#: fortran/openmp.cc:1944 fortran/openmp.cc:2082
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "expected constant integer expression with valid sync-hint value"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected constant scalar integer expression or non-empty default-kind character literal at %L"
-msgstr "konstant heltalsuttryck med giltigt sync-hint-värde förväntades"
+msgstr "Ett konstant skalärt heltalsuttryck eller en icke-tom standardsorts teckenliteral vid %L"
#: fortran/openmp.cc:1958 fortran/openmp.cc:2095
-#, fuzzy, gcc-internal-format
-#| msgid "Unknown procedure name %qs at %C"
+#, gcc-internal-format
msgid "Unknown foreign runtime identifier %qd at %L"
-msgstr "Okänt procedurnamn %qs vid %C"
+msgstr "Okänd främmande körtidsidentifierare %qd vid %L"
#: fortran/openmp.cc:1972 fortran/openmp.cc:2107
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected character in variable list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected null character in character literal at %L"
-msgstr "Oväntat tecken i variabellista vid %C"
+msgstr "Oväntat null-tecken i teckenliteralen vid %L"
#: fortran/openmp.cc:1979 fortran/openmp.cc:2114
-#, fuzzy, gcc-internal-format
-#| msgid "Unknown procedure name %qs at %C"
+#, gcc-internal-format
msgid "Unknown foreign runtime identifier %qs at %L"
-msgstr "Okänt procedurnamn %qs vid %C"
+msgstr "Okänd främmande körtidsidentifierare %qs vid %L"
#: fortran/openmp.cc:1986 fortran/openmp.cc:7079
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<)%> at %C"
+#, gcc-internal-format
msgid "Expected %<)%> at %C"
msgstr "%<)%> förväntades vid %C"
#: fortran/openmp.cc:2002
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "expected identifier or string literal at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected default-kind character literal at %L"
-msgstr "identifierare eller strängkonstant förväntades vid %C"
+msgstr "En standardsorts teckenliteral förväntades vid %L"
#: fortran/openmp.cc:2013
#, gcc-internal-format
@@ -77126,64 +77104,54 @@ msgid "Character literal at %L must start with %<ompx_%>"
msgstr "Teckenliteralen vid %L måste börja med %<ompx_%>"
#: fortran/openmp.cc:2021
-#, fuzzy, gcc-internal-format
-#| msgid "Unexpected character in variable list at %C"
+#, gcc-internal-format
msgid "Unexpected null or %<,%> character in character literal at %L"
-msgstr "Oväntat tecken i variabellista vid %C"
+msgstr "Oväntat null eller %<,%>-tecken i teckenliteralen vid %L"
#: fortran/openmp.cc:2038
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<)%> or %<,%> at %C"
+#, gcc-internal-format
msgid "Expected %<fr(%> or %<attr(%> at %C"
-msgstr "%<)%> eller %<,%> förväntades vid %C"
+msgstr "%<fr(%> eller %<attr(%> förväntades vid %C"
#: fortran/openmp.cc:2045
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<,%> or %<)%> at %C"
+#, gcc-internal-format
msgid "Expected %<,%> or %<}%> at %C"
-msgstr "%<,%> eller %<)%> förväntades vid %C"
+msgstr "%<,%> eller %<}%> förväntades vid %C"
#: fortran/openmp.cc:2161
-#, fuzzy, gcc-internal-format
-#| msgid "Duplicate access-specifier at %C"
+#, gcc-internal-format
msgid "Duplicate %<prefer_type%> modifier at %C"
-msgstr "Dubblerad åtkomstspecifikation vid %C"
+msgstr "Dubblerad modifierare %<prefer_type%> vid %C"
#: fortran/openmp.cc:2173 fortran/openmp.cc:2209 fortran/openmp.cc:2231
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<,%> or %<)%> at %C"
+#, gcc-internal-format
msgid "Expected %<,%> or %<:%> at %C"
-msgstr "%<,%> eller %<)%> förväntades vid %C"
+msgstr "%<,%> eller %<:%> förväntades vid %C"
#: fortran/openmp.cc:2186
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<(%> after %qs at %C"
+#, gcc-internal-format
msgid "Expected %<(%> after %<prefer_type%> at %C"
-msgstr "%<(%> förväntades efter %qs vid %C"
+msgstr "%<(%> förväntades efter %<prefer_type%> vid %C"
#: fortran/openmp.cc:2194
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<match%> at %C"
+#, gcc-internal-format
msgid "Duplicate %<targetsync%> at %C"
-msgstr "%<match%> förväntades vid %C"
+msgstr "Dubblerat %<targetsync%> vid %C"
#: fortran/openmp.cc:2216
-#, fuzzy, gcc-internal-format
-#| msgid "Duplicate %s attribute at %L"
+#, gcc-internal-format
msgid "Duplicate %<target%> at %C"
-msgstr "Dubblerat %s-attribut vid %L"
+msgstr "Dubblerat %<target%> vid %C"
#: fortran/openmp.cc:2234
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<)%> or %<,%> at %C"
+#, gcc-internal-format
msgid "Expected %<prefer_type%>, %<target%>, or %<targetsync%> at %C"
-msgstr "%<)%> eller %<,%> förväntades vid %C"
+msgstr "%<prefer_type%> %<target%> eller %<targetsync%> förväntades vid %C"
#: fortran/openmp.cc:2242
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<)%> or %<,%> at %C"
+#, gcc-internal-format
msgid "Missing required %<target%> and/or %<targetsync%> modifier at %C"
-msgstr "%<)%> eller %<,%> förväntades vid %C"
+msgstr "Nödvändig modifierare %<target%> och/eller %<targetsync%> saknas vid %C"
#: fortran/openmp.cc:2295
#, gcc-internal-format
@@ -77361,10 +77329,9 @@ msgid "ORDERED clause argument not constant positive integer at %C"
msgstr "ORDERED-klausulargument är inte ett konstant positivt heltal vid %C"
#: fortran/openmp.cc:3912
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ORDERED clause argument not constant positive integer at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "PARTIAL clause argument not constant positive integer at %C"
-msgstr "ORDERED-klausulargument är inte ett konstant positivt heltal vid %C"
+msgstr "Klausulargumentet PARTIAL är inte ett konstant positivt heltal vid %C"
#: fortran/openmp.cc:4194
#, gcc-internal-format, gfc-internal-format
@@ -77715,28 +77682,24 @@ msgid "expected expression at %C"
msgstr "uttryck förväntades vid %C"
#: fortran/openmp.cc:6477
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "property must be a constant logical expression at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "property must be a logical expression at %L"
-msgstr "egenskapen måste vara ett konstant logiskt uttryck vid %C"
+msgstr "egenskapen måste vara ett logiskt uttryck vid %L"
#: fortran/openmp.cc:6481
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "property must be a constant integer expression at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "property must be an integer expression at %L"
-msgstr "egenskapen måste vara ett konstant heltalsuttryck vid %C"
+msgstr "egenskapen måste vara ett heltalsuttryck vid %L"
#: fortran/openmp.cc:6488
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "property must be a constant logical expression at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "property must be a constant logical expression at %L"
-msgstr "egenskapen måste vara ett konstant logiskt uttryck vid %C"
+msgstr "egenskapen måste vara ett konstant logiskt uttryck vid %L"
#: fortran/openmp.cc:6492
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "property must be a constant integer expression at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "property must be a constant integer expression at %L"
-msgstr "egenskapen måste vara ett konstant heltalsuttryck vid %C"
+msgstr "egenskapen måste vara ett konstant heltalsuttryck vid %L"
#: fortran/openmp.cc:6506
#, gcc-internal-format, gfc-internal-format
@@ -77784,46 +77747,39 @@ msgid "%qs clause at %L specified more than once"
msgstr "Klausulen %qs vid %L angiven mer än en gång"
#: fortran/openmp.cc:6776
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<ancestor%> or %<device_num%>"
+#, gcc-internal-format
msgid "expected %<nothing%>, %<need_device_ptr%> or %<need_device_addr%> at %C"
-msgstr "%<ancestor%> eller %<device_num%> förväntades"
+msgstr "%<nothing%>, %<need_device_ptr%> eller %<need_device_addr%> förväntades vid %C"
#: fortran/openmp.cc:6782 fortran/openmp.cc:6900 fortran/openmp.cc:7055
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<:%> at %C"
+#, gcc-internal-format
msgid "expected %<:%> at %C"
msgstr "%<:%> förväntades vid %C"
#: fortran/openmp.cc:6815
-#, fuzzy, gcc-internal-format
-#| msgid "Expected %<:%> at %C"
+#, gcc-internal-format
msgid "unexpected %<:%> at %C"
-msgstr "%<:%> förväntades vid %C"
+msgstr "Oväntat %<:%> vid %C"
#: fortran/openmp.cc:6862
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected integer expression at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "expected constant integer expression at %C"
-msgstr "Heltalsuttryck förväntades vid %C"
+msgstr "ett konstant heltalsuttryck förväntades vid %C"
#: fortran/openmp.cc:6884
-#, fuzzy, gcc-internal-format
-#| msgid "ORDERED clause argument not constant positive integer at %C"
+#, gcc-internal-format
msgid "expected dummy parameter name, %<omp_num_args%> or constant positive integer at %C"
-msgstr "ORDERED-klausulargument är inte ett konstant positivt heltal vid %C"
+msgstr "ett attrapparameternamn, %<omp_num_args%> eller konstant positivt heltal förväntades vid %C"
#: fortran/openmp.cc:6931
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<)%> at %C"
+#, gcc-internal-format
msgid "expected %<interop%> at %C"
-msgstr "%<)%> förväntades vid %C"
+msgstr "%<interop%> förväntades vid %C"
#: fortran/openmp.cc:6981
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<at%>, %<severity%> or %<message%> clause"
+#, gcc-internal-format
msgid "expected %<match%>, %<adjust_args%> or %<append_args%> at %C"
-msgstr "%<at%>-, %<severity%>- eller %<message%>-klausul förväntades"
+msgstr "%<match%>-, %<adust_args%> eller %<append_args%> förväntades vid %C"
#: fortran/openmp.cc:6987
#, gcc-internal-format
@@ -77831,10 +77787,9 @@ msgid "the %qs clause at %L can only be specified if the %<dispatch%> selector o
msgstr "klausulen %s vid %L kan endast anges om väljaren %<dispatch%> i konstruktionsväljarmängden förekommer i klausulen %<match%>"
#: fortran/openmp.cc:7027
-#, fuzzy, gcc-internal-format
-#| msgid "expected %<host%>, %<nohost%> or %<any%>"
+#, gcc-internal-format
msgid "expected %<when%>, %<otherwise%>, or %<default%> at %C"
-msgstr "%<host%>, %<nohost%> eller %<any%> förväntades"
+msgstr "%<when%>, %<otherwise%> eller %<default%> förväntades vid %C"
#: fortran/openmp.cc:7034
#, gcc-internal-format
@@ -77847,10 +77802,9 @@ msgid "%<otherwise%> or %<default%> clause must appear last in %<metadirective%>
msgstr "en klausul %<otherwise%> eller %<default%> måste ligga sist i %<metadirective%> vid %C"
#: fortran/openmp.cc:7069
-#, fuzzy, gcc-internal-format
-#| msgid "destructor priorities are not supported"
+#, gcc-internal-format
msgid "declarative directive variants are not supported"
-msgstr "destruerarprioriteter stödjs ej"
+msgstr "deklarativa direktivvarianter stödjs ej"
#: fortran/openmp.cc:7090
#, gcc-internal-format, gfc-internal-format
@@ -77858,10 +77812,9 @@ msgid "variant directive used in OMP BEGIN METADIRECTIVE at %C must have a corre
msgstr "variantdirektivet som används i OMP BEGIN METADIRECTIVE vid %C måste ha ett mostsvarande slutdirektiv"
#: fortran/openmp.cc:7124
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected junk after OMP THREADPRIVATE at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected junk after OMP METADIRECTIVE at %C"
-msgstr "Oväntat skräp efter OMP THREADPRIVATE vid %C"
+msgstr "Oväntat skräp efter OMP METADIRECTIVE vid %C"
#: fortran/openmp.cc:7183
#, gcc-internal-format, gfc-internal-format
@@ -77879,10 +77832,9 @@ msgid "Syntax error in !$OMP THREADPRIVATE list at %C"
msgstr "Syntaxfel i !$OMP THREADPRIVATE-lista vid %C"
#: fortran/openmp.cc:7326
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Program unit at %L has OpenMP device constructs/routines but does not set !$OMP REQUIRES REVERSE_OFFLOAD but other program units do"
+#, gcc-internal-format, gfc-internal-format
msgid "Program unit at %L has OpenMP device constructs/routines but does not set !$OMP REQUIRES %s but other program units do"
-msgstr "Programenheten vid %L har OpenMP device-konstruktioner/-rutiner men sätter inte !$OMP REQUIRES REVERSE_OFFLOAD men andra programenheter gör det"
+msgstr "Programenheten vid %L har OpenMP device-konstruktioner/-rutiner men sätter inte !$OMP REQUIRES %s men andra programenheter gör det"
#: fortran/openmp.cc:7369
#, gcc-internal-format
@@ -77930,10 +77882,9 @@ msgid "Clause expected at %C"
msgstr "Klausul förväntades vid %C"
#: fortran/openmp.cc:7557
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected UNIFIED_ADDRESS, UNIFIED_SHARED_MEMORY, DYNAMIC_ALLOCATORS, REVERSE_OFFLOAD, or ATOMIC_DEFAULT_MEM_ORDER clause at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected UNIFIED_ADDRESS, UNIFIED_SHARED_MEMORY, SELF_MAPS, DYNAMIC_ALLOCATORS, REVERSE_OFFLOAD, or ATOMIC_DEFAULT_MEM_ORDER clause at %L"
-msgstr "UNIFIED_ADDRESS-, UNIFIED_SHARED_MEMORY-, DYNAMIC_ALLOCATORS-, REVERSE_OFFLOAD- eller ATOMIC_DEFAULT_MEM_ORDER-klausul förväntades vid %L"
+msgstr "UNIFIED_ADDRESS-, UNIFIED_SHARED_MEMORY-, SELF_MAPS-, DYNAMIC_ALLOCATORS-, REVERSE_OFFLOAD- eller ATOMIC_DEFAULT_MEM_ORDER-klausul förväntades vid %L"
#: fortran/openmp.cc:7583
#, gcc-internal-format, gfc-internal-format
@@ -78192,8 +78143,7 @@ msgstr "ORDERED-klausulparameter är mindre än COLLAPSE vid %L"
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107122
#: fortran/openmp.cc:8623
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "ORDER clause must not be used together ORDERED at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "ORDER clause must not be used together with ORDERED at %L"
msgstr "en ORDER-klausul får inte användas tillsammans med ORDERED vid %L"
@@ -78224,16 +78174,14 @@ msgid "FINAL clause at %L requires a scalar LOGICAL expression"
msgstr "FINAL-klausul vid %L kräver ett skalärt LOGICAL-uttryck"
#: fortran/openmp.cc:8798
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "IF clause at %L requires a scalar LOGICAL expression"
+#, gcc-internal-format, gfc-internal-format
msgid "NOVARIANTS clause at %L requires a scalar LOGICAL expression"
-msgstr "IF-klausul vid %L kräver ett skalärt LOGICAL-uttryck"
+msgstr "NOVARIANTS-klausul vid %L kräver ett skalärt LOGICAL-uttryck"
#: fortran/openmp.cc:8808
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "SELF clause at %L requires a scalar LOGICAL expression"
+#, gcc-internal-format, gfc-internal-format
msgid "NOCONTEXT clause at %L requires a scalar LOGICAL expression"
-msgstr "SELF-klausulen vid %L kräver ett skalärt LOGICAL-uttryck"
+msgstr "NOCONTEXT-klausulen vid %L kräver ett skalärt LOGICAL-uttryck"
#: fortran/openmp.cc:8819
#, gcc-internal-format, gfc-internal-format
@@ -78319,16 +78267,14 @@ msgid "DEPEND clause at %L requires %<targetsync%> interop-type, lacking it for
msgstr "Klausulen DEPEND vid %L behöver interop-typen %<targetsync%>, den saknas för %qs vid %L"
#: fortran/openmp.cc:9044
-#, fuzzy, gcc-internal-format
-#| msgid "Allocator %qs at %L in USES_ALLOCATORS must be a scalar integer of kind %<omp_allocator_handle_kind%>"
+#, gcc-internal-format
msgid "%qs at %L in %qs clause must be a scalar integer variable of %<omp_interop_kind%> kind"
-msgstr "Allokeraren %qs vid %L i USES_ALLOCATORS måste vara ett skalärt heltal av ssorten %<omp_allocator_handle_kind%>"
+msgstr "%qs vid %L i klausulen %qs måste vara en skalär heltalsvariabel av sorten %<omp_interop_kind%>"
#: fortran/openmp.cc:9049
-#, fuzzy, gcc-internal-format
-#| msgid "%qs and %qs cannot both be enabled"
+#, gcc-internal-format
msgid "%qs at %L in %qs clause must be definable"
-msgstr "%qs och %qs kan inte båda aktiveras"
+msgstr "%qs vid %L i klausulen %qs måste vara definierbar"
#: fortran/openmp.cc:9088
#, gcc-internal-format
@@ -78560,7 +78506,7 @@ msgstr "Memspace %qs vid %L i USES_ALLOCATORS måste vara ett fördefinierat min
#: fortran/openmp.cc:9878
#, gcc-internal-format
msgid "Allocator %qs at %L in USES_ALLOCATORS must be a scalar integer of kind %<omp_allocator_handle_kind%>"
-msgstr "Allokeraren %qs vid %L i USES_ALLOCATORS måste vara ett skalärt heltal av ssorten %<omp_allocator_handle_kind%>"
+msgstr "Allokeraren %qs vid %L i USES_ALLOCATORS måste vara ett skalärt heltal av sorten %<omp_allocator_handle_kind%>"
#: fortran/openmp.cc:9886
#, gcc-internal-format
@@ -78614,16 +78560,14 @@ msgid "DETACH event handle %qs in %s clause at %L"
msgstr "DETACH-händelsehandtag %qs i %s-klausul vid %L"
#: fortran/openmp.cc:10016
-#, fuzzy, gcc-internal-format
-#| msgid "List item %qs with allocatable components is not permitted in map clause at %L"
+#, gcc-internal-format
msgid "Sorry, list item %qs at %L with allocatable components is not yet supported in %s clause"
-msgstr "Listposten %qs med allokerbara komponenter är inte tillåtet i map-klausulen vid %L"
+msgstr "Ledsen, listposten %qs vid %L med allokerbara komponenter stödjs inte ännu i klausulen %s"
#: fortran/openmp.cc:10022
-#, fuzzy, gcc-internal-format
-#| msgid "comparison with string literal results in unspecified behavior"
+#, gcc-internal-format
msgid "Polymorphic list item %qs at %L in %s clause has unspecified behavior and unsupported"
-msgstr "jämförelse med stränglitteral resulterar i odefinierat beteende"
+msgstr "Det polymorfa listelementet %qs vid %L i klausulen %s har i odefinierat beteende och stödjs ej"
#: fortran/openmp.cc:10054
#, gcc-internal-format, gfc-internal-format
@@ -78686,22 +78630,19 @@ msgid "DIST_SCHEDULE clause's chunk_size at %L requires a scalar INTEGER express
msgstr "DIST_SCHEDULE-klausulens chunk_size vid %L kräver ett skalärt INTEGER-uttryck"
#: fortran/openmp.cc:10349
-#, fuzzy, gcc-internal-format
-#| msgid "%<DETACH%> clause at %L must not be used together with %<MERGEABLE%> clause"
+#, gcc-internal-format
msgid "%<GRAINSIZE%> clause at %L must not be used together with %<NUM_TASKS%> clause"
-msgstr "en %<DETACH%>-klausul vid %L får inte användas tillsammans med en %<MERGEABLE%>-klausul"
+msgstr "en %<GRAINSIZE%>-klausul vid %L får inte användas tillsammans med en %<NUM_TASKS%>-klausul"
#: fortran/openmp.cc:10352
-#, fuzzy, gcc-internal-format
-#| msgid "%<DETACH%> clause at %L must not be used together with %<MERGEABLE%> clause"
+#, gcc-internal-format
msgid "%<REDUCTION%> clause at %L must not be used together with %<NOGROUP%> clause"
-msgstr "en %<DETACH%>-klausul vid %L får inte användas tillsammans med en %<MERGEABLE%>-klausul"
+msgstr "en %<REDUCTION%>-klausul vid %L får inte användas tillsammans med en %<NOGROUP%>-klausul"
#: fortran/openmp.cc:10356
-#, fuzzy, gcc-internal-format
-#| msgid "%<DETACH%> clause at %L must not be used together with %<MERGEABLE%> clause"
+#, gcc-internal-format
msgid "%<FULL%> clause at %C must not be used together with %<PARTIAL%> clause"
-msgstr "en %<DETACH%>-klausul vid %L får inte användas tillsammans med en %<MERGEABLE%>-klausul"
+msgstr "en %<FULL%>-klausul vid %C får inte användas tillsammans med en %<PARTIAL%>-klausul"
#: fortran/openmp.cc:10379
#, gcc-internal-format, gfc-internal-format
@@ -78719,10 +78660,9 @@ msgid "%s must contain at least one MAP clause at %L"
msgstr "%s måste innehålla åtminstone en MAP-klausul vid %L"
#: fortran/openmp.cc:10416
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "TILE requires constant expression at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "SIZES requires constant expression at %L"
-msgstr "TILE behöver ett konstant uttryck vid %L"
+msgstr "SIZES behöver ett konstant uttryck vid %L"
#: fortran/openmp.cc:10432
#, gcc-internal-format
@@ -78825,8 +78765,7 @@ msgid "expr in !$OMP ATOMIC COMPARE assignment var = expr must be scalar and can
msgstr "uttr i !$OMP ATOMIC COMPARE-tilldelning var = uttr måste vara skalär och får inte referera var vid %L"
#: fortran/openmp.cc:10858
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "!$OMP ATOMIC UPDATE at %L with FAIL clause requiries either the COMPARE clause or using the intrinsic MIN/MAX procedure"
+#, gcc-internal-format, gfc-internal-format
msgid "!$OMP ATOMIC UPDATE at %L with FAIL clause requires either the COMPARE clause or using the intrinsic MIN/MAX procedure"
msgstr "!$OMP ATOMIC UPDATE vid %L med en FAIL-klausul behöver antingen klausulen COMPARE eller användning av den inbyggda proceduren MIN/MAX"
@@ -78916,10 +78855,9 @@ msgid "%s cannot contain OpenMP API call in intervening code at %L"
msgstr "%s kan inte innehålla OpenMP-API-anrop i mellanliggande kod vid %L"
#: fortran/openmp.cc:12052
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "LINEAR clause modifier used on DO or SIMD construct at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "SIZES clause is required on !$OMP TILE construct at %L"
-msgstr "LINEAR-klausulmodifierare använd på DO- eller SIMD-konstruktion vid %L"
+msgstr "en klausul SIZES krävs på konstruktionen !$OMP TILE vid %L"
#: fortran/openmp.cc:12079
#, gcc-internal-format, gfc-internal-format
@@ -79038,10 +78976,9 @@ msgid "%s inner loops must be perfectly nested with REDUCTION INSCAN clause at %
msgstr "%s intre slingor måste vara perfekt nästade med en REDUCTION INSCAN-klausul vid %L"
#: fortran/openmp.cc:12284
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "%s inner loops must be perfectly nested with ORDERED clause at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "%s inner loops must be perfectly nested at %L"
-msgstr "%s inre slingor måste vara perfekt nästade med klausulen ORDERED vid %L"
+msgstr "%s inre slingor måste vara perfekt nästade vid %L"
#: fortran/openmp.cc:12538 fortran/openmp.cc:12551
#, gcc-internal-format, gfc-internal-format
@@ -79144,10 +79081,9 @@ msgid "!$OMP DECLARE SIMD should refer to containing procedure %qs at %L"
msgstr "!$OMP DECLARE SIMD skall referera till den inneslutande proceduren %qs vid %L"
#: fortran/openmp.cc:13115
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "expected constant logical expression"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected constant non-negative scalar integer offset expression at %L"
-msgstr "ett konstant logiskt uttryck förväntades"
+msgstr "Ett konstant icke-negativt skalärt heltalsavståndsuttryck förväntades vid %L"
#: fortran/openmp.cc:13118
#, gcc-internal-format
@@ -79155,10 +79091,9 @@ msgid "For range-based %<adjust_args%>, a constant positive scalar integer expre
msgstr "För intervallbaserat %<adjust_args%> krävs ett konstant positivt skalärt heltalsuttryck vid %L"
#: fortran/openmp.cc:13132
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected character in variable list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected dummy parameter name or a positive integer at %L"
-msgstr "Oväntat tecken i variabellista vid %C"
+msgstr "Ett attrapparameternamn eller ettt positivt heltal förväntades vid %L"
#: fortran/openmp.cc:13158
#, gcc-internal-format, gfc-internal-format
@@ -79301,10 +79236,9 @@ msgid "The value of n in %<-finit-character=n%> must be between 0 and 127"
msgstr "Värdet på n i %<-finit-character=n%> måste vara mellan 0 och 127"
#: fortran/options.cc:889
-#, fuzzy, gcc-internal-format
-#| msgid "command-line option %qs is valid for %s but not for %s"
+#, gcc-internal-format
msgid "command-line option %<-fno-builtin-%s%> is not valid for Fortran"
-msgstr "kommandoradsflaggan %qs är giltig för %s men inte för %s"
+msgstr "kommandoradsflaggan %<-fno-builtin-%s%> är inte giltig för Fortran"
#: fortran/parse.cc:665
#, gcc-internal-format, gfc-internal-format
@@ -79740,10 +79674,9 @@ msgstr "Namngivet DO-block vid %L kräver matchande ENDDO-namn"
#. "begin metadirective" construct, or perhaps the
#. "end metadirective" is missing entirely.
#: fortran/parse.cc:5817 fortran/parse.cc:6314
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected junk after OMP THREADPRIVATE at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected OMP END METADIRECTIVE at %C"
-msgstr "Oväntat skräp efter OMP THREADPRIVATE vid %C"
+msgstr "OMP END METADIRECTIVE förväntades vid %C"
#: fortran/parse.cc:5827 fortran/parse.cc:6330 fortran/parse.cc:6348
#, gcc-internal-format, gfc-internal-format
@@ -79796,16 +79729,14 @@ msgid "%<OMP DISPATCH%> directive must be followed by a procedure call with opti
msgstr "Direktivet %<OMP DISPATCH%> måste följas av ett proceduranrop med en möjlig tilldelning vid %C"
#: fortran/parse.cc:6416
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Duplicated NOWAIT clause on %s and %s at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Duplicated NOWAIT clause on !$OMP DISPATCH and !$OMP END DISPATCH at %C"
-msgstr "Dubblerad NOWAIT-klausul på %s och %s vid %C"
+msgstr "Dubblerad NOWAIT-klausul på !$OMP DISPATCH och !$OMP END DISPATCH vid %C"
#: fortran/parse.cc:6488
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Unexpected %s statement in WHERE block at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected %s statement in OMP METADIRECTIVE block at %C"
-msgstr "Oväntad %s-sats i WHERE-block vid %C"
+msgstr "Oväntad %s-sats i blocket OMP METADIRECTIVE vid %C"
#: fortran/parse.cc:6529
#, gcc-internal-format, gfc-internal-format
@@ -79931,10 +79862,9 @@ msgid "Integer too big for its kind at %C. This check can be disabled with the o
msgstr "Heltal för stort för sin sort vid %C. Denna kontroll kan avaktiveras med flaggan %<-fno-range-check%>"
#: fortran/primary.cc:388
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Integer kind %d at %C not available"
+#, gcc-internal-format, gfc-internal-format
msgid "Unsigned kind %d at %C not available"
-msgstr "Heltalssort %d vid %C inte tillgänglig"
+msgstr "Teckenlös sort %d vid %C inte tillgänglig"
#: fortran/primary.cc:419
#, gcc-internal-format, gfc-internal-format
@@ -80210,10 +80140,9 @@ msgid "Procedure pointer component %qs requires an argument list at %C"
msgstr "Procedurpekarkomponent %qs kräver en argumentlista vid %C"
#: fortran/primary.cc:2833
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected array subscript stride at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Unexpected array/substring ref at %C"
-msgstr "Förväntade intervall av vektorindex vid %C"
+msgstr "Oväntad vektor-/delsträngs-ref vid %C"
#: fortran/primary.cc:2855
#, gcc-internal-format, gfc-internal-format
@@ -80707,10 +80636,9 @@ msgid "The element in the structure constructor at %L, for pointer component %qs
msgstr "Elementet i postkonstrueraren vid %L, för pekarkomponent %qs, borde vara en POINTER eller en TARGET"
#: fortran/resolve.cc:1589
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Pointer assignment with vector subscript on rhs at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Pointer assignment target at %L has a vector subscript"
-msgstr "Pekartilldelning med vektorindexering på högersidan vid %L"
+msgstr "Pekartilldelningsmålet vid %L har en vektorindexering"
#: fortran/resolve.cc:1601
#, gcc-internal-format
@@ -80753,8 +80681,7 @@ msgid "The intrinsic %qs declared INTRINSIC at %L is not available in the curren
msgstr "Den inbyggda %qs deklarerad INTRINSIC vid %L är inte tillgänglig i den aktuella standardinställningen utan i %s. Använd en lämplig flagga %<-std=*%> eller aktivera %<-fall-intrinsics%> för att använda den."
#: fortran/resolve.cc:1989
-#, fuzzy, gcc-internal-format
-#| msgid "Non-RECURSIVE procedure %qs from module %qs is possibly calling itself recursively in procedure %qs. Declare it RECURSIVE or use %<-frecursive%>"
+#, gcc-internal-format
msgid "Non-RECURSIVE procedure %qs from module %qs is possibly calling itself recursively in procedure %qs. Declare it RECURSIVE or use %<-frecursive%>"
msgstr "Icke RECURSIVE procedur %qs från modulen %qs anropar kanske sig själv rekursivt i proceduren %qs. Deklarera den RECURSIVE eller använd %<-frecursive%>"
@@ -80889,10 +80816,9 @@ msgid "Function %qs at %L has no IMPLICIT type"
msgstr "Funktionen %qs vid %L har ingen IMPLICIT-typ"
#: fortran/resolve.cc:3283
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Reference to impure function %qs at %L inside a DO CONCURRENT %s"
+#, gcc-internal-format, gfc-internal-format
msgid "Reference to impure function at %L inside a DO CONCURRENT"
-msgstr "Referens till den orena funktionen %qs vid %L är inuti ett DO CONCURRENT-%s"
+msgstr "Referens till en oren funktion vid %L inuti ett DO CONCURRENT"
#: fortran/resolve.cc:3294
#, gcc-internal-format
@@ -80936,10 +80862,9 @@ msgid "Function %qs is declared CHARACTER(*) and cannot be used at %L since it i
msgstr "Funktionen %qs är deklarerad CHARACTER(*) och får inte användas vid %L eftersom det inte är ett attrappargument"
#: fortran/resolve.cc:3470
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Missing argument list in function %qs at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Different argument lists in external dummy function %s at %L and %L"
-msgstr "Argumentlista saknas i funktionen %qs vid %C"
+msgstr "Olika argumentlistor i den externa atrappfunktionen %s vid %L och %L"
#: fortran/resolve.cc:3509
#, gcc-internal-format
@@ -80972,10 +80897,9 @@ msgid "Using function %qs at %L is deprecated"
msgstr "Att använda funktionen %qs vid %L bör undvikas"
#: fortran/resolve.cc:3701
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Subroutine call to %qs in DO CONCURRENT block at %L is not PURE"
+#, gcc-internal-format, gfc-internal-format
msgid "Subroutine call at %L in a DO CONCURRENT block is not PURE"
-msgstr "Subrutinanrop till %qs i DO CONCURRENT-block vid %L är inte PURE"
+msgstr "Subrutinanrop vid %L i ett block DO CONCURRENT är inte PURE"
#: fortran/resolve.cc:3710
#, gcc-internal-format
@@ -81068,10 +80992,9 @@ msgid "BOZ literal constant at %L cannot be an operand of unary operator %qs"
msgstr "BOZ-litteralkonstanten vid %L får inte vara en operand till den unära operatorn %qs"
#: fortran/resolve.cc:4368
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "comparison of unsigned expression in %<>= 0%> is always true"
+#, gcc-internal-format, gfc-internal-format
msgid "Negation of unsigned expression at %L not permitted "
-msgstr "jämförelse med unsigned-uttryck %<>= 0%> är alltid sant"
+msgstr "Negation av ett teckenlöst uttryck vid %L är inte tillåtet "
#: fortran/resolve.cc:4389
#, gcc-internal-format
@@ -81079,52 +81002,44 @@ msgid "Operands at %L and %L cannot appear as operands of binary operator %qs"
msgstr "Operander vid %L och %L kan inte förekomma som operander av den binära operatorn %qs"
#: fortran/resolve.cc:4399
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Invalid context for NULL() pointer at %%L"
+#, gcc-internal-format, gfc-internal-format
msgid "Invalid context for NULL() pointer at %L"
-msgstr "Ogiltigt sammanhang för NULL()-pekare vid %%L"
+msgstr "Ogiltigt sammanhang för NULL()-pekare vid %L"
#: fortran/resolve.cc:4417
-#, fuzzy, gcc-internal-format
-#| msgid "Operand of unary numeric operator %%<%s%%> at %%L is %s"
+#, gcc-internal-format
msgid "Operand of unary numeric operator %qs at %L is %s"
-msgstr "Operand till unär numerisk operator %%<%s%%> vid %%L är %s"
+msgstr "Operand till unär numerisk operator %qs vid %L är %s"
#: fortran/resolve.cc:4432 fortran/resolve.cc:4466
-#, fuzzy, gcc-internal-format
-#| msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"
+#, gcc-internal-format
msgid "Operands of binary numeric operator %qs at %L are %s/%s"
-msgstr "Operander till binär numerisk operator %%<%s%%> vid %%L är %s/%s"
+msgstr "Operander till binär numerisk operator %qs vid %L är %s/%s"
#: fortran/resolve.cc:4446 fortran/resolve.cc:4635 fortran/resolve.cc:4804
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Inconsistent ranks for operator at %%L and %%L"
+#, gcc-internal-format, gfc-internal-format
msgid "Inconsistent ranks for operator at %L and %L"
-msgstr "Inkonsistenta ordningar för operator vid %%L och %%L"
+msgstr "Inkonsistenta ordningar för operator vid %L och %L"
#: fortran/resolve.cc:4458
-#, fuzzy, gcc-internal-format
-#| msgid "Unexpected derived-type entities in binary intrinsic numeric operator %%<%s%%> at %%L"
+#, gcc-internal-format
msgid "Unexpected derived-type entities in binary intrinsic numeric operator %qs at %L"
-msgstr "Oväntade entiteter av härledd typ i binär inbyggd numerisk operator %%<%s%%> vid %%L"
+msgstr "Oväntade entiteter av härledd typ i binär inbyggd numerisk operator %qs vid %L"
#: fortran/resolve.cc:4482
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Operands of string concatenation operator at %%L are %s/%s"
+#, gcc-internal-format, gfc-internal-format
msgid "Operands of string concatenation operator at %L are %s/%s"
-msgstr "Operanderna till strängkonkateneringsoperatorn vid %%L är %s/%s"
+msgstr "Operanderna till strängkonkateneringsoperatorn vid %L är %s/%s"
#: fortran/resolve.cc:4525
-#, fuzzy, gcc-internal-format
-#| msgid "Operands of logical operator %%<%s%%> at %%L are %s/%s"
+#, gcc-internal-format
msgid "Operands of logical operator %qs at %L are %s/%s"
-msgstr "Operanderna till logiska operatorn %%<%s%%> vid %%L är %s/%s"
+msgstr "Operanderna till logiska operatorn %qs vid %L är %s/%s"
#: fortran/resolve.cc:4548
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Operand of .not. operator at %%L is %s"
+#, gcc-internal-format, gfc-internal-format
msgid "Operand of .not. operator at %L is %s"
-msgstr "Operand till operatorn .not. vid %%L är %s"
+msgstr "Operand till operatorn .not. vid %L är %s"
#: fortran/resolve.cc:4563
#, gcc-internal-format, gfc-internal-format
@@ -81137,10 +81052,9 @@ msgid "BOZ literal constant near %L cannot appear as an operand of a relational
msgstr "BOZ-litteralkonstanten nära %L får inte förekomma som en operand till en relationsoperator"
#: fortran/resolve.cc:4643
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Inconsistent ranks for operator at %%L and %%L"
+#, gcc-internal-format, gfc-internal-format
msgid "Inconsistent types for operator at %L and %L: %s and %s"
-msgstr "Inkonsistenta ordningar för operator vid %%L och %%L"
+msgstr "Inkonsistenta typer för operatorn vid %L och %L: %s och %s"
#: fortran/resolve.cc:4667
#, gcc-internal-format, gfc-internal-format
@@ -81153,40 +81067,34 @@ msgid "Inequality comparison for %s at %L"
msgstr "Olikhetsjämförelse av %s vid %L"
#: fortran/resolve.cc:4682
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Logicals at %%L must be compared with %s instead of %s"
+#, gcc-internal-format, gfc-internal-format
msgid "Logicals at %L must be compared with %s instead of %s"
-msgstr "Logiska vid %%L måste jämföras med %s istället för %s"
+msgstr "Logiska vid %L måste jämföras med %s istället för %s"
#: fortran/resolve.cc:4690
-#, fuzzy, gcc-internal-format
-#| msgid "Operands of comparison operator %%<%s%%> at %%L are %s/%s"
+#, gcc-internal-format
msgid "Operands of comparison operator %qs at %L are %s/%s"
-msgstr "Operanderna till jämförelseoperatorn %%<%s%%> vid %%L är %s/%s"
+msgstr "Operanderna till jämförelseoperatorn %qs vid %L är %s/%s"
#: fortran/resolve.cc:4705
-#, fuzzy, gcc-internal-format
-#| msgid "Unknown operator %%<%s%%> at %%L; did you mean %%<%s%%>?"
+#, gcc-internal-format
msgid "Unknown operator %qs at %L; did you mean %qs?"
-msgstr "Okänd operator %%<%s%%> vid %%L; menade du %%<%s%%>?"
+msgstr "Okänd operator %qs vid %L; menade du %qs?"
#: fortran/resolve.cc:4708
-#, fuzzy, gcc-internal-format
-#| msgid "Unknown operator %%<%s%%> at %%L"
+#, gcc-internal-format
msgid "Unknown operator %qs at %L"
-msgstr "Okänd operator %%<%s%%> vid %%L"
+msgstr "Okänd operator %qs vid %L"
#: fortran/resolve.cc:4713
-#, fuzzy, gcc-internal-format
-#| msgid "Operand of user operator %%<%s%%> at %%L is %s"
+#, gcc-internal-format
msgid "Operand of user operator %qs at %L is %s"
-msgstr "Operanderna till användaroperatorn %%<%s%%> vid %%L är %s"
+msgstr "Operanderna till användaroperatorn %qs vid %L är %s"
#: fortran/resolve.cc:4720
-#, fuzzy, gcc-internal-format
-#| msgid "Operands of user operator %%<%s%%> at %%L are %s/%s"
+#, gcc-internal-format
msgid "Operands of user operator %qs at %L are %s/%s"
-msgstr "Operanderna till användaroperatorn %%<%s%%> vid %%L är %s/%s"
+msgstr "Operanderna till användaroperatorn %qs vid %L är %s/%s"
#: fortran/resolve.cc:4734
#, gcc-internal-format
@@ -81194,10 +81102,9 @@ msgid "resolve_operator(): Bad intrinsic"
msgstr "resolve_operator(): Felaktig inbyggd"
#: fortran/resolve.cc:4832
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Inconsistent ranks for operator at %%L and %%L"
+#, gcc-internal-format, gfc-internal-format
msgid "Inconsistent coranks for operator at %L and %L"
-msgstr "Inkonsistenta ordningar för operator vid %%L och %%L"
+msgstr "Inkonsistenta co-ordningar för operator vid %L och %L"
#: fortran/resolve.cc:5031
#, gcc-internal-format, gfc-internal-format
@@ -81315,45 +81222,39 @@ msgid "Array index at %L is an array of rank %d"
msgstr "Vektorindex vid %L är en vektor med ordning %d"
#: fortran/resolve.cc:5506
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Argument dim at %L must be scalar"
+#, gcc-internal-format, gfc-internal-format
msgid "TEAM_NUMBER argument at %L must be scalar"
-msgstr "Dim-argumentet vid %L måste vara skalärt"
+msgstr "Argumentet till TEAM_NUMBER vid %L måste vara skalärt"
#: fortran/resolve.cc:5513
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expression at %L must be of INTEGER type, found %s"
+#, gcc-internal-format, gfc-internal-format
msgid "TEAM_NUMBER argument at %L must be of INTEGER type, found %s"
-msgstr "Uttryck vid %L måste vara av INTEGER-typ, hittade %s"
+msgstr "Argumentet till TEAM_NUMBER vid %L måste vara av INTEGER-typ, hittade %s"
#: fortran/resolve.cc:5527
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Argument dim at %L must be scalar"
+#, gcc-internal-format, gfc-internal-format
msgid "TEAM argument at %L must be scalar"
-msgstr "Dim-argumentet vid %L måste vara skalärt"
+msgstr "Argumentet till TEAM vid %L måste vara skalärt"
#: fortran/resolve.cc:5536
#, gcc-internal-format, gfc-internal-format
msgid "TEAM argument at %L must be of TEAM_TYPE from the intrinsic module ISO_FORTRAN_ENV, found %s"
-msgstr "Artument till TEAM vid %L master vara av TEAM_TYPE från den inbyggda modulen ISO_FORTRAN_ENV, fick %s"
+msgstr "Argumentet till TEAM vid %L måste vara av TEAM_TYPE från den inbyggda modulen ISO_FORTRAN_ENV, hittade %s"
#: fortran/resolve.cc:5550
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Argument dim at %L must be scalar"
+#, gcc-internal-format, gfc-internal-format
msgid "STAT argument at %L must be scalar"
-msgstr "Dim-argumentet vid %L måste vara skalärt"
+msgstr "Argumentet till STAT vid %L måste vara skalärt"
#: fortran/resolve.cc:5557
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expression at %L must be of INTEGER type, found %s"
+#, gcc-internal-format, gfc-internal-format
msgid "STAT argument at %L must be of INTEGER type, found %s"
-msgstr "Uttryck vid %L måste vara av INTEGER-typ, hittade %s"
+msgstr "Argumentet till STAT vid %L måste vara av INTEGER-typ, hittade %s"
#: fortran/resolve.cc:5566
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expression at %L must be scalar"
+#, gcc-internal-format, gfc-internal-format
msgid "STAT's expression at %L must be a variable"
-msgstr "Uttryck vid %L måste vara skalärt"
+msgstr "STATs uttryck vid %L måste vara en variabel"
#: fortran/resolve.cc:5588
#, gcc-internal-format, gfc-internal-format
@@ -81406,10 +81307,9 @@ msgid "gfc_expression_rank(): Two array specs"
msgstr "gfc_expression_rank(): Två vektorspecifikationer"
#: fortran/resolve.cc:6048
-#, fuzzy, gcc-internal-format
-#| msgid "illegal operand "
+#, gcc-internal-format
msgid "Illegal coarray index"
-msgstr "ogiltig operand "
+msgstr "Otillåtet co-vektorindex"
#: fortran/resolve.cc:6096
#, gcc-internal-format, gfc-internal-format
@@ -81591,22 +81491,19 @@ msgid "Variable %qs at %L not specified in a locality spec of DO CONCURRENT at %
msgstr "Variabeln %qs vid %L inte angiven i en lokalitetsspecifikation av DO CONCURRENT vid %L men behövs på grund av DEFAULT (NONE)"
#: fortran/resolve.cc:8235
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected variable name at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected variable name in %s locality spec at %L"
-msgstr "Variabelnamn förväntades vid %C"
+msgstr "Variabelnamn förväntades i %s lokalitetsspecifikation vid %L"
#: fortran/resolve.cc:8244
-#, fuzzy, gcc-internal-format
-#| msgid "Variable %qs at %L has not been assigned a format label"
+#, gcc-internal-format
msgid "Variable %qs at %L has already been specified in a locality-spec"
-msgstr "Variabeln %qs vid %L har inte tilldelats en formatetikett"
+msgstr "Variabeln %qs vid %L har redan angivits i en lokalitetsspecifikation"
#: fortran/resolve.cc:8254
-#, fuzzy, gcc-internal-format
-#| msgid "SAVE attribute at %L cannot be specified in a PURE procedure"
+#, gcc-internal-format
msgid "Index variable %qs at %L cannot be specified in a locality-spec"
-msgstr "SAVE-attribut vid %L kan inte anges i en PURE-procedur"
+msgstr "Indexvariabeln %qs vid %L kan inte anges i en lokalitetsspecifikation"
#: fortran/resolve.cc:8267
#, gcc-internal-format
@@ -81614,16 +81511,14 @@ msgid "OPTIONAL attribute not permitted for %qs in %s locality-spec at %L"
msgstr "Attributet OPTIONAL är inte tillåtet för %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8274
-#, fuzzy, gcc-internal-format
-#| msgid "Assumed size array %qs in %s clause at %L"
+#, gcc-internal-format
msgid "Assumed-size array not permitted for %qs in %s locality-spec at %L"
-msgstr "Vektor %qs med antagen storlek i %s-klausul vid %L"
+msgstr "En vektor med antagen storlek är inte tillåten till %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8287
-#, fuzzy, gcc-internal-format
-#| msgid "ALLOCATABLE object %qs in %s clause at %L"
+#, gcc-internal-format
msgid "ALLOCATABLE attribute not permitted for %qs in %s locality-spec at %L"
-msgstr "ALLOCATABLE-objekt %qs i %s-klausul vid %L"
+msgstr "Attributet ALLOCATABLE är inte tillåtet till %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8292
#, gcc-internal-format
@@ -81631,10 +81526,9 @@ msgid "Nonpointer polymorphic dummy argument not permitted for %qs in %s localit
msgstr "Polymorft attrappargument som inte är en pekare är inte tillåtet för %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8297
-#, fuzzy, gcc-internal-format
-#| msgid "Cray pointer %qs in %s clause at %L"
+#, gcc-internal-format
msgid "Coarray not permitted for %qs in %s locality-spec at %L"
-msgstr "Cray-pekare %qs i %s-klausul vid %L"
+msgstr "En co-vektor är inte tillåten till %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8303
#, gcc-internal-format
@@ -81642,10 +81536,9 @@ msgid "Finalizable type not permitted for %qs in %s locality-spec at %L"
msgstr "en finalize:bar typ är inte tillåten för %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8308
-#, fuzzy, gcc-internal-format
-#| msgid "List item %qs with allocatable components is not permitted in map clause at %L"
+#, gcc-internal-format
msgid "Type with ultimate allocatable component not permitted for %qs in %s locality-spec at %L"
-msgstr "Listposten %qs med allokerbara komponenter är inte tillåtet i map-klausulen vid %L"
+msgstr "Typen med en ytterst allokerbar komponent är inte är inte tillåten till %qs i lokalitetsspecifikationen %s vid %L"
#: fortran/resolve.cc:8316
#, gcc-internal-format
@@ -81658,16 +81551,14 @@ msgid "VOLATILE attribute not permitted for %qs in REDUCE locality-spec at %L"
msgstr "Attributet VOLATILE är inte tillåtet för %qs i lokalitetsspecifikationen REDUCE vid %L"
#: fortran/resolve.cc:8374
-#, fuzzy, gcc-internal-format
-#| msgid "Unexpected intrinsic type %qs at %L"
+#, gcc-internal-format
msgid "Expected numeric type for %qs in REDUCE at %L, got %s"
-msgstr "Oväntad inbyggd typ %qs vid %L"
+msgstr "En numerisk typ förväntades till %qs i REDUCE vid %L, fick %s"
#: fortran/resolve.cc:8383
-#, fuzzy, gcc-internal-format
-#| msgid "Expected block name of %qs in %s statement at %L"
+#, gcc-internal-format
msgid "Expected logical type for %qs in REDUCE at %L, got %qs"
-msgstr "Blocknamn på %qs i %s-sats förväntades vid %L"
+msgstr "En logiskt typ förväntades till %qs i REDUCE vid %L, fick %s"
#: fortran/resolve.cc:8401
#, gcc-internal-format
@@ -81680,10 +81571,9 @@ msgid "Expected integer type for %qs in REDUCE with IAND/IOR/IEOR at %L, got %s"
msgstr "En heltalstyp förväntades för %qs i REDUCE med IAND/IOR/IEOR vid %L, fick %s"
#: fortran/resolve.cc:8448
-#, fuzzy, gcc-internal-format
-#| msgid "variable %qD set but not used"
+#, gcc-internal-format
msgid "Variable %qs in locality-spec at %L is not used"
-msgstr "variabeln %qD sätts men används inte"
+msgstr "Variabeln %qs i lokalitetsspecifikationen vid %L används inte"
#: fortran/resolve.cc:8479
#, gcc-internal-format, gfc-internal-format
@@ -81736,10 +81626,9 @@ msgid "Source-expr at %L and allocate-object at %L must have the same shape"
msgstr "Källuttryck vid %L och allokeringsobjekt vid %L måste ha samma form"
#: fortran/resolve.cc:8943
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Only intrinsic operators can be used in expression at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "The intrinsic NULL cannot be used as source-expr at %L"
-msgstr "Endast inbyggda operatorer kan användas i uttryck vid %L"
+msgstr "Den inbyggda NULL kan inte användas som källuttryck vid %L"
#: fortran/resolve.cc:8951
#, gcc-internal-format, gfc-internal-format
@@ -82216,10 +82105,9 @@ msgid "Variable in the ordinary assignment at %L is a procedure pointer componen
msgstr "Variabeln i den ordinära tilldelningen vid %L är en procedurpekarkomponent"
#: fortran/resolve.cc:12319
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Cannot convert %s to %s at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Cannot assign %s to %s at %L"
-msgstr "Kan inte konvertera %s till %s vid %L"
+msgstr "Kan inte tilldela %s till %s vid %L"
#: fortran/resolve.cc:12367
#, gcc-internal-format
@@ -82425,10 +82313,9 @@ msgid "Entity %qs at %L has a deferred type parameter and requires either the PO
msgstr "Enheten %qs vid %L har en fördröjd typparameter och kräver antingen attributet POINTER eller ALLOCATABLE"
#: fortran/resolve.cc:14579
-#, fuzzy, gcc-internal-format
-#| msgid "CLASS variable %qs at %L cannot have the PARAMETER attribute"
+#, gcc-internal-format
msgid "Automatic object %qs at %L cannot have the SAVE attribute"
-msgstr "CLASS-variabeln %qs vid %L får inte ha attributet PARAMETER"
+msgstr "Det automatiska objektet %qs vid %L får inte ha attributet SAVE"
#. F08:C541. The shape of an array defined in a main program or module
#. * needs to be constant.
@@ -83138,10 +83025,9 @@ msgid "Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy
msgstr "Variabeln %qs vid %L är en co-vektor och är inte ALLOCATABLE, SAVE eller ett attrappargument"
#: fortran/resolve.cc:17799
-#, fuzzy, gcc-internal-format
-#| msgid "Coarray variable %qs at %L shall not have codimensions with deferred shape"
+#, gcc-internal-format
msgid "Coarray variable %qs at %L shall not have codimensions with deferred shape without allocatable"
-msgstr "Co-vektorvariabeln %qs vid %L skall inte ha co-dimensioner med fördröjd form"
+msgstr "Co-vektorvariabeln %qs vid %L skall inte ha co-dimensioner med fördröjd form utan allokerbarhet"
#: fortran/resolve.cc:17807
#, gcc-internal-format
@@ -83326,10 +83212,9 @@ msgid "Non-CHARACTER object %qs in default CHARACTER EQUIVALENCE statement at %L
msgstr "Icke-CHARACTER-objektet %qs i standard-CHARACTER EQUIVALENCE-satsen vid %L"
#: fortran/resolve.cc:18938
-#, fuzzy, gcc-internal-format
-#| msgid "Syntax error in EQUIVALENCE statement at %L"
+#, gcc-internal-format
msgid "Non-NUMERIC object %qs in default NUMERIC EQUIVALENCE statement at %L"
-msgstr "Syntaxfel i EQUIVALENCE-sats vid %L"
+msgstr "Ett icke-numeriskt objektet %qs i satsen NUMERIC EQUIVALENCE vid %L"
#: fortran/resolve.cc:18956
#, gcc-internal-format
@@ -83422,10 +83307,9 @@ msgid "!$OMP at %C starts a commented line as it neither is followed by a space
msgstr "!$OMP vid %C inleder en kommentarrad eftersom det varken följs av en blank eller en fortsättningsrad"
#: fortran/scanner.cc:1011
-#, fuzzy, gcc-internal-format
-#| msgid "Ignoring '!$omx' vendor-extension sentinel at %C"
+#, gcc-internal-format
msgid "Ignoring %<!$omx%> vendor-extension sentinel at %C"
-msgstr "Ignorerar leverantörsutvidgningens vaktpost ”!$omx” vid %C"
+msgstr "Ignorerar leverantörsutvidgningens vaktpost %<!$omx%> vid %C"
#: fortran/scanner.cc:1323 fortran/scanner.cc:1526
#, gcc-internal-format, gfc-internal-format
@@ -84027,10 +83911,9 @@ msgid "SAVE attribute at %L cannot be specified in a PURE procedure"
msgstr "SAVE-attribut vid %L kan inte anges i en PURE-procedur"
#: fortran/symbol.cc:1323
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Duplicate SAVE attribute specified at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Duplicate SAVE attribute specified near %C"
-msgstr "Dubblerat SAVE-attribut angivet vid %L"
+msgstr "Dubblerat SAVE-attribut angivet nära %C"
#: fortran/symbol.cc:1327
#, gcc-internal-format, gfc-internal-format
@@ -84234,10 +84117,9 @@ msgid "Derived type %qs declared at %L must have the BIND attribute to be C inte
msgstr "Härledd typ %qs deklarerad vid %L måste ha attributet BIND för att vara ett C-interoperativ"
#: fortran/symbol.cc:4640
-#, fuzzy, gcc-internal-format
-#| msgid "Derived type %qs with BIND(C) attribute at %L is empty, and may be inaccessible by the C companion processor"
+#, gcc-internal-format
msgid "Derived type %qs with BIND(C) attribute at %L has no components"
-msgstr "Härledd typ %qs med attributet BIND(C) vid %L är tom, och kan vara otillgängliga av C-följeslagarprocessorn"
+msgstr "Den härledda typen %qs med attributet BIND(C) vid %L har inga komponenter"
#. Generally emit warning, but not twice if -pedantic is given.
#: fortran/symbol.cc:4646
@@ -84306,10 +84188,9 @@ msgid "Overlapping unequal initializers in EQUIVALENCE at %C"
msgstr "Överlappande olika initierare i EQUIVALENCE vid %C"
#: fortran/trans-array.cc:2466 fortran/trans-expr.cc:10439
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "The structure constructor at %C has been finalized. This feature was removed by f08/0011. Use -std=f2018 or -std=gnu to eliminate the finalization."
+#, gcc-internal-format, gfc-internal-format
msgid "The structure constructor at %L has been finalized. This feature was removed by f08/0011. Use -std=f2018 or -std=gnu to eliminate the finalization."
-msgstr "Postkonstrueraren vid %C har avslutats. Denna funktion togs bart av f08/0011. Använd -std=f2018 eller -std=gnu för att eliminera avslutningen."
+msgstr "Postkonstrueraren vid %L har avslutats. Denna funktion togs bart av f08/0011. Använd -std=f2018 eller -std=gnu för att eliminera avslutningen."
#. Problems occur when we get something like
#. integer :: a(lots) = (/(i, i=1, lots)/)
@@ -84505,16 +84386,14 @@ msgid "Sorry, !$ACC DECLARE at %L is not allowed in BLOCK construct"
msgstr "Ledsen, !$ACC DECLARE vid %L är inte tillåtet i BLOCK-konstruktion"
#: fortran/trans-decl.cc:7199 fortran/trans-expr.cc:6117
-#, fuzzy, gcc-internal-format
-#| msgid "Builtin not implemented"
+#, gcc-internal-format
msgid "Unsigned not yet implemented"
-msgstr "Inbyggd inte implementerad"
+msgstr "Teckenlöst är inte implementerat ännu"
#: fortran/trans-decl.cc:8317
-#, fuzzy, gcc-internal-format
-#| msgid "Symbol %qs at %C is already in a COMMON block"
+#, gcc-internal-format
msgid "Symbol %qs at %L is declared in a BLOCK DATA program unit but is not in a COMMON block"
-msgstr "Symbolen %qs vid %C är redan i ett COMMON-block"
+msgstr "Symbolen %qs vid %L är deklarerad i en programenhet BLOCK DATA men är inte i ett COMMON-block"
#: fortran/trans-expr.cc:1211
#, gcc-internal-format, gfc-internal-format
@@ -84593,16 +84472,14 @@ msgid "implicit mapping of assumed size array %qD"
msgstr "implicit avbildning av vektorn %qD med antagen storlek"
#: fortran/trans-openmp.cc:2149
-#, fuzzy, gcc-internal-format
-#| msgid "comparison with string literal results in unspecified behavior"
+#, gcc-internal-format
msgid "Mapping of unlimited polymorphic list item %qD is unspecified behavior and unsupported"
-msgstr "jämförelse med stränglitteral resulterar i odefinierat beteende"
+msgstr "Avbildning av den obegränsade polymorfa listposten %qD är odefinierat beteende och stödjs ej"
#: fortran/trans-openmp.cc:2154
-#, fuzzy, gcc-internal-format
-#| msgid "comparison with string literal results in unspecified behavior"
+#, gcc-internal-format
msgid "Mapping of polymorphic list item %qD is unspecified behavior"
-msgstr "jämförelse med stränglitteral resulterar i odefinierat beteende"
+msgstr "Avbildningen av den polymorfa listposten %qD är odefinierat beteende"
#: fortran/trans-openmp.cc:4176
#, gcc-internal-format
@@ -84655,10 +84532,9 @@ msgid "gfc_trans_omp_workshare(): Bad statement code"
msgstr "gfc_trans_omp_workshare(): Felaktig satskod"
#: fortran/trans-openmp.cc:9631
-#, fuzzy, gcc-internal-format
-#| msgid "The base name for 'declare variant' must be specified at %L "
+#, gcc-internal-format
msgid "The base name for %<declare variant%> must be specified at %L"
-msgstr "Basnamnet för ”declare variant” måste anges vid %L"
+msgstr "Basnamnet för %<declare variant%> måste anges vid %L"
#: fortran/trans-openmp.cc:9642
#, gcc-internal-format, gfc-internal-format
@@ -84726,58 +84602,49 @@ msgid "the %qs clause can only be specified if the %<dispatch%> selector of the
msgstr "klausulen %qs kan endast anges om väljaren %<dispatch%> i konstruktionsväljarmängden förekommer i klausulen %<match%> vid %L"
#: fortran/trans-openmp.cc:9912 fortran/trans-openmp.cc:9951
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Expected argument list at %C"
+#, gcc-internal-format, gfc-internal-format
msgid "Expected positive argument index at %L"
-msgstr "Argumentlista förväntades vid %C"
+msgstr "Ett positivt argumentindex förväntades vid %L"
#: fortran/trans-openmp.cc:9923
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "attribute %qs positional argument %i value %wi exceeds number of function arguments %u"
+#, gcc-internal-format, gfc-internal-format
msgid "Argument index at %L exceeds number of arguments %d"
-msgstr "värdet %3$wi på argument %2$i till attributet %1$qs överskrider antalet funktionsargument %4$u"
+msgstr "Argumentindexet vid %L överskrider antalet argument %d"
#: fortran/trans-openmp.cc:9961
-#, fuzzy, gcc-internal-format, gfc-internal-format
-#| msgid "Upper cobound is less than lower cobound at %L"
+#, gcc-internal-format, gfc-internal-format
msgid "Upper argument index smaller than lower one at %L"
-msgstr "Övre cobound är mindre än den lägre cobound vid %L"
+msgstr "Det övre argumentindexet är mindre än det lägre vid %L"
#: fortran/trans-openmp.cc:9987
-#, fuzzy, gcc-internal-format
-#| msgid "Variable %qs is not a dummy argument at %L"
+#, gcc-internal-format
msgid "List item %qs at %L, declared at %L, is not a dummy argument"
-msgstr "Variabeln %qs är inte ett attrappargument vid %L"
+msgstr "Listposten %qs vid %L, deklarerad vid %L, är inte ett attrappargument"
#: fortran/trans-openmp.cc:10001
-#, fuzzy, gcc-internal-format
-#| msgid "List item %qs in %s clause at %L must be of TYPE(C_PTR)"
+#, gcc-internal-format
msgid "Argument %qs at %L to list item in %<need_device_ptr%> at %L must be a scalar of TYPE(C_PTR)"
-msgstr "Listposten %qs i %s-klausul vid %L måste vara TYPE(C_PTR)"
+msgstr "Argumentet %qs vid %L till listposten i %<need_device_ptr%> vid %L måste vara en skalär av TYPE(C_PTR)"
#: fortran/trans-openmp.cc:10008
-#, fuzzy, gcc-internal-format
-#| msgid "%qs is not valid for %qs"
+#, gcc-internal-format
msgid "Consider using %<need_device_addr%> instead"
-msgstr "%qs är inte giltigt för %qs"
+msgstr "Överväg att använda %<need_device_addr%> istället"
#: fortran/trans-openmp.cc:10015
-#, fuzzy, gcc-internal-format
-#| msgid "Argument %qs of elemental procedure at %L cannot have the ALLOCATABLE attribute"
+#, gcc-internal-format
msgid "Argument %qs at %L to list item in %<need_device_addr%> at %L must not have the VALUE attribute"
-msgstr "Argumentet %qs av elementär procedur vid %L får inte ha attributet ALLOCATABLE"
+msgstr "Argumentet %qs vid %L till listposten i %<need_device_addr%> vid %L får inte ha attributet VALUE"
#: fortran/trans-openmp.cc:10024
-#, fuzzy, gcc-internal-format
-#| msgid "%qs clause at %L specified more than once"
+#, gcc-internal-format
msgid "%qs at %L is specified more than once"
-msgstr "Klausulen %qs vid %L angiven mer än en gång"
+msgstr "%qs vid %L anges mer än en gång"
#: fortran/trans-openmp.cc:10041
-#, fuzzy, gcc-internal-format
-#| msgid "%qs is not valid for %qs"
+#, gcc-internal-format
msgid "%<need_device_addr%> not yet supported"
-msgstr "%qs är inte giltigt för %qs"
+msgstr "%<need_device_addr%> stödjs inte ännu"
#: fortran/trans-stmt.cc:576
#, gcc-internal-format, gfc-internal-format
@@ -84800,17 +84667,15 @@ msgid "gfc_trans_select(): Bad type for case expr."
msgstr "gfc_trans_select(): Felaktig typ för Bad type for case-uttryck."
#: fortran/trans-stmt.cc:5170
-#, fuzzy, gcc-internal-format
-#| msgid "Sorry, the event component of derived type at %L is not yet supported"
+#, gcc-internal-format
msgid "Sorry, %s specifier at %L for assumed-size array %qs is not yet supported"
-msgstr "Ledsen, händelsekomponenten hos härledd typ vid %L stödjs inte ännu"
+msgstr "Ledsen, specificeraren %s vid %L för vektorn %qs med antagen storlek stödjs inte ännu"
#. Cf. PR fortran/
#: fortran/trans-stmt.cc:5207
-#, fuzzy, gcc-internal-format
-#| msgid "Sorry, the event component of derived type at %L is not yet supported"
+#, gcc-internal-format
msgid "Sorry, LOCAL specifier at %L for %qs of derived type with default initializer is not yet supported"
-msgstr "Ledsen, händelsekomponenten hos härledd typ vid %L stödjs inte ännu"
+msgstr "Ledsen, specificeraren LOCAL vid %L för %qs av härledd typp med standardinitierare stödjs inte ännu"
#: fortran/trans-types.cc:619
#, gcc-internal-format
@@ -84974,16 +84839,14 @@ msgid "unexpected EOF"
msgstr "oväntat filslut"
#: go/gofrontend/expressions.cc:985
-#, fuzzy, gcc-internal-format
-#| msgid "invalid use of %qD"
+#, gcc-internal-format
msgid "invalid use of type"
-msgstr "ogiltig användning av %qD"
+msgstr "ogiltig användning av typen"
#: go/gofrontend/statements.cc:2670
-#, fuzzy, gcc-internal-format
-#| msgid "expected expression"
+#, gcc-internal-format
msgid "expected call expression"
-msgstr "uttryck förväntades"
+msgstr "ett anropsuttryck förväntades"
#: lto/lto-common.cc:2041
#, gcc-internal-format
@@ -86483,10 +86346,9 @@ msgid "label definition in %<constexpr%> function only available with %<-std=c++
msgstr "en etikettdefinition i en %<constexpr%>-funktion är endast tillgängligt med %<-std=c++2b%> eller %<-std=gnu++2b%>"
#: rust/backend/rust-tree.cc:616
-#, fuzzy, gcc-internal-format
-#| msgid "ignoring return value of %qD, that must be used: %<%s%>"
+#, gcc-internal-format
msgid "ignoring return value of %qD, that must be used: %qs"
-msgstr "ignorerar returvärdet av %qD, som måste användas: %<%s%>"
+msgstr "ignorerar returvärdet av %qD, som måste användas: %qs"
#: rust/backend/rust-tree.cc:617
#, gcc-internal-format
@@ -86494,10 +86356,9 @@ msgid "ignoring return value of %qD, that must be used"
msgstr "ignorerar returvärdet av %qD, som måste användas"
#: rust/backend/rust-tree.cc:633
-#, fuzzy, gcc-internal-format
-#| msgid "ignoring returned value of type %qT, that must be used: %<%s%>"
+#, gcc-internal-format
msgid "ignoring returned value of type %qT, that must be used: %qs"
-msgstr "ignorerar returnerat värde av typen %qT, som måste användas: %<%s%>"
+msgstr "ignorerar returnerat värde av typen %qT, som måste användas: %qs"
#: rust/backend/rust-tree.cc:634
#, gcc-internal-format
@@ -86514,1163 +86375,3 @@ msgstr "oanvänt namn %qE"
#, gcc-internal-format, gfc-internal-format
msgid "are you trying to break %s? how dare you?"
msgstr "försöker du göra sönder %s? hur vågar du?"
-
-#, gcc-internal-format
-#~ msgid "%qF requires arch15 or higher"
-#~ msgstr "%qF behöver arch15 eller högre"
-
-#, gcc-internal-format
-#~ msgid "%qs matching variant requires arch15 or higher"
-#~ msgstr "%qs-matchning kräver arch15 eller högre"
-
-#, gcc-internal-format
-#~ msgid "Builtin %qF requires arch15 or higher"
-#~ msgstr "Inbyggd %qF kräver arch15 eller högre"
-
-#, gcc-internal-format
-#~ msgid "use of %<this%> in a constant expression"
-#~ msgstr "%<this%> används i ett konstant uttryck"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "FIRSTPRIVATE with polymorphic list item at %L is unspecified behavior"
-#~ msgstr "FIRSTPRIVATE med ett polymorft listelement vid %L är ett ospecificerat beteeende"
-
-#, gcc-internal-format
-#~ msgid "Sorry, LOCAL and LOCAL_INIT are not yet supported for %<do concurrent%> constructs at %L"
-#~ msgstr "Ledsen, LOCAL och LOCAL_INIT stödjs inte ännu för konstruktioner %<do concurrent%> vid %L"
-
-#, fuzzy, gcc-internal-format
-#~| msgid "comparison with string literal results in unspecified behavior"
-#~ msgid "Implicit mapping of polymorphic variable %qD is unspecified behavior"
-#~ msgstr "jämförelse med stränglitteral resulterar i odefinierat beteende"
-
-#, no-c-format
-#~ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1 built-in functions and code generation."
-#~ msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX10.1-funktioner och -kodgenerering."
-
-#, no-c-format
-#~ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX10.1 and AVX10.2 built-in functions and code generation."
-#~ msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX10.1- och AVX10.2-funktioner och -kodgenerering."
-
-#, gcc-internal-format
-#~ msgid "%<-mesa%> is deprecated and support for ESA/390 will be removed; use %<-mzarch%> instead"
-#~ msgstr "%<-mesa%> bör undvikas och stöd för ESA/390 kommer tas bort; anvnd %<-march%> istället"
-
-#, gcc-internal-format
-#~ msgid "%<append_args%> clause not yet supported for %qD, except when specifying all %d objects in the %<interop%> clause of the %<dispatch%> directive"
-#~ msgstr "%<append_args%>-klausulen stödjs inte ännu för %qD, utom när alla %d objekt specificeras i %<interop%>-klausulen till %<dispatch%>-direktivet"
-
-#, gcc-internal-format
-#~ msgid "required by %<dispatch%> construct"
-#~ msgstr "krävs av konstruktionen %<dispatch%>"
-
-#, gcc-internal-format
-#~ msgid "%<#pragma omp interop%> not yet supported"
-#~ msgstr "%<#pragma omp interop%> stödjs inte ännu"
-
-#, gcc-internal-format
-#~ msgid "%<init%> clause with modifier other than %<prefer_type%>, %<target%> or %<targetsync%>"
-#~ msgstr "en klausul %<init%> med en annan modifierare än %<prefer_type%>, %<target%> eller %<targetsync%>"
-
-#, c-format
-#~ msgid "bad I/O address 0x"
-#~ msgstr "felaktig I/O-adress 0x"
-
-#, gcc-internal-format
-#~ msgid "late or dynamic variant resolution required for call in a %<dispatch%> construct"
-#~ msgstr "sen eller dynamisk variantupplösning krävs för anrop i en %<dispatch%>-konstruktion"
-
-#, gcc-internal-format
-#~ msgid "unexpected %<interop%> clause as invoked procedure %qD is not variant substituted"
-#~ msgstr "oväntad %<interop%>-klausul eftersom den anropade proceduren %qD inte är variantsubtituerad"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "TEAM= attribute in %C misplaced"
-#~ msgstr "attributet TEAM= i %C är felplacerat"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "STAT= attribute in %C misplaced"
-#~ msgstr "attributet STAT= i %C är felplacerat"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "Sorry, not yet able to call a non-pure/non-elemental function %s in a coarray reference; use a temporary for the function's result instead"
-#~ msgstr "Ledsen, kan inte ännu anropa en icke-ren/icke-elementär funktion %s i en co-vektor-referens; använd en temporär till funktionsresultatet istället"
-
-#~ msgid "You need a C startup file for -msys-crt0="
-#~ msgstr "Du behöver en C-uppstartsfil för -msys-crt0="
-
-#, no-c-format
-#~ msgid "Enable certain features present in the Concepts TS."
-#~ msgstr "Aktivera vissa funktioner som finns i Concepts TS."
-
-#, no-c-format
-#~ msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete support)."
-#~ msgstr "Följ standardutkastet ISO 2023 C++ (experimentellt och ofullständigt stöd)."
-
-#, no-c-format
-#~ msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) (experimental and incomplete support)."
-#~ msgstr "Följ standardutkastet ISO 2023 C (förväntas publiceras under 2024) (experimentellt och ofullständigt stöd)."
-
-#, no-c-format
-#~ msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental and incomplete support)."
-#~ msgstr "Följ standardutkastet ISO 2023 C++ med GNU-utökningar (experimentellt och ofullständigt stöd)."
-
-#, no-c-format
-#~ msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) with GNU extensions (experimental and incomplete support)."
-#~ msgstr "Följ standardutkastet ISO 2023 C (förväntas publiceras under 2024) med GNU-utökningar (experimentellt och ofullständigt stöd)."
-
-#, no-c-format
-#~ msgid "When generating -fpic code, allow the use of PLTs. Ignored for fno-pic."
-#~ msgstr "Vid generering av -fpic-kod, tillåt användningen av PLT:er. Ignoreras för fno-pic."
-
-#, no-c-format
-#~ msgid "Use LRA instead of reload."
-#~ msgstr "Använd LRA istället för omladdning."
-
-#, no-c-format
-#~ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation."
-#~ msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512PF-funktioner och -kodgenerering."
-
-#, no-c-format
-#~ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation."
-#~ msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F- och AVX512ER-funktioner och -kodgenerering."
-
-#, no-c-format
-#~ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and AVX5124FMAPS built-in functions and code generation."
-#~ msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX512F- och AVX5124FMAPS-funktioner och -kodgenerering."
-
-#, no-c-format
-#~ msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and AVX5124VNNIW built-in functions and code generation."
-#~ msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2-, AVX512F- och AVX5124VNNIW-funktioner och -kodgenerering."
-
-#, no-c-format
-#~ msgid "Support PREFETCHWT1 built-in functions and code generation."
-#~ msgstr "Stöd inbyggda PREFETCHWT1-funktioner och -kodgenerering."
-
-#, no-c-format
-#~ msgid "Link with a limited version of the C library."
-#~ msgstr "Länka med en begränsad version av C-biblioteket."
-
-#, no-c-format
-#~ msgid "Name of system library to link against."
-#~ msgstr "Namn på systembiblioteket att länka mot."
-
-#, no-c-format
-#~ msgid "Name of the startfile."
-#~ msgstr "Namn på startfilen."
-
-#, no-c-format
-#~ msgid "Link with HAL BSP."
-#~ msgstr "Länka med HAL BSP."
-
-#, no-c-format
-#~ msgid "Enable DIV, DIVU."
-#~ msgstr "Aktivera DIV, DIVU."
-
-#, no-c-format
-#~ msgid "Enable MUL instructions."
-#~ msgstr "Använd MUL-instruktioner."
-
-#, no-c-format
-#~ msgid "Enable MULX instructions, assume fast shifter."
-#~ msgstr "Använd MULX-instruktioner, anta snabb skiftare."
-
-#, no-c-format
-#~ msgid "Use table based fast divide (default at -O3)."
-#~ msgstr "Använd tabellbaserad snabb division (standard för -O3)."
-
-#, no-c-format
-#~ msgid "All memory accesses use I/O load/store instructions."
-#~ msgstr "Alla minnesåtkomster använder I/O ladda-/lagrainstruktioner."
-
-#, no-c-format
-#~ msgid "Volatile memory accesses use I/O load/store instructions."
-#~ msgstr "Volatila minnesåtkomster använder I/O ladda-/lagrainstruktioner."
-
-#, no-c-format
-#~ msgid "Volatile memory accesses do not use I/O load/store instructions."
-#~ msgstr "Volatila minnesåtkomster använder inte I/O ladda-/lagrainstruktioner."
-
-#, no-c-format
-#~ msgid "Enable/disable GP-relative addressing."
-#~ msgstr "Aktivera/avaktivera GP-relativ adressering."
-
-#, no-c-format
-#~ msgid "Valid options for GP-relative addressing (for -mgpopt):"
-#~ msgstr "Giltiga flaggor för GP-relativ adressering (för -mgpopt):"
-
-#, no-c-format
-#~ msgid "Equivalent to -mgpopt=none."
-#~ msgstr "Ekvivalent med -mgpopt=none."
-
-#, no-c-format
-#~ msgid "Floating point custom instruction configuration name."
-#~ msgstr "Namn på anpassad instruktionskonfiguration för flyttal."
-
-#, no-c-format
-#~ msgid "Do not use the ftruncds custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen ftruncds."
-
-#, no-c-format
-#~ msgid "Integer id (N) of ftruncds custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion ftruncds."
-
-#, no-c-format
-#~ msgid "Do not use the fextsd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fextsd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fextsd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fextsd."
-
-#, no-c-format
-#~ msgid "Do not use the fixdu custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fixdu."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fixdu custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fixdu."
-
-#, no-c-format
-#~ msgid "Do not use the fixdi custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fixdi."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fixdi custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fixdi."
-
-#, no-c-format
-#~ msgid "Do not use the fixsu custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fixsu."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fixsu custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fixsu."
-
-#, no-c-format
-#~ msgid "Do not use the fixsi custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fixsi."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fixsi custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fixsi."
-
-#, no-c-format
-#~ msgid "Do not use the floatud custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen floatud."
-
-#, no-c-format
-#~ msgid "Integer id (N) of floatud custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion floatud."
-
-#, no-c-format
-#~ msgid "Do not use the floatid custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen floatid."
-
-#, no-c-format
-#~ msgid "Integer id (N) of floatid custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion floatid."
-
-#, no-c-format
-#~ msgid "Do not use the floatus custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen floatus."
-
-#, no-c-format
-#~ msgid "Integer id (N) of floatus custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion floatus."
-
-#, no-c-format
-#~ msgid "Do not use the floatis custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen floatis."
-
-#, no-c-format
-#~ msgid "Integer id (N) of floatis custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion floatis."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpned custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpned."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpned custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpned."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpeqd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpeqd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpeqd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpeqd."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpged custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpged."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpged custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpged."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpgtd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpgtd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpgtd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpgtd."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpled custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpled."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpled custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpled."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpltd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpltd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpltd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpltd."
-
-#, no-c-format
-#~ msgid "Do not use the flogd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen flogd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of flogd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion flogd."
-
-#, no-c-format
-#~ msgid "Do not use the fexpd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fexpd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fexpd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fexpd."
-
-#, no-c-format
-#~ msgid "Do not use the fatand custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fatand."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fatand custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fatand."
-
-#, no-c-format
-#~ msgid "Do not use the ftand custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen ftand."
-
-#, no-c-format
-#~ msgid "Integer id (N) of ftand custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion ftand."
-
-#, no-c-format
-#~ msgid "Do not use the fsind custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fsind."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fsind custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fsind."
-
-#, no-c-format
-#~ msgid "Do not use the fcosd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcosd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcosd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcosd."
-
-#, no-c-format
-#~ msgid "Do not use the fsqrtd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fsqrtd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fsqrtd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fsqrtd."
-
-#, no-c-format
-#~ msgid "Do not use the fabsd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fabsd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fabsd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fabsd."
-
-#, no-c-format
-#~ msgid "Do not use the fnegd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fnegd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fnegd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fnegd."
-
-#, no-c-format
-#~ msgid "Do not use the fmaxd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fmaxd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fmaxd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fmaxd."
-
-#, no-c-format
-#~ msgid "Do not use the fmind custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fmind."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fmind custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fmind."
-
-#, no-c-format
-#~ msgid "Do not use the fdivd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fdivd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fdivd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fdivd."
-
-#, no-c-format
-#~ msgid "Do not use the fmuld custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fmuld."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fmuld custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fmuld."
-
-#, no-c-format
-#~ msgid "Do not use the fsubd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fsubd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fsubd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fsubd."
-
-#, no-c-format
-#~ msgid "Do not use the faddd custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen faddd."
-
-#, no-c-format
-#~ msgid "Integer id (N) of faddd custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion faddd."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpnes custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpnes."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpnes custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpnes."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpeqs custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpeqs."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpeqs custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpeqs."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpges custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpges."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpges custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpges."
-
-#, no-c-format
-#~ msgid "Do not use the fcmpgts custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmpgts."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmpgts custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmpgts."
-
-#, no-c-format
-#~ msgid "Do not use the fcmples custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmples."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmples custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmples."
-
-#, no-c-format
-#~ msgid "Do not use the fcmplts custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcmplts."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcmplts custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcmplts."
-
-#, no-c-format
-#~ msgid "Do not use the flogs custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen flogs."
-
-#, no-c-format
-#~ msgid "Integer id (N) of flogs custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion flogs."
-
-#, no-c-format
-#~ msgid "Do not use the fexps custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fexps."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fexps custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fexps."
-
-#, no-c-format
-#~ msgid "Do not use the fatans custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fatans."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fatans custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fatans."
-
-#, no-c-format
-#~ msgid "Do not use the ftans custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen ftans."
-
-#, no-c-format
-#~ msgid "Integer id (N) of ftans custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion ftans."
-
-#, no-c-format
-#~ msgid "Do not use the fsins custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fsins."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fsins custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fsins."
-
-#, no-c-format
-#~ msgid "Do not use the fcoss custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fcoss."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fcoss custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fcoss."
-
-#, no-c-format
-#~ msgid "Do not use the fsqrts custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fsqrts."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fsqrts custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fsqrts."
-
-#, no-c-format
-#~ msgid "Do not use the fabss custom instr."
-#~ msgstr "Använd inte den anpassade instruktionen fabss."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fabss custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fabss."
-
-#, no-c-format
-#~ msgid "Do not use the fnegs custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fnegs."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fnegs custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fnegs."
-
-#, no-c-format
-#~ msgid "Do not use the fmaxs custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fmaxs."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fmaxs custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fmaxs."
-
-#, no-c-format
-#~ msgid "Do not use the fmins custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fmins."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fmins custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fmins."
-
-#, no-c-format
-#~ msgid "Do not use the fdivs custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fdivs."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fdivs custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fdivs."
-
-#, no-c-format
-#~ msgid "Do not use the fmuls custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fmuls."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fmuls custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fmuls."
-
-#, no-c-format
-#~ msgid "Do not use the fsubs custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fsubs."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fsubs custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fsubs."
-
-#, no-c-format
-#~ msgid "Do not use the fadds custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fadds."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fadds custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fadds."
-
-#, no-c-format
-#~ msgid "Do not use the frdy custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen frdy."
-
-#, no-c-format
-#~ msgid "Integer id (N) of frdy custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion frdy."
-
-#, no-c-format
-#~ msgid "Do not use the frdxhi custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen frdxhi."
-
-#, no-c-format
-#~ msgid "Integer id (N) of frdxhi custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion frdxhi."
-
-#, no-c-format
-#~ msgid "Do not use the frdxlo custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen frdxlo."
-
-#, no-c-format
-#~ msgid "Integer id (N) of frdxlo custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion frdxlo."
-
-#, no-c-format
-#~ msgid "Do not use the fwry custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fwry."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fwry custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fwry."
-
-#, no-c-format
-#~ msgid "Do not use the fwrx custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen fwrx."
-
-#, no-c-format
-#~ msgid "Integer id (N) of fwrx custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion fwrx."
-
-#, no-c-format
-#~ msgid "Do not use the round custom instruction."
-#~ msgstr "Använd inte den anpassade instruktionen round."
-
-#, no-c-format
-#~ msgid "Integer id (N) of round custom instruction."
-#~ msgstr "Heltals-id (N) för anpassad instruktion round."
-
-#, no-c-format
-#~ msgid "Valid Nios II ISA levels (for -march):"
-#~ msgstr "Giltiga Nios II ISA-nivåer (för -march):"
-
-#, no-c-format
-#~ msgid "Enable generation of R2 BMX instructions."
-#~ msgstr "Aktivera generering av R2 BMX-instruktioner."
-
-#, no-c-format
-#~ msgid "Enable generation of R2 CDX instructions."
-#~ msgstr "Använd generering av R2 CDX-instruktioner."
-
-#, no-c-format
-#~ msgid "Regular expression matching additional GP-addressible section names."
-#~ msgstr "Reguljärt uttryck som matchar ytterligare GP-adresserbara sektionsnamn."
-
-#, no-c-format
-#~ msgid "Regular expression matching section names for r0-relative addressing."
-#~ msgstr "Reguljärt uttryck som matchar sektionsnamn för r0-relativ adressering."
-
-#, no-c-format
-#~ msgid "Target DFLOAT double precision code."
-#~ msgstr "Sikta på DFLOAT-dubbelprecisionskod."
-
-#, no-c-format
-#~ msgid "Improve GCC's ability to track column numbers in large source files, at the expense of slower compilation."
-#~ msgstr "Förbättra GCC:s förmåga att följa kolumnnummer i stora källkodsfiler, på bekostnad av långsammare kompilering."
-
-#~ msgid "bad address, not an I/O address:"
-#~ msgstr "felaktig adress, inte en I/O-adress:"
-
-#~ msgid "candidate:"
-#~ msgstr "kandidat:"
-
-#~ msgid "%r%s:%d:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
-#~ msgstr "%r%s:%d:%d:%R [ hoppar över %d instansieringskontexter, använd -ftemplate-backtrace-limit=0 för att avaktivera ]\n"
-
-#~ msgid "%r%s:%d:%d:%R in %<constexpr%> expansion of %qs"
-#~ msgstr "%r%s:%d:%d:%R i expansion av %<constexpr%> i %qs"
-
-#, gcc-internal-format
-#~ msgid "AVX512PF support will be removed in GCC 15"
-#~ msgstr "stöd för AVX512PF kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "AVX512ER support will be removed in GCC 15"
-#~ msgstr "stöd för AVX512ER kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "AVX5124FMAPS support will be removed in GCC 15"
-#~ msgstr "stöd för AVX5124FMAPS kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "AVX5124VNNIW support will be removed in GCC 15"
-#~ msgstr "stöd för AVX5124VNNIW kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "PREFETCHWT1 support will be removed in GCC 15"
-#~ msgstr "stöd för PREFETCHWT1 kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<or%> of unmatched not-equal tests is always 1"
-#~ msgstr "%<or%> mellan omatchade olikhetstester är alltid 1"
-
-#, gcc-internal-format
-#~ msgid "%<and%> of mutually exclusive equal-tests is always 0"
-#~ msgstr "%<and%> mellan ömsesidigt uteslutande likhetstester är alltid 0"
-
-#, gcc-internal-format
-#~ msgid "%+qD causes a section type conflict"
-#~ msgstr "%+qD orsakar en sektionstypkonflikt"
-
-#, gcc-internal-format
-#~ msgid "section type conflict"
-#~ msgstr "sektionstypskonflikt"
-
-#, gcc-internal-format
-#~ msgid "%s %<%s%.*s%> expects argument of type %<%T%s%>, but argument %d has type %qT"
-#~ msgstr "%s %<%s%.*s%> förväntar sig argument av typen %<%T%s%>, men argument %d har typen %qT"
-
-#, gcc-internal-format
-#~ msgid "%s %<%s%.*s%> expects a matching %<%T%s%> argument"
-#~ msgstr "%s %<%s%.*s%> förväntar sig ett matchande %<%T%s%>-argument"
-
-#, gcc-internal-format
-#~ msgid "adding %<-flarge-source-files%> will allow for more column-tracking support, at the expense of compilation time and memory"
-#~ msgstr "att lägga till %<-flarge-source-files%> kommer tillåta mer kolumnspårningstöd, på bekostnad av kompileringstid och minne"
-
-#, gcc-internal-format
-#~ msgid "%<-fconcepts-ts%> is deprecated and will be removed in GCC 15; please convert your code to C++20 concepts"
-#~ msgstr "%<-fconcepts-ts%> undanbedes och kommer tas bort i GCC 15; konvertera din kod till C++20-koncept"
-
-#, gcc-internal-format
-#~ msgid "previously declared as %s with bound %<%s%>"
-#~ msgstr "tidigare deklaration som %s med gränsen %<%s%>"
-
-#, gcc-internal-format
-#~ msgid "bad value %<%s%> for %<-mtls-size=%> switch"
-#~ msgstr "felaktigt värde %<%s%> till flaggan %<-mtls-size=%>"
-
-#, gcc-internal-format
-#~ msgid "invalid argument %<%s%> for %<%s%>"
-#~ msgstr "ogiltigt argument %<%s%> till %<%s%>"
-
-#, gcc-internal-format
-#~ msgid "nested function trampolines not supported on GCN5 due to non-executable stacks"
-#~ msgstr "nästade funktionstrampoliner stödjs inte på GCN5 på grund av icke exekverbar stack"
-
-#, gcc-internal-format
-#~ msgid "cannot open intermediate gcn obj file"
-#~ msgstr "kan inte öppna intermediär gcn-obj-fil"
-
-#, gcc-internal-format
-#~ msgid "the forth argument must be scale 1, 2, 4, 8"
-#~ msgstr "det fjärde argumentet ha skala 1, 2, 4, 8"
-
-#, gcc-internal-format
-#~ msgid "incorrect hint operand"
-#~ msgstr "felaktig tipsoperand"
-
-#, gcc-internal-format
-#~ msgid "%<-mtune=knl%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<-mtune=knl%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<target(\"tune=knl\")%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<target(\"tune=knl\")%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<-mtune=knm%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<-mtune=knm%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<target(\"tune=knm\")%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<target(\"tune=knm\")%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<-march=knl%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<-march=knl%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<target(\"arch=knl\")%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<target(\"arch=knl\")%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<-march=knm%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<-march=knm%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<target(\"arch=knm\")%> support will be removed in GCC 15"
-#~ msgstr "stödet för %<target(\"arch=knm\")%> kommer tas bort i GCC 15"
-
-#, gcc-internal-format
-#~ msgid "%<-mfpxx%> requires %<-mlra%>"
-#~ msgstr "%<-mfpxx%> kräver %<-mlra%>"
-
-#, gcc-internal-format
-#~ msgid "Unknown form for stack limit expression"
-#~ msgstr "Okänd form på stackgränsuttryck"
-
-#, gcc-internal-format
-#~ msgid "switch %<-mcustom-%s%> is required for double-precision floating-point"
-#~ msgstr "flaggan %<-mcustom-%s%> behövs för dubbel precisions flyttal"
-
-#, gcc-internal-format
-#~ msgid "conflicting use of %<-mcustom%> switches, target attributes, and/or %<__builtin_custom_%> functions"
-#~ msgstr "motstridig användning av %<-mcustom%>-flaggor, målattribut, och/eller %<__builtin_custom_%>-funktioner"
-
-#, gcc-internal-format
-#~ msgid "ignoring unrecognized switch %<-mcustom-fpu-cfg%> value %<%s%>"
-#~ msgstr "ignorerar okänt värde %<%s%> till flaggan %<-mcustom-fpu-cfg%>"
-
-#, gcc-internal-format
-#~ msgid "switch %<-mcustom-%s%> value %d must be between 0 and 255"
-#~ msgstr "värdet %2$d till flaggan %<-mcustom-%1$s%> måste vara mellan 0 och 255"
-
-#, gcc-internal-format
-#~ msgid "position-independent code requires the Linux ABI"
-#~ msgstr "positionsoberoende kod behöver Linux-ABI:et"
-
-#, gcc-internal-format
-#~ msgid "PIC support for %<-fstack-limit-symbol%>"
-#~ msgstr "PIC-stöd för %<-fstack-limit-symbol%>"
-
-#, gcc-internal-format
-#~ msgid "%<-mgpopt%> not supported with PIC"
-#~ msgstr "%<-mgpopt%> stödjs inte med PIC"
-
-#, gcc-internal-format
-#~ msgid "%<-mgprel-sec=%> not supported with PIC"
-#~ msgstr "%<-mgprel-sec=%> stödjs inte med PIC"
-
-#, gcc-internal-format
-#~ msgid "%<-mr0rel-sec=%> not supported with PIC"
-#~ msgstr "%<-mr0rel-sec=%> stödjs inte med PIC"
-
-#, gcc-internal-format
-#~ msgid "%<-mgprel-sec=%> argument is not a valid regular expression"
-#~ msgstr "argumentet till %<-mgprel-sec=%> är inte ett giltigt reguljärt uttryck"
-
-#, gcc-internal-format
-#~ msgid "%<-mr0rel-sec=%> argument is not a valid regular expression"
-#~ msgstr "argumentet till %<-mr0rel-sec=%> är inte ett giltigt reguljärt uttryck"
-
-#, gcc-internal-format
-#~ msgid "BMX instructions are only supported with R2 architecture"
-#~ msgstr "BMX-instruktioner stödjs endast med R2-arkitekturen"
-
-#, gcc-internal-format
-#~ msgid "CDX instructions are only supported with R2 architecture"
-#~ msgstr "CDX-instruktioner stödjs endast med R2-arkitekturer"
-
-#, gcc-internal-format
-#~ msgid "R2 architecture is little-endian only"
-#~ msgstr "R2-arkitekturen har endast omvänd byteordning"
-
-#, gcc-internal-format
-#~ msgid "cannot call %<__builtin_custom_%s%> without specifying switch %<-mcustom-%s%>"
-#~ msgstr "det går inte att anropa %<__builtin_custom_%s%> utan att ange flaggan %<-mcustom-%s%>"
-
-#, gcc-internal-format
-#~ msgid "custom instruction opcode must be a compile-time constant in the range 0-255 for %<__builtin_custom_%s%>"
-#~ msgstr "anpassade instruktions-opkoder måste vara kompileringstillfälleskonstanter i intervallet 0-255 för %<__builtin_custom_%s%>"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "control register number must be in range 0-31 for %s"
-#~ msgstr "styrregisternummer måste vara i intervallet 0-31 för %s"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "register number must be in range 0-31 for %s"
-#~ msgstr "registernummer måste vara i intervallet 0-31 för %s"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "immediate value must fit into a %d-bit integer for %s"
-#~ msgstr "ett omedelbart värde måste passa i ett %d-bitars heltal för %s"
-
-#, gcc-internal-format
-#~ msgid "the ENI instruction operand must be either 0 or 1"
-#~ msgstr "operanden till instruktionen ENI måste vara antingen 0 eller 1"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "built-in function %s requires Nios II R%d"
-#~ msgstr "den inbyggda funktionen %s behöver Nios II R%d"
-
-#, gcc-internal-format
-#~ msgid "switch %<-mcustom-%s%> conflicts with switch %<-mcustom-%s%>"
-#~ msgstr "flaggan %<-mcustom-%s%> står i konflikt med flaggan %<-mcustom-%s%>"
-
-#, gcc-internal-format
-#~ msgid "call to %<__builtin_custom_%s%> conflicts with switch %<-mcustom-%s%>"
-#~ msgstr "anrop till %<__builtin_custom_%s%> står i konflikt med flaggan %<-mcustom-%s%>"
-
-#, gcc-internal-format
-#~ msgid "%<custom-fpu-cfg%> option does not support %<no-%>"
-#~ msgstr "flaggan %<custom-fpu-cfg%> stödjer inte %<no-%>"
-
-#, gcc-internal-format
-#~ msgid "%<custom-fpu-cfg%> option requires configuration argument"
-#~ msgstr "flaggan %<custom-fpu-cfg%> behöver konfigurationsargument"
-
-#, gcc-internal-format
-#~ msgid "%<no-custom-%s%> does not accept arguments"
-#~ msgstr "%<no-custom-%s%> tar inte argument"
-
-#, gcc-internal-format
-#~ msgid "%<custom-%s=%> requires argument"
-#~ msgstr "%<custom-%s=%> behöver argument"
-
-#, gcc-internal-format
-#~ msgid "%<custom-%s=%> argument should be a non-negative integer"
-#~ msgstr "argumentet till %<custom-%s=%> skall vara ett ickenegativt heltal"
-
-#, gcc-internal-format
-#~ msgid "%<custom-%s=%> is not recognized as FPU instruction"
-#~ msgstr "%<custom-%s=%> är inte känt som en FPU-instruktion"
-
-#, gcc-internal-format
-#~ msgid "invalid custom instruction option %qs"
-#~ msgstr "ogiltig flagga för anpassad instruktion %qs"
-
-#, gcc-internal-format
-#~ msgid "parameter %u (%q+D) has void type"
-#~ msgstr "parameter %u (%q+D) har void-typ"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "parameter %u has void type"
-#~ msgstr "parameter %u har void-typ"
-
-#, gcc-internal-format
-#~ msgid "%<_Generic%> association has function type"
-#~ msgstr "%<_Generic%>-association har funktionstyp"
-
-#, gcc-internal-format
-#~ msgid "%<#pragma omp allocate%> for static variables like %qD not yet supported"
-#~ msgstr "%<#pragma omp allocate%> för statiska variabler som %qD stödjs inte ännu"
-
-#, gcc-internal-format
-#~ msgid "expected %<match%>"
-#~ msgstr "%<match%> förväntades"
-
-#, gcc-internal-format
-#~ msgid "%qs attribute cannot be applied to a function that does not take variable arguments"
-#~ msgstr "attributet %qs kan användas på en funktion som inte tar variabla argument"
-
-#, gcc-internal-format
-#~ msgid " passing %qT as %<this%> argument discards qualifiers"
-#~ msgstr " att skicka %qT som %<this%>-argument kastar kvalificerare"
-
-#, gcc-internal-format
-#~ msgid "the temporary was destroyed at the end of the full expression %qE"
-#~ msgstr "den temporära destruerades vid slutet av det fullständiga uttrycket %qE"
-
-#, gcc-internal-format
-#~ msgid "cast from %qT is not allowed in a constant expression because %qE does not point to an object"
-#~ msgstr "typkonvertering från %qT är inte tillåtet i ett konstant uttryck eftersom %qE inte pekar på ett objekt"
-
-#, gcc-internal-format
-#~ msgid "unexpected template-id %qE"
-#~ msgstr "oväntat mall-id %qE"
-
-#, gcc-internal-format
-#~ msgid "function concept must be called"
-#~ msgstr "funktionskoncept måste anropas"
-
-#, gcc-internal-format
-#~ msgid "function call of variable concept %qE"
-#~ msgstr "funktionsanrop av variabelkonceptet %qE"
-
-#, gcc-internal-format
-#~ msgid "no matching concepts for %qE"
-#~ msgstr "inga matchande koncept för %qE"
-
-#, gcc-internal-format
-#~ msgid "%qE cannot be introduced with an ellipsis %<...%>"
-#~ msgstr "%qE kan inte introduceras med en ellips %<...%>"
-
-#, gcc-internal-format
-#~ msgid "prototype declared here"
-#~ msgstr "prototypen deklarerad här"
-
-#, gcc-internal-format
-#~ msgid "all template parameters of %qD must be introduced"
-#~ msgstr "alla mallparametrar till %qD måste introduceras"
-
-#, gcc-internal-format
-#~ msgid "cannot deduce template parameters from introduction list"
-#~ msgstr "kan inte härleda mallargument från introduktionslistan"
-
-#, gcc-internal-format
-#~ msgid "definition of concept %qD is empty"
-#~ msgstr "definitionen av konceptet %qD är tom"
-
-#, gcc-internal-format
-#~ msgid "definition of concept %qD has multiple statements"
-#~ msgstr "definitionen av konceptet %qD har flera satser"
-
-#, gcc-internal-format
-#~ msgid "cannot initialize a return object of type %qT with an rvalue of type %<void%>"
-#~ msgstr "det går inte att initiera ett returobjekt av typen %qT med ett r-värde av typen %<void%>"
-
-#, gcc-internal-format
-#~ msgid "ignoring return value of %qD, declared with attribute %<nodiscard%>: %<%s%>"
-#~ msgstr "ignorerar returvärdet av %qD, deklarerad med attributet %<nodiscard%>: %<%s%>"
-
-#, gcc-internal-format
-#~ msgid "ignoring returned value of type %qT, declared with attribute %<nodiscard%>: %<%s%>"
-#~ msgstr "ignorerar returnerat värde av typen %qT, deklarerat med attributet %<nodiscard%>: %<%s%>"
-
-#, gcc-internal-format
-#~ msgid "cannot specialize concept %q#D"
-#~ msgstr "kan inte specialisera konceptet %q#D"
-
-#, gcc-internal-format
-#~ msgid "variable concept has no initializer"
-#~ msgstr "variabelkoncept har ingen initierare"
-
-#, gcc-internal-format
-#~ msgid "concept %q#D declared with function parameters"
-#~ msgstr "konceptet %q#D deklarerad med funktionsparametrar"
-
-#, gcc-internal-format
-#~ msgid "concept %q#D declared with a deduced return type"
-#~ msgstr "konceptet %q#D deklarerat med en härledd returtyp"
-
-#, gcc-internal-format
-#~ msgid "concept %q#D with non-%<bool%> return type %qT"
-#~ msgstr "koncept %q#D med icke-%<bool%>-returtyp %qT"
-
-#, gcc-internal-format
-#~ msgid "concept %qD has no definition"
-#~ msgstr "konceptet %qD har ingen definition"
-
-#, gcc-internal-format
-#~ msgid "a function concept cannot be constrained"
-#~ msgstr "ett funktionskoncept kan inte begränsas"
-
-#, gcc-internal-format
-#~ msgid "concept must have type %<bool%>"
-#~ msgstr "koncept måste ha typen %<bool%>"
-
-#, gcc-internal-format
-#~ msgid "a variable concept cannot be constrained"
-#~ msgstr "ett variabelkoncept kan inte begränsas"
-
-#, gcc-internal-format
-#~ msgid "%<long%> and %<short%> specified together"
-#~ msgstr "%<long%> och %<short%> angivna tillsammans"
-
-#, gcc-internal-format
-#~ msgid "defaulted declaration %q+D does not match the expected signature"
-#~ msgstr "standarddeklaration %q+D stämmer inte med den förväntade signaturen"
-
-#, gcc-internal-format
-#~ msgid "%q#D references internal linkage entity %q#D"
-#~ msgstr "%q#D refererar entiteten %q#D med intern länkning"
-
-#, gcc-internal-format
-#~ msgid "macro debug output may be incomplete with modules"
-#~ msgstr "makrofelsökningsutdata kan vara ofullständig med moduler"
-
-#, gcc-internal-format
-#~ msgid "module dependencies require preprocessing"
-#~ msgstr "modulberoenden kräver preprocessning"
-
-#, gcc-internal-format
-#~ msgid "you should use the %<-%s%> option"
-#~ msgstr "du behöver använda flaggan %<-%s%>"
-
-#, gcc-internal-format
-#~ msgid "%<%T::%D%> names the constructor, not the type"
-#~ msgstr "%<%T::%D%> namnger konstrueraren, inte typen"
-
-#, gcc-internal-format
-#~ msgid "import cannot appear directly in a linkage-specification"
-#~ msgstr "import får inte förekomma direkt i en länkningsspecifikation"
-
-#, gcc-internal-format
-#~ msgid "extra %<;%>"
-#~ msgstr "extra %<;%>"
-
-#, gcc-internal-format
-#~ msgid "use of %<auto%> in template argument only available with %<-fconcepts-ts%>"
-#~ msgstr "användning av %<auto%> i mallargument är endast tillgängligt med %<-fconcepts-ts%>"
-
-#, gcc-internal-format
-#~ msgid "template-introductions are not part of C++20 concepts; use %qs to enable"
-#~ msgstr "mallintroduktioner är inte en del av C++20 koncept; använd %qs för att aktivera"
-
-#, gcc-internal-format
-#~ msgid "no matching concept for template-introduction"
-#~ msgstr "det finns inget matchande koncept för mallintroduktionen"
-
-#, gcc-internal-format
-#~ msgid "explicit specialization of function concept %qD"
-#~ msgstr "explicit specialisering av funktionskonceptet %qD"
-
-#, gcc-internal-format
-#~ msgid "specialization of variable concept %q#D"
-#~ msgstr "specialisering av variabelkonceptet %q#D"
-
-#, gcc-internal-format
-#~ msgid "explicit instantiation of variable concept %q#D"
-#~ msgstr "explicit instansiering av variabelkonceptet %q#D"
-
-#, gcc-internal-format
-#~ msgid "explicit instantiation of function concept %q#D"
-#~ msgstr "explicit instansiering av funktionskonceptet %q#D"
-
-#, gcc-internal-format
-#~ msgid "invalid use of %qT in template argument"
-#~ msgstr "felaktig användning av %qT i mallargument"
-
-#, gcc-internal-format
-#~ msgid "non-pointer argument to %<__builtin_launder%>"
-#~ msgstr "icke-pekar-argument till %<__builtin_launder%>"
-
-#, gcc-internal-format
-#~ msgid "statement-expression in a constant expression"
-#~ msgstr "satsuttryck i ett konstant uttryck"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid " Included at %s:%d:"
-#~ msgstr " Inkluderad vid %s:%d:"
-
-#, gcc-internal-format
-#~ msgid "<During initialization>\n"
-#~ msgstr "<Under initiering>\n"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "Program unit at %L has OpenMP device constructs/routines but does not set !$OMP REQUIRES UNIFIED_ADDRESS but other program units do"
-#~ msgstr "Programenheten vid %L har OpenMP device-konstruktioner/-rutiner men sätter inte !$OMP REQUIRES UNIFIED_ADDRESS men andra programenheter gör det"
-
-#, gcc-internal-format, gfc-internal-format
-#~ msgid "Program unit at %L has OpenMP device constructs/routines but does not set !$OMP REQUIRES UNIFIED_SHARED_MEMORY but other program units do"
-#~ msgstr "Programenheten vid %L har OpenMP device-konstruktioner/-rutiner men sätter inte !$OMP REQUIRES UNIFIED_SHARED_MEMORY men andra programenheter gör det"
-
-#, gcc-internal-format
-#~ msgid "Sorry, !$OMP allocate for variable %qs at %L with SAVE attribute not yet implemented"
-#~ msgstr "Ledsen, !$OMP allokering för variabeln %qs vid %L med attributet SAVE stödjs inte ännu"
-
-#, gcc-internal-format
-#~ msgid "%qs specified in 'allocate' clause at %L but not in an explicit privatization clause"
-#~ msgstr "%qs angivet i en ”allocate”-klausul vid %L men inte i en explicit privatiseringsklausul"
diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc
index 4719829..dafd9c0 100644
--- a/gcc/range-op-float.cc
+++ b/gcc/range-op-float.cc
@@ -2899,6 +2899,37 @@ private:
}
} fop_div;
+// Implement fold for a cast from float to an int.
+bool
+operator_cast::fold_range (irange &, tree, const frange &,
+ const irange &, relation_trio) const
+{
+ return false;
+}
+
+// Implement op1_range for a cast from float to an int.
+bool
+operator_cast::op1_range (frange &, tree, const irange &,
+ const irange &, relation_trio) const
+{
+ return false;
+}
+
+// Implement fold for a cast from int to a float.
+bool
+operator_cast::fold_range (frange &, tree, const irange &,
+ const frange &, relation_trio) const
+{
+ return false;
+}
+
+// Implement op1_range for a cast from int to a float.
+bool
+operator_cast::op1_range (irange &, tree, const frange &,
+ const frange &, relation_trio) const
+{
+ return false;
+}
// Initialize any float operators to the primary table
diff --git a/gcc/range-op-mixed.h b/gcc/range-op-mixed.h
index bb8e90a..3fb7bff 100644
--- a/gcc/range-op-mixed.h
+++ b/gcc/range-op-mixed.h
@@ -473,6 +473,15 @@ public:
bool fold_range (prange &r, tree type,
const irange &op1, const prange &op2,
relation_trio rel = TRIO_VARYING) const final override;
+ bool fold_range (irange &r, tree type,
+ const frange &lh,
+ const irange &rh,
+ relation_trio = TRIO_VARYING) const;
+ bool fold_range (frange &r, tree type,
+ const irange &lh,
+ const frange &rh,
+ relation_trio = TRIO_VARYING) const;
+
bool op1_range (irange &r, tree type,
const irange &lhs, const irange &op2,
relation_trio rel = TRIO_VARYING) const final override;
@@ -485,6 +494,15 @@ public:
bool op1_range (prange &r, tree type,
const irange &lhs, const prange &op2,
relation_trio rel = TRIO_VARYING) const final override;
+ bool op1_range (frange &r, tree type,
+ const irange &lhs,
+ const irange &op2,
+ relation_trio = TRIO_VARYING) const;
+ bool op1_range (irange &r, tree type,
+ const frange &lhs,
+ const frange &op2,
+ relation_trio = TRIO_VARYING) const;
+
relation_kind lhs_op1_relation (const irange &lhs,
const irange &op1, const irange &op2,
relation_kind) const final override;
diff --git a/gcc/range-op.cc b/gcc/range-op.cc
index 35b3e18..06d357f 100644
--- a/gcc/range-op.cc
+++ b/gcc/range-op.cc
@@ -164,6 +164,8 @@ dispatch_trio (unsigned lhs, unsigned op1, unsigned op2)
// These are the supported dispatch patterns. These map to the parameter list
// of the routines in range_operator. Note the last 3 characters are
// shorthand for the LHS, OP1, and OP2 range discriminator class.
+// Reminder, single operand instructions use the LHS type for op2, even if
+// unused. so FLOAT = INT would be RO_FIF.
const unsigned RO_III = dispatch_trio (VR_IRANGE, VR_IRANGE, VR_IRANGE);
const unsigned RO_IFI = dispatch_trio (VR_IRANGE, VR_FRANGE, VR_IRANGE);
@@ -246,6 +248,10 @@ range_op_handler::fold_range (vrange &r, tree type,
return m_operator->fold_range (as_a <frange> (r), type,
as_a <irange> (lh),
as_a <irange> (rh), rel);
+ case RO_FIF:
+ return m_operator->fold_range (as_a <frange> (r), type,
+ as_a <irange> (lh),
+ as_a <frange> (rh), rel);
case RO_PPP:
return m_operator->fold_range (as_a <prange> (r), type,
as_a <prange> (lh),
@@ -292,6 +298,10 @@ range_op_handler::op1_range (vrange &r, tree type,
return m_operator->op1_range (as_a <irange> (r), type,
as_a <irange> (lhs),
as_a <irange> (op2), rel);
+ case RO_IFF:
+ return m_operator->op1_range (as_a <irange> (r), type,
+ as_a <frange> (lhs),
+ as_a <frange> (op2), rel);
case RO_PPP:
return m_operator->op1_range (as_a <prange> (r), type,
as_a <prange> (lhs),
@@ -312,6 +322,10 @@ range_op_handler::op1_range (vrange &r, tree type,
return m_operator->op1_range (as_a <frange> (r), type,
as_a <irange> (lhs),
as_a <frange> (op2), rel);
+ case RO_FII:
+ return m_operator->op1_range (as_a <frange> (r), type,
+ as_a <irange> (lhs),
+ as_a <irange> (op2), rel);
case RO_FFF:
return m_operator->op1_range (as_a <frange> (r), type,
as_a <frange> (lhs),
@@ -761,6 +775,30 @@ range_operator::fold_range (irange &r, tree type,
return true;
}
+
+bool
+range_operator::fold_range (frange &, tree, const irange &,
+ const frange &, relation_trio) const
+{
+ return false;
+}
+
+bool
+range_operator::op1_range (irange &, tree, const frange &,
+ const frange &, relation_trio) const
+{
+ return false;
+}
+
+bool
+range_operator::op1_range (frange &, tree, const irange &,
+ const irange &, relation_trio) const
+{
+ return false;
+}
+
+
+
// The default for op1_range is to return false.
bool
diff --git a/gcc/range-op.h b/gcc/range-op.h
index 594e678..1075786 100644
--- a/gcc/range-op.h
+++ b/gcc/range-op.h
@@ -86,6 +86,10 @@ public:
const irange &lh,
const irange &rh,
relation_trio = TRIO_VARYING) const;
+ virtual bool fold_range (frange &r, tree type,
+ const irange &lh,
+ const frange &rh,
+ relation_trio = TRIO_VARYING) const;
virtual bool fold_range (prange &r, tree type,
const prange &lh,
const prange &rh,
@@ -146,7 +150,14 @@ public:
const irange &lhs,
const frange &op2,
relation_trio = TRIO_VARYING) const;
-
+ virtual bool op1_range (irange &r, tree type,
+ const frange &lhs,
+ const frange &op2,
+ relation_trio = TRIO_VARYING) const;
+ virtual bool op1_range (frange &r, tree type,
+ const irange &lhs,
+ const irange &op2,
+ relation_trio = TRIO_VARYING) const;
virtual bool op2_range (irange &r, tree type,
const irange &lhs,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce230e0..b7e62e8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,347 @@
+2025-05-13 Andrew MacLeod <amacleod@redhat.com>
+
+ * gcc.dg/tree-ssa/vrp124.c: New.
+
+2025-05-12 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h: Add test helper macros.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u32-from-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u16.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u32-from-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u16.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u64.c: New test.
+
+2025-05-12 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/sat/sat_arith.h: Add test helper macros.
+ * gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u32.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u64.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-run-7-u32-from-u64.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c: New test.
+ * gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c: New test.
+
+2025-05-12 Jason Merrill <jason@redhat.com>
+
+ PR c++/120012
+ * g++.dg/abi/base-defaulted2.C: New test.
+
+2025-05-12 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/120188
+ * lib/gm2-dg.exp (gm2-dg-frontend-configure-check): New function.
+ (gm2-dg-runtest): Add -O2 to the option_list.
+ * gm2.dg/doc/examples/plugin/fail/assignvalue.mod: New test.
+ * gm2.dg/doc/examples/plugin/fail/doc-examples-plugin-fail.exp: New test.
+
+2025-05-12 Thomas Schwinge <tschwinge@baylibre.com>
+
+ * gcc.target/nvptx/march-map=sm_61.c: Adjust.
+ * gcc.target/nvptx/march-map=sm_62.c: Likewise.
+ * gcc.target/nvptx/march=sm_61.c: New.
+
+2025-05-12 Thomas Schwinge <tschwinge@baylibre.com>
+
+ * gcc.target/nvptx/mptx=5.0.c: New.
+
+2025-05-12 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/116445
+ * gcc.target/arm/unsigned-extend-2.c: Fix dg directives.
+
+2025-05-12 Dongyan Chen <chendongyan@isrc.iscas.ac.cn>
+
+ * gcc.target/riscv/arch-ss-1.c: New test.
+ * gcc.target/riscv/arch-ss-2.c: New test.
+
+2025-05-12 Dongyan Chen <chendongyan@isrc.iscas.ac.cn>
+
+ * gcc.target/riscv/arch-zilsd-1.c: New.
+ * gcc.target/riscv/arch-zilsd-2.c: New.
+ * gcc.target/riscv/arch-zilsd-3.c: New.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * gcc.target/arm/ivopts.c: Remove test for iwmmxt
+ * lib/target-supports.exp
+ (check_effective_target_arm_iwmmxt_ok): Delete.
+
+2025-05-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * gcc.target/arm/mmx-1.c: Removed.
+ * gcc.target/arm/mmx-2.c: Removed.
+ * gcc.target/arm/pr64208.c: Removed.
+ * gcc.target/arm/pr79145.c: Removed.
+ * gcc.target/arm/pr99724.c: Removed.
+ * gcc.target/arm/pr99786.c: Removed.
+
+2025-05-12 Richard Biener <rguenther@suse.de>
+
+ PR testsuite/120222
+ * gcc.dg/tree-ssa/gen-vect-28.c: Use noipa on main_1.
+
+2025-05-12 Jiawei <jiawei@iscas.ac.cn>
+
+ * gcc.target/riscv/arch-52.c: Fix regular expression.
+
+2025-05-12 Chao-ying Fu <cfu@wavecomp.com>
+
+ * gcc.target/mips/pr54240.c: Scan phiopt2.
+
+2025-05-11 Jan Hubicka <hubicka@ucw.cz>
+
+ * gcc.target/i386/pr91446.c: xfail.
+ * gcc.target/i386/pr99881.c: remove xfail.
+
+2025-05-11 Max Filippov <jcmvbkbc@gmail.com>
+
+ * lib/target-supports.exp
+ (check_effective_target_xtensa_atomic): New function.
+ (check_effective_target_sync_int_long)
+ (check_effective_target_sync_char_short): Add test for xtensa.
+
+2025-05-11 Robert Dubner <rdubner@symas.com>
+
+ * cobol.dg/group2/258_Nested_PERFORM.cob: New testcase.
+ * cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob: Likewise.
+ * cobol.dg/group2/338_Default_Arithmetic__1_.cob: Likewise.
+ * cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob: Likewise.
+ * cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob: Likewise.
+ * cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob: Likewise.
+ * cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob: Likewise.
+ * cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob: Likewise.
+ * cobol.dg/group2/Alphanumeric_and_binary_numeric.cob: Likewise.
+ * cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__1_.cob: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__2_.cob: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__3_.cob: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__4_.cob: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__5_.cob: Likewise.
+ * cobol.dg/group2/CALL_with_OMITTED_parameter.cob: Likewise.
+ * cobol.dg/group2/Class_check_with_reference_modification.cob: Likewise.
+ * cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob: Likewise.
+ * cobol.dg/group2/Complex_IF.cob: Likewise.
+ * cobol.dg/group2/Concatenation_operator.cob: Likewise.
+ * cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob: Likewise.
+ * cobol.dg/group2/CURRENCY_SIGN.cob: Likewise.
+ * cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob: Likewise.
+ * cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob: Likewise.
+ * cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob: Likewise.
+ * cobol.dg/group2/EXIT_PARAGRAPH.cob: Likewise.
+ * cobol.dg/group2/EXIT_PERFORM.cob: Likewise.
+ * cobol.dg/group2/EXIT_PERFORM_CYCLE.cob: Likewise.
+ * cobol.dg/group2/EXIT_SECTION.cob: Likewise.
+ * cobol.dg/group2/Fixed_continuation_indicator.cob: Likewise.
+ * cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob: Likewise.
+ * cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob: Likewise.
+ * cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob: Likewise.
+ * cobol.dg/group2/Index_and_parenthesized_expression.cob: Likewise.
+ * cobol.dg/group2/LENGTH_OF_omnibus.cob: Likewise.
+ * cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob: Likewise.
+ * cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob: Likewise.
+ * cobol.dg/group2/MOVE_indexes.cob: Likewise.
+ * cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob: Likewise.
+ * cobol.dg/group2/MOVE_to_edited_item__1_.cob: Likewise.
+ * cobol.dg/group2/MOVE_to_edited_item__2_.cob: Likewise.
+ * cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob: Likewise.
+ * cobol.dg/group2/MOVE_to_itself.cob: Likewise.
+ * cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob: Likewise.
+ * cobol.dg/group2/MOVE_with_group_refmod.cob: Likewise.
+ * cobol.dg/group2/MOVE_with_refmod.cob: Likewise.
+ * cobol.dg/group2/MOVE_with_refmod__variable_.cob: Likewise.
+ * cobol.dg/group2/MOVE_Z_literal_.cob: Likewise.
+ * cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob: Likewise.
+ * cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob: Likewise.
+ * cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob: Likewise.
+ * cobol.dg/group2/Non-overflow_after_overflow.cob: Likewise.
+ * cobol.dg/group2/OCCURS_clause_with_1_entry.cob: Likewise.
+ * cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob: Likewise.
+ * cobol.dg/group2/PERFORM_..._CONTINUE.cob: Likewise.
+ * cobol.dg/group2/PERFORM_inline__1_.cob: Likewise.
+ * cobol.dg/group2/PERFORM_inline__2_.cob: Likewise.
+ * cobol.dg/group2/PERFORM_type_OSVS.cob: Likewise.
+ * cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob: Likewise.
+ * cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob: Likewise.
+ * cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob: Likewise.
+ * cobol.dg/group2/Recursive_PERFORM_paragraph.cob: Likewise.
+ * cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob: Likewise.
+ * cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob: Likewise.
+ * cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob: Likewise.
+ * cobol.dg/group2/SORT__table_sort__2_.cob: Likewise.
+ * cobol.dg/group2/SORT__table_sort__3A_.cob: Likewise.
+ * cobol.dg/group2/SORT__table_sort__3B_.cob: Likewise.
+ * cobol.dg/group2/SORT__table_sort.cob: Likewise.
+ * cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob: Likewise.
+ * cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob: Likewise.
+ * cobol.dg/group2/_-static__compilation.cob: Likewise.
+ * cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob: Likewise.
+ * cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob: Likewise.
+ * cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob: Likewise.
+ * cobol.dg/group2/STRING_with_subscript_reference.cob: Likewise.
+ * cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob: Likewise.
+ * cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob: Likewise.
+ * cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob: Likewise.
+ * cobol.dg/group2/UNSTRING_DELIMITER_IN.cob: Likewise.
+ * cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob: Likewise.
+ * cobol.dg/group2/258_Nested_PERFORM.out: Known-good results file.
+ * cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out: Likewise.
+ * cobol.dg/group2/338_Default_Arithmetic__1_.out: Likewise.
+ * cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out: Likewise.
+ * cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out: Likewise.
+ * cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out: Likewise.
+ * cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__1_.out: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__2_.out: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__3_.out: Likewise.
+ * cobol.dg/group2/ANY_LENGTH__5_.out: Likewise.
+ * cobol.dg/group2/CALL_with_OMITTED_parameter.out: Likewise.
+ * cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out: Likewise.
+ * cobol.dg/group2/Complex_IF.out: Likewise.
+ * cobol.dg/group2/Concatenation_operator.out: Likewise.
+ * cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out: Likewise.
+ * cobol.dg/group2/CURRENCY_SIGN.out: Likewise.
+ * cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out: Likewise.
+ * cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out: Likewise.
+ * cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out: Likewise.
+ * cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out: Likewise.
+ * cobol.dg/group2/EXIT_PERFORM_CYCLE.out: Likewise.
+ * cobol.dg/group2/EXIT_PERFORM.out: Likewise.
+ * cobol.dg/group2/Fixed_continuation_indicator.out: Likewise.
+ * cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out: Likewise.
+ * cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out: Likewise.
+ * cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out: Likewise.
+ * cobol.dg/group2/Index_and_parenthesized_expression.out: Likewise.
+ * cobol.dg/group2/LENGTH_OF_omnibus.out: Likewise.
+ * cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out: Likewise.
+ * cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out: Likewise.
+ * cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out: Likewise.
+ * cobol.dg/group2/MOVE_to_edited_item__1_.out: Likewise.
+ * cobol.dg/group2/MOVE_to_edited_item__2_.out: Likewise.
+ * cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out: Likewise.
+ * cobol.dg/group2/MOVE_to_JUSTIFIED_item.out: Likewise.
+ * cobol.dg/group2/MOVE_Z_literal_.out: Likewise.
+ * cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out: Likewise.
+ * cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out: Likewise.
+ * cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out: Likewise.
+ * cobol.dg/group2/OSVS_Arithmetic_Test__2_.out: Likewise.
+ * cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out: Likewise.
+ * cobol.dg/group2/Quote_marks_in_comment_paragraphs.out: Likewise.
+ * cobol.dg/group2/Recursive_PERFORM_paragraph.out: Likewise.
+ * cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out: Likewise.
+ * cobol.dg/group2/SORT__table_sort__2_.out: Likewise.
+ * cobol.dg/group2/SORT__table_sort__3A_.out: Likewise.
+ * cobol.dg/group2/SORT__table_sort__3B_.out: Likewise.
+ * cobol.dg/group2/SOURCE_FIXED_FREE_directives.out: Likewise.
+ * cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out: Likewise.
+ * cobol.dg/group2/_-static__compilation.out: Likewise.
+ * cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out: Likewise.
+ * cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out: Likewise.
+
+2025-05-11 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/120211
+ * gcc.dg/vect/vect-early-break_135-pr120211.c: New testcase.
+ * gcc.dg/torture/pr120211-1.c: Likewise.
+
+2025-05-11 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/120163
+ * gfortran.dg/interface_61.f90: New test.
+
+2025-05-11 Jiawei <jiawei@iscas.ac.cn>
+
+ * gcc.target/riscv/arch-53.c: New test.
+ * gcc.target/riscv/arch-54.c: New test.
+
+2025-05-11 Jiawei <jiawei@iscas.ac.cn>
+
+ * gcc.target/riscv/arch-49.c: New test.
+ * gcc.target/riscv/arch-50.c: New test.
+ * gcc.target/riscv/arch-51.c: New test.
+ * gcc.target/riscv/arch-52.c: New test.
+
+2025-05-11 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR testsuite/119909
+ * gcc.dg/torture/pr119131-1.c: Add -Wno-psabi.
+
+2025-05-10 Robert Dubner <rdubner@symas.com>
+
+ * cobol.dg/group1/simple-if.cob: Make explicitly >>SOURCE FREE
+
+2025-05-10 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/102891
+ * gfortran.dg/transfer_array_subref.f90: New test.
+
+2025-05-10 Jan Hubicka <hubicka@ucw.cz>
+
+ * gcc.target/i386/minmax-6.c: xfail test that pmax is used.
+ * gcc.target/i386/minmax-7.c: xfall test that pmin is used.
+
+2025-05-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/120193
+ * gfortran.dg/guality/pr120193.f90: New test.
+
+2025-05-10 Filip Kastl <fkastl@suse.cz>
+
+ * gcc.target/aarch64/pr99988.c: Add -fno-bit-tests.
+
+2025-05-10 Filip Kastl <fkastl@suse.cz>
+
+ PR tree-optimization/120080
+ * gcc.dg/tree-ssa/pr120080.c: New test.
+
+2025-05-10 Co-authored-by: Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/ior-synthesis-1.c: New test.
+ * gcc.target/riscv/ior-synthesis-2.c: New test.
+ * gcc.target/riscv/xor-synthesis-1.c: New test.
+ * gcc.target/riscv/xor-synthesis-2.c: New test.
+ * gcc.target/riscv/xor-synthesis-3.c: New test.
+
+2025-05-10 Anton Blanchard <antonb@tenstorrent.com>
+
+ * gcc.target/riscv/rvv/base/crc-builtin-zvbc.c: New test.
+
+2025-05-10 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.dg/pr87600.h (REG1, REG2): Test for __PPC__ as well.
+ * gcc.dg/pr89313.c (REG): Likewise.
+
+2025-05-10 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.target/powerpc/block-cmp-8.c: Require powerpc64
+ instruction execution support.
+
+2025-05-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/120204
+ * g++.dg/cpp1y/constexpr-recursion3.C: New test.
+
2025-05-09 Jason Merrill <jason@redhat.com>
PR c++/99599
diff --git a/gcc/testsuite/cobol.dg/group1/simple-if.cob b/gcc/testsuite/cobol.dg/group1/simple-if.cob
index 6cf6ec6..bdf11ec 100644
--- a/gcc/testsuite/cobol.dg/group1/simple-if.cob
+++ b/gcc/testsuite/cobol.dg/group1/simple-if.cob
@@ -19,7 +19,7 @@
*> { dg-output {CORRECTLY_TRUE: A_4 NOT = B_4(\n|\r\n|\r)} }
*> { dg-output {CORRECTLY_ELSE: A_4 NOT > B_4(\n|\r\n|\r)} }
*> { dg-output { } }
-* Not strictly Reference Format
+ >>SOURCE FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. test.
DATA DIVISION.
diff --git a/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob b/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob
new file mode 100644
index 0000000..383cd0a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/258_Nested_PERFORM.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ PERFORM 2 TIMES
+ DISPLAY "X" NO ADVANCING
+ END-DISPLAY
+ PERFORM 2 TIMES
+ DISPLAY "Y" NO ADVANCING
+ END-DISPLAY
+ END-PERFORM
+ END-PERFORM.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out b/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out
new file mode 100644
index 0000000..3c3d159
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/258_Nested_PERFORM.out
@@ -0,0 +1 @@
+XYYXYY
diff --git a/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob b/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob
new file mode 100644
index 0000000..295caf5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/259_PERFORM_VARYING_BY_-0.2.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 X PIC 9v9.
+ PROCEDURE DIVISION.
+ PERFORM VARYING X FROM 0.8 BY -0.2
+ UNTIL X < 0.4
+ DISPLAY "X" NO ADVANCING
+ END-DISPLAY
+ END-PERFORM.
+ IF X NOT = 0.2
+ DISPLAY "WRONG X: " X END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out b/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out
new file mode 100644
index 0000000..dd6d86a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/259_PERFORM_VARYING_BY_-0.2.out
@@ -0,0 +1 @@
+XXX
diff --git a/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob b/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob
new file mode 100644
index 0000000..5405dba
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.cob
@@ -0,0 +1,75 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/338_Default_Arithmetic__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 NUM-A PIC 9(3) VALUE 399.
+ 01 NUM-B PIC 9(3) VALUE 211.
+ 01 NUM-C PIC 9(3)V99 VALUE 212.34.
+ 01 NUMV1 PIC 9(3)V9.
+ 01 PICX PIC X VALUE 'A'.
+ 01 RSLT PIC 9(3).
+ 01 RSLTV1 PIC 9(3).9.
+ 01 RSLTV2 PIC 9(3).99.
+ *
+ PROCEDURE DIVISION.
+ MAIN.
+ COMPUTE RSLT = NUM-A + 1.1.
+ DISPLAY 'Simple Compute RSLT IS ' RSLT
+ COMPUTE RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+ DISPLAY 'Single Variable RSLT IS ' RSLT
+ COMPUTE RSLTV2, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+ DISPLAY 'Compute RSLT IS ' RSLT
+ DISPLAY 'Compute RSLTv99 IS ' RSLTV2
+ COMPUTE RSLTV1, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+ DISPLAY 'Compute RSLT IS ' RSLT
+ DISPLAY 'Compute RSLTv9 IS ' RSLTV1
+ MOVE 0 TO RSLT
+ ADD NUM-C TO RSLT.
+ DISPLAY 'Add RSLT IS ' RSLT.
+ MOVE 0 TO RSLT
+ ADD NUM-A NUM-C 10 TO RSLT.
+ DISPLAY 'Add RSLT IS ' RSLT.
+ SUBTRACT NUM-C FROM RSLT.
+ DISPLAY 'Subtract RSLT IS ' RSLT.
+ SUBTRACT NUM-A -10 FROM RSLT.
+ DISPLAY 'Subtract RSLT IS ' RSLT.
+ MOVE 0 TO RSLT
+ ADD NUM-A NUM-C TO RSLT GIVING RSLTV1.
+ DISPLAY 'Add RSLTv9 IS ' RSLTV1
+ MULTIPLY NUM-A BY NUM-C GIVING RSLT.
+ DISPLAY 'Multiply RSLT IS ' RSLT.
+ MULTIPLY RSLT BY NUM-C.
+ DISPLAY 'Multiply RSLT IS ' RSLT.
+ DIVIDE NUM-A BY 10 GIVING RSLT.
+ DISPLAY 'Divide RSLT IS ' RSLT.
+ DIVIDE RSLT BY 4 GIVING RSLTV1.
+ DISPLAY 'Divide RSLTv9 IS ' RSLTV1.
+ DIVIDE RSLT BY 4 GIVING RSLT.
+ DISPLAY 'Divide RSLT IS ' RSLT.
+
+ COMPUTE RSLTV1, RSLT = ((NUM-A / 100) - (NUM-B / 100)) * 100
+ DISPLAY 'Simple RSLT IS ' RSLT
+ ' RSLTv9 IS ' RSLTV1.
+
+ COMPUTE RSLTV1, RSLT = ((NUM-A / (100.55 + -0.550))
+ - (NUM-B / (10.11 * 10 - 1.1)))
+ * (220 / 2.2)
+ DISPLAY 'Complex RSLT IS ' RSLT
+ ' RSLTv9 IS ' RSLTV1.
+
+ COMPUTE RSLTV1, RSLT = ((NUM-A / (101 - 1))
+ - (NUM-B / (10 * 10))) * (200 / 2)
+ DISPLAY 'Reduced RSLT IS ' RSLT
+ ' RSLTv9 IS ' RSLTV1.
+ MOVE NUM-A TO NUMV1.
+ IF ((NUMV1 / (101 - 1))
+ - (NUM-B / (10 * 10))) * (200 / 2) EQUAL 188
+ DISPLAY "Not Using ARITHMETIC-OSVS"
+ ELSE
+ DISPLAY "Using ARITHMETIC-OSVS"
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out b/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out
new file mode 100644
index 0000000..3137fc4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/338_Default_Arithmetic__1_.out
@@ -0,0 +1,21 @@
+Simple Compute RSLT IS 400
+Single Variable RSLT IS 188
+Compute RSLT IS 188
+Compute RSLTv99 IS 188.00
+Compute RSLT IS 188
+Compute RSLTv9 IS 188.0
+Add RSLT IS 212
+Add RSLT IS 621
+Subtract RSLT IS 408
+Subtract RSLT IS 019
+Add RSLTv9 IS 611.3
+Multiply RSLT IS 723
+Multiply RSLT IS 723
+Divide RSLT IS 039
+Divide RSLTv9 IS 009.7
+Divide RSLT IS 009
+Simple RSLT IS 188 RSLTv9 IS 188.0
+Complex RSLT IS 188 RSLTv9 IS 188.0
+Reduced RSLT IS 188 RSLTv9 IS 188.0
+Not Using ARITHMETIC-OSVS
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob b/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob
new file mode 100644
index 0000000..6fab992
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.cob
@@ -0,0 +1,113 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out" }
+
+ identification division.
+ program-id. prog.
+ procedure division.
+ display "initialize zeroes"
+ call "prog-zeroes"
+ display "initialize low-value"
+ call "prog-low"
+ display "initialize spaces"
+ call "prog-space"
+ display "initialize high-value"
+ call "prog-high"
+ continue.
+ end program prog.
+
+ identification division.
+ program-id. prog-space.
+ options. initialize working-storage spaces.
+ data division.
+ working-storage section.
+ 01 based-var based.
+ 02 based-x pic x(24) value "I am I, Don Quixote".
+ 02 based-9 pic 999 value 123.
+ 02 based-p pointer value NULL.
+ 01 allocated-pointer pointer.
+ procedure division.
+ display "allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+ allocate 35 characters returning allocated-pointer
+ set address of based-var to allocated-pointer
+ call "reporter" using based-var
+ free allocated-pointer
+ goback.
+ end program prog-space.
+
+ identification division.
+ program-id. prog-low.
+ options. initialize working-storage low-values.
+ data division.
+ working-storage section.
+ 01 based-var based.
+ 02 based-x pic x(24) value "I am I, Don Quixote".
+ 02 based-9 pic 999 value 123.
+ 02 based-p pointer value NULL.
+ 01 allocated-pointer pointer.
+ procedure division.
+ display "allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+ allocate 35 characters returning allocated-pointer
+ set address of based-var to allocated-pointer
+ call "reporter" using based-var
+ free allocated-pointer
+ goback.
+ end program prog-low.
+
+ identification division.
+ program-id. prog-zeroes.
+ options. initialize working-storage binary zeroes.
+ data division.
+ working-storage section.
+ 01 based-var based.
+ 02 based-x pic x(24) value "I am I, Don Quixote".
+ 02 based-9 pic 999 value 123.
+ 02 based-p pointer value NULL.
+ 01 allocated-pointer pointer.
+ procedure division.
+ display "allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+ allocate 35 characters returning allocated-pointer
+ set address of based-var to allocated-pointer
+ call "reporter" using based-var
+ free allocated-pointer
+ goback.
+ end program prog-zeroes.
+
+ identification division.
+ program-id. prog-high.
+ options. initialize working-storage high-values.
+ data division.
+ working-storage section.
+ 01 based-var based.
+ 02 based-x pic x(24) value "I am I, Don Quixote".
+ 02 based-9 pic 999 value 123.
+ 02 based-p pointer value NULL.
+ 01 allocated-pointer pointer.
+ procedure division.
+ display "allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)"
+ allocate 35 characters returning allocated-pointer
+ set address of based-var to allocated-pointer
+ call "reporter" using based-var
+ free allocated-pointer
+ goback.
+ end program prog-high.
+
+ identification division.
+ program-id. reporter.
+ data division.
+ linkage section.
+ 01 based-var based.
+ 02 based-x pic x(24).
+ 02 based-9 pic 999 .
+ 02 based-p pointer .
+ procedure division using based-var.
+ reportt.
+ display " (1) as allocated"
+ perform reportt2
+ goback.
+ reportt2.
+ display " " """" based-x """" with no advancing
+ display space """" based-9 """" with no advancing
+ display space based-p.
+ continue.
+ end program reporter.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out b/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out
new file mode 100644
index 0000000..c141fdf
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALLOCATE_Rule_8_OPTION_INITIALIZE_with_figconst.out
@@ -0,0 +1,17 @@
+initialize zeroes
+allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+ (1) as allocated
+ "" "" 0x0000000000000000
+initialize low-value
+allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+ (1) as allocated
+ "" "" 0x0000000000000000
+initialize spaces
+allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+ (1) as allocated
+ " " " " 0x2020202020202020
+initialize high-value
+allocate characters (ISO 2023 Rule 8: OPT_INIT if specified, otherwise defaultbyte, otherwise zero)
+ (1) as allocated
+ "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" "¿¿¿" 0xffffffffffffffff
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob
new file mode 100644
index 0000000..abcba96
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.cob
@@ -0,0 +1,73 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ALLOCATE___FREE_basic_default_versions.out" }
+
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 based-var pic x(100) based.
+ 01 mem-pointer pointer.
+ 01 mem-size pic 999 value 100.
+ 01 counter pic 99 value zero.
+ procedure division.
+ allocate 100 characters returning mem-pointer.
+ if mem-pointer equal NULL
+ display "allocate 100 should not be NULL (1)"
+ else
+ add 1 to counter.
+ free mem-pointer
+ if mem-pointer not equal NULL
+ display "mem-pointer should be NULL again (1)"
+ else
+ add 1 to counter.
+
+ allocate mem-size characters returning mem-pointer.
+ if mem-pointer equal null
+ display "allocate mem-size should not be NULL (2)"
+ else
+ add 1 to counter.
+ free mem-pointer
+ if mem-pointer not equal null
+ display "mem-pointer should be NULL again (2)"
+ else
+ add 1 to counter.
+
+ allocate based-var
+ if address of based-var equal NULL
+ display "address of based-var should not be NULL (1)"
+ else
+ add 1 to counter
+ free based-var
+ if address of based-var not equal NULL
+ display "address of based-var be NULL (1)"
+ else
+ add 1 to counter.
+
+ allocate based-var
+ if address of based-var equal NULL
+ display "address of based-var should not be NULL (2)"
+ else
+ add 1 to counter.
+ free address of based-var
+ if address of based-var not equal NULL
+ display "address of based-var be NULL (2)"
+ else
+ add 1 to counter.
+
+ allocate based-var returning mem-pointer.
+ if address of based-var equal NULL
+ display "address of based-var should not be NULL (3)"
+ else
+ add 1 to counter.
+ if mem-pointer equal NULL
+ display "address of mem-pointer should not be NULL (3)"
+ else
+ add 1 to counter.
+ if address of based-var not equal mem-pointer
+ display "address of mem-pointer should be equal to mem-pointer (3)"
+ else
+ add 1 to counter.
+
+ display "There were " counter " successful tests; should be 11."
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out
new file mode 100644
index 0000000..ab96696b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_basic_default_versions.out
@@ -0,0 +1,2 @@
+There were 11 successful tests; should be 11.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob
new file mode 100644
index 0000000..b4929b8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__1_.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 MYFLD PIC X(6) BASED VALUE "ABCDEF".
+ PROCEDURE DIVISION.
+ ASTART SECTION.
+ A01.
+ ALLOCATE MYFLD INITIALIZED.
+ IF MYFLD NOT = "ABCDEF"
+ DISPLAY MYFLD
+ END-DISPLAY
+ END-IF.
+ FREE ADDRESS OF MYFLD.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob
new file mode 100644
index 0000000..9820784
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALLOCATE___FREE_with_BASED_item__2_.cob
@@ -0,0 +1,35 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 MYFLD BASED.
+ 03 MYFLDX PIC X.
+ 03 MYFLD9 PIC 9.
+ PROCEDURE DIVISION.
+ IF ADDRESS OF MYFLD NOT = NULL
+ DISPLAY "BASED ITEM WITH ADDRESS ON START"
+ END-DISPLAY
+ END-IF.
+ FREE MYFLD.
+ ALLOCATE MYFLD.
+ IF ADDRESS OF MYFLD = NULL
+ DISPLAY "BASED ITEM WITHOUT ADDRESS AFTER ALLOCATE"
+ END-DISPLAY
+ END-IF.
+ INITIALIZE MYFLD.
+ IF MYFLD NOT = " 0"
+ DISPLAY "BASED ITEM INITIALIZED WRONG: "
+ WITH NO ADVANCING
+ END-DISPLAY
+ DISPLAY MYFLD
+ END-DISPLAY
+ END-IF.
+
+ FREE ADDRESS OF MYFLD.
+ IF ADDRESS OF MYFLD NOT = NULL
+ DISPLAY "BASED ITEM WITH ADDRESS AFTER FREE"
+ END-DISPLAY
+ END-IF.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob
new file mode 100644
index 0000000..a4dc2e5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.cob
@@ -0,0 +1,27 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ANY_LENGTH__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 P1 PIC X(6) VALUE "OKOKOK".
+ PROCEDURE DIVISION.
+ CALL "callee" USING P1
+ END-CALL.
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. callee.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 P2 PIC 99.
+ LINKAGE SECTION.
+ 01 P1 PIC X ANY LENGTH.
+ PROCEDURE DIVISION USING P1.
+ MOVE FUNCTION LENGTH (P1) TO P2.
+ DISPLAY "The incoming ANY LENGTH is " P2
+ DISPLAY "The incoming ANY LENGTH variable is " """" P1 """"
+ EXIT PROGRAM.
+ END PROGRAM callee.
+ END PROGRAM caller.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out
new file mode 100644
index 0000000..f35acf2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__1_.out
@@ -0,0 +1,3 @@
+The incoming ANY LENGTH is 06
+The incoming ANY LENGTH variable is "OKOKOK"
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob
new file mode 100644
index 0000000..8f152eb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ANY_LENGTH__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 P1 PIC X(2) VALUE "OK".
+ PROCEDURE DIVISION.
+ CALL "callee" USING P1
+ END-CALL.
+ DISPLAY "On return, P1 is " """" P1 """"
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. callee.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 P2 PIC XXX.
+ LINKAGE SECTION.
+ 01 P1 PIC X ANY LENGTH.
+ PROCEDURE DIVISION USING P1.
+ MOVE P1 TO P2.
+ DISPLAY "P1 is " """" P1 """"
+ DISPLAY "P2 is " """" P2 """"
+ IF P2 NOT = "OK "
+ DISPLAY P2
+ END-DISPLAY
+ END-IF.
+ MOVE SPACE TO P1.
+ EXIT PROGRAM.
+ END PROGRAM callee.
+ END PROGRAM caller.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out
new file mode 100644
index 0000000..e2bc284
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__2_.out
@@ -0,0 +1,4 @@
+P1 is "OK"
+P2 is "OK "
+On return, P1 is " "
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob
new file mode 100644
index 0000000..6603559
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.cob
@@ -0,0 +1,25 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ANY_LENGTH__3_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(20) VALUE ALL "X".
+ PROCEDURE DIVISION.
+ CALL "subprog" USING str.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. subprog.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 str PIC X ANY LENGTH.
+ PROCEDURE DIVISION USING str.
+ MOVE "abcd" TO str
+ DISPLAY FUNCTION TRIM (str)
+ MOVE "abcd" TO str (5:)
+ DISPLAY FUNCTION TRIM (str)
+ MOVE ALL "a" TO str
+ DISPLAY FUNCTION TRIM (str).
+ END PROGRAM subprog.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out
new file mode 100644
index 0000000..7e58e05
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__3_.out
@@ -0,0 +1,4 @@
+abcd
+abcdabcd
+aaaaaaaaaaaaaaaaaaaa
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob
new file mode 100644
index 0000000..b4dcddc
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__4_.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(20) VALUE ALL "X".
+
+ PROCEDURE DIVISION.
+ CALL "subprog" USING str
+ move ' 45' to str
+ CALL "subprog" USING str
+ .
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. subprog.
+
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 str PIC X ANY LENGTH.
+
+ PROCEDURE DIVISION USING str.
+ IF str = 'X'
+ DISPLAY 'X is X'
+ END-IF
+ IF str = space
+ DISPLAY 'X is space'
+ END-IF
+ .
+ END PROGRAM subprog.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob
new file mode 100644
index 0000000..fb8dfa9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ANY_LENGTH__5_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ CALL "subprog"
+ GOBACK.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. subprog.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 str1 PIC X ANY LENGTH.
+ 01 str2 PIC X ANY LENGTH.
+ PROCEDURE DIVISION USING optional str1 optional str2.
+ DISPLAY 'IN' WITH NO ADVANCING.
+ END PROGRAM subprog.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out
new file mode 100644
index 0000000..2c9e08f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ANY_LENGTH__5_.out
@@ -0,0 +1 @@
+IN
diff --git a/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob b/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob
new file mode 100644
index 0000000..76b1fb4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.cob
@@ -0,0 +1,45 @@
+ *> { dg-do run }
+ *> { dg-options "-Wno-truncate" }
+ *> { dg-output-file "group2/Alphanumeric_MOVE_with_truncation.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 x-left PIC X(03).
+ 01 x-right PIC X(03) JUSTIFIED RIGHT.
+ PROCEDURE DIVISION.
+ MOVE '1234' TO x-left, x-right
+ DISPLAY """" x-left """" space """" x-right """"
+ IF x-left not = '123'
+ OR x-right not = '234'
+ DISPLAY 'error with "1234":'
+ END-DISPLAY
+ DISPLAY x-left
+ END-DISPLAY
+ DISPLAY x-right
+ END-DISPLAY
+ END-IF
+ MOVE ' 3' TO x-left, x-right
+ DISPLAY """" x-left """" space """" x-right """"
+ IF x-left not = spaces
+ OR x-right not = ' 3'
+ DISPLAY 'error with " 3":'
+ END-DISPLAY
+ DISPLAY x-left
+ END-DISPLAY
+ DISPLAY x-right
+ END-DISPLAY
+ END-IF
+ MOVE '3 ' TO x-left, x-right
+ DISPLAY """" x-left """" space """" x-right """"
+ IF x-left not = '3'
+ OR x-right not = spaces
+ DISPLAY 'error with "3 ":'
+ END-DISPLAY
+ DISPLAY x-left
+ END-DISPLAY
+ DISPLAY x-right
+ END-DISPLAY
+ END-IF.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out b/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out
new file mode 100644
index 0000000..1bddffb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Alphanumeric_MOVE_with_truncation.out
@@ -0,0 +1,4 @@
+"123" "234"
+" " " 3"
+"3 " " "
+
diff --git a/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob b/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob
new file mode 100644
index 0000000..8ce12ee
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Alphanumeric_and_binary_numeric.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X-X PIC XXXX VALUE "0001".
+ 01 X-9 PIC 9999 COMP VALUE 1.
+ PROCEDURE DIVISION.
+ IF X-X = X-9
+ STOP RUN
+ END-IF.
+ DISPLAY "NG" NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob b/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob
new file mode 100644
index 0000000..0c5647c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.cob
@@ -0,0 +1,38 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/CALL_with_OMITTED_parameter.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 P1 PIC X VALUE "A".
+ 01 P2 PIC X VALUE "B".
+ PROCEDURE DIVISION.
+ DISPLAY "Should see AB"
+ CALL "callee" USING P1 P2
+ DISPLAY "Should see A"
+ CALL "callee" USING P1
+ END-CALL.
+ DISPLAY "Should see A"
+ CALL "callee" USING P1 OMITTED
+ END-CALL.
+ STOP RUN.
+ END PROGRAM caller.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. callee.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 P1 PIC X.
+ 01 P2 PIC X.
+ PROCEDURE DIVISION USING P1 OPTIONAL P2.
+ DISPLAY """" P1 WITH NO ADVANCING
+ IF P2 NOT OMITTED
+ DISPLAY P2 """"
+ END-DISPLAY
+ ELSE
+ DISPLAY """"
+ END-DISPLAY
+ END-IF.
+ EXIT PROGRAM.
+ END PROGRAM callee.
+
diff --git a/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out b/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out
new file mode 100644
index 0000000..1a77e2c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CALL_with_OMITTED_parameter.out
@@ -0,0 +1,7 @@
+Should see AB
+"AB"
+Should see A
+"A"
+Should see A
+"A"
+
diff --git a/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob b/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob
new file mode 100644
index 0000000..0c4e115
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.cob
@@ -0,0 +1,28 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/CONTINUE_AFTER_1_SECONDS.out" }
+
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 tod pic x(64).
+ 01 tstart pic 9999.
+ 01 tend pic 9999.
+ 01 tspan pic 9999.
+ procedure division.
+ accept tod from time
+ move tod(5:) to tstart
+ continue after 1.0 seconds.
+ accept tod from time
+ move tod(5:) to tend
+ if tend < tstart
+ compute tend = tend + 6000
+ end-if
+ compute tspan = tend - tstart
+ if tspan >= 75 and tspan <= 125
+ display "Looks good"
+ else
+ display "Looks bad! " tstart space tend space tspan
+ end-if
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out b/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out
new file mode 100644
index 0000000..74b5c81
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CONTINUE_AFTER_1_SECONDS.out
@@ -0,0 +1,2 @@
+Looks good
+
diff --git a/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob
new file mode 100644
index 0000000..f1ebd6a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/CURRENCY_SIGN.out" }
+
+ PROGRAM-ID. prog.
+
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ CURRENCY SIGN IS "Y".
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 amount pic Y(6)9.99.
+
+ PROCEDURE DIVISION.
+ Move 1512.34 to Amount
+ Display "Amount is #" Amount '#' with no advancing.
+
+ GOBACK
+ .
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
new file mode 100644
index 0000000..d49ed31
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN.out
@@ -0,0 +1 @@
+Amount is # Y1512.34#
diff --git a/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
new file mode 100644
index 0000000..eff0822
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.cob
@@ -0,0 +1,32 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out" }
+
+ PROGRAM-ID. prog.
+
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ *> note the space after EUR / before ct.
+ CURRENCY SIGN IS "EUR " WITH PICTURE SYMBOL "U",
+ CURRENCY SIGN IS " ct (EUR)" WITH PICTURE SYMBOL "c",
+ Currency Sign is "$US" with Picture Symbol "$".
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 EUROS PIC U99v99.
+ 77 cents PIC 9,999c.
+ 77 DOLLARS Pic $$,$$9.99.
+
+ PROCEDURE DIVISION.
+ MOVE 12.34 TO EUROS
+ MULTIPLY euros BY 100 GIVING cents.
+ DISPLAY "#" EUROS "# equal #" cents '#'.
+ Move 1500 to DOLLARS
+ Display "Invoice amount #1 is " DOLLARS '.'.
+ Move 12.34 to DOLLARS
+ Display "Invoice amount #2 is " DOLLARS '.'.
+
+ GOBACK
+ .
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
new file mode 100644
index 0000000..861e65a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/CURRENCY_SIGN_WITH_PICTURE_SYMBOL.out
@@ -0,0 +1,4 @@
+#EUR 12.34# equal #1,234 ct (EUR)#
+Invoice amount #1 is $US1,500.00.
+Invoice amount #2 is $US12.34.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob b/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
new file mode 100644
index 0000000..62d6bc8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Class_check_with_reference_modification.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(6) VALUE "123 ".
+ PROCEDURE DIVISION.
+ IF X(1:3) NUMERIC
+ STOP RUN
+ END-IF.
+ DISPLAY "NG" NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob b/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob
new file mode 100644
index 0000000..797c6fe
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.cob
@@ -0,0 +1,76 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Complex_HEX__VALUE_and_MOVE.out" }
+
+ identification division.
+ program-id. hex-init.
+ data division.
+ working-storage section.
+ 01 var-01020304.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE X'01020304'.
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+
+ 01 var-low.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE LOW-VALUES.
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+ 01 var-space.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE SPACE.
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+ 01 var-quote.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE QUOTE.
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+ 01 var-zero.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE ZERO.
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+ 01 var-high.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE HIGH-VALUES.
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+ 01 move-target.
+ 05 filler1.
+ 10 filler2 pic x(2) VALUE "33".
+ 10 as-value pic x(4) VALUE "3333".
+ 10 filler3 pic x(2) VALUE "33".
+ 05 as-pointer redefines filler1 usage pointer.
+ procedure division.
+ display "the value is " as-pointer of var-01020304.
+ display "should be 0x3333040302013333"
+ display "var-low : " as-pointer of var-low
+ display "var-space: " as-pointer of var-space
+ display "var-quote: " as-pointer of var-quote
+ display "var-zero : " as-pointer of var-zero
+ display "var-high : " as-pointer of var-high
+ display "initial " as-pointer of move-target
+ move low-value to as-value of move-target
+ display "low-value " as-pointer of move-target
+ move space to as-value of move-target
+ display "space " as-pointer of move-target
+ move quote to as-value of move-target
+ display "quote " as-pointer of move-target
+ move zeroes to as-value of move-target
+ display "zeroes " as-pointer of move-target
+ move high-value to as-value of move-target
+ display "high-value " as-pointer of move-target
+ move X'01020304' to as-value of move-target
+ display "01020304 " as-pointer of move-target
+ move "33333333" to move-target
+ move X'00' to filler3 of move-target(1:1)
+ display "ref-mod " as-pointer of move-target
+ stop run.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out b/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out
new file mode 100644
index 0000000..366d0c2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_HEX__VALUE_and_MOVE.out
@@ -0,0 +1,16 @@
+the value is 0x3333040302013333
+should be 0x3333040302013333
+var-low : 0x3333000000003333
+var-space: 0x3333202020203333
+var-quote: 0x3333222222223333
+var-zero : 0x3333303030303333
+var-high : 0x3333ffffffff3333
+initial 0x3333333333333333
+low-value 0x3333000000003333
+space 0x3333202020203333
+quote 0x3333222222223333
+zeroes 0x3333303030303333
+high-value 0x3333ffffffff3333
+01020304 0x3333040302013333
+ref-mod 0x3300333333333333
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_IF.cob b/gcc/testsuite/cobol.dg/group2/Complex_IF.cob
new file mode 100644
index 0000000..aa3ebde
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_IF.cob
@@ -0,0 +1,23 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Complex_IF.out" }
+ identification division.
+ program-id. phonebook.
+ data division.
+ working-storage section.
+ 01 name1 pic x(10) value "one".
+ 01 name2 pic x(10) value "two".
+ 01 flag pic x value 'a'.
+ procedure division.
+ move 'l' to flag
+ perform checkit
+ goback.
+ checkit.
+ if (name1 = name2 and flag = "F" or "f" )
+ or flag = "L" or "l"
+ then
+ display "the test is TRUE"
+ else
+ display "the test is FALSE"
+ end-if.
+ end program phonebook.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Complex_IF.out b/gcc/testsuite/cobol.dg/group2/Complex_IF.out
new file mode 100644
index 0000000..ce94a61
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Complex_IF.out
@@ -0,0 +1,2 @@
+the test is TRUE
+
diff --git a/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob b/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob
new file mode 100644
index 0000000..fef757b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Concatenation_operator.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Concatenation_operator.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 STR PIC X(05).
+ PROCEDURE DIVISION.
+ MOVE "OK" & " "
+ & "OK"
+ TO STR
+ DISPLAY STR NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out b/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out
new file mode 100644
index 0000000..618798a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Concatenation_operator.out
@@ -0,0 +1 @@
+OK OK
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob
new file mode 100644
index 0000000..2362d15
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 99V99.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION MIN (3,,,,,,5) TO X.
+ DISPLAY X
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out
new file mode 100644
index 0000000..0b9310e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__1_.out
@@ -0,0 +1,2 @@
+00,50
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob
new file mode 100644
index 0000000..b69ee3b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 99V99.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION MIN (3,,,,,, 5) TO X.
+ DISPLAY X
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out
new file mode 100644
index 0000000..9dcfab9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__2_.out
@@ -0,0 +1,2 @@
+03,00
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob
new file mode 100644
index 0000000..114b9ea
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__3_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 99V99.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION MIN (3,,,,,, 1,5) TO X.
+ DISPLAY X
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out
new file mode 100644
index 0000000..5a24d4d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__3_.out
@@ -0,0 +1,2 @@
+01,50
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob
new file mode 100644
index 0000000..d969c73
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__4_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 99V99.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION MIN (3, 1,5) TO X.
+ DISPLAY X
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out
new file mode 100644
index 0000000..5a24d4d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__4_.out
@@ -0,0 +1,2 @@
+01,50
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob
new file mode 100644
index 0000000..2ca9881
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.cob
@@ -0,0 +1,23 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DECIMAL-POINT_is_COMMA__5_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 99V99.
+ PROCEDURE DIVISION.
+ COMPUTE X=1 + ,1
+ END-COMPUTE
+ DISPLAY X
+ END-DISPLAY.
+ COMPUTE X=1*,1
+ END-COMPUTE
+ DISPLAY X
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out
new file mode 100644
index 0000000..809e6ae
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DECIMAL-POINT_is_COMMA__5_.out
@@ -0,0 +1,3 @@
+01,10
+00,10
+
diff --git a/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob b/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob
new file mode 100644
index 0000000..60310f7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.cob
@@ -0,0 +1,30 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 x PIC 9 VALUE 1.
+ 01 y PIC 9.
+ 01 a COMP-1 VALUE 1.E20.
+ 01 b COMP-1 VALUE 1.E20.
+ PROCEDURE DIVISION.
+ DIVIDE x BY 0.1 GIVING y
+ DISPLAY FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ NOT = 'EC-SIZE-TRUNCATION'
+ DISPLAY 'Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF.
+ SET LAST EXCEPTION TO OFF
+ MULTIPLY a BY b GIVING b
+ DISPLAY FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ NOT = 'EC-SIZE-OVERFLOW'
+ DISPLAY 'Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out b/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out
new file mode 100644
index 0000000..8c86ad2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EC-SIZE-TRUNCATION_EC-SIZE-OVERFLOW.out
@@ -0,0 +1,3 @@
+EC-SIZE-TRUNCATION
+EC-SIZE-OVERFLOW
+
diff --git a/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob b/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob
new file mode 100644
index 0000000..8b5657b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.cob
@@ -0,0 +1,64 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 x PIC 9 VALUE 0.
+ 01 y PIC 9 VALUE 0.
+ 01 fx comp-2 VALUE 0.
+ 01 fy comp-2 VALUE 0.
+ PROCEDURE DIVISION.
+ DISPLAY "Fixed-point divide by zero:"
+ DIVIDE x BY y GIVING y
+ DISPLAY "1 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+ IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ NOT = 'EC-SIZE-ZERO-DIVIDE'
+ DISPLAY '1 Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF
+ SET LAST EXCEPTION TO OFF
+ DISPLAY "2 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+ IF FUNCTION EXCEPTION-STATUS NOT = SPACES
+ DISPLAY '2 Exception is not empty after reset: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF
+ MOVE 0 TO y
+ COMPUTE y = x - 1 / y + 6.5
+ DISPLAY "3 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+ IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ NOT = 'EC-SIZE-ZERO-DIVIDE'
+ DISPLAY '3 Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF.
+ SET LAST EXCEPTION TO OFF
+ DISPLAY "Floating-point divide by zero:"
+ DIVIDE fx BY fy GIVING fy
+ DISPLAY "4 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+ IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ NOT = 'EC-SIZE-ZERO-DIVIDE'
+ DISPLAY '4 Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF
+ SET LAST EXCEPTION TO OFF
+ DISPLAY "5 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+ IF FUNCTION EXCEPTION-STATUS NOT = SPACES
+ DISPLAY '5 Exception is not empty after reset: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF
+ MOVE 0 TO fy
+ COMPUTE fy = fx - 1 / fy + 6.5
+ DISPLAY "6 - """ FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """"
+ IF FUNCTION TRIM(FUNCTION EXCEPTION-STATUS)
+ NOT = 'EC-SIZE-ZERO-DIVIDE'
+ DISPLAY '6 Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out b/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out
new file mode 100644
index 0000000..93da1b8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EC-SIZE-ZERO-DIVIDE__fixed_and_float.out
@@ -0,0 +1,9 @@
+Fixed-point divide by zero:
+1 - "EC-SIZE-ZERO-DIVIDE"
+2 - ""
+3 - "EC-SIZE-ZERO-DIVIDE"
+Floating-point divide by zero:
+4 - "EC-SIZE-ZERO-DIVIDE"
+5 - ""
+6 - "EC-SIZE-ZERO-DIVIDE"
+
diff --git a/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob b/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob
new file mode 100644
index 0000000..b637ecb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EXIT_PARAGRAPH.cob
@@ -0,0 +1,21 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 INDVAL PIC 9(4).
+ PROCEDURE DIVISION.
+ A01.
+ PERFORM VARYING INDVAL FROM 1 BY 1 UNTIL INDVAL > 10
+ IF INDVAL > 2
+ EXIT PARAGRAPH
+ END-IF
+ END-PERFORM.
+ A02.
+ IF INDVAL NOT = 3
+ DISPLAY INDVAL NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob
new file mode 100644
index 0000000..d944ccd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/EXIT_PERFORM.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ PERFORM 2 TIMES
+ DISPLAY "OK" NO ADVANCING
+ END-DISPLAY
+ EXIT PERFORM
+ DISPLAY "NOT OK"
+ END-DISPLAY
+ END-PERFORM
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM.out
@@ -0,0 +1 @@
+OK
diff --git a/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob
new file mode 100644
index 0000000..7d67bd1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/EXIT_PERFORM_CYCLE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ PERFORM 2 TIMES
+ DISPLAY "OK" NO ADVANCING
+ END-DISPLAY
+ EXIT PERFORM CYCLE
+ DISPLAY "NOT OK"
+ END-DISPLAY
+ END-PERFORM
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out
new file mode 100644
index 0000000..d65874e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EXIT_PERFORM_CYCLE.out
@@ -0,0 +1 @@
+OKOK
diff --git a/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob b/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob
new file mode 100644
index 0000000..fc670f1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/EXIT_SECTION.cob
@@ -0,0 +1,25 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 INDVAL PIC 9(4).
+ PROCEDURE DIVISION.
+ A01 SECTION.
+ A011.
+ PERFORM VARYING INDVAL FROM 1 BY 1 UNTIL INDVAL > 10
+ IF INDVAL > 2
+ EXIT SECTION
+ END-IF
+ END-PERFORM.
+ A012.
+ DISPLAY INDVAL NO ADVANCING
+ END-DISPLAY.
+ A02 SECTION.
+ IF INDVAL NOT = 3
+ DISPLAY INDVAL NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob b/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob
new file mode 100644
index 0000000..d8c81a3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.cob
@@ -0,0 +1,43 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FLOAT-LONG_with_SIZE_ERROR.out" }
+
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ *------------------------
+ 77 counter pic s9(4) binary value zero.
+ * FLOAT-LONG
+ 77 doubleValue COMP-2 value 2.
+ 77 lastDoubleValue COMP-2.
+ ******************************************************************
+ procedure division.
+ main section.
+ perform varying counter from 1 by 1 until
+ counter > 1060
+ *> display 'counter: ' counter ', value: ' doubleValue
+ compute doubleValue = doubleValue * 2
+ ON SIZE ERROR
+ display 'SIZE ERROR raised'
+ end-display
+ display 'SIZE ERROR, last value = ' doubleValue
+ end-display
+ exit perform
+ not ON SIZE ERROR
+ if doubleValue > lastdoubleValue
+ move doubleValue to lastdoubleValue
+ else
+ display 'math ERROR, last value > current: '
+ lastdoubleValue ' > ' doubleValue
+ end-display
+ exit perform
+ end-if
+ end-compute
+ end-perform
+ display "counter is " counter
+ if not (counter >= 1023 and <=1025)
+ display ' '
+ display 'counter is ' counter
+ end-if
+ goback.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out b/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out
new file mode 100644
index 0000000..208bd8a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FLOAT-LONG_with_SIZE_ERROR.out
@@ -0,0 +1,4 @@
+SIZE ERROR raised
+SIZE ERROR, last value = 8.98846567431157954E+307
+counter is +1023
+
diff --git a/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob
new file mode 100644
index 0000000..e00676c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.cob
@@ -0,0 +1,164 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 CMP1 COMP-1.
+ 01 SV1 COMP-1.
+ 01 CMP2 COMP-2.
+ 01 SV2 COMP-2.
+
+ PROCEDURE DIVISION.
+ CND-000.
+
+ DISPLAY "--- COMP-1 ---"
+ COMPUTE CMP1 = (((1.0E7 / 2.1E0) / 3.1E0) - 5.0E-1) * 6.0E0
+ DISPLAY "A: " CMP1
+ COMPUTE CMP1 = (((1.0E7 / 2.9E0) / 3.9E0) - 5.0E-1) * 6.0E0
+ DISPLAY "B: " CMP1
+ MOVE ZERO TO CMP1.
+ COMPUTE CMP1 = 1.0E3 / 2.1E0
+ ON SIZE ERROR DISPLAY "Z: " CMP1 " SIZE ERROR"
+ NOT ON SIZE ERROR DISPLAY "Z: " CMP1 " IS OK"
+ END-COMPUTE.
+
+ DISPLAY " ..."
+ DISPLAY "--- COMP-2 ---"
+ COMPUTE CMP2 = (((1.0E7 / 2.1E0) / 3.1E0) - 5.0E-1) * 6.0E0
+ *> because of possible rounding of intermediates and different
+ *> precision depending on math library / version: plain DISPLAY
+ IF CMP2 >= 9216586.86175114 AND <= 9216586.86175116
+ DISPLAY "A ~ 9216586.86175115"
+ ELSE
+ DISPLAY "A: " CMP2
+ END-IF
+ COMPUTE CMP2 = (((1.0E7 / 2.9E0) / 3.9E0) - 5.0E-1) * 6.0E0
+ IF CMP2 >= 5305036.7877983 AND <= 5305036.7877985
+ DISPLAY "B ~ 5305036.787798408"
+ ELSE
+ DISPLAY "B: " CMP2
+ END-IF
+ MOVE ZERO TO CMP2.
+ COMPUTE CMP2 = 1.0E3 / 2.1E0
+ ON SIZE ERROR DISPLAY "Z: " CMP2 " SIZE ERROR"
+ NOT ON SIZE ERROR
+ *> see note above
+ IF CMP2 >= 476.1904761904760 AND <= 476.1904761904763
+ DISPLAY "Z ~ 476.1904761904761 IS OK"
+ ELSE
+ DISPLAY "Z: " CMP2 " IS OK"
+ END-IF
+ END-COMPUTE.
+
+ DISPLAY " ..."
+ DISPLAY "--- 99 + 1 / 3 ---"
+ MOVE -1 TO CMP1, CMP2.
+ COMPUTE CMP1 = 99 + 1 / 3
+ ON SIZE ERROR DISPLAY "CMP1: " CMP1 " SIZE ERROR"
+ NOT ON SIZE ERROR DISPLAY "CMP1: " CMP1 " IS OK"
+ END-COMPUTE.
+ COMPUTE CMP2 = 99 + 1 / 3
+ ON SIZE ERROR DISPLAY "CMP2: " CMP2 " SIZE ERROR"
+ NOT ON SIZE ERROR DISPLAY "CMP2: " CMP2 " IS OK"
+ END-COMPUTE.
+
+ DISPLAY " ..."
+ DISPLAY "--- 99 ---"
+ MOVE -1 TO CMP1, CMP2.
+ COMPUTE CMP1 = 99
+ ON SIZE ERROR DISPLAY "CMP1: " CMP1 " SIZE ERROR"
+ NOT ON SIZE ERROR DISPLAY "CMP1: " CMP1 " IS OK"
+ END-COMPUTE.
+ COMPUTE CMP2 = 99
+ ON SIZE ERROR DISPLAY "CMP2: " CMP2 " SIZE ERROR"
+ NOT ON SIZE ERROR DISPLAY "CMP2: " CMP2 " IS OK"
+ END-COMPUTE.
+
+ CND-100-OK.
+ DISPLAY " ..."
+ DISPLAY "--- Test overflow ---"
+
+ MOVE 990000 TO CMP1.
+ PERFORM 6500 TIMES
+ MOVE CMP1 TO SV1
+ COMPUTE CMP1 = CMP1 * 10
+ ON SIZE ERROR GO TO CND-350-ERR
+ END-COMPUTE
+ IF CMP1 < 9.0
+ GO TO CND-350-ERR
+ END-IF
+ END-PERFORM.
+ DISPLAY "CMP1: " CMP1 " IS OK".
+ GO TO CND-350-OK.
+ CND-350-ERR.
+ DISPLAY "CMP1: after " SV1 " SIZE ERROR".
+
+ CND-350-OK.
+ MOVE 9900000000 TO CMP2.
+ PERFORM 6500 TIMES
+ MOVE CMP2 TO SV2
+ COMPUTE CMP2 = CMP2 * 10
+ ON SIZE ERROR GO TO CND-380-ERR
+ END-COMPUTE
+ IF CMP2 < 9.0
+ GO TO CND-380-ERR
+ END-IF
+ END-PERFORM.
+ DISPLAY "CMP2: " CMP2 " IS OK".
+ GO TO CND-500-OK.
+ CND-380-ERR.
+ *> because of possible rounding of intermediates and different
+ *> precision depending on math library / version: plain DISPLAY
+ IF SV2 >= 9.899999999999E+307 AND
+ <= 9.900000000001E+307
+ DISPLAY "CMP2: after ~ 9.899999999999781E+307 SIZE ERROR"
+ ELSE
+ DISPLAY "CMP2: after " SV2 " SIZE ERROR"
+ END-IF
+ .
+
+ CND-500-OK.
+ MOVE 0.000000099 TO CMP1.
+ PERFORM 350 TIMES
+ MOVE CMP1 TO SV1
+ COMPUTE CMP1 = CMP1 / 10.0
+ ON SIZE ERROR GO TO CND-500-ERR
+ END-COMPUTE
+ IF CMP1 = 0.0
+ GO TO CND-500-ERR
+ END-IF
+ END-PERFORM.
+ DISPLAY "CMP1: " CMP1 " IS OK".
+ GO TO CND-600-OK.
+ CND-500-ERR.
+ DISPLAY "CMP1: after " SV1 " SIZE ERROR".
+
+ CND-600-OK.
+ MOVE 0.000000099 TO CMP2.
+ PERFORM 350 TIMES
+ MOVE CMP2 TO SV2
+ COMPUTE CMP2 = CMP2 / 10.0
+ ON SIZE ERROR GO TO CND-600-ERR
+ END-COMPUTE
+ IF CMP2 = 0.0
+ GO TO CND-600-ERR
+ END-IF
+ END-PERFORM.
+ DISPLAY "CMP2: " CMP2 " IS OK".
+ GO TO CND-600-XIT.
+ CND-600-ERR.
+ IF SV2 >= 9.8813129168249E-324 AND <= 9.881312916825E-324
+ DISPLAY "CMP2: after ~ 9.881312916824931E-324 SIZE ERROR"
+ ELSE
+ DISPLAY "CMP2: after " SV2 " SIZE ERROR"
+ END-IF
+ .
+ CND-600-XIT.
+
+ CND-999.
+ STOP RUN.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out
new file mode 100644
index 0000000..18fc770
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT___FLOAT-LONG_w_o_SIZE_ERROR.out
@@ -0,0 +1,24 @@
+--- COMP-1 ---
+A: 9.216587E+06
+B: 5.305037E+06
+Z: 476.1904907 IS OK
+ ...
+--- COMP-2 ---
+A ~ 9216586.86175115
+B ~ 5305036.787798408
+Z ~ 476.1904761904761 IS OK
+ ...
+--- 99 + 1 / 3 ---
+CMP1: 99.33333588 IS OK
+CMP2: 99.3333333333333286 IS OK
+ ...
+--- 99 ---
+CMP1: 99 IS OK
+CMP2: 99 IS OK
+ ...
+--- Test overflow ---
+CMP1: after 9.899998274E+37 SIZE ERROR
+CMP2: after ~ 9.899999999999781E+307 SIZE ERROR
+CMP1: after 1.401298464E-45 SIZE ERROR
+CMP2: after ~ 9.881312916824931E-324 SIZE ERROR
+
diff --git a/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob
new file mode 100644
index 0000000..b194442
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.cob
@@ -0,0 +1,40 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FLOAT-SHORT_with_SIZE_ERROR.out" }
+
+ identification division.
+ program-id. prog.
+
+ data division.
+ working-storage section.
+ *------------------------
+ 77 counter pic s9(4) binary value zero.
+ * FLOAT-SHORT (if binary-comp-1 is not active)
+ 77 floatValue COMP-1 value 2.
+ 77 lastFloatValue COMP-1.
+
+ ******************************************************************
+ procedure division.
+ main section.
+ perform varying counter from 1 by 1 until
+ counter > 130
+ *> display 'counter: ' counter ', value: ' floatValue
+ compute floatValue = floatValue * 2
+ ON SIZE ERROR
+ display 'SIZE ERROR, last value = ' floatValue
+ exit perform
+ not ON SIZE ERROR
+ if floatValue > lastFloatValue
+ move floatValue to lastFloatValue
+ else
+ display 'math ERROR, last value > current: '
+ lastFloatValue ' > ' floatValue
+ exit perform
+ end-if
+ end-compute
+ end-perform
+ if counter not = 127
+ display 'counter is ' counter
+ end-if
+
+ goback.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out
new file mode 100644
index 0000000..e5ba05f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FLOAT-SHORT_with_SIZE_ERROR.out
@@ -0,0 +1,2 @@
+SIZE ERROR, last value = 1.701411835E+38
+
diff --git a/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob b/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob
new file mode 100644
index 0000000..2c23e7b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Fixed_continuation_indicator.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(333) VALUE
+ '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
+ - 'YZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV
+ - 'WXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST
+ - 'UVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR
+ - 'STUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
+ - 'QRSTUVWXYZ'.
+ PROCEDURE DIVISION.
+ DISPLAY X NO ADVANCING
+ END-DISPLAY.
+ DISPLAY '_'
+ END-DISPLAY.
+ MOVE
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567
+ - "89abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345
+ - "6789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123
+ - "456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01
+ - "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY
+ - "Z
+ - "0123456789" TO X.
+ DISPLAY X NO ADVANCING
+ END-DISPLAY.
+ DISPLAY '_'
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out b/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out
new file mode 100644
index 0000000..2a472b8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Fixed_continuation_indicator.out
@@ -0,0 +1,3 @@
+0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ _
+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 _
+
diff --git a/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob b/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob
new file mode 100644
index 0000000..88c24fd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Index_and_parenthesized_expression.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 G.
+ 02 X PIC X OCCURS 1 INDEXED BY I.
+ PROCEDURE DIVISION.
+ IF I < (I + 2)
+ DISPLAY "OK" NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out b/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Index_and_parenthesized_expression.out
@@ -0,0 +1 @@
+OK
diff --git a/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob b/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob
new file mode 100644
index 0000000..7b24aed
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.cob
@@ -0,0 +1,107 @@
+ *> { dg-do run }
+ *> { dg-options "-dialect ibm" }
+ *> { dg-output-file "group2/LENGTH_OF_omnibus.out" }
+
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 desc1.
+ 05 desc1-entry pic x(5) occurs 10.
+
+ 01 desc2.
+ 05 desc2-table occurs 10 times.
+ 10 desc2-entry pic x(5).
+
+ 01 desc3.
+ 05 desc3-outer occurs 1 to 5 times depending on desc3-lim.
+ 10 desc3-outer-txt pic x(7).
+ 10 desc3-inner occurs 11 times.
+ 15 desc3-inner-text pic x(13).
+ 77 desc3-lim binary-long.
+
+ 77 msg pic x(64).
+ 77 should-be pic zzzz9.
+ 77 but-is pic zzzz9.
+
+ procedure division.
+
+ display "using LENGTH OF"
+
+ move "Length of desc1" to msg
+ move 50 to should-be
+ move length of desc1 to but-is
+ perform result-is
+
+ move "Length of desc1-entry" to msg
+ move 5 to should-be
+ move length of desc1-entry to but-is
+ perform result-is
+
+ move "Length of desc1-entry(1)" to msg
+ move 5 to should-be
+ move length of desc1-entry(1) to but-is
+ perform result-is
+
+ move "Length of desc2" to msg
+ move 50 to should-be
+ move length of desc2 to but-is
+ perform result-is
+
+ move "Length of desc2-table" to msg
+ move 5 to should-be
+ move length of desc2-table to but-is
+ perform result-is
+
+ move "Length of desc2-entry" to msg
+ move 5 to should-be
+ move length of desc2-entry to but-is
+ perform result-is
+
+ move "Length of desc2-entry(1)" to msg
+ move 5 to should-be
+ move length of desc2-entry(1) to but-is
+ perform result-is
+
+ move 5 to desc3-lim
+
+ move "Length of desc3" to msg
+ move 750 to should-be
+ move length of desc3 to but-is
+ perform result-is
+
+ move "Length of desc3-outer" to msg
+ move 150 to should-be
+ move length of desc3-outer to but-is
+ perform result-is
+
+ move "Length of desc3-outer(1)" to msg
+ move 150 to should-be
+ move length of desc3-outer(1) to but-is
+ perform result-is
+
+ move "Length of desc3-outer-txt" to msg
+ move 7 to should-be
+ move length of desc3-outer-txt to but-is
+ perform result-is
+
+ move "Length of desc3-inner" to msg
+ move 13 to should-be
+ move length of desc3-inner to but-is
+ perform result-is
+
+ move "Length of desc3-inner(1)" to msg
+ move 13 to should-be
+ move length of desc3-inner(1) to but-is
+ perform result-is
+
+ goback.
+ result-is.
+ display function trim(msg) ": " with no advancing
+ if but-is equal to should-be
+ display function trim(but-is)
+ else
+ display "should be " function trim(should-be)
+ " but is " function trim(but-is)
+ end-if.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out b/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out
new file mode 100644
index 0000000..e4cf801
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/LENGTH_OF_omnibus.out
@@ -0,0 +1,15 @@
+using LENGTH OF
+Length of desc1: 50
+Length of desc1-entry: 5
+Length of desc1-entry(1): 5
+Length of desc2: 50
+Length of desc2-table: 5
+Length of desc2-entry: 5
+Length of desc2-entry(1): 5
+Length of desc3: 750
+Length of desc3-outer: 150
+Length of desc3-outer(1): 150
+Length of desc3-outer-txt: 7
+Length of desc3-inner: 13
+Length of desc3-inner(1): 13
+
diff --git a/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob
new file mode 100644
index 0000000..a4410fa
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.cob
@@ -0,0 +1,28 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ PROCEDURE DIVISION.
+ CALL "callee"
+ END-CALL.
+ STOP RUN.
+ end program caller.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. callee.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WRK-X PIC 999 VALUE 5.
+ LOCAL-STORAGE SECTION.
+ 01 LCL-X PIC 999 .
+ PROCEDURE DIVISION.
+ display "On entry: " wrk-x
+ move wrk-x to lcl-x
+ subtract 1 from wrk-x
+ if wrk-x > 0
+ call "callee".
+ display "On exit: " lcl-x
+ goback.
+ end program callee.
+
diff --git a/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out
new file mode 100644
index 0000000..839de4f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__3__with_recursive_PROGRAM-ID.out
@@ -0,0 +1,11 @@
+On entry: 005
+On entry: 004
+On entry: 003
+On entry: 002
+On entry: 001
+On exit: 001
+On exit: 002
+On exit: 003
+On exit: 004
+On exit: 005
+
diff --git a/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob
new file mode 100644
index 0000000..64d0072
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.cob
@@ -0,0 +1,28 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ PROCEDURE DIVISION.
+ CALL "callee"
+ END-CALL.
+ STOP RUN.
+ end program caller.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. callee.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WRK-X PIC 999 VALUE 5.
+ LOCAL-STORAGE SECTION.
+ 01 LCL-X PIC 999 .
+ PROCEDURE DIVISION.
+ display "On entry: " wrk-x
+ move wrk-x to lcl-x
+ subtract 1 from wrk-x
+ if wrk-x > 0
+ call "callee".
+ display "On exit: " lcl-x
+ goback.
+ end program callee.
+
diff --git a/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out
new file mode 100644
index 0000000..839de4f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/LOCAL-STORAGE__4__with_recursive_PROGRAM-ID_..._USING.out
@@ -0,0 +1,11 @@
+On entry: 005
+On entry: 004
+On entry: 003
+On entry: 002
+On entry: 001
+On exit: 001
+On exit: 002
+On exit: 003
+On exit: 004
+On exit: 005
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob b/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob
new file mode 100644
index 0000000..c92ab35
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.cob
@@ -0,0 +1,34 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/MOVE_Z_literal_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC XXXX.
+ 01 XRED REDEFINES X.
+ 03 XBYTE1 PIC X.
+ 03 XBYTE2 PIC X.
+ 03 XBYTE3 PIC X.
+ 03 XBYTE4 PIC X.
+ PROCEDURE DIVISION.
+ MOVE Z"012" TO X.
+ IF XBYTE1 = "0" AND
+ XBYTE2 = "1" AND
+ XBYTE3 = "2" AND
+ XBYTE4 = LOW-VALUE
+ DISPLAY "OK" NO ADVANCING
+ END-DISPLAY
+ ELSE
+ DISPLAY "X = " X (1:3) NO ADVANCING
+ END-DISPLAY
+ IF XBYTE4 = LOW-VALUE
+ DISPLAY " WITH LOW-VALUE"
+ END-DISPLAY
+ ELSE
+ DISPLAY " WITHOUT LOW-VALUE BUT '" XBYTE4 "'"
+ END-DISPLAY
+ END-IF
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out b/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_Z_literal_.out
@@ -0,0 +1 @@
+OK
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob b/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob
new file mode 100644
index 0000000..9ededd2c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_indexes.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 G.
+ 02 X PIC X OCCURS 10 INDEXED I.
+ PROCEDURE DIVISION.
+ SET I TO ZERO.
+ SET X(1) TO I
+ IF X(1) NOT = "0"
+ DISPLAY X(1) NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob b/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob
new file mode 100644
index 0000000..61be48f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/MOVE_integer_literal_to_alphanumeric.out" }
+
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(04) VALUE SPACES.
+ PROCEDURE DIVISION.
+ MOVE 0 TO X.
+ DISPLAY X NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out b/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out
new file mode 100644
index 0000000..4af5951
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_integer_literal_to_alphanumeric.out
@@ -0,0 +1 @@
+0
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob b/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob
new file mode 100644
index 0000000..37f813f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.cob
@@ -0,0 +1,31 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/MOVE_to_JUSTIFIED_item.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 SRC-1 PIC S9(04) VALUE 11.
+ 01 SRC-2 PIC S9(04) COMP VALUE 22.
+ 01 SRC-3 PIC S9(04) COMP-5 VALUE 33.
+ 01 SRC-4 PIC S9(04)PP VALUE 4400.
+ 01 SRC-5 PIC S9(04)PPPPP VALUE 55500000.
+ 01 EDT-FLD PIC X(07) JUSTIFIED RIGHT.
+ PROCEDURE DIVISION.
+ MOVE SRC-1 TO EDT-FLD.
+ DISPLAY '>' EDT-FLD '<'
+ END-DISPLAY.
+ MOVE SRC-2 TO EDT-FLD.
+ DISPLAY '>' EDT-FLD '<'
+ END-DISPLAY.
+ MOVE SRC-3 TO EDT-FLD.
+ DISPLAY '>' EDT-FLD '<'
+ END-DISPLAY.
+ MOVE SRC-4 TO EDT-FLD.
+ DISPLAY '>' EDT-FLD '<'
+ END-DISPLAY.
+ MOVE SRC-5 TO EDT-FLD.
+ DISPLAY '>' EDT-FLD '<'
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out b/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out
new file mode 100644
index 0000000..5e300fa
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_JUSTIFIED_item.out
@@ -0,0 +1,6 @@
+> 0011<
+> 0022<
+> 0033<
+> 004400<
+>5500000<
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob
new file mode 100644
index 0000000..86ef0ae
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.cob
@@ -0,0 +1,35 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/MOVE_to_edited_item__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 SRC-1 PIC S99V99 VALUE 1.10.
+ 01 SRC-2 PIC S99V99 VALUE 0.02.
+ 01 SRC-3 PIC S99V99 VALUE -0.03.
+ 01 SRC-4 PIC S99V99 VALUE -0.04.
+ 01 SRC-5 PIC S99V99 VALUE -0.05.
+ 01 EDT-1 PIC -(04)9.
+ 01 EDT-2 PIC -(04)9.
+ 01 EDT-3 PIC -(04)9.
+ 01 EDT-4 PIC +(04)9.
+ 01 EDT-5 PIC -(05).
+ PROCEDURE DIVISION.
+ MOVE SRC-1 TO EDT-1.
+ MOVE SRC-2 TO EDT-2.
+ MOVE SRC-3 TO EDT-3.
+ MOVE SRC-4 TO EDT-4.
+ MOVE SRC-5 TO EDT-5.
+ DISPLAY '>' EDT-1 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-2 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-3 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-4 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-5 '<'
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out
new file mode 100644
index 0000000..9557d50
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__1_.out
@@ -0,0 +1,6 @@
+> 1<
+> 0<
+> 0<
+> +0<
+> <
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob
new file mode 100644
index 0000000..cde8096
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.cob
@@ -0,0 +1,35 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/MOVE_to_edited_item__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 SRC-1 PIC S99V99 VALUE -0.06.
+ 01 SRC-2 PIC S99V99 VALUE -0.07.
+ 01 SRC-3 PIC S99V99 VALUE -0.08.
+ 01 SRC-4 PIC S99V99 VALUE -0.09.
+ 01 SRC-5 PIC S99V99 VALUE -1.10.
+ 01 EDT-1 PIC 9(04)-.
+ 01 EDT-2 PIC 9(04)+.
+ 01 EDT-3 PIC Z(04)+.
+ 01 EDT-4 PIC 9(04)DB.
+ 01 EDT-5 PIC 9(04)DB.
+ PROCEDURE DIVISION.
+ MOVE SRC-1 TO EDT-1.
+ MOVE SRC-2 TO EDT-2.
+ MOVE SRC-3 TO EDT-3.
+ MOVE SRC-4 TO EDT-4.
+ MOVE SRC-5 TO EDT-5.
+ DISPLAY '>' EDT-1 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-2 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-3 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-4 '<'
+ END-DISPLAY.
+ DISPLAY '>' EDT-5 '<'
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out
new file mode 100644
index 0000000..a704296
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_edited_item__2_.out
@@ -0,0 +1,6 @@
+>0000 <
+>0000+<
+> <
+>0000 <
+>0001DB<
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob b/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob
new file mode 100644
index 0000000..92711a9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.cob
@@ -0,0 +1,23 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/MOVE_to_item_with_simple_and_floating_insertion.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 num-1 PIC -*B*99.
+ 01 num-2 PIC $BB**,***.**.
+ 01 num-3 PIC $BB--,---.--.
+
+ PROCEDURE DIVISION.
+ MOVE -123 TO num-1
+ DISPLAY ">" num-1 "<"
+
+ MOVE 1234.56 TO num-2
+ DISPLAY ">" num-2 "<"
+
+ MOVE 1234.56 TO num-3
+ DISPLAY ">" num-3 "<"
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out b/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out
new file mode 100644
index 0000000..9012693
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_item_with_simple_and_floating_insertion.out
@@ -0,0 +1,4 @@
+>-**123<
+>$ *1,234.56<
+>$ 1,234.56<
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob b/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob
new file mode 100644
index 0000000..475b5d9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_to_itself.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 99 VALUE 12.
+ PROCEDURE DIVISION.
+ MOVE X TO X.
+ IF X NOT = 12
+ DISPLAY X NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob b/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob
new file mode 100644
index 0000000..834d81d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_with_group_refmod.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 G.
+ 02 X PIC 9999 VALUE 1234.
+ PROCEDURE DIVISION.
+ MOVE "99" TO G(3:2).
+ IF G NOT = "1299"
+ DISPLAY G NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob b/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob
new file mode 100644
index 0000000..455951a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 9(4) VALUE 0.
+ PROCEDURE DIVISION.
+ MOVE "1" TO X(1:1).
+ IF X NOT = 1000
+ DISPLAY X NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob b/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob
new file mode 100644
index 0000000..b3fb550
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MOVE_with_refmod__variable_.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "1234".
+ 01 Y PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 1.
+ PROCEDURE DIVISION.
+ MOVE X(1:I) TO Y.
+ IF Y NOT = "1 "
+ DISPLAY Y NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob b/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob
new file mode 100644
index 0000000..6aa9388
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.cob
@@ -0,0 +1,35 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Multi-target_MOVE_with_subscript_re-evaluation.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. mover.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FILLER.
+ 02 ADATA VALUE "654321".
+ 02 A REDEFINES ADATA PIC 9 OCCURS 6 TIMES.
+ 02 B PIC 9.
+ 02 CDATA VALUE "999999".
+ 02 C REDEFINES CDATA PIC 9 OCCURS 6 TIMES.
+ 01 TEMP PIC 9.
+ PROCEDURE DIVISION.
+ INITIALIZE CDATA ALL TO VALUE
+ MOVE 2 TO B
+ MOVE A(B) TO B, C(B)
+ *> That should pick up 5, move it to B, and then move 5 to C(5),
+ IF CDATA NOT EQUAL TO "999959"
+ DISPLAY CDATA " Should be ""999959"", but isn't"
+ ELSE
+ DISPLAY CDATA " Should be ""999959""".
+ *> See 14.9.25.4 MOVE General Rules
+ INITIALIZE CDATA ALL TO VALUE
+ MOVE 2 TO B
+ MOVE A(B) TO TEMP
+ MOVE TEMP TO B
+ MOVE TEMP TO C(B)
+ IF CDATA NOT EQUAL TO "999959"
+ DISPLAY CDATA " Should be ""999959"", but isn't"
+ ELSE
+ DISPLAY CDATA " Should be ""999959""".
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out b/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out
new file mode 100644
index 0000000..30076d7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Multi-target_MOVE_with_subscript_re-evaluation.out
@@ -0,0 +1,3 @@
+999959 Should be "999959"
+999959 Should be "999959"
+
diff --git a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
new file mode 100644
index 0000000..6b38f79
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.cob
@@ -0,0 +1,27 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Non-numeric_data_in_numeric_items__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X.
+ 03 X-NUM PIC 9(06) VALUE 123.
+ 77 NUM PIC 9(06).
+ PROCEDURE DIVISION.
+ MOVE x"0000" TO X (2:2)
+ IF X-NUM NUMERIC
+ DISPLAY "low-value is numeric" UPON SYSERR
+ END-DISPLAY
+ END-IF
+ MOVE x"01" TO X (3:1)
+ IF X-NUM NUMERIC
+ DISPLAY "SOH is numeric" UPON SYSERR
+ END-DISPLAY
+ END-IF
+ MOVE X-NUM TO NUM
+ DISPLAY "test over"
+ END-DISPLAY
+ *
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
new file mode 100644
index 0000000..ac61d84
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__1_.out
@@ -0,0 +1,2 @@
+test over
+
diff --git a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
new file mode 100644
index 0000000..e80071f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Non-numeric_data_in_numeric_items__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X.
+ 03 X-NUM PIC 9(06) PACKED-DECIMAL VALUE 123.
+ 77 NUM PIC 9(06).
+ PROCEDURE DIVISION.
+ MOVE x"0A" TO X (2:1)
+ IF X-NUM NUMERIC
+ DISPLAY "bad prog"
+ END-DISPLAY
+ END-IF
+ MOVE X-NUM TO NUM
+ DISPLAY "test over"
+ END-DISPLAY
+ *
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out
new file mode 100644
index 0000000..ac61d84
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Non-numeric_data_in_numeric_items__2_.out
@@ -0,0 +1,2 @@
+test over
+
diff --git a/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob b/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob
new file mode 100644
index 0000000..fb6cdc7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Non-overflow_after_overflow.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 9(2) VALUE 0.
+ 01 Y PIC 9(2) VALUE 0.
+ PROCEDURE DIVISION.
+ COMPUTE X = 100
+ END-COMPUTE.
+ COMPUTE Y = 99
+ END-COMPUTE.
+ IF Y NOT = 99
+ DISPLAY Y NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob b/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob
new file mode 100644
index 0000000..f244407
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/OCCURS_clause_with_1_entry.cob
@@ -0,0 +1,40 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 D1.
+ 03 FILLER OCCURS 1.
+ 05 D1-ENTRY PIC X(03) value '123'.
+ 01 D2.
+ 03 D2-ENTRY PIC X(03) value 'ABC' OCCURS 1.
+ 01 D1TOR.
+ 03 FILLER PIC X(03) value '456'.
+ 01 D1-R REDEFINES D1TOR.
+ 03 FILLER OCCURS 1.
+ 05 D1-R-ENTRY PIC X(03).
+ 01 D2TOR.
+ 03 FILLER PIC X(03) value 'DEF'.
+ 01 D2-R REDEFINES D2TOR.
+ 03 D2-R-ENTRY PIC X(03) OCCURS 1.
+
+ PROCEDURE DIVISION.
+ IF D1-ENTRY (1) NOT = "123"
+ DISPLAY D1-ENTRY (1)
+ END-DISPLAY
+ END-IF.
+ IF D2-ENTRY (1) NOT = "ABC"
+ DISPLAY D2-ENTRY (1)
+ END-DISPLAY
+ END-IF.
+ IF D1-R-ENTRY (1) NOT = "456"
+ DISPLAY D1-R-ENTRY (1)
+ END-DISPLAY
+ END-IF.
+ IF D2-R-ENTRY (1) NOT = "DEF"
+ DISPLAY D2-R-ENTRY (1)
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob b/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob
new file mode 100644
index 0000000..ff047bf
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.cob
@@ -0,0 +1,40 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/OSVS_Arithmetic_Test__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 VAL PIC S9(7)V99 COMP-3 VALUE 20500.
+ 01 DIV1 PIC S9(7)V99 COMP-3 VALUE 0.9.
+ 01 DIV2 PIC S9(7)V99 COMP-3 VALUE 33.45.
+ 01 DIV3 PIC S9(7)V99 COMP-3 VALUE 9.
+ 01 MUL1 PIC S9(7)V99 COMP-3 VALUE 10.
+ 01 MUL2 PIC S9(7)V99 COMP-3 VALUE 5.
+ 01 MUL3 PIC S9(7)V99 COMP-3 VALUE 2.
+ 01 RES PIC S9(7)V99 COMP-3.
+ PROCEDURE DIVISION.
+ COMPUTE RES = VAL / DIV1 / DIV2.
+ DISPLAY 'RES = ' RES.
+ COMPUTE RES ROUNDED = VAL / DIV1 / DIV2.
+ DISPLAY 'RES ROUNDED = ' RES.
+ COMPUTE RES = VAL * MUL1 / DIV3 / DIV2.
+ DISPLAY 'RES MULT1 = ' RES.
+ COMPUTE RES = VAL * MUL2 * MUL3 / DIV3 / DIV2.
+ DISPLAY 'RES MULT2 = ' RES.
+ COMPUTE RES = VAL / DIV1.
+ DISPLAY 'RES 1 = ' RES.
+ COMPUTE RES = RES / DIV2.
+ DISPLAY 'RES F = ' RES.
+ COMPUTE RES =
+ VAL / DIV1 / DIV2.
+ DISPLAY 'RES NOT ROUNDED = ' RES.
+ COMPUTE RES ROUNDED MODE NEAREST-AWAY-FROM-ZERO =
+ VAL / DIV1 / DIV2.
+ DISPLAY 'RES ROUNDED NEAREST-AWAY = ' RES.
+ COMPUTE RES ROUNDED MODE AWAY-FROM-ZERO =
+ VAL / DIV1 / DIV2.
+ DISPLAY 'RES ROUNDED AWAY = ' RES.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out b/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out
new file mode 100644
index 0000000..d0816cd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/OSVS_Arithmetic_Test__2_.out
@@ -0,0 +1,10 @@
+RES = +0000680.95
+RES ROUNDED = +0000680.95
+RES MULT1 = +0000680.95
+RES MULT2 = +0000680.95
+RES 1 = +0022777.77
+RES F = +0000680.94
+RES NOT ROUNDED = +0000680.95
+RES ROUNDED NEAREST-AWAY = +0000680.95
+RES ROUNDED AWAY = +0000680.96
+
diff --git a/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob b/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob
new file mode 100644
index 0000000..5f39fc5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/PERFORM_..._CONTINUE.cob
@@ -0,0 +1,9 @@
+ *> { dg-do compile }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ PERFORM 2 TIMES
+ CONTINUE
+ END-PERFORM.
+
diff --git a/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob b/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob
new file mode 100644
index 0000000..7f6f3aa
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/PERFORM_inline__1_.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 INDVAL PIC 9(4).
+ PROCEDURE DIVISION.
+ PERFORM VARYING INDVAL FROM 1
+ BY 1 UNTIL INDVAL > 2
+ CONTINUE
+ END-PERFORM
+ IF INDVAL NOT = 3
+ DISPLAY INDVAL NO ADVANCING
+ END-DISPLAY
+ END-IF
+ STOP RUN
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob b/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob
new file mode 100644
index 0000000..e3e0458
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/PERFORM_inline__2_.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 INDVAL PIC 9(4).
+ PROCEDURE DIVISION.
+ PERFORM VARYING INDVAL FROM 1
+ BY 1 UNTIL INDVAL > 2
+ CONTINUE
+ END-PERFORM
+ IF INDVAL NOT = 3
+ DISPLAY INDVAL NO ADVANCING
+ END-DISPLAY
+ END-IF
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob b/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob
new file mode 100644
index 0000000..e64d679
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/PERFORM_type_OSVS.cob
@@ -0,0 +1,28 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 MYOCC PIC 9(8) COMP VALUE 0.
+ PROCEDURE DIVISION.
+ ASTART SECTION.
+ A01.
+ PERFORM BTEST.
+ IF MYOCC NOT = 2
+ DISPLAY MYOCC
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+ BTEST SECTION.
+ B01.
+ PERFORM B02 VARYING MYOCC FROM 1 BY 1
+ UNTIL MYOCC > 5.
+ GO TO B99.
+ B02.
+ IF MYOCC > 1
+ GO TO B99
+ END-IF.
+ B99.
+ EXIT.
+
diff --git a/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob b/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob
new file mode 100644
index 0000000..a8ad589
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/PIC_ZZZ-__ZZZ_.cob
@@ -0,0 +1,44 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X-ZZZN PIC ZZZ-.
+ 01 XZN-RED REDEFINES X-ZZZN PIC X(4).
+ 01 X-ZZZP PIC ZZZ+.
+ 01 XZP-RED REDEFINES X-ZZZP PIC X(4).
+ PROCEDURE DIVISION.
+ MOVE -1 TO X-ZZZN.
+ IF XZN-RED NOT = " 1-"
+ DISPLAY "(" X-ZZZN ")"
+ END-DISPLAY
+ END-IF.
+ MOVE 0 TO X-ZZZN.
+ IF XZN-RED NOT = " "
+ DISPLAY "(" X-ZZZN ")"
+ END-DISPLAY
+ END-IF.
+ MOVE +1 TO X-ZZZN.
+ IF XZN-RED NOT = " 1 "
+ DISPLAY "(" X-ZZZN ")"
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO X-ZZZP.
+ IF XZP-RED NOT = " 1-"
+ DISPLAY "(" X-ZZZP ")"
+ END-DISPLAY
+ END-IF.
+ MOVE 0 TO X-ZZZP.
+ IF XZP-RED NOT = " "
+ DISPLAY "(" X-ZZZP ")"
+ END-DISPLAY
+ END-IF.
+ MOVE +1 TO X-ZZZP.
+ IF XZP-RED NOT = " 1+"
+ DISPLAY "(" X-ZZZP ")"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob b/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob
new file mode 100644
index 0000000..5e73de6
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+ *> { dg-options "-dialect mf" }
+ *> { dg-output-file "group2/Quick_check_of_PIC_XX_COMP-5.out" }
+ identification division.
+ program-id. wrapper.
+ data division.
+ working-storage section.
+ 01 memx pic x(2) comp-5.
+ 77 ptr pointer.
+ procedure division.
+ Initialize ptr.display "LENGTH OF X(2) is " length of memx
+ move 12345 to memx
+ display memx
+ IF ptr <> NULL then display 'bad pointer'.
+ goback.
+ end program wrapper.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out b/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out
new file mode 100644
index 0000000..a79f3be
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Quick_check_of_PIC_XX_COMP-5.out
@@ -0,0 +1,3 @@
+LENGTH OF X(2) is 2
+12345
+
diff --git a/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob b/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob
new file mode 100644
index 0000000..70564e4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.cob
@@ -0,0 +1,11 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Quote_marks_in_comment_paragraphs.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATE-written. hello'".
+ *> Written is intentionally lowercase.
+ *> extra " to fix syntax highlighting
+ PROCEDURE DIVISION.
+ DISPLAY "Hello, world!".
+
diff --git a/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out b/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out
new file mode 100644
index 0000000..297edb3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Quote_marks_in_comment_paragraphs.out
@@ -0,0 +1,2 @@
+Hello, world!
+
diff --git a/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob b/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob
new file mode 100644
index 0000000..2367ad5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.cob
@@ -0,0 +1,38 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TSRDF.
+ 05 WS-ASK-ID-DATE PIC X(10).
+ 05 WS-ASK-ID-DATE-R REDEFINES WS-ASK-ID-DATE.
+ 10 WS-ASK-ID-DATE-YYYY PIC 9(4) VALUE 2017.
+ 10 FILLER PIC X VALUE '-'.
+ 10 WS-ASK-ID-DATE-MM PIC 9(2).
+ 10 FILLER PIC X VALUE '-'.
+ 10 WS-ASK-ID-DATE-DD PIC 9(2).
+ PROCEDURE DIVISION.
+ MOVE ALL '*' TO WS-ASK-ID-DATE
+ MOVE 2015 TO WS-ASK-ID-DATE-YYYY
+ MOVE 08 TO WS-ASK-ID-DATE-MM
+ MOVE 21 TO WS-ASK-ID-DATE-DD
+ DISPLAY "The date is " WS-ASK-ID-DATE " Compiled".
+
+ INITIALIZE WS-ASK-ID-DATE-R.
+ MOVE 08 TO WS-ASK-ID-DATE-MM
+ MOVE 21 TO WS-ASK-ID-DATE-DD
+ DISPLAY "The date is " WS-ASK-ID-DATE " INITIALIZE".
+
+ INITIALIZE WS-ASK-ID-DATE-R WITH FILLER.
+ MOVE 08 TO WS-ASK-ID-DATE-MM
+ MOVE 21 TO WS-ASK-ID-DATE-DD
+ DISPLAY "The date is " WS-ASK-ID-DATE " WITH FILLER".
+
+ INITIALIZE WS-ASK-ID-DATE-R WITH FILLER ALL TO VALUE.
+ MOVE 08 TO WS-ASK-ID-DATE-MM
+ MOVE 21 TO WS-ASK-ID-DATE-DD
+ DISPLAY "The date is " WS-ASK-ID-DATE " ALL TO VALUE".
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out b/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out
new file mode 100644
index 0000000..6a24172
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/REDEFINES_values_on_FILLER_and_INITIALIZE.out
@@ -0,0 +1,5 @@
+The date is 2015*08*21 Compiled
+The date is 0000*08*21 INITIALIZE
+The date is 0000 08 21 WITH FILLER
+The date is 2017-08-21 ALL TO VALUE
+
diff --git a/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob b/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob
new file mode 100644
index 0000000..3eb0685
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Recursive_PERFORM_paragraph.out" }
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 77 n binary-double unsigned.
+ 77 f binary-double unsigned.
+ procedure division.
+ move 20 to n
+ move 1 to f
+ display "compute " n " factorial".
+ fact.
+ compute f = f * n
+ subtract 1 from n
+ if n not equal to zero then
+ perform fact
+ end-if.
+ end-fact.
+ display f.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out b/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out
new file mode 100644
index 0000000..97f0737
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Recursive_PERFORM_paragraph.out
@@ -0,0 +1,3 @@
+compute 0000000000000000020 factorial
+2432902008176640000
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob b/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob
new file mode 100644
index 0000000..9bf4892
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob
@@ -0,0 +1,29 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ ALPHABET ALPHA IS EBCDIC.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC X(10) VALUE "d4b2e1a3c5".
+ 01 G.
+ 02 TBL OCCURS 10.
+ 03 X PIC X.
+ PROCEDURE DIVISION.
+ MOVE Z TO G.
+ SORT TBL ASCENDING KEY X SEQUENCE ALPHA.
+ IF G NOT = "abcde12345"
+ DISPLAY G
+ END-DISPLAY
+ END-IF.
+ MOVE Z TO G.
+ SORT TBL DESCENDING KEY X SEQUENCE ALPHA.
+ IF G NOT = "54321edcba"
+ DISPLAY G
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob b/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob
new file mode 100644
index 0000000..2a10d2d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__2_.cob
@@ -0,0 +1,27 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ OBJECT-COMPUTER.
+ x86 PROGRAM COLLATING SEQUENCE IS EBCDIC-CODE.
+ SPECIAL-NAMES.
+ ALPHABET EBCDIC-CODE IS EBCDIC.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC X(10) VALUE "d4b2e1a3c5".
+ 01 G.
+ 02 TBL OCCURS 10.
+ 03 X PIC X.
+ PROCEDURE DIVISION.
+ MOVE Z TO G.
+ SORT TBL ASCENDING KEY X.
+ IF G NOT = "abcde12345"
+ DISPLAY G.
+ MOVE Z TO G.
+ SORT TBL DESCENDING KEY X.
+ IF G NOT = "54321edcba"
+ DISPLAY G.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob b/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob
new file mode 100644
index 0000000..52fc973
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 G VALUE "d4b2e1a3c5".
+ 02 TBL OCCURS 5.
+ 03 X PIC X.
+ 03 Y PIC 9.
+ PROCEDURE DIVISION.
+ SORT TBL ASCENDING KEY X.
+ IF G NOT = "a3b2c5d4e1"
+ DISPLAY G
+ END-DISPLAY
+ END-IF.
+ SORT TBL DESCENDING KEY Y.
+ IF G NOT = "c5d4a3b2e1"
+ DISPLAY G
+ END-DISPLAY
+ END-IF.
+ SORT TBL ASCENDING KEY TBL.
+ IF G NOT = "a3b2c5d4e1"
+ DISPLAY G
+ END-DISPLAY
+ END-IF.
+ SORT TBL DESCENDING KEY.
+ IF G NOT = "e1d4c5b2a3"
+ DISPLAY G
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob
new file mode 100644
index 0000000..d30b4ea
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.cob
@@ -0,0 +1,96 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/SORT__table_sort__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 K PIC 9(2).
+
+ 01 CNT1 PIC 9(9) COMP-5 VALUE 4.
+ 01 TAB1.
+ 05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
+ DESCENDING TAB1-NR.
+ 10 TAB1-NR PIC 99.
+
+ 01 TAB2.
+ 05 CNT2 PIC 9(9) COMP-5 VALUE 4.
+ 05 ROW2 OCCURS 1 TO 4 DEPENDING CNT2
+ DESCENDING TAB2-NR.
+ 10 TAB2-NR PIC 99.
+
+ 01 TAB3.
+ 05 CNT3 PIC 9(9) COMP-5 VALUE 10.
+ 05 ROW3 OCCURS 1 TO 10 DEPENDING CNT3
+ DESCENDING TAB3-NR
+ ASCENDING TAB3-DATA.
+ 10 TAB3-NR PIC 99.
+ 10 FILLER PIC X(2).
+ 10 TAB3-DATA PIC X(5).
+ 10 FILLER PIC X(2).
+ 10 TAB3-DATA2 PIC X(5).
+
+
+ PROCEDURE DIVISION.
+ A.
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ MOVE K TO TAB1-NR(K), TAB2-NR(K)
+ END-PERFORM
+
+ MOVE 1 TO TAB3-NR(1).
+ MOVE 1 TO TAB3-NR(8).
+ MOVE 1 TO TAB3-NR(4).
+ MOVE 6 TO TAB3-NR(2).
+ MOVE 5 TO TAB3-NR(3).
+ MOVE 5 TO TAB3-NR(9).
+ MOVE 2 TO TAB3-NR(5).
+ MOVE 2 TO TAB3-NR(10).
+ MOVE 4 TO TAB3-NR(6).
+ MOVE 3 TO TAB3-NR(7).
+
+ MOVE "abcde" TO TAB3-DATA(1).
+ MOVE "AbCde" TO TAB3-DATA(2).
+ MOVE "abcde" TO TAB3-DATA(3).
+ MOVE "zyx" TO TAB3-DATA(4).
+ MOVE "12345" TO TAB3-DATA(5).
+ MOVE "zyx" TO TAB3-DATA(6).
+ MOVE "abcde" TO TAB3-DATA(7).
+ MOVE "AbCde" TO TAB3-DATA(8).
+ MOVE "abc" TO TAB3-DATA(9).
+ MOVE "12346" TO TAB3-DATA(10).
+
+ MOVE "day" TO TAB3-DATA2(1).
+ MOVE "The" TO TAB3-DATA2(2).
+ MOVE "eats" TO TAB3-DATA2(3).
+ MOVE "." TO TAB3-DATA2(4).
+ MOVE "mooos" TO TAB3-DATA2(5).
+ MOVE "grass" TO TAB3-DATA2(6).
+ MOVE "and" TO TAB3-DATA2(7).
+ MOVE "whole" TO TAB3-DATA2(8).
+ MOVE "cow" TO TAB3-DATA2(9).
+ MOVE "the" TO TAB3-DATA2(10).
+
+ SORT ROW1 DESCENDING TAB1-NR
+ SORT ROW2 DESCENDING TAB2-NR
+
+ DISPLAY "SINGLE TABLE" END-DISPLAY
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ DISPLAY TAB1-NR(K) END-DISPLAY
+ END-PERFORM
+
+ DISPLAY "LOWER LEVEL TABLE" END-DISPLAY
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ DISPLAY TAB2-NR(K) END-DISPLAY
+ END-PERFORM
+
+ SORT ROW3 DESCENDING TAB3-NR ASCENDING TAB3-DATA
+
+ DISPLAY "MULTY KEY SORT" END-DISPLAY
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 10
+ DISPLAY FUNCTION TRIM(ROW3(K))
+ END-DISPLAY
+ END-PERFORM
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out
new file mode 100644
index 0000000..5866ecf
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__2_.out
@@ -0,0 +1,22 @@
+SINGLE TABLE
+04
+03
+02
+01
+LOWER LEVEL TABLE
+04
+03
+02
+01
+MULTY KEY SORT
+06 AbCde The
+05 abc cow
+05 abcde eats
+04 zyx grass
+03 abcde and
+02 12345 mooos
+02 12346 the
+01 AbCde whole
+01 abcde day
+01 zyx .
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob
new file mode 100644
index 0000000..660f93c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.cob
@@ -0,0 +1,48 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/SORT__table_sort__3A_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 K PIC 9(2).
+
+ 01 CNT1 PIC 9(9) COMP-5 VALUE 4.
+ 01 TAB1.
+ 05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
+ DESCENDING TAB1-NR.
+ 10 TAB1-NR PIC 99.
+ 10 TAB-DATA PIC X(5).
+ 01 TAB2.
+ 05 ROW2 OCCURS 1 TO 4 DEPENDING CNT1
+ ASCENDING ROW2.
+ 10 TAB2-NR PIC 99.
+ 10 TAB2-DATA PIC X(5).
+
+ PROCEDURE DIVISION.
+ A.
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ MOVE K TO TAB1-NR (K)
+ MOVE 'BLA' TO TAB-DATA(K)
+ END-PERFORM
+
+ SORT ROW1
+
+ DISPLAY "After SORT [DESCENDING] ROW1"
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ DISPLAY TAB1-NR(K) NO ADVANCING END-DISPLAY
+ END-PERFORM
+ DISPLAY ""
+
+ MOVE TAB1 TO TAB2
+ SORT ROW2
+
+ DISPLAY "After SORT [ASCENDING] ROW2"
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ DISPLAY TAB2-NR(K) NO ADVANCING END-DISPLAY
+ END-PERFORM
+ DISPLAY ""
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out
new file mode 100644
index 0000000..29ea985
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3A_.out
@@ -0,0 +1,5 @@
+After SORT [DESCENDING] ROW1
+04030201
+After SORT [ASCENDING] ROW2
+01020304
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob
new file mode 100644
index 0000000..3afea83
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.cob
@@ -0,0 +1,44 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/SORT__table_sort__3B_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 K PIC 9(2).
+
+ 01 CNT1 PIC 9(9) COMP-5 VALUE 4.
+ 01 TAB1.
+ 05 ROW1 OCCURS 5 DESCENDING TAB1-NR.
+ 10 TAB1-NR PIC 99 VALUE ZERO.
+ 10 TAB-DATA PIC X(5).
+ 01 TAB2.
+ 05 ROW1 OCCURS 1 TO 4 DEPENDING CNT1
+ DESCENDING TAB1-NR.
+ 10 TAB1-NR PIC 99.
+ 10 TAB-DATA PIC X(5).
+
+ PROCEDURE DIVISION.
+ A.
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ MOVE K TO TAB1-NR OF TAB2(K)
+ MOVE 'BLA' TO TAB-DATA OF TAB2(K)
+ END-PERFORM
+
+ DISPLAY "Before sort"
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ DISPLAY TAB1-NR OF TAB2(K) NO ADVANCING END-DISPLAY
+ END-PERFORM
+ DISPLAY ""
+
+ SORT ROW1 OF TAB2.
+
+ DISPLAY "After descending sort"
+ PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
+ DISPLAY TAB1-NR OF TAB2(K) NO ADVANCING END-DISPLAY
+ END-PERFORM
+ DISPLAY ""
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out
new file mode 100644
index 0000000..4721770
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SORT__table_sort__3B_.out
@@ -0,0 +1,5 @@
+Before sort
+01020304
+After descending sort
+04030201
+
diff --git a/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob b/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob
new file mode 100644
index 0000000..29b266e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.cob
@@ -0,0 +1,27 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/SOURCE_FIXED_FREE_directives.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ >>SOURCE FREE
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ >>SOURCE FIXED
+ PROCEDURE DIVISION. FIXED
+ DISPLAY "OK" NO ADVANCING
+ END-DISPLAY.
+ >>SOURCE FREE
+ DISPLAY
+ "OK"
+ NO ADVANCING
+ END-DISPLAY.
+ >>SOURCE FORMAT FIXED
+ DISPLAY "OK" NO ADVANCING FIXED
+ END-DISPLAY.
+ >>SOURCE FORMAT IS FREE
+ DISPLAY
+ "OK"
+ NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out b/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out
new file mode 100644
index 0000000..ed898e2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/SOURCE_FIXED_FREE_directives.out
@@ -0,0 +1 @@
+OKOKOKOK
diff --git a/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob b/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob
new file mode 100644
index 0000000..c5f8fe7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_ERROR_STATUS.cob
@@ -0,0 +1,10 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ STOP RUN WITH ERROR STATUS.
+
diff --git a/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob b/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob
new file mode 100644
index 0000000..9950a77
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/STOP_RUN_WITH_NORMAL_STATUS.cob
@@ -0,0 +1,9 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ STOP RUN WITH NORMAL STATUS.
+
diff --git a/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob b/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob
new file mode 100644
index 0000000..8397189
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.cob
@@ -0,0 +1,104 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out" }
+
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 77 simple-str pic x(20).
+ 77 err-str pic x(50).
+ *-----------------------------------------------------------------
+ procedure division.
+ * STRING test
+ move spaces to simple-str
+ string 'data'
+ delimited by size
+ into simple-str
+ on overflow
+ move spaces to err-str
+ string 'STRING OVERFLOW'
+ delimited by size
+ into err-str
+ end-string
+ display err-str upon syserr
+ end-display
+ display '1 failed'
+ end-display
+ not on overflow
+ display '1 passed'
+ end-display
+ end-string
+ if simple-str not = 'data'
+ display 'STRING ERROR (1): "' simple-str '"'
+ end-display
+ end-if
+ *
+ move spaces to simple-str
+ string 'data is too big here...'
+ delimited by size
+ into simple-str
+ on overflow
+ display '2 passed'
+ end-display
+ not on overflow
+ display '2 failed'
+ end-display
+ move spaces to err-str
+ string 'missing OVERFLOW'
+ delimited by size
+ into err-str
+ end-string
+ display err-str upon syserr
+ end-display
+ end-string
+ if simple-str not = 'data is too big here'
+ display 'STRING ERROR (2): "' simple-str '"'
+ end-display
+ end-if
+ *
+ * UNSTRING test
+ move spaces to simple-str
+ unstring 'data'
+ into simple-str
+ on overflow
+ move spaces to err-str
+ unstring 'UNSTRING OVERFLOW'
+ into err-str
+ end-unstring
+ display err-str upon syserr
+ end-display
+ display '3 failed'
+ end-display
+ not on overflow
+ display '3 passed'
+ end-display
+ end-unstring
+ if simple-str not = 'data'
+ display 'UNSTRING ERROR (1): "' simple-str '"'
+ end-display
+ end-if
+ *
+ move spaces to simple-str
+ unstring 'data is too big here...'
+ into simple-str
+ on overflow
+ display '4 passed'
+ end-display
+ not on overflow
+ display '4 failed'
+ end-display
+ move spaces to err-str
+ string 'missing OVERFLOW'
+ delimited by size
+ into err-str
+ end-string
+ display err-str upon syserr
+ end-display
+ end-unstring
+ if simple-str not = 'data is too big here'
+ display 'UNSTRING ERROR (2): "' simple-str '"'
+ end-display
+ end-if
+ *
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out b/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out
new file mode 100644
index 0000000..f819dc4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/STRING___UNSTRING__NOT__ON_OVERFLOW.out
@@ -0,0 +1,5 @@
+1 passed
+2 passed
+3 passed
+4 passed
+
diff --git a/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob b/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob
new file mode 100644
index 0000000..66a5477
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/STRING_with_subscript_reference.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 G.
+ 02 X PIC X(3) OCCURS 3.
+ PROCEDURE DIVISION.
+ MOVE SPACES TO G.
+ STRING "abc" INTO X(2)
+ END-STRING.
+ IF G NOT = " abc "
+ DISPLAY X(1) NO ADVANCING
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob b/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob
new file mode 100644
index 0000000..fa43889
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.cob
@@ -0,0 +1,20 @@
+ *> { dg-do run }
+ *> { dg-options "-fno-static-call -rdynamic" }
+ *> { dg-output-file "group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ PROCEDURE DIVISION.
+ CALL "callee1" ON EXCEPTION
+ CALL "callee2" ON EXCEPTION
+ DISPLAY "neither callee1 nor callee2 found"
+ END-CALL
+ END-CALL
+ GOBACK.
+ END PROGRAM caller.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. callee2.
+ PROCEDURE DIVISION.
+ DISPLAY "this is callee2" NO ADVANCING
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out b/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out
new file mode 100644
index 0000000..4f18f54
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Static_CALL_with_ON_EXCEPTION__with_-fno-static-call_.out
@@ -0,0 +1 @@
+this is callee2
diff --git a/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob
new file mode 100644
index 0000000..495feef
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_LOW-VALUE.cob
@@ -0,0 +1,26 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 G.
+ 03 FILLER PIC XXX VALUE "ABC".
+ 03 FILLER PIC XX VALUE LOW-VALUE.
+ 03 FILLER PIC XXX VALUE "DEF".
+ 01 A PIC XXX.
+ 01 B PIC XXX.
+ PROCEDURE DIVISION.
+ UNSTRING G DELIMITED BY ALL LOW-VALUE
+ INTO A B
+ END-UNSTRING.
+ IF A NOT = "ABC"
+ DISPLAY "A is " """" A """"
+ END-DISPLAY
+ END-IF.
+ IF B NOT = "DEF"
+ DISPLAY "B is " """" B """"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob
new file mode 100644
index 0000000..9bbbd8e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_ALL_SPACE-2.cob
@@ -0,0 +1,56 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WS-RECORD.
+ 02 VALUE SPACE PIC X(04).
+ 02 VALUE "ABC AND DE" PIC X(10).
+ 02 VALUE SPACE PIC X(07).
+ 02 VALUE "FG AND HIJ" PIC X(10).
+ 02 VALUE SPACE PIC X(08).
+ 01 SPACE-2 PIC X(02) VALUE SPACE.
+ 01 WS-DUMMY PIC X(15).
+ 01 WS-POINTER PIC 99.
+ PROCEDURE DIVISION.
+ MOVE 1 TO WS-POINTER.
+ *
+ PERFORM 0001-SUB.
+ IF WS-DUMMY NOT = SPACE
+ DISPLAY "Expected space - Got " WS-DUMMY
+ END-DISPLAY
+ END-IF.
+ IF WS-POINTER NOT = 5
+ DISPLAY "Expected 5 - Got " WS-POINTER
+ END-DISPLAY
+ END-IF.
+ *
+ PERFORM 0001-SUB.
+ IF WS-DUMMY NOT = "ABC AND DE"
+ DISPLAY "Expected ABC AND DE - Got " WS-DUMMY
+ END-DISPLAY
+ END-IF.
+ IF WS-POINTER NOT = 21
+ DISPLAY "Expected 21 - Got " WS-POINTER
+ END-DISPLAY
+ END-IF.
+ *
+ PERFORM 0001-SUB.
+ IF WS-DUMMY NOT = " FG AND HIJ"
+ DISPLAY "Expected FG AND HIJ - Got " WS-DUMMY
+ END-DISPLAY
+ END-IF.
+ IF WS-POINTER NOT = 40
+ DISPLAY "Expected 40 - Got " WS-POINTER
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+ 0001-SUB.
+ UNSTRING WS-RECORD
+ DELIMITED BY ALL SPACE-2
+ INTO WS-DUMMY
+ POINTER WS-POINTER
+ END-UNSTRING.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob
new file mode 100644
index 0000000..5d3fdf2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITED_POINTER.cob
@@ -0,0 +1,45 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WS-LAY-RECORD PIC X(66).
+ 01 WS-DUMMY PIC X(50).
+ 01 WS-KEYWORD PIC X(32).
+ 01 WS-POINTER PIC 99.
+ PROCEDURE DIVISION.
+ MOVE
+ ' 10 AF-RECORD-TYPE-SEQUENCE-04 PIC 9(05) COMP-3.'
+ TO WS-LAY-RECORD.
+ MOVE 1 TO WS-POINTER.
+ PERFORM 0001-SUB.
+ IF WS-POINTER NOT = 48
+ DISPLAY "Expected 48 - Got " WS-POINTER
+ END-DISPLAY
+ END-IF.
+ ADD 7 TO WS-POINTER
+ END-ADD.
+ PERFORM 0001-SUB.
+ IF WS-POINTER NOT = 62
+ DISPLAY "Expected 62 - Got " WS-POINTER
+ END-DISPLAY
+ END-IF.
+ PERFORM 0001-SUB.
+ IF WS-POINTER NOT = 63
+ DISPLAY "Expected 63 - Got " WS-POINTER
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+ 0001-SUB.
+ UNSTRING WS-LAY-RECORD
+ DELIMITED
+ BY ' PIC '
+ OR ' COMP-3'
+ OR '.'
+ INTO WS-DUMMY
+ DELIMITER WS-KEYWORD
+ POINTER WS-POINTER
+ END-UNSTRING.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob
new file mode 100644
index 0000000..714dba1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UNSTRING_DELIMITER_IN.cob
@@ -0,0 +1,35 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WK-CMD PIC X(8) VALUE "WWADDBCC".
+ 01 WK-SIGNS PIC XX VALUE "AB".
+ 01 WKS REDEFINES WK-SIGNS.
+ 03 WK-SIGN PIC X OCCURS 2.
+ 01 .
+ 02 WK-DELIM PIC X OCCURS 2.
+ 01 .
+ 02 WK-DATA PIC X(2) OCCURS 3.
+ PROCEDURE DIVISION.
+ UNSTRING WK-CMD DELIMITED BY WK-SIGN(1) OR WK-SIGN(2)
+ INTO WK-DATA(1) DELIMITER IN WK-DELIM(1)
+ WK-DATA(2) DELIMITER IN WK-DELIM(2)
+ WK-DATA(3)
+ END-UNSTRING
+ IF WK-DATA(1) NOT = "WW"
+ OR WK-DATA(2) NOT = "DD"
+ OR WK-DATA(3) NOT = "CC"
+ OR WK-DELIM(1) NOT = "A"
+ OR WK-DELIM(2) NOT = "B"
+ DISPLAY """" WK-DATA(1)
+ WK-DATA(2)
+ WK-DATA(3)
+ WK-DELIM(1)
+ WK-DELIM(2) """"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob b/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob
new file mode 100644
index 0000000..f4c8032
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.cob
@@ -0,0 +1,42 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/UNSTRING_with_FUNCTION___literal.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FILLER.
+ 05 TSTUNS PIC X(479).
+ 05 PRM PIC X(16) OCCURS 4 TIMES.
+ PROCEDURE DIVISION.
+ MOVE "The,Quick,Brown,Fox" TO TSTUNS.
+ UNSTRING TSTUNS DELIMITED BY ','
+ INTO PRM(1), PRM(2), PRM(3), PRM(4).
+ DISPLAY "PRM(1) is " PRM(1) ":".
+ DISPLAY "PRM(2) is " PRM(2) ":".
+ DISPLAY "PRM(3) is " PRM(3) ":".
+ DISPLAY "PRM(4) is " PRM(4) ":".
+ UNSTRING FUNCTION UPPER-CASE(TSTUNS) DELIMITED BY ','
+ INTO PRM(1), PRM(2), PRM(3), PRM(4).
+ DISPLAY "Now using UPPER-CASE"
+ DISPLAY "PRM(1) is " PRM(1) ":".
+ DISPLAY "PRM(2) is " PRM(2) ":".
+ DISPLAY "PRM(3) is " PRM(3) ":".
+ DISPLAY "PRM(4) is " PRM(4) ":".
+ UNSTRING "Daddy,was,a,Rolling stone" DELIMITED BY ','
+ INTO PRM(1), PRM(2), PRM(3), PRM(4).
+ DISPLAY "Now using Literal"
+ DISPLAY "PRM(1) is " PRM(1) ":".
+ DISPLAY "PRM(2) is " PRM(2) ":".
+ DISPLAY "PRM(3) is " PRM(3) ":".
+ DISPLAY "PRM(4) is " PRM(4) ":".
+ UNSTRING FUNCTION LOWER-CASE("Daddy,was,a,Rolling stone")
+ DELIMITED BY ','
+ INTO PRM(1), PRM(2), PRM(3), PRM(4).
+ DISPLAY "Now using Literal + LOWER-CASE"
+ DISPLAY "PRM(1) is " PRM(1) ":".
+ DISPLAY "PRM(2) is " PRM(2) ":".
+ DISPLAY "PRM(3) is " PRM(3) ":".
+ DISPLAY "PRM(4) is " PRM(4) ":".
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out b/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out
new file mode 100644
index 0000000..297f254
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UNSTRING_with_FUNCTION___literal.out
@@ -0,0 +1,20 @@
+PRM(1) is The :
+PRM(2) is Quick :
+PRM(3) is Brown :
+PRM(4) is Fox :
+Now using UPPER-CASE
+PRM(1) is THE :
+PRM(2) is QUICK :
+PRM(3) is BROWN :
+PRM(4) is FOX :
+Now using Literal
+PRM(1) is Daddy :
+PRM(2) is was :
+PRM(3) is a :
+PRM(4) is Rolling stone :
+Now using Literal + LOWER-CASE
+PRM(1) is daddy :
+PRM(2) is was :
+PRM(3) is a :
+PRM(4) is rolling stone :
+
diff --git a/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob b/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob
new file mode 100644
index 0000000..7843d3d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/_-static__compilation.cob
@@ -0,0 +1,10 @@
+ *> { dg-do run }
+ *> { dg-options "-static" }
+ *> { dg-output-file "group2/_-static__compilation.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ DISPLAY "hello, world".
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/_-static__compilation.out b/gcc/testsuite/cobol.dg/group2/_-static__compilation.out
new file mode 100644
index 0000000..ae0e511
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/_-static__compilation.out
@@ -0,0 +1,2 @@
+hello, world
+
diff --git a/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob b/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob
new file mode 100644
index 0000000..5cf0446
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.cob
@@ -0,0 +1,34 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out" }
+
+ identification division.
+ program-id. caller.
+ data division.
+ working-storage section.
+ 01 x pic x(4) value '9876'.
+ procedure division.
+ call 'callee' using x
+ end-call
+ call 'callee' using omitted
+ end-call
+ stop run.
+ end program caller.
+
+ identification division.
+ program-id. callee.
+ data division.
+ working-storage section.
+ 01 py pointer.
+ linkage section.
+ 01 x.
+ 05 y pic x(4).
+ procedure division using optional x.
+ set py to address of x.
+ if py is not equal to zero
+ display y
+ else
+ display "parameter omitted"
+ end-if.
+ goback.
+ end program callee.
+
diff --git a/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out b/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out
new file mode 100644
index 0000000..9e82a04
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/access_to_OPTIONAL_LINKAGE_item_not_passed.out
@@ -0,0 +1,3 @@
+9876
+parameter omitted
+
diff --git a/gcc/testsuite/g++.dg/abi/base-defaulted2.C b/gcc/testsuite/g++.dg/abi/base-defaulted2.C
new file mode 100644
index 0000000..9652ae6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/base-defaulted2.C
@@ -0,0 +1,12 @@
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "-fabi-version=20 -Wabi" }
+
+struct Base {
+protected:
+ Base() = default;
+ ~Base() = default;
+};
+
+struct Derived : Base {
+ void* ptr; // { dg-bogus "offset" }
+};
diff --git a/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py b/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
index 8687168..8ac1f14 100644
--- a/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
+++ b/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
@@ -60,7 +60,8 @@ def test_basics(html_tree):
pre = diag.find('xhtml:pre', ns)
assert pre is not None
- assert pre.attrib['class'] == 'gcc-annotated-source'
+ assert pre.attrib['class'] == 'gcc-generated-patch'
+ assert pre.text.startswith('--- ')
# For reference, here's the generated HTML:
"""
@@ -76,7 +77,9 @@ def test_basics(html_tree):
<div class="gcc-diagnostic-list">
<div class="gcc-diagnostic">
<span class="gcc-message">expected &apos;<span class="gcc-quoted-text">;</span>&apos; before &apos;<span class="gcc-quoted-text">}</span>&apos; token</span>
- <pre class="gcc-annotated-source"></pre>
+ <pre class="gcc-generated-patch">
+ [...snip...]
+ </pre>
</div>
</div>
</body>
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c
new file mode 100644
index 0000000..2499e8d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fdiagnostics-set-output=experimental-html" } */
+/* { dg-additional-options "-fdiagnostics-show-caret" } */
+
+extern char *gets (char *s);
+
+void test_cwe (void)
+{
+ char buf[1024];
+ gets (buf);
+}
+
+/* Use a Python script to verify various properties about the generated
+ HTML file:
+ { dg-final { run-html-pytest diagnostic-test-metadata-html.c "diagnostic-test-metadata-html.py" } } */
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py
new file mode 100644
index 0000000..e475e95
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py
@@ -0,0 +1,68 @@
+# Verify that metadata works in HTML output.
+
+from htmltest import *
+
+import pytest
+
+@pytest.fixture(scope='function', autouse=True)
+def html_tree():
+ return html_tree_from_env()
+
+XHTML = 'http://www.w3.org/1999/xhtml'
+ns = {'xhtml': XHTML}
+
+def make_tag(local_name):
+ return f'{{{XHTML}}}' + local_name
+
+def test_metadata(html_tree):
+ root = html_tree.getroot ()
+ assert root.tag == make_tag('html')
+
+ body = root.find('xhtml:body', ns)
+ assert body is not None
+
+ diag_list = body.find('xhtml:div', ns)
+ assert diag_list is not None
+ assert diag_list.attrib['class'] == 'gcc-diagnostic-list'
+
+ diag = diag_list.find('xhtml:div', ns)
+ assert diag is not None
+ assert diag.attrib['class'] == 'gcc-diagnostic'
+
+ spans = diag.findall('xhtml:span', ns)
+ metadata = spans[1]
+ assert metadata.attrib['class'] == 'gcc-metadata'
+ assert metadata[0].tag == make_tag('span')
+ assert metadata[0].attrib['class'] == 'gcc-metadata-item'
+ assert metadata[0].text == '['
+ assert metadata[0][0].tag == make_tag('a')
+ assert metadata[0][0].attrib['href'] == 'https://cwe.mitre.org/data/definitions/242.html'
+ assert metadata[0][0].text == 'CWE-242'
+ assert metadata[0][0].tail == ']'
+
+ assert metadata[1].tag == make_tag('span')
+ assert metadata[1].attrib['class'] == 'gcc-metadata-item'
+ assert metadata[1].text == '['
+ assert metadata[1][0].tag == make_tag('a')
+ assert metadata[1][0].attrib['href'] == 'https://example.com/'
+ assert metadata[1][0].text == 'STR34-C'
+ assert metadata[1][0].tail == ']'
+
+ src = diag.find('xhtml:pre', ns)
+ assert src.attrib['class'] == 'gcc-annotated-source'
+ assert src.text == (
+ ' gets (buf);\n'
+ ' ^~~~~~~~~~\n')
+
+# For reference, here's the generated HTML:
+"""
+ <body>
+ <div class="gcc-diagnostic-list">
+ <div class="gcc-diagnostic">
+ <span class="gcc-message">never use &apos;<span class="gcc-quoted-text">gets</span>&apos;</span>
+ <span class="gcc-metadata"><span class="gcc-metadata-item">[<a href="https://cwe.mitre.org/data/definitions/242.html">CWE-242</a>]</span><span class="gcc-metadata-item">[<a href="https://example.com/">STR34-C</a>]</span></span>
+ ...etc...
+ </div>
+ </div>
+ </body>
+"""
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
index b8134ae..26605f7 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events" } */
+/* { dg-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-add-output=experimental-html" } */
#include <stddef.h>
#include <stdlib.h>
@@ -52,3 +52,7 @@ make_a_list_of_random_ints_badly(PyObject *self,
| (3) when calling 'PyList_Append', passing NULL from (1) as argument 1
{ dg-end-multiline-output "" } */
}
+
+/* Use a Python script to verify various properties about the generated
+ HTML file:
+ { dg-final { run-html-pytest diagnostic-test-paths-2.c "diagnostic-test-paths-2.py" } } */
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py
new file mode 100644
index 0000000..c212e49
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py
@@ -0,0 +1,35 @@
+# Verify that execution paths work in HTML output.
+
+from htmltest import *
+
+import pytest
+
+@pytest.fixture(scope='function', autouse=True)
+def html_tree():
+ return html_tree_from_env()
+
+XHTML = 'http://www.w3.org/1999/xhtml'
+ns = {'xhtml': XHTML}
+
+def make_tag(local_name):
+ return f'{{{XHTML}}}' + local_name
+
+def test_paths(html_tree):
+ root = html_tree.getroot ()
+ assert root.tag == make_tag('html')
+
+ body = root.find('xhtml:body', ns)
+ assert body is not None
+
+ diag_list = body.find('xhtml:div', ns)
+ assert diag_list is not None
+ assert diag_list.attrib['class'] == 'gcc-diagnostic-list'
+
+ diag = diag_list.find('xhtml:div', ns)
+ assert diag is not None
+ assert diag.attrib['class'] == 'gcc-diagnostic'
+
+ pre = diag.findall('xhtml:pre', ns)
+ assert pre[0].attrib['class'] == 'gcc-annotated-source'
+ assert pre[1].attrib['class'] == 'gcc-execution-path'
+ assert pre[1].text.startswith(" 'make_a_list_of_random_ints_badly': events 1-3")
diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp b/gcc/testsuite/gcc.dg/plugin/plugin.exp
index a84fbae..a066b67 100644
--- a/gcc/testsuite/gcc.dg/plugin/plugin.exp
+++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp
@@ -105,6 +105,7 @@ set plugin_test_list [list \
diagnostic-test-inlining-4.c } \
{ diagnostic_plugin_test_metadata.cc
diagnostic-test-metadata.c \
+ diagnostic-test-metadata-html.c \
diagnostic-test-metadata-sarif.c } \
{ diagnostic_plugin_test_nesting.cc \
diagnostic-test-nesting-text-plain.c \
diff --git a/gcc/testsuite/gcc.dg/torture/pr119131-1.c b/gcc/testsuite/gcc.dg/torture/pr119131-1.c
index c62f702..1780035 100644
--- a/gcc/testsuite/gcc.dg/torture/pr119131-1.c
+++ b/gcc/testsuite/gcc.dg/torture/pr119131-1.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target dfp } */
+/* { dg-additional-options "-Wno-psabi" } */
/* PR target/119131 */
typedef __attribute__((__vector_size__ (64))) char C;
diff --git a/gcc/testsuite/gcc.dg/torture/pr120211-1.c b/gcc/testsuite/gcc.dg/torture/pr120211-1.c
new file mode 100644
index 0000000..f9bc97c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr120211-1.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+int a, b, d;
+void e() {
+ do {
+ int f = 0;
+ while (1) {
+ int c = a;
+ for (; (c & 1) == 0; c = 1)
+ for (; c & 1;)
+ ;
+ if (a)
+ break;
+ f++;
+ }
+ b = f & 5;
+ if (b)
+ break;
+ } while (d++);
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
index 5c0ea58..4b3ce4e 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
@@ -9,7 +9,8 @@
/* unaligned store. */
-int main_1 (int off)
+int __attribute__((noipa))
+main_1 (int off)
{
int i;
char ia[N+OFF];
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp124.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp124.c
new file mode 100644
index 0000000..789b550
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp124.c
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
+
+/* Test removal of trailing zero mask ranges from signed values. */
+/* Mask off the lower 4 bits of an integer. */
+#define MASK 0XF
+
+void dead (int c);
+void keep();
+
+/* A signed character should have a range something like : */
+/* int [-INF, -16][0, 0][16, 2147483632] MASK 0xfffffff0 VALUE 0x0 */
+
+int
+foo2 (int c)
+{
+ c = c & ~MASK;
+ if (c == 0)
+ return 0;
+ if (c > -16)
+ {
+ keep ();
+ if (c < 16)
+ dead (c);
+ }
+ if (c > (__INT_MAX__ & ~MASK))
+ dead (c);
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-not "dead" "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c
new file mode 100644
index 0000000..664b60d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_135-pr120211.c
@@ -0,0 +1,12 @@
+/* { dg-add-options vect_early_break } */
+/* { dg-additional-options "-O3 -fno-tree-copy-prop -fno-tree-dominator-opts -fno-tree-loop-ivcanon -fno-tree-pre -fno-code-hoisting" } */
+
+int a, b[1];
+int main() {
+ int c = 0;
+ for (; c < 1; c++) {
+ while (a)
+ c++;
+ b[c] = 0;
+ }
+}
diff --git a/gcc/testsuite/gcc.target/arm/ivopts.c b/gcc/testsuite/gcc.target/arm/ivopts.c
index 582fdab..6e3e74c 100644
--- a/gcc/testsuite/gcc.target/arm/ivopts.c
+++ b/gcc/testsuite/gcc.target/arm/ivopts.c
@@ -12,5 +12,4 @@ tr5 (short array[], int n)
/* { dg-final { scan-tree-dump-times "PHI <" 1 "ivopts"} } */
/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1m_lob } } } } */
-/* { dg-final { object-size text <= 32 { target { arm_nothumb && { ! arm_iwmmxt_ok } } } } } */
-/* { dg-final { object-size text <= 36 { target { arm_nothumb && arm_iwmmxt_ok } } } } */
+/* { dg-final { object-size text <= 32 { target { arm_nothumb } } } } */
diff --git a/gcc/testsuite/gcc.target/arm/mmx-1.c b/gcc/testsuite/gcc.target/arm/mmx-1.c
deleted file mode 100644
index 8060dbd..0000000
--- a/gcc/testsuite/gcc.target/arm/mmx-1.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Verify that if IP is saved to ensure stack alignment, we don't load
- it into sp. */
-/* { dg-do compile } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
-/* { dg-options "-O -mno-apcs-frame -mcpu=iwmmxt -mabi=iwmmxt" } */
-/* { dg-require-effective-target arm32 } */
-/* { dg-require-effective-target arm_iwmmxt_ok } */
-/* { dg-final { scan-assembler "push.*ip,\[ ]*pc" } } */
-/* { dg-skip-if "r9 is reserved in FDPIC" { arm*-*-uclinuxfdpiceabi } "*" "" } */
-
-/* This function uses all the call-saved registers, namely r4, r5, r6,
- r7, r8, r9, sl, fp. Since we also save lr, that leaves an odd
- number of registers, and the compiler will push ip to align the
- stack. Make sure that we restore ip into ip, not into sp as is
- done when using a frame pointer. The -mno-apcs-frame option
- permits the frame pointer to be used as an ordinary register. */
-
-void
-foo(void)
-{
- __asm volatile ("" : : :
- "r4", "r5", "r6", "r7", "r8", "r9", "sl", "fp", "lr");
-}
diff --git a/gcc/testsuite/gcc.target/arm/mmx-2.c b/gcc/testsuite/gcc.target/arm/mmx-2.c
deleted file mode 100644
index 0540f65..0000000
--- a/gcc/testsuite/gcc.target/arm/mmx-2.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* { dg-do compile } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
-/* { dg-require-effective-target arm32 } */
-/* { dg-require-effective-target arm_iwmmxt_ok } */
-/* { dg-options "-mcpu=iwmmxt -flax-vector-conversions -std=gnu99" } */
-
-/* Internal data types for implementing the intrinsics. */
-typedef int __v2si __attribute__ ((vector_size (8)));
-typedef short __v4hi __attribute__ ((vector_size (8)));
-typedef signed char __v8qi __attribute__ ((vector_size (8)));
-
-void
-foo(void)
-{
- volatile int isink;
- volatile long long llsink;
- volatile __v8qi v8sink;
- volatile __v4hi v4sink;
- volatile __v2si v2sink;
-
- isink = __builtin_arm_getwcgr0 ();
- __builtin_arm_setwcgr0 (isink);
- isink = __builtin_arm_getwcgr1 ();
- __builtin_arm_setwcgr1 (isink);
- isink = __builtin_arm_getwcgr2 ();
- __builtin_arm_setwcgr2 (isink);
- isink = __builtin_arm_getwcgr3 ();
- __builtin_arm_setwcgr3 (isink);
-
- isink = __builtin_arm_textrmsb (v8sink, 0);
- isink = __builtin_arm_textrmsh (v4sink, 0);
- isink = __builtin_arm_textrmsw (v2sink, 0);
- isink = __builtin_arm_textrmub (v8sink, 0);
- isink = __builtin_arm_textrmuh (v4sink, 0);
- isink = __builtin_arm_textrmuw (v2sink, 0);
- v8sink = __builtin_arm_tinsrb (v8sink, isink, 0);
- v4sink = __builtin_arm_tinsrh (v4sink, isink, 0);
- v2sink = __builtin_arm_tinsrw (v2sink, isink, 0);
- llsink = __builtin_arm_tmia (llsink, isink, isink);
- llsink = __builtin_arm_tmiabb (llsink, isink, isink);
- llsink = __builtin_arm_tmiabt (llsink, isink, isink);
- llsink = __builtin_arm_tmiaph (llsink, isink, isink);
- llsink = __builtin_arm_tmiatb (llsink, isink, isink);
- llsink = __builtin_arm_tmiatt (llsink, isink, isink);
- isink = __builtin_arm_tmovmskb (v8sink);
- isink = __builtin_arm_tmovmskh (v4sink);
- isink = __builtin_arm_tmovmskw (v2sink);
- llsink = __builtin_arm_waccb (v8sink);
- llsink = __builtin_arm_wacch (v4sink);
- llsink = __builtin_arm_waccw (v2sink);
- v8sink = __builtin_arm_waddb (v8sink, v8sink);
- v8sink = __builtin_arm_waddbss (v8sink, v8sink);
- v8sink = __builtin_arm_waddbus (v8sink, v8sink);
- v4sink = __builtin_arm_waddh (v4sink, v4sink);
- v4sink = __builtin_arm_waddhss (v4sink, v4sink);
- v4sink = __builtin_arm_waddhus (v4sink, v4sink);
- v2sink = __builtin_arm_waddw (v2sink, v2sink);
- v2sink = __builtin_arm_waddwss (v2sink, v2sink);
- v2sink = __builtin_arm_waddwus (v2sink, v2sink);
- v8sink = __builtin_arm_walign (v8sink, v8sink, 0); /* waligni: 3-bit immediate. */
- v8sink = __builtin_arm_walign (v8sink, v8sink, isink); /* walignr: GP register. */
- llsink = __builtin_arm_wand(llsink, llsink);
- llsink = __builtin_arm_wandn (llsink, llsink);
- v8sink = __builtin_arm_wavg2b (v8sink, v8sink);
- v8sink = __builtin_arm_wavg2br (v8sink, v8sink);
- v4sink = __builtin_arm_wavg2h (v4sink, v4sink);
- v4sink = __builtin_arm_wavg2hr (v4sink, v4sink);
- v8sink = __builtin_arm_wcmpeqb (v8sink, v8sink);
- v4sink = __builtin_arm_wcmpeqh (v4sink, v4sink);
- v2sink = __builtin_arm_wcmpeqw (v2sink, v2sink);
- v8sink = __builtin_arm_wcmpgtsb (v8sink, v8sink);
- v4sink = __builtin_arm_wcmpgtsh (v4sink, v4sink);
- v2sink = __builtin_arm_wcmpgtsw (v2sink, v2sink);
- v8sink = __builtin_arm_wcmpgtub (v8sink, v8sink);
- v4sink = __builtin_arm_wcmpgtuh (v4sink, v4sink);
- v2sink = __builtin_arm_wcmpgtuw (v2sink, v2sink);
- llsink = __builtin_arm_wmacs (llsink, v4sink, v4sink);
- llsink = __builtin_arm_wmacsz (v4sink, v4sink);
- llsink = __builtin_arm_wmacu (llsink, v4sink, v4sink);
- llsink = __builtin_arm_wmacuz (v4sink, v4sink);
- v4sink = __builtin_arm_wmadds (v4sink, v4sink);
- v4sink = __builtin_arm_wmaddu (v4sink, v4sink);
- v8sink = __builtin_arm_wmaxsb (v8sink, v8sink);
- v4sink = __builtin_arm_wmaxsh (v4sink, v4sink);
- v2sink = __builtin_arm_wmaxsw (v2sink, v2sink);
- v8sink = __builtin_arm_wmaxub (v8sink, v8sink);
- v4sink = __builtin_arm_wmaxuh (v4sink, v4sink);
- v2sink = __builtin_arm_wmaxuw (v2sink, v2sink);
- v8sink = __builtin_arm_wminsb (v8sink, v8sink);
- v4sink = __builtin_arm_wminsh (v4sink, v4sink);
- v2sink = __builtin_arm_wminsw (v2sink, v2sink);
- v8sink = __builtin_arm_wminub (v8sink, v8sink);
- v4sink = __builtin_arm_wminuh (v4sink, v4sink);
- v2sink = __builtin_arm_wminuw (v2sink, v2sink);
- v4sink = __builtin_arm_wmulsm (v4sink, v4sink);
- v4sink = __builtin_arm_wmulul (v4sink, v4sink);
- v4sink = __builtin_arm_wmulum (v4sink, v4sink);
- llsink = __builtin_arm_wor (llsink, llsink);
- v2sink = __builtin_arm_wpackdss (llsink, llsink);
- v2sink = __builtin_arm_wpackdus (llsink, llsink);
- v8sink = __builtin_arm_wpackhss (v4sink, v4sink);
- v8sink = __builtin_arm_wpackhus (v4sink, v4sink);
- v4sink = __builtin_arm_wpackwss (v2sink, v2sink);
- v4sink = __builtin_arm_wpackwus (v2sink, v2sink);
- llsink = __builtin_arm_wrord (llsink, llsink);
- llsink = __builtin_arm_wrordi (llsink, isink);
- v4sink = __builtin_arm_wrorh (v4sink, llsink);
- v4sink = __builtin_arm_wrorhi (v4sink, isink);
- v2sink = __builtin_arm_wrorw (v2sink, llsink);
- v2sink = __builtin_arm_wrorwi (v2sink, isink);
- v2sink = __builtin_arm_wsadb (v2sink, v8sink, v8sink);
- v2sink = __builtin_arm_wsadbz (v8sink, v8sink);
- v2sink = __builtin_arm_wsadh (v2sink, v4sink, v4sink);
- v2sink = __builtin_arm_wsadhz (v4sink, v4sink);
- v4sink = __builtin_arm_wshufh (v4sink, 0);
- llsink = __builtin_arm_wslld (llsink, llsink);
- llsink = __builtin_arm_wslldi (llsink, 0);
- v4sink = __builtin_arm_wsllh (v4sink, llsink);
- v4sink = __builtin_arm_wsllhi (v4sink, isink);
- v2sink = __builtin_arm_wsllw (v2sink, llsink);
- v2sink = __builtin_arm_wsllwi (v2sink, isink);
- llsink = __builtin_arm_wsrad (llsink, llsink);
- llsink = __builtin_arm_wsradi (llsink, isink);
- v4sink = __builtin_arm_wsrah (v4sink, llsink);
- v4sink = __builtin_arm_wsrahi (v4sink, isink);
- v2sink = __builtin_arm_wsraw (v2sink, llsink);
- v2sink = __builtin_arm_wsrawi (v2sink, isink);
- llsink = __builtin_arm_wsrld (llsink, llsink);
- llsink = __builtin_arm_wsrldi (llsink, isink);
- v4sink = __builtin_arm_wsrlh (v4sink, llsink);
- v4sink = __builtin_arm_wsrlhi (v4sink, isink);
- v2sink = __builtin_arm_wsrlw (v2sink, llsink);
- v2sink = __builtin_arm_wsrlwi (v2sink, isink);
- v8sink = __builtin_arm_wsubb (v8sink, v8sink);
- v8sink = __builtin_arm_wsubbss (v8sink, v8sink);
- v8sink = __builtin_arm_wsubbus (v8sink, v8sink);
- v4sink = __builtin_arm_wsubh (v4sink, v4sink);
- v4sink = __builtin_arm_wsubhss (v4sink, v4sink);
- v4sink = __builtin_arm_wsubhus (v4sink, v4sink);
- v2sink = __builtin_arm_wsubw (v2sink, v2sink);
- v2sink = __builtin_arm_wsubwss (v2sink, v2sink);
- v2sink = __builtin_arm_wsubwus (v2sink, v2sink);
- v4sink = __builtin_arm_wunpckehsb (v8sink);
- v2sink = __builtin_arm_wunpckehsh (v4sink);
- llsink = __builtin_arm_wunpckehsw (v2sink);
- v4sink = __builtin_arm_wunpckehub (v8sink);
- v2sink = __builtin_arm_wunpckehuh (v4sink);
- llsink = __builtin_arm_wunpckehuw (v2sink);
- v4sink = __builtin_arm_wunpckelsb (v8sink);
- v2sink = __builtin_arm_wunpckelsh (v4sink);
- llsink = __builtin_arm_wunpckelsw (v2sink);
- v4sink = __builtin_arm_wunpckelub (v8sink);
- v2sink = __builtin_arm_wunpckeluh (v4sink);
- llsink = __builtin_arm_wunpckeluw (v2sink);
- v8sink = __builtin_arm_wunpckihb (v8sink, v8sink);
- v4sink = __builtin_arm_wunpckihh (v4sink, v4sink);
- v2sink = __builtin_arm_wunpckihw (v2sink, v2sink);
- v8sink = __builtin_arm_wunpckilb (v8sink, v8sink);
- v4sink = __builtin_arm_wunpckilh (v4sink, v4sink);
- v2sink = __builtin_arm_wunpckilw (v2sink, v2sink);
- llsink = __builtin_arm_wxor (llsink, llsink);
- llsink = __builtin_arm_wzero ();
-}
diff --git a/gcc/testsuite/gcc.target/arm/pr64208.c b/gcc/testsuite/gcc.target/arm/pr64208.c
deleted file mode 100644
index 96fd56d..0000000
--- a/gcc/testsuite/gcc.target/arm/pr64208.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* { dg-do compile } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
-/* { dg-require-effective-target arm32 } */
-/* { dg-require-effective-target arm_iwmmxt_ok } */
-/* { dg-options "-O1 -mcpu=iwmmxt" } */
-
-long long x6(void);
-void x7(long long, long long);
-void x8(long long);
-
-int x0;
-long long *x1;
-
-void x2(void) {
- long long *x3 = x1;
- while (x1) {
- long long x4 = x0, x5 = x6();
- x7(x4, x5);
- x8(x5);
- *x3 = 0;
- }
-}
diff --git a/gcc/testsuite/gcc.target/arm/pr79145.c b/gcc/testsuite/gcc.target/arm/pr79145.c
deleted file mode 100644
index 6678244..0000000
--- a/gcc/testsuite/gcc.target/arm/pr79145.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* { dg-do compile } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
-/* { dg-require-effective-target arm32 } */
-/* { dg-require-effective-target arm_iwmmxt_ok } */
-/* { dg-options "-mcpu=iwmmxt" } */
-
-int
-main (void)
-{
- volatile long long t1;
- t1 ^= 0x55;
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/arm/pr99724.c b/gcc/testsuite/gcc.target/arm/pr99724.c
deleted file mode 100644
index 5411078..0000000
--- a/gcc/testsuite/gcc.target/arm/pr99724.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* PR target/99724 */
-/* { dg-do compile } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
-/* { dg-require-effective-target arm32 } */
-/* { dg-require-effective-target arm_iwmmxt_ok } */
-/* { dg-options "-O1 -mcpu=iwmmxt" } */
-
-typedef int V __attribute__((vector_size (8)));
-struct __attribute__((packed)) S { char a; V b; char c[7]; };
-
-void
-foo (V *x)
-{
- *x = ~*x;
-}
-
-void
-bar (V *x)
-{
- *x = -*x;
-}
-
-void
-baz (V *x, struct S *p)
-{
- V y = p->b;
- *x = y;
-}
diff --git a/gcc/testsuite/gcc.target/arm/pr99786.c b/gcc/testsuite/gcc.target/arm/pr99786.c
deleted file mode 100644
index 11d86f0..0000000
--- a/gcc/testsuite/gcc.target/arm/pr99786.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* { dg-do compile } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mcpu=*" } { "-mcpu=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-mabi=*" } { "-mabi=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to the iWMMXt" { arm*-*-* } { "-march=*" } { "-march=iwmmxt" } } */
-/* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
-/* { dg-require-effective-target arm32 } */
-/* { dg-require-effective-target arm_iwmmxt_ok } */
-/* { dg-options "-O3 -mcpu=iwmmxt" } */
-
-typedef signed char V __attribute__((vector_size (8)));
-
-void
-foo (V *a)
-{
- *a = *a * 3;
-}
-
-typedef signed short Vshort __attribute__((vector_size (8)));
-void
-foo_short (Vshort *a)
-{
- *a = *a * 3;
-}
-
-typedef signed int Vint __attribute__((vector_size (8)));
-void
-foo_int (Vint *a)
-{
- *a = *a * 3;
-}
diff --git a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
index 41ee994..d9f95a1 100644
--- a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
+++ b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
@@ -1,6 +1,31 @@
/* { dg-do compile } */
-/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1m_lob } */
-/* { dg-options "-O" } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-O2 -mthumb" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+/*
+** foo:
+** movs (r[0-9]+), #8
+** (
+** subs \1, \1, #1
+** ands \1, \1, #255
+** and r0, r1, r0, lsr #1
+** bne .L[0-9]+
+** bx lr
+** |
+** subs \1, \1, #1
+** and r0, r1, r0, lsr #1
+** ands \1, \1, #255
+** bne .L[0-9]+
+** bx lr
+** |
+** push {lr}
+** dls lr, \1
+** and r0, r1, r0, lsr #1
+** le lr, .L[0-9]+
+** pop {pc}
+** )
+*/
unsigned short foo (unsigned short x, unsigned short c)
{
@@ -12,7 +37,3 @@ unsigned short foo (unsigned short x, unsigned short c)
}
return x;
}
-
-/* { dg-final { scan-assembler "ands" } } */
-/* { dg-final { scan-assembler-not "uxtb" } } */
-/* { dg-final { scan-assembler-not "cmp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr91446.c b/gcc/testsuite/gcc.target/i386/pr91446.c
index 0243ca3..d129405 100644
--- a/gcc/testsuite/gcc.target/i386/pr91446.c
+++ b/gcc/testsuite/gcc.target/i386/pr91446.c
@@ -21,4 +21,4 @@ foo (unsigned long long width, unsigned long long height,
bar (&t);
}
-/* { dg-final { scan-assembler-times "vmovdqa\[^\n\r\]*xmm\[0-9\]" 2 } } */
+/* { dg-final { scan-assembler-times "vmovdqa\[^\n\r\]*xmm\[0-9\]" 2 { xfail *-*-* } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr99881.c b/gcc/testsuite/gcc.target/i386/pr99881.c
index 3e087eb..a1ec1d1b 100644
--- a/gcc/testsuite/gcc.target/i386/pr99881.c
+++ b/gcc/testsuite/gcc.target/i386/pr99881.c
@@ -1,7 +1,7 @@
/* PR target/99881. */
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-options "-Ofast -march=skylake" } */
-/* { dg-final { scan-assembler-not "xmm\[0-9\]" { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-not "xmm\[0-9\]" } } */
void
foo (int* __restrict a, int n, int c)
diff --git a/gcc/testsuite/gcc.target/mips/pr54240.c b/gcc/testsuite/gcc.target/mips/pr54240.c
index d3976f6..31b793b 100644
--- a/gcc/testsuite/gcc.target/mips/pr54240.c
+++ b/gcc/testsuite/gcc.target/mips/pr54240.c
@@ -27,4 +27,4 @@ NOMIPS16 int foo(S *s)
return next->v;
}
-/* { dg-final { scan-tree-dump "Hoisting adjacent loads" "phiopt1" } } */
+/* { dg-final { scan-tree-dump "Hoisting adjacent loads" "phiopt2" } } */
diff --git a/gcc/testsuite/gcc.target/nvptx/march-map=sm_61.c b/gcc/testsuite/gcc.target/nvptx/march-map=sm_61.c
index 742e25d..d6e8ce9 100644
--- a/gcc/testsuite/gcc.target/nvptx/march-map=sm_61.c
+++ b/gcc/testsuite/gcc.target/nvptx/march-map=sm_61.c
@@ -2,7 +2,7 @@
/* { dg-options {-march-map=sm_61 -mptx=_} } */
/* { dg-additional-options -save-temps } */
/* { dg-final { scan-assembler-times {(?n)^ \.version 7\.3$} 1 } } */
-/* { dg-final { scan-assembler-times {(?n)^ \.target sm_53$} 1 } } */
+/* { dg-final { scan-assembler-times {(?n)^ \.target sm_61$} 1 } } */
#if __PTX_ISA_VERSION_MAJOR__ != 7
#error wrong value for __PTX_ISA_VERSION_MAJOR__
@@ -12,7 +12,7 @@
#error wrong value for __PTX_ISA_VERSION_MINOR__
#endif
-#if __PTX_SM__ != 530
+#if __PTX_SM__ != 610
#error wrong value for __PTX_SM__
#endif
diff --git a/gcc/testsuite/gcc.target/nvptx/march-map=sm_62.c b/gcc/testsuite/gcc.target/nvptx/march-map=sm_62.c
index 02ced4c..ccce6f7 100644
--- a/gcc/testsuite/gcc.target/nvptx/march-map=sm_62.c
+++ b/gcc/testsuite/gcc.target/nvptx/march-map=sm_62.c
@@ -2,7 +2,7 @@
/* { dg-options {-march-map=sm_62 -mptx=_} } */
/* { dg-additional-options -save-temps } */
/* { dg-final { scan-assembler-times {(?n)^ \.version 7\.3$} 1 } } */
-/* { dg-final { scan-assembler-times {(?n)^ \.target sm_53$} 1 } } */
+/* { dg-final { scan-assembler-times {(?n)^ \.target sm_61$} 1 } } */
#if __PTX_ISA_VERSION_MAJOR__ != 7
#error wrong value for __PTX_ISA_VERSION_MAJOR__
@@ -12,7 +12,7 @@
#error wrong value for __PTX_ISA_VERSION_MINOR__
#endif
-#if __PTX_SM__ != 530
+#if __PTX_SM__ != 610
#error wrong value for __PTX_SM__
#endif
diff --git a/gcc/testsuite/gcc.target/nvptx/march=sm_61.c b/gcc/testsuite/gcc.target/nvptx/march=sm_61.c
new file mode 100644
index 0000000..d8bccb8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/march=sm_61.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble } */
+/* { dg-options {-march=sm_61 -mptx=_} } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { scan-assembler-times {(?n)^ \.version 7\.3$} 1 } } */
+/* { dg-final { scan-assembler-times {(?n)^ \.target sm_61$} 1 } } */
+
+#if __PTX_ISA_VERSION_MAJOR__ != 7
+#error wrong value for __PTX_ISA_VERSION_MAJOR__
+#endif
+
+#if __PTX_ISA_VERSION_MINOR__ != 3
+#error wrong value for __PTX_ISA_VERSION_MINOR__
+#endif
+
+#if __PTX_SM__ != 610
+#error wrong value for __PTX_SM__
+#endif
+
+int dummy;
diff --git a/gcc/testsuite/gcc.target/nvptx/mptx=5.0.c b/gcc/testsuite/gcc.target/nvptx/mptx=5.0.c
new file mode 100644
index 0000000..5d6163e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/mptx=5.0.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble } */
+/* { dg-options {-march=sm_30 -mptx=5.0} } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { scan-assembler-times {(?n)^ \.version 5\.0$} 1 } } */
+/* { dg-final { scan-assembler-times {(?n)^ \.target sm_30$} 1 } } */
+
+#if __PTX_ISA_VERSION_MAJOR__ != 5
+#error wrong value for __PTX_ISA_VERSION_MAJOR__
+#endif
+
+#if __PTX_ISA_VERSION_MINOR__ != 0
+#error wrong value for __PTX_ISA_VERSION_MINOR__
+#endif
+
+#if __PTX_SM__ != 300
+#error wrong value for __PTX_SM__
+#endif
+
+int dummy;
diff --git a/gcc/testsuite/gcc.target/riscv/arch-49.c b/gcc/testsuite/gcc.target/riscv/arch-49.c
new file mode 100644
index 0000000..6b86ae9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-49.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvi20u64 -mabi=lp64" } */
+int
+foo ()
+{}
diff --git a/gcc/testsuite/gcc.target/riscv/arch-50.c b/gcc/testsuite/gcc.target/riscv/arch-50.c
new file mode 100644
index 0000000..072180d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-50.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvi20u64_mafdc -mabi=lp64d" } */
+#if !(defined __riscv_mul) || \
+ !(defined __riscv_atomic) || \
+ !(defined __riscv_flen) || \
+ !(defined __riscv_div) || \
+ !(defined __riscv_compressed)
+#error "Feature macros not defined"
+#endif
+int
+foo ()
+{}
diff --git a/gcc/testsuite/gcc.target/riscv/arch-51.c b/gcc/testsuite/gcc.target/riscv/arch-51.c
new file mode 100644
index 0000000..5af983c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-51.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva20u64 -mabi=lp64d" } */
+#if !(defined __riscv_mul) || \
+ !(defined __riscv_atomic) || \
+ !(defined __riscv_flen) || \
+ !(defined __riscv_div) || \
+ !(defined __riscv_compressed)
+#error "Feature macros not defined"
+#endif
+int
+foo ()
+{}
diff --git a/gcc/testsuite/gcc.target/riscv/arch-52.c b/gcc/testsuite/gcc.target/riscv/arch-52.c
new file mode 100644
index 0000000..6133370
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-52.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva22u64v -mabi=lp64" } */
+/* { dg-warning "Should use \"_\" to contact Profiles with other extensions" "" { target *-*-* } 0 } */
+int
+foo ()
+{}
diff --git a/gcc/testsuite/gcc.target/riscv/arch-53.c b/gcc/testsuite/gcc.target/riscv/arch-53.c
new file mode 100644
index 0000000..8210978
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-53.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rva23u64 -mabi=lp64d" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0"
+"_b1p0_v1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0"
+_ziccrse1p0_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0"
+_za64rs1p0_zaamo1p0_zalrsc1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcd1p0_zcmop1p0"
+_zba1p0_zbb1p0_zbs1p0_zkt1p0_zvbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0"
+_zvfhmin1p0_zvkb1p0_zvkt1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-54.c b/gcc/testsuite/gcc.target/riscv/arch-54.c
new file mode 100644
index 0000000..6d242df
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-54.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rvb23u64 -mabi=lp64d" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0"
+"_b1p0_zic64b1p0_zicbom1p0_zicbop1p0_zicboz1p0_ziccamoa1p0_ziccif1p0_zicclsm1p0_ziccrse1p0"
+"_zicntr2p0_zicond1p0_zicsr2p0_zihintntl1p0_zihintpause2p0_zihpm2p0_zimop1p0_za64rs1p0"
+"_zaamo1p0_zalrsc1p0_zawrs1p0_zfa1p0_zfhmin1p0_zca1p0_zcb1p0_zcd1p0_zcmop1p0_zba1p0"
+"_zbb1p0_zbs1p0_zkt1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-ss-1.c b/gcc/testsuite/gcc.target/riscv/arch-ss-1.c
new file mode 100644
index 0000000..8f95737
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-ss-1.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_ssnpm_smnpm_smmpm_sspm_supm -mabi=lp64" } */
+int foo()
+{
+}
diff --git a/gcc/testsuite/gcc.target/riscv/arch-ss-2.c b/gcc/testsuite/gcc.target/riscv/arch-ss-2.c
new file mode 100644
index 0000000..f1d7724
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-ss-2.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm -mabi=ilp32d" } */
+int foo()
+{
+}
+/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': ssnpm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': smnpm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': smmpm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': sspm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32gc_ssnpm_smnpm_smmpm_sspm_supm': supm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm': ssnpm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm': smnpm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm': smmpm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm': sspm extension supports in rv64 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv32imafdc_zicsr_zifencei_zmmul_zaamo_zalrsc_zca_zcd_zcf_smmpm_smnpm_ssnpm_sspm_supm': supm extension supports in rv64 only" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-zilsd-1.c b/gcc/testsuite/gcc.target/riscv/arch-zilsd-1.c
new file mode 100644
index 0000000..452c04e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-zilsd-1.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv32gc_zilsd_zclsd -mabi=ilp32d" } */
+int foo()
+{
+}
diff --git a/gcc/testsuite/gcc.target/riscv/arch-zilsd-2.c b/gcc/testsuite/gcc.target/riscv/arch-zilsd-2.c
new file mode 100644
index 0000000..5d6185d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-zilsd-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zilsd -mabi=ilp32d" } */
+int foo()
+{
+}
+/* { dg-error "'-march=rv64gc_zilsd': zilsd extension supports in rv32 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv64imafdc_zicsr_zifencei_zilsd_zmmul_zaamo_zalrsc_zca_zcd': zilsd extension supports in rv32 only" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-zilsd-3.c b/gcc/testsuite/gcc.target/riscv/arch-zilsd-3.c
new file mode 100644
index 0000000..3cda120
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/arch-zilsd-3.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc_zclsd -mabi=ilp32d" } */
+int foo()
+{
+}
+/* { dg-error "'-march=rv64gc_zclsd': zilsd extension supports in rv32 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv64gc_zclsd': zclsd extension supports in rv32 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv64imafdc_zicsr_zifencei_zilsd_zmmul_zaamo_zalrsc_zca_zcd_zclsd': zilsd extension supports in rv32 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv64imafdc_zicsr_zifencei_zilsd_zmmul_zaamo_zalrsc_zca_zcd_zclsd': zclsd extension supports in rv32 only" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
index 7db892c..983c9b4 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
@@ -123,6 +123,22 @@ vec_sat_u_add_##T##_fmt_8 (T *out, T *op_1, T *op_2, unsigned limit) \
} \
}
+#define DEF_VEC_SAT_U_ADD_FMT_9(WT, T) \
+void __attribute__((noinline)) \
+vec_sat_u_add_##WT##_##T##_fmt_9 (T *out, T *op_1, T *op_2, unsigned limit) \
+{ \
+ unsigned i; \
+ T max = -1; \
+ for (i = 0; i < limit; i++) \
+ { \
+ T x = op_1[i]; \
+ T y = op_2[i]; \
+ WT val = (WT)x + (WT)y; \
+ out[i] = val > max ? max : (T)val; \
+ } \
+}
+#define DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T) DEF_VEC_SAT_U_ADD_FMT_9(WT, T)
+
#define RUN_VEC_SAT_U_ADD_FMT_1(T, out, op_1, op_2, N) \
vec_sat_u_add_##T##_fmt_1(out, op_1, op_2, N)
@@ -147,6 +163,21 @@ vec_sat_u_add_##T##_fmt_8 (T *out, T *op_1, T *op_2, unsigned limit) \
#define RUN_VEC_SAT_U_ADD_FMT_8(T, out, op_1, op_2, N) \
vec_sat_u_add_##T##_fmt_8(out, op_1, op_2, N)
+#define RUN_VEC_SAT_U_ADD_FMT_9_FROM_U16(T, out, op_1, op_2, N) \
+ vec_sat_u_add_uint16_t_##T##_fmt_9(out, op_1, op_2, N)
+#define RUN_VEC_SAT_U_ADD_FMT_9_FROM_U16_WRAP(T, out, op_1, op_2, N) \
+ RUN_VEC_SAT_U_ADD_FMT_9_FROM_U16(T, out, op_1, op_2, N)
+
+#define RUN_VEC_SAT_U_ADD_FMT_9_FROM_U32(T, out, op_1, op_2, N) \
+ vec_sat_u_add_uint32_t_##T##_fmt_9(out, op_1, op_2, N)
+#define RUN_VEC_SAT_U_ADD_FMT_9_FROM_U32_WRAP(T, out, op_1, op_2, N) \
+ RUN_VEC_SAT_U_ADD_FMT_9_FROM_U32(T, out, op_1, op_2, N)
+
+#define RUN_VEC_SAT_U_ADD_FMT_9_FROM_U64(T, out, op_1, op_2, N) \
+ vec_sat_u_add_uint64_t_##T##_fmt_9(out, op_1, op_2, N)
+#define RUN_VEC_SAT_U_ADD_FMT_9_FROM_U64_WRAP(T, out, op_1, op_2, N) \
+ RUN_VEC_SAT_U_ADD_FMT_9_FROM_U64(T, out, op_1, op_2, N)
+
#define DEF_VEC_SAT_U_ADD_IMM_FMT_1(T, IMM) \
T __attribute__((noinline)) \
vec_sat_u_add_imm##IMM##_##T##_fmt_1 (T *out, T *in, unsigned limit) \
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u32.c
new file mode 100644
index 0000000..6e9cbd2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u32.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_U_ADD_FMT_9(uint32_t, uint16_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+/* { dg-final { scan-assembler-times {vsaddu\.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u64.c
new file mode 100644
index 0000000..3ab4641
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u16-from-u64.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_U_ADD_FMT_9(uint64_t, uint16_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+/* { dg-final { scan-assembler-times {vsaddu\.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u32-from-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u32-from-u64.c
new file mode 100644
index 0000000..57aa772
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u32-from-u64.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_U_ADD_FMT_9(uint64_t, uint32_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+/* { dg-final { scan-assembler-times {vsaddu\.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u16.c
new file mode 100644
index 0000000..d14fe00
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u16.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_U_ADD_FMT_9(uint16_t, uint8_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+/* { dg-final { scan-assembler-times {vsaddu\.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u32.c
new file mode 100644
index 0000000..240af94
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u32.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_U_ADD_FMT_9(uint32_t, uint8_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+/* { dg-final { scan-assembler-times {vsaddu\.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u64.c
new file mode 100644
index 0000000..706d4f2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-9-u8-from-u64.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_U_ADD_FMT_9(uint64_t, uint8_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
+/* { dg-final { scan-assembler-times {vsaddu\.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u32.c
new file mode 100644
index 0000000..06d3ba0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u32.c
@@ -0,0 +1,76 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+
+#define T uint16_t
+#define WT uint32_t
+#define N 16
+#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_ADD_FMT_9_FROM_U32_WRAP
+
+DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T)
+
+T test_data[][3][N] = {
+ {
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_0 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_1 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* expect */
+ },
+ {
+ {
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ },
+ {
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ },
+ {
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ },
+ },
+ {
+ {
+ 0, 0, 1, 0,
+ 1, 2, 3, 0,
+ 1, 2, 3, 4,
+ 5, 65534, 65535, 9,
+ },
+ {
+ 0, 1, 1, 65534,
+ 65534, 65534, 65534, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 9,
+ },
+ {
+ 0, 1, 2, 65534,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 18,
+ },
+ },
+};
+
+#include "vec_sat_binary_vvv_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u64.c
new file mode 100644
index 0000000..64dbde7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u16-from-u64.c
@@ -0,0 +1,76 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+
+#define T uint16_t
+#define WT uint64_t
+#define N 16
+#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_ADD_FMT_9_FROM_U64_WRAP
+
+DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T)
+
+T test_data[][3][N] = {
+ {
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_0 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_1 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* expect */
+ },
+ {
+ {
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ },
+ {
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ },
+ {
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ },
+ },
+ {
+ {
+ 0, 0, 1, 0,
+ 1, 2, 3, 0,
+ 1, 2, 3, 4,
+ 5, 65534, 65535, 9,
+ },
+ {
+ 0, 1, 1, 65534,
+ 65534, 65534, 65534, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 9,
+ },
+ {
+ 0, 1, 2, 65534,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 65535,
+ 65535, 65535, 65535, 18,
+ },
+ },
+};
+
+#include "vec_sat_binary_vvv_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u32-from-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u32-from-u64.c
new file mode 100644
index 0000000..2523126
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u32-from-u64.c
@@ -0,0 +1,76 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+
+#define T uint32_t
+#define WT uint64_t
+#define N 16
+#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_ADD_FMT_9_FROM_U64_WRAP
+
+DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T)
+
+T test_data[][3][N] = {
+ {
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_0 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_1 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* expect */
+ },
+ {
+ {
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ },
+ {
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ },
+ {
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ },
+ },
+ {
+ {
+ 0, 0, 1, 0,
+ 1, 2, 3, 0,
+ 1, 2, 3, 4,
+ 5, 4294967294, 4294967295, 9,
+ },
+ {
+ 0, 1, 1, 4294967294,
+ 4294967294, 4294967294, 4294967294, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 9,
+ },
+ {
+ 0, 1, 2, 4294967294,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 4294967295,
+ 4294967295, 4294967295, 4294967295, 18,
+ },
+ },
+};
+
+#include "vec_sat_binary_vvv_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u16.c
new file mode 100644
index 0000000..4cd4817
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u16.c
@@ -0,0 +1,76 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+
+#define T uint8_t
+#define WT uint16_t
+#define N 16
+#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_ADD_FMT_9_FROM_U16_WRAP
+
+DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T)
+
+T test_data[][3][N] = {
+ {
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_0 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_1 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* expect */
+ },
+ {
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ },
+ {
+ {
+ 0, 0, 1, 0,
+ 1, 2, 3, 0,
+ 1, 2, 3, 4,
+ 5, 254, 255, 9,
+ },
+ {
+ 0, 1, 1, 254,
+ 254, 254, 254, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 9,
+ },
+ {
+ 0, 1, 2, 254,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 18,
+ },
+ },
+};
+
+#include "vec_sat_binary_vvv_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u32.c
new file mode 100644
index 0000000..6b46465
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u32.c
@@ -0,0 +1,76 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+
+#define T uint8_t
+#define WT uint32_t
+#define N 16
+#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_ADD_FMT_9_FROM_U32_WRAP
+
+DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T)
+
+T test_data[][3][N] = {
+ {
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_0 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_1 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* expect */
+ },
+ {
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ },
+ {
+ {
+ 0, 0, 1, 0,
+ 1, 2, 3, 0,
+ 1, 2, 3, 4,
+ 5, 254, 255, 9,
+ },
+ {
+ 0, 1, 1, 254,
+ 254, 254, 254, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 9,
+ },
+ {
+ 0, 1, 2, 254,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 18,
+ },
+ },
+};
+
+#include "vec_sat_binary_vvv_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u64.c
new file mode 100644
index 0000000..4cd4817
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_add-run-9-u8-from-u64.c
@@ -0,0 +1,76 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+
+#define T uint8_t
+#define WT uint16_t
+#define N 16
+#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_ADD_FMT_9_FROM_U16_WRAP
+
+DEF_VEC_SAT_U_ADD_FMT_9_WRAP(WT, T)
+
+T test_data[][3][N] = {
+ {
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_0 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* arg_1 */
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ }, /* expect */
+ },
+ {
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ {
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ },
+ },
+ {
+ {
+ 0, 0, 1, 0,
+ 1, 2, 3, 0,
+ 1, 2, 3, 4,
+ 5, 254, 255, 9,
+ },
+ {
+ 0, 1, 1, 254,
+ 254, 254, 254, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 9,
+ },
+ {
+ 0, 1, 2, 254,
+ 255, 255, 255, 255,
+ 255, 255, 255, 255,
+ 255, 255, 255, 18,
+ },
+ },
+};
+
+#include "vec_sat_binary_vvv_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h b/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
index c8a135a..2225d30 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
@@ -53,12 +53,34 @@ sat_u_add_##T##_fmt_6 (T x, T y) \
return (T)(x + y) < x ? -1 : (x + y); \
}
+#define DEF_SAT_U_ADD_FMT_7(WT, T) \
+T __attribute__((noinline)) \
+sat_u_add_##WT##_##T##_fmt_7(T x, T y) \
+{ \
+ T max = -1; \
+ WT val = (WT)x + (WT)y; \
+ return val > max ? max : (T)val; \
+}
+#define DEF_SAT_U_ADD_FMT_7_WRAP(WT, T) DEF_SAT_U_ADD_FMT_7(WT, T)
+
#define RUN_SAT_U_ADD_FMT_1(T, x, y) sat_u_add_##T##_fmt_1(x, y)
#define RUN_SAT_U_ADD_FMT_2(T, x, y) sat_u_add_##T##_fmt_2(x, y)
#define RUN_SAT_U_ADD_FMT_3(T, x, y) sat_u_add_##T##_fmt_3(x, y)
#define RUN_SAT_U_ADD_FMT_4(T, x, y) sat_u_add_##T##_fmt_4(x, y)
#define RUN_SAT_U_ADD_FMT_5(T, x, y) sat_u_add_##T##_fmt_5(x, y)
#define RUN_SAT_U_ADD_FMT_6(T, x, y) sat_u_add_##T##_fmt_6(x, y)
+#define RUN_SAT_U_ADD_FMT_7_FROM_U16(T, x, y) \
+ sat_u_add_uint16_t_##T##_fmt_7(x, y)
+#define RUN_SAT_U_ADD_FMT_7_FROM_U16_WRAP(T, x, y) \
+ RUN_SAT_U_ADD_FMT_7_FROM_U16(T, x, y)
+#define RUN_SAT_U_ADD_FMT_7_FROM_U32(T, x, y) \
+ sat_u_add_uint32_t_##T##_fmt_7(x, y)
+#define RUN_SAT_U_ADD_FMT_7_FROM_U32_WRAP(T, x, y) \
+ RUN_SAT_U_ADD_FMT_7_FROM_U32(T, x, y)
+#define RUN_SAT_U_ADD_FMT_7_FROM_U64(T, x, y) \
+ sat_u_add_uint64_t_##T##_fmt_7(x, y)
+#define RUN_SAT_U_ADD_FMT_7_FROM_U64_WRAP(T, x, y) \
+ RUN_SAT_U_ADD_FMT_7_FROM_U64(T, x, y)
#define DEF_SAT_U_ADD_IMM_FMT_1(T, IMM) \
T __attribute__((noinline)) \
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c
new file mode 100644
index 0000000..527f8de
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u32.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "sat_arith.h"
+
+/*
+** sat_u_add_uint32_t_uint16_t_fmt_7:
+** add\s+[atx][0-9]+,\s*a0,\s*a1
+** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
+** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** slli\s+a0,\s*a0,\s*48
+** srli\s+a0,\s*a0,\s*48
+** ret
+*/
+DEF_SAT_U_ADD_FMT_7(uint32_t, uint16_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c
new file mode 100644
index 0000000..e9031de
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u16-from-u64.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "sat_arith.h"
+
+/*
+** sat_u_add_uint64_t_uint16_t_fmt_7:
+** add\s+[atx][0-9]+,\s*a0,\s*a1
+** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*48
+** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** slli\s+a0,\s*a0,\s*48
+** srli\s+a0,\s*a0,\s*48
+** ret
+*/
+DEF_SAT_U_ADD_FMT_7(uint64_t, uint16_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c
new file mode 100644
index 0000000..a71bd2f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u32-from-u64.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "sat_arith.h"
+
+/*
+** sat_u_add_uint64_t_uint32_t_fmt_7:
+** slli\s+[atx][0-9]+,\s*a0,\s*32
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
+** add\s+[atx][0-9]+,\s*a[01],\s*a[01]
+** slli\s+[atx][0-9]+,\s*[atx][0-9],\s*32
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*32
+** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** sext.w\s+a0,\s*a0
+** ret
+*/
+DEF_SAT_U_ADD_FMT_7(uint64_t, uint32_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c
new file mode 100644
index 0000000..5892986
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u16.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "sat_arith.h"
+
+/*
+** sat_u_add_uint16_t_uint8_t_fmt_7:
+** add\s+[atx][0-9]+,\s*a0,\s*a1
+** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
+** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** andi\s+a0,\s*a0,\s*0xff
+** ret
+*/
+DEF_SAT_U_ADD_FMT_7(uint16_t, uint8_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c
new file mode 100644
index 0000000..a42a712
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u32.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "sat_arith.h"
+
+/*
+** sat_u_add_uint32_t_uint8_t_fmt_7:
+** add\s+[atx][0-9]+,\s*a0,\s*a1
+** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
+** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** andi\s+a0,\s*a0,\s*0xff
+** ret
+*/
+DEF_SAT_U_ADD_FMT_7(uint32_t, uint8_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c
new file mode 100644
index 0000000..f37ef1c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-7-u8-from-u64.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "sat_arith.h"
+
+/*
+** sat_u_add_uint64_t_uint8_t_fmt_7:
+** add\s+[atx][0-9]+,\s*a0,\s*a1
+** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*0xff
+** sltu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** or\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** andi\s+a0,\s*a0,\s*0xff
+** ret
+*/
+DEF_SAT_U_ADD_FMT_7(uint64_t, uint8_t)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u32.c
new file mode 100644
index 0000000..25dc1d1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u32.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "sat_arith.h"
+
+#define T uint16_t
+#define WT uint32_t
+#define RUN_SAT_BINARY RUN_SAT_U_ADD_FMT_7_FROM_U32_WRAP
+
+DEF_SAT_U_ADD_FMT_7_WRAP(WT, T)
+
+T test_data[][3] = {
+ /* arg_0, arg_1, expect */
+ { 0, 0, 0, },
+ { 0, 1, 1, },
+ { 1, 1, 2, },
+ { 0, 65534, 65534, },
+ { 1, 65534, 65535, },
+ { 2, 65534, 65535, },
+ { 0, 65535, 65535, },
+ { 1, 65535, 65535, },
+ { 2, 65535, 65535, },
+ { 65535, 65535, 65535, },
+};
+
+#include "scalar_sat_binary.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u64.c
new file mode 100644
index 0000000..565b108
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u16-from-u64.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "sat_arith.h"
+
+#define T uint16_t
+#define WT uint64_t
+#define RUN_SAT_BINARY RUN_SAT_U_ADD_FMT_7_FROM_U64_WRAP
+
+DEF_SAT_U_ADD_FMT_7_WRAP(WT, T)
+
+T test_data[][3] = {
+ /* arg_0, arg_1, expect */
+ { 0, 0, 0, },
+ { 0, 1, 1, },
+ { 1, 1, 2, },
+ { 0, 65534, 65534, },
+ { 1, 65534, 65535, },
+ { 2, 65534, 65535, },
+ { 0, 65535, 65535, },
+ { 1, 65535, 65535, },
+ { 2, 65535, 65535, },
+ { 65535, 65535, 65535, },
+};
+
+#include "scalar_sat_binary.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u32-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u32-from-u64.c
new file mode 100644
index 0000000..6ff34fd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u32-from-u64.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "sat_arith.h"
+
+#define T uint32_t
+#define WT uint64_t
+#define RUN_SAT_BINARY RUN_SAT_U_ADD_FMT_7_FROM_U64_WRAP
+
+DEF_SAT_U_ADD_FMT_7_WRAP(WT, T)
+
+T test_data[][3] = {
+ /* arg_0, arg_1, expect */
+ { 0, 0, 0, },
+ { 0, 1, 1, },
+ { 1, 1, 2, },
+ { 0, 4294967294, 4294967294, },
+ { 1, 4294967294, 4294967295, },
+ { 2, 4294967294, 4294967295, },
+ { 0, 4294967295, 4294967295, },
+ { 1, 4294967295, 4294967295, },
+ { 2, 4294967295, 4294967295, },
+ { 4294967295, 4294967295, 4294967295, },
+};
+
+#include "scalar_sat_binary.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c
new file mode 100644
index 0000000..9e6e70a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u16.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "sat_arith.h"
+
+#define T uint8_t
+#define WT uint16_t
+#define RUN_SAT_BINARY RUN_SAT_U_ADD_FMT_7_FROM_U16_WRAP
+
+DEF_SAT_U_ADD_FMT_7_WRAP(WT, T)
+
+T test_data[][3] = {
+ /* arg_0, arg_1, expect */
+ { 0, 0, 0, },
+ { 0, 1, 1, },
+ { 1, 1, 2, },
+ { 0, 254, 254, },
+ { 1, 254, 255, },
+ { 2, 254, 255, },
+ { 0, 255, 255, },
+ { 1, 255, 255, },
+ { 2, 255, 255, },
+ { 255, 255, 255, },
+};
+
+#include "scalar_sat_binary.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c
new file mode 100644
index 0000000..a1134ed
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u32.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "sat_arith.h"
+
+#define T uint8_t
+#define WT uint32_t
+#define RUN_SAT_BINARY RUN_SAT_U_ADD_FMT_7_FROM_U32_WRAP
+
+DEF_SAT_U_ADD_FMT_7_WRAP(WT, T)
+
+T test_data[][3] = {
+ /* arg_0, arg_1, expect */
+ { 0, 0, 0, },
+ { 0, 1, 1, },
+ { 1, 1, 2, },
+ { 0, 254, 254, },
+ { 1, 254, 255, },
+ { 2, 254, 255, },
+ { 0, 255, 255, },
+ { 1, 255, 255, },
+ { 2, 255, 255, },
+ { 255, 255, 255, },
+};
+
+#include "scalar_sat_binary.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c
new file mode 100644
index 0000000..ef9f7aa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-7-u8-from-u64.c
@@ -0,0 +1,26 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "sat_arith.h"
+
+#define T uint8_t
+#define WT uint64_t
+#define RUN_SAT_BINARY RUN_SAT_U_ADD_FMT_7_FROM_U64_WRAP
+
+DEF_SAT_U_ADD_FMT_7_WRAP(WT, T)
+
+T test_data[][3] = {
+ /* arg_0, arg_1, expect */
+ { 0, 0, 0, },
+ { 0, 1, 1, },
+ { 1, 1, 2, },
+ { 0, 254, 254, },
+ { 1, 254, 255, },
+ { 2, 254, 255, },
+ { 0, 255, 255, },
+ { 1, 255, 255, },
+ { 2, 255, 255, },
+ { 255, 255, 255, },
+};
+
+#include "scalar_sat_binary.h"
diff --git a/gcc/testsuite/gfortran.dg/interface_61.f90 b/gcc/testsuite/gfortran.dg/interface_61.f90
new file mode 100644
index 0000000..15db3b8a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/interface_61.f90
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-options -Wexternal-argument-mismatch }
+! PR fortran/120163 - this used to cause an error.
+! Original test case by Bálint Aradi
+module mod1
+ implicit none
+
+ abstract interface
+ pure subroutine callback_interface(a)
+ real, intent(in) :: a
+ end subroutine callback_interface
+ end interface
+
+contains
+
+ subroutine caller(callback)
+ procedure(callback_interface) :: callback
+ real :: a
+ call callback(a)
+ end subroutine caller
+
+end module mod1
+
+
+module mod2
+ use mod1
+end module mod2
diff --git a/gcc/testsuite/gfortran.dg/transfer_array_subref.f90 b/gcc/testsuite/gfortran.dg/transfer_array_subref.f90
new file mode 100644
index 0000000..b480dff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/transfer_array_subref.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+! { dg-additional-options "-O2 -fdump-tree-optimized" }
+!
+! PR fortran/102891 - passing of inquiry ref of complex array to TRANSFER
+
+program main
+ implicit none
+ integer, parameter :: dp = 8
+
+ type complex_wrap1
+ complex(dp) :: z(2)
+ end type complex_wrap1
+
+ type complex_wrap2
+ complex(dp), dimension(:), allocatable :: z
+ end type complex_wrap2
+
+ type(complex_wrap1) :: x = complex_wrap1([ (1, 2), (3, 4) ])
+ type(complex_wrap2) :: w
+
+ w%z = x%z
+
+ ! The following statements should get optimized away...
+ if (size (transfer ( x%z%re ,[1.0_dp])) /= 2) error stop 1
+ if (size (transfer ((x%z%re),[1.0_dp])) /= 2) error stop 2
+ if (size (transfer ([x%z%re],[1.0_dp])) /= 2) error stop 3
+ if (size (transfer ( x%z%im ,[1.0_dp])) /= 2) error stop 4
+ if (size (transfer ((x%z%im),[1.0_dp])) /= 2) error stop 5
+ if (size (transfer ([x%z%im],[1.0_dp])) /= 2) error stop 6
+
+ ! ... while the following may not:
+ if (any (transfer ( x%z%re ,[1.0_dp]) /= x%z%re)) stop 7
+ if (any (transfer ( x%z%im ,[1.0_dp]) /= x%z%im)) stop 8
+
+ if (size (transfer ( w%z%re ,[1.0_dp])) /= 2) stop 11
+ if (size (transfer ((w%z%re),[1.0_dp])) /= 2) stop 12
+ if (size (transfer ([w%z%re],[1.0_dp])) /= 2) stop 13
+ if (size (transfer ( w%z%im ,[1.0_dp])) /= 2) stop 14
+ if (size (transfer ((w%z%im),[1.0_dp])) /= 2) stop 15
+ if (size (transfer ([w%z%im],[1.0_dp])) /= 2) stop 16
+
+ if (any (transfer ( w%z%re ,[1.0_dp]) /= x%z%re)) stop 17
+ if (any (transfer ( w%z%im ,[1.0_dp]) /= x%z%im)) stop 18
+
+ deallocate (w%z)
+end program main
+
+! { dg-final { scan-tree-dump-not "_gfortran_error_stop_numeric" "optimized" } }
diff --git a/gcc/testsuite/gm2.dg/doc/examples/plugin/fail/assignvalue.mod b/gcc/testsuite/gm2.dg/doc/examples/plugin/fail/assignvalue.mod
new file mode 100644
index 0000000..56eb0bb
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/doc/examples/plugin/fail/assignvalue.mod
@@ -0,0 +1,25 @@
+(* { dg-do compile } *)
+(* { dg-options "-fsoft-check-all -fm2-plugin" } *)
+(* { dg-skip-if "" { *-*-* } { "*" } { "-O2" } } *)
+
+MODULE assignvalue ; (*!m2iso+gm2*)
+
+PROCEDURE bad () : INTEGER ;
+VAR
+ i: INTEGER ;
+BEGIN
+ i := -1 ;
+ RETURN i
+END bad ;
+
+VAR
+ foo: CARDINAL ;
+BEGIN
+ (* The m2rte plugin will detect this as an error, post
+ optimization. *)
+ foo := bad () (* { dg-error "error: In program module assignvalue" } *)
+ (* { dg-begin-multiline-output "" }
+runtime error will occur, assignment will cause a range error, as the runtime instance value of 'CARDINAL' does not overlap with the type 'INTEGER'
+ { dg-end-multiline-output "" } *)
+
+END assignvalue.
diff --git a/gcc/testsuite/gm2.dg/doc/examples/plugin/fail/doc-examples-plugin-fail.exp b/gcc/testsuite/gm2.dg/doc/examples/plugin/fail/doc-examples-plugin-fail.exp
new file mode 100644
index 0000000..8a41ff8
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/doc/examples/plugin/fail/doc-examples-plugin-fail.exp
@@ -0,0 +1,25 @@
+# Compile tests, no torture testing.
+#
+# These tests should all generate errors if the plugin is available.
+
+# Load support procs.
+load_lib gm2-dg.exp
+
+gm2_init_pim4 $srcdir/$subdir
+
+# Initialize `dg'.
+dg-init
+
+# If the --enable-plugin has not been enabled during configure, bail.
+if { ![gm2-dg-frontend-configure-check "enable-plugin" ] } {
+ return
+}
+
+# Main loop.
+
+set tests [lsort [glob -nocomplain $srcdir/$subdir/*.mod]]
+
+gm2-dg-runtest $tests "" ""
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/lib/gm2-dg.exp b/gcc/testsuite/lib/gm2-dg.exp
index eaed554..5a36507 100644
--- a/gcc/testsuite/lib/gm2-dg.exp
+++ b/gcc/testsuite/lib/gm2-dg.exp
@@ -65,7 +65,7 @@ proc gm2-dg-runtest { testcases flags default-extra-flags } {
if [expr [search_for $test "dg-do run"]] {
set option_list $TORTURE_OPTIONS
} else {
- set option_list [list { -O } ]
+ set option_list [list { -O -O2 } ]
}
set nshort [file tail [file dirname $test]]/[file tail $test]
@@ -77,3 +77,38 @@ proc gm2-dg-runtest { testcases flags default-extra-flags } {
}
}
+
+# Check if frontend has been configured with option.
+# This checks a configure build option was used and not
+# the availability of a compiler command line option.
+
+proc gm2-dg-frontend-configure-check { option } {
+ global GCC_UNDER_TEST
+
+ # ignore any arguments after the command
+ set compiler [lindex $GCC_UNDER_TEST 0]
+
+ if ![is_remote host] {
+ set compiler_name [which $compiler]
+ } else {
+ set compiler_name $compiler
+ }
+
+ # verify that the compiler exists
+ if { $compiler_name != 0 } then {
+ set tmp [remote_exec host "$compiler -v"]
+ set status [lindex $tmp 0]
+ set output [lindex $tmp 1]
+ regexp "Configured with.*\[\n\r\]" $output config
+ set option "*${option}*"
+ if { [string match $option $config] } {
+ return 1
+ } else {
+ return 0
+ }
+ } else {
+ # compiler does not exist (this should have already been detected)
+ warning "$compiler does not exist"
+ return 0
+ }
+}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 287e51b..e0495d8 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -7436,19 +7436,6 @@ proc check_effective_target_arm_softfloat { } {
}]
}
-# Return 1 if this is an ARM target supporting -mcpu=iwmmxt.
-# Some multilibs may be incompatible with this option.
-
-proc check_effective_target_arm_iwmmxt_ok { } {
- if { [check_effective_target_arm32] } {
- return [check_no_compiler_messages arm_iwmmxt_ok object {
- int dummy;
- } "-mcpu=iwmmxt"]
- } else {
- return 0
- }
-}
-
# Return true if LDRD/STRD instructions are prefered over LDM/STM instructions
# for an ARM target.
proc check_effective_target_arm_prefer_ldrd_strd { } {
@@ -10145,6 +10132,7 @@ proc check_effective_target_sync_int_long { } {
|| ([istarget arc*-*-*] && [check_effective_target_arc_atomic])
|| [check_effective_target_mips_llsc]
|| [istarget nvptx*-*-*]
+ || ([istarget xtensa*-*-*] && [check_effective_target_xtensa_atomic])
}}]
}
@@ -10182,7 +10170,9 @@ proc check_effective_target_sync_char_short { } {
|| ([istarget riscv*-*-*]
&& ([check_effective_target_riscv_zalrsc]
|| [check_effective_target_riscv_zabha]))
- || [check_effective_target_mips_llsc] }}]
+ || [check_effective_target_mips_llsc]
+ || ([istarget xtensa*-*-*] && [check_effective_target_xtensa_atomic])
+ }}]
}
# Return 1 if thread_fence does not rely on __sync_synchronize
@@ -14407,3 +14397,12 @@ proc check_effective_target_speculation_barrier_defined { } {
}
}]
}
+
+# Return 1 if this is a compiler supporting Xtensa atomic operations
+proc check_effective_target_xtensa_atomic { } {
+ return [check_no_compiler_messages xtensa_atomic assembly {
+ #if __XCHAL_HAVE_S32C1I != 1 && __XCHAL_HAVE_EXCLUSIVE != 1
+ #error FOO
+ #endif
+ }]
+}
diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc
index de7b9b7..fd2abfe 100644
--- a/gcc/tree-ssanames.cc
+++ b/gcc/tree-ssanames.cc
@@ -488,7 +488,7 @@ set_bitmask (tree name, const wide_int &value, const wide_int &mask)
{
gcc_assert (!POINTER_TYPE_P (TREE_TYPE (name)));
- int_range<2> r (TREE_TYPE (name));
+ int_range_max r (TREE_TYPE (name));
r.update_bitmask (irange_bitmask (value, mask));
set_range_info (name, r);
}
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index efe6a2c..bd390b2 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -424,6 +424,7 @@ vect_stmt_relevant_p (stmt_vec_info stmt_info, loop_vec_info loop_vinfo,
alternate exit. */
if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
&& is_a <gphi *> (stmt)
+ && gimple_bb (stmt) == LOOP_VINFO_LOOP (loop_vinfo)->header
&& ((! VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (stmt_info))
&& ! *live_p)
|| STMT_VINFO_DEF_TYPE (stmt_info) == vect_induction_def))
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index a770b41..d2c14e7 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -2286,7 +2286,7 @@ irange::set_range_from_bitmask ()
if (has_zero)
{
int_range<2> zero;
- zero.set_zero (type ());
+ zero.set_zero (m_type);
union_ (zero);
}
if (flag_checking)
@@ -2295,31 +2295,58 @@ irange::set_range_from_bitmask ()
}
else if (popcount == 0)
{
- set_zero (type ());
+ set_zero (m_type);
return true;
}
- // If the mask doesn't have any trailing zero, return.
+ // If the mask doesn't have a trailing zero, theres nothing to filter.
int z = wi::ctz (m_bitmask.mask ());
if (!z)
return false;
- // Remove trailing ranges that this bitmask indicates can't exist.
- int_range_max mask_range;
- int prec = TYPE_PRECISION (type ());
- wide_int ub = (wi::one (prec) << z) - 1;
- mask_range = int_range<2> (type (), wi::zero (prec), ub);
+ int prec = TYPE_PRECISION (m_type);
+ wide_int value = m_bitmask.value ();
+ wide_int mask = m_bitmask.mask ();
- // Then remove the specific value these bits contain from the range.
- wide_int value = m_bitmask.value () & ub;
- mask_range.intersect (int_range<2> (type (), value, value, VR_ANTI_RANGE));
+ // Remove the [0, X] values which the trailing-zero mask rules out.
+ // For example, if z == 4, the mask is 0xFFF0, and the lowest 4 bits
+ // define the range [0, 15]. Only one of which (value & low_mask) is allowed.
+ wide_int ub = (wi::one (prec) << z) - 1; // Upper bound of affected range.
+ int_range_max mask_range (m_type, wi::zero (prec), ub);
- // Inverting produces a list of ranges which can be valid.
+ // Remove the one valid value from the excluded range and form an anti-range.
+ wide_int allow = value & ub;
+ mask_range.intersect (int_range<2> (m_type, allow, allow, VR_ANTI_RANGE));
+
+ // Invert it to get the allowed values and intersect it with the main range.
mask_range.invert ();
+ bool changed = intersect (mask_range);
- // And finally select R from only those valid values.
- intersect (mask_range);
- return true;
+ // Now handle the rest of the domain — the upper side for positive values,
+ // or [-X, -1] for signed negatives.
+ // Compute the maximum value representable under the mask/value constraint.
+ ub = mask | value;
+
+ // If value is non-negative, adjust the upper limit to remove values above
+ // UB that conflict with known fixed bits.
+ if (TYPE_SIGN (m_type) == UNSIGNED || wi::clz (ub) > 0)
+ mask_range = int_range<1> (m_type, wi::zero (prec), ub);
+ else
+ {
+ // For signed negative values, find the lowest value with trailing zeros.
+ // This forms a range such as [-512, -1] for z=9.
+ wide_int lb = -(wi::one (prec) << z);
+ mask_range = int_range<2> (m_type, lb, wi::minus_one (prec));
+
+ // Remove the one allowed value from that set.
+ allow = value | lb;
+ mask_range.intersect (int_range<2> (m_type, allow, allow, VR_ANTI_RANGE));
+ mask_range.invert ();
+ }
+
+ // Make sure we call intersect, so do it first.
+ changed = intersect (mask_range) | changed;
+ return changed;
}
void