aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog57
-rw-r--r--MAINTAINERS8
-rw-r--r--Makefile.in4
-rw-r--r--Makefile.tpl4
-rwxr-xr-xconfigure11
-rw-r--r--configure.ac11
-rw-r--r--contrib/ChangeLog23
-rw-r--r--contrib/config-list.mk2
-rwxr-xr-xcontrib/gcc_update2
-rwxr-xr-xcontrib/git-descr.sh2
-rw-r--r--contrib/unicode/DerivedCoreProperties.txt12416
-rw-r--r--contrib/unicode/DerivedNormalizationProps.txt9953
-rw-r--r--contrib/unicode/EastAsianWidth.txt149
-rw-r--r--contrib/unicode/PropList.txt100
-rw-r--r--contrib/unicode/README33
-rw-r--r--contrib/unicode/UnicodeData.txt837
-rw-r--r--gcc/ChangeLog1614
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in11
-rw-r--r--gcc/ada/ChangeLog661
-rw-r--r--gcc/ada/Makefile.rtl211
-rw-r--r--gcc/ada/adaint.h2
-rw-r--r--gcc/ada/atree.adb8
-rw-r--r--gcc/ada/atree.ads12
-rw-r--r--gcc/ada/atree.h2
-rw-r--r--gcc/ada/checks.adb99
-rw-r--r--gcc/ada/cstreams.c13
-rw-r--r--gcc/ada/debug.adb5
-rw-r--r--gcc/ada/debug_a.adb32
-rw-r--r--gcc/ada/debug_a.ads14
-rw-r--r--gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst6
-rw-r--r--gcc/ada/doc/gnat_rm/the_gnat_library.rst68
-rw-r--r--gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst37
-rw-r--r--gcc/ada/einfo-utils.adb61
-rw-r--r--gcc/ada/einfo-utils.ads57
-rw-r--r--gcc/ada/exp_aggr.adb30
-rw-r--r--gcc/ada/exp_ch3.adb1072
-rw-r--r--gcc/ada/exp_ch3.ads7
-rw-r--r--gcc/ada/exp_ch4.adb550
-rw-r--r--gcc/ada/exp_ch6.adb1031
-rw-r--r--gcc/ada/exp_ch6.ads28
-rw-r--r--gcc/ada/exp_ch7.adb92
-rw-r--r--gcc/ada/exp_code.adb6
-rw-r--r--gcc/ada/exp_disp.adb10
-rw-r--r--gcc/ada/exp_imgv.adb4
-rw-r--r--gcc/ada/exp_prag.adb8
-rw-r--r--gcc/ada/exp_tss.adb2
-rw-r--r--gcc/ada/exp_util.adb58
-rw-r--r--gcc/ada/freeze.adb75
-rw-r--r--gcc/ada/freeze.ads9
-rw-r--r--gcc/ada/gcc-interface/Make-lang.in2
-rw-r--r--gcc/ada/gcc-interface/decl.cc38
-rw-r--r--gcc/ada/gcc-interface/gigi.h4
-rw-r--r--gcc/ada/gcc-interface/trans.cc24
-rw-r--r--gcc/ada/gcc-interface/utils2.cc10
-rw-r--r--gcc/ada/ghost.adb145
-rw-r--r--gcc/ada/ghost.ads27
-rw-r--r--gcc/ada/gnat_cuda.adb9
-rw-r--r--gcc/ada/gnat_rm.texi476
-rw-r--r--gcc/ada/gnat_ugn.texi41
-rw-r--r--gcc/ada/gnatls.adb2
-rw-r--r--gcc/ada/impunit.adb1
-rw-r--r--gcc/ada/libgnat/a-cbhase.adb58
-rw-r--r--gcc/ada/libgnat/a-cbhase.ads22
-rw-r--r--gcc/ada/libgnat/a-cborse.adb56
-rw-r--r--gcc/ada/libgnat/a-cborse.ads22
-rw-r--r--gcc/ada/libgnat/a-cfinse.adb304
-rw-r--r--gcc/ada/libgnat/a-cfinse.ads377
-rw-r--r--gcc/ada/libgnat/a-cihase.adb58
-rw-r--r--gcc/ada/libgnat/a-cihase.ads22
-rw-r--r--gcc/ada/libgnat/a-ciorse.adb55
-rw-r--r--gcc/ada/libgnat/a-ciorse.ads22
-rw-r--r--gcc/ada/libgnat/a-cohase.adb58
-rw-r--r--gcc/ada/libgnat/a-cohase.ads22
-rw-r--r--gcc/ada/libgnat/a-conhel.adb8
-rw-r--r--gcc/ada/libgnat/a-conhel.ads28
-rw-r--r--gcc/ada/libgnat/a-coorse.adb55
-rw-r--r--gcc/ada/libgnat/a-coorse.ads22
-rw-r--r--gcc/ada/libgnat/a-exstat.adb7
-rw-r--r--gcc/ada/libgnat/g-awk.adb1
-rw-r--r--gcc/ada/libgnat/g-socket.adb14
-rw-r--r--gcc/ada/libgnat/g-socket.ads2
-rw-r--r--gcc/ada/libgnat/s-imageu.ads21
-rw-r--r--gcc/ada/libgnat/s-os_lib.adb2
-rw-r--r--gcc/ada/libgnat/s-regpat.adb33
-rw-r--r--gcc/ada/libgnat/s-regpat.ads29
-rw-r--r--gcc/ada/libgnat/s-secsta.adb73
-rw-r--r--gcc/ada/libgnat/s-secsta.ads26
-rw-r--r--gcc/ada/libgnat/s-valuei.ads21
-rw-r--r--gcc/ada/libgnat/s-valuti.ads27
-rw-r--r--gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads165
-rw-r--r--gcc/ada/libgnat/system-vxworks-arm-rtp.ads164
-rw-r--r--gcc/ada/libgnat/system-vxworks-arm.ads159
-rw-r--r--gcc/ada/libgnat/system-vxworks-e500-kernel.ads160
-rw-r--r--gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads166
-rw-r--r--gcc/ada/libgnat/system-vxworks-e500-rtp.ads164
-rw-r--r--gcc/ada/libgnat/system-vxworks-ppc-kernel.ads4
-rw-r--r--gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads4
-rw-r--r--gcc/ada/libgnat/system-vxworks-ppc-rtp.ads4
-rw-r--r--gcc/ada/libgnat/system-vxworks-x86-kernel.ads163
-rw-r--r--gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads164
-rw-r--r--gcc/ada/libgnat/system-vxworks-x86-rtp.ads163
-rw-r--r--gcc/ada/libgnat/system-vxworks7-e500-kernel.ads160
-rw-r--r--gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads165
-rw-r--r--gcc/ada/libgnat/system-vxworks7-e500-rtp.ads164
-rw-r--r--gcc/ada/nlists.adb8
-rw-r--r--gcc/ada/nlists.ads12
-rw-r--r--gcc/ada/osint.adb6
-rw-r--r--gcc/ada/par_sco.adb12
-rw-r--r--gcc/ada/raise-gcc.c4
-rw-r--r--gcc/ada/sem_aggr.adb82
-rw-r--r--gcc/ada/sem_attr.adb103
-rw-r--r--gcc/ada/sem_aux.adb6
-rw-r--r--gcc/ada/sem_ch10.adb12
-rw-r--r--gcc/ada/sem_ch12.adb114
-rw-r--r--gcc/ada/sem_ch13.adb33
-rw-r--r--gcc/ada/sem_ch3.adb118
-rw-r--r--gcc/ada/sem_ch4.adb40
-rw-r--r--gcc/ada/sem_ch5.adb14
-rw-r--r--gcc/ada/sem_ch6.adb67
-rw-r--r--gcc/ada/sem_ch8.adb2
-rw-r--r--gcc/ada/sem_disp.adb86
-rw-r--r--gcc/ada/sem_eval.adb4
-rw-r--r--gcc/ada/sem_prag.adb139
-rw-r--r--gcc/ada/sem_prag.ads1
-rw-r--r--gcc/ada/sem_res.adb178
-rw-r--r--gcc/ada/sem_util.adb144
-rw-r--r--gcc/ada/sem_util.ads13
-rw-r--r--gcc/ada/sem_warn.adb9
-rw-r--r--gcc/ada/sem_warn.ads18
-rw-r--r--gcc/ada/sfn_scan.adb1
-rw-r--r--gcc/ada/sinfo.ads4
-rw-r--r--gcc/ada/snames.ads-tmpl1
-rw-r--r--gcc/ada/sprint.adb10
-rw-r--r--gcc/ada/tbuild.adb4
-rw-r--r--gcc/ada/types.ads5
-rw-r--r--gcc/ada/uintp.ads2
-rw-r--r--gcc/ada/vxworks-arm-link.spec4
-rw-r--r--gcc/ada/vxworks-e500-link.spec6
-rw-r--r--gcc/ada/vxworks-smp-arm-link.spec4
-rw-r--r--gcc/ada/vxworks-smp-e500-link.spec4
-rw-r--r--gcc/ada/vxworks-smp-x86-link.spec9
-rw-r--r--gcc/adjust-alignment.cc2
-rw-r--r--gcc/analyzer/ChangeLog237
-rw-r--r--gcc/analyzer/analyzer.opt24
-rw-r--r--gcc/analyzer/call-info.cc1
-rw-r--r--gcc/analyzer/call-string.cc174
-rw-r--r--gcc/analyzer/call-string.h90
-rw-r--r--gcc/analyzer/checker-path.cc107
-rw-r--r--gcc/analyzer/checker-path.h2
-rw-r--r--gcc/analyzer/constraint-manager.cc4
-rw-r--r--gcc/analyzer/diagnostic-manager.cc69
-rw-r--r--gcc/analyzer/diagnostic-manager.h4
-rw-r--r--gcc/analyzer/engine.cc295
-rw-r--r--gcc/analyzer/exploded-graph.h61
-rw-r--r--gcc/analyzer/pending-diagnostic.h20
-rw-r--r--gcc/analyzer/program-point.cc63
-rw-r--r--gcc/analyzer/program-point.h35
-rw-r--r--gcc/analyzer/program-state.cc12
-rw-r--r--gcc/analyzer/region-model-manager.cc3
-rw-r--r--gcc/analyzer/region-model.cc455
-rw-r--r--gcc/analyzer/region-model.h10
-rw-r--r--gcc/analyzer/region.cc1
-rw-r--r--gcc/analyzer/sm-fd.cc857
-rw-r--r--gcc/analyzer/sm-malloc.cc3
-rw-r--r--gcc/analyzer/sm-signal.cc6
-rw-r--r--gcc/analyzer/sm-taint.cc51
-rw-r--r--gcc/analyzer/sm.cc13
-rw-r--r--gcc/analyzer/sm.h3
-rw-r--r--gcc/analyzer/store.cc3
-rw-r--r--gcc/analyzer/supergraph.cc13
-rw-r--r--gcc/analyzer/supergraph.h2
-rw-r--r--gcc/analyzer/svalue.cc27
-rw-r--r--gcc/asan.cc19
-rw-r--r--gcc/auto-inc-dec.cc4
-rw-r--r--gcc/auto-profile.cc8
-rw-r--r--gcc/bb-reorder.cc18
-rw-r--r--gcc/builtins.cc17
-rw-r--r--gcc/c-family/ChangeLog79
-rw-r--r--gcc/c-family/c-common.cc14
-rw-r--r--gcc/c-family/c-common.h4
-rw-r--r--gcc/c-family/c-format.cc4
-rw-r--r--gcc/c-family/c-ppoutput.cc78
-rw-r--r--gcc/c-family/c-pragma.cc425
-rw-r--r--gcc/c-family/c-pragma.h13
-rw-r--r--gcc/c-family/c-ubsan.cc116
-rw-r--r--gcc/c-family/c.opt6
-rw-r--r--gcc/c-family/known-headers.cc14
-rw-r--r--gcc/c/ChangeLog15
-rw-r--r--gcc/c/c-parser.cc41
-rw-r--r--gcc/calls.cc40
-rw-r--r--gcc/cfgcleanup.cc8
-rw-r--r--gcc/cfgexpand.cc15
-rw-r--r--gcc/cfgloop.cc2
-rw-r--r--gcc/cfgloopmanip.cc5
-rw-r--r--gcc/cfgrtl.cc10
-rw-r--r--gcc/cgraph.cc7
-rw-r--r--gcc/cgraphbuild.cc13
-rw-r--r--gcc/cgraphunit.cc3
-rw-r--r--gcc/combine-stack-adj.cc4
-rw-r--r--gcc/combine.cc10
-rw-r--r--gcc/common.opt26
-rw-r--r--gcc/common/config/i386/i386-common.cc5
-rw-r--r--gcc/common/config/loongarch/loongarch-common.cc3
-rw-r--r--gcc/common/config/tilegx/tilegx-common.cc58
-rw-r--r--gcc/common/config/tilepro/tilepro-common.cc54
-rw-r--r--gcc/compare-elim.cc6
-rw-r--r--gcc/config.gcc30
-rw-r--r--gcc/config/alpha/alpha-protos.h2
-rw-r--r--gcc/config/alpha/alpha.cc69
-rw-r--r--gcc/config/alpha/ev4.md15
-rw-r--r--gcc/config/arm/arm.cc3
-rw-r--r--gcc/config/gcn/gcn-protos.h2
-rw-r--r--gcc/config/gcn/gcn.md36
-rw-r--r--gcc/config/gcn/mkoffload.cc35
-rw-r--r--gcc/config/i386/i386-builtin.def2
-rw-r--r--gcc/config/i386/i386-builtins.cc2
-rw-r--r--gcc/config/i386/i386-expand.cc8
-rw-r--r--gcc/config/i386/i386-features.cc73
-rw-r--r--gcc/config/i386/i386-features.h16
-rw-r--r--gcc/config/i386/i386-protos.h2
-rw-r--r--gcc/config/i386/i386.cc71
-rw-r--r--gcc/config/i386/i386.md372
-rw-r--r--gcc/config/i386/intelmic-mkoffload.cc56
-rw-r--r--gcc/config/i386/mmx.md37
-rw-r--r--gcc/config/i386/predicates.md11
-rw-r--r--gcc/config/i386/sse.md125
-rw-r--r--gcc/config/loongarch/loongarch-protos.h1
-rw-r--r--gcc/config/loongarch/loongarch.cc43
-rw-r--r--gcc/config/loongarch/loongarch.h2
-rw-r--r--gcc/config/loongarch/loongarch.md36
-rw-r--r--gcc/config/mips/mips.cc7
-rw-r--r--gcc/config/mips/mips.h7
-rw-r--r--gcc/config/nios2/nios2.cc5
-rw-r--r--gcc/config/nvptx/mkoffload.cc37
-rw-r--r--gcc/config/riscv/bitmanip.md2
-rw-r--r--gcc/config/riscv/riscv-builtins.cc1
-rw-r--r--gcc/config/riscv/riscv-cmo.def16
-rw-r--r--gcc/config/riscv/riscv-ftypes.def3
-rw-r--r--gcc/config/rs6000/aix71.h6
-rw-r--r--gcc/config/rs6000/darwin.h2
-rw-r--r--gcc/config/rs6000/darwin64-biarch.h2
-rw-r--r--gcc/config/rs6000/default64.h6
-rw-r--r--gcc/config/rs6000/eabi.h2
-rw-r--r--gcc/config/rs6000/eabialtivec.h2
-rw-r--r--gcc/config/rs6000/linuxaltivec.h4
-rw-r--r--gcc/config/rs6000/rs6000-c.cc8
-rw-r--r--gcc/config/rs6000/rs6000-cpus.def137
-rw-r--r--gcc/config/rs6000/rs6000.cc103
-rw-r--r--gcc/config/rs6000/rs6000.h105
-rw-r--r--gcc/config/rs6000/rs6000.md46
-rw-r--r--gcc/config/rs6000/vxworks.h2
-rw-r--r--gcc/config/s390/s390.cc2
-rw-r--r--gcc/config/sh/sh.cc2
-rw-r--r--gcc/config/tilegx/constraints.md115
-rw-r--r--gcc/config/tilegx/feedback.h14
-rw-r--r--gcc/config/tilegx/linux.h83
-rw-r--r--gcc/config/tilegx/mul-tables.cc27249
-rw-r--r--gcc/config/tilegx/predicates.md290
-rw-r--r--gcc/config/tilegx/sync.md227
-rw-r--r--gcc/config/tilegx/t-tilegx21
-rw-r--r--gcc/config/tilegx/tilegx-builtins.h325
-rw-r--r--gcc/config/tilegx/tilegx-c.cc55
-rw-r--r--gcc/config/tilegx/tilegx-generic.md115
-rw-r--r--gcc/config/tilegx/tilegx-modes.def37
-rw-r--r--gcc/config/tilegx/tilegx-multiply.h78
-rw-r--r--gcc/config/tilegx/tilegx-opts.h33
-rw-r--r--gcc/config/tilegx/tilegx-protos.h75
-rw-r--r--gcc/config/tilegx/tilegx.cc5728
-rw-r--r--gcc/config/tilegx/tilegx.h530
-rw-r--r--gcc/config/tilegx/tilegx.md5664
-rw-r--r--gcc/config/tilegx/tilegx.opt63
-rw-r--r--gcc/config/tilepro/constraints.md99
-rw-r--r--gcc/config/tilepro/feedback.h14
-rw-r--r--gcc/config/tilepro/gen-mul-tables.cc1369
-rw-r--r--gcc/config/tilepro/linux.h83
-rw-r--r--gcc/config/tilepro/mul-tables.cc17837
-rw-r--r--gcc/config/tilepro/predicates.md258
-rw-r--r--gcc/config/tilepro/t-tilepro15
-rw-r--r--gcc/config/tilepro/tilepro-builtins.h216
-rw-r--r--gcc/config/tilepro/tilepro-c.cc54
-rw-r--r--gcc/config/tilepro/tilepro-generic.md107
-rw-r--r--gcc/config/tilepro/tilepro-modes.def34
-rw-r--r--gcc/config/tilepro/tilepro-multiply.h82
-rw-r--r--gcc/config/tilepro/tilepro-protos.h76
-rw-r--r--gcc/config/tilepro/tilepro.cc5083
-rw-r--r--gcc/config/tilepro/tilepro.h457
-rw-r--r--gcc/config/tilepro/tilepro.md3816
-rw-r--r--gcc/config/tilepro/tilepro.opt36
-rw-r--r--gcc/config/xtensa/constraints.md6
-rw-r--r--gcc/config/xtensa/predicates.md5
-rw-r--r--gcc/config/xtensa/xtensa.cc35
-rw-r--r--gcc/config/xtensa/xtensa.md45
-rwxr-xr-xgcc/configure29
-rw-r--r--gcc/configure.ac29
-rw-r--r--gcc/coroutine-passes.cc8
-rw-r--r--gcc/cp/ChangeLog257
-rw-r--r--gcc/cp/call.cc60
-rw-r--r--gcc/cp/class.cc20
-rw-r--r--gcc/cp/constexpr.cc36
-rw-r--r--gcc/cp/cp-gimplify.cc7
-rw-r--r--gcc/cp/cp-ubsan.cc2
-rw-r--r--gcc/cp/cxx-pretty-print.h38
-rw-r--r--gcc/cp/decl.cc6
-rw-r--r--gcc/cp/expr.cc5
-rw-r--r--gcc/cp/g++spec.cc1
-rw-r--r--gcc/cp/mapper-client.cc1
-rw-r--r--gcc/cp/mapper-resolver.cc1
-rw-r--r--gcc/cp/module.cc1080
-rw-r--r--gcc/cp/name-lookup.cc4
-rw-r--r--gcc/cp/parser.cc206
-rw-r--r--gcc/cp/pt.cc278
-rw-r--r--gcc/cp/semantics.cc10
-rw-r--r--gcc/cp/typeck.cc2
-rw-r--r--gcc/cprop.cc9
-rw-r--r--gcc/cse.cc18
-rw-r--r--gcc/d/ChangeLog119
-rw-r--r--gcc/d/Make-lang.in6
-rw-r--r--gcc/d/d-attribs.cc116
-rw-r--r--gcc/d/d-codegen.cc40
-rw-r--r--gcc/d/d-convert.cc44
-rw-r--r--gcc/d/d-tree.h4
-rw-r--r--gcc/d/decl.cc37
-rw-r--r--gcc/d/dmd/MERGE2
-rw-r--r--gcc/d/dmd/aggregate.h36
-rw-r--r--gcc/d/dmd/canthrow.d13
-rw-r--r--gcc/d/dmd/clone.d9
-rw-r--r--gcc/d/dmd/cparse.d150
-rw-r--r--gcc/d/dmd/declaration.d63
-rw-r--r--gcc/d/dmd/denum.d14
-rw-r--r--gcc/d/dmd/dinterpret.d17
-rw-r--r--gcc/d/dmd/dmangle.d18
-rw-r--r--gcc/d/dmd/dmodule.d2
-rw-r--r--gcc/d/dmd/dstruct.d33
-rw-r--r--gcc/d/dmd/dsymbolsem.d62
-rw-r--r--gcc/d/dmd/dtoh.d128
-rw-r--r--gcc/d/dmd/enum.h13
-rw-r--r--gcc/d/dmd/escape.d40
-rw-r--r--gcc/d/dmd/expression.d10
-rw-r--r--gcc/d/dmd/expressionsem.d112
-rw-r--r--gcc/d/dmd/foreachvar.d14
-rw-r--r--gcc/d/dmd/func.d21
-rw-r--r--gcc/d/dmd/globals.d2
-rw-r--r--gcc/d/dmd/globals.h2
-rw-r--r--gcc/d/dmd/hdrgen.d17
-rw-r--r--gcc/d/dmd/importc.d4
-rw-r--r--gcc/d/dmd/mtype.d15
-rw-r--r--gcc/d/dmd/ob.d22
-rw-r--r--gcc/d/dmd/parse.d15
-rw-r--r--gcc/d/dmd/root/filename.d27
-rw-r--r--gcc/d/dmd/semantic2.d5
-rw-r--r--gcc/d/dmd/semantic3.d2
-rw-r--r--gcc/d/dmd/statementsem.d25
-rw-r--r--gcc/d/dmd/tokens.d5
-rw-r--r--gcc/d/dmd/tokens.h1
-rw-r--r--gcc/d/dmd/typesem.d40
-rw-r--r--gcc/d/expr.cc48
-rw-r--r--gcc/d/intrinsics.cc604
-rw-r--r--gcc/d/intrinsics.def23
-rw-r--r--gcc/d/toir.cc1
-rw-r--r--gcc/d/typeinfo.cc4
-rw-r--r--gcc/d/types.cc6
-rw-r--r--gcc/dce.cc8
-rw-r--r--gcc/df-core.cc10
-rw-r--r--gcc/diagnostic-format-json.cc5
-rw-r--r--gcc/diagnostic-format-sarif.cc2
-rw-r--r--gcc/diagnostic-metadata.h47
-rw-r--r--gcc/diagnostic-show-locus.cc49
-rw-r--r--gcc/diagnostic.cc48
-rw-r--r--gcc/diagnostic.h3
-rw-r--r--gcc/doc/extend.texi71
-rw-r--r--gcc/doc/install.texi32
-rw-r--r--gcc/doc/invoke.texi241
-rw-r--r--gcc/doc/md.texi148
-rw-r--r--gcc/doc/sourcebuild.texi12
-rw-r--r--gcc/dojump.cc2
-rw-r--r--gcc/domwalk.cc6
-rw-r--r--gcc/domwalk.h5
-rw-r--r--gcc/dse.cc14
-rw-r--r--gcc/dwarf2cfi.cc7
-rw-r--r--gcc/dwarf2out.cc9
-rw-r--r--gcc/early-remat.cc4
-rw-r--r--gcc/emit-rtl.cc6
-rw-r--r--gcc/except.cc6
-rw-r--r--gcc/expmed.cc28
-rw-r--r--gcc/expmed.h2
-rw-r--r--gcc/expr.cc184
-rw-r--r--gcc/expr.h13
-rw-r--r--gcc/final.cc26
-rw-r--r--gcc/flag-types.h9
-rw-r--r--gcc/fold-const.cc10
-rw-r--r--gcc/fortran/ChangeLog90
-rw-r--r--gcc/fortran/check.cc2
-rw-r--r--gcc/fortran/decl.cc20
-rw-r--r--gcc/fortran/dump-parse-tree.cc11
-rw-r--r--gcc/fortran/gfortran.h9
-rw-r--r--gcc/fortran/module.cc6
-rw-r--r--gcc/fortran/openmp.cc187
-rw-r--r--gcc/fortran/parse.cc22
-rw-r--r--gcc/fortran/simplify.cc147
-rw-r--r--gcc/fortran/trans-intrinsic.cc15
-rw-r--r--gcc/fortran/trans-openmp.cc5
-rw-r--r--gcc/fortran/trans-types.cc12
-rw-r--r--gcc/fortran/trans-types.h4
-rw-r--r--gcc/function.cc21
-rw-r--r--gcc/fwprop.cc8
-rw-r--r--gcc/gcc.cc5
-rw-r--r--gcc/gcse.cc14
-rw-r--r--gcc/gengtype.cc1
-rw-r--r--gcc/genmatch.cc22
-rw-r--r--gcc/gensupport.cc2
-rw-r--r--gcc/gimple-fold.cc7
-rw-r--r--gcc/gimple-harden-conditionals.cc20
-rw-r--r--gcc/gimple-if-to-switch.cc22
-rw-r--r--gcc/gimple-isel.cc4
-rw-r--r--gcc/gimple-laddress.cc6
-rw-r--r--gcc/gimple-loop-interchange.cc6
-rw-r--r--gcc/gimple-loop-jam.cc6
-rw-r--r--gcc/gimple-loop-versioning.cc7
-rw-r--r--gcc/gimple-low.cc5
-rw-r--r--gcc/gimple-range-cache.cc5
-rw-r--r--gcc/gimple-range-cache.h6
-rw-r--r--gcc/gimple-range-edge.cc7
-rw-r--r--gcc/gimple-range-edge.h2
-rw-r--r--gcc/gimple-range-fold.cc62
-rw-r--r--gcc/gimple-range-infer.cc9
-rw-r--r--gcc/gimple-range-infer.h2
-rw-r--r--gcc/gimple-range.cc11
-rw-r--r--gcc/gimple-ssa-backprop.cc6
-rw-r--r--gcc/gimple-ssa-evrp-analyze.cc456
-rw-r--r--gcc/gimple-ssa-evrp-analyze.h58
-rw-r--r--gcc/gimple-ssa-evrp.cc395
-rw-r--r--gcc/gimple-ssa-isolate-paths.cc9
-rw-r--r--gcc/gimple-ssa-nonnull-compare.cc4
-rw-r--r--gcc/gimple-ssa-split-paths.cc9
-rw-r--r--gcc/gimple-ssa-store-merging.cc10
-rw-r--r--gcc/gimple-ssa-strength-reduction.cc6
-rw-r--r--gcc/gimple-ssa-warn-access.cc8
-rw-r--r--gcc/gimple-ssa-warn-alloca.cc8
-rw-r--r--gcc/gimple-ssa-warn-restrict.cc4
-rw-r--r--gcc/gimple-warn-recursion.cc4
-rw-r--r--gcc/gimple.cc13
-rw-r--r--gcc/gimple.h1
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/export.cc3
-rw-r--r--gcc/go/gofrontend/expressions.cc136
-rw-r--r--gcc/go/gofrontend/expressions.h105
-rw-r--r--gcc/go/gofrontend/go.cc3
-rw-r--r--gcc/go/gofrontend/gogo.cc216
-rw-r--r--gcc/go/gofrontend/gogo.h23
-rw-r--r--gcc/go/gofrontend/names.cc29
-rw-r--r--gcc/go/gofrontend/parse.cc113
-rw-r--r--gcc/go/gofrontend/parse.h1
-rw-r--r--gcc/go/gofrontend/statements.cc18
-rw-r--r--gcc/go/gofrontend/types.cc49
-rw-r--r--gcc/graphite.cc14
-rw-r--r--gcc/ifcvt.cc32
-rw-r--r--gcc/init-regs.cc4
-rw-r--r--gcc/input.cc67
-rw-r--r--gcc/internal-fn.cc16
-rw-r--r--gcc/ipa-comdats.cc4
-rw-r--r--gcc/ipa-cp.cc16
-rw-r--r--gcc/ipa-devirt.cc8
-rw-r--r--gcc/ipa-fnsummary.cc24
-rw-r--r--gcc/ipa-free-lang-data.cc2
-rw-r--r--gcc/ipa-icf-gimple.h6
-rw-r--r--gcc/ipa-icf.cc11
-rw-r--r--gcc/ipa-icf.h36
-rw-r--r--gcc/ipa-inline-analysis.cc2
-rw-r--r--gcc/ipa-inline.cc4
-rw-r--r--gcc/ipa-modref.cc12
-rw-r--r--gcc/ipa-profile.cc4
-rw-r--r--gcc/ipa-prop.cc10
-rw-r--r--gcc/ipa-pure-const.cc26
-rw-r--r--gcc/ipa-reference.cc4
-rw-r--r--gcc/ipa-split.cc8
-rw-r--r--gcc/ipa-sra.cc7
-rw-r--r--gcc/ipa-visibility.cc6
-rw-r--r--gcc/ipa.cc12
-rw-r--r--gcc/ira.cc8
-rw-r--r--gcc/jit/ChangeLog14
-rw-r--r--gcc/jit/jit-playback.cc6
-rw-r--r--gcc/jit/jit-recording.cc2
-rw-r--r--gcc/jit/libgccjit.cc2
-rw-r--r--gcc/jump.cc5
-rw-r--r--gcc/loop-init.cc28
-rw-r--r--gcc/loop-unroll.cc8
-rw-r--r--gcc/lower-subreg.cc16
-rw-r--r--gcc/lto-cgraph.cc117
-rw-r--r--gcc/lto-wrapper.cc39
-rw-r--r--gcc/lto/ChangeLog10
-rw-r--r--gcc/lto/lto-dump.cc24
-rw-r--r--gcc/match.pd95
-rw-r--r--gcc/mode-switching.cc6
-rw-r--r--gcc/modulo-sched.cc24
-rw-r--r--gcc/multiple_target.cc7
-rw-r--r--gcc/omp-expand.cc38
-rw-r--r--gcc/omp-general.h8
-rw-r--r--gcc/omp-low.cc14
-rw-r--r--gcc/omp-oacc-kernels-decompose.cc4
-rw-r--r--gcc/omp-oacc-neuter-broadcast.cc4
-rw-r--r--gcc/omp-offload.cc16
-rw-r--r--gcc/omp-simd-clone.cc7
-rw-r--r--gcc/opts.cc131
-rw-r--r--gcc/opts.h1
-rw-r--r--gcc/params.opt19
-rw-r--r--gcc/passes.cc34
-rw-r--r--gcc/po/ChangeLog4
-rw-r--r--gcc/po/exgettext2
-rw-r--r--gcc/postreload-gcse.cc7
-rw-r--r--gcc/postreload.cc7
-rw-r--r--gcc/predict.cc30
-rw-r--r--gcc/profile-count.h50
-rw-r--r--gcc/profile.cc5
-rw-r--r--gcc/read-md.h2
-rw-r--r--gcc/read-rtl-function.cc6
-rw-r--r--gcc/recog.cc32
-rw-r--r--gcc/ree.cc7
-rw-r--r--gcc/reg-stack.cc4
-rw-r--r--gcc/regcprop.cc27
-rw-r--r--gcc/reginfo.cc2
-rw-r--r--gcc/regrename.cc7
-rw-r--r--gcc/reorg.cc8
-rw-r--r--gcc/rtl-ssa/blocks.cc4
-rw-r--r--gcc/sancov.cc10
-rw-r--r--gcc/sanopt.cc16
-rw-r--r--gcc/sched-rgn.cc19
-rw-r--r--gcc/stack-ptr-mod.cc2
-rw-r--r--gcc/statistics.cc25
-rw-r--r--gcc/stmt.cc5
-rw-r--r--gcc/stor-layout.cc7
-rw-r--r--gcc/store-motion.cc4
-rw-r--r--gcc/symtab-thunks.cc10
-rw-r--r--gcc/system.h4
-rw-r--r--gcc/testsuite/ChangeLog840
-rw-r--r--gcc/testsuite/c-c++-common/Wcast-align.c4
-rw-r--r--gcc/testsuite/c-c++-common/Wpadded.c14
-rw-r--r--gcc/testsuite/c-c++-common/attr-cdtor-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/gomp/linear-4.c34
-rw-r--r--gcc/testsuite/c-c++-common/gomp/requires-4.c2
-rw-r--r--gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-data-2.c20
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-data-3.c17
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-device-ancestor-2.c10
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-device-ancestor-3.c2
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c4
-rw-r--r--gcc/testsuite/c-c++-common/gomp/target-device-ancestor-5.c2
-rw-r--r--gcc/testsuite/c-c++-common/hwasan/arguments-3.c4
-rw-r--r--gcc/testsuite/c-c++-common/pr105998.c12
-rw-r--r--gcc/testsuite/c-c++-common/pr91733.c17
-rw-r--r--gcc/testsuite/c-c++-common/pragma-diag-11.c13
-rw-r--r--gcc/testsuite/c-c++-common/pragma-diag-12.c10
-rw-r--r--gcc/testsuite/c-c++-common/pragma-diag-13.c4
-rw-r--r--gcc/testsuite/c-c++-common/torture/builtin-shufflevector-2.c3
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/align-8.c2
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c2
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/nonnull-4.c2
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c2
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr56956.c2
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr68142.c2
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr80932.c2
-rw-r--r--gcc/testsuite/g++.dg/abi/pure-virtual1.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-elision1.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype82a.C11
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist130.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/keywords1.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/trailing16.C17
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic183.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-elision1.C53
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr16.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr17.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/class-deduction111.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/constexpr-if37.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/constexpr-if38.C16
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/nontype-auto21.C20
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/desig26.C22
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/keywords1.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-generic10.C14
-rw-r--r--gcc/testsuite/g++.dg/ext/builtin-shufflevector-4.C18
-rw-r--r--gcc/testsuite/g++.dg/ext/desig4.C4
-rw-r--r--gcc/testsuite/g++.dg/init/array61.C3
-rw-r--r--gcc/testsuite/g++.dg/lto/pr90990_0.C1
-rw-r--r--gcc/testsuite/g++.dg/modules/inext-1.H1
-rw-r--r--gcc/testsuite/g++.dg/modules/init-2_b.C2
-rw-r--r--gcc/testsuite/g++.dg/modules/loc-prune-1.C19
-rw-r--r--gcc/testsuite/g++.dg/modules/loc-prune-2.C14
-rw-r--r--gcc/testsuite/g++.dg/modules/loc-prune-3.C16
-rw-r--r--gcc/testsuite/g++.dg/modules/loc-prune-4.C22
-rw-r--r--gcc/testsuite/g++.dg/modules/pr105169_a.C2
-rw-r--r--gcc/testsuite/g++.dg/modules/pr105169_b.C2
-rw-r--r--gcc/testsuite/g++.dg/modules/pr98718_a.C4
-rw-r--r--gcc/testsuite/g++.dg/modules/pr98718_b.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/pr99072.H4
-rw-r--r--gcc/testsuite/g++.dg/pr100774.C2
-rw-r--r--gcc/testsuite/g++.dg/pr106219.C31
-rw-r--r--gcc/testsuite/g++.dg/spellcheck-stdlib.C29
-rw-r--r--gcc/testsuite/g++.dg/template/operator16.C9
-rw-r--r--gcc/testsuite/g++.dg/torture/except-1.C44
-rw-r--r--gcc/testsuite/g++.dg/torture/pr106131.C34
-rw-r--r--gcc/testsuite/g++.dg/ubsan/return-8a.C16
-rw-r--r--gcc/testsuite/g++.dg/ubsan/return-8b.C17
-rw-r--r--gcc/testsuite/g++.dg/ubsan/return-8d.C16
-rw-r--r--gcc/testsuite/g++.dg/ubsan/return-8e.C17
-rw-r--r--gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C10
-rw-r--r--gcc/testsuite/g++.dg/warn/Woverloaded-virt1.C14
-rw-r--r--gcc/testsuite/g++.dg/warn/Woverloaded-virt2.C15
-rw-r--r--gcc/testsuite/g++.dg/warn/Woverloaded-virt3.C7
-rw-r--r--gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C36
-rw-r--r--gcc/testsuite/g++.target/aarch64/complex-init.C37
-rw-r--r--gcc/testsuite/g++.target/i386/pr106180-1.C31
-rw-r--r--gcc/testsuite/g++.target/loongarch/loongarch.exp34
-rw-r--r--gcc/testsuite/g++.target/loongarch/pr106096.C75
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/inline-asm-1.c14
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr106030.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20101011-1.c1
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/mul-sext.c20
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr106032.c21
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr98304-2.c37
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c117
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c156
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c46
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c61
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c37
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/fd-1.c39
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/fd-2.c49
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/fd-3.c85
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/fd-4.c72
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/pr96639.c2
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c66
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/torture/uninit-pr106204.c13
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/uninit-pr106204.c17
-rw-r--r--gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c12
-rw-r--r--gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c6
-rw-r--r--gcc/testsuite/gcc.dg/atomic/pr80640-2.c6
-rw-r--r--gcc/testsuite/gcc.dg/atomic/pr80640.c6
-rw-r--r--gcc/testsuite/gcc.dg/atomic/pr81316.c9
-rw-r--r--gcc/testsuite/gcc.dg/builtin-dynamic-object-size-0.c18
-rw-r--r--gcc/testsuite/gcc.dg/builtin-object-size-20.c64
-rw-r--r--gcc/testsuite/gcc.dg/builtin-object-size-22.c79
-rw-r--r--gcc/testsuite/gcc.dg/c11-align-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/darwin-comm-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c7
-rw-r--r--gcc/testsuite/gcc.dg/di-sync-multithread.c8
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr106055.c41
-rw-r--r--gcc/testsuite/gcc.dg/lower-subreg-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr101868_0.c7
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata.c2
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c9
-rw-r--r--gcc/testsuite/gcc.dg/pr100781.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr105835.c18
-rw-r--r--gcc/testsuite/gcc.dg/pr106027.c8
-rw-r--r--gcc/testsuite/gcc.dg/pr106063.c9
-rw-r--r--gcc/testsuite/gcc.dg/pr106114.c14
-rw-r--r--gcc/testsuite/gcc.dg/pr106198.c22
-rw-r--r--gcc/testsuite/gcc.dg/pr94026.c21
-rw-r--r--gcc/testsuite/gcc.dg/pr94899.c49
-rw-r--r--gcc/testsuite/gcc.dg/pr98304-1.c57
-rw-r--r--gcc/testsuite/gcc.dg/sancov/cmp0.c2
-rw-r--r--gcc/testsuite/gcc.dg/sso/memcpy-1.c8
-rw-r--r--gcc/testsuite/gcc.dg/strlenopt-10.c6
-rw-r--r--gcc/testsuite/gcc.dg/strlenopt-11.c14
-rw-r--r--gcc/testsuite/gcc.dg/strlenopt-13.c16
-rw-r--r--gcc/testsuite/gcc.dg/torture/fp-double-convert-float-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-2.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr106070.c22
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr106112.c16
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr106182.c18
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr106196.c14
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-13.c36
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-11.c28
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr105860.c63
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr106126.c12
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/slsr-39.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-branch-1.c5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr106019.c15
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-4.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c6
-rw-r--r--gcc/testsuite/gcc.misc-tests/linkage.exp7
-rw-r--r--gcc/testsuite/gcc.misc-tests/outputs.exp52
-rw-r--r--gcc/testsuite/gcc.target/aarch64/symbol-range.c3
-rw-r--r--gcc/testsuite/gcc.target/alpha/pr105209.c26
-rw-r--r--gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c6
-rw-r--r--gcc/testsuite/gcc.target/arm/simd/pr100757-2.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/simd/pr100757-3.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/simd/pr100757-4.c10
-rw-r--r--gcc/testsuite/gcc.target/arm/simd/pr100757.c9
-rw-r--r--gcc/testsuite/gcc.target/i386/amx-check.h30
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/bmi-andn-4.c9
-rw-r--r--gcc/testsuite/gcc.target/i386/pr105960.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr105970.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr105993.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106022-1.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106022-2.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106022-3.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106022-4.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106053.c37
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106095.c47
-rw-r--r--gcc/testsuite/gcc.target/i386/pr106122.c15
-rw-r--r--gcc/testsuite/gcc.target/i386/pr43618-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr7061-2.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/pr99464.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssse3-palignr-2.c21
-rw-r--r--gcc/testsuite/gcc.target/i386/testnot-3.c9
-rw-r--r--gcc/testsuite/gcc.target/i386/xchg-3.c12
-rw-r--r--gcc/testsuite/gcc.target/loongarch/div-1.c9
-rw-r--r--gcc/testsuite/gcc.target/loongarch/div-2.c9
-rw-r--r--gcc/testsuite/gcc.target/loongarch/div-3.c9
-rw-r--r--gcc/testsuite/gcc.target/loongarch/div-4.c9
-rw-r--r--gcc/testsuite/gcc.target/loongarch/mulw_d_w.c10
-rw-r--r--gcc/testsuite/gcc.target/loongarch/prolog-opt.c15
-rw-r--r--gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/mips.exp1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f902
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr105991.c11
-rw-r--r--gcc/testsuite/gcc.target/riscv/cmo-zicbom-1.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/cmo-zicbom-2.c26
-rw-r--r--gcc/testsuite/gcc.target/riscv/cmo-zicboz-1.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/cmo-zicboz-2.c10
-rw-r--r--gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch1.d (renamed from gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch.d)0
-rw-r--r--gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d250
-rw-r--r--gcc/testsuite/gdc.dg/attr_register1.d55
-rw-r--r--gcc/testsuite/gdc.dg/attr_register2.d11
-rw-r--r--gcc/testsuite/gdc.dg/attr_register3.d22
-rw-r--r--gcc/testsuite/gdc.dg/attr_section1.d2
-rw-r--r--gcc/testsuite/gdc.dg/attr_simd1.d40
-rw-r--r--gcc/testsuite/gdc.dg/attr_simd2.d16
-rw-r--r--gcc/testsuite/gdc.dg/attr_visibility1.d2
-rw-r--r--gcc/testsuite/gdc.dg/pr106139a.d36
-rw-r--r--gcc/testsuite/gdc.dg/pr106139b.d36
-rw-r--r--gcc/testsuite/gdc.dg/pr106139c.d27
-rw-r--r--gcc/testsuite/gdc.dg/pr106139d.d27
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_blendvector.d345
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_cond.d17
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_convertvector.d122
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_load.d52
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_logical.d19
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_shuffle.d454
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_shufflevector.d55
-rw-r--r--gcc/testsuite/gdc.dg/torture/simd_store.d54
-rw-r--r--gcc/testsuite/gdc.test/compilable/b16360.d39
-rw-r--r--gcc/testsuite/gdc.test/compilable/dtoh_AnonDeclaration.d14
-rw-r--r--gcc/testsuite/gdc.test/compilable/dtoh_StructDeclaration.d18
-rw-r--r--gcc/testsuite/gdc.test/compilable/dtoh_TemplateDeclaration.d6
-rw-r--r--gcc/testsuite/gdc.test/compilable/dtoh_mangling.d8
-rw-r--r--gcc/testsuite/gdc.test/compilable/dtoh_protection.d28
-rw-r--r--gcc/testsuite/gdc.test/compilable/inliner.d21
-rw-r--r--gcc/testsuite/gdc.test/compilable/inliner2.d27
-rw-r--r--gcc/testsuite/gdc.test/compilable/test23168.d30
-rw-r--r--gcc/testsuite/gdc.test/compilable/test23169.d14
-rw-r--r--gcc/testsuite/gdc.test/compilable/test3004.d4
-rw-r--r--gcc/testsuite/gdc.test/compilable/testparse.d10
-rw-r--r--gcc/testsuite/gdc.test/compilable/vcg-ast.d3
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/diag_in_array.d20
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail17927.d8
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail20108.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail_scope.d8
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/ice12574.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/previewin.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/previewin2.d18
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/retscope.d12
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/retscope2.d4
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/retscope6.d12
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test14238.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test17423.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test17450.d4
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test20245.d8
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/test22818.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/typeerrors.d2
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/udaparams.d4
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/udatypes.d8
-rw-r--r--gcc/testsuite/gdc.test/runnable/ice10086b.d50
-rw-r--r--gcc/testsuite/gdc.test/runnable/inline3.d44
-rw-r--r--gcc/testsuite/gdc.test/runnable/staticforeach.d29
-rw-r--r--gcc/testsuite/gdc.test/runnable/test23010.d43
-rw-r--r--gcc/testsuite/gdc.test/runnable_cxx/cppa.d20
-rw-r--r--gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp30
-rw-r--r--gcc/testsuite/gfortran.dg/check_bits_3.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/class_58.f902
-rw-r--r--gcc/testsuite/gfortran.dg/class_73.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/extends_type_of_4.f9020
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-2.f90112
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-3.f9039
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-4.f90102
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-5.f9043
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-6.f9054
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-7.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/linear-8.f9044
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/requires-8.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-data-1.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-data-2.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2.f9070
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2a.f9080
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-3.f906
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f906
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-5.f908
-rw-r--r--gcc/testsuite/gfortran.dg/index_6.f9031
-rw-r--r--gcc/testsuite/gfortran.dg/pr105954.f9026
-rw-r--r--gcc/testsuite/gfortran.dg/pr106226.f37
-rw-r--r--gcc/testsuite/gfortran.dg/ubsan/pr106062.f9011
-rw-r--r--gcc/testsuite/gfortran.dg/unpack_vector_1.f9012
-rw-r--r--gcc/testsuite/gnat.dg/renaming1.adb8
-rw-r--r--gcc/testsuite/gnat.dg/renaming1.ads4
-rw-r--r--gcc/testsuite/gnat.dg/warn29.adb2
-rw-r--r--gcc/testsuite/go.test/test/fixedbugs/issue27938.go6
-rw-r--r--gcc/testsuite/jit.dg/test-asm.cc1
-rw-r--r--gcc/testsuite/jit.dg/test-pr105812-bool-operations.c89
-rw-r--r--gcc/testsuite/lib/asan-dg.exp2
-rw-r--r--gcc/testsuite/lib/target-supports.exp23
-rw-r--r--gcc/toplev.cc4
-rw-r--r--gcc/tracer.cc4
-rw-r--r--gcc/trans-mem.cc34
-rw-r--r--gcc/tree-call-cdce.cc4
-rw-r--r--gcc/tree-cfg.cc35
-rw-r--r--gcc/tree-cfgcleanup.cc16
-rw-r--r--gcc/tree-complex.cc14
-rw-r--r--gcc/tree-data-ref.cc19
-rw-r--r--gcc/tree-diagnostic-path.cc4
-rw-r--r--gcc/tree-eh.cc23
-rw-r--r--gcc/tree-emutls.cc7
-rw-r--r--gcc/tree-if-conv.cc6
-rw-r--r--gcc/tree-into-ssa.cc88
-rw-r--r--gcc/tree-loop-distribution.cc6
-rw-r--r--gcc/tree-nrv.cc6
-rw-r--r--gcc/tree-object-size.cc26
-rw-r--r--gcc/tree-parloops.cc21
-rw-r--r--gcc/tree-predcom.cc8
-rw-r--r--gcc/tree-pretty-print.cc6
-rw-r--r--gcc/tree-profile.cc4
-rw-r--r--gcc/tree-sra.cc24
-rw-r--r--gcc/tree-ssa-alias.cc24
-rw-r--r--gcc/tree-ssa-ccp.cc21
-rw-r--r--gcc/tree-ssa-copy.cc9
-rw-r--r--gcc/tree-ssa-dce.cc24
-rw-r--r--gcc/tree-ssa-dom.cc235
-rw-r--r--gcc/tree-ssa-dse.cc9
-rw-r--r--gcc/tree-ssa-forwprop.cc6
-rw-r--r--gcc/tree-ssa-ifcombine.cc2
-rw-r--r--gcc/tree-ssa-loop-ch.cc17
-rw-r--r--gcc/tree-ssa-loop-im.cc6
-rw-r--r--gcc/tree-ssa-loop-ivcanon.cc17
-rw-r--r--gcc/tree-ssa-loop-ivopts.cc2
-rw-r--r--gcc/tree-ssa-loop-manip.cc258
-rw-r--r--gcc/tree-ssa-loop-manip.h3
-rw-r--r--gcc/tree-ssa-loop-prefetch.cc7
-rw-r--r--gcc/tree-ssa-loop-split.cc9
-rw-r--r--gcc/tree-ssa-loop-unswitch.cc12
-rw-r--r--gcc/tree-ssa-loop.cc27
-rw-r--r--gcc/tree-ssa-math-opts.cc17
-rw-r--r--gcc/tree-ssa-phiopt.cc19
-rw-r--r--gcc/tree-ssa-phiprop.cc4
-rw-r--r--gcc/tree-ssa-pre.cc4
-rw-r--r--gcc/tree-ssa-propagate.cc20
-rw-r--r--gcc/tree-ssa-reassoc.cc8
-rw-r--r--gcc/tree-ssa-sccvn.cc37
-rw-r--r--gcc/tree-ssa-sink.cc11
-rw-r--r--gcc/tree-ssa-strlen.cc14
-rw-r--r--gcc/tree-ssa-structalias.cc13
-rw-r--r--gcc/tree-ssa-threadedge.cc4
-rw-r--r--gcc/tree-ssa-uncprop.cc10
-rw-r--r--gcc/tree-ssa-uninit.cc13
-rw-r--r--gcc/tree-ssanames.cc2
-rw-r--r--gcc/tree-stdarg.cc8
-rw-r--r--gcc/tree-switch-conversion.cc68
-rw-r--r--gcc/tree-switch-conversion.h34
-rw-r--r--gcc/tree-tailcall.cc16
-rw-r--r--gcc/tree-vect-generic.cc11
-rw-r--r--gcc/tree-vect-loop-manip.cc34
-rw-r--r--gcc/tree-vect-loop.cc266
-rw-r--r--gcc/tree-vect-patterns.cc38
-rw-r--r--gcc/tree-vect-stmts.cc32
-rw-r--r--gcc/tree-vectorizer.cc55
-rw-r--r--gcc/tree-vectorizer.h4
-rw-r--r--gcc/tree-vrp.cc43
-rw-r--r--gcc/tree.cc40
-rw-r--r--gcc/tree.h5
-rw-r--r--gcc/tsan.cc10
-rw-r--r--gcc/ubsan.cc75
-rw-r--r--gcc/ubsan.h1
-rw-r--r--gcc/value-range-equiv.cc2
-rw-r--r--gcc/value-range-storage.cc217
-rw-r--r--gcc/value-range-storage.h190
-rw-r--r--gcc/value-range.cc288
-rw-r--r--gcc/value-range.h133
-rw-r--r--gcc/value-relation.cc70
-rw-r--r--gcc/value-relation.h10
-rw-r--r--gcc/var-tracking.cc4
-rw-r--r--gcc/varasm.cc10
-rw-r--r--gcc/vr-values.cc20
-rw-r--r--gcc/vr-values.h2
-rw-r--r--gcc/vtable-verify.cc4
-rw-r--r--gcc/web.cc4
-rw-r--r--gcc/wide-int.cc13
-rw-r--r--gcc/wide-int.h42
-rw-r--r--include/ChangeLog13
-rw-r--r--include/gomp-constants.h8
-rw-r--r--libbacktrace/ChangeLog23
-rw-r--r--libbacktrace/Makefile.am27
-rw-r--r--libbacktrace/Makefile.in17
-rw-r--r--libbacktrace/config.h.in3
-rwxr-xr-xlibbacktrace/configure19
-rw-r--r--libbacktrace/configure.ac12
-rw-r--r--libbacktrace/elf.c7
-rw-r--r--libbacktrace/macho.c2
-rw-r--r--libcc1/ChangeLog6
-rw-r--r--libcc1/libcc1plugin.cc1
-rw-r--r--libcc1/libcp1plugin.cc1
-rw-r--r--libcpp/ChangeLog17
-rw-r--r--libcpp/generated_cpp_wcwidth.h164
-rw-r--r--libcpp/include/line-map.h46
-rw-r--r--libcpp/ucnid.h130
-rw-r--r--libgcc/ChangeLog18
-rw-r--r--libgcc/config.host17
-rw-r--r--libgcc/config/tilegx/sfp-machine.h5
-rw-r--r--libgcc/config/tilegx/sfp-machine32.h68
-rw-r--r--libgcc/config/tilegx/sfp-machine64.h68
-rw-r--r--libgcc/config/tilegx/t-crtstuff8
-rw-r--r--libgcc/config/tilegx/t-softfp1
-rw-r--r--libgcc/config/tilegx/t-tilegx26
-rw-r--r--libgcc/config/tilepro/atomic.c397
-rw-r--r--libgcc/config/tilepro/atomic.h437
-rw-r--r--libgcc/config/tilepro/linux-unwind.h99
-rw-r--r--libgcc/config/tilepro/sfp-machine.h59
-rw-r--r--libgcc/config/tilepro/softdivide.c353
-rw-r--r--libgcc/config/tilepro/softmpy.S94
-rw-r--r--libgcc/config/tilepro/t-crtstuff4
-rw-r--r--libgcc/config/tilepro/t-tilepro33
-rw-r--r--libgfortran/ChangeLog92
-rw-r--r--libgfortran/Makefile.am4
-rw-r--r--libgfortran/Makefile.in5
-rw-r--r--libgfortran/acinclude.m482
-rw-r--r--libgfortran/caf/single.c7
-rw-r--r--libgfortran/config.h.in197
-rwxr-xr-xlibgfortran/configure3203
-rw-r--r--libgfortran/configure.ac83
-rw-r--r--libgfortran/generated/bessel_r16.c4
-rw-r--r--libgfortran/generated/bessel_r17.c2
-rw-r--r--libgfortran/generated/norm2_r16.c4
-rw-r--r--libgfortran/generated/norm2_r17.c2
-rw-r--r--libgfortran/ieee/issignaling_fallback.h8
-rw-r--r--libgfortran/intrinsics/cshift0.c4
-rw-r--r--libgfortran/intrinsics/erfc_scaled.c25
-rw-r--r--libgfortran/intrinsics/pack_generic.c4
-rw-r--r--libgfortran/intrinsics/spread_generic.c8
-rw-r--r--libgfortran/intrinsics/trigd.c18
-rw-r--r--libgfortran/intrinsics/unpack_generic.c8
-rw-r--r--libgfortran/io/read.c13
-rw-r--r--libgfortran/io/transfer128.c4
-rw-r--r--libgfortran/io/write_float.def54
-rw-r--r--libgfortran/kinds-override.h14
-rw-r--r--libgfortran/libgfortran.h64
-rw-r--r--libgfortran/m4/mtype.m46
-rwxr-xr-xlibgfortran/mk-kinds-h.sh20
-rw-r--r--libgfortran/runtime/in_pack_generic.c4
-rw-r--r--libgfortran/runtime/in_unpack_generic.c4
-rw-r--r--libgo/Makefile.am1
-rw-r--r--libgo/Makefile.in1
-rw-r--r--libgo/config.h.in3
-rwxr-xr-xlibgo/configure12
-rw-r--r--libgo/configure.ac11
-rw-r--r--libgo/go/runtime/extern.go10
-rw-r--r--libgo/go/syscall/libcall_linux.go16
-rwxr-xr-xlibgo/mksysinfo.sh9
-rw-r--r--libgo/sysinfo.c15
-rw-r--r--libgomp/ChangeLog99
-rw-r--r--libgomp/Makefile.in2
-rw-r--r--libgomp/acinclude.m42
-rwxr-xr-xlibgomp/configure2
-rw-r--r--libgomp/libgomp-plugin.h2
-rw-r--r--libgomp/libgomp.texi10
-rw-r--r--libgomp/oacc-host.c4
-rw-r--r--libgomp/oacc-init.c16
-rw-r--r--libgomp/plugin/plugin-gcn.c6
-rw-r--r--libgomp/plugin/plugin-nvptx.c9
-rw-r--r--libgomp/target.c104
-rw-r--r--libgomp/testsuite/lib/libgomp.exp5
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-1-aux.c11
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-1.c26
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-2-aux.c9
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-2.c27
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-3-aux.c11
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-3.c26
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-4-aux.c13
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-4.c34
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-5-aux.c11
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-5.c29
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-6.c17
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-7-aux.c11
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/requires-7.c32
-rw-r--r--libgomp/testsuite/libgomp.c/target-31.c2
-rw-r--r--libgomp/testsuite/libgomp.fortran/requires-1-aux.f9014
-rw-r--r--libgomp/testsuite/libgomp.fortran/requires-1.f9034
-rw-r--r--libiberty/ChangeLog20
-rwxr-xr-xlibiberty/configure1
-rw-r--r--libiberty/configure.ac1
-rw-r--r--libiberty/rust-demangle.c47
-rw-r--r--liboffloadmic/ChangeLog7
-rw-r--r--liboffloadmic/plugin/libgomp-plugin-intelmic.cpp6
-rw-r--r--libphobos/ChangeLog31
-rw-r--r--libphobos/libdruntime/MERGE2
-rw-r--r--libphobos/libdruntime/Makefile.am16
-rw-r--r--libphobos/libdruntime/Makefile.in19
-rw-r--r--libphobos/libdruntime/core/internal/parseoptions.d17
-rw-r--r--libphobos/libdruntime/core/stdc/config.d31
-rw-r--r--libphobos/libdruntime/core/stdc/errno.d137
-rw-r--r--libphobos/libdruntime/core/stdc/stdarg.d21
-rw-r--r--libphobos/libdruntime/core/stdc/stddef.d5
-rw-r--r--libphobos/libdruntime/core/stdc/stdint.d35
-rw-r--r--libphobos/libdruntime/core/stdc/stdio.d72
-rw-r--r--libphobos/libdruntime/core/stdc/stdlib.d1
-rw-r--r--libphobos/libdruntime/core/sys/elf/package.d63
-rw-r--r--libphobos/libdruntime/core/sys/posix/fcntl.d6
-rw-r--r--libphobos/libdruntime/core/sys/windows/winsock2.d14
-rw-r--r--libphobos/libdruntime/core/thread/osthread.d13
-rw-r--r--libphobos/libdruntime/core/thread/threadbase.d12
-rw-r--r--libphobos/libdruntime/core/time.d4
-rw-r--r--libphobos/libdruntime/core/vararg.d17
-rw-r--r--libphobos/libdruntime/gcc/attributes.d68
-rw-r--r--libphobos/libdruntime/gcc/simd.d359
-rw-r--r--libphobos/libdruntime/rt/aApply.d108
-rw-r--r--libphobos/libdruntime/rt/aApplyR.d71
-rw-r--r--libphobos/libdruntime/rt/aaA.d39
-rw-r--r--libphobos/libdruntime/rt/arrayassign.d83
-rw-r--r--libphobos/libdruntime/rt/critical_.d4
-rw-r--r--libphobos/libdruntime/rt/dmain2.d16
-rw-r--r--libphobos/libdruntime/rt/lifetime.d384
-rw-r--r--libphobos/libdruntime/rt/minfo.d216
-rw-r--r--libphobos/libdruntime/rt/monitor_.d6
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/std/complex.d6
-rw-r--r--libphobos/src/std/experimental/logger/core.d329
-rw-r--r--libphobos/src/std/experimental/logger/package.d20
-rw-r--r--libphobos/src/std/file.d65
-rw-r--r--libphobos/src/std/math/algebraic.d6
-rw-r--r--libphobos/src/std/math/exponential.d648
-rw-r--r--libphobos/src/std/math/hardware.d6
-rw-r--r--libphobos/src/std/math/trigonometry.d46
-rw-r--r--libphobos/src/std/numeric.d44
-rw-r--r--libphobos/src/std/stdio.d12
-rw-r--r--libphobos/src/std/sumtype.d50
-rw-r--r--libphobos/testsuite/libphobos.cycles/cycles.exp2
-rw-r--r--libsanitizer/sanitizer_common/sanitizer_linux.cpp17
-rw-r--r--libsanitizer/sanitizer_common/sanitizer_platform.h2
-rw-r--r--libsanitizer/tsan/tsan_rtl_s390x.S2
-rw-r--r--libstdc++-v3/ChangeLog354
-rw-r--r--libstdc++-v3/acinclude.m412
-rw-r--r--libstdc++-v3/config.h.in3
-rwxr-xr-xlibstdc++-v3/configure6067
-rw-r--r--libstdc++-v3/configure.ac25
-rw-r--r--libstdc++-v3/crossconfig.m46
-rw-r--r--libstdc++-v3/include/Makefile.am2
-rw-r--r--libstdc++-v3/include/Makefile.in2
-rw-r--r--libstdc++-v3/include/bits/char_traits.h9
-rw-r--r--libstdc++-v3/include/bits/chrono.h45
-rw-r--r--libstdc++-v3/include/bits/fs_ops.h79
-rw-r--r--libstdc++-v3/include/bits/fs_path.h15
-rw-r--r--libstdc++-v3/include/bits/move_only_function.h12
-rw-r--r--libstdc++-v3/include/bits/utility.h3
-rw-r--r--libstdc++-v3/include/experimental/bits/fs_ops.h71
-rw-r--r--libstdc++-v3/include/std/string2
-rw-r--r--libstdc++-v3/include/std/variant43
-rw-r--r--libstdc++-v3/libsupc++/eh_globals.cc9
-rwxr-xr-xlibstdc++-v3/scripts/extract_symvers.in4
-rw-r--r--libstdc++-v3/scripts/run_doxygen4
-rw-r--r--libstdc++-v3/src/c++17/fs_dir.cc29
-rw-r--r--libstdc++-v3/src/c++17/fs_ops.cc34
-rw-r--r--libstdc++-v3/src/filesystem/dir-common.h70
-rw-r--r--libstdc++-v3/src/filesystem/dir.cc19
-rw-r--r--libstdc++-v3/src/filesystem/ops.cc87
-rw-r--r--libstdc++-v3/testsuite/20_util/from_chars/4.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/to_chars/long_double.cc7
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/105995.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/input/1.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc1
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/complex/proj.cc13
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/random_device/entropy.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc8
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc14
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc1
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc1
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc7
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc9
-rw-r--r--libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/this_thread/60421.cc1
-rw-r--r--libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc6
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc9
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc2
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc6
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc14
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc2
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc5
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc5
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc15
-rw-r--r--libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc1
-rw-r--r--libstdc++-v3/testsuite/lib/dg-options.exp29
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp31
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_fs.h72
-rw-r--r--lto-plugin/ChangeLog35
-rw-r--r--lto-plugin/Makefile.am3
-rw-r--r--lto-plugin/Makefile.in3
-rw-r--r--lto-plugin/config.h.in3
-rwxr-xr-xlto-plugin/configure27
-rw-r--r--lto-plugin/configure.ac17
-rw-r--r--lto-plugin/lto-plugin.c71
1153 files changed, 56649 insertions, 90822 deletions
diff --git a/ChangeLog b/ChangeLog
index 65a53b7..2c32b64 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,60 @@
+2022-07-04 Martin Liska <mliska@suse.cz>
+
+ * MAINTAINERS: fix sorting of names
+
+2022-07-03 Immad Mir <mirimmad17@gmail.com>
+
+ * MAINTAINERS: add myself.
+
+2022-07-03 Immad Mir <mirimmad17@gmail.com>
+
+ * MAINTAINERS: Add myself to write after approval and DCO.
+
+2022-07-02 Tim Lange <mail@tim-lange.me>
+
+ * MAINTAINERS: Add myself.
+
+2022-07-01 Haochen Jiang <haochen.jiang@intel.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2022-06-30 Cui,Lili <lili.cui@intel.com>
+
+ Revert:
+ 2022-06-30 Cui,Lili <lili.cui@intel.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2022-06-30 Cui,Lili <lili.cui@intel.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2022-06-28 Alexandre Oliva <oliva@adacore.com>
+
+ * Makefile.tpl (HOST_EXPORTS): Add TFLAGS to GCC_FOR_TARGET.
+ (EXTRA_GCC_FLAGS): Likewise.
+ * Makefile.in: Rebuilt.
+
+2022-06-28 konglin1 <lingling.kong@intel.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ * configure.ac: Build libiberty pic variant for gdbserver.
+ * configure: Regenerate.
+
+2022-06-26 Iain Sandoe <iain@sandoe.co.uk>
+
+ * configure: Regenerate.
+ * configure.ac: Correct use of $host.
+
+2022-06-25 Jeff Law <jeffreyalaw@gmail.com>
+
+ * MAINTAINERS: Remove tilegx and tilepro entries.
+ * configure.ac: Remove tilegx and tilepro stanzas.
+ * configure: Rebuilt.
+
2022-05-28 Bruce Korb <bkorb@gnu.org>
* .gitignore: Ignore vim swap files
diff --git a/MAINTAINERS b/MAINTAINERS
index 8bca7a6..7d9aab7 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -121,8 +121,6 @@ sh port Alexandre Oliva <aoliva@gcc.gnu.org>
sh port Oleg Endo <olegendo@gcc.gnu.org>
sparc port David S. Miller <davem@redhat.com>
sparc port Eric Botcazou <ebotcazou@libertysurf.fr>
-tilegx port Walter Lee <walt@tilera.com>
-tilepro port Walter Lee <walt@tilera.com>
v850 port Nick Clifton <nickc@redhat.com>
vax port Matt Thomas <matt@3am-software.com>
vax port Maciej W. Rozycki <macro@embecosm.com>
@@ -465,6 +463,7 @@ Andreas Jaeger <aj@suse.de>
Harsha Jagasia <harsha.jagasia@amd.com>
Fariborz Jahanian <fjahanian@apple.com>
Surya Kumari Jangala <jskumari@linux.ibm.com>
+Haochen Jiang <haochen.jiang@intel.com>
Qian Jianhua <qianjh@fujitsu.com>
Janis Johnson <janis.marie.johnson@gmail.com>
Teresa Johnson <tejohnson@google.com>
@@ -480,6 +479,7 @@ Jeff Knaggs <jknaggs@redhat.com>
Michael Koch <konqueror@gmx.de>
Nicolas Koenig <koenigni@student.ethz.ch>
Boris Kolpackov <boris@codesynthesis.com>
+Lingling Kong <lingling.kong@intel.com>
Dave Korn <dave.korn.cygwin@gmail.com>
Julia Koval <julia.koval@intel.com>
Matt Kraai <kraai@ftbfs.org>
@@ -495,6 +495,7 @@ Razya Ladelsky <razya@gcc.gnu.org>
Thierry Lafage <thierry.lafage@inria.fr>
Rask Ingemann Lambertsen <ccc94453@vip.cybercity.dk>
Jerome Lambourg <lambourg@adacore.com>
+Tim Lange <mail@tim-lange.me>
Asher Langton <langton2@llnl.gov>
Chris Lattner <sabre@nondot.org>
Terry Laurenzo <tlaurenzo@gmail.com>
@@ -541,6 +542,7 @@ Bingfeng Mei <bmei@broadcom.com>
Jim Meyering <jim@meyering.net>
Martin Michlmayr <tbm@cyrius.com>
Lee Millward <lee.millward@gmail.com>
+Immad Mir <mir@sourceware.org>
Dragan Mladjenovic <Dragan.Mladjenovic@syrmia.com>
Alan Modra <amodra@gmail.com>
Catherine Moore <clm@codesourcery.com>
@@ -716,8 +718,10 @@ information.
Matthias Kretz <m.kretz@gsi.de>
+Tim Lange <mail@tim-lange.me>
Jeff Law <jeffreyalaw@gmail.com>
Jeff Law <jlaw@tachyum.com>
+Immad Mir <mir@sourceware.org>
Gaius Mulley <gaiusmod2@gmail.com>
Siddhesh Poyarekar <siddhesh@gotplt.org>
Navid Rahimi <navidrahimi@microsoft.com>
diff --git a/Makefile.in b/Makefile.in
index 593495e..13ee95a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -222,7 +222,7 @@ HOST_EXPORTS = \
AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
DSYMUTIL_FOR_TARGET="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL_FOR_TARGET; \
- GCC_FOR_TARGET="$(GCC_FOR_TARGET)"; export GCC_FOR_TARGET; \
+ GCC_FOR_TARGET="$(GCC_FOR_TARGET) $$TFLAGS"; export GCC_FOR_TARGET; \
LD_FOR_TARGET="$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \
NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \
OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \
@@ -1047,7 +1047,7 @@ TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)
# The BUILD_* variables are a special case, which are used for the gcc
# cross-building scheme.
EXTRA_GCC_FLAGS = \
- "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
+ "GCC_FOR_TARGET=$(GCC_FOR_TARGET) $$TFLAGS" \
"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
diff --git a/Makefile.tpl b/Makefile.tpl
index ef58fac..ba07271 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -225,7 +225,7 @@ HOST_EXPORTS = \
AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
DSYMUTIL_FOR_TARGET="$(DSYMUTIL_FOR_TARGET)"; export DSYMUTIL_FOR_TARGET; \
- GCC_FOR_TARGET="$(GCC_FOR_TARGET)"; export GCC_FOR_TARGET; \
+ GCC_FOR_TARGET="$(GCC_FOR_TARGET) $$TFLAGS"; export GCC_FOR_TARGET; \
LD_FOR_TARGET="$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \
NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \
OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \
@@ -801,7 +801,7 @@ TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)
# The BUILD_* variables are a special case, which are used for the gcc
# cross-building scheme.
EXTRA_GCC_FLAGS = \
- "GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
+ "GCC_FOR_TARGET=$(GCC_FOR_TARGET) $$TFLAGS" \
"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
diff --git a/configure b/configure
index 5dcaab1..65d7078 100755
--- a/configure
+++ b/configure
@@ -3056,7 +3056,7 @@ case "${ENABLE_GOLD}" in
# Check for target supported by gold.
case "${target}" in
i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
- | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
+ | aarch64*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
configdirs="$configdirs gold"
if test x${ENABLE_GOLD} = xdefault; then
default_ld=gold
@@ -4017,9 +4017,6 @@ case "${target}" in
tic6x-*-*)
noconfigdirs="$noconfigdirs sim"
;;
- tilepro*-*-* | tilegx*-*-*)
- noconfigdirs="$noconfigdirs sim"
- ;;
v810-*-*)
noconfigdirs="$noconfigdirs bfd binutils gas gdb ld opcodes target-libgloss"
;;
@@ -8646,7 +8643,7 @@ fi
# Check whether --enable-host-shared was given.
if test "${enable_host_shared+set}" = set; then :
enableval=$enable_host_shared; host_shared=$enableval
- case $target in
+ case $host in
x86_64-*-darwin* | aarch64-*-darwin*)
if test x$host_shared != xyes ; then
# PIC is the default, and actually cannot be switched off.
@@ -8656,7 +8653,7 @@ if test "${enable_host_shared+set}" = set; then :
*) ;;
esac
else
- case $target in
+ case $host in
x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
*) host_shared=no ;;
esac
@@ -9202,7 +9199,7 @@ fi
extra_host_libiberty_configure_flags=
extra_host_zlib_configure_flags=
case " $configdirs " in
- *" lto-plugin "* | *" libcc1 "*)
+ *" lto-plugin "* | *" libcc1 "* | *" gdbserver "*)
# When these are to be built as shared libraries, the same applies to
# libiberty.
extra_host_libiberty_configure_flags=--enable-shared
diff --git a/configure.ac b/configure.ac
index 8597748..371def9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -353,7 +353,7 @@ case "${ENABLE_GOLD}" in
# Check for target supported by gold.
case "${target}" in
i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
- | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
+ | aarch64*-*-* | mips*-*-* | s390*-*-* | loongarch*-*-*)
configdirs="$configdirs gold"
if test x${ENABLE_GOLD} = xdefault; then
default_ld=gold
@@ -1274,9 +1274,6 @@ case "${target}" in
tic6x-*-*)
noconfigdirs="$noconfigdirs sim"
;;
- tilepro*-*-* | tilegx*-*-*)
- noconfigdirs="$noconfigdirs sim"
- ;;
v810-*-*)
noconfigdirs="$noconfigdirs bfd binutils gas gdb ld opcodes target-libgloss"
;;
@@ -1918,7 +1915,7 @@ AC_ARG_ENABLE(host-shared,
[AS_HELP_STRING([--enable-host-shared],
[build host code as shared libraries])],
[host_shared=$enableval
- case $target in
+ case $host in
x86_64-*-darwin* | aarch64-*-darwin*)
if test x$host_shared != xyes ; then
# PIC is the default, and actually cannot be switched off.
@@ -1927,7 +1924,7 @@ AC_ARG_ENABLE(host-shared,
fi ;;
*) ;;
esac],
-[case $target in
+[case $host in
x86_64-*-darwin* | aarch64-*-darwin*) host_shared=yes ;;
*) host_shared=no ;;
esac])
@@ -2457,7 +2454,7 @@ fi
extra_host_libiberty_configure_flags=
extra_host_zlib_configure_flags=
case " $configdirs " in
- *" lto-plugin "* | *" libcc1 "*)
+ *" lto-plugin "* | *" libcc1 "* | *" gdbserver "*)
# When these are to be built as shared libraries, the same applies to
# libiberty.
extra_host_libiberty_configure_flags=--enable-shared
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 9025988..be06767 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,26 @@
+2022-07-04 Martin Liska <mliska@suse.cz>
+
+ * git-descr.sh: By default print revision for HEAD.
+
+2022-06-28 Lewis Hyatt <lhyatt@gmail.com>
+
+ * unicode/README: Added instructions for updating ucnid.h.
+ * unicode/DerivedCoreProperties.txt: New file added to source
+ control from Unicode 14.0 release.
+ * unicode/DerivedNormalizationProps.txt: Likewise.
+
+2022-06-26 Lewis Hyatt <lhyatt@gmail.com>
+
+ * unicode/EastAsianWidth.txt: Update to Unicode 14.0.0.
+ * unicode/PropList.txt: Likewise.
+ * unicode/README: Likewise.
+ * unicode/UnicodeData.txt: Likewise.
+
+2022-06-25 Jeff Law <jeffreyalaw@gmail.com>
+
+ * config-list.mk: Remove tilegx and tilepro entries.
+ * gcc_update: Remove tilegx and tilepro entries.
+
2022-05-27 Richard Biener <rguenther@suse.de>
* gcc-changelog/git_update_version.py (active_refs): Remove
diff --git a/contrib/config-list.mk b/contrib/config-list.mk
index e042105..c4db8dc 100644
--- a/contrib/config-list.mk
+++ b/contrib/config-list.mk
@@ -96,8 +96,6 @@ LIST = aarch64-elf aarch64-linux-gnu aarch64-rtems \
sparc64-sun-solaris2.11OPT-with-gnu-ldOPT-with-gnu-asOPT-enable-threads=posix \
sparc-wrs-vxworks sparc64-elf sparc64-rtems sparc64-linux sparc64-freebsd6 \
sparc64-netbsd sparc64-openbsd \
- tilegx-linux-gnuOPT-enable-obsolete tilegxbe-linux-gnuOPT-enable-obsolete \
- tilepro-linux-gnuOPT-enable-obsolete \
v850e1-elf v850e-elf v850-elf v850-rtems vax-linux-gnu \
vax-netbsdelf visium-elf x86_64-apple-darwin \
x86_64-pc-linux-gnuOPT-with-fpmath=avx \
diff --git a/contrib/gcc_update b/contrib/gcc_update
index 620504e..2ee1bc1 100755
--- a/contrib/gcc_update
+++ b/contrib/gcc_update
@@ -92,8 +92,6 @@ gcc/config/m68k/m68k-tables.opt: gcc/config/m68k/m68k-devices.def gcc/config/m68
gcc/config/mips/mips-tables.opt: gcc/config/mips/mips-cpus.def gcc/config/mips/genopt.sh
gcc/config/rs6000/rs6000-tables.opt: gcc/config/rs6000/rs6000-cpus.def gcc/config/rs6000/genopt.sh
gcc/config/rs6000/fusion.md: gcc/config/rs6000/genfusion.pl
-gcc/config/tilegx/mul-tables.cc: gcc/config/tilepro/gen-mul-tables.cc
-gcc/config/tilepro/mul-tables.cc: gcc/config/tilepro/gen-mul-tables.cc
# And then, language-specific files
gcc/cp/cfns.h: gcc/cp/cfns.gperf
# testsuite
diff --git a/contrib/git-descr.sh b/contrib/git-descr.sh
index 96a9930..28db83a 100755
--- a/contrib/git-descr.sh
+++ b/contrib/git-descr.sh
@@ -4,7 +4,7 @@
short=no
long=no
-c=master
+c=HEAD
for arg in "$@"
do
diff --git a/contrib/unicode/DerivedCoreProperties.txt b/contrib/unicode/DerivedCoreProperties.txt
new file mode 100644
index 0000000..afc2abd
--- /dev/null
+++ b/contrib/unicode/DerivedCoreProperties.txt
@@ -0,0 +1,12416 @@
+# DerivedCoreProperties-14.0.0.txt
+# Date: 2021-08-12, 23:12:53 GMT
+# © 2021 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# ================================================
+
+# Derived Property: Math
+# Generated from: Sm + Other_Math
+
+002B ; Math # Sm PLUS SIGN
+003C..003E ; Math # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+005E ; Math # Sk CIRCUMFLEX ACCENT
+007C ; Math # Sm VERTICAL LINE
+007E ; Math # Sm TILDE
+00AC ; Math # Sm NOT SIGN
+00B1 ; Math # Sm PLUS-MINUS SIGN
+00D7 ; Math # Sm MULTIPLICATION SIGN
+00F7 ; Math # Sm DIVISION SIGN
+03D0..03D2 ; Math # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5 ; Math # L& GREEK PHI SYMBOL
+03F0..03F1 ; Math # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5 ; Math # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F6 ; Math # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+0606..0608 ; Math # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+2016 ; Math # Po DOUBLE VERTICAL LINE
+2032..2034 ; Math # Po [3] PRIME..TRIPLE PRIME
+2040 ; Math # Pc CHARACTER TIE
+2044 ; Math # Sm FRACTION SLASH
+2052 ; Math # Sm COMMERCIAL MINUS SIGN
+2061..2064 ; Math # Cf [4] FUNCTION APPLICATION..INVISIBLE PLUS
+207A..207C ; Math # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; Math # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Math # Pe SUPERSCRIPT RIGHT PARENTHESIS
+208A..208C ; Math # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; Math # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Math # Pe SUBSCRIPT RIGHT PARENTHESIS
+20D0..20DC ; Math # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1 ; Math # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20E6 ; Math # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20EB..20EF ; Math # Mn [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW
+2102 ; Math # L& DOUBLE-STRUCK CAPITAL C
+2107 ; Math # L& EULER CONSTANT
+210A..2113 ; Math # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Math # L& DOUBLE-STRUCK CAPITAL N
+2118 ; Math # Sm SCRIPT CAPITAL P
+2119..211D ; Math # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Math # L& DOUBLE-STRUCK CAPITAL Z
+2128 ; Math # L& BLACK-LETTER CAPITAL Z
+2129 ; Math # So TURNED GREEK SMALL LETTER IOTA
+212C..212D ; Math # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131 ; Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; Math # Lo [4] ALEF SYMBOL..DALET SYMBOL
+213C..213F ; Math # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144 ; Math # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149 ; Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214B ; Math # Sm TURNED AMPERSAND
+2190..2194 ; Math # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Math # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Math # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Math # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Math # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Math # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Math # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Math # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Math # Sm RIGHTWARDS ARROW FROM BAR
+21A7 ; Math # So DOWNWARDS ARROW FROM BAR
+21A9..21AD ; Math # So [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW
+21AE ; Math # Sm LEFT RIGHT ARROW WITH STROKE
+21B0..21B1 ; Math # So [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS
+21B6..21B7 ; Math # So [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+21BC..21CD ; Math # So [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Math # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Math # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Math # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Math # So DOWNWARDS DOUBLE ARROW
+21D4 ; Math # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21DB ; Math # So [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW
+21DD ; Math # So RIGHTWARDS SQUIGGLE ARROW
+21E4..21E5 ; Math # So [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR
+21F4..22FF ; Math # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2308 ; Math # Ps LEFT CEILING
+2309 ; Math # Pe RIGHT CEILING
+230A ; Math # Ps LEFT FLOOR
+230B ; Math # Pe RIGHT FLOOR
+2320..2321 ; Math # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+237C ; Math # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+239B..23B3 ; Math # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23B5 ; Math # So [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET
+23B7 ; Math # So RADICAL SYMBOL BOTTOM
+23D0 ; Math # So VERTICAL LINE EXTENSION
+23DC..23E1 ; Math # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2 ; Math # So WHITE TRAPEZIUM
+25A0..25A1 ; Math # So [2] BLACK SQUARE..WHITE SQUARE
+25AE..25B6 ; Math # So [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Math # Sm WHITE RIGHT-POINTING TRIANGLE
+25BC..25C0 ; Math # So [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Math # Sm WHITE LEFT-POINTING TRIANGLE
+25C6..25C7 ; Math # So [2] BLACK DIAMOND..WHITE DIAMOND
+25CA..25CB ; Math # So [2] LOZENGE..WHITE CIRCLE
+25CF..25D3 ; Math # So [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK
+25E2 ; Math # So BLACK LOWER RIGHT TRIANGLE
+25E4 ; Math # So BLACK UPPER LEFT TRIANGLE
+25E7..25EC ; Math # So [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT
+25F8..25FF ; Math # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2605..2606 ; Math # So [2] BLACK STAR..WHITE STAR
+2640 ; Math # So FEMALE SIGN
+2642 ; Math # So MALE SIGN
+2660..2663 ; Math # So [4] BLACK SPADE SUIT..BLACK CLUB SUIT
+266D..266E ; Math # So [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN
+266F ; Math # Sm MUSIC SHARP SIGN
+27C0..27C4 ; Math # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Math # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Math # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27E5 ; Math # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Math # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Math # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Math # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Math # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC ; Math # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED ; Math # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE ; Math # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF ; Math # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF ; Math # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982 ; Math # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Math # Ps LEFT WHITE CURLY BRACKET
+2984 ; Math # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Math # Ps LEFT WHITE PARENTHESIS
+2986 ; Math # Pe RIGHT WHITE PARENTHESIS
+2987 ; Math # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Math # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Math # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Math # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Math # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Math # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Math # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Math # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Math # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Math # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Math # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Math # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Math # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Math # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Math # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Math # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Math # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Math # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Math # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Math # Ps LEFT WIGGLY FENCE
+29D9 ; Math # Pe RIGHT WIGGLY FENCE
+29DA ; Math # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Math # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Math # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Math # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Math # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Math # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B30..2B44 ; Math # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B47..2B4C ; Math # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+FB29 ; Math # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FE61 ; Math # Po SMALL ASTERISK
+FE62 ; Math # Sm SMALL PLUS SIGN
+FE63 ; Math # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; Math # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; Math # Po SMALL REVERSE SOLIDUS
+FF0B ; Math # Sm FULLWIDTH PLUS SIGN
+FF1C..FF1E ; Math # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF3C ; Math # Po FULLWIDTH REVERSE SOLIDUS
+FF3E ; Math # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF5C ; Math # Sm FULLWIDTH VERTICAL LINE
+FF5E ; Math # Sm FULLWIDTH TILDE
+FFE2 ; Math # Sm FULLWIDTH NOT SIGN
+FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+1D400..1D454 ; Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Math # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Math # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Math # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Math # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Math # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Math # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Math # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Math # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Math # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Math # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Math # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Math # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Math # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Math # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Math # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; Math # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; Math # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; Math # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; Math # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; Math # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; Math # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; Math # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; Math # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; Math # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; Math # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; Math # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; Math # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; Math # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; Math # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; Math # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; Math # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; Math # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; Math # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB ; Math # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EE00..1EE03 ; Math # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Math # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Math # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Math # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Math # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Math # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Math # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Math # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Math # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Math # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Math # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Math # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Math # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Math # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Math # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Math # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Math # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Math # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Math # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Math # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Math # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Math # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Math # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Math # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Math # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Math # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Math # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Math # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Math # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1EEF0..1EEF1 ; Math # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+
+# Total code points: 2310
+
+# ================================================
+
+# Derived Property: Alphabetic
+# Generated from: Uppercase + Lowercase + Lt + Lm + Lo + Nl + Other_Alphabetic
+
+0041..005A ; Alphabetic # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; Alphabetic # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; Alphabetic # Lo FEMININE ORDINAL INDICATOR
+00B5 ; Alphabetic # L& MICRO SIGN
+00BA ; Alphabetic # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; Alphabetic # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; Alphabetic # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; Alphabetic # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; Alphabetic # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; Alphabetic # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; Alphabetic # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; Alphabetic # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; Alphabetic # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1 ; Alphabetic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1 ; Alphabetic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4 ; Alphabetic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC ; Alphabetic # Lm MODIFIER LETTER VOICING
+02EE ; Alphabetic # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+0345 ; Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI
+0370..0373 ; Alphabetic # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374 ; Alphabetic # Lm GREEK NUMERAL SIGN
+0376..0377 ; Alphabetic # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; Alphabetic # Lm GREEK YPOGEGRAMMENI
+037B..037D ; Alphabetic # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; Alphabetic # L& GREEK CAPITAL LETTER YOT
+0386 ; Alphabetic # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Alphabetic # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Alphabetic # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; Alphabetic # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; Alphabetic # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481 ; Alphabetic # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..052F ; Alphabetic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; Alphabetic # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; Alphabetic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0560..0588 ; Alphabetic # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+05B0..05BD ; Alphabetic # Mn [14] HEBREW POINT SHEVA..HEBREW POINT METEG
+05BF ; Alphabetic # Mn HEBREW POINT RAFE
+05C1..05C2 ; Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; Alphabetic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Alphabetic # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA ; Alphabetic # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; Alphabetic # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A ; Alphabetic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0620..063F ; Alphabetic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640 ; Alphabetic # Lm ARABIC TATWEEL
+0641..064A ; Alphabetic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..0657 ; Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065F ; Alphabetic # Mn [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW
+066E..066F ; Alphabetic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670 ; Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3 ; Alphabetic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5 ; Alphabetic # Lo ARABIC LETTER AE
+06D6..06DC ; Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06E1..06E4 ; Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
+06E5..06E6 ; Alphabetic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8 ; Alphabetic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06ED ; Alphabetic # Mn ARABIC SMALL LOW MEEM
+06EE..06EF ; Alphabetic # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC ; Alphabetic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF ; Alphabetic # Lo ARABIC LETTER HEH WITH INVERTED V
+0710 ; Alphabetic # Lo SYRIAC LETTER ALAPH
+0711 ; Alphabetic # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F ; Alphabetic # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..073F ; Alphabetic # Mn [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+074D..07A5 ; Alphabetic # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0 ; Alphabetic # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1 ; Alphabetic # Lo THAANA LETTER NAA
+07CA..07EA ; Alphabetic # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5 ; Alphabetic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA ; Alphabetic # Lm NKO LAJANYALAN
+0800..0815 ; Alphabetic # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0817 ; Alphabetic # Mn [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF
+081A ; Alphabetic # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823 ; Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824 ; Alphabetic # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827 ; Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828 ; Alphabetic # Lm SAMARITAN MODIFIER LETTER I
+0829..082C ; Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
+0840..0858 ; Alphabetic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0889..088E ; Alphabetic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+08A0..08C8 ; Alphabetic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9 ; Alphabetic # Lm ARABIC SMALL FARSI YEH
+08D4..08DF ; Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA
+08E3..08E9 ; Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN
+08F0..0902 ; Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA
+0903 ; Alphabetic # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; Alphabetic # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A ; Alphabetic # Mn DEVANAGARI VOWEL SIGN OE
+093B ; Alphabetic # Mc DEVANAGARI VOWEL SIGN OOE
+093D ; Alphabetic # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; Alphabetic # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; Alphabetic # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; Alphabetic # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E..094F ; Alphabetic # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950 ; Alphabetic # Lo DEVANAGARI OM
+0955..0957 ; Alphabetic # Mn [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE
+0958..0961 ; Alphabetic # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963 ; Alphabetic # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0971 ; Alphabetic # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..0980 ; Alphabetic # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+0981 ; Alphabetic # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; Alphabetic # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; Alphabetic # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; Alphabetic # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; Alphabetic # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; Alphabetic # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; Alphabetic # Lo BENGALI LETTER LA
+09B6..09B9 ; Alphabetic # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD ; Alphabetic # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0 ; Alphabetic # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; Alphabetic # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; Alphabetic # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; Alphabetic # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CE ; Alphabetic # Lo BENGALI LETTER KHANDA TA
+09D7 ; Alphabetic # Mc BENGALI AU LENGTH MARK
+09DC..09DD ; Alphabetic # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; Alphabetic # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3 ; Alphabetic # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09F0..09F1 ; Alphabetic # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; Alphabetic # Lo BENGALI LETTER VEDIC ANUSVARA
+0A01..0A02 ; Alphabetic # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; Alphabetic # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; Alphabetic # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; Alphabetic # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; Alphabetic # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; Alphabetic # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; Alphabetic # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; Alphabetic # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; Alphabetic # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3E..0A40 ; Alphabetic # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; Alphabetic # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Alphabetic # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C ; Alphabetic # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A51 ; Alphabetic # Mn GURMUKHI SIGN UDAAT
+0A59..0A5C ; Alphabetic # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; Alphabetic # Lo GURMUKHI LETTER FA
+0A70..0A71 ; Alphabetic # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74 ; Alphabetic # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75 ; Alphabetic # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; Alphabetic # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; Alphabetic # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; Alphabetic # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; Alphabetic # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; Alphabetic # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; Alphabetic # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; Alphabetic # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; Alphabetic # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD ; Alphabetic # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; Alphabetic # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; Alphabetic # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Alphabetic # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; Alphabetic # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; Alphabetic # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AD0 ; Alphabetic # Lo GUJARATI OM
+0AE0..0AE1 ; Alphabetic # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3 ; Alphabetic # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AF9 ; Alphabetic # Lo GUJARATI LETTER ZHA
+0AFA..0AFC ; Alphabetic # Mn [3] GUJARATI SIGN SUKUN..GUJARATI SIGN MADDAH
+0B01 ; Alphabetic # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; Alphabetic # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; Alphabetic # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; Alphabetic # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; Alphabetic # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; Alphabetic # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; Alphabetic # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; Alphabetic # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D ; Alphabetic # Lo ORIYA SIGN AVAGRAHA
+0B3E ; Alphabetic # Mc ORIYA VOWEL SIGN AA
+0B3F ; Alphabetic # Mn ORIYA VOWEL SIGN I
+0B40 ; Alphabetic # Mc ORIYA VOWEL SIGN II
+0B41..0B44 ; Alphabetic # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48 ; Alphabetic # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Alphabetic # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B56 ; Alphabetic # Mn ORIYA AI LENGTH MARK
+0B57 ; Alphabetic # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D ; Alphabetic # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; Alphabetic # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63 ; Alphabetic # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B71 ; Alphabetic # Lo ORIYA LETTER WA
+0B82 ; Alphabetic # Mn TAMIL SIGN ANUSVARA
+0B83 ; Alphabetic # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; Alphabetic # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; Alphabetic # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; Alphabetic # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; Alphabetic # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; Alphabetic # Lo TAMIL LETTER JA
+0B9E..0B9F ; Alphabetic # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; Alphabetic # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; Alphabetic # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; Alphabetic # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF ; Alphabetic # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; Alphabetic # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; Alphabetic # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; Alphabetic # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; Alphabetic # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD0 ; Alphabetic # Lo TAMIL OM
+0BD7 ; Alphabetic # Mc TAMIL AU LENGTH MARK
+0C00 ; Alphabetic # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03 ; Alphabetic # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C ; Alphabetic # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; Alphabetic # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; Alphabetic # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; Alphabetic # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D ; Alphabetic # Lo TELUGU SIGN AVAGRAHA
+0C3E..0C40 ; Alphabetic # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; Alphabetic # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; Alphabetic # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4C ; Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU
+0C55..0C56 ; Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C5A ; Alphabetic # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D ; Alphabetic # Lo TELUGU LETTER NAKAARA POLLU
+0C60..0C61 ; Alphabetic # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63 ; Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C80 ; Alphabetic # Lo KANNADA SIGN SPACING CANDRABINDU
+0C81 ; Alphabetic # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83 ; Alphabetic # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C ; Alphabetic # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; Alphabetic # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; Alphabetic # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; Alphabetic # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; Alphabetic # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD ; Alphabetic # Lo KANNADA SIGN AVAGRAHA
+0CBE ; Alphabetic # Mc KANNADA VOWEL SIGN AA
+0CBF ; Alphabetic # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; Alphabetic # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; Alphabetic # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; Alphabetic # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC ; Alphabetic # Mn KANNADA VOWEL SIGN AU
+0CD5..0CD6 ; Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDD..0CDE ; Alphabetic # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+0CE0..0CE1 ; Alphabetic # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3 ; Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CF1..0CF2 ; Alphabetic # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00..0D01 ; Alphabetic # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03 ; Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D04..0D0C ; Alphabetic # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; Alphabetic # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; Alphabetic # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3D ; Alphabetic # Lo MALAYALAM SIGN AVAGRAHA
+0D3E..0D40 ; Alphabetic # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44 ; Alphabetic # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48 ; Alphabetic # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4E ; Alphabetic # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; Alphabetic # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57 ; Alphabetic # Mc MALAYALAM AU LENGTH MARK
+0D5F..0D61 ; Alphabetic # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D62..0D63 ; Alphabetic # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D7A..0D7F ; Alphabetic # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; Alphabetic # Mn SINHALA SIGN CANDRABINDU
+0D82..0D83 ; Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; Alphabetic # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; Alphabetic # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; Alphabetic # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; Alphabetic # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; Alphabetic # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCF..0DD1 ; Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Alphabetic # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; Alphabetic # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DF2..0DF3 ; Alphabetic # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E01..0E30 ; Alphabetic # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31 ; Alphabetic # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33 ; Alphabetic # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A ; Alphabetic # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45 ; Alphabetic # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; Alphabetic # Lm THAI CHARACTER MAIYAMOK
+0E4D ; Alphabetic # Mn THAI CHARACTER NIKHAHIT
+0E81..0E82 ; Alphabetic # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; Alphabetic # Lo LAO LETTER KHO TAM
+0E86..0E8A ; Alphabetic # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; Alphabetic # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; Alphabetic # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; Alphabetic # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB1 ; Alphabetic # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3 ; Alphabetic # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EB9 ; Alphabetic # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBB..0EBC ; Alphabetic # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
+0EBD ; Alphabetic # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; Alphabetic # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; Alphabetic # Lm LAO KO LA
+0ECD ; Alphabetic # Mn LAO NIGGAHITA
+0EDC..0EDF ; Alphabetic # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00 ; Alphabetic # Lo TIBETAN SYLLABLE OM
+0F40..0F47 ; Alphabetic # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; Alphabetic # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E ; Alphabetic # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; Alphabetic # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F81 ; Alphabetic # Mn [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II
+0F88..0F8C ; Alphabetic # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0F8D..0F97 ; Alphabetic # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Alphabetic # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+1000..102A ; Alphabetic # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C ; Alphabetic # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030 ; Alphabetic # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; Alphabetic # Mc MYANMAR VOWEL SIGN E
+1032..1036 ; Alphabetic # Mn [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA
+1038 ; Alphabetic # Mc MYANMAR SIGN VISARGA
+103B..103C ; Alphabetic # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E ; Alphabetic # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F ; Alphabetic # Lo MYANMAR LETTER GREAT SA
+1050..1055 ; Alphabetic # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D ; Alphabetic # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060 ; Alphabetic # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061 ; Alphabetic # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064 ; Alphabetic # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066 ; Alphabetic # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D ; Alphabetic # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070 ; Alphabetic # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074 ; Alphabetic # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081 ; Alphabetic # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082 ; Alphabetic # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084 ; Alphabetic # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086 ; Alphabetic # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C ; Alphabetic # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; Alphabetic # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E ; Alphabetic # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F ; Alphabetic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+109A..109C ; Alphabetic # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D ; Alphabetic # Mn MYANMAR VOWEL SIGN AITON AI
+10A0..10C5 ; Alphabetic # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Alphabetic # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Alphabetic # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; Alphabetic # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; Alphabetic # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; Alphabetic # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..1248 ; Alphabetic # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; Alphabetic # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; Alphabetic # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; Alphabetic # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; Alphabetic # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; Alphabetic # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; Alphabetic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; Alphabetic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1380..138F ; Alphabetic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F5 ; Alphabetic # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Alphabetic # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1401..166C ; Alphabetic # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F ; Alphabetic # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A ; Alphabetic # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA ; Alphabetic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; Alphabetic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; Alphabetic # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..1711 ; Alphabetic # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
+1712..1713 ; Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U
+171F..1731 ; Alphabetic # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
+1732..1733 ; Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1740..1751 ; Alphabetic # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753 ; Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C ; Alphabetic # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; Alphabetic # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773 ; Alphabetic # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3 ; Alphabetic # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B6 ; Alphabetic # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; Alphabetic # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; Alphabetic # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; Alphabetic # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; Alphabetic # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17D7 ; Alphabetic # Lm KHMER SIGN LEK TOO
+17DC ; Alphabetic # Lo KHMER SIGN AVAKRAHASANYA
+1820..1842 ; Alphabetic # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; Alphabetic # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; Alphabetic # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; Alphabetic # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; Alphabetic # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; Alphabetic # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 ; Alphabetic # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+18AA ; Alphabetic # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5 ; Alphabetic # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E ; Alphabetic # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1920..1922 ; Alphabetic # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; Alphabetic # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; Alphabetic # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; Alphabetic # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1950..196D ; Alphabetic # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; Alphabetic # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB ; Alphabetic # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; Alphabetic # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+1A00..1A16 ; Alphabetic # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18 ; Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A ; Alphabetic # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B ; Alphabetic # Mn BUGINESE VOWEL SIGN AE
+1A20..1A54 ; Alphabetic # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55 ; Alphabetic # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56 ; Alphabetic # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57 ; Alphabetic # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E ; Alphabetic # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A61 ; Alphabetic # Mc TAI THAM VOWEL SIGN A
+1A62 ; Alphabetic # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64 ; Alphabetic # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C ; Alphabetic # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72 ; Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A74 ; Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
+1AA7 ; Alphabetic # Lm TAI THAM SIGN MAI YAMOK
+1ABF..1AC0 ; Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+1ACC..1ACE ; Alphabetic # Mn [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T
+1B00..1B03 ; Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04 ; Alphabetic # Mc BALINESE SIGN BISAH
+1B05..1B33 ; Alphabetic # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B35 ; Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A ; Alphabetic # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B ; Alphabetic # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C ; Alphabetic # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41 ; Alphabetic # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42 ; Alphabetic # Mn BALINESE VOWEL SIGN PEPET
+1B43 ; Alphabetic # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+1B45..1B4C ; Alphabetic # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+1B80..1B81 ; Alphabetic # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82 ; Alphabetic # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0 ; Alphabetic # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1 ; Alphabetic # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5 ; Alphabetic # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7 ; Alphabetic # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9 ; Alphabetic # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAC..1BAD ; Alphabetic # Mn [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BAF ; Alphabetic # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BBA..1BE5 ; Alphabetic # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+1BE7 ; Alphabetic # Mc BATAK VOWEL SIGN E
+1BE8..1BE9 ; Alphabetic # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC ; Alphabetic # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED ; Alphabetic # Mn BATAK VOWEL SIGN KARO O
+1BEE ; Alphabetic # Mc BATAK VOWEL SIGN U
+1BEF..1BF1 ; Alphabetic # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1C00..1C23 ; Alphabetic # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B ; Alphabetic # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33 ; Alphabetic # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35 ; Alphabetic # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36 ; Alphabetic # Mn LEPCHA SIGN RAN
+1C4D..1C4F ; Alphabetic # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C5A..1C77 ; Alphabetic # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; Alphabetic # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C80..1C88 ; Alphabetic # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; Alphabetic # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Alphabetic # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CE9..1CEC ; Alphabetic # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF3 ; Alphabetic # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF5..1CF6 ; Alphabetic # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CFA ; Alphabetic # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B ; Alphabetic # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; Alphabetic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; Alphabetic # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; Alphabetic # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; Alphabetic # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; Alphabetic # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DE7..1DF4 ; Alphabetic # Mn [14] COMBINING LATIN SMALL LETTER ALPHA..COMBINING LATIN SMALL LETTER U WITH DIAERESIS
+1E00..1F15 ; Alphabetic # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Alphabetic # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Alphabetic # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Alphabetic # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Alphabetic # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Alphabetic # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Alphabetic # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Alphabetic # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Alphabetic # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Alphabetic # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Alphabetic # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; Alphabetic # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; Alphabetic # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Alphabetic # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; Alphabetic # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Alphabetic # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; Alphabetic # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; Alphabetic # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Alphabetic # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071 ; Alphabetic # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Alphabetic # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Alphabetic # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+2102 ; Alphabetic # L& DOUBLE-STRUCK CAPITAL C
+2107 ; Alphabetic # L& EULER CONSTANT
+210A..2113 ; Alphabetic # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Alphabetic # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; Alphabetic # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Alphabetic # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; Alphabetic # L& OHM SIGN
+2128 ; Alphabetic # L& BLACK-LETTER CAPITAL Z
+212A..212D ; Alphabetic # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2134 ; Alphabetic # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; Alphabetic # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; Alphabetic # L& INFORMATION SOURCE
+213C..213F ; Alphabetic # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; Alphabetic # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; Alphabetic # L& TURNED SMALL F
+2160..2182 ; Alphabetic # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; Alphabetic # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; Alphabetic # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+24B6..24E9 ; Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C00..2C7B ; Alphabetic # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; Alphabetic # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; Alphabetic # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE ; Alphabetic # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF2..2CF3 ; Alphabetic # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; Alphabetic # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Alphabetic # L& GEORGIAN SMALL LETTER YN
+2D2D ; Alphabetic # L& GEORGIAN SMALL LETTER AEN
+2D30..2D67 ; Alphabetic # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; Alphabetic # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96 ; Alphabetic # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF ; Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E2F ; Alphabetic # Lm VERTICAL TILDE
+3005 ; Alphabetic # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; Alphabetic # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; Alphabetic # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; Alphabetic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035 ; Alphabetic # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A ; Alphabetic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; Alphabetic # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; Alphabetic # Lo MASU MARK
+3041..3096 ; Alphabetic # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E ; Alphabetic # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; Alphabetic # Lo HIRAGANA DIGRAPH YORI
+30A1..30FA ; Alphabetic # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE ; Alphabetic # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; Alphabetic # Lo KATAKANA DIGRAPH KOTO
+3105..312F ; Alphabetic # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E ; Alphabetic # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31BF ; Alphabetic # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+31F0..31FF ; Alphabetic # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DBF ; Alphabetic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..A014 ; Alphabetic # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
+A015 ; Alphabetic # Lm YI SYLLABLE WU
+A016..A48C ; Alphabetic # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7 ; Alphabetic # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; Alphabetic # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B ; Alphabetic # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; Alphabetic # Lm VAI SYLLABLE LENGTHENER
+A610..A61F ; Alphabetic # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A62A..A62B ; Alphabetic # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D ; Alphabetic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; Alphabetic # Lo CYRILLIC LETTER MULTIOCULAR O
+A674..A67B ; Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA
+A67F ; Alphabetic # Lm CYRILLIC PAYEROK
+A680..A69B ; Alphabetic # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; Alphabetic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F ; Alphabetic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6A0..A6E5 ; Alphabetic # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; Alphabetic # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A717..A71F ; Alphabetic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F ; Alphabetic # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; Alphabetic # Lm MODIFIER LETTER US
+A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7CA ; Alphabetic # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; Alphabetic # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; Alphabetic # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; Alphabetic # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4 ; Alphabetic # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; Alphabetic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; Alphabetic # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A801 ; Alphabetic # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A802 ; Alphabetic # Mn SYLOTI NAGRI SIGN DVISVARA
+A803..A805 ; Alphabetic # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A ; Alphabetic # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B ; Alphabetic # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822 ; Alphabetic # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
+A840..A873 ; Alphabetic # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A880..A881 ; Alphabetic # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3 ; Alphabetic # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3 ; Alphabetic # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C5 ; Alphabetic # Mn SAURASHTRA SIGN CANDRABINDU
+A8F2..A8F7 ; Alphabetic # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB ; Alphabetic # Lo DEVANAGARI HEADSTROKE
+A8FD..A8FE ; Alphabetic # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF ; Alphabetic # Mn DEVANAGARI VOWEL SIGN AY
+A90A..A925 ; Alphabetic # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92A ; Alphabetic # Mn [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O
+A930..A946 ; Alphabetic # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951 ; Alphabetic # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952 ; Alphabetic # Mc REJANG CONSONANT SIGN H
+A960..A97C ; Alphabetic # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982 ; Alphabetic # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983 ; Alphabetic # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2 ; Alphabetic # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B4..A9B5 ; Alphabetic # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9 ; Alphabetic # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB ; Alphabetic # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD ; Alphabetic # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9BF ; Alphabetic # Mc [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA
+A9CF ; Alphabetic # Lm JAVANESE PANGRANGKEP
+A9E0..A9E4 ; Alphabetic # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E5 ; Alphabetic # Mn MYANMAR SIGN SHAN SAW
+A9E6 ; Alphabetic # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; Alphabetic # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9FA..A9FE ; Alphabetic # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28 ; Alphabetic # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E ; Alphabetic # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30 ; Alphabetic # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32 ; Alphabetic # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34 ; Alphabetic # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36 ; Alphabetic # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42 ; Alphabetic # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43 ; Alphabetic # Mn CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B ; Alphabetic # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C ; Alphabetic # Mn CHAM CONSONANT SIGN FINAL M
+AA4D ; Alphabetic # Mc CHAM CONSONANT SIGN FINAL H
+AA60..AA6F ; Alphabetic # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; Alphabetic # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; Alphabetic # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A ; Alphabetic # Lo MYANMAR LETTER AITON RA
+AA7B ; Alphabetic # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C ; Alphabetic # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D ; Alphabetic # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AAAF ; Alphabetic # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+AAB0 ; Alphabetic # Mn TAI VIET MAI KANG
+AAB1 ; Alphabetic # Lo TAI VIET VOWEL AA
+AAB2..AAB4 ; Alphabetic # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6 ; Alphabetic # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8 ; Alphabetic # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD ; Alphabetic # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE ; Alphabetic # Mn TAI VIET VOWEL AM
+AAC0 ; Alphabetic # Lo TAI VIET TONE MAI NUENG
+AAC2 ; Alphabetic # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; Alphabetic # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; Alphabetic # Lm TAI VIET SYMBOL SAM
+AAE0..AAEA ; Alphabetic # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB ; Alphabetic # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; Alphabetic # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF2 ; Alphabetic # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; Alphabetic # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5 ; Alphabetic # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AB01..AB06 ; Alphabetic # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; Alphabetic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; Alphabetic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A ; Alphabetic # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; Alphabetic # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; Alphabetic # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; Alphabetic # Lm MODIFIER LETTER SMALL TURNED W
+AB70..ABBF ; Alphabetic # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2 ; Alphabetic # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4 ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5 ; Alphabetic # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7 ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8 ; Alphabetic # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+AC00..D7A3 ; Alphabetic # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; Alphabetic # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; Alphabetic # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA6D ; Alphabetic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; Alphabetic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; Alphabetic # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Alphabetic # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; Alphabetic # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E ; Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28 ; Alphabetic # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36 ; Alphabetic # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Alphabetic # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Alphabetic # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Alphabetic # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Alphabetic # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; Alphabetic # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; Alphabetic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; Alphabetic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Alphabetic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; Alphabetic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FE70..FE74 ; Alphabetic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; Alphabetic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF21..FF3A ; Alphabetic # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; Alphabetic # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F ; Alphabetic # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; Alphabetic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; Alphabetic # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; Alphabetic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; Alphabetic # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; Alphabetic # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; Alphabetic # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; Alphabetic # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B ; Alphabetic # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; Alphabetic # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; Alphabetic # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; Alphabetic # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; Alphabetic # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; Alphabetic # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; Alphabetic # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174 ; Alphabetic # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10280..1029C ; Alphabetic # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0 ; Alphabetic # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031F ; Alphabetic # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+1032D..10340 ; Alphabetic # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+10341 ; Alphabetic # Nl GOTHIC LETTER NINETY
+10342..10349 ; Alphabetic # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; Alphabetic # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375 ; Alphabetic # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10376..1037A ; Alphabetic # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10380..1039D ; Alphabetic # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3 ; Alphabetic # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; Alphabetic # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5 ; Alphabetic # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F ; Alphabetic # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; Alphabetic # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104B0..104D3 ; Alphabetic # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; Alphabetic # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527 ; Alphabetic # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563 ; Alphabetic # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+10570..1057A ; Alphabetic # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Alphabetic # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Alphabetic # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Alphabetic # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; Alphabetic # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Alphabetic # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Alphabetic # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Alphabetic # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10600..10736 ; Alphabetic # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; Alphabetic # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; Alphabetic # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785 ; Alphabetic # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Alphabetic # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Alphabetic # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10800..10805 ; Alphabetic # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; Alphabetic # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; Alphabetic # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; Alphabetic # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; Alphabetic # Lo CYPRIOT SYLLABLE ZA
+1083F..10855 ; Alphabetic # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10860..10876 ; Alphabetic # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10880..1089E ; Alphabetic # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108E0..108F2 ; Alphabetic # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; Alphabetic # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+10900..10915 ; Alphabetic # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939 ; Alphabetic # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+10980..109B7 ; Alphabetic # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF ; Alphabetic # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+10A00 ; Alphabetic # Lo KHAROSHTHI LETTER A
+10A01..10A03 ; Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13 ; Alphabetic # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; Alphabetic # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; Alphabetic # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A60..10A7C ; Alphabetic # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A80..10A9C ; Alphabetic # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10AC0..10AC7 ; Alphabetic # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC9..10AE4 ; Alphabetic # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10B00..10B35 ; Alphabetic # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55 ; Alphabetic # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72 ; Alphabetic # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80..10B91 ; Alphabetic # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10C00..10C48 ; Alphabetic # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2 ; Alphabetic # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Alphabetic # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10D00..10D23 ; Alphabetic # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10E80..10EA9 ; Alphabetic # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1 ; Alphabetic # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F70..10F81 ; Alphabetic # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10FB0..10FC4 ; Alphabetic # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FE0..10FF6 ; Alphabetic # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000 ; Alphabetic # Mc BRAHMI SIGN CANDRABINDU
+11001 ; Alphabetic # Mn BRAHMI SIGN ANUSVARA
+11002 ; Alphabetic # Mc BRAHMI SIGN VISARGA
+11003..11037 ; Alphabetic # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11038..11045 ; Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU
+11071..11072 ; Alphabetic # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11073..11074 ; Alphabetic # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+11075 ; Alphabetic # Lo BRAHMI LETTER OLD TAMIL LLA
+11082 ; Alphabetic # Mc KAITHI SIGN VISARGA
+11083..110AF ; Alphabetic # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2 ; Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6 ; Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8 ; Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110C2 ; Alphabetic # Mn KAITHI VOWEL SIGN VOCALIC R
+110D0..110E8 ; Alphabetic # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+11100..11102 ; Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126 ; Alphabetic # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B ; Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; Alphabetic # Mc CHAKMA VOWEL SIGN E
+1112D..11132 ; Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK
+11144 ; Alphabetic # Lo CHAKMA LETTER LHAA
+11145..11146 ; Alphabetic # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; Alphabetic # Lo CHAKMA LETTER VAA
+11150..11172 ; Alphabetic # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11176 ; Alphabetic # Lo MAHAJANI LIGATURE SHRI
+11180..11181 ; Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; Alphabetic # Mc SHARADA SIGN VISARGA
+11183..111B2 ; Alphabetic # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5 ; Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF ; Alphabetic # Mc SHARADA VOWEL SIGN AU
+111C1..111C4 ; Alphabetic # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111CE ; Alphabetic # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; Alphabetic # Mn SHARADA SIGN INVERTED CANDRABINDU
+111DA ; Alphabetic # Lo SHARADA EKAM
+111DC ; Alphabetic # Lo SHARADA HEADSTROKE
+11200..11211 ; Alphabetic # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; Alphabetic # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E ; Alphabetic # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231 ; Alphabetic # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233 ; Alphabetic # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234 ; Alphabetic # Mn KHOJKI SIGN ANUSVARA
+11237 ; Alphabetic # Mn KHOJKI SIGN SHADDA
+1123E ; Alphabetic # Mn KHOJKI SIGN SUKUN
+11280..11286 ; Alphabetic # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; Alphabetic # Lo MULTANI LETTER GHA
+1128A..1128D ; Alphabetic # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; Alphabetic # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; Alphabetic # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112B0..112DE ; Alphabetic # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112DF ; Alphabetic # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2 ; Alphabetic # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112E8 ; Alphabetic # Mn [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU
+11300..11301 ; Alphabetic # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303 ; Alphabetic # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C ; Alphabetic # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; Alphabetic # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; Alphabetic # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; Alphabetic # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; Alphabetic # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; Alphabetic # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133D ; Alphabetic # Lo GRANTHA SIGN AVAGRAHA
+1133E..1133F ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340 ; Alphabetic # Mn GRANTHA VOWEL SIGN II
+11341..11344 ; Alphabetic # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134C ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+11350 ; Alphabetic # Lo GRANTHA OM
+11357 ; Alphabetic # Mc GRANTHA AU LENGTH MARK
+1135D..11361 ; Alphabetic # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363 ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11400..11434 ; Alphabetic # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437 ; Alphabetic # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; Alphabetic # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; Alphabetic # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11443..11444 ; Alphabetic # Mn [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA
+11445 ; Alphabetic # Mc NEWA SIGN VISARGA
+11447..1144A ; Alphabetic # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1145F..11461 ; Alphabetic # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+11480..114AF ; Alphabetic # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B0..114B2 ; Alphabetic # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8 ; Alphabetic # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9 ; Alphabetic # Mc TIRHUTA VOWEL SIGN E
+114BA ; Alphabetic # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE ; Alphabetic # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0 ; Alphabetic # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1 ; Alphabetic # Mc TIRHUTA SIGN VISARGA
+114C4..114C5 ; Alphabetic # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C7 ; Alphabetic # Lo TIRHUTA OM
+11580..115AE ; Alphabetic # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115AF..115B1 ; Alphabetic # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5 ; Alphabetic # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB ; Alphabetic # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD ; Alphabetic # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE ; Alphabetic # Mc SIDDHAM SIGN VISARGA
+115D8..115DB ; Alphabetic # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD ; Alphabetic # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11600..1162F ; Alphabetic # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632 ; Alphabetic # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A ; Alphabetic # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C ; Alphabetic # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D ; Alphabetic # Mn MODI SIGN ANUSVARA
+1163E ; Alphabetic # Mc MODI SIGN VISARGA
+11640 ; Alphabetic # Mn MODI SIGN ARDHACANDRA
+11644 ; Alphabetic # Lo MODI SIGN HUVA
+11680..116AA ; Alphabetic # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB ; Alphabetic # Mn TAKRI SIGN ANUSVARA
+116AC ; Alphabetic # Mc TAKRI SIGN VISARGA
+116AD ; Alphabetic # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B8 ; Alphabetic # Lo TAKRI LETTER ARCHAIC KHA
+11700..1171A ; Alphabetic # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+1171D..1171F ; Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; Alphabetic # Mc AHOM VOWEL SIGN E
+11727..1172A ; Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
+11740..11746 ; Alphabetic # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
+11800..1182B ; Alphabetic # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; Alphabetic # Mc DOGRA SIGN VISARGA
+118A0..118DF ; Alphabetic # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118FF..11906 ; Alphabetic # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; Alphabetic # Lo DIVES AKURU LETTER O
+1190C..11913 ; Alphabetic # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Alphabetic # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Alphabetic # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; Alphabetic # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Alphabetic # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; Alphabetic # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193F ; Alphabetic # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; Alphabetic # Mc DIVES AKURU MEDIAL YA
+11941 ; Alphabetic # Lo DIVES AKURU INITIAL RA
+11942 ; Alphabetic # Mc DIVES AKURU MEDIAL RA
+119A0..119A7 ; Alphabetic # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; Alphabetic # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3 ; Alphabetic # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7 ; Alphabetic # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; Alphabetic # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF ; Alphabetic # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E1 ; Alphabetic # Lo NANDINAGARI SIGN AVAGRAHA
+119E3 ; Alphabetic # Lo NANDINAGARI HEADSTROKE
+119E4 ; Alphabetic # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00 ; Alphabetic # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A0A ; Alphabetic # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32 ; Alphabetic # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A35..11A38 ; Alphabetic # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; Alphabetic # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A ; Alphabetic # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E ; Alphabetic # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A50 ; Alphabetic # Lo SOYOMBO LETTER A
+11A51..11A56 ; Alphabetic # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; Alphabetic # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; Alphabetic # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A89 ; Alphabetic # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96 ; Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; Alphabetic # Mc SOYOMBO SIGN VISARGA
+11A9D ; Alphabetic # Lo SOYOMBO MARK PLUTA
+11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; Alphabetic # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; Alphabetic # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F ; Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; Alphabetic # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Alphabetic # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; Alphabetic # Mc BHAIKSUKI SIGN VISARGA
+11C40 ; Alphabetic # Lo BHAIKSUKI SIGN AVAGRAHA
+11C72..11C8F ; Alphabetic # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7 ; Alphabetic # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; Alphabetic # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; Alphabetic # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; Alphabetic # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; Alphabetic # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; Alphabetic # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; Alphabetic # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D00..11D06 ; Alphabetic # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; Alphabetic # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; Alphabetic # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36 ; Alphabetic # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Alphabetic # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Alphabetic # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D41 ; Alphabetic # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA
+11D43 ; Alphabetic # Mn MASARAM GONDI SIGN CANDRA
+11D46 ; Alphabetic # Lo MASARAM GONDI REPHA
+11D47 ; Alphabetic # Mn MASARAM GONDI RA-KARA
+11D60..11D65 ; Alphabetic # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; Alphabetic # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; Alphabetic # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; Alphabetic # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; Alphabetic # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; Alphabetic # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; Alphabetic # Mc GUNJALA GONDI SIGN VISARGA
+11D98 ; Alphabetic # Lo GUNJALA GONDI OM
+11EE0..11EF2 ; Alphabetic # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4 ; Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11FB0 ; Alphabetic # Lo LISU LETTER YHA
+12000..12399 ; Alphabetic # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; Alphabetic # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12480..12543 ; Alphabetic # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0 ; Alphabetic # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+13000..1342E ; Alphabetic # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646 ; Alphabetic # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38 ; Alphabetic # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E ; Alphabetic # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A70..16ABE ; Alphabetic # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AD0..16AED ; Alphabetic # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16B00..16B2F ; Alphabetic # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B40..16B43 ; Alphabetic # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B63..16B77 ; Alphabetic # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; Alphabetic # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F ; Alphabetic # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16F00..16F4A ; Alphabetic # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F4F ; Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F50 ; Alphabetic # Lo MIAO LETTER NASALIZATION
+16F51..16F87 ; Alphabetic # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92 ; Alphabetic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; Alphabetic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; Alphabetic # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; Alphabetic # Lm OLD CHINESE ITERATION MARK
+16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; Alphabetic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3 ; Alphabetic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; Alphabetic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; Alphabetic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1B000..1B122 ; Alphabetic # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
+1B150..1B152 ; Alphabetic # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167 ; Alphabetic # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB ; Alphabetic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A ; Alphabetic # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; Alphabetic # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; Alphabetic # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; Alphabetic # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9E ; Alphabetic # Mn DUPLOYAN DOUBLE MARK
+1D400..1D454 ; Alphabetic # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Alphabetic # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Alphabetic # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Alphabetic # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Alphabetic # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Alphabetic # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Alphabetic # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Alphabetic # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Alphabetic # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Alphabetic # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Alphabetic # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Alphabetic # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Alphabetic # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Alphabetic # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Alphabetic # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Alphabetic # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Alphabetic # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Alphabetic # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Alphabetic # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Alphabetic # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; Alphabetic # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; Alphabetic # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; Alphabetic # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; Alphabetic # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; Alphabetic # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; Alphabetic # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; Alphabetic # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; Alphabetic # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; Alphabetic # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; Alphabetic # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1DF00..1DF09 ; Alphabetic # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A ; Alphabetic # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E ; Alphabetic # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E000..1E006 ; Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Alphabetic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Alphabetic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Alphabetic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E100..1E12C ; Alphabetic # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E137..1E13D ; Alphabetic # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E14E ; Alphabetic # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E290..1E2AD ; Alphabetic # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2C0..1E2EB ; Alphabetic # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E7E0..1E7E6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE ; Alphabetic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE ; Alphabetic # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E800..1E8C4 ; Alphabetic # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E900..1E943 ; Alphabetic # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E947 ; Alphabetic # Mn ADLAM HAMZA
+1E94B ; Alphabetic # Lm ADLAM NASALIZATION MARK
+1EE00..1EE03 ; Alphabetic # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Alphabetic # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Alphabetic # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Alphabetic # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Alphabetic # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Alphabetic # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Alphabetic # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Alphabetic # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Alphabetic # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Alphabetic # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Alphabetic # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Alphabetic # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Alphabetic # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Alphabetic # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Alphabetic # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Alphabetic # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Alphabetic # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Alphabetic # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Alphabetic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1F130..1F149 ; Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
+1F150..1F169 ; Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F170..1F189 ; Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+20000..2A6DF ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; Alphabetic # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 133396
+
+# ================================================
+
+# Derived Property: Lowercase
+# Generated from: Ll + Other_Lowercase
+
+0061..007A ; Lowercase # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; Lowercase # Lo FEMININE ORDINAL INDICATOR
+00B5 ; Lowercase # L& MICRO SIGN
+00BA ; Lowercase # Lo MASCULINE ORDINAL INDICATOR
+00DF..00F6 ; Lowercase # L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..00FF ; Lowercase # L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0101 ; Lowercase # L& LATIN SMALL LETTER A WITH MACRON
+0103 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE
+0105 ; Lowercase # L& LATIN SMALL LETTER A WITH OGONEK
+0107 ; Lowercase # L& LATIN SMALL LETTER C WITH ACUTE
+0109 ; Lowercase # L& LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B ; Lowercase # L& LATIN SMALL LETTER C WITH DOT ABOVE
+010D ; Lowercase # L& LATIN SMALL LETTER C WITH CARON
+010F ; Lowercase # L& LATIN SMALL LETTER D WITH CARON
+0111 ; Lowercase # L& LATIN SMALL LETTER D WITH STROKE
+0113 ; Lowercase # L& LATIN SMALL LETTER E WITH MACRON
+0115 ; Lowercase # L& LATIN SMALL LETTER E WITH BREVE
+0117 ; Lowercase # L& LATIN SMALL LETTER E WITH DOT ABOVE
+0119 ; Lowercase # L& LATIN SMALL LETTER E WITH OGONEK
+011B ; Lowercase # L& LATIN SMALL LETTER E WITH CARON
+011D ; Lowercase # L& LATIN SMALL LETTER G WITH CIRCUMFLEX
+011F ; Lowercase # L& LATIN SMALL LETTER G WITH BREVE
+0121 ; Lowercase # L& LATIN SMALL LETTER G WITH DOT ABOVE
+0123 ; Lowercase # L& LATIN SMALL LETTER G WITH CEDILLA
+0125 ; Lowercase # L& LATIN SMALL LETTER H WITH CIRCUMFLEX
+0127 ; Lowercase # L& LATIN SMALL LETTER H WITH STROKE
+0129 ; Lowercase # L& LATIN SMALL LETTER I WITH TILDE
+012B ; Lowercase # L& LATIN SMALL LETTER I WITH MACRON
+012D ; Lowercase # L& LATIN SMALL LETTER I WITH BREVE
+012F ; Lowercase # L& LATIN SMALL LETTER I WITH OGONEK
+0131 ; Lowercase # L& LATIN SMALL LETTER DOTLESS I
+0133 ; Lowercase # L& LATIN SMALL LIGATURE IJ
+0135 ; Lowercase # L& LATIN SMALL LETTER J WITH CIRCUMFLEX
+0137..0138 ; Lowercase # L& [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA
+013A ; Lowercase # L& LATIN SMALL LETTER L WITH ACUTE
+013C ; Lowercase # L& LATIN SMALL LETTER L WITH CEDILLA
+013E ; Lowercase # L& LATIN SMALL LETTER L WITH CARON
+0140 ; Lowercase # L& LATIN SMALL LETTER L WITH MIDDLE DOT
+0142 ; Lowercase # L& LATIN SMALL LETTER L WITH STROKE
+0144 ; Lowercase # L& LATIN SMALL LETTER N WITH ACUTE
+0146 ; Lowercase # L& LATIN SMALL LETTER N WITH CEDILLA
+0148..0149 ; Lowercase # L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014B ; Lowercase # L& LATIN SMALL LETTER ENG
+014D ; Lowercase # L& LATIN SMALL LETTER O WITH MACRON
+014F ; Lowercase # L& LATIN SMALL LETTER O WITH BREVE
+0151 ; Lowercase # L& LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0153 ; Lowercase # L& LATIN SMALL LIGATURE OE
+0155 ; Lowercase # L& LATIN SMALL LETTER R WITH ACUTE
+0157 ; Lowercase # L& LATIN SMALL LETTER R WITH CEDILLA
+0159 ; Lowercase # L& LATIN SMALL LETTER R WITH CARON
+015B ; Lowercase # L& LATIN SMALL LETTER S WITH ACUTE
+015D ; Lowercase # L& LATIN SMALL LETTER S WITH CIRCUMFLEX
+015F ; Lowercase # L& LATIN SMALL LETTER S WITH CEDILLA
+0161 ; Lowercase # L& LATIN SMALL LETTER S WITH CARON
+0163 ; Lowercase # L& LATIN SMALL LETTER T WITH CEDILLA
+0165 ; Lowercase # L& LATIN SMALL LETTER T WITH CARON
+0167 ; Lowercase # L& LATIN SMALL LETTER T WITH STROKE
+0169 ; Lowercase # L& LATIN SMALL LETTER U WITH TILDE
+016B ; Lowercase # L& LATIN SMALL LETTER U WITH MACRON
+016D ; Lowercase # L& LATIN SMALL LETTER U WITH BREVE
+016F ; Lowercase # L& LATIN SMALL LETTER U WITH RING ABOVE
+0171 ; Lowercase # L& LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0173 ; Lowercase # L& LATIN SMALL LETTER U WITH OGONEK
+0175 ; Lowercase # L& LATIN SMALL LETTER W WITH CIRCUMFLEX
+0177 ; Lowercase # L& LATIN SMALL LETTER Y WITH CIRCUMFLEX
+017A ; Lowercase # L& LATIN SMALL LETTER Z WITH ACUTE
+017C ; Lowercase # L& LATIN SMALL LETTER Z WITH DOT ABOVE
+017E..0180 ; Lowercase # L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+0183 ; Lowercase # L& LATIN SMALL LETTER B WITH TOPBAR
+0185 ; Lowercase # L& LATIN SMALL LETTER TONE SIX
+0188 ; Lowercase # L& LATIN SMALL LETTER C WITH HOOK
+018C..018D ; Lowercase # L& [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA
+0192 ; Lowercase # L& LATIN SMALL LETTER F WITH HOOK
+0195 ; Lowercase # L& LATIN SMALL LETTER HV
+0199..019B ; Lowercase # L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE
+019E ; Lowercase # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG
+01A1 ; Lowercase # L& LATIN SMALL LETTER O WITH HORN
+01A3 ; Lowercase # L& LATIN SMALL LETTER OI
+01A5 ; Lowercase # L& LATIN SMALL LETTER P WITH HOOK
+01A8 ; Lowercase # L& LATIN SMALL LETTER TONE TWO
+01AA..01AB ; Lowercase # L& [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK
+01AD ; Lowercase # L& LATIN SMALL LETTER T WITH HOOK
+01B0 ; Lowercase # L& LATIN SMALL LETTER U WITH HORN
+01B4 ; Lowercase # L& LATIN SMALL LETTER Y WITH HOOK
+01B6 ; Lowercase # L& LATIN SMALL LETTER Z WITH STROKE
+01B9..01BA ; Lowercase # L& [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL
+01BD..01BF ; Lowercase # L& [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN
+01C6 ; Lowercase # L& LATIN SMALL LETTER DZ WITH CARON
+01C9 ; Lowercase # L& LATIN SMALL LETTER LJ
+01CC ; Lowercase # L& LATIN SMALL LETTER NJ
+01CE ; Lowercase # L& LATIN SMALL LETTER A WITH CARON
+01D0 ; Lowercase # L& LATIN SMALL LETTER I WITH CARON
+01D2 ; Lowercase # L& LATIN SMALL LETTER O WITH CARON
+01D4 ; Lowercase # L& LATIN SMALL LETTER U WITH CARON
+01D6 ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D8 ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01DA ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DC..01DD ; Lowercase # L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+01DF ; Lowercase # L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E1 ; Lowercase # L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E3 ; Lowercase # L& LATIN SMALL LETTER AE WITH MACRON
+01E5 ; Lowercase # L& LATIN SMALL LETTER G WITH STROKE
+01E7 ; Lowercase # L& LATIN SMALL LETTER G WITH CARON
+01E9 ; Lowercase # L& LATIN SMALL LETTER K WITH CARON
+01EB ; Lowercase # L& LATIN SMALL LETTER O WITH OGONEK
+01ED ; Lowercase # L& LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EF..01F0 ; Lowercase # L& [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F3 ; Lowercase # L& LATIN SMALL LETTER DZ
+01F5 ; Lowercase # L& LATIN SMALL LETTER G WITH ACUTE
+01F9 ; Lowercase # L& LATIN SMALL LETTER N WITH GRAVE
+01FB ; Lowercase # L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FD ; Lowercase # L& LATIN SMALL LETTER AE WITH ACUTE
+01FF ; Lowercase # L& LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0201 ; Lowercase # L& LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0203 ; Lowercase # L& LATIN SMALL LETTER A WITH INVERTED BREVE
+0205 ; Lowercase # L& LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0207 ; Lowercase # L& LATIN SMALL LETTER E WITH INVERTED BREVE
+0209 ; Lowercase # L& LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020B ; Lowercase # L& LATIN SMALL LETTER I WITH INVERTED BREVE
+020D ; Lowercase # L& LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020F ; Lowercase # L& LATIN SMALL LETTER O WITH INVERTED BREVE
+0211 ; Lowercase # L& LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0213 ; Lowercase # L& LATIN SMALL LETTER R WITH INVERTED BREVE
+0215 ; Lowercase # L& LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0217 ; Lowercase # L& LATIN SMALL LETTER U WITH INVERTED BREVE
+0219 ; Lowercase # L& LATIN SMALL LETTER S WITH COMMA BELOW
+021B ; Lowercase # L& LATIN SMALL LETTER T WITH COMMA BELOW
+021D ; Lowercase # L& LATIN SMALL LETTER YOGH
+021F ; Lowercase # L& LATIN SMALL LETTER H WITH CARON
+0221 ; Lowercase # L& LATIN SMALL LETTER D WITH CURL
+0223 ; Lowercase # L& LATIN SMALL LETTER OU
+0225 ; Lowercase # L& LATIN SMALL LETTER Z WITH HOOK
+0227 ; Lowercase # L& LATIN SMALL LETTER A WITH DOT ABOVE
+0229 ; Lowercase # L& LATIN SMALL LETTER E WITH CEDILLA
+022B ; Lowercase # L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022D ; Lowercase # L& LATIN SMALL LETTER O WITH TILDE AND MACRON
+022F ; Lowercase # L& LATIN SMALL LETTER O WITH DOT ABOVE
+0231 ; Lowercase # L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0233..0239 ; Lowercase # L& [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH
+023C ; Lowercase # L& LATIN SMALL LETTER C WITH STROKE
+023F..0240 ; Lowercase # L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+0242 ; Lowercase # L& LATIN SMALL LETTER GLOTTAL STOP
+0247 ; Lowercase # L& LATIN SMALL LETTER E WITH STROKE
+0249 ; Lowercase # L& LATIN SMALL LETTER J WITH STROKE
+024B ; Lowercase # L& LATIN SMALL LETTER Q WITH HOOK TAIL
+024D ; Lowercase # L& LATIN SMALL LETTER R WITH STROKE
+024F..0293 ; Lowercase # L& [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL
+0295..02AF ; Lowercase # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8 ; Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1 ; Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4 ; Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345 ; Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI
+0371 ; Lowercase # L& GREEK SMALL LETTER HETA
+0373 ; Lowercase # L& GREEK SMALL LETTER ARCHAIC SAMPI
+0377 ; Lowercase # L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; Lowercase # Lm GREEK YPOGEGRAMMENI
+037B..037D ; Lowercase # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0390 ; Lowercase # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AC..03CE ; Lowercase # L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D1 ; Lowercase # L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+03D5..03D7 ; Lowercase # L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+03D9 ; Lowercase # L& GREEK SMALL LETTER ARCHAIC KOPPA
+03DB ; Lowercase # L& GREEK SMALL LETTER STIGMA
+03DD ; Lowercase # L& GREEK SMALL LETTER DIGAMMA
+03DF ; Lowercase # L& GREEK SMALL LETTER KOPPA
+03E1 ; Lowercase # L& GREEK SMALL LETTER SAMPI
+03E3 ; Lowercase # L& COPTIC SMALL LETTER SHEI
+03E5 ; Lowercase # L& COPTIC SMALL LETTER FEI
+03E7 ; Lowercase # L& COPTIC SMALL LETTER KHEI
+03E9 ; Lowercase # L& COPTIC SMALL LETTER HORI
+03EB ; Lowercase # L& COPTIC SMALL LETTER GANGIA
+03ED ; Lowercase # L& COPTIC SMALL LETTER SHIMA
+03EF..03F3 ; Lowercase # L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT
+03F5 ; Lowercase # L& GREEK LUNATE EPSILON SYMBOL
+03F8 ; Lowercase # L& GREEK SMALL LETTER SHO
+03FB..03FC ; Lowercase # L& [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL
+0430..045F ; Lowercase # L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+0461 ; Lowercase # L& CYRILLIC SMALL LETTER OMEGA
+0463 ; Lowercase # L& CYRILLIC SMALL LETTER YAT
+0465 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED E
+0467 ; Lowercase # L& CYRILLIC SMALL LETTER LITTLE YUS
+0469 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046B ; Lowercase # L& CYRILLIC SMALL LETTER BIG YUS
+046D ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046F ; Lowercase # L& CYRILLIC SMALL LETTER KSI
+0471 ; Lowercase # L& CYRILLIC SMALL LETTER PSI
+0473 ; Lowercase # L& CYRILLIC SMALL LETTER FITA
+0475 ; Lowercase # L& CYRILLIC SMALL LETTER IZHITSA
+0477 ; Lowercase # L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0479 ; Lowercase # L& CYRILLIC SMALL LETTER UK
+047B ; Lowercase # L& CYRILLIC SMALL LETTER ROUND OMEGA
+047D ; Lowercase # L& CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047F ; Lowercase # L& CYRILLIC SMALL LETTER OT
+0481 ; Lowercase # L& CYRILLIC SMALL LETTER KOPPA
+048B ; Lowercase # L& CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048D ; Lowercase # L& CYRILLIC SMALL LETTER SEMISOFT SIGN
+048F ; Lowercase # L& CYRILLIC SMALL LETTER ER WITH TICK
+0491 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH UPTURN
+0493 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH STROKE
+0495 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0497 ; Lowercase # L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0499 ; Lowercase # L& CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049B ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH DESCENDER
+049D ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049F ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH STROKE
+04A1 ; Lowercase # L& CYRILLIC SMALL LETTER BASHKIR KA
+04A3 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A5 ; Lowercase # L& CYRILLIC SMALL LIGATURE EN GHE
+04A7 ; Lowercase # L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A9 ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN HA
+04AB ; Lowercase # L& CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AD ; Lowercase # L& CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AF ; Lowercase # L& CYRILLIC SMALL LETTER STRAIGHT U
+04B1 ; Lowercase # L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B3 ; Lowercase # L& CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B5 ; Lowercase # L& CYRILLIC SMALL LIGATURE TE TSE
+04B7 ; Lowercase # L& CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B9 ; Lowercase # L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BB ; Lowercase # L& CYRILLIC SMALL LETTER SHHA
+04BD ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BF ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C2 ; Lowercase # L& CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C4 ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH HOOK
+04C6 ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH TAIL
+04C8 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH HOOK
+04CA ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH TAIL
+04CC ; Lowercase # L& CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CE..04CF ; Lowercase # L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+04D1 ; Lowercase # L& CYRILLIC SMALL LETTER A WITH BREVE
+04D3 ; Lowercase # L& CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D5 ; Lowercase # L& CYRILLIC SMALL LIGATURE A IE
+04D7 ; Lowercase # L& CYRILLIC SMALL LETTER IE WITH BREVE
+04D9 ; Lowercase # L& CYRILLIC SMALL LETTER SCHWA
+04DB ; Lowercase # L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DD ; Lowercase # L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DF ; Lowercase # L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E1 ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E3 ; Lowercase # L& CYRILLIC SMALL LETTER I WITH MACRON
+04E5 ; Lowercase # L& CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E7 ; Lowercase # L& CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E9 ; Lowercase # L& CYRILLIC SMALL LETTER BARRED O
+04EB ; Lowercase # L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04ED ; Lowercase # L& CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EF ; Lowercase # L& CYRILLIC SMALL LETTER U WITH MACRON
+04F1 ; Lowercase # L& CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F3 ; Lowercase # L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F5 ; Lowercase # L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F7 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F9 ; Lowercase # L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FB ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FD ; Lowercase # L& CYRILLIC SMALL LETTER HA WITH HOOK
+04FF ; Lowercase # L& CYRILLIC SMALL LETTER HA WITH STROKE
+0501 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI DE
+0503 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI DJE
+0505 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI ZJE
+0507 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI DZJE
+0509 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI LJE
+050B ; Lowercase # L& CYRILLIC SMALL LETTER KOMI NJE
+050D ; Lowercase # L& CYRILLIC SMALL LETTER KOMI SJE
+050F ; Lowercase # L& CYRILLIC SMALL LETTER KOMI TJE
+0511 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED ZE
+0513 ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH HOOK
+0515 ; Lowercase # L& CYRILLIC SMALL LETTER LHA
+0517 ; Lowercase # L& CYRILLIC SMALL LETTER RHA
+0519 ; Lowercase # L& CYRILLIC SMALL LETTER YAE
+051B ; Lowercase # L& CYRILLIC SMALL LETTER QA
+051D ; Lowercase # L& CYRILLIC SMALL LETTER WE
+051F ; Lowercase # L& CYRILLIC SMALL LETTER ALEUT KA
+0521 ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0523 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0525 ; Lowercase # L& CYRILLIC SMALL LETTER PE WITH DESCENDER
+0527 ; Lowercase # L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0529 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+052B ; Lowercase # L& CYRILLIC SMALL LETTER DZZHE
+052D ; Lowercase # L& CYRILLIC SMALL LETTER DCHE
+052F ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH DESCENDER
+0560..0588 ; Lowercase # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+10D0..10FA ; Lowercase # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FD..10FF ; Lowercase # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+13F8..13FD ; Lowercase # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Lowercase # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1D00..1D2B ; Lowercase # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; Lowercase # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; Lowercase # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; Lowercase # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; Lowercase # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E01 ; Lowercase # L& LATIN SMALL LETTER A WITH RING BELOW
+1E03 ; Lowercase # L& LATIN SMALL LETTER B WITH DOT ABOVE
+1E05 ; Lowercase # L& LATIN SMALL LETTER B WITH DOT BELOW
+1E07 ; Lowercase # L& LATIN SMALL LETTER B WITH LINE BELOW
+1E09 ; Lowercase # L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0B ; Lowercase # L& LATIN SMALL LETTER D WITH DOT ABOVE
+1E0D ; Lowercase # L& LATIN SMALL LETTER D WITH DOT BELOW
+1E0F ; Lowercase # L& LATIN SMALL LETTER D WITH LINE BELOW
+1E11 ; Lowercase # L& LATIN SMALL LETTER D WITH CEDILLA
+1E13 ; Lowercase # L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E15 ; Lowercase # L& LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E17 ; Lowercase # L& LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E19 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1B ; Lowercase # L& LATIN SMALL LETTER E WITH TILDE BELOW
+1E1D ; Lowercase # L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1F ; Lowercase # L& LATIN SMALL LETTER F WITH DOT ABOVE
+1E21 ; Lowercase # L& LATIN SMALL LETTER G WITH MACRON
+1E23 ; Lowercase # L& LATIN SMALL LETTER H WITH DOT ABOVE
+1E25 ; Lowercase # L& LATIN SMALL LETTER H WITH DOT BELOW
+1E27 ; Lowercase # L& LATIN SMALL LETTER H WITH DIAERESIS
+1E29 ; Lowercase # L& LATIN SMALL LETTER H WITH CEDILLA
+1E2B ; Lowercase # L& LATIN SMALL LETTER H WITH BREVE BELOW
+1E2D ; Lowercase # L& LATIN SMALL LETTER I WITH TILDE BELOW
+1E2F ; Lowercase # L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E31 ; Lowercase # L& LATIN SMALL LETTER K WITH ACUTE
+1E33 ; Lowercase # L& LATIN SMALL LETTER K WITH DOT BELOW
+1E35 ; Lowercase # L& LATIN SMALL LETTER K WITH LINE BELOW
+1E37 ; Lowercase # L& LATIN SMALL LETTER L WITH DOT BELOW
+1E39 ; Lowercase # L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3B ; Lowercase # L& LATIN SMALL LETTER L WITH LINE BELOW
+1E3D ; Lowercase # L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3F ; Lowercase # L& LATIN SMALL LETTER M WITH ACUTE
+1E41 ; Lowercase # L& LATIN SMALL LETTER M WITH DOT ABOVE
+1E43 ; Lowercase # L& LATIN SMALL LETTER M WITH DOT BELOW
+1E45 ; Lowercase # L& LATIN SMALL LETTER N WITH DOT ABOVE
+1E47 ; Lowercase # L& LATIN SMALL LETTER N WITH DOT BELOW
+1E49 ; Lowercase # L& LATIN SMALL LETTER N WITH LINE BELOW
+1E4B ; Lowercase # L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4D ; Lowercase # L& LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4F ; Lowercase # L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E51 ; Lowercase # L& LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E53 ; Lowercase # L& LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E55 ; Lowercase # L& LATIN SMALL LETTER P WITH ACUTE
+1E57 ; Lowercase # L& LATIN SMALL LETTER P WITH DOT ABOVE
+1E59 ; Lowercase # L& LATIN SMALL LETTER R WITH DOT ABOVE
+1E5B ; Lowercase # L& LATIN SMALL LETTER R WITH DOT BELOW
+1E5D ; Lowercase # L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5F ; Lowercase # L& LATIN SMALL LETTER R WITH LINE BELOW
+1E61 ; Lowercase # L& LATIN SMALL LETTER S WITH DOT ABOVE
+1E63 ; Lowercase # L& LATIN SMALL LETTER S WITH DOT BELOW
+1E65 ; Lowercase # L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E67 ; Lowercase # L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E69 ; Lowercase # L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6B ; Lowercase # L& LATIN SMALL LETTER T WITH DOT ABOVE
+1E6D ; Lowercase # L& LATIN SMALL LETTER T WITH DOT BELOW
+1E6F ; Lowercase # L& LATIN SMALL LETTER T WITH LINE BELOW
+1E71 ; Lowercase # L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E73 ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E75 ; Lowercase # L& LATIN SMALL LETTER U WITH TILDE BELOW
+1E77 ; Lowercase # L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E79 ; Lowercase # L& LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7B ; Lowercase # L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7D ; Lowercase # L& LATIN SMALL LETTER V WITH TILDE
+1E7F ; Lowercase # L& LATIN SMALL LETTER V WITH DOT BELOW
+1E81 ; Lowercase # L& LATIN SMALL LETTER W WITH GRAVE
+1E83 ; Lowercase # L& LATIN SMALL LETTER W WITH ACUTE
+1E85 ; Lowercase # L& LATIN SMALL LETTER W WITH DIAERESIS
+1E87 ; Lowercase # L& LATIN SMALL LETTER W WITH DOT ABOVE
+1E89 ; Lowercase # L& LATIN SMALL LETTER W WITH DOT BELOW
+1E8B ; Lowercase # L& LATIN SMALL LETTER X WITH DOT ABOVE
+1E8D ; Lowercase # L& LATIN SMALL LETTER X WITH DIAERESIS
+1E8F ; Lowercase # L& LATIN SMALL LETTER Y WITH DOT ABOVE
+1E91 ; Lowercase # L& LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E93 ; Lowercase # L& LATIN SMALL LETTER Z WITH DOT BELOW
+1E95..1E9D ; Lowercase # L& [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE
+1E9F ; Lowercase # L& LATIN SMALL LETTER DELTA
+1EA1 ; Lowercase # L& LATIN SMALL LETTER A WITH DOT BELOW
+1EA3 ; Lowercase # L& LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA5 ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7 ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA9 ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAB ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAD ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAF ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB1 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB3 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB5 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB7 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB9 ; Lowercase # L& LATIN SMALL LETTER E WITH DOT BELOW
+1EBB ; Lowercase # L& LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBD ; Lowercase # L& LATIN SMALL LETTER E WITH TILDE
+1EBF ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC3 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC5 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC7 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC9 ; Lowercase # L& LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECB ; Lowercase # L& LATIN SMALL LETTER I WITH DOT BELOW
+1ECD ; Lowercase # L& LATIN SMALL LETTER O WITH DOT BELOW
+1ECF ; Lowercase # L& LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED1 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED5 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED7 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED9 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDB ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDD ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDF ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE1 ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE3 ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE5 ; Lowercase # L& LATIN SMALL LETTER U WITH DOT BELOW
+1EE7 ; Lowercase # L& LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE9 ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEB ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EED ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEF ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF1 ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF3 ; Lowercase # L& LATIN SMALL LETTER Y WITH GRAVE
+1EF5 ; Lowercase # L& LATIN SMALL LETTER Y WITH DOT BELOW
+1EF7 ; Lowercase # L& LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF9 ; Lowercase # L& LATIN SMALL LETTER Y WITH TILDE
+1EFB ; Lowercase # L& LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFD ; Lowercase # L& LATIN SMALL LETTER MIDDLE-WELSH V
+1EFF..1F07 ; Lowercase # L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10..1F15 ; Lowercase # L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F27 ; Lowercase # L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30..1F37 ; Lowercase # L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40..1F45 ; Lowercase # L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Lowercase # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60..1F67 ; Lowercase # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70..1F7D ; Lowercase # L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1F87 ; Lowercase # L& [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F90..1F97 ; Lowercase # L& [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA0..1FA7 ; Lowercase # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FB0..1FB4 ; Lowercase # L& [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FB7 ; Lowercase # L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FBE ; Lowercase # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; Lowercase # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC7 ; Lowercase # L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FD0..1FD3 ; Lowercase # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FD7 ; Lowercase # L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE0..1FE7 ; Lowercase # L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF2..1FF4 ; Lowercase # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF7 ; Lowercase # L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+2071 ; Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Lowercase # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+210A ; Lowercase # L& SCRIPT SMALL G
+210E..210F ; Lowercase # L& [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI
+2113 ; Lowercase # L& SCRIPT SMALL L
+212F ; Lowercase # L& SCRIPT SMALL E
+2134 ; Lowercase # L& SCRIPT SMALL O
+2139 ; Lowercase # L& INFORMATION SOURCE
+213C..213D ; Lowercase # L& [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA
+2146..2149 ; Lowercase # L& [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; Lowercase # L& TURNED SMALL F
+2170..217F ; Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2184 ; Lowercase # L& LATIN SMALL LETTER REVERSED C
+24D0..24E9 ; Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C30..2C5F ; Lowercase # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
+2C61 ; Lowercase # L& LATIN SMALL LETTER L WITH DOUBLE BAR
+2C65..2C66 ; Lowercase # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C68 ; Lowercase # L& LATIN SMALL LETTER H WITH DESCENDER
+2C6A ; Lowercase # L& LATIN SMALL LETTER K WITH DESCENDER
+2C6C ; Lowercase # L& LATIN SMALL LETTER Z WITH DESCENDER
+2C71 ; Lowercase # L& LATIN SMALL LETTER V WITH RIGHT HOOK
+2C73..2C74 ; Lowercase # L& [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL
+2C76..2C7B ; Lowercase # L& [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C81 ; Lowercase # L& COPTIC SMALL LETTER ALFA
+2C83 ; Lowercase # L& COPTIC SMALL LETTER VIDA
+2C85 ; Lowercase # L& COPTIC SMALL LETTER GAMMA
+2C87 ; Lowercase # L& COPTIC SMALL LETTER DALDA
+2C89 ; Lowercase # L& COPTIC SMALL LETTER EIE
+2C8B ; Lowercase # L& COPTIC SMALL LETTER SOU
+2C8D ; Lowercase # L& COPTIC SMALL LETTER ZATA
+2C8F ; Lowercase # L& COPTIC SMALL LETTER HATE
+2C91 ; Lowercase # L& COPTIC SMALL LETTER THETHE
+2C93 ; Lowercase # L& COPTIC SMALL LETTER IAUDA
+2C95 ; Lowercase # L& COPTIC SMALL LETTER KAPA
+2C97 ; Lowercase # L& COPTIC SMALL LETTER LAULA
+2C99 ; Lowercase # L& COPTIC SMALL LETTER MI
+2C9B ; Lowercase # L& COPTIC SMALL LETTER NI
+2C9D ; Lowercase # L& COPTIC SMALL LETTER KSI
+2C9F ; Lowercase # L& COPTIC SMALL LETTER O
+2CA1 ; Lowercase # L& COPTIC SMALL LETTER PI
+2CA3 ; Lowercase # L& COPTIC SMALL LETTER RO
+2CA5 ; Lowercase # L& COPTIC SMALL LETTER SIMA
+2CA7 ; Lowercase # L& COPTIC SMALL LETTER TAU
+2CA9 ; Lowercase # L& COPTIC SMALL LETTER UA
+2CAB ; Lowercase # L& COPTIC SMALL LETTER FI
+2CAD ; Lowercase # L& COPTIC SMALL LETTER KHI
+2CAF ; Lowercase # L& COPTIC SMALL LETTER PSI
+2CB1 ; Lowercase # L& COPTIC SMALL LETTER OOU
+2CB3 ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P ALEF
+2CB5 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC AIN
+2CB7 ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB9 ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P KAPA
+2CBB ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P NI
+2CBD ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBF ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC OOU
+2CC1 ; Lowercase # L& COPTIC SMALL LETTER SAMPI
+2CC3 ; Lowercase # L& COPTIC SMALL LETTER CROSSED SHEI
+2CC5 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC7 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC ESH
+2CC9 ; Lowercase # L& COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCB ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P HORI
+2CCD ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HORI
+2CCF ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HA
+2CD1 ; Lowercase # L& COPTIC SMALL LETTER L-SHAPED HA
+2CD3 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HEI
+2CD5 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HAT
+2CD7 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD9 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC DJA
+2CDB ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDD ; Lowercase # L& COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDF ; Lowercase # L& COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE1 ; Lowercase # L& COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE3..2CE4 ; Lowercase # L& [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI
+2CEC ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEE ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF3 ; Lowercase # L& COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; Lowercase # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Lowercase # L& GEORGIAN SMALL LETTER YN
+2D2D ; Lowercase # L& GEORGIAN SMALL LETTER AEN
+A641 ; Lowercase # L& CYRILLIC SMALL LETTER ZEMLYA
+A643 ; Lowercase # L& CYRILLIC SMALL LETTER DZELO
+A645 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED DZE
+A647 ; Lowercase # L& CYRILLIC SMALL LETTER IOTA
+A649 ; Lowercase # L& CYRILLIC SMALL LETTER DJERV
+A64B ; Lowercase # L& CYRILLIC SMALL LETTER MONOGRAPH UK
+A64D ; Lowercase # L& CYRILLIC SMALL LETTER BROAD OMEGA
+A64F ; Lowercase # L& CYRILLIC SMALL LETTER NEUTRAL YER
+A651 ; Lowercase # L& CYRILLIC SMALL LETTER YERU WITH BACK YER
+A653 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED YAT
+A655 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED YU
+A657 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED A
+A659 ; Lowercase # L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65B ; Lowercase # L& CYRILLIC SMALL LETTER BLENDED YUS
+A65D ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65F ; Lowercase # L& CYRILLIC SMALL LETTER YN
+A661 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED TSE
+A663 ; Lowercase # L& CYRILLIC SMALL LETTER SOFT DE
+A665 ; Lowercase # L& CYRILLIC SMALL LETTER SOFT EL
+A667 ; Lowercase # L& CYRILLIC SMALL LETTER SOFT EM
+A669 ; Lowercase # L& CYRILLIC SMALL LETTER MONOCULAR O
+A66B ; Lowercase # L& CYRILLIC SMALL LETTER BINOCULAR O
+A66D ; Lowercase # L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A681 ; Lowercase # L& CYRILLIC SMALL LETTER DWE
+A683 ; Lowercase # L& CYRILLIC SMALL LETTER DZWE
+A685 ; Lowercase # L& CYRILLIC SMALL LETTER ZHWE
+A687 ; Lowercase # L& CYRILLIC SMALL LETTER CCHE
+A689 ; Lowercase # L& CYRILLIC SMALL LETTER DZZE
+A68B ; Lowercase # L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68D ; Lowercase # L& CYRILLIC SMALL LETTER TWE
+A68F ; Lowercase # L& CYRILLIC SMALL LETTER TSWE
+A691 ; Lowercase # L& CYRILLIC SMALL LETTER TSSE
+A693 ; Lowercase # L& CYRILLIC SMALL LETTER TCHE
+A695 ; Lowercase # L& CYRILLIC SMALL LETTER HWE
+A697 ; Lowercase # L& CYRILLIC SMALL LETTER SHWE
+A699 ; Lowercase # L& CYRILLIC SMALL LETTER DOUBLE O
+A69B ; Lowercase # L& CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A723 ; Lowercase # L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A725 ; Lowercase # L& LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A727 ; Lowercase # L& LATIN SMALL LETTER HENG
+A729 ; Lowercase # L& LATIN SMALL LETTER TZ
+A72B ; Lowercase # L& LATIN SMALL LETTER TRESILLO
+A72D ; Lowercase # L& LATIN SMALL LETTER CUATRILLO
+A72F..A731 ; Lowercase # L& [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S
+A733 ; Lowercase # L& LATIN SMALL LETTER AA
+A735 ; Lowercase # L& LATIN SMALL LETTER AO
+A737 ; Lowercase # L& LATIN SMALL LETTER AU
+A739 ; Lowercase # L& LATIN SMALL LETTER AV
+A73B ; Lowercase # L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73D ; Lowercase # L& LATIN SMALL LETTER AY
+A73F ; Lowercase # L& LATIN SMALL LETTER REVERSED C WITH DOT
+A741 ; Lowercase # L& LATIN SMALL LETTER K WITH STROKE
+A743 ; Lowercase # L& LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A745 ; Lowercase # L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A747 ; Lowercase # L& LATIN SMALL LETTER BROKEN L
+A749 ; Lowercase # L& LATIN SMALL LETTER L WITH HIGH STROKE
+A74B ; Lowercase # L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74D ; Lowercase # L& LATIN SMALL LETTER O WITH LOOP
+A74F ; Lowercase # L& LATIN SMALL LETTER OO
+A751 ; Lowercase # L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A753 ; Lowercase # L& LATIN SMALL LETTER P WITH FLOURISH
+A755 ; Lowercase # L& LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A757 ; Lowercase # L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A759 ; Lowercase # L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75B ; Lowercase # L& LATIN SMALL LETTER R ROTUNDA
+A75D ; Lowercase # L& LATIN SMALL LETTER RUM ROTUNDA
+A75F ; Lowercase # L& LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A761 ; Lowercase # L& LATIN SMALL LETTER VY
+A763 ; Lowercase # L& LATIN SMALL LETTER VISIGOTHIC Z
+A765 ; Lowercase # L& LATIN SMALL LETTER THORN WITH STROKE
+A767 ; Lowercase # L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A769 ; Lowercase # L& LATIN SMALL LETTER VEND
+A76B ; Lowercase # L& LATIN SMALL LETTER ET
+A76D ; Lowercase # L& LATIN SMALL LETTER IS
+A76F ; Lowercase # L& LATIN SMALL LETTER CON
+A770 ; Lowercase # Lm MODIFIER LETTER US
+A771..A778 ; Lowercase # L& [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM
+A77A ; Lowercase # L& LATIN SMALL LETTER INSULAR D
+A77C ; Lowercase # L& LATIN SMALL LETTER INSULAR F
+A77F ; Lowercase # L& LATIN SMALL LETTER TURNED INSULAR G
+A781 ; Lowercase # L& LATIN SMALL LETTER TURNED L
+A783 ; Lowercase # L& LATIN SMALL LETTER INSULAR R
+A785 ; Lowercase # L& LATIN SMALL LETTER INSULAR S
+A787 ; Lowercase # L& LATIN SMALL LETTER INSULAR T
+A78C ; Lowercase # L& LATIN SMALL LETTER SALTILLO
+A78E ; Lowercase # L& LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A791 ; Lowercase # L& LATIN SMALL LETTER N WITH DESCENDER
+A793..A795 ; Lowercase # L& [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK
+A797 ; Lowercase # L& LATIN SMALL LETTER B WITH FLOURISH
+A799 ; Lowercase # L& LATIN SMALL LETTER F WITH STROKE
+A79B ; Lowercase # L& LATIN SMALL LETTER VOLAPUK AE
+A79D ; Lowercase # L& LATIN SMALL LETTER VOLAPUK OE
+A79F ; Lowercase # L& LATIN SMALL LETTER VOLAPUK UE
+A7A1 ; Lowercase # L& LATIN SMALL LETTER G WITH OBLIQUE STROKE
+A7A3 ; Lowercase # L& LATIN SMALL LETTER K WITH OBLIQUE STROKE
+A7A5 ; Lowercase # L& LATIN SMALL LETTER N WITH OBLIQUE STROKE
+A7A7 ; Lowercase # L& LATIN SMALL LETTER R WITH OBLIQUE STROKE
+A7A9 ; Lowercase # L& LATIN SMALL LETTER S WITH OBLIQUE STROKE
+A7AF ; Lowercase # L& LATIN LETTER SMALL CAPITAL Q
+A7B5 ; Lowercase # L& LATIN SMALL LETTER BETA
+A7B7 ; Lowercase # L& LATIN SMALL LETTER OMEGA
+A7B9 ; Lowercase # L& LATIN SMALL LETTER U WITH STROKE
+A7BB ; Lowercase # L& LATIN SMALL LETTER GLOTTAL A
+A7BD ; Lowercase # L& LATIN SMALL LETTER GLOTTAL I
+A7BF ; Lowercase # L& LATIN SMALL LETTER GLOTTAL U
+A7C1 ; Lowercase # L& LATIN SMALL LETTER OLD POLISH O
+A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D1 ; Lowercase # L& LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; Lowercase # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5 ; Lowercase # L& LATIN SMALL LETTER DOUBLE WYNN
+A7D7 ; Lowercase # L& LATIN SMALL LETTER MIDDLE SCOTS S
+A7D9 ; Lowercase # L& LATIN SMALL LETTER SIGMOID S
+A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H
+A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; Lowercase # L& LATIN LETTER SMALL CAPITAL TURNED M
+AB30..AB5A ; Lowercase # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; Lowercase # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB70..ABBF ; Lowercase # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+FB00..FB06 ; Lowercase # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Lowercase # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10428..1044F ; Lowercase # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+104D8..104FB ; Lowercase # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10597..105A1 ; Lowercase # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Lowercase # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Lowercase # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Lowercase # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10780 ; Lowercase # Lm MODIFIER LETTER SMALL CAPITAL AA
+10783..10785 ; Lowercase # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Lowercase # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10CC0..10CF2 ; Lowercase # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+118C0..118DF ; Lowercase # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+16E60..16E7F ; Lowercase # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+1D41A..1D433 ; Lowercase # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z
+1D44E..1D454 ; Lowercase # L& [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D467 ; Lowercase # L& [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z
+1D482..1D49B ; Lowercase # L& [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z
+1D4B6..1D4B9 ; Lowercase # L& [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Lowercase # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Lowercase # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D4CF ; Lowercase # L& [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z
+1D4EA..1D503 ; Lowercase # L& [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z
+1D51E..1D537 ; Lowercase # L& [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z
+1D552..1D56B ; Lowercase # L& [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D586..1D59F ; Lowercase # L& [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5BA..1D5D3 ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z
+1D5EE..1D607 ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D622..1D63B ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D656..1D66F ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D68A..1D6A5 ; Lowercase # L& [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6C2..1D6DA ; Lowercase # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6E1 ; Lowercase # L& [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL
+1D6FC..1D714 ; Lowercase # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D71B ; Lowercase # L& [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL
+1D736..1D74E ; Lowercase # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D755 ; Lowercase # L& [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D770..1D788 ; Lowercase # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D78F ; Lowercase # L& [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D7AA..1D7C2 ; Lowercase # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7C9 ; Lowercase # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CB ; Lowercase # L& MATHEMATICAL BOLD SMALL DIGAMMA
+1DF00..1DF09 ; Lowercase # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0B..1DF1E ; Lowercase # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
+
+# Total code points: 2471
+
+# ================================================
+
+# Derived Property: Uppercase
+# Generated from: Lu + Other_Uppercase
+
+0041..005A ; Uppercase # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00C0..00D6 ; Uppercase # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DE ; Uppercase # L& [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN
+0100 ; Uppercase # L& LATIN CAPITAL LETTER A WITH MACRON
+0102 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE
+0104 ; Uppercase # L& LATIN CAPITAL LETTER A WITH OGONEK
+0106 ; Uppercase # L& LATIN CAPITAL LETTER C WITH ACUTE
+0108 ; Uppercase # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A ; Uppercase # L& LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C ; Uppercase # L& LATIN CAPITAL LETTER C WITH CARON
+010E ; Uppercase # L& LATIN CAPITAL LETTER D WITH CARON
+0110 ; Uppercase # L& LATIN CAPITAL LETTER D WITH STROKE
+0112 ; Uppercase # L& LATIN CAPITAL LETTER E WITH MACRON
+0114 ; Uppercase # L& LATIN CAPITAL LETTER E WITH BREVE
+0116 ; Uppercase # L& LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118 ; Uppercase # L& LATIN CAPITAL LETTER E WITH OGONEK
+011A ; Uppercase # L& LATIN CAPITAL LETTER E WITH CARON
+011C ; Uppercase # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E ; Uppercase # L& LATIN CAPITAL LETTER G WITH BREVE
+0120 ; Uppercase # L& LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122 ; Uppercase # L& LATIN CAPITAL LETTER G WITH CEDILLA
+0124 ; Uppercase # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126 ; Uppercase # L& LATIN CAPITAL LETTER H WITH STROKE
+0128 ; Uppercase # L& LATIN CAPITAL LETTER I WITH TILDE
+012A ; Uppercase # L& LATIN CAPITAL LETTER I WITH MACRON
+012C ; Uppercase # L& LATIN CAPITAL LETTER I WITH BREVE
+012E ; Uppercase # L& LATIN CAPITAL LETTER I WITH OGONEK
+0130 ; Uppercase # L& LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132 ; Uppercase # L& LATIN CAPITAL LIGATURE IJ
+0134 ; Uppercase # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136 ; Uppercase # L& LATIN CAPITAL LETTER K WITH CEDILLA
+0139 ; Uppercase # L& LATIN CAPITAL LETTER L WITH ACUTE
+013B ; Uppercase # L& LATIN CAPITAL LETTER L WITH CEDILLA
+013D ; Uppercase # L& LATIN CAPITAL LETTER L WITH CARON
+013F ; Uppercase # L& LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141 ; Uppercase # L& LATIN CAPITAL LETTER L WITH STROKE
+0143 ; Uppercase # L& LATIN CAPITAL LETTER N WITH ACUTE
+0145 ; Uppercase # L& LATIN CAPITAL LETTER N WITH CEDILLA
+0147 ; Uppercase # L& LATIN CAPITAL LETTER N WITH CARON
+014A ; Uppercase # L& LATIN CAPITAL LETTER ENG
+014C ; Uppercase # L& LATIN CAPITAL LETTER O WITH MACRON
+014E ; Uppercase # L& LATIN CAPITAL LETTER O WITH BREVE
+0150 ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152 ; Uppercase # L& LATIN CAPITAL LIGATURE OE
+0154 ; Uppercase # L& LATIN CAPITAL LETTER R WITH ACUTE
+0156 ; Uppercase # L& LATIN CAPITAL LETTER R WITH CEDILLA
+0158 ; Uppercase # L& LATIN CAPITAL LETTER R WITH CARON
+015A ; Uppercase # L& LATIN CAPITAL LETTER S WITH ACUTE
+015C ; Uppercase # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E ; Uppercase # L& LATIN CAPITAL LETTER S WITH CEDILLA
+0160 ; Uppercase # L& LATIN CAPITAL LETTER S WITH CARON
+0162 ; Uppercase # L& LATIN CAPITAL LETTER T WITH CEDILLA
+0164 ; Uppercase # L& LATIN CAPITAL LETTER T WITH CARON
+0166 ; Uppercase # L& LATIN CAPITAL LETTER T WITH STROKE
+0168 ; Uppercase # L& LATIN CAPITAL LETTER U WITH TILDE
+016A ; Uppercase # L& LATIN CAPITAL LETTER U WITH MACRON
+016C ; Uppercase # L& LATIN CAPITAL LETTER U WITH BREVE
+016E ; Uppercase # L& LATIN CAPITAL LETTER U WITH RING ABOVE
+0170 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172 ; Uppercase # L& LATIN CAPITAL LETTER U WITH OGONEK
+0174 ; Uppercase # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179 ; Uppercase # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B ; Uppercase # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D ; Uppercase # L& LATIN CAPITAL LETTER Z WITH CARON
+0181..0182 ; Uppercase # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184 ; Uppercase # L& LATIN CAPITAL LETTER TONE SIX
+0186..0187 ; Uppercase # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B ; Uppercase # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191 ; Uppercase # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194 ; Uppercase # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198 ; Uppercase # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D ; Uppercase # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0 ; Uppercase # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2 ; Uppercase # L& LATIN CAPITAL LETTER OI
+01A4 ; Uppercase # L& LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7 ; Uppercase # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9 ; Uppercase # L& LATIN CAPITAL LETTER ESH
+01AC ; Uppercase # L& LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF ; Uppercase # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3 ; Uppercase # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8 ; Uppercase # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC ; Uppercase # L& LATIN CAPITAL LETTER TONE FIVE
+01C4 ; Uppercase # L& LATIN CAPITAL LETTER DZ WITH CARON
+01C7 ; Uppercase # L& LATIN CAPITAL LETTER LJ
+01CA ; Uppercase # L& LATIN CAPITAL LETTER NJ
+01CD ; Uppercase # L& LATIN CAPITAL LETTER A WITH CARON
+01CF ; Uppercase # L& LATIN CAPITAL LETTER I WITH CARON
+01D1 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CARON
+01D3 ; Uppercase # L& LATIN CAPITAL LETTER U WITH CARON
+01D5 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE ; Uppercase # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2 ; Uppercase # L& LATIN CAPITAL LETTER AE WITH MACRON
+01E4 ; Uppercase # L& LATIN CAPITAL LETTER G WITH STROKE
+01E6 ; Uppercase # L& LATIN CAPITAL LETTER G WITH CARON
+01E8 ; Uppercase # L& LATIN CAPITAL LETTER K WITH CARON
+01EA ; Uppercase # L& LATIN CAPITAL LETTER O WITH OGONEK
+01EC ; Uppercase # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE ; Uppercase # L& LATIN CAPITAL LETTER EZH WITH CARON
+01F1 ; Uppercase # L& LATIN CAPITAL LETTER DZ
+01F4 ; Uppercase # L& LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8 ; Uppercase # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA ; Uppercase # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC ; Uppercase # L& LATIN CAPITAL LETTER AE WITH ACUTE
+01FE ; Uppercase # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202 ; Uppercase # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204 ; Uppercase # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206 ; Uppercase # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208 ; Uppercase # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A ; Uppercase # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E ; Uppercase # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210 ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212 ; Uppercase # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216 ; Uppercase # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218 ; Uppercase # L& LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A ; Uppercase # L& LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C ; Uppercase # L& LATIN CAPITAL LETTER YOGH
+021E ; Uppercase # L& LATIN CAPITAL LETTER H WITH CARON
+0220 ; Uppercase # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222 ; Uppercase # L& LATIN CAPITAL LETTER OU
+0224 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH HOOK
+0226 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CEDILLA
+022A ; Uppercase # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C ; Uppercase # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230 ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B ; Uppercase # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E ; Uppercase # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241 ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246 ; Uppercase # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248 ; Uppercase # L& LATIN CAPITAL LETTER J WITH STROKE
+024A ; Uppercase # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C ; Uppercase # L& LATIN CAPITAL LETTER R WITH STROKE
+024E ; Uppercase # L& LATIN CAPITAL LETTER Y WITH STROKE
+0370 ; Uppercase # L& GREEK CAPITAL LETTER HETA
+0372 ; Uppercase # L& GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376 ; Uppercase # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037F ; Uppercase # L& GREEK CAPITAL LETTER YOT
+0386 ; Uppercase # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Uppercase # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Uppercase # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F ; Uppercase # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1 ; Uppercase # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB ; Uppercase # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03CF ; Uppercase # L& GREEK CAPITAL KAI SYMBOL
+03D2..03D4 ; Uppercase # L& [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D8 ; Uppercase # L& GREEK LETTER ARCHAIC KOPPA
+03DA ; Uppercase # L& GREEK LETTER STIGMA
+03DC ; Uppercase # L& GREEK LETTER DIGAMMA
+03DE ; Uppercase # L& GREEK LETTER KOPPA
+03E0 ; Uppercase # L& GREEK LETTER SAMPI
+03E2 ; Uppercase # L& COPTIC CAPITAL LETTER SHEI
+03E4 ; Uppercase # L& COPTIC CAPITAL LETTER FEI
+03E6 ; Uppercase # L& COPTIC CAPITAL LETTER KHEI
+03E8 ; Uppercase # L& COPTIC CAPITAL LETTER HORI
+03EA ; Uppercase # L& COPTIC CAPITAL LETTER GANGIA
+03EC ; Uppercase # L& COPTIC CAPITAL LETTER SHIMA
+03EE ; Uppercase # L& COPTIC CAPITAL LETTER DEI
+03F4 ; Uppercase # L& GREEK CAPITAL THETA SYMBOL
+03F7 ; Uppercase # L& GREEK CAPITAL LETTER SHO
+03F9..03FA ; Uppercase # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F ; Uppercase # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460 ; Uppercase # L& CYRILLIC CAPITAL LETTER OMEGA
+0462 ; Uppercase # L& CYRILLIC CAPITAL LETTER YAT
+0464 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED E
+0466 ; Uppercase # L& CYRILLIC CAPITAL LETTER LITTLE YUS
+0468 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A ; Uppercase # L& CYRILLIC CAPITAL LETTER BIG YUS
+046C ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E ; Uppercase # L& CYRILLIC CAPITAL LETTER KSI
+0470 ; Uppercase # L& CYRILLIC CAPITAL LETTER PSI
+0472 ; Uppercase # L& CYRILLIC CAPITAL LETTER FITA
+0474 ; Uppercase # L& CYRILLIC CAPITAL LETTER IZHITSA
+0476 ; Uppercase # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 ; Uppercase # L& CYRILLIC CAPITAL LETTER UK
+047A ; Uppercase # L& CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C ; Uppercase # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E ; Uppercase # L& CYRILLIC CAPITAL LETTER OT
+0480 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOPPA
+048A ; Uppercase # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C ; Uppercase # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E ; Uppercase # L& CYRILLIC CAPITAL LETTER ER WITH TICK
+0490 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0 ; Uppercase # L& CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4 ; Uppercase # L& CYRILLIC CAPITAL LIGATURE EN GHE
+04A6 ; Uppercase # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8 ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA ; Uppercase # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC ; Uppercase # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE ; Uppercase # L& CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0 ; Uppercase # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2 ; Uppercase # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4 ; Uppercase # L& CYRILLIC CAPITAL LIGATURE TE TSE
+04B6 ; Uppercase # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8 ; Uppercase # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA ; Uppercase # L& CYRILLIC CAPITAL LETTER SHHA
+04BC ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1 ; Uppercase # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3 ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5 ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB ; Uppercase # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD ; Uppercase # L& CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0 ; Uppercase # L& CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2 ; Uppercase # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4 ; Uppercase # L& CYRILLIC CAPITAL LIGATURE A IE
+04D6 ; Uppercase # L& CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8 ; Uppercase # L& CYRILLIC CAPITAL LETTER SCHWA
+04DA ; Uppercase # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC ; Uppercase # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE ; Uppercase # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0 ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2 ; Uppercase # L& CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4 ; Uppercase # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6 ; Uppercase # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8 ; Uppercase # L& CYRILLIC CAPITAL LETTER BARRED O
+04EA ; Uppercase # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC ; Uppercase # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE ; Uppercase # L& CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0 ; Uppercase # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2 ; Uppercase # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4 ; Uppercase # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8 ; Uppercase # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC ; Uppercase # L& CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE ; Uppercase # L& CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI DE
+0502 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI DJE
+0504 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI ZJE
+0506 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI DZJE
+0508 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI LJE
+050A ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI NJE
+050C ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI SJE
+050E ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI TJE
+0510 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED ZE
+0512 ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514 ; Uppercase # L& CYRILLIC CAPITAL LETTER LHA
+0516 ; Uppercase # L& CYRILLIC CAPITAL LETTER RHA
+0518 ; Uppercase # L& CYRILLIC CAPITAL LETTER YAE
+051A ; Uppercase # L& CYRILLIC CAPITAL LETTER QA
+051C ; Uppercase # L& CYRILLIC CAPITAL LETTER WE
+051E ; Uppercase # L& CYRILLIC CAPITAL LETTER ALEUT KA
+0520 ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524 ; Uppercase # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526 ; Uppercase # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A ; Uppercase # L& CYRILLIC CAPITAL LETTER DZZHE
+052C ; Uppercase # L& CYRILLIC CAPITAL LETTER DCHE
+052E ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531..0556 ; Uppercase # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+10A0..10C5 ; Uppercase # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Uppercase # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Uppercase # L& GEORGIAN CAPITAL LETTER AEN
+13A0..13F5 ; Uppercase # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+1C90..1CBA ; Uppercase # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Uppercase # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1E00 ; Uppercase # L& LATIN CAPITAL LETTER A WITH RING BELOW
+1E02 ; Uppercase # L& LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04 ; Uppercase # L& LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06 ; Uppercase # L& LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08 ; Uppercase # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A ; Uppercase # L& LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C ; Uppercase # L& LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E ; Uppercase # L& LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10 ; Uppercase # L& LATIN CAPITAL LETTER D WITH CEDILLA
+1E12 ; Uppercase # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14 ; Uppercase # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16 ; Uppercase # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A ; Uppercase # L& LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C ; Uppercase # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E ; Uppercase # L& LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20 ; Uppercase # L& LATIN CAPITAL LETTER G WITH MACRON
+1E22 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28 ; Uppercase # L& LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A ; Uppercase # L& LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C ; Uppercase # L& LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E ; Uppercase # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30 ; Uppercase # L& LATIN CAPITAL LETTER K WITH ACUTE
+1E32 ; Uppercase # L& LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34 ; Uppercase # L& LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A ; Uppercase # L& LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C ; Uppercase # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E ; Uppercase # L& LATIN CAPITAL LETTER M WITH ACUTE
+1E40 ; Uppercase # L& LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42 ; Uppercase # L& LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44 ; Uppercase # L& LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46 ; Uppercase # L& LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48 ; Uppercase # L& LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A ; Uppercase # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C ; Uppercase # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E ; Uppercase # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50 ; Uppercase # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52 ; Uppercase # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54 ; Uppercase # L& LATIN CAPITAL LETTER P WITH ACUTE
+1E56 ; Uppercase # L& LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58 ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E ; Uppercase # L& LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60 ; Uppercase # L& LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62 ; Uppercase # L& LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64 ; Uppercase # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 ; Uppercase # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68 ; Uppercase # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A ; Uppercase # L& LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C ; Uppercase # L& LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E ; Uppercase # L& LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70 ; Uppercase # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74 ; Uppercase # L& LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76 ; Uppercase # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78 ; Uppercase # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A ; Uppercase # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C ; Uppercase # L& LATIN CAPITAL LETTER V WITH TILDE
+1E7E ; Uppercase # L& LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80 ; Uppercase # L& LATIN CAPITAL LETTER W WITH GRAVE
+1E82 ; Uppercase # L& LATIN CAPITAL LETTER W WITH ACUTE
+1E84 ; Uppercase # L& LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86 ; Uppercase # L& LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88 ; Uppercase # L& LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A ; Uppercase # L& LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C ; Uppercase # L& LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E ; Uppercase # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9E ; Uppercase # L& LATIN CAPITAL LETTER SHARP S
+1EA0 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2 ; Uppercase # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4 ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8 ; Uppercase # L& LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA ; Uppercase # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC ; Uppercase # L& LATIN CAPITAL LETTER E WITH TILDE
+1EBE ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 ; Uppercase # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA ; Uppercase # L& LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE ; Uppercase # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2 ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6 ; Uppercase # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8 ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0 ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH TILDE
+1EFA ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE ; Uppercase # L& LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F ; Uppercase # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D ; Uppercase # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F ; Uppercase # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F ; Uppercase # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D ; Uppercase # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59 ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F ; Uppercase # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1FB8..1FBB ; Uppercase # L& [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FC8..1FCB ; Uppercase # L& [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA
+1FD8..1FDB ; Uppercase # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE8..1FEC ; Uppercase # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF8..1FFB ; Uppercase # L& [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA
+2102 ; Uppercase # L& DOUBLE-STRUCK CAPITAL C
+2107 ; Uppercase # L& EULER CONSTANT
+210B..210D ; Uppercase # L& [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H
+2110..2112 ; Uppercase # L& [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L
+2115 ; Uppercase # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; Uppercase # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Uppercase # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; Uppercase # L& OHM SIGN
+2128 ; Uppercase # L& BLACK-LETTER CAPITAL Z
+212A..212D ; Uppercase # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+2130..2133 ; Uppercase # L& [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M
+213E..213F ; Uppercase # L& [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI
+2145 ; Uppercase # L& DOUBLE-STRUCK ITALIC CAPITAL D
+2160..216F ; Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+2183 ; Uppercase # L& ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6..24CF ; Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+2C00..2C2F ; Uppercase # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+2C60 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64 ; Uppercase # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DESCENDER
+2C69 ; Uppercase # L& LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B ; Uppercase # L& LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70 ; Uppercase # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72 ; Uppercase # L& LATIN CAPITAL LETTER W WITH HOOK
+2C75 ; Uppercase # L& LATIN CAPITAL LETTER HALF H
+2C7E..2C80 ; Uppercase # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82 ; Uppercase # L& COPTIC CAPITAL LETTER VIDA
+2C84 ; Uppercase # L& COPTIC CAPITAL LETTER GAMMA
+2C86 ; Uppercase # L& COPTIC CAPITAL LETTER DALDA
+2C88 ; Uppercase # L& COPTIC CAPITAL LETTER EIE
+2C8A ; Uppercase # L& COPTIC CAPITAL LETTER SOU
+2C8C ; Uppercase # L& COPTIC CAPITAL LETTER ZATA
+2C8E ; Uppercase # L& COPTIC CAPITAL LETTER HATE
+2C90 ; Uppercase # L& COPTIC CAPITAL LETTER THETHE
+2C92 ; Uppercase # L& COPTIC CAPITAL LETTER IAUDA
+2C94 ; Uppercase # L& COPTIC CAPITAL LETTER KAPA
+2C96 ; Uppercase # L& COPTIC CAPITAL LETTER LAULA
+2C98 ; Uppercase # L& COPTIC CAPITAL LETTER MI
+2C9A ; Uppercase # L& COPTIC CAPITAL LETTER NI
+2C9C ; Uppercase # L& COPTIC CAPITAL LETTER KSI
+2C9E ; Uppercase # L& COPTIC CAPITAL LETTER O
+2CA0 ; Uppercase # L& COPTIC CAPITAL LETTER PI
+2CA2 ; Uppercase # L& COPTIC CAPITAL LETTER RO
+2CA4 ; Uppercase # L& COPTIC CAPITAL LETTER SIMA
+2CA6 ; Uppercase # L& COPTIC CAPITAL LETTER TAU
+2CA8 ; Uppercase # L& COPTIC CAPITAL LETTER UA
+2CAA ; Uppercase # L& COPTIC CAPITAL LETTER FI
+2CAC ; Uppercase # L& COPTIC CAPITAL LETTER KHI
+2CAE ; Uppercase # L& COPTIC CAPITAL LETTER PSI
+2CB0 ; Uppercase # L& COPTIC CAPITAL LETTER OOU
+2CB2 ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6 ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8 ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0 ; Uppercase # L& COPTIC CAPITAL LETTER SAMPI
+2CC2 ; Uppercase # L& COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8 ; Uppercase # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0 ; Uppercase # L& COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0 ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2 ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2 ; Uppercase # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI
+A640 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZEMLYA
+A642 ; Uppercase # L& CYRILLIC CAPITAL LETTER DZELO
+A644 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED DZE
+A646 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTA
+A648 ; Uppercase # L& CYRILLIC CAPITAL LETTER DJERV
+A64A ; Uppercase # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C ; Uppercase # L& CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E ; Uppercase # L& CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650 ; Uppercase # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED YU
+A656 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED A
+A658 ; Uppercase # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A ; Uppercase # L& CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E ; Uppercase # L& CYRILLIC CAPITAL LETTER YN
+A660 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED TSE
+A662 ; Uppercase # L& CYRILLIC CAPITAL LETTER SOFT DE
+A664 ; Uppercase # L& CYRILLIC CAPITAL LETTER SOFT EL
+A666 ; Uppercase # L& CYRILLIC CAPITAL LETTER SOFT EM
+A668 ; Uppercase # L& CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A ; Uppercase # L& CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C ; Uppercase # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680 ; Uppercase # L& CYRILLIC CAPITAL LETTER DWE
+A682 ; Uppercase # L& CYRILLIC CAPITAL LETTER DZWE
+A684 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZHWE
+A686 ; Uppercase # L& CYRILLIC CAPITAL LETTER CCHE
+A688 ; Uppercase # L& CYRILLIC CAPITAL LETTER DZZE
+A68A ; Uppercase # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C ; Uppercase # L& CYRILLIC CAPITAL LETTER TWE
+A68E ; Uppercase # L& CYRILLIC CAPITAL LETTER TSWE
+A690 ; Uppercase # L& CYRILLIC CAPITAL LETTER TSSE
+A692 ; Uppercase # L& CYRILLIC CAPITAL LETTER TCHE
+A694 ; Uppercase # L& CYRILLIC CAPITAL LETTER HWE
+A696 ; Uppercase # L& CYRILLIC CAPITAL LETTER SHWE
+A698 ; Uppercase # L& CYRILLIC CAPITAL LETTER DOUBLE O
+A69A ; Uppercase # L& CYRILLIC CAPITAL LETTER CROSSED O
+A722 ; Uppercase # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724 ; Uppercase # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726 ; Uppercase # L& LATIN CAPITAL LETTER HENG
+A728 ; Uppercase # L& LATIN CAPITAL LETTER TZ
+A72A ; Uppercase # L& LATIN CAPITAL LETTER TRESILLO
+A72C ; Uppercase # L& LATIN CAPITAL LETTER CUATRILLO
+A72E ; Uppercase # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732 ; Uppercase # L& LATIN CAPITAL LETTER AA
+A734 ; Uppercase # L& LATIN CAPITAL LETTER AO
+A736 ; Uppercase # L& LATIN CAPITAL LETTER AU
+A738 ; Uppercase # L& LATIN CAPITAL LETTER AV
+A73A ; Uppercase # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C ; Uppercase # L& LATIN CAPITAL LETTER AY
+A73E ; Uppercase # L& LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740 ; Uppercase # L& LATIN CAPITAL LETTER K WITH STROKE
+A742 ; Uppercase # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744 ; Uppercase # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746 ; Uppercase # L& LATIN CAPITAL LETTER BROKEN L
+A748 ; Uppercase # L& LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A ; Uppercase # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C ; Uppercase # L& LATIN CAPITAL LETTER O WITH LOOP
+A74E ; Uppercase # L& LATIN CAPITAL LETTER OO
+A750 ; Uppercase # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752 ; Uppercase # L& LATIN CAPITAL LETTER P WITH FLOURISH
+A754 ; Uppercase # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756 ; Uppercase # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758 ; Uppercase # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A ; Uppercase # L& LATIN CAPITAL LETTER R ROTUNDA
+A75C ; Uppercase # L& LATIN CAPITAL LETTER RUM ROTUNDA
+A75E ; Uppercase # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760 ; Uppercase # L& LATIN CAPITAL LETTER VY
+A762 ; Uppercase # L& LATIN CAPITAL LETTER VISIGOTHIC Z
+A764 ; Uppercase # L& LATIN CAPITAL LETTER THORN WITH STROKE
+A766 ; Uppercase # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768 ; Uppercase # L& LATIN CAPITAL LETTER VEND
+A76A ; Uppercase # L& LATIN CAPITAL LETTER ET
+A76C ; Uppercase # L& LATIN CAPITAL LETTER IS
+A76E ; Uppercase # L& LATIN CAPITAL LETTER CON
+A779 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR D
+A77B ; Uppercase # L& LATIN CAPITAL LETTER INSULAR F
+A77D..A77E ; Uppercase # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780 ; Uppercase # L& LATIN CAPITAL LETTER TURNED L
+A782 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR R
+A784 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR S
+A786 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR T
+A78B ; Uppercase # L& LATIN CAPITAL LETTER SALTILLO
+A78D ; Uppercase # L& LATIN CAPITAL LETTER TURNED H
+A790 ; Uppercase # L& LATIN CAPITAL LETTER N WITH DESCENDER
+A792 ; Uppercase # L& LATIN CAPITAL LETTER C WITH BAR
+A796 ; Uppercase # L& LATIN CAPITAL LETTER B WITH FLOURISH
+A798 ; Uppercase # L& LATIN CAPITAL LETTER F WITH STROKE
+A79A ; Uppercase # L& LATIN CAPITAL LETTER VOLAPUK AE
+A79C ; Uppercase # L& LATIN CAPITAL LETTER VOLAPUK OE
+A79E ; Uppercase # L& LATIN CAPITAL LETTER VOLAPUK UE
+A7A0 ; Uppercase # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2 ; Uppercase # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4 ; Uppercase # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6 ; Uppercase # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8 ; Uppercase # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA..A7AE ; Uppercase # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0..A7B4 ; Uppercase # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
+A7B6 ; Uppercase # L& LATIN CAPITAL LETTER OMEGA
+A7B8 ; Uppercase # L& LATIN CAPITAL LETTER U WITH STROKE
+A7BA ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL A
+A7BC ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL I
+A7BE ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL U
+A7C0 ; Uppercase # L& LATIN CAPITAL LETTER OLD POLISH O
+A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W
+A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G
+A7D6 ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE SCOTS S
+A7D8 ; Uppercase # L& LATIN CAPITAL LETTER SIGMOID S
+A7F5 ; Uppercase # L& LATIN CAPITAL LETTER REVERSED HALF H
+FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+10400..10427 ; Uppercase # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+104B0..104D3 ; Uppercase # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+10570..1057A ; Uppercase # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Uppercase # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Uppercase # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Uppercase # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10C80..10CB2 ; Uppercase # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+118A0..118BF ; Uppercase # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
+16E40..16E5F ; Uppercase # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
+1D400..1D419 ; Uppercase # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z
+1D434..1D44D ; Uppercase # L& [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z
+1D468..1D481 ; Uppercase # L& [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D49C ; Uppercase # L& MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Uppercase # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Uppercase # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Uppercase # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Uppercase # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B5 ; Uppercase # L& [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z
+1D4D0..1D4E9 ; Uppercase # L& [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D504..1D505 ; Uppercase # L& [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Uppercase # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Uppercase # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Uppercase # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D538..1D539 ; Uppercase # L& [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Uppercase # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Uppercase # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Uppercase # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Uppercase # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D56C..1D585 ; Uppercase # L& [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D5A0..1D5B9 ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5D4..1D5ED ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D608..1D621 ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D63C..1D655 ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D670..1D689 ; Uppercase # L& [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z
+1D6A8..1D6C0 ; Uppercase # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6E2..1D6FA ; Uppercase # L& [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D71C..1D734 ; Uppercase # L& [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D756..1D76E ; Uppercase # L& [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D790..1D7A8 ; Uppercase # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7CA ; Uppercase # L& MATHEMATICAL BOLD CAPITAL DIGAMMA
+1E900..1E921 ; Uppercase # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
+1F130..1F149 ; Uppercase # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
+1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+
+# Total code points: 1951
+
+# ================================================
+
+# Derived Property: Cased (Cased)
+# As defined by Unicode Standard Definition D135
+# C has the Lowercase or Uppercase property or has a General_Category value of Titlecase_Letter.
+
+0041..005A ; Cased # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; Cased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; Cased # Lo FEMININE ORDINAL INDICATOR
+00B5 ; Cased # L& MICRO SIGN
+00BA ; Cased # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; Cased # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; Cased # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; Cased # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BC..01BF ; Cased # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C4..0293 ; Cased # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0295..02AF ; Cased # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02B8 ; Cased # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02C0..02C1 ; Cased # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
+02E0..02E4 ; Cased # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0345 ; Cased # Mn COMBINING GREEK YPOGEGRAMMENI
+0370..0373 ; Cased # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0376..0377 ; Cased # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; Cased # Lm GREEK YPOGEGRAMMENI
+037B..037D ; Cased # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; Cased # L& GREEK CAPITAL LETTER YOT
+0386 ; Cased # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Cased # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Cased # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; Cased # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; Cased # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481 ; Cased # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..052F ; Cased # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; Cased # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0560..0588 ; Cased # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+10A0..10C5 ; Cased # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Cased # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Cased # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; Cased # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FD..10FF ; Cased # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+13A0..13F5 ; Cased # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Cased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Cased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; Cased # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Cased # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1D00..1D2B ; Cased # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; Cased # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; Cased # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; Cased # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; Cased # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; Cased # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15 ; Cased # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Cased # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Cased # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Cased # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Cased # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Cased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Cased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Cased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Cased # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Cased # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Cased # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; Cased # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; Cased # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Cased # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; Cased # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Cased # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; Cased # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; Cased # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Cased # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071 ; Cased # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Cased # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Cased # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+2102 ; Cased # L& DOUBLE-STRUCK CAPITAL C
+2107 ; Cased # L& EULER CONSTANT
+210A..2113 ; Cased # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Cased # L& DOUBLE-STRUCK CAPITAL N
+2119..211D ; Cased # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; Cased # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; Cased # L& OHM SIGN
+2128 ; Cased # L& BLACK-LETTER CAPITAL Z
+212A..212D ; Cased # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2134 ; Cased # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2139 ; Cased # L& INFORMATION SOURCE
+213C..213F ; Cased # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; Cased # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; Cased # L& TURNED SMALL F
+2160..217F ; Cased # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2183..2184 ; Cased # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+24B6..24E9 ; Cased # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C00..2C7B ; Cased # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; Cased # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; Cased # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE ; Cased # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF2..2CF3 ; Cased # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; Cased # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Cased # L& GEORGIAN SMALL LETTER YN
+2D2D ; Cased # L& GEORGIAN SMALL LETTER AEN
+A640..A66D ; Cased # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A680..A69B ; Cased # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; Cased # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; Cased # Lm MODIFIER LETTER US
+A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A790..A7CA ; Cased # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; Cased # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; Cased # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; Cased # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; Cased # L& LATIN LETTER SMALL CAPITAL TURNED M
+AB30..AB5A ; Cased # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; Cased # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; Cased # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB70..ABBF ; Cased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+FB00..FB06 ; Cased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Cased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A ; Cased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10400..1044F ; Cased # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+104B0..104D3 ; Cased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; Cased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10570..1057A ; Cased # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Cased # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Cased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Cased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; Cased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Cased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Cased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Cased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10780 ; Cased # Lm MODIFIER LETTER SMALL CAPITAL AA
+10783..10785 ; Cased # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Cased # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Cased # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10C80..10CB2 ; Cased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Cased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+118A0..118DF ; Cased # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+16E40..16E7F ; Cased # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+1D400..1D454 ; Cased # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Cased # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Cased # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Cased # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Cased # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Cased # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Cased # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Cased # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Cased # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Cased # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Cased # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Cased # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Cased # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Cased # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Cased # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Cased # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Cased # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Cased # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Cased # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Cased # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; Cased # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; Cased # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; Cased # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; Cased # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; Cased # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; Cased # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; Cased # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; Cased # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; Cased # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; Cased # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1DF00..1DF09 ; Cased # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0B..1DF1E ; Cased # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E900..1E943 ; Cased # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1F130..1F149 ; Cased # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
+1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+
+# Total code points: 4453
+
+# ================================================
+
+# Derived Property: Case_Ignorable (CI)
+# As defined by Unicode Standard Definition D136
+# C is defined to be case-ignorable if
+# Word_Break(C) = MidLetter or MidNumLet or Single_Quote, or
+# General_Category(C) = Nonspacing_Mark (Mn), Enclosing_Mark (Me), Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk).
+
+0027 ; Case_Ignorable # Po APOSTROPHE
+002E ; Case_Ignorable # Po FULL STOP
+003A ; Case_Ignorable # Po COLON
+005E ; Case_Ignorable # Sk CIRCUMFLEX ACCENT
+0060 ; Case_Ignorable # Sk GRAVE ACCENT
+00A8 ; Case_Ignorable # Sk DIAERESIS
+00AD ; Case_Ignorable # Cf SOFT HYPHEN
+00AF ; Case_Ignorable # Sk MACRON
+00B4 ; Case_Ignorable # Sk ACUTE ACCENT
+00B7 ; Case_Ignorable # Po MIDDLE DOT
+00B8 ; Case_Ignorable # Sk CEDILLA
+02B0..02C1 ; Case_Ignorable # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; Case_Ignorable # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1 ; Case_Ignorable # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF ; Case_Ignorable # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4 ; Case_Ignorable # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB ; Case_Ignorable # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC ; Case_Ignorable # Lm MODIFIER LETTER VOICING
+02ED ; Case_Ignorable # Sk MODIFIER LETTER UNASPIRATED
+02EE ; Case_Ignorable # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; Case_Ignorable # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0300..036F ; Case_Ignorable # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0374 ; Case_Ignorable # Lm GREEK NUMERAL SIGN
+0375 ; Case_Ignorable # Sk GREEK LOWER NUMERAL SIGN
+037A ; Case_Ignorable # Lm GREEK YPOGEGRAMMENI
+0384..0385 ; Case_Ignorable # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0387 ; Case_Ignorable # Po GREEK ANO TELEIA
+0483..0487 ; Case_Ignorable # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489 ; Case_Ignorable # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+0559 ; Case_Ignorable # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055F ; Case_Ignorable # Po ARMENIAN ABBREVIATION MARK
+0591..05BD ; Case_Ignorable # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF ; Case_Ignorable # Mn HEBREW POINT RAFE
+05C1..05C2 ; Case_Ignorable # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; Case_Ignorable # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Case_Ignorable # Mn HEBREW POINT QAMATS QATAN
+05F4 ; Case_Ignorable # Po HEBREW PUNCTUATION GERSHAYIM
+0600..0605 ; Case_Ignorable # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+0610..061A ; Case_Ignorable # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+061C ; Case_Ignorable # Cf ARABIC LETTER MARK
+0640 ; Case_Ignorable # Lm ARABIC TATWEEL
+064B..065F ; Case_Ignorable # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0670 ; Case_Ignorable # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; Case_Ignorable # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DD ; Case_Ignorable # Cf ARABIC END OF AYAH
+06DF..06E4 ; Case_Ignorable # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6 ; Case_Ignorable # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8 ; Case_Ignorable # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; Case_Ignorable # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+070F ; Case_Ignorable # Cf SYRIAC ABBREVIATION MARK
+0711 ; Case_Ignorable # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A ; Case_Ignorable # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; Case_Ignorable # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3 ; Case_Ignorable # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5 ; Case_Ignorable # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA ; Case_Ignorable # Lm NKO LAJANYALAN
+07FD ; Case_Ignorable # Mn NKO DANTAYALAN
+0816..0819 ; Case_Ignorable # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823 ; Case_Ignorable # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824 ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827 ; Case_Ignorable # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828 ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER I
+0829..082D ; Case_Ignorable # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0859..085B ; Case_Ignorable # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+0888 ; Case_Ignorable # Sk ARABIC RAISED ROUND DOT
+0890..0891 ; Case_Ignorable # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
+0898..089F ; Case_Ignorable # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+08C9 ; Case_Ignorable # Lm ARABIC SMALL FARSI YEH
+08CA..08E1 ; Case_Ignorable # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
+08E2 ; Case_Ignorable # Cf ARABIC DISPUTED END OF AYAH
+08E3..0902 ; Case_Ignorable # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
+093A ; Case_Ignorable # Mn DEVANAGARI VOWEL SIGN OE
+093C ; Case_Ignorable # Mn DEVANAGARI SIGN NUKTA
+0941..0948 ; Case_Ignorable # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D ; Case_Ignorable # Mn DEVANAGARI SIGN VIRAMA
+0951..0957 ; Case_Ignorable # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0962..0963 ; Case_Ignorable # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0971 ; Case_Ignorable # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0981 ; Case_Ignorable # Mn BENGALI SIGN CANDRABINDU
+09BC ; Case_Ignorable # Mn BENGALI SIGN NUKTA
+09C1..09C4 ; Case_Ignorable # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD ; Case_Ignorable # Mn BENGALI SIGN VIRAMA
+09E2..09E3 ; Case_Ignorable # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09FE ; Case_Ignorable # Mn BENGALI SANDHI MARK
+0A01..0A02 ; Case_Ignorable # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C ; Case_Ignorable # Mn GURMUKHI SIGN NUKTA
+0A41..0A42 ; Case_Ignorable # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Case_Ignorable # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; Case_Ignorable # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51 ; Case_Ignorable # Mn GURMUKHI SIGN UDAAT
+0A70..0A71 ; Case_Ignorable # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75 ; Case_Ignorable # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; Case_Ignorable # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC ; Case_Ignorable # Mn GUJARATI SIGN NUKTA
+0AC1..0AC5 ; Case_Ignorable # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Case_Ignorable # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD ; Case_Ignorable # Mn GUJARATI SIGN VIRAMA
+0AE2..0AE3 ; Case_Ignorable # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AFA..0AFF ; Case_Ignorable # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01 ; Case_Ignorable # Mn ORIYA SIGN CANDRABINDU
+0B3C ; Case_Ignorable # Mn ORIYA SIGN NUKTA
+0B3F ; Case_Ignorable # Mn ORIYA VOWEL SIGN I
+0B41..0B44 ; Case_Ignorable # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B4D ; Case_Ignorable # Mn ORIYA SIGN VIRAMA
+0B55..0B56 ; Case_Ignorable # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+0B62..0B63 ; Case_Ignorable # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82 ; Case_Ignorable # Mn TAMIL SIGN ANUSVARA
+0BC0 ; Case_Ignorable # Mn TAMIL VOWEL SIGN II
+0BCD ; Case_Ignorable # Mn TAMIL SIGN VIRAMA
+0C00 ; Case_Ignorable # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C04 ; Case_Ignorable # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C3C ; Case_Ignorable # Mn TELUGU SIGN NUKTA
+0C3E..0C40 ; Case_Ignorable # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48 ; Case_Ignorable # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; Case_Ignorable # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; Case_Ignorable # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63 ; Case_Ignorable # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C81 ; Case_Ignorable # Mn KANNADA SIGN CANDRABINDU
+0CBC ; Case_Ignorable # Mn KANNADA SIGN NUKTA
+0CBF ; Case_Ignorable # Mn KANNADA VOWEL SIGN I
+0CC6 ; Case_Ignorable # Mn KANNADA VOWEL SIGN E
+0CCC..0CCD ; Case_Ignorable # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CE2..0CE3 ; Case_Ignorable # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D00..0D01 ; Case_Ignorable # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D3B..0D3C ; Case_Ignorable # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D41..0D44 ; Case_Ignorable # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D4D ; Case_Ignorable # Mn MALAYALAM SIGN VIRAMA
+0D62..0D63 ; Case_Ignorable # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Case_Ignorable # Mn SINHALA SIGN CANDRABINDU
+0DCA ; Case_Ignorable # Mn SINHALA SIGN AL-LAKUNA
+0DD2..0DD4 ; Case_Ignorable # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Case_Ignorable # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0E31 ; Case_Ignorable # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; Case_Ignorable # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E46 ; Case_Ignorable # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E ; Case_Ignorable # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1 ; Case_Ignorable # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EBC ; Case_Ignorable # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EC6 ; Case_Ignorable # Lm LAO KO LA
+0EC8..0ECD ; Case_Ignorable # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19 ; Case_Ignorable # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; Case_Ignorable # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; Case_Ignorable # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; Case_Ignorable # Mn TIBETAN MARK TSA -PHRU
+0F71..0F7E ; Case_Ignorable # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84 ; Case_Ignorable # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; Case_Ignorable # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F8D..0F97 ; Case_Ignorable # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Case_Ignorable # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; Case_Ignorable # Mn TIBETAN SYMBOL PADMA GDAN
+102D..1030 ; Case_Ignorable # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032..1037 ; Case_Ignorable # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1039..103A ; Case_Ignorable # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103D..103E ; Case_Ignorable # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1058..1059 ; Case_Ignorable # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060 ; Case_Ignorable # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1071..1074 ; Case_Ignorable # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082 ; Case_Ignorable # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1085..1086 ; Case_Ignorable # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+108D ; Case_Ignorable # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+109D ; Case_Ignorable # Mn MYANMAR VOWEL SIGN AITON AI
+10FC ; Case_Ignorable # Lm MODIFIER LETTER GEORGIAN NAR
+135D..135F ; Case_Ignorable # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1712..1714 ; Case_Ignorable # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1733 ; Case_Ignorable # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1752..1753 ; Case_Ignorable # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; Case_Ignorable # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B4..17B5 ; Case_Ignorable # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B7..17BD ; Case_Ignorable # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6 ; Case_Ignorable # Mn KHMER SIGN NIKAHIT
+17C9..17D3 ; Case_Ignorable # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D7 ; Case_Ignorable # Lm KHMER SIGN LEK TOO
+17DD ; Case_Ignorable # Mn KHMER SIGN ATTHACAN
+180B..180D ; Case_Ignorable # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; Case_Ignorable # Cf MONGOLIAN VOWEL SEPARATOR
+180F ; Case_Ignorable # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+1843 ; Case_Ignorable # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1885..1886 ; Case_Ignorable # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+18A9 ; Case_Ignorable # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; Case_Ignorable # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928 ; Case_Ignorable # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1932 ; Case_Ignorable # Mn LIMBU SMALL LETTER ANUSVARA
+1939..193B ; Case_Ignorable # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A17..1A18 ; Case_Ignorable # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A1B ; Case_Ignorable # Mn BUGINESE VOWEL SIGN AE
+1A56 ; Case_Ignorable # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A58..1A5E ; Case_Ignorable # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60 ; Case_Ignorable # Mn TAI THAM SIGN SAKOT
+1A62 ; Case_Ignorable # Mn TAI THAM VOWEL SIGN MAI SAT
+1A65..1A6C ; Case_Ignorable # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A73..1A7C ; Case_Ignorable # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; Case_Ignorable # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1AA7 ; Case_Ignorable # Lm TAI THAM SIGN MAI YAMOK
+1AB0..1ABD ; Case_Ignorable # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE ; Case_Ignorable # Me COMBINING PARENTHESES OVERLAY
+1ABF..1ACE ; Case_Ignorable # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
+1B00..1B03 ; Case_Ignorable # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B34 ; Case_Ignorable # Mn BALINESE SIGN REREKAN
+1B36..1B3A ; Case_Ignorable # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3C ; Case_Ignorable # Mn BALINESE VOWEL SIGN LA LENGA
+1B42 ; Case_Ignorable # Mn BALINESE VOWEL SIGN PEPET
+1B6B..1B73 ; Case_Ignorable # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81 ; Case_Ignorable # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1BA2..1BA5 ; Case_Ignorable # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA8..1BA9 ; Case_Ignorable # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAB..1BAD ; Case_Ignorable # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BE6 ; Case_Ignorable # Mn BATAK SIGN TOMPI
+1BE8..1BE9 ; Case_Ignorable # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BED ; Case_Ignorable # Mn BATAK VOWEL SIGN KARO O
+1BEF..1BF1 ; Case_Ignorable # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1C2C..1C33 ; Case_Ignorable # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C36..1C37 ; Case_Ignorable # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C78..1C7D ; Case_Ignorable # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1CD0..1CD2 ; Case_Ignorable # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0 ; Case_Ignorable # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8 ; Case_Ignorable # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED ; Case_Ignorable # Mn VEDIC SIGN TIRYAK
+1CF4 ; Case_Ignorable # Mn VEDIC TONE CANDRA ABOVE
+1CF8..1CF9 ; Case_Ignorable # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1D2C..1D6A ; Case_Ignorable # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D78 ; Case_Ignorable # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; Case_Ignorable # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DFF ; Case_Ignorable # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1FBD ; Case_Ignorable # Sk GREEK KORONIS
+1FBF..1FC1 ; Case_Ignorable # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF ; Case_Ignorable # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF ; Case_Ignorable # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEF ; Case_Ignorable # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FFD..1FFE ; Case_Ignorable # Sk [2] GREEK OXIA..GREEK DASIA
+200B..200F ; Case_Ignorable # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+2018 ; Case_Ignorable # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Case_Ignorable # Pf RIGHT SINGLE QUOTATION MARK
+2024 ; Case_Ignorable # Po ONE DOT LEADER
+2027 ; Case_Ignorable # Po HYPHENATION POINT
+202A..202E ; Case_Ignorable # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2064 ; Case_Ignorable # Cf [5] WORD JOINER..INVISIBLE PLUS
+2066..206F ; Case_Ignorable # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+2071 ; Case_Ignorable # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Case_Ignorable # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Case_Ignorable # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20D0..20DC ; Case_Ignorable # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0 ; Case_Ignorable # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 ; Case_Ignorable # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4 ; Case_Ignorable # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0 ; Case_Ignorable # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2C7C..2C7D ; Case_Ignorable # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2CEF..2CF1 ; Case_Ignorable # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2D6F ; Case_Ignorable # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D7F ; Case_Ignorable # Mn TIFINAGH CONSONANT JOINER
+2DE0..2DFF ; Case_Ignorable # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+2E2F ; Case_Ignorable # Lm VERTICAL TILDE
+3005 ; Case_Ignorable # Lm IDEOGRAPHIC ITERATION MARK
+302A..302D ; Case_Ignorable # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+3031..3035 ; Case_Ignorable # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+303B ; Case_Ignorable # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+3099..309A ; Case_Ignorable # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C ; Case_Ignorable # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E ; Case_Ignorable # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30FC..30FE ; Case_Ignorable # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+A015 ; Case_Ignorable # Lm YI SYLLABLE WU
+A4F8..A4FD ; Case_Ignorable # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A60C ; Case_Ignorable # Lm VAI SYLLABLE LENGTHENER
+A66F ; Case_Ignorable # Mn COMBINING CYRILLIC VZMET
+A670..A672 ; Case_Ignorable # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A674..A67D ; Case_Ignorable # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A67F ; Case_Ignorable # Lm CYRILLIC PAYEROK
+A69C..A69D ; Case_Ignorable # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F ; Case_Ignorable # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6F0..A6F1 ; Case_Ignorable # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A700..A716 ; Case_Ignorable # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F ; Case_Ignorable # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721 ; Case_Ignorable # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A770 ; Case_Ignorable # Lm MODIFIER LETTER US
+A788 ; Case_Ignorable # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A ; Case_Ignorable # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A7F2..A7F4 ; Case_Ignorable # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F8..A7F9 ; Case_Ignorable # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A802 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN DVISVARA
+A806 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN HASANTA
+A80B ; Case_Ignorable # Mn SYLOTI NAGRI SIGN ANUSVARA
+A825..A826 ; Case_Ignorable # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; Case_Ignorable # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A8C4..A8C5 ; Case_Ignorable # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8E0..A8F1 ; Case_Ignorable # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8FF ; Case_Ignorable # Mn DEVANAGARI VOWEL SIGN AY
+A926..A92D ; Case_Ignorable # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A947..A951 ; Case_Ignorable # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A980..A982 ; Case_Ignorable # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A9B3 ; Case_Ignorable # Mn JAVANESE SIGN CECAK TELU
+A9B6..A9B9 ; Case_Ignorable # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BC..A9BD ; Case_Ignorable # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9CF ; Case_Ignorable # Lm JAVANESE PANGRANGKEP
+A9E5 ; Case_Ignorable # Mn MYANMAR SIGN SHAN SAW
+A9E6 ; Case_Ignorable # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+AA29..AA2E ; Case_Ignorable # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA31..AA32 ; Case_Ignorable # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA35..AA36 ; Case_Ignorable # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43 ; Case_Ignorable # Mn CHAM CONSONANT SIGN FINAL NG
+AA4C ; Case_Ignorable # Mn CHAM CONSONANT SIGN FINAL M
+AA70 ; Case_Ignorable # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA7C ; Case_Ignorable # Mn MYANMAR SIGN TAI LAING TONE-2
+AAB0 ; Case_Ignorable # Mn TAI VIET MAI KANG
+AAB2..AAB4 ; Case_Ignorable # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8 ; Case_Ignorable # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE..AABF ; Case_Ignorable # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC1 ; Case_Ignorable # Mn TAI VIET TONE MAI THO
+AADD ; Case_Ignorable # Lm TAI VIET SYMBOL SAM
+AAEC..AAED ; Case_Ignorable # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAF3..AAF4 ; Case_Ignorable # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF6 ; Case_Ignorable # Mn MEETEI MAYEK VIRAMA
+AB5B ; Case_Ignorable # Sk MODIFIER BREVE WITH INVERTED BREVE
+AB5C..AB5F ; Case_Ignorable # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Case_Ignorable # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; Case_Ignorable # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
+ABE5 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE8 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABED ; Case_Ignorable # Mn MEETEI MAYEK APUN IYEK
+FB1E ; Case_Ignorable # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FBB2..FBC2 ; Case_Ignorable # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE
+FE00..FE0F ; Case_Ignorable # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE13 ; Case_Ignorable # Po PRESENTATION FORM FOR VERTICAL COLON
+FE20..FE2F ; Case_Ignorable # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FE52 ; Case_Ignorable # Po SMALL FULL STOP
+FE55 ; Case_Ignorable # Po SMALL COLON
+FEFF ; Case_Ignorable # Cf ZERO WIDTH NO-BREAK SPACE
+FF07 ; Case_Ignorable # Po FULLWIDTH APOSTROPHE
+FF0E ; Case_Ignorable # Po FULLWIDTH FULL STOP
+FF1A ; Case_Ignorable # Po FULLWIDTH COLON
+FF3E ; Case_Ignorable # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF40 ; Case_Ignorable # Sk FULLWIDTH GRAVE ACCENT
+FF70 ; Case_Ignorable # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF9E..FF9F ; Case_Ignorable # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFE3 ; Case_Ignorable # Sk FULLWIDTH MACRON
+FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+101FD ; Case_Ignorable # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+102E0 ; Case_Ignorable # Mn COPTIC EPACT THOUSANDS MARK
+10376..1037A ; Case_Ignorable # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10780..10785 ; Case_Ignorable # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Case_Ignorable # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Case_Ignorable # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10A01..10A03 ; Case_Ignorable # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Case_Ignorable # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Case_Ignorable # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A38..10A3A ; Case_Ignorable # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; Case_Ignorable # Mn KHAROSHTHI VIRAMA
+10AE5..10AE6 ; Case_Ignorable # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10D24..10D27 ; Case_Ignorable # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F82..10F85 ; Case_Ignorable # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA
+11038..11046 ; Case_Ignorable # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11070 ; Case_Ignorable # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+11073..11074 ; Case_Ignorable # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+1107F..11081 ; Case_Ignorable # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
+110B3..110B6 ; Case_Ignorable # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B9..110BA ; Case_Ignorable # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110BD ; Case_Ignorable # Cf KAITHI NUMBER SIGN
+110C2 ; Case_Ignorable # Mn KAITHI VOWEL SIGN VOCALIC R
+110CD ; Case_Ignorable # Cf KAITHI NUMBER SIGN ABOVE
+11100..11102 ; Case_Ignorable # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11127..1112B ; Case_Ignorable # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112D..11134 ; Case_Ignorable # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11173 ; Case_Ignorable # Mn MAHAJANI SIGN NUKTA
+11180..11181 ; Case_Ignorable # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+111B6..111BE ; Case_Ignorable # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111C9..111CC ; Case_Ignorable # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; Case_Ignorable # Mn SHARADA SIGN INVERTED CANDRABINDU
+1122F..11231 ; Case_Ignorable # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11234 ; Case_Ignorable # Mn KHOJKI SIGN ANUSVARA
+11236..11237 ; Case_Ignorable # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; Case_Ignorable # Mn KHOJKI SIGN SUKUN
+112DF ; Case_Ignorable # Mn KHUDAWADI SIGN ANUSVARA
+112E3..112EA ; Case_Ignorable # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+11300..11301 ; Case_Ignorable # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+1133B..1133C ; Case_Ignorable # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+11340 ; Case_Ignorable # Mn GRANTHA VOWEL SIGN II
+11366..1136C ; Case_Ignorable # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; Case_Ignorable # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11438..1143F ; Case_Ignorable # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11442..11444 ; Case_Ignorable # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11446 ; Case_Ignorable # Mn NEWA SIGN NUKTA
+1145E ; Case_Ignorable # Mn NEWA SANDHI MARK
+114B3..114B8 ; Case_Ignorable # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114BA ; Case_Ignorable # Mn TIRHUTA VOWEL SIGN SHORT E
+114BF..114C0 ; Case_Ignorable # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C2..114C3 ; Case_Ignorable # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+115B2..115B5 ; Case_Ignorable # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115BC..115BD ; Case_Ignorable # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BF..115C0 ; Case_Ignorable # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115DC..115DD ; Case_Ignorable # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11633..1163A ; Case_Ignorable # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163D ; Case_Ignorable # Mn MODI SIGN ANUSVARA
+1163F..11640 ; Case_Ignorable # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+116AB ; Case_Ignorable # Mn TAKRI SIGN ANUSVARA
+116AD ; Case_Ignorable # Mn TAKRI VOWEL SIGN AA
+116B0..116B5 ; Case_Ignorable # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B7 ; Case_Ignorable # Mn TAKRI SIGN NUKTA
+1171D..1171F ; Case_Ignorable # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11722..11725 ; Case_Ignorable # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11727..1172B ; Case_Ignorable # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+1182F..11837 ; Case_Ignorable # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11839..1183A ; Case_Ignorable # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1193B..1193C ; Case_Ignorable # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; Case_Ignorable # Mn DIVES AKURU VIRAMA
+11943 ; Case_Ignorable # Mn DIVES AKURU SIGN NUKTA
+119D4..119D7 ; Case_Ignorable # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; Case_Ignorable # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119E0 ; Case_Ignorable # Mn NANDINAGARI SIGN VIRAMA
+11A01..11A0A ; Case_Ignorable # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A33..11A38 ; Case_Ignorable # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A3B..11A3E ; Case_Ignorable # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; Case_Ignorable # Mn ZANABAZAR SQUARE SUBJOINER
+11A51..11A56 ; Case_Ignorable # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A59..11A5B ; Case_Ignorable # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A96 ; Case_Ignorable # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A98..11A99 ; Case_Ignorable # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11C30..11C36 ; Case_Ignorable # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Case_Ignorable # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3F ; Case_Ignorable # Mn BHAIKSUKI SIGN VIRAMA
+11C92..11CA7 ; Case_Ignorable # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CAA..11CB0 ; Case_Ignorable # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB2..11CB3 ; Case_Ignorable # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB5..11CB6 ; Case_Ignorable # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D36 ; Case_Ignorable # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Case_Ignorable # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Case_Ignorable # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Case_Ignorable # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D47 ; Case_Ignorable # Mn MASARAM GONDI RA-KARA
+11D90..11D91 ; Case_Ignorable # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D95 ; Case_Ignorable # Mn GUNJALA GONDI SIGN ANUSVARA
+11D97 ; Case_Ignorable # Mn GUNJALA GONDI VIRAMA
+11EF3..11EF4 ; Case_Ignorable # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+13430..13438 ; Case_Ignorable # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
+16AF0..16AF4 ; Case_Ignorable # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B30..16B36 ; Case_Ignorable # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16B40..16B43 ; Case_Ignorable # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16F4F ; Case_Ignorable # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F8F..16F92 ; Case_Ignorable # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; Case_Ignorable # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; Case_Ignorable # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; Case_Ignorable # Lm OLD CHINESE ITERATION MARK
+16FE4 ; Case_Ignorable # Mn KHITAN SMALL SCRIPT FILLER
+1AFF0..1AFF3 ; Case_Ignorable # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; Case_Ignorable # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; Case_Ignorable # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1BC9D..1BC9E ; Case_Ignorable # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1BCA0..1BCA3 ; Case_Ignorable # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1CF00..1CF2D ; Case_Ignorable # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30..1CF46 ; Case_Ignorable # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+1D167..1D169 ; Case_Ignorable # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D173..1D17A ; Case_Ignorable # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D17B..1D182 ; Case_Ignorable # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Case_Ignorable # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Case_Ignorable # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244 ; Case_Ignorable # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1DA00..1DA36 ; Case_Ignorable # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA3B..1DA6C ; Case_Ignorable # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA75 ; Case_Ignorable # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA84 ; Case_Ignorable # Mn SIGNWRITING LOCATION HEAD NECK
+1DA9B..1DA9F ; Case_Ignorable # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; Case_Ignorable # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006 ; Case_Ignorable # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Case_Ignorable # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Case_Ignorable # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Case_Ignorable # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Case_Ignorable # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E130..1E136 ; Case_Ignorable # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E137..1E13D ; Case_Ignorable # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E2AE ; Case_Ignorable # Mn TOTO SIGN RISING TONE
+1E2EC..1E2EF ; Case_Ignorable # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E8D0..1E8D6 ; Case_Ignorable # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E944..1E94A ; Case_Ignorable # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E94B ; Case_Ignorable # Lm ADLAM NASALIZATION MARK
+1F3FB..1F3FF ; Case_Ignorable # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+E0001 ; Case_Ignorable # Cf LANGUAGE TAG
+E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG
+E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 2602
+
+# ================================================
+
+# Derived Property: Changes_When_Lowercased (CWL)
+# Characters whose normalized forms are not stable under a toLowercase mapping.
+# For more information, see D139 in Section 3.13, "Default Case Algorithms".
+# Changes_When_Lowercased(X) is true when toLowercase(toNFD(X)) != toNFD(X)
+
+0041..005A ; Changes_When_Lowercased # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00C0..00D6 ; Changes_When_Lowercased # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DE ; Changes_When_Lowercased # L& [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN
+0100 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH MACRON
+0102 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE
+0104 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH OGONEK
+0106 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH ACUTE
+0108 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH CARON
+010E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH CARON
+0110 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH STROKE
+0112 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH MACRON
+0114 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH BREVE
+0116 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH OGONEK
+011A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CARON
+011C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH BREVE
+0120 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH CEDILLA
+0124 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH STROKE
+0128 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH TILDE
+012A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH MACRON
+012C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH BREVE
+012E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH OGONEK
+0130 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132 ; Changes_When_Lowercased # L& LATIN CAPITAL LIGATURE IJ
+0134 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH CEDILLA
+0139 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH ACUTE
+013B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH CEDILLA
+013D ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH CARON
+013F ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH STROKE
+0143 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH ACUTE
+0145 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH CEDILLA
+0147 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH CARON
+014A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ENG
+014C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH MACRON
+014E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH BREVE
+0150 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152 ; Changes_When_Lowercased # L& LATIN CAPITAL LIGATURE OE
+0154 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH ACUTE
+0156 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH CEDILLA
+0158 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH CARON
+015A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH ACUTE
+015C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CEDILLA
+0160 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CARON
+0162 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH CEDILLA
+0164 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH CARON
+0166 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH STROKE
+0168 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH TILDE
+016A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH MACRON
+016C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH BREVE
+016E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH RING ABOVE
+0170 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH OGONEK
+0174 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH CARON
+0181..0182 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TONE SIX
+0186..0187 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OI
+01A4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7 ; Changes_When_Lowercased # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ESH
+01AC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TONE FIVE
+01C4..01C5 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7..01C8 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA..01CB ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CARON
+01CF ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH CARON
+01D1 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CARON
+01D3 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH CARON
+01D5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AE WITH MACRON
+01E4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH STROKE
+01E6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH CARON
+01E8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH CARON
+01EA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH OGONEK
+01EC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER EZH WITH CARON
+01F1..01F2 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AE WITH ACUTE
+01FE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER YOGH
+021E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH CARON
+0220 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OU
+0224 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH HOOK
+0226 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CEDILLA
+022A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER J WITH STROKE
+024A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH STROKE
+024E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH STROKE
+0370 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER HETA
+0372 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037F ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER YOT
+0386 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Changes_When_Lowercased # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F ; Changes_When_Lowercased # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1 ; Changes_When_Lowercased # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB ; Changes_When_Lowercased # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03CF ; Changes_When_Lowercased # L& GREEK CAPITAL KAI SYMBOL
+03D8 ; Changes_When_Lowercased # L& GREEK LETTER ARCHAIC KOPPA
+03DA ; Changes_When_Lowercased # L& GREEK LETTER STIGMA
+03DC ; Changes_When_Lowercased # L& GREEK LETTER DIGAMMA
+03DE ; Changes_When_Lowercased # L& GREEK LETTER KOPPA
+03E0 ; Changes_When_Lowercased # L& GREEK LETTER SAMPI
+03E2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SHEI
+03E4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER FEI
+03E6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KHEI
+03E8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER HORI
+03EA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER GANGIA
+03EC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SHIMA
+03EE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DEI
+03F4 ; Changes_When_Lowercased # L& GREEK CAPITAL THETA SYMBOL
+03F7 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER SHO
+03F9..03FA ; Changes_When_Lowercased # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F ; Changes_When_Lowercased # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER OMEGA
+0462 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YAT
+0464 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED E
+0466 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER LITTLE YUS
+0468 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BIG YUS
+046C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KSI
+0470 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER PSI
+0472 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER FITA
+0474 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IZHITSA
+0476 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER UK
+047A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER OT
+0480 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOPPA
+048A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ER WITH TICK
+0490 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LIGATURE EN GHE
+04A6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LIGATURE TE TSE
+04B6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHHA
+04BC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1 ; Changes_When_Lowercased # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LIGATURE A IE
+04D6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SCHWA
+04DA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BARRED O
+04EA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI DE
+0502 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI DJE
+0504 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI ZJE
+0506 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI DZJE
+0508 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI LJE
+050A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI NJE
+050C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI SJE
+050E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI TJE
+0510 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED ZE
+0512 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER LHA
+0516 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER RHA
+0518 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YAE
+051A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER QA
+051C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER WE
+051E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ALEUT KA
+0520 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZZHE
+052C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DCHE
+052E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531..0556 ; Changes_When_Lowercased # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+10A0..10C5 ; Changes_When_Lowercased # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Changes_When_Lowercased # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Changes_When_Lowercased # L& GEORGIAN CAPITAL LETTER AEN
+13A0..13F5 ; Changes_When_Lowercased # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+1C90..1CBA ; Changes_When_Lowercased # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Changes_When_Lowercased # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1E00 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH RING BELOW
+1E02 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH CEDILLA
+1E12 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH MACRON
+1E22 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH ACUTE
+1E32 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER M WITH ACUTE
+1E40 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH ACUTE
+1E56 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER V WITH TILDE
+1E7E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH GRAVE
+1E82 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH ACUTE
+1E84 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SHARP S
+1EA0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH TILDE
+1EBE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH TILDE
+1EFA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D ; Changes_When_Lowercased # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D ; Changes_When_Lowercased # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F88..1F8F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F98..1F9F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA8..1FAF ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB8..1FBC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC8..1FCC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD8..1FDB ; Changes_When_Lowercased # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE8..1FEC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF8..1FFC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126 ; Changes_When_Lowercased # L& OHM SIGN
+212A..212B ; Changes_When_Lowercased # L& [2] KELVIN SIGN..ANGSTROM SIGN
+2132 ; Changes_When_Lowercased # L& TURNED CAPITAL F
+2160..216F ; Changes_When_Lowercased # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+2183 ; Changes_When_Lowercased # L& ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6..24CF ; Changes_When_Lowercased # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+2C00..2C2F ; Changes_When_Lowercased # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+2C60 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DESCENDER
+2C69 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH HOOK
+2C75 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER HALF H
+2C7E..2C80 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER VIDA
+2C84 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER GAMMA
+2C86 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DALDA
+2C88 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER EIE
+2C8A ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SOU
+2C8C ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER ZATA
+2C8E ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER HATE
+2C90 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER THETHE
+2C92 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER IAUDA
+2C94 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KAPA
+2C96 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER LAULA
+2C98 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER MI
+2C9A ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER NI
+2C9C ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KSI
+2C9E ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER O
+2CA0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER PI
+2CA2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER RO
+2CA4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SIMA
+2CA6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER TAU
+2CA8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER UA
+2CAA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER FI
+2CAC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KHI
+2CAE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER PSI
+2CB0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OOU
+2CB2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SAMPI
+2CC2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI
+A640 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZEMLYA
+A642 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZELO
+A644 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED DZE
+A646 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTA
+A648 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DJERV
+A64A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED YU
+A656 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED A
+A658 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YN
+A660 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED TSE
+A662 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SOFT DE
+A664 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SOFT EL
+A666 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SOFT EM
+A668 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DWE
+A682 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZWE
+A684 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZHWE
+A686 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CCHE
+A688 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZZE
+A68A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TWE
+A68E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TSWE
+A690 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TSSE
+A692 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TCHE
+A694 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HWE
+A696 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHWE
+A698 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DOUBLE O
+A69A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CROSSED O
+A722 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER HENG
+A728 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TZ
+A72A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TRESILLO
+A72C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CUATRILLO
+A72E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AA
+A734 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AO
+A736 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AU
+A738 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AV
+A73A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AY
+A73E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH STROKE
+A742 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER BROKEN L
+A748 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH LOOP
+A74E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OO
+A750 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH FLOURISH
+A754 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R ROTUNDA
+A75C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER RUM ROTUNDA
+A75E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VY
+A762 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VISIGOTHIC Z
+A764 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER THORN WITH STROKE
+A766 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VEND
+A76A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ET
+A76C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER IS
+A76E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CON
+A779 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR D
+A77B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR F
+A77D..A77E ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TURNED L
+A782 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR R
+A784 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR S
+A786 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR T
+A78B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SALTILLO
+A78D ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TURNED H
+A790 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH DESCENDER
+A792 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH BAR
+A796 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH FLOURISH
+A798 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER F WITH STROKE
+A79A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VOLAPUK AE
+A79C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VOLAPUK OE
+A79E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VOLAPUK UE
+A7A0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA..A7AE ; Changes_When_Lowercased # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0..A7B4 ; Changes_When_Lowercased # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
+A7B6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OMEGA
+A7B8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH STROKE
+A7BA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL A
+A7BC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL I
+A7BE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL U
+A7C0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OLD POLISH O
+A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICANA W
+A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G
+A7D6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE SCOTS S
+A7D8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SIGMOID S
+A7F5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED HALF H
+FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+10400..10427 ; Changes_When_Lowercased # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+104B0..104D3 ; Changes_When_Lowercased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+10570..1057A ; Changes_When_Lowercased # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Changes_When_Lowercased # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Changes_When_Lowercased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Changes_When_Lowercased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10C80..10CB2 ; Changes_When_Lowercased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+118A0..118BF ; Changes_When_Lowercased # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
+16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
+1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
+
+# Total code points: 1433
+
+# ================================================
+
+# Derived Property: Changes_When_Uppercased (CWU)
+# Characters whose normalized forms are not stable under a toUppercase mapping.
+# For more information, see D140 in Section 3.13, "Default Case Algorithms".
+# Changes_When_Uppercased(X) is true when toUppercase(toNFD(X)) != toNFD(X)
+
+0061..007A ; Changes_When_Uppercased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B5 ; Changes_When_Uppercased # L& MICRO SIGN
+00DF..00F6 ; Changes_When_Uppercased # L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..00FF ; Changes_When_Uppercased # L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0101 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH MACRON
+0103 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE
+0105 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH OGONEK
+0107 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH ACUTE
+0109 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH DOT ABOVE
+010D ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH CARON
+010F ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH CARON
+0111 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH STROKE
+0113 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH MACRON
+0115 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH BREVE
+0117 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH DOT ABOVE
+0119 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH OGONEK
+011B ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CARON
+011D ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH CIRCUMFLEX
+011F ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH BREVE
+0121 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH DOT ABOVE
+0123 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH CEDILLA
+0125 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH CIRCUMFLEX
+0127 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH STROKE
+0129 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH TILDE
+012B ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH MACRON
+012D ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH BREVE
+012F ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH OGONEK
+0131 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOTLESS I
+0133 ; Changes_When_Uppercased # L& LATIN SMALL LIGATURE IJ
+0135 ; Changes_When_Uppercased # L& LATIN SMALL LETTER J WITH CIRCUMFLEX
+0137 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH CEDILLA
+013A ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH ACUTE
+013C ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH CEDILLA
+013E ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH CARON
+0140 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH MIDDLE DOT
+0142 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH STROKE
+0144 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH ACUTE
+0146 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH CEDILLA
+0148..0149 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014B ; Changes_When_Uppercased # L& LATIN SMALL LETTER ENG
+014D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH MACRON
+014F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH BREVE
+0151 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0153 ; Changes_When_Uppercased # L& LATIN SMALL LIGATURE OE
+0155 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH ACUTE
+0157 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH CEDILLA
+0159 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH CARON
+015B ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH ACUTE
+015D ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CIRCUMFLEX
+015F ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CEDILLA
+0161 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CARON
+0163 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH CEDILLA
+0165 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH CARON
+0167 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH STROKE
+0169 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH TILDE
+016B ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH MACRON
+016D ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH BREVE
+016F ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH RING ABOVE
+0171 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0173 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH OGONEK
+0175 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH CIRCUMFLEX
+0177 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH CIRCUMFLEX
+017A ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH ACUTE
+017C ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH DOT ABOVE
+017E..0180 ; Changes_When_Uppercased # L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+0183 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH TOPBAR
+0185 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TONE SIX
+0188 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH HOOK
+018C ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH TOPBAR
+0192 ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH HOOK
+0195 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HV
+0199..019A ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR
+019E ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG
+01A1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN
+01A3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OI
+01A5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH HOOK
+01A8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TONE TWO
+01AD ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH HOOK
+01B0 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN
+01B4 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH HOOK
+01B6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH STROKE
+01B9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EZH REVERSED
+01BD ; Changes_When_Uppercased # L& LATIN SMALL LETTER TONE FIVE
+01BF ; Changes_When_Uppercased # L& LATIN LETTER WYNN
+01C5..01C6 ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON..LATIN SMALL LETTER DZ WITH CARON
+01C8..01C9 ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER L WITH SMALL LETTER J..LATIN SMALL LETTER LJ
+01CB..01CC ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER N WITH SMALL LETTER J..LATIN SMALL LETTER NJ
+01CE ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CARON
+01D0 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH CARON
+01D2 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CARON
+01D4 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH CARON
+01D6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01DA ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DC..01DD ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+01DF ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AE WITH MACRON
+01E5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH STROKE
+01E7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH CARON
+01E9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH CARON
+01EB ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH OGONEK
+01ED ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EF..01F0 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F2..01F3 ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z..LATIN SMALL LETTER DZ
+01F5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH ACUTE
+01F9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH GRAVE
+01FB ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FD ; Changes_When_Uppercased # L& LATIN SMALL LETTER AE WITH ACUTE
+01FF ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0201 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0203 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH INVERTED BREVE
+0205 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0207 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH INVERTED BREVE
+0209 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020B ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH INVERTED BREVE
+020D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH INVERTED BREVE
+0211 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0213 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH INVERTED BREVE
+0215 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0217 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH INVERTED BREVE
+0219 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH COMMA BELOW
+021B ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH COMMA BELOW
+021D ; Changes_When_Uppercased # L& LATIN SMALL LETTER YOGH
+021F ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH CARON
+0223 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OU
+0225 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH HOOK
+0227 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOT ABOVE
+0229 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CEDILLA
+022B ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH TILDE AND MACRON
+022F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOT ABOVE
+0231 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0233 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH MACRON
+023C ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH STROKE
+023F..0240 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+0242 ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL STOP
+0247 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH STROKE
+0249 ; Changes_When_Uppercased # L& LATIN SMALL LETTER J WITH STROKE
+024B ; Changes_When_Uppercased # L& LATIN SMALL LETTER Q WITH HOOK TAIL
+024D ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH STROKE
+024F..0254 ; Changes_When_Uppercased # L& [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O
+0256..0257 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+0259 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SCHWA
+025B..025C ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E
+0260..0261 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G
+0263 ; Changes_When_Uppercased # L& LATIN SMALL LETTER GAMMA
+0265..0266 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK
+0268..026C ; Changes_When_Uppercased # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT
+026F ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED M
+0271..0272 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK
+0275 ; Changes_When_Uppercased # L& LATIN SMALL LETTER BARRED O
+027D ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH TAIL
+0280 ; Changes_When_Uppercased # L& LATIN LETTER SMALL CAPITAL R
+0282..0283 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH
+0287..028C ; Changes_When_Uppercased # L& [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V
+0292 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EZH
+029D..029E ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K
+0345 ; Changes_When_Uppercased # Mn COMBINING GREEK YPOGEGRAMMENI
+0371 ; Changes_When_Uppercased # L& GREEK SMALL LETTER HETA
+0373 ; Changes_When_Uppercased # L& GREEK SMALL LETTER ARCHAIC SAMPI
+0377 ; Changes_When_Uppercased # L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D ; Changes_When_Uppercased # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0390 ; Changes_When_Uppercased # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AC..03CE ; Changes_When_Uppercased # L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D1 ; Changes_When_Uppercased # L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+03D5..03D7 ; Changes_When_Uppercased # L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+03D9 ; Changes_When_Uppercased # L& GREEK SMALL LETTER ARCHAIC KOPPA
+03DB ; Changes_When_Uppercased # L& GREEK SMALL LETTER STIGMA
+03DD ; Changes_When_Uppercased # L& GREEK SMALL LETTER DIGAMMA
+03DF ; Changes_When_Uppercased # L& GREEK SMALL LETTER KOPPA
+03E1 ; Changes_When_Uppercased # L& GREEK SMALL LETTER SAMPI
+03E3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SHEI
+03E5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER FEI
+03E7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KHEI
+03E9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER HORI
+03EB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER GANGIA
+03ED ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SHIMA
+03EF..03F3 ; Changes_When_Uppercased # L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT
+03F5 ; Changes_When_Uppercased # L& GREEK LUNATE EPSILON SYMBOL
+03F8 ; Changes_When_Uppercased # L& GREEK SMALL LETTER SHO
+03FB ; Changes_When_Uppercased # L& GREEK SMALL LETTER SAN
+0430..045F ; Changes_When_Uppercased # L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+0461 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER OMEGA
+0463 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YAT
+0465 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED E
+0467 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER LITTLE YUS
+0469 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BIG YUS
+046D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KSI
+0471 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER PSI
+0473 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER FITA
+0475 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IZHITSA
+0477 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0479 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER UK
+047B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ROUND OMEGA
+047D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER OT
+0481 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOPPA
+048B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SEMISOFT SIGN
+048F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ER WITH TICK
+0491 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH UPTURN
+0493 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH STROKE
+0495 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0497 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0499 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH DESCENDER
+049D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH STROKE
+04A1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BASHKIR KA
+04A3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LIGATURE EN GHE
+04A7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN HA
+04AB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER STRAIGHT U
+04B1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LIGATURE TE TSE
+04B7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHHA
+04BD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C2 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C4 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH HOOK
+04C6 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH TAIL
+04C8 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH HOOK
+04CA ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH TAIL
+04CC ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CE..04CF ; Changes_When_Uppercased # L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+04D1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER A WITH BREVE
+04D3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LIGATURE A IE
+04D7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IE WITH BREVE
+04D9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SCHWA
+04DB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER I WITH MACRON
+04E5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BARRED O
+04EB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04ED ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER U WITH MACRON
+04F1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HA WITH HOOK
+04FF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HA WITH STROKE
+0501 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI DE
+0503 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI DJE
+0505 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI ZJE
+0507 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI DZJE
+0509 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI LJE
+050B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI NJE
+050D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI SJE
+050F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI TJE
+0511 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED ZE
+0513 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH HOOK
+0515 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER LHA
+0517 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER RHA
+0519 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YAE
+051B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER QA
+051D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER WE
+051F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ALEUT KA
+0521 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0523 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0525 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER PE WITH DESCENDER
+0527 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0529 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+052B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZZHE
+052D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DCHE
+052F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH DESCENDER
+0561..0587 ; Changes_When_Uppercased # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+10D0..10FA ; Changes_When_Uppercased # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FD..10FF ; Changes_When_Uppercased # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+13F8..13FD ; Changes_When_Uppercased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Changes_When_Uppercased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1D79 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR G
+1D7D ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH STROKE
+1D8E ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH PALATAL HOOK
+1E01 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH RING BELOW
+1E03 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH DOT ABOVE
+1E05 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH DOT BELOW
+1E07 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH LINE BELOW
+1E09 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0B ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH DOT ABOVE
+1E0D ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH DOT BELOW
+1E0F ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH LINE BELOW
+1E11 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH CEDILLA
+1E13 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E15 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E17 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E19 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1B ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH TILDE BELOW
+1E1D ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1F ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH DOT ABOVE
+1E21 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH MACRON
+1E23 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DOT ABOVE
+1E25 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DOT BELOW
+1E27 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DIAERESIS
+1E29 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH CEDILLA
+1E2B ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH BREVE BELOW
+1E2D ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH TILDE BELOW
+1E2F ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E31 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH ACUTE
+1E33 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH DOT BELOW
+1E35 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH LINE BELOW
+1E37 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOT BELOW
+1E39 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3B ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH LINE BELOW
+1E3D ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3F ; Changes_When_Uppercased # L& LATIN SMALL LETTER M WITH ACUTE
+1E41 ; Changes_When_Uppercased # L& LATIN SMALL LETTER M WITH DOT ABOVE
+1E43 ; Changes_When_Uppercased # L& LATIN SMALL LETTER M WITH DOT BELOW
+1E45 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH DOT ABOVE
+1E47 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH DOT BELOW
+1E49 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH LINE BELOW
+1E4B ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E51 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E55 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH ACUTE
+1E57 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH DOT ABOVE
+1E59 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOT ABOVE
+1E5B ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOT BELOW
+1E5D ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5F ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH LINE BELOW
+1E61 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DOT ABOVE
+1E63 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DOT BELOW
+1E65 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E67 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E69 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6B ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH DOT ABOVE
+1E6D ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH DOT BELOW
+1E6F ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH LINE BELOW
+1E71 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E73 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E75 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH TILDE BELOW
+1E77 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E79 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7B ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7D ; Changes_When_Uppercased # L& LATIN SMALL LETTER V WITH TILDE
+1E7F ; Changes_When_Uppercased # L& LATIN SMALL LETTER V WITH DOT BELOW
+1E81 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH GRAVE
+1E83 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH ACUTE
+1E85 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH DIAERESIS
+1E87 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH DOT ABOVE
+1E89 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH DOT BELOW
+1E8B ; Changes_When_Uppercased # L& LATIN SMALL LETTER X WITH DOT ABOVE
+1E8D ; Changes_When_Uppercased # L& LATIN SMALL LETTER X WITH DIAERESIS
+1E8F ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH DOT ABOVE
+1E91 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E93 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH DOT BELOW
+1E95..1E9B ; Changes_When_Uppercased # L& [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOT BELOW
+1EA3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAB ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAD ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAF ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH DOT BELOW
+1EBB ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBD ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH TILDE
+1EBF ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECB ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH DOT BELOW
+1ECD ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOT BELOW
+1ECF ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDB ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDD ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDF ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DOT BELOW
+1EE7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEB ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EED ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEF ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH GRAVE
+1EF5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH DOT BELOW
+1EF7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH TILDE
+1EFB ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFD ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE-WELSH V
+1EFF..1F07 ; Changes_When_Uppercased # L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10..1F15 ; Changes_When_Uppercased # L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F27 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30..1F37 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40..1F45 ; Changes_When_Uppercased # L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60..1F67 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70..1F7D ; Changes_When_Uppercased # L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Changes_When_Uppercased # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FB7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FBC ; Changes_When_Uppercased # L& GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; Changes_When_Uppercased # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; Changes_When_Uppercased # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FCC ; Changes_When_Uppercased # L& GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; Changes_When_Uppercased # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FD7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE0..1FE7 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF2..1FF4 ; Changes_When_Uppercased # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FFC ; Changes_When_Uppercased # L& GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+214E ; Changes_When_Uppercased # L& TURNED SMALL F
+2170..217F ; Changes_When_Uppercased # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2184 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED C
+24D0..24E9 ; Changes_When_Uppercased # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C30..2C5F ; Changes_When_Uppercased # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
+2C61 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOUBLE BAR
+2C65..2C66 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C68 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DESCENDER
+2C6A ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH DESCENDER
+2C6C ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH DESCENDER
+2C73 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH HOOK
+2C76 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HALF H
+2C81 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER ALFA
+2C83 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER VIDA
+2C85 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER GAMMA
+2C87 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DALDA
+2C89 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER EIE
+2C8B ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SOU
+2C8D ; Changes_When_Uppercased # L& COPTIC SMALL LETTER ZATA
+2C8F ; Changes_When_Uppercased # L& COPTIC SMALL LETTER HATE
+2C91 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER THETHE
+2C93 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER IAUDA
+2C95 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KAPA
+2C97 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER LAULA
+2C99 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER MI
+2C9B ; Changes_When_Uppercased # L& COPTIC SMALL LETTER NI
+2C9D ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KSI
+2C9F ; Changes_When_Uppercased # L& COPTIC SMALL LETTER O
+2CA1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER PI
+2CA3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER RO
+2CA5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SIMA
+2CA7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER TAU
+2CA9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER UA
+2CAB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER FI
+2CAD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KHI
+2CAF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER PSI
+2CB1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OOU
+2CB3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P ALEF
+2CB5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC AIN
+2CB7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P KAPA
+2CBB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P NI
+2CBD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC OOU
+2CC1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SAMPI
+2CC3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CROSSED SHEI
+2CC5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC ESH
+2CC9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P HORI
+2CCD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HORI
+2CCF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HA
+2CD1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER L-SHAPED HA
+2CD3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HEI
+2CD5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HAT
+2CD7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC DJA
+2CDB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN WAU
+2CEC ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEE ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; Changes_When_Uppercased # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Changes_When_Uppercased # L& GEORGIAN SMALL LETTER YN
+2D2D ; Changes_When_Uppercased # L& GEORGIAN SMALL LETTER AEN
+A641 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZEMLYA
+A643 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZELO
+A645 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED DZE
+A647 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTA
+A649 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DJERV
+A64B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER MONOGRAPH UK
+A64D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BROAD OMEGA
+A64F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER NEUTRAL YER
+A651 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YERU WITH BACK YER
+A653 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED YAT
+A655 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED YU
+A657 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED A
+A659 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BLENDED YUS
+A65D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YN
+A661 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED TSE
+A663 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SOFT DE
+A665 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SOFT EL
+A667 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SOFT EM
+A669 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER MONOCULAR O
+A66B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BINOCULAR O
+A66D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A681 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DWE
+A683 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZWE
+A685 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHWE
+A687 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CCHE
+A689 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZZE
+A68B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TWE
+A68F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TSWE
+A691 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TSSE
+A693 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TCHE
+A695 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HWE
+A697 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHWE
+A699 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DOUBLE O
+A69B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CROSSED O
+A723 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A725 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A727 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HENG
+A729 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TZ
+A72B ; Changes_When_Uppercased # L& LATIN SMALL LETTER TRESILLO
+A72D ; Changes_When_Uppercased # L& LATIN SMALL LETTER CUATRILLO
+A72F ; Changes_When_Uppercased # L& LATIN SMALL LETTER CUATRILLO WITH COMMA
+A733 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AA
+A735 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AO
+A737 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AU
+A739 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AV
+A73B ; Changes_When_Uppercased # L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73D ; Changes_When_Uppercased # L& LATIN SMALL LETTER AY
+A73F ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED C WITH DOT
+A741 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH STROKE
+A743 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A745 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A747 ; Changes_When_Uppercased # L& LATIN SMALL LETTER BROKEN L
+A749 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH HIGH STROKE
+A74B ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH LOOP
+A74F ; Changes_When_Uppercased # L& LATIN SMALL LETTER OO
+A751 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A753 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH FLOURISH
+A755 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A757 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A759 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75B ; Changes_When_Uppercased # L& LATIN SMALL LETTER R ROTUNDA
+A75D ; Changes_When_Uppercased # L& LATIN SMALL LETTER RUM ROTUNDA
+A75F ; Changes_When_Uppercased # L& LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A761 ; Changes_When_Uppercased # L& LATIN SMALL LETTER VY
+A763 ; Changes_When_Uppercased # L& LATIN SMALL LETTER VISIGOTHIC Z
+A765 ; Changes_When_Uppercased # L& LATIN SMALL LETTER THORN WITH STROKE
+A767 ; Changes_When_Uppercased # L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A769 ; Changes_When_Uppercased # L& LATIN SMALL LETTER VEND
+A76B ; Changes_When_Uppercased # L& LATIN SMALL LETTER ET
+A76D ; Changes_When_Uppercased # L& LATIN SMALL LETTER IS
+A76F ; Changes_When_Uppercased # L& LATIN SMALL LETTER CON
+A77A ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR D
+A77C ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR F
+A77F ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED INSULAR G
+A781 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED L
+A783 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR R
+A785 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR S
+A787 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR T
+A78C ; Changes_When_Uppercased # L& LATIN SMALL LETTER SALTILLO
+A791 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH DESCENDER
+A793..A794 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER C WITH PALATAL HOOK
+A797 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH FLOURISH
+A799 ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH STROKE
+A79B ; Changes_When_Uppercased # L& LATIN SMALL LETTER VOLAPUK AE
+A79D ; Changes_When_Uppercased # L& LATIN SMALL LETTER VOLAPUK OE
+A79F ; Changes_When_Uppercased # L& LATIN SMALL LETTER VOLAPUK UE
+A7A1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH OBLIQUE STROKE
+A7A3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH OBLIQUE STROKE
+A7A5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH OBLIQUE STROKE
+A7A7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH OBLIQUE STROKE
+A7A9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH OBLIQUE STROKE
+A7B5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER BETA
+A7B7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OMEGA
+A7B9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH STROKE
+A7BB ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL A
+A7BD ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL I
+A7BF ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL U
+A7C1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OLD POLISH O
+A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G
+A7D7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE SCOTS S
+A7D9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SIGMOID S
+A7F6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED HALF H
+AB53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CHI
+AB70..ABBF ; Changes_When_Uppercased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+FB00..FB06 ; Changes_When_Uppercased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Changes_When_Uppercased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10428..1044F ; Changes_When_Uppercased # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+104D8..104FB ; Changes_When_Uppercased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10597..105A1 ; Changes_When_Uppercased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Changes_When_Uppercased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Changes_When_Uppercased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Changes_When_Uppercased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10CC0..10CF2 ; Changes_When_Uppercased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+118C0..118DF ; Changes_When_Uppercased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
+
+# Total code points: 1525
+
+# ================================================
+
+# Derived Property: Changes_When_Titlecased (CWT)
+# Characters whose normalized forms are not stable under a toTitlecase mapping.
+# For more information, see D141 in Section 3.13, "Default Case Algorithms".
+# Changes_When_Titlecased(X) is true when toTitlecase(toNFD(X)) != toNFD(X)
+
+0061..007A ; Changes_When_Titlecased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B5 ; Changes_When_Titlecased # L& MICRO SIGN
+00DF..00F6 ; Changes_When_Titlecased # L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..00FF ; Changes_When_Titlecased # L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+0101 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH MACRON
+0103 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE
+0105 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH OGONEK
+0107 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH ACUTE
+0109 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH CIRCUMFLEX
+010B ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH DOT ABOVE
+010D ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH CARON
+010F ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH CARON
+0111 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH STROKE
+0113 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH MACRON
+0115 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH BREVE
+0117 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH DOT ABOVE
+0119 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH OGONEK
+011B ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CARON
+011D ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH CIRCUMFLEX
+011F ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH BREVE
+0121 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH DOT ABOVE
+0123 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH CEDILLA
+0125 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH CIRCUMFLEX
+0127 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH STROKE
+0129 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH TILDE
+012B ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH MACRON
+012D ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH BREVE
+012F ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH OGONEK
+0131 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOTLESS I
+0133 ; Changes_When_Titlecased # L& LATIN SMALL LIGATURE IJ
+0135 ; Changes_When_Titlecased # L& LATIN SMALL LETTER J WITH CIRCUMFLEX
+0137 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH CEDILLA
+013A ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH ACUTE
+013C ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH CEDILLA
+013E ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH CARON
+0140 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH MIDDLE DOT
+0142 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH STROKE
+0144 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH ACUTE
+0146 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH CEDILLA
+0148..0149 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014B ; Changes_When_Titlecased # L& LATIN SMALL LETTER ENG
+014D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH MACRON
+014F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH BREVE
+0151 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0153 ; Changes_When_Titlecased # L& LATIN SMALL LIGATURE OE
+0155 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH ACUTE
+0157 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH CEDILLA
+0159 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH CARON
+015B ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH ACUTE
+015D ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CIRCUMFLEX
+015F ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CEDILLA
+0161 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CARON
+0163 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH CEDILLA
+0165 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH CARON
+0167 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH STROKE
+0169 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH TILDE
+016B ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH MACRON
+016D ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH BREVE
+016F ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH RING ABOVE
+0171 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0173 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH OGONEK
+0175 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH CIRCUMFLEX
+0177 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH CIRCUMFLEX
+017A ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH ACUTE
+017C ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH DOT ABOVE
+017E..0180 ; Changes_When_Titlecased # L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+0183 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH TOPBAR
+0185 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TONE SIX
+0188 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH HOOK
+018C ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH TOPBAR
+0192 ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH HOOK
+0195 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HV
+0199..019A ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR
+019E ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG
+01A1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN
+01A3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OI
+01A5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH HOOK
+01A8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TONE TWO
+01AD ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH HOOK
+01B0 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN
+01B4 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH HOOK
+01B6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH STROKE
+01B9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EZH REVERSED
+01BD ; Changes_When_Titlecased # L& LATIN SMALL LETTER TONE FIVE
+01BF ; Changes_When_Titlecased # L& LATIN LETTER WYNN
+01C4 ; Changes_When_Titlecased # L& LATIN CAPITAL LETTER DZ WITH CARON
+01C6..01C7 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER DZ WITH CARON..LATIN CAPITAL LETTER LJ
+01C9..01CA ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER LJ..LATIN CAPITAL LETTER NJ
+01CC ; Changes_When_Titlecased # L& LATIN SMALL LETTER NJ
+01CE ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CARON
+01D0 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH CARON
+01D2 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CARON
+01D4 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH CARON
+01D6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+01D8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+01DA ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+01DC..01DD ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+01DF ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+01E1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+01E3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AE WITH MACRON
+01E5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH STROKE
+01E7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH CARON
+01E9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH CARON
+01EB ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH OGONEK
+01ED ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH OGONEK AND MACRON
+01EF..01F1 ; Changes_When_Titlecased # L& [3] LATIN SMALL LETTER EZH WITH CARON..LATIN CAPITAL LETTER DZ
+01F3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DZ
+01F5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH ACUTE
+01F9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH GRAVE
+01FB ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+01FD ; Changes_When_Titlecased # L& LATIN SMALL LETTER AE WITH ACUTE
+01FF ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH STROKE AND ACUTE
+0201 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOUBLE GRAVE
+0203 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH INVERTED BREVE
+0205 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH DOUBLE GRAVE
+0207 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH INVERTED BREVE
+0209 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH DOUBLE GRAVE
+020B ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH INVERTED BREVE
+020D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOUBLE GRAVE
+020F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH INVERTED BREVE
+0211 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOUBLE GRAVE
+0213 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH INVERTED BREVE
+0215 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DOUBLE GRAVE
+0217 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH INVERTED BREVE
+0219 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH COMMA BELOW
+021B ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH COMMA BELOW
+021D ; Changes_When_Titlecased # L& LATIN SMALL LETTER YOGH
+021F ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH CARON
+0223 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OU
+0225 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH HOOK
+0227 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOT ABOVE
+0229 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CEDILLA
+022B ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+022D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH TILDE AND MACRON
+022F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOT ABOVE
+0231 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+0233 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH MACRON
+023C ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH STROKE
+023F..0240 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+0242 ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL STOP
+0247 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH STROKE
+0249 ; Changes_When_Titlecased # L& LATIN SMALL LETTER J WITH STROKE
+024B ; Changes_When_Titlecased # L& LATIN SMALL LETTER Q WITH HOOK TAIL
+024D ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH STROKE
+024F..0254 ; Changes_When_Titlecased # L& [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O
+0256..0257 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+0259 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SCHWA
+025B..025C ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E
+0260..0261 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G
+0263 ; Changes_When_Titlecased # L& LATIN SMALL LETTER GAMMA
+0265..0266 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK
+0268..026C ; Changes_When_Titlecased # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT
+026F ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED M
+0271..0272 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK
+0275 ; Changes_When_Titlecased # L& LATIN SMALL LETTER BARRED O
+027D ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH TAIL
+0280 ; Changes_When_Titlecased # L& LATIN LETTER SMALL CAPITAL R
+0282..0283 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH
+0287..028C ; Changes_When_Titlecased # L& [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V
+0292 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EZH
+029D..029E ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K
+0345 ; Changes_When_Titlecased # Mn COMBINING GREEK YPOGEGRAMMENI
+0371 ; Changes_When_Titlecased # L& GREEK SMALL LETTER HETA
+0373 ; Changes_When_Titlecased # L& GREEK SMALL LETTER ARCHAIC SAMPI
+0377 ; Changes_When_Titlecased # L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D ; Changes_When_Titlecased # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0390 ; Changes_When_Titlecased # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AC..03CE ; Changes_When_Titlecased # L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D1 ; Changes_When_Titlecased # L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+03D5..03D7 ; Changes_When_Titlecased # L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+03D9 ; Changes_When_Titlecased # L& GREEK SMALL LETTER ARCHAIC KOPPA
+03DB ; Changes_When_Titlecased # L& GREEK SMALL LETTER STIGMA
+03DD ; Changes_When_Titlecased # L& GREEK SMALL LETTER DIGAMMA
+03DF ; Changes_When_Titlecased # L& GREEK SMALL LETTER KOPPA
+03E1 ; Changes_When_Titlecased # L& GREEK SMALL LETTER SAMPI
+03E3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SHEI
+03E5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER FEI
+03E7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KHEI
+03E9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER HORI
+03EB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER GANGIA
+03ED ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SHIMA
+03EF..03F3 ; Changes_When_Titlecased # L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT
+03F5 ; Changes_When_Titlecased # L& GREEK LUNATE EPSILON SYMBOL
+03F8 ; Changes_When_Titlecased # L& GREEK SMALL LETTER SHO
+03FB ; Changes_When_Titlecased # L& GREEK SMALL LETTER SAN
+0430..045F ; Changes_When_Titlecased # L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+0461 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER OMEGA
+0463 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YAT
+0465 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED E
+0467 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER LITTLE YUS
+0469 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+046B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BIG YUS
+046D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+046F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KSI
+0471 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER PSI
+0473 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER FITA
+0475 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IZHITSA
+0477 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0479 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER UK
+047B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ROUND OMEGA
+047D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER OMEGA WITH TITLO
+047F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER OT
+0481 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOPPA
+048B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SEMISOFT SIGN
+048F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ER WITH TICK
+0491 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH UPTURN
+0493 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH STROKE
+0495 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+0497 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+0499 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZE WITH DESCENDER
+049B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH DESCENDER
+049D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+049F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH STROKE
+04A1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BASHKIR KA
+04A3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH DESCENDER
+04A5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LIGATURE EN GHE
+04A7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+04A9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN HA
+04AB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ES WITH DESCENDER
+04AD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TE WITH DESCENDER
+04AF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER STRAIGHT U
+04B1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+04B3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HA WITH DESCENDER
+04B5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LIGATURE TE TSE
+04B7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CHE WITH DESCENDER
+04B9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+04BB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHHA
+04BD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE
+04BF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+04C2 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHE WITH BREVE
+04C4 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH HOOK
+04C6 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH TAIL
+04C8 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH HOOK
+04CA ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH TAIL
+04CC ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CE..04CF ; Changes_When_Titlecased # L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+04D1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER A WITH BREVE
+04D3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LIGATURE A IE
+04D7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IE WITH BREVE
+04D9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SCHWA
+04DB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+04DD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+04DF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN DZE
+04E3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER I WITH MACRON
+04E5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER I WITH DIAERESIS
+04E7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER O WITH DIAERESIS
+04E9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BARRED O
+04EB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04ED ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER U WITH MACRON
+04F1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER U WITH DIAERESIS
+04F3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+04F5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+04FD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HA WITH HOOK
+04FF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HA WITH STROKE
+0501 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI DE
+0503 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI DJE
+0505 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI ZJE
+0507 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI DZJE
+0509 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI LJE
+050B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI NJE
+050D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI SJE
+050F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI TJE
+0511 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED ZE
+0513 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH HOOK
+0515 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER LHA
+0517 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER RHA
+0519 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YAE
+051B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER QA
+051D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER WE
+051F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ALEUT KA
+0521 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+0523 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0525 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER PE WITH DESCENDER
+0527 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0529 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+052B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZZHE
+052D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DCHE
+052F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH DESCENDER
+0561..0587 ; Changes_When_Titlecased # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+13F8..13FD ; Changes_When_Titlecased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Changes_When_Titlecased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1D79 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR G
+1D7D ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH STROKE
+1D8E ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH PALATAL HOOK
+1E01 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH RING BELOW
+1E03 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH DOT ABOVE
+1E05 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH DOT BELOW
+1E07 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH LINE BELOW
+1E09 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+1E0B ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH DOT ABOVE
+1E0D ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH DOT BELOW
+1E0F ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH LINE BELOW
+1E11 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH CEDILLA
+1E13 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+1E15 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH MACRON AND GRAVE
+1E17 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH MACRON AND ACUTE
+1E19 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+1E1B ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH TILDE BELOW
+1E1D ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+1E1F ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH DOT ABOVE
+1E21 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH MACRON
+1E23 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DOT ABOVE
+1E25 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DOT BELOW
+1E27 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DIAERESIS
+1E29 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH CEDILLA
+1E2B ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH BREVE BELOW
+1E2D ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH TILDE BELOW
+1E2F ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+1E31 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH ACUTE
+1E33 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH DOT BELOW
+1E35 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH LINE BELOW
+1E37 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOT BELOW
+1E39 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+1E3B ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH LINE BELOW
+1E3D ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+1E3F ; Changes_When_Titlecased # L& LATIN SMALL LETTER M WITH ACUTE
+1E41 ; Changes_When_Titlecased # L& LATIN SMALL LETTER M WITH DOT ABOVE
+1E43 ; Changes_When_Titlecased # L& LATIN SMALL LETTER M WITH DOT BELOW
+1E45 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH DOT ABOVE
+1E47 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH DOT BELOW
+1E49 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH LINE BELOW
+1E4B ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+1E4D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH TILDE AND ACUTE
+1E4F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+1E51 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH MACRON AND GRAVE
+1E53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH MACRON AND ACUTE
+1E55 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH ACUTE
+1E57 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH DOT ABOVE
+1E59 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOT ABOVE
+1E5B ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOT BELOW
+1E5D ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+1E5F ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH LINE BELOW
+1E61 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DOT ABOVE
+1E63 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DOT BELOW
+1E65 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+1E67 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+1E69 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6B ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH DOT ABOVE
+1E6D ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH DOT BELOW
+1E6F ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH LINE BELOW
+1E71 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+1E73 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS BELOW
+1E75 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH TILDE BELOW
+1E77 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+1E79 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH TILDE AND ACUTE
+1E7B ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+1E7D ; Changes_When_Titlecased # L& LATIN SMALL LETTER V WITH TILDE
+1E7F ; Changes_When_Titlecased # L& LATIN SMALL LETTER V WITH DOT BELOW
+1E81 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH GRAVE
+1E83 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH ACUTE
+1E85 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH DIAERESIS
+1E87 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH DOT ABOVE
+1E89 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH DOT BELOW
+1E8B ; Changes_When_Titlecased # L& LATIN SMALL LETTER X WITH DOT ABOVE
+1E8D ; Changes_When_Titlecased # L& LATIN SMALL LETTER X WITH DIAERESIS
+1E8F ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH DOT ABOVE
+1E91 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH CIRCUMFLEX
+1E93 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH DOT BELOW
+1E95..1E9B ; Changes_When_Titlecased # L& [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOT BELOW
+1EA3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH HOOK ABOVE
+1EA5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAB ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAD ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAF ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND ACUTE
+1EB1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND GRAVE
+1EB3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+1EB5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND TILDE
+1EB7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+1EB9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH DOT BELOW
+1EBB ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH HOOK ABOVE
+1EBD ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH TILDE
+1EBF ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH HOOK ABOVE
+1ECB ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH DOT BELOW
+1ECD ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOT BELOW
+1ECF ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HOOK ABOVE
+1ED1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDB ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND ACUTE
+1EDD ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND GRAVE
+1EDF ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+1EE1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND TILDE
+1EE3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+1EE5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DOT BELOW
+1EE7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HOOK ABOVE
+1EE9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND ACUTE
+1EEB ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND GRAVE
+1EED ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+1EEF ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND TILDE
+1EF1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+1EF3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH GRAVE
+1EF5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH DOT BELOW
+1EF7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH HOOK ABOVE
+1EF9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH TILDE
+1EFB ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE-WELSH LL
+1EFD ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE-WELSH V
+1EFF..1F07 ; Changes_When_Titlecased # L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F10..1F15 ; Changes_When_Titlecased # L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F27 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+1F30..1F37 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F40..1F45 ; Changes_When_Titlecased # L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F60..1F67 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F70..1F7D ; Changes_When_Titlecased # L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1F87 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F90..1F97 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA0..1FA7 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FB0..1FB4 ; Changes_When_Titlecased # L& [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FB7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FBE ; Changes_When_Titlecased # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; Changes_When_Titlecased # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FD0..1FD3 ; Changes_When_Titlecased # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FD7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+1FE0..1FE7 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+1FF2..1FF4 ; Changes_When_Titlecased # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+214E ; Changes_When_Titlecased # L& TURNED SMALL F
+2170..217F ; Changes_When_Titlecased # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2184 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED C
+24D0..24E9 ; Changes_When_Titlecased # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C30..2C5F ; Changes_When_Titlecased # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
+2C61 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOUBLE BAR
+2C65..2C66 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+2C68 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DESCENDER
+2C6A ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH DESCENDER
+2C6C ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH DESCENDER
+2C73 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH HOOK
+2C76 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HALF H
+2C81 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER ALFA
+2C83 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER VIDA
+2C85 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER GAMMA
+2C87 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DALDA
+2C89 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER EIE
+2C8B ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SOU
+2C8D ; Changes_When_Titlecased # L& COPTIC SMALL LETTER ZATA
+2C8F ; Changes_When_Titlecased # L& COPTIC SMALL LETTER HATE
+2C91 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER THETHE
+2C93 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER IAUDA
+2C95 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KAPA
+2C97 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER LAULA
+2C99 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER MI
+2C9B ; Changes_When_Titlecased # L& COPTIC SMALL LETTER NI
+2C9D ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KSI
+2C9F ; Changes_When_Titlecased # L& COPTIC SMALL LETTER O
+2CA1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER PI
+2CA3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER RO
+2CA5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SIMA
+2CA7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER TAU
+2CA9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER UA
+2CAB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER FI
+2CAD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KHI
+2CAF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER PSI
+2CB1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OOU
+2CB3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P ALEF
+2CB5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC AIN
+2CB7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+2CB9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P KAPA
+2CBB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P NI
+2CBD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+2CBF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC OOU
+2CC1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SAMPI
+2CC3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CROSSED SHEI
+2CC5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC SHEI
+2CC7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC ESH
+2CC9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER AKHMIMIC KHEI
+2CCB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P HORI
+2CCD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HORI
+2CCF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HA
+2CD1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER L-SHAPED HA
+2CD3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HEI
+2CD5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HAT
+2CD7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC GANGIA
+2CD9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC DJA
+2CDB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC SHIMA
+2CDD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN SHIMA
+2CDF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN NGI
+2CE1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN NYI
+2CE3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN WAU
+2CEC ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+2CEE ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; Changes_When_Titlecased # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Changes_When_Titlecased # L& GEORGIAN SMALL LETTER YN
+2D2D ; Changes_When_Titlecased # L& GEORGIAN SMALL LETTER AEN
+A641 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZEMLYA
+A643 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZELO
+A645 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED DZE
+A647 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTA
+A649 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DJERV
+A64B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER MONOGRAPH UK
+A64D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BROAD OMEGA
+A64F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER NEUTRAL YER
+A651 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YERU WITH BACK YER
+A653 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED YAT
+A655 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED YU
+A657 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED A
+A659 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+A65B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BLENDED YUS
+A65D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+A65F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YN
+A661 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED TSE
+A663 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SOFT DE
+A665 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SOFT EL
+A667 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SOFT EM
+A669 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER MONOCULAR O
+A66B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BINOCULAR O
+A66D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A681 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DWE
+A683 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZWE
+A685 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHWE
+A687 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CCHE
+A689 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZZE
+A68B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+A68D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TWE
+A68F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TSWE
+A691 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TSSE
+A693 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TCHE
+A695 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HWE
+A697 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHWE
+A699 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DOUBLE O
+A69B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CROSSED O
+A723 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+A725 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EGYPTOLOGICAL AIN
+A727 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HENG
+A729 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TZ
+A72B ; Changes_When_Titlecased # L& LATIN SMALL LETTER TRESILLO
+A72D ; Changes_When_Titlecased # L& LATIN SMALL LETTER CUATRILLO
+A72F ; Changes_When_Titlecased # L& LATIN SMALL LETTER CUATRILLO WITH COMMA
+A733 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AA
+A735 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AO
+A737 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AU
+A739 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AV
+A73B ; Changes_When_Titlecased # L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+A73D ; Changes_When_Titlecased # L& LATIN SMALL LETTER AY
+A73F ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED C WITH DOT
+A741 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH STROKE
+A743 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH DIAGONAL STROKE
+A745 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+A747 ; Changes_When_Titlecased # L& LATIN SMALL LETTER BROKEN L
+A749 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH HIGH STROKE
+A74B ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+A74D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH LOOP
+A74F ; Changes_When_Titlecased # L& LATIN SMALL LETTER OO
+A751 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+A753 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH FLOURISH
+A755 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH SQUIRREL TAIL
+A757 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+A759 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+A75B ; Changes_When_Titlecased # L& LATIN SMALL LETTER R ROTUNDA
+A75D ; Changes_When_Titlecased # L& LATIN SMALL LETTER RUM ROTUNDA
+A75F ; Changes_When_Titlecased # L& LATIN SMALL LETTER V WITH DIAGONAL STROKE
+A761 ; Changes_When_Titlecased # L& LATIN SMALL LETTER VY
+A763 ; Changes_When_Titlecased # L& LATIN SMALL LETTER VISIGOTHIC Z
+A765 ; Changes_When_Titlecased # L& LATIN SMALL LETTER THORN WITH STROKE
+A767 ; Changes_When_Titlecased # L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+A769 ; Changes_When_Titlecased # L& LATIN SMALL LETTER VEND
+A76B ; Changes_When_Titlecased # L& LATIN SMALL LETTER ET
+A76D ; Changes_When_Titlecased # L& LATIN SMALL LETTER IS
+A76F ; Changes_When_Titlecased # L& LATIN SMALL LETTER CON
+A77A ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR D
+A77C ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR F
+A77F ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED INSULAR G
+A781 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED L
+A783 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR R
+A785 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR S
+A787 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR T
+A78C ; Changes_When_Titlecased # L& LATIN SMALL LETTER SALTILLO
+A791 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH DESCENDER
+A793..A794 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER C WITH PALATAL HOOK
+A797 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH FLOURISH
+A799 ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH STROKE
+A79B ; Changes_When_Titlecased # L& LATIN SMALL LETTER VOLAPUK AE
+A79D ; Changes_When_Titlecased # L& LATIN SMALL LETTER VOLAPUK OE
+A79F ; Changes_When_Titlecased # L& LATIN SMALL LETTER VOLAPUK UE
+A7A1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH OBLIQUE STROKE
+A7A3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH OBLIQUE STROKE
+A7A5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH OBLIQUE STROKE
+A7A7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH OBLIQUE STROKE
+A7A9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH OBLIQUE STROKE
+A7B5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER BETA
+A7B7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OMEGA
+A7B9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH STROKE
+A7BB ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL A
+A7BD ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL I
+A7BF ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL U
+A7C1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OLD POLISH O
+A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G
+A7D7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE SCOTS S
+A7D9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SIGMOID S
+A7F6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED HALF H
+AB53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CHI
+AB70..ABBF ; Changes_When_Titlecased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+FB00..FB06 ; Changes_When_Titlecased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Changes_When_Titlecased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10428..1044F ; Changes_When_Titlecased # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+104D8..104FB ; Changes_When_Titlecased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10597..105A1 ; Changes_When_Titlecased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Changes_When_Titlecased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Changes_When_Titlecased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Changes_When_Titlecased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10CC0..10CF2 ; Changes_When_Titlecased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+118C0..118DF ; Changes_When_Titlecased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
+
+# Total code points: 1452
+
+# ================================================
+
+# Derived Property: Changes_When_Casefolded (CWCF)
+# Characters whose normalized forms are not stable under case folding.
+# For more information, see D142 in Section 3.13, "Default Case Algorithms".
+# Changes_When_Casefolded(X) is true when toCasefold(toNFD(X)) != toNFD(X)
+
+0041..005A ; Changes_When_Casefolded # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00B5 ; Changes_When_Casefolded # L& MICRO SIGN
+00C0..00D6 ; Changes_When_Casefolded # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DF ; Changes_When_Casefolded # L& [8] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER SHARP S
+0100 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH MACRON
+0102 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE
+0104 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH OGONEK
+0106 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH ACUTE
+0108 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH CARON
+010E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH CARON
+0110 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH STROKE
+0112 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON
+0114 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH BREVE
+0116 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH OGONEK
+011A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CARON
+011C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH BREVE
+0120 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH CEDILLA
+0124 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH STROKE
+0128 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH TILDE
+012A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH MACRON
+012C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH BREVE
+012E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH OGONEK
+0130 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132 ; Changes_When_Casefolded # L& LATIN CAPITAL LIGATURE IJ
+0134 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH CEDILLA
+0139 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH ACUTE
+013B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH CEDILLA
+013D ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH CARON
+013F ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH MIDDLE DOT
+0141 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH STROKE
+0143 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH ACUTE
+0145 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH CEDILLA
+0147 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH CARON
+0149..014A ; Changes_When_Casefolded # L& [2] LATIN SMALL LETTER N PRECEDED BY APOSTROPHE..LATIN CAPITAL LETTER ENG
+014C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON
+014E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH BREVE
+0150 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152 ; Changes_When_Casefolded # L& LATIN CAPITAL LIGATURE OE
+0154 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH ACUTE
+0156 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH CEDILLA
+0158 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH CARON
+015A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH ACUTE
+015C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CEDILLA
+0160 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CARON
+0162 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH CEDILLA
+0164 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH CARON
+0166 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH STROKE
+0168 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE
+016A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH MACRON
+016C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH BREVE
+016E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH RING ABOVE
+0170 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH OGONEK
+0174 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH CARON
+017F ; Changes_When_Casefolded # L& LATIN SMALL LETTER LONG S
+0181..0182 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TONE SIX
+0186..0187 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OI
+01A4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7 ; Changes_When_Casefolded # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ESH
+01AC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TONE FIVE
+01C4..01C5 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+01C7..01C8 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J
+01CA..01CB ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J
+01CD ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CARON
+01CF ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH CARON
+01D1 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CARON
+01D3 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH CARON
+01D5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AE WITH MACRON
+01E4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH STROKE
+01E6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH CARON
+01E8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH CARON
+01EA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH OGONEK
+01EC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER EZH WITH CARON
+01F1..01F2 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+01F4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AE WITH ACUTE
+01FE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER YOGH
+021E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH CARON
+0220 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OU
+0224 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH HOOK
+0226 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CEDILLA
+022A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER J WITH STROKE
+024A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH STROKE
+024E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH STROKE
+0345 ; Changes_When_Casefolded # Mn COMBINING GREEK YPOGEGRAMMENI
+0370 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER HETA
+0372 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER ARCHAIC SAMPI
+0376 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037F ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER YOT
+0386 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Changes_When_Casefolded # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F ; Changes_When_Casefolded # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1 ; Changes_When_Casefolded # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB ; Changes_When_Casefolded # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03C2 ; Changes_When_Casefolded # L& GREEK SMALL LETTER FINAL SIGMA
+03CF..03D1 ; Changes_When_Casefolded # L& [3] GREEK CAPITAL KAI SYMBOL..GREEK THETA SYMBOL
+03D5..03D6 ; Changes_When_Casefolded # L& [2] GREEK PHI SYMBOL..GREEK PI SYMBOL
+03D8 ; Changes_When_Casefolded # L& GREEK LETTER ARCHAIC KOPPA
+03DA ; Changes_When_Casefolded # L& GREEK LETTER STIGMA
+03DC ; Changes_When_Casefolded # L& GREEK LETTER DIGAMMA
+03DE ; Changes_When_Casefolded # L& GREEK LETTER KOPPA
+03E0 ; Changes_When_Casefolded # L& GREEK LETTER SAMPI
+03E2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SHEI
+03E4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER FEI
+03E6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KHEI
+03E8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER HORI
+03EA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER GANGIA
+03EC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SHIMA
+03EE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DEI
+03F0..03F1 ; Changes_When_Casefolded # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5 ; Changes_When_Casefolded # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F7 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER SHO
+03F9..03FA ; Changes_When_Casefolded # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F ; Changes_When_Casefolded # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER OMEGA
+0462 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YAT
+0464 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED E
+0466 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER LITTLE YUS
+0468 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BIG YUS
+046C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KSI
+0470 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER PSI
+0472 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER FITA
+0474 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IZHITSA
+0476 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER UK
+047A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER OT
+0480 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOPPA
+048A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ER WITH TICK
+0490 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LIGATURE EN GHE
+04A6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LIGATURE TE TSE
+04B6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHHA
+04BC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1 ; Changes_When_Casefolded # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LIGATURE A IE
+04D6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SCHWA
+04DA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BARRED O
+04EA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DE
+0502 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DJE
+0504 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI ZJE
+0506 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DZJE
+0508 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI LJE
+050A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI NJE
+050C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI SJE
+050E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI TJE
+0510 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED ZE
+0512 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER LHA
+0516 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER RHA
+0518 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YAE
+051A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER QA
+051C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER WE
+051E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ALEUT KA
+0520 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZZHE
+052C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DCHE
+052E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531..0556 ; Changes_When_Casefolded # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0587 ; Changes_When_Casefolded # L& ARMENIAN SMALL LIGATURE ECH YIWN
+10A0..10C5 ; Changes_When_Casefolded # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Changes_When_Casefolded # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Changes_When_Casefolded # L& GEORGIAN CAPITAL LETTER AEN
+13F8..13FD ; Changes_When_Casefolded # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Changes_When_Casefolded # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; Changes_When_Casefolded # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Changes_When_Casefolded # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1E00 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH RING BELOW
+1E02 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH CEDILLA
+1E12 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH MACRON
+1E22 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH ACUTE
+1E32 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER M WITH ACUTE
+1E40 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH ACUTE
+1E56 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER V WITH TILDE
+1E7E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH GRAVE
+1E82 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH ACUTE
+1E84 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9A..1E9B ; Changes_When_Casefolded # L& [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SHARP S
+1EA0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH TILDE
+1EBE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH TILDE
+1EFA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D ; Changes_When_Casefolded # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D ; Changes_When_Casefolded # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F80..1FAF ; Changes_When_Casefolded # L& [48] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2..1FB4 ; Changes_When_Casefolded # L& [3] GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB7..1FBC ; Changes_When_Casefolded # L& [6] GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC2..1FC4 ; Changes_When_Casefolded # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC7..1FCC ; Changes_When_Casefolded # L& [6] GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD8..1FDB ; Changes_When_Casefolded # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE8..1FEC ; Changes_When_Casefolded # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; Changes_When_Casefolded # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF7..1FFC ; Changes_When_Casefolded # L& [6] GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126 ; Changes_When_Casefolded # L& OHM SIGN
+212A..212B ; Changes_When_Casefolded # L& [2] KELVIN SIGN..ANGSTROM SIGN
+2132 ; Changes_When_Casefolded # L& TURNED CAPITAL F
+2160..216F ; Changes_When_Casefolded # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND
+2183 ; Changes_When_Casefolded # L& ROMAN NUMERAL REVERSED ONE HUNDRED
+24B6..24CF ; Changes_When_Casefolded # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z
+2C00..2C2F ; Changes_When_Casefolded # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+2C60 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DESCENDER
+2C69 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH HOOK
+2C75 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER HALF H
+2C7E..2C80 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER VIDA
+2C84 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER GAMMA
+2C86 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DALDA
+2C88 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER EIE
+2C8A ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SOU
+2C8C ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER ZATA
+2C8E ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER HATE
+2C90 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER THETHE
+2C92 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER IAUDA
+2C94 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KAPA
+2C96 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER LAULA
+2C98 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER MI
+2C9A ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER NI
+2C9C ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KSI
+2C9E ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER O
+2CA0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER PI
+2CA2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER RO
+2CA4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SIMA
+2CA6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER TAU
+2CA8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER UA
+2CAA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER FI
+2CAC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KHI
+2CAE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER PSI
+2CB0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OOU
+2CB2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SAMPI
+2CC2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI
+A640 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZEMLYA
+A642 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZELO
+A644 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED DZE
+A646 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTA
+A648 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DJERV
+A64A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED YU
+A656 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED A
+A658 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YN
+A660 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED TSE
+A662 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT DE
+A664 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT EL
+A666 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT EM
+A668 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DWE
+A682 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZWE
+A684 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZHWE
+A686 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CCHE
+A688 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZZE
+A68A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TWE
+A68E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TSWE
+A690 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TSSE
+A692 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TCHE
+A694 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HWE
+A696 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHWE
+A698 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DOUBLE O
+A69A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CROSSED O
+A722 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER HENG
+A728 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TZ
+A72A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TRESILLO
+A72C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CUATRILLO
+A72E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AA
+A734 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AO
+A736 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AU
+A738 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AV
+A73A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AY
+A73E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH STROKE
+A742 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER BROKEN L
+A748 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH LOOP
+A74E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OO
+A750 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH FLOURISH
+A754 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R ROTUNDA
+A75C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER RUM ROTUNDA
+A75E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VY
+A762 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VISIGOTHIC Z
+A764 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER THORN WITH STROKE
+A766 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VEND
+A76A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ET
+A76C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER IS
+A76E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CON
+A779 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR D
+A77B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR F
+A77D..A77E ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TURNED L
+A782 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR R
+A784 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR S
+A786 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR T
+A78B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SALTILLO
+A78D ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TURNED H
+A790 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH DESCENDER
+A792 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH BAR
+A796 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH FLOURISH
+A798 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER F WITH STROKE
+A79A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK AE
+A79C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK OE
+A79E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK UE
+A7A0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA..A7AE ; Changes_When_Casefolded # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0..A7B4 ; Changes_When_Casefolded # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
+A7B6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OMEGA
+A7B8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH STROKE
+A7BA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL A
+A7BC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL I
+A7BE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL U
+A7C0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OLD POLISH O
+A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W
+A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G
+A7D6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S
+A7D8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S
+A7F5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H
+AB70..ABBF ; Changes_When_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+FB00..FB06 ; Changes_When_Casefolded # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Changes_When_Casefolded # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+10400..10427 ; Changes_When_Casefolded # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+104B0..104D3 ; Changes_When_Casefolded # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+10570..1057A ; Changes_When_Casefolded # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Changes_When_Casefolded # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Changes_When_Casefolded # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Changes_When_Casefolded # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10C80..10CB2 ; Changes_When_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+118A0..118BF ; Changes_When_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
+16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
+1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
+
+# Total code points: 1506
+
+# ================================================
+
+# Derived Property: Changes_When_Casemapped (CWCM)
+# Characters whose normalized forms are not stable under case mapping.
+# For more information, see D143 in Section 3.13, "Default Case Algorithms".
+# Changes_When_Casemapped(X) is true when CWL(X), or CWT(X), or CWU(X)
+
+0041..005A ; Changes_When_Casemapped # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; Changes_When_Casemapped # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B5 ; Changes_When_Casemapped # L& MICRO SIGN
+00C0..00D6 ; Changes_When_Casemapped # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; Changes_When_Casemapped # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..0137 ; Changes_When_Casemapped # L& [64] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER K WITH CEDILLA
+0139..018C ; Changes_When_Casemapped # L& [84] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER D WITH TOPBAR
+018E..019A ; Changes_When_Casemapped # L& [13] LATIN CAPITAL LETTER REVERSED E..LATIN SMALL LETTER L WITH BAR
+019C..01A9 ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER ESH
+01AC..01B9 ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER T WITH HOOK..LATIN SMALL LETTER EZH REVERSED
+01BC..01BD ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER TONE FIVE..LATIN SMALL LETTER TONE FIVE
+01BF ; Changes_When_Casemapped # L& LATIN LETTER WYNN
+01C4..0220 ; Changes_When_Casemapped # L& [93] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222..0233 ; Changes_When_Casemapped # L& [18] LATIN CAPITAL LETTER OU..LATIN SMALL LETTER Y WITH MACRON
+023A..0254 ; Changes_When_Casemapped # L& [27] LATIN CAPITAL LETTER A WITH STROKE..LATIN SMALL LETTER OPEN O
+0256..0257 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+0259 ; Changes_When_Casemapped # L& LATIN SMALL LETTER SCHWA
+025B..025C ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E
+0260..0261 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G
+0263 ; Changes_When_Casemapped # L& LATIN SMALL LETTER GAMMA
+0265..0266 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK
+0268..026C ; Changes_When_Casemapped # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT
+026F ; Changes_When_Casemapped # L& LATIN SMALL LETTER TURNED M
+0271..0272 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK
+0275 ; Changes_When_Casemapped # L& LATIN SMALL LETTER BARRED O
+027D ; Changes_When_Casemapped # L& LATIN SMALL LETTER R WITH TAIL
+0280 ; Changes_When_Casemapped # L& LATIN LETTER SMALL CAPITAL R
+0282..0283 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH
+0287..028C ; Changes_When_Casemapped # L& [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V
+0292 ; Changes_When_Casemapped # L& LATIN SMALL LETTER EZH
+029D..029E ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K
+0345 ; Changes_When_Casemapped # Mn COMBINING GREEK YPOGEGRAMMENI
+0370..0373 ; Changes_When_Casemapped # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0376..0377 ; Changes_When_Casemapped # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D ; Changes_When_Casemapped # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER YOT
+0386 ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Changes_When_Casemapped # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; Changes_When_Casemapped # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03D1 ; Changes_When_Casemapped # L& [47] GREEK CAPITAL LETTER SIGMA..GREEK THETA SYMBOL
+03D5..03F5 ; Changes_When_Casemapped # L& [33] GREEK PHI SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F7..03FB ; Changes_When_Casemapped # L& [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN
+03FD..0481 ; Changes_When_Casemapped # L& [133] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC SMALL LETTER KOPPA
+048A..052F ; Changes_When_Casemapped # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; Changes_When_Casemapped # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0561..0587 ; Changes_When_Casemapped # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+10A0..10C5 ; Changes_When_Casemapped # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Changes_When_Casemapped # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Changes_When_Casemapped # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; Changes_When_Casemapped # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FD..10FF ; Changes_When_Casemapped # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+13A0..13F5 ; Changes_When_Casemapped # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Changes_When_Casemapped # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Changes_When_Casemapped # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; Changes_When_Casemapped # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Changes_When_Casemapped # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1D79 ; Changes_When_Casemapped # L& LATIN SMALL LETTER INSULAR G
+1D7D ; Changes_When_Casemapped # L& LATIN SMALL LETTER P WITH STROKE
+1D8E ; Changes_When_Casemapped # L& LATIN SMALL LETTER Z WITH PALATAL HOOK
+1E00..1E9B ; Changes_When_Casemapped # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E ; Changes_When_Casemapped # L& LATIN CAPITAL LETTER SHARP S
+1EA0..1F15 ; Changes_When_Casemapped # L& [118] LATIN CAPITAL LETTER A WITH DOT BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Changes_When_Casemapped # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Changes_When_Casemapped # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Changes_When_Casemapped # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Changes_When_Casemapped # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Changes_When_Casemapped # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Changes_When_Casemapped # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Changes_When_Casemapped # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; Changes_When_Casemapped # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; Changes_When_Casemapped # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Changes_When_Casemapped # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; Changes_When_Casemapped # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Changes_When_Casemapped # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; Changes_When_Casemapped # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; Changes_When_Casemapped # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Changes_When_Casemapped # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2126 ; Changes_When_Casemapped # L& OHM SIGN
+212A..212B ; Changes_When_Casemapped # L& [2] KELVIN SIGN..ANGSTROM SIGN
+2132 ; Changes_When_Casemapped # L& TURNED CAPITAL F
+214E ; Changes_When_Casemapped # L& TURNED SMALL F
+2160..217F ; Changes_When_Casemapped # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2183..2184 ; Changes_When_Casemapped # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+24B6..24E9 ; Changes_When_Casemapped # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
+2C00..2C70 ; Changes_When_Casemapped # L& [113] GLAGOLITIC CAPITAL LETTER AZU..LATIN CAPITAL LETTER TURNED ALPHA
+2C72..2C73 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER W WITH HOOK..LATIN SMALL LETTER W WITH HOOK
+2C75..2C76 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER HALF H..LATIN SMALL LETTER HALF H
+2C7E..2CE3 ; Changes_When_Casemapped # L& [102] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SMALL LETTER OLD NUBIAN WAU
+2CEB..2CEE ; Changes_When_Casemapped # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF2..2CF3 ; Changes_When_Casemapped # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; Changes_When_Casemapped # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Changes_When_Casemapped # L& GEORGIAN SMALL LETTER YN
+2D2D ; Changes_When_Casemapped # L& GEORGIAN SMALL LETTER AEN
+A640..A66D ; Changes_When_Casemapped # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A680..A69B ; Changes_When_Casemapped # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A722..A72F ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CUATRILLO WITH COMMA
+A732..A76F ; Changes_When_Casemapped # L& [62] LATIN CAPITAL LETTER AA..LATIN SMALL LETTER CON
+A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR D..LATIN SMALL LETTER INSULAR T
+A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H
+A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK
+A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0..A7CA ; Changes_When_Casemapped # L& [27] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D6..A7D9 ; Changes_When_Casemapped # L& [4] LATIN CAPITAL LETTER MIDDLE SCOTS S..LATIN SMALL LETTER SIGMOID S
+A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI
+AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+FB00..FB06 ; Changes_When_Casemapped # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Changes_When_Casemapped # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FF21..FF3A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+10400..1044F ; Changes_When_Casemapped # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+104B0..104D3 ; Changes_When_Casemapped # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; Changes_When_Casemapped # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10570..1057A ; Changes_When_Casemapped # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Changes_When_Casemapped # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Changes_When_Casemapped # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Changes_When_Casemapped # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; Changes_When_Casemapped # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Changes_When_Casemapped # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Changes_When_Casemapped # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Changes_When_Casemapped # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10C80..10CB2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+118A0..118DF ; Changes_When_Casemapped # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+
+# Total code points: 2927
+
+# ================================================
+
+# Derived Property: ID_Start
+# Characters that can start an identifier.
+# Generated from:
+# Lu + Ll + Lt + Lm + Lo + Nl
+# + Other_ID_Start
+# - Pattern_Syntax
+# - Pattern_White_Space
+# NOTE: See UAX #31 for more information
+
+0041..005A ; ID_Start # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; ID_Start # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; ID_Start # Lo FEMININE ORDINAL INDICATOR
+00B5 ; ID_Start # L& MICRO SIGN
+00BA ; ID_Start # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; ID_Start # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; ID_Start # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; ID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; ID_Start # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; ID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; ID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; ID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; ID_Start # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; ID_Start # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1 ; ID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1 ; ID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4 ; ID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC ; ID_Start # Lm MODIFIER LETTER VOICING
+02EE ; ID_Start # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+0370..0373 ; ID_Start # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374 ; ID_Start # Lm GREEK NUMERAL SIGN
+0376..0377 ; ID_Start # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; ID_Start # Lm GREEK YPOGEGRAMMENI
+037B..037D ; ID_Start # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; ID_Start # L& GREEK CAPITAL LETTER YOT
+0386 ; ID_Start # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; ID_Start # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; ID_Start # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; ID_Start # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; ID_Start # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481 ; ID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..052F ; ID_Start # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; ID_Start # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; ID_Start # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0560..0588 ; ID_Start # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+05D0..05EA ; ID_Start # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; ID_Start # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0620..063F ; ID_Start # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640 ; ID_Start # Lm ARABIC TATWEEL
+0641..064A ; ID_Start # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+066E..066F ; ID_Start # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3 ; ID_Start # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5 ; ID_Start # Lo ARABIC LETTER AE
+06E5..06E6 ; ID_Start # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF ; ID_Start # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC ; ID_Start # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF ; ID_Start # Lo ARABIC LETTER HEH WITH INVERTED V
+0710 ; ID_Start # Lo SYRIAC LETTER ALAPH
+0712..072F ; ID_Start # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074D..07A5 ; ID_Start # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07B1 ; ID_Start # Lo THAANA LETTER NAA
+07CA..07EA ; ID_Start # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5 ; ID_Start # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA ; ID_Start # Lm NKO LAJANYALAN
+0800..0815 ; ID_Start # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+081A ; ID_Start # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+0824 ; ID_Start # Lm SAMARITAN MODIFIER LETTER SHORT A
+0828 ; ID_Start # Lm SAMARITAN MODIFIER LETTER I
+0840..0858 ; ID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0860..086A ; ID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+0870..0887 ; ID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0889..088E ; ID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+08A0..08C8 ; ID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9 ; ID_Start # Lm ARABIC SMALL FARSI YEH
+0904..0939 ; ID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D ; ID_Start # Lo DEVANAGARI SIGN AVAGRAHA
+0950 ; ID_Start # Lo DEVANAGARI OM
+0958..0961 ; ID_Start # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0971 ; ID_Start # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..0980 ; ID_Start # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+0985..098C ; ID_Start # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; ID_Start # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; ID_Start # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; ID_Start # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; ID_Start # Lo BENGALI LETTER LA
+09B6..09B9 ; ID_Start # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD ; ID_Start # Lo BENGALI SIGN AVAGRAHA
+09CE ; ID_Start # Lo BENGALI LETTER KHANDA TA
+09DC..09DD ; ID_Start # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; ID_Start # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09F0..09F1 ; ID_Start # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; ID_Start # Lo BENGALI LETTER VEDIC ANUSVARA
+0A05..0A0A ; ID_Start # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; ID_Start # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; ID_Start # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; ID_Start # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; ID_Start # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; ID_Start # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; ID_Start # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A59..0A5C ; ID_Start # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; ID_Start # Lo GURMUKHI LETTER FA
+0A72..0A74 ; ID_Start # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A85..0A8D ; ID_Start # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; ID_Start # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; ID_Start # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; ID_Start # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; ID_Start # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; ID_Start # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD ; ID_Start # Lo GUJARATI SIGN AVAGRAHA
+0AD0 ; ID_Start # Lo GUJARATI OM
+0AE0..0AE1 ; ID_Start # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AF9 ; ID_Start # Lo GUJARATI LETTER ZHA
+0B05..0B0C ; ID_Start # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; ID_Start # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; ID_Start # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; ID_Start # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; ID_Start # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; ID_Start # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D ; ID_Start # Lo ORIYA SIGN AVAGRAHA
+0B5C..0B5D ; ID_Start # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; ID_Start # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B71 ; ID_Start # Lo ORIYA LETTER WA
+0B83 ; ID_Start # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; ID_Start # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; ID_Start # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; ID_Start # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; ID_Start # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; ID_Start # Lo TAMIL LETTER JA
+0B9E..0B9F ; ID_Start # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; ID_Start # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; ID_Start # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; ID_Start # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BD0 ; ID_Start # Lo TAMIL OM
+0C05..0C0C ; ID_Start # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; ID_Start # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; ID_Start # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; ID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D ; ID_Start # Lo TELUGU SIGN AVAGRAHA
+0C58..0C5A ; ID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D ; ID_Start # Lo TELUGU LETTER NAKAARA POLLU
+0C60..0C61 ; ID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C80 ; ID_Start # Lo KANNADA SIGN SPACING CANDRABINDU
+0C85..0C8C ; ID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; ID_Start # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; ID_Start # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; ID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; ID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD ; ID_Start # Lo KANNADA SIGN AVAGRAHA
+0CDD..0CDE ; ID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+0CE0..0CE1 ; ID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CF1..0CF2 ; ID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D04..0D0C ; ID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; ID_Start # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; ID_Start # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3D ; ID_Start # Lo MALAYALAM SIGN AVAGRAHA
+0D4E ; ID_Start # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; ID_Start # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D5F..0D61 ; ID_Start # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D7A..0D7F ; ID_Start # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D85..0D96 ; ID_Start # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; ID_Start # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; ID_Start # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; ID_Start # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; ID_Start # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0E01..0E30 ; ID_Start # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32..0E33 ; ID_Start # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E40..0E45 ; ID_Start # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; ID_Start # Lm THAI CHARACTER MAIYAMOK
+0E81..0E82 ; ID_Start # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; ID_Start # Lo LAO LETTER KHO TAM
+0E86..0E8A ; ID_Start # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; ID_Start # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; ID_Start # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; ID_Start # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB2..0EB3 ; ID_Start # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EBD ; ID_Start # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; ID_Start # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; ID_Start # Lm LAO KO LA
+0EDC..0EDF ; ID_Start # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00 ; ID_Start # Lo TIBETAN SYLLABLE OM
+0F40..0F47 ; ID_Start # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; ID_Start # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F88..0F8C ; ID_Start # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+1000..102A ; ID_Start # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+103F ; ID_Start # Lo MYANMAR LETTER GREAT SA
+1050..1055 ; ID_Start # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+105A..105D ; ID_Start # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+1061 ; ID_Start # Lo MYANMAR LETTER SGAW KAREN SHA
+1065..1066 ; ID_Start # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+106E..1070 ; ID_Start # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1075..1081 ; ID_Start # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+108E ; ID_Start # Lo MYANMAR LETTER RUMAI PALAUNG FA
+10A0..10C5 ; ID_Start # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; ID_Start # L& GEORGIAN CAPITAL LETTER YN
+10CD ; ID_Start # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; ID_Start # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; ID_Start # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; ID_Start # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..1248 ; ID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D ; ID_Start # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; ID_Start # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; ID_Start # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; ID_Start # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; ID_Start # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; ID_Start # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; ID_Start # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; ID_Start # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; ID_Start # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; ID_Start # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; ID_Start # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; ID_Start # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1380..138F ; ID_Start # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F5 ; ID_Start # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; ID_Start # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1401..166C ; ID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F ; ID_Start # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A ; ID_Start # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA ; ID_Start # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; ID_Start # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; ID_Start # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..1711 ; ID_Start # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
+171F..1731 ; ID_Start # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
+1740..1751 ; ID_Start # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C ; ID_Start # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; ID_Start # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3 ; ID_Start # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17D7 ; ID_Start # Lm KHMER SIGN LEK TOO
+17DC ; ID_Start # Lo KHMER SIGN AVAKRAHASANYA
+1820..1842 ; ID_Start # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; ID_Start # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; ID_Start # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; ID_Start # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; ID_Start # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; ID_Start # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA ; ID_Start # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5 ; ID_Start # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E ; ID_Start # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1950..196D ; ID_Start # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; ID_Start # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB ; ID_Start # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; ID_Start # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+1A00..1A16 ; ID_Start # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A20..1A54 ; ID_Start # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1AA7 ; ID_Start # Lm TAI THAM SIGN MAI YAMOK
+1B05..1B33 ; ID_Start # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B45..1B4C ; ID_Start # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+1B83..1BA0 ; ID_Start # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BAE..1BAF ; ID_Start # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BBA..1BE5 ; ID_Start # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+1C00..1C23 ; ID_Start # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C4D..1C4F ; ID_Start # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C5A..1C77 ; ID_Start # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; ID_Start # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C80..1C88 ; ID_Start # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; ID_Start # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; ID_Start # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CE9..1CEC ; ID_Start # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF3 ; ID_Start # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF5..1CF6 ; ID_Start # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CFA ; ID_Start # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B ; ID_Start # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; ID_Start # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; ID_Start # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; ID_Start # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; ID_Start # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; ID_Start # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15 ; ID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; ID_Start # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; ID_Start # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; ID_Start # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; ID_Start # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; ID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; ID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; ID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; ID_Start # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; ID_Start # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; ID_Start # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; ID_Start # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; ID_Start # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; ID_Start # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; ID_Start # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; ID_Start # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; ID_Start # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; ID_Start # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; ID_Start # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071 ; ID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; ID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; ID_Start # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+2102 ; ID_Start # L& DOUBLE-STRUCK CAPITAL C
+2107 ; ID_Start # L& EULER CONSTANT
+210A..2113 ; ID_Start # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; ID_Start # L& DOUBLE-STRUCK CAPITAL N
+2118 ; ID_Start # Sm SCRIPT CAPITAL P
+2119..211D ; ID_Start # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; ID_Start # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; ID_Start # L& OHM SIGN
+2128 ; ID_Start # L& BLACK-LETTER CAPITAL Z
+212A..212D ; ID_Start # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E ; ID_Start # So ESTIMATED SYMBOL
+212F..2134 ; ID_Start # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; ID_Start # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; ID_Start # L& INFORMATION SOURCE
+213C..213F ; ID_Start # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; ID_Start # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; ID_Start # L& TURNED SMALL F
+2160..2182 ; ID_Start # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; ID_Start # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; ID_Start # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C7B ; ID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; ID_Start # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; ID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE ; ID_Start # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF2..2CF3 ; ID_Start # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; ID_Start # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; ID_Start # L& GEORGIAN SMALL LETTER YN
+2D2D ; ID_Start # L& GEORGIAN SMALL LETTER AEN
+2D30..2D67 ; ID_Start # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; ID_Start # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96 ; ID_Start # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+3005 ; ID_Start # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; ID_Start # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; ID_Start # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; ID_Start # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035 ; ID_Start # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A ; ID_Start # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; ID_Start # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; ID_Start # Lo MASU MARK
+3041..3096 ; ID_Start # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309B..309C ; ID_Start # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E ; ID_Start # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; ID_Start # Lo HIRAGANA DIGRAPH YORI
+30A1..30FA ; ID_Start # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE ; ID_Start # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; ID_Start # Lo KATAKANA DIGRAPH KOTO
+3105..312F ; ID_Start # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E ; ID_Start # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31BF ; ID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+31F0..31FF ; ID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DBF ; ID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..A014 ; ID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
+A015 ; ID_Start # Lm YI SYLLABLE WU
+A016..A48C ; ID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7 ; ID_Start # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; ID_Start # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B ; ID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; ID_Start # Lm VAI SYLLABLE LENGTHENER
+A610..A61F ; ID_Start # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A62A..A62B ; ID_Start # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D ; ID_Start # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; ID_Start # Lo CYRILLIC LETTER MULTIOCULAR O
+A67F ; ID_Start # Lm CYRILLIC PAYEROK
+A680..A69B ; ID_Start # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; ID_Start # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A6A0..A6E5 ; ID_Start # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; ID_Start # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A717..A71F ; ID_Start # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F ; ID_Start # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; ID_Start # Lm MODIFIER LETTER US
+A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7CA ; ID_Start # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; ID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; ID_Start # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; ID_Start # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4 ; ID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; ID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; ID_Start # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A801 ; ID_Start # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805 ; ID_Start # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A ; ID_Start # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822 ; ID_Start # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A840..A873 ; ID_Start # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A882..A8B3 ; ID_Start # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8F2..A8F7 ; ID_Start # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB ; ID_Start # Lo DEVANAGARI HEADSTROKE
+A8FD..A8FE ; ID_Start # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A90A..A925 ; ID_Start # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A930..A946 ; ID_Start # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A960..A97C ; ID_Start # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A984..A9B2 ; ID_Start # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9CF ; ID_Start # Lm JAVANESE PANGRANGKEP
+A9E0..A9E4 ; ID_Start # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E6 ; ID_Start # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; ID_Start # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9FA..A9FE ; ID_Start # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28 ; ID_Start # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA40..AA42 ; ID_Start # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA44..AA4B ; ID_Start # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA60..AA6F ; ID_Start # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; ID_Start # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; ID_Start # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A ; ID_Start # Lo MYANMAR LETTER AITON RA
+AA7E..AAAF ; ID_Start # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+AAB1 ; ID_Start # Lo TAI VIET VOWEL AA
+AAB5..AAB6 ; ID_Start # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9..AABD ; ID_Start # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AAC0 ; ID_Start # Lo TAI VIET TONE MAI NUENG
+AAC2 ; ID_Start # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; ID_Start # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; ID_Start # Lm TAI VIET SYMBOL SAM
+AAE0..AAEA ; ID_Start # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAF2 ; ID_Start # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; ID_Start # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AB01..AB06 ; ID_Start # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; ID_Start # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; ID_Start # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; ID_Start # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A ; ID_Start # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; ID_Start # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; ID_Start # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; ID_Start # Lm MODIFIER LETTER SMALL TURNED W
+AB70..ABBF ; ID_Start # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2 ; ID_Start # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+AC00..D7A3 ; ID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; ID_Start # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; ID_Start # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA6D ; ID_Start # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; ID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; ID_Start # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; ID_Start # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; ID_Start # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; ID_Start # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36 ; ID_Start # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; ID_Start # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; ID_Start # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; ID_Start # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; ID_Start # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; ID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; ID_Start # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; ID_Start # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; ID_Start # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; ID_Start # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FE70..FE74 ; ID_Start # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; ID_Start # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF21..FF3A ; ID_Start # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; ID_Start # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F ; ID_Start # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; ID_Start # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; ID_Start # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; ID_Start # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; ID_Start # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; ID_Start # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; ID_Start # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; ID_Start # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B ; ID_Start # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; ID_Start # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; ID_Start # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; ID_Start # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; ID_Start # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; ID_Start # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; ID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174 ; ID_Start # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10280..1029C ; ID_Start # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0 ; ID_Start # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031F ; ID_Start # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+1032D..10340 ; ID_Start # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+10341 ; ID_Start # Nl GOTHIC LETTER NINETY
+10342..10349 ; ID_Start # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; ID_Start # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375 ; ID_Start # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10380..1039D ; ID_Start # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3 ; ID_Start # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; ID_Start # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5 ; ID_Start # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F ; ID_Start # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; ID_Start # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104B0..104D3 ; ID_Start # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; ID_Start # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527 ; ID_Start # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563 ; ID_Start # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+10570..1057A ; ID_Start # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; ID_Start # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; ID_Start # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; ID_Start # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; ID_Start # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; ID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; ID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; ID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10600..10736 ; ID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; ID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; ID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785 ; ID_Start # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; ID_Start # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; ID_Start # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10800..10805 ; ID_Start # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; ID_Start # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; ID_Start # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; ID_Start # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; ID_Start # Lo CYPRIOT SYLLABLE ZA
+1083F..10855 ; ID_Start # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10860..10876 ; ID_Start # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10880..1089E ; ID_Start # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108E0..108F2 ; ID_Start # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; ID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+10900..10915 ; ID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939 ; ID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+10980..109B7 ; ID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF ; ID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+10A00 ; ID_Start # Lo KHAROSHTHI LETTER A
+10A10..10A13 ; ID_Start # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; ID_Start # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; ID_Start # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A60..10A7C ; ID_Start # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A80..10A9C ; ID_Start # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10AC0..10AC7 ; ID_Start # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC9..10AE4 ; ID_Start # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10B00..10B35 ; ID_Start # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55 ; ID_Start # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72 ; ID_Start # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80..10B91 ; ID_Start # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10C00..10C48 ; ID_Start # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2 ; ID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; ID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10D00..10D23 ; ID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; ID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; ID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F70..10F81 ; ID_Start # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10FB0..10FC4 ; ID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FE0..10FF6 ; ID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11003..11037 ; ID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11071..11072 ; ID_Start # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11075 ; ID_Start # Lo BRAHMI LETTER OLD TAMIL LLA
+11083..110AF ; ID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110D0..110E8 ; ID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+11103..11126 ; ID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11144 ; ID_Start # Lo CHAKMA LETTER LHAA
+11147 ; ID_Start # Lo CHAKMA LETTER VAA
+11150..11172 ; ID_Start # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11176 ; ID_Start # Lo MAHAJANI LIGATURE SHRI
+11183..111B2 ; ID_Start # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111C1..111C4 ; ID_Start # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111DA ; ID_Start # Lo SHARADA EKAM
+111DC ; ID_Start # Lo SHARADA HEADSTROKE
+11200..11211 ; ID_Start # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; ID_Start # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+11280..11286 ; ID_Start # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; ID_Start # Lo MULTANI LETTER GHA
+1128A..1128D ; ID_Start # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; ID_Start # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; ID_Start # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112B0..112DE ; ID_Start # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+11305..1130C ; ID_Start # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; ID_Start # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; ID_Start # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; ID_Start # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; ID_Start # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; ID_Start # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133D ; ID_Start # Lo GRANTHA SIGN AVAGRAHA
+11350 ; ID_Start # Lo GRANTHA OM
+1135D..11361 ; ID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11400..11434 ; ID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11447..1144A ; ID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1145F..11461 ; ID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+11480..114AF ; ID_Start # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114C4..114C5 ; ID_Start # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C7 ; ID_Start # Lo TIRHUTA OM
+11580..115AE ; ID_Start # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115D8..115DB ; ID_Start # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+11600..1162F ; ID_Start # Lo [48] MODI LETTER A..MODI LETTER LLA
+11644 ; ID_Start # Lo MODI SIGN HUVA
+11680..116AA ; ID_Start # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116B8 ; ID_Start # Lo TAKRI LETTER ARCHAIC KHA
+11700..1171A ; ID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+11740..11746 ; ID_Start # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
+11800..1182B ; ID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+118A0..118DF ; ID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118FF..11906 ; ID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; ID_Start # Lo DIVES AKURU LETTER O
+1190C..11913 ; ID_Start # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; ID_Start # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; ID_Start # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; ID_Start # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; ID_Start # Lo DIVES AKURU INITIAL RA
+119A0..119A7 ; ID_Start # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; ID_Start # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119E1 ; ID_Start # Lo NANDINAGARI SIGN AVAGRAHA
+119E3 ; ID_Start # Lo NANDINAGARI HEADSTROKE
+11A00 ; ID_Start # Lo ZANABAZAR SQUARE LETTER A
+11A0B..11A32 ; ID_Start # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A3A ; ID_Start # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A50 ; ID_Start # Lo SOYOMBO LETTER A
+11A5C..11A89 ; ID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A9D ; ID_Start # Lo SOYOMBO MARK PLUTA
+11AB0..11AF8 ; ID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; ID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; ID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C40 ; ID_Start # Lo BHAIKSUKI SIGN AVAGRAHA
+11C72..11C8F ; ID_Start # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11D00..11D06 ; ID_Start # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; ID_Start # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; ID_Start # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D46 ; ID_Start # Lo MASARAM GONDI REPHA
+11D60..11D65 ; ID_Start # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; ID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; ID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D98 ; ID_Start # Lo GUNJALA GONDI OM
+11EE0..11EF2 ; ID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; ID_Start # Lo LISU LETTER YHA
+12000..12399 ; ID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; ID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12480..12543 ; ID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0 ; ID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+13000..1342E ; ID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646 ; ID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38 ; ID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E ; ID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A70..16ABE ; ID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AD0..16AED ; ID_Start # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16B00..16B2F ; ID_Start # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B40..16B43 ; ID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B63..16B77 ; ID_Start # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; ID_Start # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F ; ID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16F00..16F4A ; ID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F50 ; ID_Start # Lo MIAO LETTER NASALIZATION
+16F93..16F9F ; ID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; ID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK
+17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; ID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3 ; ID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; ID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; ID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1B000..1B122 ; ID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
+1B150..1B152 ; ID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167 ; ID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB ; ID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A ; ID_Start # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; ID_Start # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; ID_Start # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; ID_Start # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1D400..1D454 ; ID_Start # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; ID_Start # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; ID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; ID_Start # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; ID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; ID_Start # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; ID_Start # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; ID_Start # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; ID_Start # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; ID_Start # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; ID_Start # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; ID_Start # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; ID_Start # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; ID_Start # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; ID_Start # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; ID_Start # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; ID_Start # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; ID_Start # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; ID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; ID_Start # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; ID_Start # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; ID_Start # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; ID_Start # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; ID_Start # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; ID_Start # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; ID_Start # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; ID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; ID_Start # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; ID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; ID_Start # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1DF00..1DF09 ; ID_Start # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A ; ID_Start # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E ; ID_Start # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E100..1E12C ; ID_Start # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E137..1E13D ; ID_Start # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E14E ; ID_Start # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E290..1E2AD ; ID_Start # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2C0..1E2EB ; ID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E7E0..1E7E6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE ; ID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE ; ID_Start # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E800..1E8C4 ; ID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E900..1E943 ; ID_Start # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E94B ; ID_Start # Lm ADLAM NASALIZATION MARK
+1EE00..1EE03 ; ID_Start # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; ID_Start # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; ID_Start # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; ID_Start # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; ID_Start # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; ID_Start # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; ID_Start # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; ID_Start # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; ID_Start # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; ID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; ID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; ID_Start # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; ID_Start # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; ID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; ID_Start # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; ID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; ID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; ID_Start # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; ID_Start # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; ID_Start # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; ID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; ID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; ID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+20000..2A6DF ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; ID_Start # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 131997
+
+# ================================================
+
+# Derived Property: ID_Continue
+# Characters that can continue an identifier.
+# Generated from:
+# ID_Start
+# + Mn + Mc + Nd + Pc
+# + Other_ID_Continue
+# - Pattern_Syntax
+# - Pattern_White_Space
+# NOTE: See UAX #31 for more information
+
+0030..0039 ; ID_Continue # Nd [10] DIGIT ZERO..DIGIT NINE
+0041..005A ; ID_Continue # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005F ; ID_Continue # Pc LOW LINE
+0061..007A ; ID_Continue # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; ID_Continue # Lo FEMININE ORDINAL INDICATOR
+00B5 ; ID_Continue # L& MICRO SIGN
+00B7 ; ID_Continue # Po MIDDLE DOT
+00BA ; ID_Continue # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; ID_Continue # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; ID_Continue # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; ID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; ID_Continue # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; ID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; ID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; ID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; ID_Continue # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; ID_Continue # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1 ; ID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1 ; ID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4 ; ID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC ; ID_Continue # Lm MODIFIER LETTER VOICING
+02EE ; ID_Continue # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+0300..036F ; ID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0370..0373 ; ID_Continue # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374 ; ID_Continue # Lm GREEK NUMERAL SIGN
+0376..0377 ; ID_Continue # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; ID_Continue # Lm GREEK YPOGEGRAMMENI
+037B..037D ; ID_Continue # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; ID_Continue # L& GREEK CAPITAL LETTER YOT
+0386 ; ID_Continue # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; ID_Continue # Po GREEK ANO TELEIA
+0388..038A ; ID_Continue # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; ID_Continue # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; ID_Continue # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; ID_Continue # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481 ; ID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+0483..0487 ; ID_Continue # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+048A..052F ; ID_Continue # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; ID_Continue # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; ID_Continue # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0560..0588 ; ID_Continue # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+0591..05BD ; ID_Continue # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF ; ID_Continue # Mn HEBREW POINT RAFE
+05C1..05C2 ; ID_Continue # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; ID_Continue # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; ID_Continue # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA ; ID_Continue # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; ID_Continue # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A ; ID_Continue # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0620..063F ; ID_Continue # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640 ; ID_Continue # Lm ARABIC TATWEEL
+0641..064A ; ID_Continue # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..065F ; ID_Continue # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0660..0669 ; ID_Continue # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066E..066F ; ID_Continue # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670 ; ID_Continue # Mn ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3 ; ID_Continue # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5 ; ID_Continue # Lo ARABIC LETTER AE
+06D6..06DC ; ID_Continue # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4 ; ID_Continue # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6 ; ID_Continue # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8 ; ID_Continue # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; ID_Continue # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF ; ID_Continue # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9 ; ID_Continue # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC ; ID_Continue # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF ; ID_Continue # Lo ARABIC LETTER HEH WITH INVERTED V
+0710 ; ID_Continue # Lo SYRIAC LETTER ALAPH
+0711 ; ID_Continue # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F ; ID_Continue # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A ; ID_Continue # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..07A5 ; ID_Continue # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0 ; ID_Continue # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1 ; ID_Continue # Lo THAANA LETTER NAA
+07C0..07C9 ; ID_Continue # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA ; ID_Continue # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3 ; ID_Continue # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5 ; ID_Continue # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA ; ID_Continue # Lm NKO LAJANYALAN
+07FD ; ID_Continue # Mn NKO DANTAYALAN
+0800..0815 ; ID_Continue # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819 ; ID_Continue # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A ; ID_Continue # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823 ; ID_Continue # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824 ; ID_Continue # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827 ; ID_Continue # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828 ; ID_Continue # Lm SAMARITAN MODIFIER LETTER I
+0829..082D ; ID_Continue # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0840..0858 ; ID_Continue # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0859..085B ; ID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0889..088E ; ID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+0898..089F ; ID_Continue # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+08A0..08C8 ; ID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9 ; ID_Continue # Lm ARABIC SMALL FARSI YEH
+08CA..08E1 ; ID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
+08E3..0902 ; ID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
+0903 ; ID_Continue # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; ID_Continue # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A ; ID_Continue # Mn DEVANAGARI VOWEL SIGN OE
+093B ; ID_Continue # Mc DEVANAGARI VOWEL SIGN OOE
+093C ; ID_Continue # Mn DEVANAGARI SIGN NUKTA
+093D ; ID_Continue # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; ID_Continue # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; ID_Continue # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; ID_Continue # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D ; ID_Continue # Mn DEVANAGARI SIGN VIRAMA
+094E..094F ; ID_Continue # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950 ; ID_Continue # Lo DEVANAGARI OM
+0951..0957 ; ID_Continue # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0958..0961 ; ID_Continue # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963 ; ID_Continue # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F ; ID_Continue # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971 ; ID_Continue # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..0980 ; ID_Continue # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+0981 ; ID_Continue # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; ID_Continue # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; ID_Continue # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; ID_Continue # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; ID_Continue # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; ID_Continue # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; ID_Continue # Lo BENGALI LETTER LA
+09B6..09B9 ; ID_Continue # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC ; ID_Continue # Mn BENGALI SIGN NUKTA
+09BD ; ID_Continue # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0 ; ID_Continue # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; ID_Continue # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; ID_Continue # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; ID_Continue # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD ; ID_Continue # Mn BENGALI SIGN VIRAMA
+09CE ; ID_Continue # Lo BENGALI LETTER KHANDA TA
+09D7 ; ID_Continue # Mc BENGALI AU LENGTH MARK
+09DC..09DD ; ID_Continue # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; ID_Continue # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3 ; ID_Continue # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF ; ID_Continue # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1 ; ID_Continue # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; ID_Continue # Lo BENGALI LETTER VEDIC ANUSVARA
+09FE ; ID_Continue # Mn BENGALI SANDHI MARK
+0A01..0A02 ; ID_Continue # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; ID_Continue # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; ID_Continue # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; ID_Continue # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; ID_Continue # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; ID_Continue # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; ID_Continue # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; ID_Continue # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; ID_Continue # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C ; ID_Continue # Mn GURMUKHI SIGN NUKTA
+0A3E..0A40 ; ID_Continue # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; ID_Continue # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; ID_Continue # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; ID_Continue # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51 ; ID_Continue # Mn GURMUKHI SIGN UDAAT
+0A59..0A5C ; ID_Continue # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; ID_Continue # Lo GURMUKHI LETTER FA
+0A66..0A6F ; ID_Continue # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71 ; ID_Continue # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74 ; ID_Continue # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75 ; ID_Continue # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; ID_Continue # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; ID_Continue # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; ID_Continue # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; ID_Continue # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; ID_Continue # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; ID_Continue # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; ID_Continue # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; ID_Continue # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC ; ID_Continue # Mn GUJARATI SIGN NUKTA
+0ABD ; ID_Continue # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; ID_Continue # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; ID_Continue # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; ID_Continue # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; ID_Continue # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; ID_Continue # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD ; ID_Continue # Mn GUJARATI SIGN VIRAMA
+0AD0 ; ID_Continue # Lo GUJARATI OM
+0AE0..0AE1 ; ID_Continue # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3 ; ID_Continue # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF ; ID_Continue # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF9 ; ID_Continue # Lo GUJARATI LETTER ZHA
+0AFA..0AFF ; ID_Continue # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01 ; ID_Continue # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; ID_Continue # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; ID_Continue # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; ID_Continue # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; ID_Continue # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; ID_Continue # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; ID_Continue # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; ID_Continue # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C ; ID_Continue # Mn ORIYA SIGN NUKTA
+0B3D ; ID_Continue # Lo ORIYA SIGN AVAGRAHA
+0B3E ; ID_Continue # Mc ORIYA VOWEL SIGN AA
+0B3F ; ID_Continue # Mn ORIYA VOWEL SIGN I
+0B40 ; ID_Continue # Mc ORIYA VOWEL SIGN II
+0B41..0B44 ; ID_Continue # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48 ; ID_Continue # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; ID_Continue # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D ; ID_Continue # Mn ORIYA SIGN VIRAMA
+0B55..0B56 ; ID_Continue # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+0B57 ; ID_Continue # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D ; ID_Continue # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; ID_Continue # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63 ; ID_Continue # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F ; ID_Continue # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B71 ; ID_Continue # Lo ORIYA LETTER WA
+0B82 ; ID_Continue # Mn TAMIL SIGN ANUSVARA
+0B83 ; ID_Continue # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; ID_Continue # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; ID_Continue # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; ID_Continue # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; ID_Continue # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; ID_Continue # Lo TAMIL LETTER JA
+0B9E..0B9F ; ID_Continue # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; ID_Continue # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; ID_Continue # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; ID_Continue # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF ; ID_Continue # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; ID_Continue # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; ID_Continue # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; ID_Continue # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; ID_Continue # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD ; ID_Continue # Mn TAMIL SIGN VIRAMA
+0BD0 ; ID_Continue # Lo TAMIL OM
+0BD7 ; ID_Continue # Mc TAMIL AU LENGTH MARK
+0BE6..0BEF ; ID_Continue # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0C00 ; ID_Continue # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03 ; ID_Continue # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04 ; ID_Continue # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C ; ID_Continue # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; ID_Continue # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; ID_Continue # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; ID_Continue # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3C ; ID_Continue # Mn TELUGU SIGN NUKTA
+0C3D ; ID_Continue # Lo TELUGU SIGN AVAGRAHA
+0C3E..0C40 ; ID_Continue # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; ID_Continue # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; ID_Continue # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; ID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; ID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C5A ; ID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D ; ID_Continue # Lo TELUGU LETTER NAKAARA POLLU
+0C60..0C61 ; ID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63 ; ID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F ; ID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C80 ; ID_Continue # Lo KANNADA SIGN SPACING CANDRABINDU
+0C81 ; ID_Continue # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83 ; ID_Continue # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C ; ID_Continue # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; ID_Continue # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; ID_Continue # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; ID_Continue # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; ID_Continue # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC ; ID_Continue # Mn KANNADA SIGN NUKTA
+0CBD ; ID_Continue # Lo KANNADA SIGN AVAGRAHA
+0CBE ; ID_Continue # Mc KANNADA VOWEL SIGN AA
+0CBF ; ID_Continue # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; ID_Continue # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; ID_Continue # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; ID_Continue # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; ID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD ; ID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6 ; ID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDD..0CDE ; ID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+0CE0..0CE1 ; ID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3 ; ID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF ; ID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2 ; ID_Continue # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00..0D01 ; ID_Continue # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03 ; ID_Continue # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D04..0D0C ; ID_Continue # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; ID_Continue # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; ID_Continue # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C ; ID_Continue # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D3D ; ID_Continue # Lo MALAYALAM SIGN AVAGRAHA
+0D3E..0D40 ; ID_Continue # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44 ; ID_Continue # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48 ; ID_Continue # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; ID_Continue # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D ; ID_Continue # Mn MALAYALAM SIGN VIRAMA
+0D4E ; ID_Continue # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; ID_Continue # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57 ; ID_Continue # Mc MALAYALAM AU LENGTH MARK
+0D5F..0D61 ; ID_Continue # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D62..0D63 ; ID_Continue # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F ; ID_Continue # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D7A..0D7F ; ID_Continue # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; ID_Continue # Mn SINHALA SIGN CANDRABINDU
+0D82..0D83 ; ID_Continue # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; ID_Continue # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; ID_Continue # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; ID_Continue # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; ID_Continue # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; ID_Continue # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA ; ID_Continue # Mn SINHALA SIGN AL-LAKUNA
+0DCF..0DD1 ; ID_Continue # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; ID_Continue # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; ID_Continue # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; ID_Continue # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DE6..0DEF ; ID_Continue # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+0DF2..0DF3 ; ID_Continue # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E01..0E30 ; ID_Continue # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31 ; ID_Continue # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33 ; ID_Continue # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A ; ID_Continue # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45 ; ID_Continue # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; ID_Continue # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E ; ID_Continue # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E50..0E59 ; ID_Continue # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E81..0E82 ; ID_Continue # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; ID_Continue # Lo LAO LETTER KHO TAM
+0E86..0E8A ; ID_Continue # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; ID_Continue # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; ID_Continue # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; ID_Continue # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB1 ; ID_Continue # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3 ; ID_Continue # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EBC ; ID_Continue # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EBD ; ID_Continue # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; ID_Continue # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; ID_Continue # Lm LAO KO LA
+0EC8..0ECD ; ID_Continue # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9 ; ID_Continue # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDF ; ID_Continue # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00 ; ID_Continue # Lo TIBETAN SYLLABLE OM
+0F18..0F19 ; ID_Continue # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F20..0F29 ; ID_Continue # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F35 ; ID_Continue # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; ID_Continue # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; ID_Continue # Mn TIBETAN MARK TSA -PHRU
+0F3E..0F3F ; ID_Continue # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47 ; ID_Continue # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; ID_Continue # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E ; ID_Continue # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; ID_Continue # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F84 ; ID_Continue # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; ID_Continue # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8C ; ID_Continue # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0F8D..0F97 ; ID_Continue # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; ID_Continue # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; ID_Continue # Mn TIBETAN SYMBOL PADMA GDAN
+1000..102A ; ID_Continue # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C ; ID_Continue # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030 ; ID_Continue # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; ID_Continue # Mc MYANMAR VOWEL SIGN E
+1032..1037 ; ID_Continue # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038 ; ID_Continue # Mc MYANMAR SIGN VISARGA
+1039..103A ; ID_Continue # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C ; ID_Continue # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E ; ID_Continue # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F ; ID_Continue # Lo MYANMAR LETTER GREAT SA
+1040..1049 ; ID_Continue # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+1050..1055 ; ID_Continue # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; ID_Continue # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; ID_Continue # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D ; ID_Continue # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060 ; ID_Continue # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061 ; ID_Continue # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064 ; ID_Continue # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066 ; ID_Continue # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D ; ID_Continue # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070 ; ID_Continue # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074 ; ID_Continue # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081 ; ID_Continue # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082 ; ID_Continue # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084 ; ID_Continue # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086 ; ID_Continue # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C ; ID_Continue # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; ID_Continue # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E ; ID_Continue # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F ; ID_Continue # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099 ; ID_Continue # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C ; ID_Continue # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D ; ID_Continue # Mn MYANMAR VOWEL SIGN AITON AI
+10A0..10C5 ; ID_Continue # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; ID_Continue # L& GEORGIAN CAPITAL LETTER YN
+10CD ; ID_Continue # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; ID_Continue # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; ID_Continue # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; ID_Continue # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..1248 ; ID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; ID_Continue # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; ID_Continue # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; ID_Continue # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; ID_Continue # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; ID_Continue # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; ID_Continue # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; ID_Continue # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135D..135F ; ID_Continue # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1369..1371 ; ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+1380..138F ; ID_Continue # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F5 ; ID_Continue # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; ID_Continue # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1401..166C ; ID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F ; ID_Continue # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A ; ID_Continue # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA ; ID_Continue # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; ID_Continue # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; ID_Continue # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..1711 ; ID_Continue # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
+1712..1714 ; ID_Continue # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1715 ; ID_Continue # Mc TAGALOG SIGN PAMUDPOD
+171F..1731 ; ID_Continue # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
+1732..1733 ; ID_Continue # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1734 ; ID_Continue # Mc HANUNOO SIGN PAMUDPOD
+1740..1751 ; ID_Continue # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753 ; ID_Continue # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C ; ID_Continue # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; ID_Continue # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773 ; ID_Continue # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3 ; ID_Continue # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5 ; ID_Continue # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6 ; ID_Continue # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; ID_Continue # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; ID_Continue # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; ID_Continue # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; ID_Continue # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3 ; ID_Continue # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D7 ; ID_Continue # Lm KHMER SIGN LEK TOO
+17DC ; ID_Continue # Lo KHMER SIGN AVAKRAHASANYA
+17DD ; ID_Continue # Mn KHMER SIGN ATTHACAN
+17E0..17E9 ; ID_Continue # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+180B..180D ; ID_Continue # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180F ; ID_Continue # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+1810..1819 ; ID_Continue # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842 ; ID_Continue # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; ID_Continue # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; ID_Continue # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; ID_Continue # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; ID_Continue # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; ID_Continue # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 ; ID_Continue # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+18AA ; ID_Continue # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5 ; ID_Continue # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E ; ID_Continue # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1920..1922 ; ID_Continue # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; ID_Continue # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; ID_Continue # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; ID_Continue # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; ID_Continue # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; ID_Continue # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; ID_Continue # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B ; ID_Continue # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1946..194F ; ID_Continue # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D ; ID_Continue # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; ID_Continue # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB ; ID_Continue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; ID_Continue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9 ; ID_Continue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA ; ID_Continue # No NEW TAI LUE THAM DIGIT ONE
+1A00..1A16 ; ID_Continue # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18 ; ID_Continue # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A ; ID_Continue # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B ; ID_Continue # Mn BUGINESE VOWEL SIGN AE
+1A20..1A54 ; ID_Continue # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55 ; ID_Continue # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56 ; ID_Continue # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57 ; ID_Continue # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E ; ID_Continue # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60 ; ID_Continue # Mn TAI THAM SIGN SAKOT
+1A61 ; ID_Continue # Mc TAI THAM VOWEL SIGN A
+1A62 ; ID_Continue # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64 ; ID_Continue # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C ; ID_Continue # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72 ; ID_Continue # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C ; ID_Continue # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; ID_Continue # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89 ; ID_Continue # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99 ; ID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA7 ; ID_Continue # Lm TAI THAM SIGN MAI YAMOK
+1AB0..1ABD ; ID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABF..1ACE ; ID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
+1B00..1B03 ; ID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04 ; ID_Continue # Mc BALINESE SIGN BISAH
+1B05..1B33 ; ID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34 ; ID_Continue # Mn BALINESE SIGN REREKAN
+1B35 ; ID_Continue # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A ; ID_Continue # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B ; ID_Continue # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C ; ID_Continue # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41 ; ID_Continue # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42 ; ID_Continue # Mn BALINESE VOWEL SIGN PEPET
+1B43..1B44 ; ID_Continue # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4C ; ID_Continue # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+1B50..1B59 ; ID_Continue # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B6B..1B73 ; ID_Continue # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81 ; ID_Continue # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82 ; ID_Continue # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0 ; ID_Continue # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1 ; ID_Continue # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5 ; ID_Continue # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7 ; ID_Continue # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9 ; ID_Continue # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA ; ID_Continue # Mc SUNDANESE SIGN PAMAAEH
+1BAB..1BAD ; ID_Continue # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BAF ; ID_Continue # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9 ; ID_Continue # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BE5 ; ID_Continue # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+1BE6 ; ID_Continue # Mn BATAK SIGN TOMPI
+1BE7 ; ID_Continue # Mc BATAK VOWEL SIGN E
+1BE8..1BE9 ; ID_Continue # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC ; ID_Continue # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED ; ID_Continue # Mn BATAK VOWEL SIGN KARO O
+1BEE ; ID_Continue # Mc BATAK VOWEL SIGN U
+1BEF..1BF1 ; ID_Continue # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1BF2..1BF3 ; ID_Continue # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1C00..1C23 ; ID_Continue # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B ; ID_Continue # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33 ; ID_Continue # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35 ; ID_Continue # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37 ; ID_Continue # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C40..1C49 ; ID_Continue # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F ; ID_Continue # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59 ; ID_Continue # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77 ; ID_Continue # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; ID_Continue # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C80..1C88 ; ID_Continue # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; ID_Continue # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; ID_Continue # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CD0..1CD2 ; ID_Continue # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0 ; ID_Continue # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1 ; ID_Continue # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8 ; ID_Continue # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9..1CEC ; ID_Continue # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED ; ID_Continue # Mn VEDIC SIGN TIRYAK
+1CEE..1CF3 ; ID_Continue # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF4 ; ID_Continue # Mn VEDIC TONE CANDRA ABOVE
+1CF5..1CF6 ; ID_Continue # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7 ; ID_Continue # Mc VEDIC SIGN ATIKRAMA
+1CF8..1CF9 ; ID_Continue # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1CFA ; ID_Continue # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B ; ID_Continue # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; ID_Continue # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; ID_Continue # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; ID_Continue # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; ID_Continue # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; ID_Continue # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DFF ; ID_Continue # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00..1F15 ; ID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; ID_Continue # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; ID_Continue # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; ID_Continue # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; ID_Continue # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; ID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; ID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; ID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; ID_Continue # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; ID_Continue # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; ID_Continue # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; ID_Continue # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; ID_Continue # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; ID_Continue # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; ID_Continue # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; ID_Continue # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; ID_Continue # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; ID_Continue # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; ID_Continue # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+203F..2040 ; ID_Continue # Pc [2] UNDERTIE..CHARACTER TIE
+2054 ; ID_Continue # Pc INVERTED UNDERTIE
+2071 ; ID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; ID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; ID_Continue # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20D0..20DC ; ID_Continue # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1 ; ID_Continue # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20F0 ; ID_Continue # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2102 ; ID_Continue # L& DOUBLE-STRUCK CAPITAL C
+2107 ; ID_Continue # L& EULER CONSTANT
+210A..2113 ; ID_Continue # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; ID_Continue # L& DOUBLE-STRUCK CAPITAL N
+2118 ; ID_Continue # Sm SCRIPT CAPITAL P
+2119..211D ; ID_Continue # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; ID_Continue # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; ID_Continue # L& OHM SIGN
+2128 ; ID_Continue # L& BLACK-LETTER CAPITAL Z
+212A..212D ; ID_Continue # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E ; ID_Continue # So ESTIMATED SYMBOL
+212F..2134 ; ID_Continue # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; ID_Continue # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; ID_Continue # L& INFORMATION SOURCE
+213C..213F ; ID_Continue # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; ID_Continue # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; ID_Continue # L& TURNED SMALL F
+2160..2182 ; ID_Continue # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; ID_Continue # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; ID_Continue # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C7B ; ID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; ID_Continue # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; ID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE ; ID_Continue # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1 ; ID_Continue # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF2..2CF3 ; ID_Continue # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; ID_Continue # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; ID_Continue # L& GEORGIAN SMALL LETTER YN
+2D2D ; ID_Continue # L& GEORGIAN SMALL LETTER AEN
+2D30..2D67 ; ID_Continue # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; ID_Continue # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D7F ; ID_Continue # Mn TIFINAGH CONSONANT JOINER
+2D80..2D96 ; ID_Continue # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF ; ID_Continue # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+3005 ; ID_Continue # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; ID_Continue # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; ID_Continue # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; ID_Continue # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+302A..302D ; ID_Continue # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F ; ID_Continue # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3031..3035 ; ID_Continue # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A ; ID_Continue # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; ID_Continue # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; ID_Continue # Lo MASU MARK
+3041..3096 ; ID_Continue # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+3099..309A ; ID_Continue # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309B..309C ; ID_Continue # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E ; ID_Continue # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; ID_Continue # Lo HIRAGANA DIGRAPH YORI
+30A1..30FA ; ID_Continue # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE ; ID_Continue # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; ID_Continue # Lo KATAKANA DIGRAPH KOTO
+3105..312F ; ID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E ; ID_Continue # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31BF ; ID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+31F0..31FF ; ID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DBF ; ID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..A014 ; ID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
+A015 ; ID_Continue # Lm YI SYLLABLE WU
+A016..A48C ; ID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7 ; ID_Continue # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; ID_Continue # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B ; ID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; ID_Continue # Lm VAI SYLLABLE LENGTHENER
+A610..A61F ; ID_Continue # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629 ; ID_Continue # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B ; ID_Continue # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D ; ID_Continue # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; ID_Continue # Lo CYRILLIC LETTER MULTIOCULAR O
+A66F ; ID_Continue # Mn COMBINING CYRILLIC VZMET
+A674..A67D ; ID_Continue # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A67F ; ID_Continue # Lm CYRILLIC PAYEROK
+A680..A69B ; ID_Continue # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; ID_Continue # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F ; ID_Continue # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6A0..A6E5 ; ID_Continue # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; ID_Continue # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1 ; ID_Continue # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A717..A71F ; ID_Continue # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F ; ID_Continue # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; ID_Continue # Lm MODIFIER LETTER US
+A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7CA ; ID_Continue # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; ID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; ID_Continue # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; ID_Continue # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4 ; ID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; ID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; ID_Continue # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A801 ; ID_Continue # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A802 ; ID_Continue # Mn SYLOTI NAGRI SIGN DVISVARA
+A803..A805 ; ID_Continue # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806 ; ID_Continue # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A ; ID_Continue # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B ; ID_Continue # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822 ; ID_Continue # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; ID_Continue # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; ID_Continue # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; ID_Continue # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; ID_Continue # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A840..A873 ; ID_Continue # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A880..A881 ; ID_Continue # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3 ; ID_Continue # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3 ; ID_Continue # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4..A8C5 ; ID_Continue # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8D0..A8D9 ; ID_Continue # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8E0..A8F1 ; ID_Continue # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7 ; ID_Continue # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB ; ID_Continue # Lo DEVANAGARI HEADSTROKE
+A8FD..A8FE ; ID_Continue # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF ; ID_Continue # Mn DEVANAGARI VOWEL SIGN AY
+A900..A909 ; ID_Continue # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925 ; ID_Continue # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D ; ID_Continue # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A930..A946 ; ID_Continue # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951 ; ID_Continue # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953 ; ID_Continue # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A960..A97C ; ID_Continue # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982 ; ID_Continue # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983 ; ID_Continue # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2 ; ID_Continue # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3 ; ID_Continue # Mn JAVANESE SIGN CECAK TELU
+A9B4..A9B5 ; ID_Continue # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9 ; ID_Continue # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB ; ID_Continue # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD ; ID_Continue # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9C0 ; ID_Continue # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+A9CF ; ID_Continue # Lm JAVANESE PANGRANGKEP
+A9D0..A9D9 ; ID_Continue # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9E0..A9E4 ; ID_Continue # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E5 ; ID_Continue # Mn MYANMAR SIGN SHAN SAW
+A9E6 ; ID_Continue # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; ID_Continue # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9F0..A9F9 ; ID_Continue # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+A9FA..A9FE ; ID_Continue # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28 ; ID_Continue # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E ; ID_Continue # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30 ; ID_Continue # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32 ; ID_Continue # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34 ; ID_Continue # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36 ; ID_Continue # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42 ; ID_Continue # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43 ; ID_Continue # Mn CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B ; ID_Continue # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C ; ID_Continue # Mn CHAM CONSONANT SIGN FINAL M
+AA4D ; ID_Continue # Mc CHAM CONSONANT SIGN FINAL H
+AA50..AA59 ; ID_Continue # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA60..AA6F ; ID_Continue # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; ID_Continue # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; ID_Continue # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A ; ID_Continue # Lo MYANMAR LETTER AITON RA
+AA7B ; ID_Continue # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C ; ID_Continue # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D ; ID_Continue # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AAAF ; ID_Continue # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+AAB0 ; ID_Continue # Mn TAI VIET MAI KANG
+AAB1 ; ID_Continue # Lo TAI VIET VOWEL AA
+AAB2..AAB4 ; ID_Continue # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6 ; ID_Continue # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8 ; ID_Continue # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD ; ID_Continue # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF ; ID_Continue # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0 ; ID_Continue # Lo TAI VIET TONE MAI NUENG
+AAC1 ; ID_Continue # Mn TAI VIET TONE MAI THO
+AAC2 ; ID_Continue # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; ID_Continue # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; ID_Continue # Lm TAI VIET SYMBOL SAM
+AAE0..AAEA ; ID_Continue # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB ; ID_Continue # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; ID_Continue # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF2 ; ID_Continue # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; ID_Continue # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5 ; ID_Continue # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AAF6 ; ID_Continue # Mn MEETEI MAYEK VIRAMA
+AB01..AB06 ; ID_Continue # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; ID_Continue # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; ID_Continue # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A ; ID_Continue # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; ID_Continue # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; ID_Continue # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; ID_Continue # Lm MODIFIER LETTER SMALL TURNED W
+AB70..ABBF ; ID_Continue # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2 ; ID_Continue # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4 ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5 ; ID_Continue # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7 ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8 ; ID_Continue # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC ; ID_Continue # Mc MEETEI MAYEK LUM IYEK
+ABED ; ID_Continue # Mn MEETEI MAYEK APUN IYEK
+ABF0..ABF9 ; ID_Continue # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3 ; ID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; ID_Continue # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; ID_Continue # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA6D ; ID_Continue # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; ID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; ID_Continue # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; ID_Continue # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; ID_Continue # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E ; ID_Continue # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28 ; ID_Continue # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36 ; ID_Continue # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; ID_Continue # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; ID_Continue # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; ID_Continue # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; ID_Continue # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; ID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; ID_Continue # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; ID_Continue # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; ID_Continue # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; ID_Continue # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FE00..FE0F ; ID_Continue # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE2F ; ID_Continue # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FE33..FE34 ; ID_Continue # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE4D..FE4F ; ID_Continue # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE70..FE74 ; ID_Continue # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; ID_Continue # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF10..FF19 ; ID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF3A ; ID_Continue # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3F ; ID_Continue # Pc FULLWIDTH LOW LINE
+FF41..FF5A ; ID_Continue # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F ; ID_Continue # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; ID_Continue # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; ID_Continue # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; ID_Continue # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; ID_Continue # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; ID_Continue # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; ID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; ID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B ; ID_Continue # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; ID_Continue # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; ID_Continue # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; ID_Continue # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; ID_Continue # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; ID_Continue # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; ID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174 ; ID_Continue # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+101FD ; ID_Continue # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280..1029C ; ID_Continue # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0 ; ID_Continue # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+102E0 ; ID_Continue # Mn COPTIC EPACT THOUSANDS MARK
+10300..1031F ; ID_Continue # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+1032D..10340 ; ID_Continue # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+10341 ; ID_Continue # Nl GOTHIC LETTER NINETY
+10342..10349 ; ID_Continue # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; ID_Continue # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375 ; ID_Continue # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10376..1037A ; ID_Continue # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10380..1039D ; ID_Continue # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3 ; ID_Continue # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; ID_Continue # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5 ; ID_Continue # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F ; ID_Continue # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; ID_Continue # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9 ; ID_Continue # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+104B0..104D3 ; ID_Continue # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; ID_Continue # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527 ; ID_Continue # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563 ; ID_Continue # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+10570..1057A ; ID_Continue # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; ID_Continue # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; ID_Continue # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; ID_Continue # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; ID_Continue # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; ID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; ID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; ID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10600..10736 ; ID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; ID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; ID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785 ; ID_Continue # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; ID_Continue # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; ID_Continue # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10800..10805 ; ID_Continue # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; ID_Continue # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; ID_Continue # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; ID_Continue # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; ID_Continue # Lo CYPRIOT SYLLABLE ZA
+1083F..10855 ; ID_Continue # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10860..10876 ; ID_Continue # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10880..1089E ; ID_Continue # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108E0..108F2 ; ID_Continue # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; ID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+10900..10915 ; ID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939 ; ID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+10980..109B7 ; ID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF ; ID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+10A00 ; ID_Continue # Lo KHAROSHTHI LETTER A
+10A01..10A03 ; ID_Continue # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; ID_Continue # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; ID_Continue # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13 ; ID_Continue # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; ID_Continue # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; ID_Continue # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A38..10A3A ; ID_Continue # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; ID_Continue # Mn KHAROSHTHI VIRAMA
+10A60..10A7C ; ID_Continue # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A80..10A9C ; ID_Continue # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10AC0..10AC7 ; ID_Continue # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC9..10AE4 ; ID_Continue # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10AE5..10AE6 ; ID_Continue # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10B00..10B35 ; ID_Continue # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55 ; ID_Continue # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72 ; ID_Continue # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80..10B91 ; ID_Continue # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10C00..10C48 ; ID_Continue # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2 ; ID_Continue # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; ID_Continue # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10D00..10D23 ; ID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; ID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39 ; ID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E80..10EA9 ; ID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; ID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1 ; ID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C ; ID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50 ; ID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F70..10F81 ; ID_Continue # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10F82..10F85 ; ID_Continue # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+10FB0..10FC4 ; ID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FE0..10FF6 ; ID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000 ; ID_Continue # Mc BRAHMI SIGN CANDRABINDU
+11001 ; ID_Continue # Mn BRAHMI SIGN ANUSVARA
+11002 ; ID_Continue # Mc BRAHMI SIGN VISARGA
+11003..11037 ; ID_Continue # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11038..11046 ; ID_Continue # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11066..1106F ; ID_Continue # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+11070 ; ID_Continue # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+11071..11072 ; ID_Continue # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11073..11074 ; ID_Continue # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+11075 ; ID_Continue # Lo BRAHMI LETTER OLD TAMIL LLA
+1107F..11081 ; ID_Continue # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
+11082 ; ID_Continue # Mc KAITHI SIGN VISARGA
+11083..110AF ; ID_Continue # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2 ; ID_Continue # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6 ; ID_Continue # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8 ; ID_Continue # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA ; ID_Continue # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110C2 ; ID_Continue # Mn KAITHI VOWEL SIGN VOCALIC R
+110D0..110E8 ; ID_Continue # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9 ; ID_Continue # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+11100..11102 ; ID_Continue # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126 ; ID_Continue # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B ; ID_Continue # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; ID_Continue # Mc CHAKMA VOWEL SIGN E
+1112D..11134 ; ID_Continue # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11136..1113F ; ID_Continue # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11144 ; ID_Continue # Lo CHAKMA LETTER LHAA
+11145..11146 ; ID_Continue # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; ID_Continue # Lo CHAKMA LETTER VAA
+11150..11172 ; ID_Continue # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11173 ; ID_Continue # Mn MAHAJANI SIGN NUKTA
+11176 ; ID_Continue # Lo MAHAJANI LIGATURE SHRI
+11180..11181 ; ID_Continue # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; ID_Continue # Mc SHARADA SIGN VISARGA
+11183..111B2 ; ID_Continue # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5 ; ID_Continue # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; ID_Continue # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF..111C0 ; ID_Continue # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4 ; ID_Continue # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C9..111CC ; ID_Continue # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; ID_Continue # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; ID_Continue # Mn SHARADA SIGN INVERTED CANDRABINDU
+111D0..111D9 ; ID_Continue # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA ; ID_Continue # Lo SHARADA EKAM
+111DC ; ID_Continue # Lo SHARADA HEADSTROKE
+11200..11211 ; ID_Continue # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; ID_Continue # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E ; ID_Continue # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231 ; ID_Continue # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233 ; ID_Continue # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234 ; ID_Continue # Mn KHOJKI SIGN ANUSVARA
+11235 ; ID_Continue # Mc KHOJKI SIGN VIRAMA
+11236..11237 ; ID_Continue # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; ID_Continue # Mn KHOJKI SIGN SUKUN
+11280..11286 ; ID_Continue # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; ID_Continue # Lo MULTANI LETTER GHA
+1128A..1128D ; ID_Continue # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; ID_Continue # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; ID_Continue # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112B0..112DE ; ID_Continue # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112DF ; ID_Continue # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2 ; ID_Continue # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112EA ; ID_Continue # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+112F0..112F9 ; ID_Continue # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11300..11301 ; ID_Continue # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303 ; ID_Continue # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C ; ID_Continue # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; ID_Continue # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; ID_Continue # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; ID_Continue # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; ID_Continue # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; ID_Continue # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133B..1133C ; ID_Continue # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+1133D ; ID_Continue # Lo GRANTHA SIGN AVAGRAHA
+1133E..1133F ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340 ; ID_Continue # Mn GRANTHA VOWEL SIGN II
+11341..11344 ; ID_Continue # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D ; ID_Continue # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350 ; ID_Continue # Lo GRANTHA OM
+11357 ; ID_Continue # Mc GRANTHA AU LENGTH MARK
+1135D..11361 ; ID_Continue # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363 ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11366..1136C ; ID_Continue # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; ID_Continue # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11400..11434 ; ID_Continue # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437 ; ID_Continue # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; ID_Continue # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; ID_Continue # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444 ; ID_Continue # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445 ; ID_Continue # Mc NEWA SIGN VISARGA
+11446 ; ID_Continue # Mn NEWA SIGN NUKTA
+11447..1144A ; ID_Continue # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+11450..11459 ; ID_Continue # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145E ; ID_Continue # Mn NEWA SANDHI MARK
+1145F..11461 ; ID_Continue # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+11480..114AF ; ID_Continue # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B0..114B2 ; ID_Continue # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8 ; ID_Continue # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9 ; ID_Continue # Mc TIRHUTA VOWEL SIGN E
+114BA ; ID_Continue # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE ; ID_Continue # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0 ; ID_Continue # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1 ; ID_Continue # Mc TIRHUTA SIGN VISARGA
+114C2..114C3 ; ID_Continue # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+114C4..114C5 ; ID_Continue # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C7 ; ID_Continue # Lo TIRHUTA OM
+114D0..114D9 ; ID_Continue # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+11580..115AE ; ID_Continue # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115AF..115B1 ; ID_Continue # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5 ; ID_Continue # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB ; ID_Continue # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD ; ID_Continue # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE ; ID_Continue # Mc SIDDHAM SIGN VISARGA
+115BF..115C0 ; ID_Continue # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115D8..115DB ; ID_Continue # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD ; ID_Continue # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11600..1162F ; ID_Continue # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632 ; ID_Continue # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A ; ID_Continue # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C ; ID_Continue # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D ; ID_Continue # Mn MODI SIGN ANUSVARA
+1163E ; ID_Continue # Mc MODI SIGN VISARGA
+1163F..11640 ; ID_Continue # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+11644 ; ID_Continue # Lo MODI SIGN HUVA
+11650..11659 ; ID_Continue # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11680..116AA ; ID_Continue # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB ; ID_Continue # Mn TAKRI SIGN ANUSVARA
+116AC ; ID_Continue # Mc TAKRI SIGN VISARGA
+116AD ; ID_Continue # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; ID_Continue # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; ID_Continue # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B6 ; ID_Continue # Mc TAKRI SIGN VIRAMA
+116B7 ; ID_Continue # Mn TAKRI SIGN NUKTA
+116B8 ; ID_Continue # Lo TAKRI LETTER ARCHAIC KHA
+116C0..116C9 ; ID_Continue # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+11700..1171A ; ID_Continue # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+1171D..1171F ; ID_Continue # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; ID_Continue # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; ID_Continue # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; ID_Continue # Mc AHOM VOWEL SIGN E
+11727..1172B ; ID_Continue # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739 ; ID_Continue # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+11740..11746 ; ID_Continue # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
+11800..1182B ; ID_Continue # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; ID_Continue # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; ID_Continue # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; ID_Continue # Mc DOGRA SIGN VISARGA
+11839..1183A ; ID_Continue # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+118A0..118DF ; ID_Continue # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118E0..118E9 ; ID_Continue # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+118FF..11906 ; ID_Continue # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; ID_Continue # Lo DIVES AKURU LETTER O
+1190C..11913 ; ID_Continue # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; ID_Continue # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; ID_Continue # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; ID_Continue # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; ID_Continue # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; ID_Continue # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; ID_Continue # Mc DIVES AKURU SIGN HALANTA
+1193E ; ID_Continue # Mn DIVES AKURU VIRAMA
+1193F ; ID_Continue # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; ID_Continue # Mc DIVES AKURU MEDIAL YA
+11941 ; ID_Continue # Lo DIVES AKURU INITIAL RA
+11942 ; ID_Continue # Mc DIVES AKURU MEDIAL RA
+11943 ; ID_Continue # Mn DIVES AKURU SIGN NUKTA
+11950..11959 ; ID_Continue # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+119A0..119A7 ; ID_Continue # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; ID_Continue # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3 ; ID_Continue # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7 ; ID_Continue # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; ID_Continue # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF ; ID_Continue # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E0 ; ID_Continue # Mn NANDINAGARI SIGN VIRAMA
+119E1 ; ID_Continue # Lo NANDINAGARI SIGN AVAGRAHA
+119E3 ; ID_Continue # Lo NANDINAGARI HEADSTROKE
+119E4 ; ID_Continue # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00 ; ID_Continue # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A0A ; ID_Continue # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32 ; ID_Continue # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38 ; ID_Continue # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; ID_Continue # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A ; ID_Continue # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E ; ID_Continue # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; ID_Continue # Mn ZANABAZAR SQUARE SUBJOINER
+11A50 ; ID_Continue # Lo SOYOMBO LETTER A
+11A51..11A56 ; ID_Continue # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; ID_Continue # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; ID_Continue # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A89 ; ID_Continue # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96 ; ID_Continue # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; ID_Continue # Mc SOYOMBO SIGN VISARGA
+11A98..11A99 ; ID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9D ; ID_Continue # Lo SOYOMBO MARK PLUTA
+11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; ID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; ID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F ; ID_Continue # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; ID_Continue # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; ID_Continue # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; ID_Continue # Mc BHAIKSUKI SIGN VISARGA
+11C3F ; ID_Continue # Mn BHAIKSUKI SIGN VIRAMA
+11C40 ; ID_Continue # Lo BHAIKSUKI SIGN AVAGRAHA
+11C50..11C59 ; ID_Continue # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C72..11C8F ; ID_Continue # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7 ; ID_Continue # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; ID_Continue # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; ID_Continue # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; ID_Continue # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; ID_Continue # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; ID_Continue # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; ID_Continue # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D00..11D06 ; ID_Continue # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; ID_Continue # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; ID_Continue # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36 ; ID_Continue # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; ID_Continue # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; ID_Continue # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; ID_Continue # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46 ; ID_Continue # Lo MASARAM GONDI REPHA
+11D47 ; ID_Continue # Mn MASARAM GONDI RA-KARA
+11D50..11D59 ; ID_Continue # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+11D60..11D65 ; ID_Continue # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; ID_Continue # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; ID_Continue # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; ID_Continue # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; ID_Continue # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; ID_Continue # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; ID_Continue # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; ID_Continue # Mc GUNJALA GONDI SIGN VISARGA
+11D97 ; ID_Continue # Mn GUNJALA GONDI VIRAMA
+11D98 ; ID_Continue # Lo GUNJALA GONDI OM
+11DA0..11DA9 ; ID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+11EE0..11EF2 ; ID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4 ; ID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; ID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11FB0 ; ID_Continue # Lo LISU LETTER YHA
+12000..12399 ; ID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; ID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12480..12543 ; ID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0 ; ID_Continue # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+13000..1342E ; ID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646 ; ID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38 ; ID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E ; ID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69 ; ID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
+16A70..16ABE ; ID_Continue # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AC0..16AC9 ; ID_Continue # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
+16AD0..16AED ; ID_Continue # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF0..16AF4 ; ID_Continue # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B00..16B2F ; ID_Continue # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B30..16B36 ; ID_Continue # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16B40..16B43 ; ID_Continue # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B50..16B59 ; ID_Continue # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B63..16B77 ; ID_Continue # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; ID_Continue # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F ; ID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16F00..16F4A ; ID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F4F ; ID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F50 ; ID_Continue # Lo MIAO LETTER NASALIZATION
+16F51..16F87 ; ID_Continue # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92 ; ID_Continue # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; ID_Continue # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; ID_Continue # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; ID_Continue # Lm OLD CHINESE ITERATION MARK
+16FE4 ; ID_Continue # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; ID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3 ; ID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; ID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; ID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1B000..1B122 ; ID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
+1B150..1B152 ; ID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167 ; ID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB ; ID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A ; ID_Continue # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; ID_Continue # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; ID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; ID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9D..1BC9E ; ID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1CF00..1CF2D ; ID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30..1CF46 ; ID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+1D165..1D166 ; ID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167..1D169 ; ID_Continue # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172 ; ID_Continue # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182 ; ID_Continue # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; ID_Continue # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; ID_Continue # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244 ; ID_Continue # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D400..1D454 ; ID_Continue # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; ID_Continue # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; ID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; ID_Continue # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; ID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; ID_Continue # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; ID_Continue # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; ID_Continue # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; ID_Continue # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; ID_Continue # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; ID_Continue # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; ID_Continue # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; ID_Continue # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; ID_Continue # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; ID_Continue # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; ID_Continue # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; ID_Continue # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; ID_Continue # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; ID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; ID_Continue # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; ID_Continue # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; ID_Continue # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; ID_Continue # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; ID_Continue # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; ID_Continue # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; ID_Continue # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; ID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; ID_Continue # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; ID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; ID_Continue # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; ID_Continue # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1DA00..1DA36 ; ID_Continue # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA3B..1DA6C ; ID_Continue # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA75 ; ID_Continue # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA84 ; ID_Continue # Mn SIGNWRITING LOCATION HEAD NECK
+1DA9B..1DA9F ; ID_Continue # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; ID_Continue # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1DF00..1DF09 ; ID_Continue # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A ; ID_Continue # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E ; ID_Continue # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E000..1E006 ; ID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; ID_Continue # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; ID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; ID_Continue # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; ID_Continue # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E100..1E12C ; ID_Continue # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E130..1E136 ; ID_Continue # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E137..1E13D ; ID_Continue # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149 ; ID_Continue # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E ; ID_Continue # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E290..1E2AD ; ID_Continue # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2AE ; ID_Continue # Mn TOTO SIGN RISING TONE
+1E2C0..1E2EB ; ID_Continue # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E2EC..1E2EF ; ID_Continue # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E2F0..1E2F9 ; ID_Continue # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+1E7E0..1E7E6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE ; ID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE ; ID_Continue # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E800..1E8C4 ; ID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8D0..1E8D6 ; ID_Continue # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E900..1E943 ; ID_Continue # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A ; ID_Continue # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E94B ; ID_Continue # Lm ADLAM NASALIZATION MARK
+1E950..1E959 ; ID_Continue # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1EE00..1EE03 ; ID_Continue # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; ID_Continue # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; ID_Continue # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; ID_Continue # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; ID_Continue # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; ID_Continue # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; ID_Continue # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; ID_Continue # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; ID_Continue # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; ID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; ID_Continue # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; ID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; ID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; ID_Continue # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; ID_Continue # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; ID_Continue # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; ID_Continue # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; ID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; ID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1FBF0..1FBF9 ; ID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DF ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; ID_Continue # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 135072
+
+# ================================================
+
+# Derived Property: XID_Start
+# ID_Start modified for closure under NFKx
+# Modified as described in UAX #15
+# NOTE: Does NOT remove the non-NFKx characters.
+# Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string))
+# NOTE: See UAX #31 for more information
+
+0041..005A ; XID_Start # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A ; XID_Start # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; XID_Start # Lo FEMININE ORDINAL INDICATOR
+00B5 ; XID_Start # L& MICRO SIGN
+00BA ; XID_Start # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; XID_Start # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; XID_Start # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; XID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; XID_Start # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; XID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; XID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; XID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; XID_Start # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; XID_Start # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1 ; XID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1 ; XID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4 ; XID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC ; XID_Start # Lm MODIFIER LETTER VOICING
+02EE ; XID_Start # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+0370..0373 ; XID_Start # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374 ; XID_Start # Lm GREEK NUMERAL SIGN
+0376..0377 ; XID_Start # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D ; XID_Start # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; XID_Start # L& GREEK CAPITAL LETTER YOT
+0386 ; XID_Start # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; XID_Start # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; XID_Start # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; XID_Start # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; XID_Start # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481 ; XID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..052F ; XID_Start # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; XID_Start # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; XID_Start # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0560..0588 ; XID_Start # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+05D0..05EA ; XID_Start # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; XID_Start # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0620..063F ; XID_Start # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640 ; XID_Start # Lm ARABIC TATWEEL
+0641..064A ; XID_Start # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+066E..066F ; XID_Start # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3 ; XID_Start # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5 ; XID_Start # Lo ARABIC LETTER AE
+06E5..06E6 ; XID_Start # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF ; XID_Start # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC ; XID_Start # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF ; XID_Start # Lo ARABIC LETTER HEH WITH INVERTED V
+0710 ; XID_Start # Lo SYRIAC LETTER ALAPH
+0712..072F ; XID_Start # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074D..07A5 ; XID_Start # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07B1 ; XID_Start # Lo THAANA LETTER NAA
+07CA..07EA ; XID_Start # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5 ; XID_Start # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA ; XID_Start # Lm NKO LAJANYALAN
+0800..0815 ; XID_Start # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+081A ; XID_Start # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+0824 ; XID_Start # Lm SAMARITAN MODIFIER LETTER SHORT A
+0828 ; XID_Start # Lm SAMARITAN MODIFIER LETTER I
+0840..0858 ; XID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0860..086A ; XID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+0870..0887 ; XID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0889..088E ; XID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+08A0..08C8 ; XID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9 ; XID_Start # Lm ARABIC SMALL FARSI YEH
+0904..0939 ; XID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093D ; XID_Start # Lo DEVANAGARI SIGN AVAGRAHA
+0950 ; XID_Start # Lo DEVANAGARI OM
+0958..0961 ; XID_Start # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0971 ; XID_Start # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..0980 ; XID_Start # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+0985..098C ; XID_Start # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; XID_Start # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; XID_Start # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; XID_Start # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; XID_Start # Lo BENGALI LETTER LA
+09B6..09B9 ; XID_Start # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD ; XID_Start # Lo BENGALI SIGN AVAGRAHA
+09CE ; XID_Start # Lo BENGALI LETTER KHANDA TA
+09DC..09DD ; XID_Start # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; XID_Start # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09F0..09F1 ; XID_Start # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; XID_Start # Lo BENGALI LETTER VEDIC ANUSVARA
+0A05..0A0A ; XID_Start # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; XID_Start # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; XID_Start # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; XID_Start # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; XID_Start # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; XID_Start # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; XID_Start # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A59..0A5C ; XID_Start # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; XID_Start # Lo GURMUKHI LETTER FA
+0A72..0A74 ; XID_Start # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A85..0A8D ; XID_Start # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; XID_Start # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; XID_Start # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; XID_Start # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; XID_Start # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; XID_Start # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD ; XID_Start # Lo GUJARATI SIGN AVAGRAHA
+0AD0 ; XID_Start # Lo GUJARATI OM
+0AE0..0AE1 ; XID_Start # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AF9 ; XID_Start # Lo GUJARATI LETTER ZHA
+0B05..0B0C ; XID_Start # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; XID_Start # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; XID_Start # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; XID_Start # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; XID_Start # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; XID_Start # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D ; XID_Start # Lo ORIYA SIGN AVAGRAHA
+0B5C..0B5D ; XID_Start # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; XID_Start # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B71 ; XID_Start # Lo ORIYA LETTER WA
+0B83 ; XID_Start # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; XID_Start # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; XID_Start # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; XID_Start # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; XID_Start # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; XID_Start # Lo TAMIL LETTER JA
+0B9E..0B9F ; XID_Start # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; XID_Start # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; XID_Start # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; XID_Start # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BD0 ; XID_Start # Lo TAMIL OM
+0C05..0C0C ; XID_Start # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; XID_Start # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; XID_Start # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; XID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D ; XID_Start # Lo TELUGU SIGN AVAGRAHA
+0C58..0C5A ; XID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D ; XID_Start # Lo TELUGU LETTER NAKAARA POLLU
+0C60..0C61 ; XID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C80 ; XID_Start # Lo KANNADA SIGN SPACING CANDRABINDU
+0C85..0C8C ; XID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; XID_Start # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; XID_Start # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; XID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; XID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD ; XID_Start # Lo KANNADA SIGN AVAGRAHA
+0CDD..0CDE ; XID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+0CE0..0CE1 ; XID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CF1..0CF2 ; XID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D04..0D0C ; XID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; XID_Start # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; XID_Start # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3D ; XID_Start # Lo MALAYALAM SIGN AVAGRAHA
+0D4E ; XID_Start # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; XID_Start # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D5F..0D61 ; XID_Start # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D7A..0D7F ; XID_Start # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D85..0D96 ; XID_Start # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; XID_Start # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; XID_Start # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; XID_Start # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; XID_Start # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0E01..0E30 ; XID_Start # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32 ; XID_Start # Lo THAI CHARACTER SARA AA
+0E40..0E45 ; XID_Start # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; XID_Start # Lm THAI CHARACTER MAIYAMOK
+0E81..0E82 ; XID_Start # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; XID_Start # Lo LAO LETTER KHO TAM
+0E86..0E8A ; XID_Start # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; XID_Start # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; XID_Start # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; XID_Start # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB2 ; XID_Start # Lo LAO VOWEL SIGN AA
+0EBD ; XID_Start # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; XID_Start # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; XID_Start # Lm LAO KO LA
+0EDC..0EDF ; XID_Start # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00 ; XID_Start # Lo TIBETAN SYLLABLE OM
+0F40..0F47 ; XID_Start # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; XID_Start # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F88..0F8C ; XID_Start # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+1000..102A ; XID_Start # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+103F ; XID_Start # Lo MYANMAR LETTER GREAT SA
+1050..1055 ; XID_Start # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+105A..105D ; XID_Start # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+1061 ; XID_Start # Lo MYANMAR LETTER SGAW KAREN SHA
+1065..1066 ; XID_Start # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+106E..1070 ; XID_Start # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1075..1081 ; XID_Start # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+108E ; XID_Start # Lo MYANMAR LETTER RUMAI PALAUNG FA
+10A0..10C5 ; XID_Start # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; XID_Start # L& GEORGIAN CAPITAL LETTER YN
+10CD ; XID_Start # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; XID_Start # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; XID_Start # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; XID_Start # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..1248 ; XID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D ; XID_Start # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; XID_Start # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; XID_Start # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; XID_Start # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; XID_Start # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; XID_Start # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; XID_Start # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; XID_Start # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; XID_Start # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; XID_Start # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; XID_Start # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; XID_Start # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1380..138F ; XID_Start # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F5 ; XID_Start # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; XID_Start # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1401..166C ; XID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F ; XID_Start # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A ; XID_Start # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA ; XID_Start # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; XID_Start # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; XID_Start # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..1711 ; XID_Start # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
+171F..1731 ; XID_Start # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
+1740..1751 ; XID_Start # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C ; XID_Start # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; XID_Start # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3 ; XID_Start # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17D7 ; XID_Start # Lm KHMER SIGN LEK TOO
+17DC ; XID_Start # Lo KHMER SIGN AVAKRAHASANYA
+1820..1842 ; XID_Start # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; XID_Start # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; XID_Start # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; XID_Start # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; XID_Start # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; XID_Start # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA ; XID_Start # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5 ; XID_Start # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E ; XID_Start # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1950..196D ; XID_Start # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; XID_Start # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB ; XID_Start # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; XID_Start # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+1A00..1A16 ; XID_Start # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A20..1A54 ; XID_Start # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1AA7 ; XID_Start # Lm TAI THAM SIGN MAI YAMOK
+1B05..1B33 ; XID_Start # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B45..1B4C ; XID_Start # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+1B83..1BA0 ; XID_Start # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BAE..1BAF ; XID_Start # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BBA..1BE5 ; XID_Start # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+1C00..1C23 ; XID_Start # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C4D..1C4F ; XID_Start # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C5A..1C77 ; XID_Start # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; XID_Start # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C80..1C88 ; XID_Start # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; XID_Start # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; XID_Start # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CE9..1CEC ; XID_Start # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF3 ; XID_Start # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF5..1CF6 ; XID_Start # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CFA ; XID_Start # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B ; XID_Start # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; XID_Start # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; XID_Start # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; XID_Start # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; XID_Start # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; XID_Start # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15 ; XID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; XID_Start # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; XID_Start # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; XID_Start # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; XID_Start # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; XID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; XID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; XID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; XID_Start # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; XID_Start # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; XID_Start # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; XID_Start # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; XID_Start # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; XID_Start # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; XID_Start # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; XID_Start # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; XID_Start # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; XID_Start # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; XID_Start # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2071 ; XID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; XID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; XID_Start # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+2102 ; XID_Start # L& DOUBLE-STRUCK CAPITAL C
+2107 ; XID_Start # L& EULER CONSTANT
+210A..2113 ; XID_Start # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; XID_Start # L& DOUBLE-STRUCK CAPITAL N
+2118 ; XID_Start # Sm SCRIPT CAPITAL P
+2119..211D ; XID_Start # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; XID_Start # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; XID_Start # L& OHM SIGN
+2128 ; XID_Start # L& BLACK-LETTER CAPITAL Z
+212A..212D ; XID_Start # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E ; XID_Start # So ESTIMATED SYMBOL
+212F..2134 ; XID_Start # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; XID_Start # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; XID_Start # L& INFORMATION SOURCE
+213C..213F ; XID_Start # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; XID_Start # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; XID_Start # L& TURNED SMALL F
+2160..2182 ; XID_Start # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; XID_Start # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; XID_Start # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C7B ; XID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; XID_Start # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; XID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE ; XID_Start # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF2..2CF3 ; XID_Start # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; XID_Start # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; XID_Start # L& GEORGIAN SMALL LETTER YN
+2D2D ; XID_Start # L& GEORGIAN SMALL LETTER AEN
+2D30..2D67 ; XID_Start # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; XID_Start # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D80..2D96 ; XID_Start # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+3005 ; XID_Start # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; XID_Start # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; XID_Start # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; XID_Start # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3031..3035 ; XID_Start # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A ; XID_Start # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; XID_Start # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; XID_Start # Lo MASU MARK
+3041..3096 ; XID_Start # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309D..309E ; XID_Start # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; XID_Start # Lo HIRAGANA DIGRAPH YORI
+30A1..30FA ; XID_Start # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE ; XID_Start # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; XID_Start # Lo KATAKANA DIGRAPH KOTO
+3105..312F ; XID_Start # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E ; XID_Start # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31BF ; XID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+31F0..31FF ; XID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DBF ; XID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..A014 ; XID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
+A015 ; XID_Start # Lm YI SYLLABLE WU
+A016..A48C ; XID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7 ; XID_Start # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; XID_Start # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B ; XID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; XID_Start # Lm VAI SYLLABLE LENGTHENER
+A610..A61F ; XID_Start # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A62A..A62B ; XID_Start # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D ; XID_Start # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; XID_Start # Lo CYRILLIC LETTER MULTIOCULAR O
+A67F ; XID_Start # Lm CYRILLIC PAYEROK
+A680..A69B ; XID_Start # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; XID_Start # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A6A0..A6E5 ; XID_Start # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; XID_Start # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A717..A71F ; XID_Start # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F ; XID_Start # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; XID_Start # Lm MODIFIER LETTER US
+A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7CA ; XID_Start # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; XID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; XID_Start # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; XID_Start # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4 ; XID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; XID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; XID_Start # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A801 ; XID_Start # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805 ; XID_Start # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A ; XID_Start # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822 ; XID_Start # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A840..A873 ; XID_Start # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A882..A8B3 ; XID_Start # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8F2..A8F7 ; XID_Start # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB ; XID_Start # Lo DEVANAGARI HEADSTROKE
+A8FD..A8FE ; XID_Start # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A90A..A925 ; XID_Start # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A930..A946 ; XID_Start # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A960..A97C ; XID_Start # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A984..A9B2 ; XID_Start # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9CF ; XID_Start # Lm JAVANESE PANGRANGKEP
+A9E0..A9E4 ; XID_Start # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E6 ; XID_Start # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; XID_Start # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9FA..A9FE ; XID_Start # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28 ; XID_Start # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA40..AA42 ; XID_Start # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA44..AA4B ; XID_Start # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA60..AA6F ; XID_Start # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; XID_Start # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; XID_Start # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A ; XID_Start # Lo MYANMAR LETTER AITON RA
+AA7E..AAAF ; XID_Start # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+AAB1 ; XID_Start # Lo TAI VIET VOWEL AA
+AAB5..AAB6 ; XID_Start # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9..AABD ; XID_Start # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AAC0 ; XID_Start # Lo TAI VIET TONE MAI NUENG
+AAC2 ; XID_Start # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; XID_Start # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; XID_Start # Lm TAI VIET SYMBOL SAM
+AAE0..AAEA ; XID_Start # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAF2 ; XID_Start # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; XID_Start # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AB01..AB06 ; XID_Start # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; XID_Start # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; XID_Start # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; XID_Start # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A ; XID_Start # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; XID_Start # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; XID_Start # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; XID_Start # Lm MODIFIER LETTER SMALL TURNED W
+AB70..ABBF ; XID_Start # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2 ; XID_Start # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+AC00..D7A3 ; XID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; XID_Start # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; XID_Start # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA6D ; XID_Start # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; XID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; XID_Start # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; XID_Start # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; XID_Start # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; XID_Start # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36 ; XID_Start # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; XID_Start # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; XID_Start # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; XID_Start # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; XID_Start # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; XID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FC5D ; XID_Start # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64..FD3D ; XID_Start # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; XID_Start # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; XID_Start # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDF9 ; XID_Start # Lo [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM
+FE71 ; XID_Start # Lo ARABIC TATWEEL WITH FATHATAN ABOVE
+FE73 ; XID_Start # Lo ARABIC TAIL FRAGMENT
+FE77 ; XID_Start # Lo ARABIC FATHA MEDIAL FORM
+FE79 ; XID_Start # Lo ARABIC DAMMA MEDIAL FORM
+FE7B ; XID_Start # Lo ARABIC KASRA MEDIAL FORM
+FE7D ; XID_Start # Lo ARABIC SHADDA MEDIAL FORM
+FE7F..FEFC ; XID_Start # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF21..FF3A ; XID_Start # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF41..FF5A ; XID_Start # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F ; XID_Start # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; XID_Start # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; XID_Start # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FFA0..FFBE ; XID_Start # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; XID_Start # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; XID_Start # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; XID_Start # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B ; XID_Start # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; XID_Start # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; XID_Start # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; XID_Start # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; XID_Start # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; XID_Start # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; XID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174 ; XID_Start # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10280..1029C ; XID_Start # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0 ; XID_Start # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031F ; XID_Start # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+1032D..10340 ; XID_Start # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+10341 ; XID_Start # Nl GOTHIC LETTER NINETY
+10342..10349 ; XID_Start # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; XID_Start # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375 ; XID_Start # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10380..1039D ; XID_Start # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3 ; XID_Start # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; XID_Start # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5 ; XID_Start # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F ; XID_Start # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; XID_Start # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104B0..104D3 ; XID_Start # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; XID_Start # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527 ; XID_Start # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563 ; XID_Start # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+10570..1057A ; XID_Start # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; XID_Start # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; XID_Start # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; XID_Start # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; XID_Start # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; XID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; XID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; XID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10600..10736 ; XID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; XID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; XID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785 ; XID_Start # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; XID_Start # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; XID_Start # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10800..10805 ; XID_Start # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; XID_Start # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; XID_Start # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; XID_Start # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; XID_Start # Lo CYPRIOT SYLLABLE ZA
+1083F..10855 ; XID_Start # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10860..10876 ; XID_Start # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10880..1089E ; XID_Start # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108E0..108F2 ; XID_Start # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; XID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+10900..10915 ; XID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939 ; XID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+10980..109B7 ; XID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF ; XID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+10A00 ; XID_Start # Lo KHAROSHTHI LETTER A
+10A10..10A13 ; XID_Start # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; XID_Start # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; XID_Start # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A60..10A7C ; XID_Start # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A80..10A9C ; XID_Start # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10AC0..10AC7 ; XID_Start # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC9..10AE4 ; XID_Start # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10B00..10B35 ; XID_Start # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55 ; XID_Start # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72 ; XID_Start # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80..10B91 ; XID_Start # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10C00..10C48 ; XID_Start # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2 ; XID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; XID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10D00..10D23 ; XID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; XID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; XID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F70..10F81 ; XID_Start # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10FB0..10FC4 ; XID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FE0..10FF6 ; XID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11003..11037 ; XID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11071..11072 ; XID_Start # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11075 ; XID_Start # Lo BRAHMI LETTER OLD TAMIL LLA
+11083..110AF ; XID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110D0..110E8 ; XID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+11103..11126 ; XID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11144 ; XID_Start # Lo CHAKMA LETTER LHAA
+11147 ; XID_Start # Lo CHAKMA LETTER VAA
+11150..11172 ; XID_Start # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11176 ; XID_Start # Lo MAHAJANI LIGATURE SHRI
+11183..111B2 ; XID_Start # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111C1..111C4 ; XID_Start # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111DA ; XID_Start # Lo SHARADA EKAM
+111DC ; XID_Start # Lo SHARADA HEADSTROKE
+11200..11211 ; XID_Start # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; XID_Start # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+11280..11286 ; XID_Start # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; XID_Start # Lo MULTANI LETTER GHA
+1128A..1128D ; XID_Start # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; XID_Start # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; XID_Start # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112B0..112DE ; XID_Start # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+11305..1130C ; XID_Start # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; XID_Start # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; XID_Start # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; XID_Start # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; XID_Start # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; XID_Start # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133D ; XID_Start # Lo GRANTHA SIGN AVAGRAHA
+11350 ; XID_Start # Lo GRANTHA OM
+1135D..11361 ; XID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11400..11434 ; XID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11447..1144A ; XID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1145F..11461 ; XID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+11480..114AF ; XID_Start # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114C4..114C5 ; XID_Start # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C7 ; XID_Start # Lo TIRHUTA OM
+11580..115AE ; XID_Start # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115D8..115DB ; XID_Start # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+11600..1162F ; XID_Start # Lo [48] MODI LETTER A..MODI LETTER LLA
+11644 ; XID_Start # Lo MODI SIGN HUVA
+11680..116AA ; XID_Start # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116B8 ; XID_Start # Lo TAKRI LETTER ARCHAIC KHA
+11700..1171A ; XID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+11740..11746 ; XID_Start # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
+11800..1182B ; XID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+118A0..118DF ; XID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118FF..11906 ; XID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; XID_Start # Lo DIVES AKURU LETTER O
+1190C..11913 ; XID_Start # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; XID_Start # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; XID_Start # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; XID_Start # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; XID_Start # Lo DIVES AKURU INITIAL RA
+119A0..119A7 ; XID_Start # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; XID_Start # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119E1 ; XID_Start # Lo NANDINAGARI SIGN AVAGRAHA
+119E3 ; XID_Start # Lo NANDINAGARI HEADSTROKE
+11A00 ; XID_Start # Lo ZANABAZAR SQUARE LETTER A
+11A0B..11A32 ; XID_Start # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A3A ; XID_Start # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A50 ; XID_Start # Lo SOYOMBO LETTER A
+11A5C..11A89 ; XID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A9D ; XID_Start # Lo SOYOMBO MARK PLUTA
+11AB0..11AF8 ; XID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; XID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; XID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C40 ; XID_Start # Lo BHAIKSUKI SIGN AVAGRAHA
+11C72..11C8F ; XID_Start # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11D00..11D06 ; XID_Start # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; XID_Start # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; XID_Start # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D46 ; XID_Start # Lo MASARAM GONDI REPHA
+11D60..11D65 ; XID_Start # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; XID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; XID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D98 ; XID_Start # Lo GUNJALA GONDI OM
+11EE0..11EF2 ; XID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; XID_Start # Lo LISU LETTER YHA
+12000..12399 ; XID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; XID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12480..12543 ; XID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0 ; XID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+13000..1342E ; XID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646 ; XID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38 ; XID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E ; XID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A70..16ABE ; XID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AD0..16AED ; XID_Start # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16B00..16B2F ; XID_Start # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B40..16B43 ; XID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B63..16B77 ; XID_Start # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; XID_Start # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F ; XID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16F00..16F4A ; XID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F50 ; XID_Start # Lo MIAO LETTER NASALIZATION
+16F93..16F9F ; XID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; XID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK
+17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; XID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3 ; XID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; XID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; XID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1B000..1B122 ; XID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
+1B150..1B152 ; XID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167 ; XID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB ; XID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A ; XID_Start # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; XID_Start # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; XID_Start # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; XID_Start # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1D400..1D454 ; XID_Start # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; XID_Start # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; XID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; XID_Start # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; XID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; XID_Start # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; XID_Start # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; XID_Start # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; XID_Start # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; XID_Start # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; XID_Start # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; XID_Start # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; XID_Start # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; XID_Start # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; XID_Start # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; XID_Start # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; XID_Start # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; XID_Start # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; XID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; XID_Start # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; XID_Start # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; XID_Start # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; XID_Start # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; XID_Start # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; XID_Start # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; XID_Start # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; XID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; XID_Start # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; XID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; XID_Start # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1DF00..1DF09 ; XID_Start # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A ; XID_Start # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E ; XID_Start # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E100..1E12C ; XID_Start # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E137..1E13D ; XID_Start # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E14E ; XID_Start # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E290..1E2AD ; XID_Start # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2C0..1E2EB ; XID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E7E0..1E7E6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE ; XID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE ; XID_Start # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E800..1E8C4 ; XID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E900..1E943 ; XID_Start # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E94B ; XID_Start # Lm ADLAM NASALIZATION MARK
+1EE00..1EE03 ; XID_Start # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; XID_Start # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; XID_Start # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; XID_Start # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; XID_Start # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; XID_Start # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; XID_Start # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; XID_Start # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; XID_Start # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; XID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; XID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; XID_Start # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; XID_Start # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; XID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; XID_Start # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; XID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; XID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; XID_Start # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; XID_Start # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; XID_Start # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; XID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; XID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; XID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+20000..2A6DF ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; XID_Start # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 131974
+
+# ================================================
+
+# Derived Property: XID_Continue
+# Mod_ID_Continue modified for closure under NFKx
+# Modified as described in UAX #15
+# NOTE: Does NOT remove the non-NFKx characters.
+# Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string))
+# NOTE: See UAX #31 for more information
+
+0030..0039 ; XID_Continue # Nd [10] DIGIT ZERO..DIGIT NINE
+0041..005A ; XID_Continue # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005F ; XID_Continue # Pc LOW LINE
+0061..007A ; XID_Continue # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA ; XID_Continue # Lo FEMININE ORDINAL INDICATOR
+00B5 ; XID_Continue # L& MICRO SIGN
+00B7 ; XID_Continue # Po MIDDLE DOT
+00BA ; XID_Continue # Lo MASCULINE ORDINAL INDICATOR
+00C0..00D6 ; XID_Continue # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6 ; XID_Continue # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA ; XID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; XID_Continue # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; XID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; XID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; XID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; XID_Continue # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; XID_Continue # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1 ; XID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1 ; XID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4 ; XID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC ; XID_Continue # Lm MODIFIER LETTER VOICING
+02EE ; XID_Continue # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+0300..036F ; XID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0370..0373 ; XID_Continue # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374 ; XID_Continue # Lm GREEK NUMERAL SIGN
+0376..0377 ; XID_Continue # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037B..037D ; XID_Continue # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037F ; XID_Continue # L& GREEK CAPITAL LETTER YOT
+0386 ; XID_Continue # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; XID_Continue # Po GREEK ANO TELEIA
+0388..038A ; XID_Continue # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; XID_Continue # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; XID_Continue # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; XID_Continue # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481 ; XID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+0483..0487 ; XID_Continue # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+048A..052F ; XID_Continue # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; XID_Continue # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; XID_Continue # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+0560..0588 ; XID_Continue # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+0591..05BD ; XID_Continue # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF ; XID_Continue # Mn HEBREW POINT RAFE
+05C1..05C2 ; XID_Continue # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; XID_Continue # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; XID_Continue # Mn HEBREW POINT QAMATS QATAN
+05D0..05EA ; XID_Continue # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; XID_Continue # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A ; XID_Continue # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0620..063F ; XID_Continue # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640 ; XID_Continue # Lm ARABIC TATWEEL
+0641..064A ; XID_Continue # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..065F ; XID_Continue # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0660..0669 ; XID_Continue # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066E..066F ; XID_Continue # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670 ; XID_Continue # Mn ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3 ; XID_Continue # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5 ; XID_Continue # Lo ARABIC LETTER AE
+06D6..06DC ; XID_Continue # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4 ; XID_Continue # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E5..06E6 ; XID_Continue # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8 ; XID_Continue # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; XID_Continue # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+06EE..06EF ; XID_Continue # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9 ; XID_Continue # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC ; XID_Continue # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF ; XID_Continue # Lo ARABIC LETTER HEH WITH INVERTED V
+0710 ; XID_Continue # Lo SYRIAC LETTER ALAPH
+0711 ; XID_Continue # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F ; XID_Continue # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..074A ; XID_Continue # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+074D..07A5 ; XID_Continue # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0 ; XID_Continue # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07B1 ; XID_Continue # Lo THAANA LETTER NAA
+07C0..07C9 ; XID_Continue # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA ; XID_Continue # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07EB..07F3 ; XID_Continue # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07F4..07F5 ; XID_Continue # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA ; XID_Continue # Lm NKO LAJANYALAN
+07FD ; XID_Continue # Mn NKO DANTAYALAN
+0800..0815 ; XID_Continue # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0819 ; XID_Continue # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081A ; XID_Continue # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823 ; XID_Continue # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824 ; XID_Continue # Lm SAMARITAN MODIFIER LETTER SHORT A
+0825..0827 ; XID_Continue # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828 ; XID_Continue # Lm SAMARITAN MODIFIER LETTER I
+0829..082D ; XID_Continue # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0840..0858 ; XID_Continue # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0859..085B ; XID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0889..088E ; XID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+0898..089F ; XID_Continue # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+08A0..08C8 ; XID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9 ; XID_Continue # Lm ARABIC SMALL FARSI YEH
+08CA..08E1 ; XID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
+08E3..0902 ; XID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
+0903 ; XID_Continue # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; XID_Continue # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A ; XID_Continue # Mn DEVANAGARI VOWEL SIGN OE
+093B ; XID_Continue # Mc DEVANAGARI VOWEL SIGN OOE
+093C ; XID_Continue # Mn DEVANAGARI SIGN NUKTA
+093D ; XID_Continue # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; XID_Continue # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948 ; XID_Continue # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C ; XID_Continue # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094D ; XID_Continue # Mn DEVANAGARI SIGN VIRAMA
+094E..094F ; XID_Continue # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950 ; XID_Continue # Lo DEVANAGARI OM
+0951..0957 ; XID_Continue # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0958..0961 ; XID_Continue # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963 ; XID_Continue # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F ; XID_Continue # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971 ; XID_Continue # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..0980 ; XID_Continue # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+0981 ; XID_Continue # Mn BENGALI SIGN CANDRABINDU
+0982..0983 ; XID_Continue # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; XID_Continue # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; XID_Continue # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; XID_Continue # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; XID_Continue # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; XID_Continue # Lo BENGALI LETTER LA
+09B6..09B9 ; XID_Continue # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC ; XID_Continue # Mn BENGALI SIGN NUKTA
+09BD ; XID_Continue # Lo BENGALI SIGN AVAGRAHA
+09BE..09C0 ; XID_Continue # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4 ; XID_Continue # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8 ; XID_Continue # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; XID_Continue # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CD ; XID_Continue # Mn BENGALI SIGN VIRAMA
+09CE ; XID_Continue # Lo BENGALI LETTER KHANDA TA
+09D7 ; XID_Continue # Mc BENGALI AU LENGTH MARK
+09DC..09DD ; XID_Continue # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; XID_Continue # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3 ; XID_Continue # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09EF ; XID_Continue # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1 ; XID_Continue # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; XID_Continue # Lo BENGALI LETTER VEDIC ANUSVARA
+09FE ; XID_Continue # Mn BENGALI SANDHI MARK
+0A01..0A02 ; XID_Continue # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03 ; XID_Continue # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; XID_Continue # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; XID_Continue # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; XID_Continue # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; XID_Continue # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; XID_Continue # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; XID_Continue # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; XID_Continue # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C ; XID_Continue # Mn GURMUKHI SIGN NUKTA
+0A3E..0A40 ; XID_Continue # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42 ; XID_Continue # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; XID_Continue # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; XID_Continue # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51 ; XID_Continue # Mn GURMUKHI SIGN UDAAT
+0A59..0A5C ; XID_Continue # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; XID_Continue # Lo GURMUKHI LETTER FA
+0A66..0A6F ; XID_Continue # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A70..0A71 ; XID_Continue # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A72..0A74 ; XID_Continue # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A75 ; XID_Continue # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; XID_Continue # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0A83 ; XID_Continue # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; XID_Continue # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; XID_Continue # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; XID_Continue # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; XID_Continue # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; XID_Continue # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; XID_Continue # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC ; XID_Continue # Mn GUJARATI SIGN NUKTA
+0ABD ; XID_Continue # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; XID_Continue # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC1..0AC5 ; XID_Continue # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; XID_Continue # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0AC9 ; XID_Continue # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; XID_Continue # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0ACD ; XID_Continue # Mn GUJARATI SIGN VIRAMA
+0AD0 ; XID_Continue # Lo GUJARATI OM
+0AE0..0AE1 ; XID_Continue # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE2..0AE3 ; XID_Continue # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF ; XID_Continue # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF9 ; XID_Continue # Lo GUJARATI LETTER ZHA
+0AFA..0AFF ; XID_Continue # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01 ; XID_Continue # Mn ORIYA SIGN CANDRABINDU
+0B02..0B03 ; XID_Continue # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; XID_Continue # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; XID_Continue # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; XID_Continue # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; XID_Continue # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; XID_Continue # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; XID_Continue # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3C ; XID_Continue # Mn ORIYA SIGN NUKTA
+0B3D ; XID_Continue # Lo ORIYA SIGN AVAGRAHA
+0B3E ; XID_Continue # Mc ORIYA VOWEL SIGN AA
+0B3F ; XID_Continue # Mn ORIYA VOWEL SIGN I
+0B40 ; XID_Continue # Mc ORIYA VOWEL SIGN II
+0B41..0B44 ; XID_Continue # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B47..0B48 ; XID_Continue # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; XID_Continue # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B4D ; XID_Continue # Mn ORIYA SIGN VIRAMA
+0B55..0B56 ; XID_Continue # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+0B57 ; XID_Continue # Mc ORIYA AU LENGTH MARK
+0B5C..0B5D ; XID_Continue # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; XID_Continue # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B62..0B63 ; XID_Continue # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B66..0B6F ; XID_Continue # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B71 ; XID_Continue # Lo ORIYA LETTER WA
+0B82 ; XID_Continue # Mn TAMIL SIGN ANUSVARA
+0B83 ; XID_Continue # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; XID_Continue # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; XID_Continue # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; XID_Continue # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; XID_Continue # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; XID_Continue # Lo TAMIL LETTER JA
+0B9E..0B9F ; XID_Continue # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; XID_Continue # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; XID_Continue # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; XID_Continue # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBE..0BBF ; XID_Continue # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+0BC0 ; XID_Continue # Mn TAMIL VOWEL SIGN II
+0BC1..0BC2 ; XID_Continue # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; XID_Continue # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; XID_Continue # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BCD ; XID_Continue # Mn TAMIL SIGN VIRAMA
+0BD0 ; XID_Continue # Lo TAMIL OM
+0BD7 ; XID_Continue # Mc TAMIL AU LENGTH MARK
+0BE6..0BEF ; XID_Continue # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0C00 ; XID_Continue # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C01..0C03 ; XID_Continue # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04 ; XID_Continue # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C ; XID_Continue # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; XID_Continue # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; XID_Continue # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; XID_Continue # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3C ; XID_Continue # Mn TELUGU SIGN NUKTA
+0C3D ; XID_Continue # Lo TELUGU SIGN AVAGRAHA
+0C3E..0C40 ; XID_Continue # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C41..0C44 ; XID_Continue # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48 ; XID_Continue # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; XID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; XID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C58..0C5A ; XID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D ; XID_Continue # Lo TELUGU LETTER NAKAARA POLLU
+0C60..0C61 ; XID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C62..0C63 ; XID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C66..0C6F ; XID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C80 ; XID_Continue # Lo KANNADA SIGN SPACING CANDRABINDU
+0C81 ; XID_Continue # Mn KANNADA SIGN CANDRABINDU
+0C82..0C83 ; XID_Continue # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C ; XID_Continue # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; XID_Continue # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; XID_Continue # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; XID_Continue # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; XID_Continue # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC ; XID_Continue # Mn KANNADA SIGN NUKTA
+0CBD ; XID_Continue # Lo KANNADA SIGN AVAGRAHA
+0CBE ; XID_Continue # Mc KANNADA VOWEL SIGN AA
+0CBF ; XID_Continue # Mn KANNADA VOWEL SIGN I
+0CC0..0CC4 ; XID_Continue # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+0CC6 ; XID_Continue # Mn KANNADA VOWEL SIGN E
+0CC7..0CC8 ; XID_Continue # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; XID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CCC..0CCD ; XID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6 ; XID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CDD..0CDE ; XID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+0CE0..0CE1 ; XID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3 ; XID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF ; XID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2 ; XID_Continue # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00..0D01 ; XID_Continue # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D02..0D03 ; XID_Continue # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D04..0D0C ; XID_Continue # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; XID_Continue # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; XID_Continue # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C ; XID_Continue # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D3D ; XID_Continue # Lo MALAYALAM SIGN AVAGRAHA
+0D3E..0D40 ; XID_Continue # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+0D41..0D44 ; XID_Continue # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D46..0D48 ; XID_Continue # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; XID_Continue # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4D ; XID_Continue # Mn MALAYALAM SIGN VIRAMA
+0D4E ; XID_Continue # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; XID_Continue # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57 ; XID_Continue # Mc MALAYALAM AU LENGTH MARK
+0D5F..0D61 ; XID_Continue # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D62..0D63 ; XID_Continue # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D66..0D6F ; XID_Continue # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D7A..0D7F ; XID_Continue # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; XID_Continue # Mn SINHALA SIGN CANDRABINDU
+0D82..0D83 ; XID_Continue # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; XID_Continue # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; XID_Continue # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; XID_Continue # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; XID_Continue # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; XID_Continue # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA ; XID_Continue # Mn SINHALA SIGN AL-LAKUNA
+0DCF..0DD1 ; XID_Continue # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD2..0DD4 ; XID_Continue # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; XID_Continue # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDF ; XID_Continue # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+0DE6..0DEF ; XID_Continue # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+0DF2..0DF3 ; XID_Continue # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0E01..0E30 ; XID_Continue # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E31 ; XID_Continue # Mn THAI CHARACTER MAI HAN-AKAT
+0E32..0E33 ; XID_Continue # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E34..0E3A ; XID_Continue # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E45 ; XID_Continue # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; XID_Continue # Lm THAI CHARACTER MAIYAMOK
+0E47..0E4E ; XID_Continue # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0E50..0E59 ; XID_Continue # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E81..0E82 ; XID_Continue # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; XID_Continue # Lo LAO LETTER KHO TAM
+0E86..0E8A ; XID_Continue # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; XID_Continue # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; XID_Continue # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; XID_Continue # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB1 ; XID_Continue # Mn LAO VOWEL SIGN MAI KAN
+0EB2..0EB3 ; XID_Continue # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EB4..0EBC ; XID_Continue # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EBD ; XID_Continue # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; XID_Continue # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; XID_Continue # Lm LAO KO LA
+0EC8..0ECD ; XID_Continue # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9 ; XID_Continue # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDF ; XID_Continue # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00 ; XID_Continue # Lo TIBETAN SYLLABLE OM
+0F18..0F19 ; XID_Continue # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F20..0F29 ; XID_Continue # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F35 ; XID_Continue # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; XID_Continue # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; XID_Continue # Mn TIBETAN MARK TSA -PHRU
+0F3E..0F3F ; XID_Continue # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47 ; XID_Continue # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; XID_Continue # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F71..0F7E ; XID_Continue # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F7F ; XID_Continue # Mc TIBETAN SIGN RNAM BCAD
+0F80..0F84 ; XID_Continue # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; XID_Continue # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F88..0F8C ; XID_Continue # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0F8D..0F97 ; XID_Continue # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; XID_Continue # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; XID_Continue # Mn TIBETAN SYMBOL PADMA GDAN
+1000..102A ; XID_Continue # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C ; XID_Continue # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+102D..1030 ; XID_Continue # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1031 ; XID_Continue # Mc MYANMAR VOWEL SIGN E
+1032..1037 ; XID_Continue # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1038 ; XID_Continue # Mc MYANMAR SIGN VISARGA
+1039..103A ; XID_Continue # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103B..103C ; XID_Continue # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103D..103E ; XID_Continue # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+103F ; XID_Continue # Lo MYANMAR LETTER GREAT SA
+1040..1049 ; XID_Continue # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+1050..1055 ; XID_Continue # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; XID_Continue # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+1058..1059 ; XID_Continue # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105A..105D ; XID_Continue # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+105E..1060 ; XID_Continue # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1061 ; XID_Continue # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064 ; XID_Continue # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066 ; XID_Continue # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D ; XID_Continue # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070 ; XID_Continue # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1071..1074 ; XID_Continue # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1075..1081 ; XID_Continue # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1082 ; XID_Continue # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1083..1084 ; XID_Continue # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1085..1086 ; XID_Continue # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+1087..108C ; XID_Continue # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108D ; XID_Continue # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+108E ; XID_Continue # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F ; XID_Continue # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099 ; XID_Continue # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C ; XID_Continue # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109D ; XID_Continue # Mn MYANMAR VOWEL SIGN AITON AI
+10A0..10C5 ; XID_Continue # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; XID_Continue # L& GEORGIAN CAPITAL LETTER YN
+10CD ; XID_Continue # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; XID_Continue # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FC ; XID_Continue # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; XID_Continue # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..1248 ; XID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; XID_Continue # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; XID_Continue # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; XID_Continue # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; XID_Continue # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; XID_Continue # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; XID_Continue # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; XID_Continue # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+135D..135F ; XID_Continue # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1369..1371 ; XID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+1380..138F ; XID_Continue # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+13A0..13F5 ; XID_Continue # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; XID_Continue # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1401..166C ; XID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..167F ; XID_Continue # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1681..169A ; XID_Continue # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA ; XID_Continue # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0 ; XID_Continue # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; XID_Continue # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..1711 ; XID_Continue # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
+1712..1714 ; XID_Continue # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1715 ; XID_Continue # Mc TAGALOG SIGN PAMUDPOD
+171F..1731 ; XID_Continue # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
+1732..1733 ; XID_Continue # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1734 ; XID_Continue # Mc HANUNOO SIGN PAMUDPOD
+1740..1751 ; XID_Continue # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1752..1753 ; XID_Continue # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1760..176C ; XID_Continue # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; XID_Continue # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773 ; XID_Continue # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1780..17B3 ; XID_Continue # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B4..17B5 ; XID_Continue # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B6 ; XID_Continue # Mc KHMER VOWEL SIGN AA
+17B7..17BD ; XID_Continue # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17BE..17C5 ; XID_Continue # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C6 ; XID_Continue # Mn KHMER SIGN NIKAHIT
+17C7..17C8 ; XID_Continue # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17C9..17D3 ; XID_Continue # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17D7 ; XID_Continue # Lm KHMER SIGN LEK TOO
+17DC ; XID_Continue # Lo KHMER SIGN AVAKRAHASANYA
+17DD ; XID_Continue # Mn KHMER SIGN ATTHACAN
+17E0..17E9 ; XID_Continue # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+180B..180D ; XID_Continue # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180F ; XID_Continue # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+1810..1819 ; XID_Continue # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842 ; XID_Continue # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; XID_Continue # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; XID_Continue # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; XID_Continue # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; XID_Continue # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; XID_Continue # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18A9 ; XID_Continue # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+18AA ; XID_Continue # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5 ; XID_Continue # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E ; XID_Continue # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1920..1922 ; XID_Continue # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1923..1926 ; XID_Continue # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1927..1928 ; XID_Continue # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1929..192B ; XID_Continue # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; XID_Continue # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1932 ; XID_Continue # Mn LIMBU SMALL LETTER ANUSVARA
+1933..1938 ; XID_Continue # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1939..193B ; XID_Continue # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1946..194F ; XID_Continue # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D ; XID_Continue # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; XID_Continue # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB ; XID_Continue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; XID_Continue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9 ; XID_Continue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA ; XID_Continue # No NEW TAI LUE THAM DIGIT ONE
+1A00..1A16 ; XID_Continue # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A17..1A18 ; XID_Continue # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A19..1A1A ; XID_Continue # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1B ; XID_Continue # Mn BUGINESE VOWEL SIGN AE
+1A20..1A54 ; XID_Continue # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55 ; XID_Continue # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A56 ; XID_Continue # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A57 ; XID_Continue # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A58..1A5E ; XID_Continue # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60 ; XID_Continue # Mn TAI THAM SIGN SAKOT
+1A61 ; XID_Continue # Mc TAI THAM VOWEL SIGN A
+1A62 ; XID_Continue # Mn TAI THAM VOWEL SIGN MAI SAT
+1A63..1A64 ; XID_Continue # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A65..1A6C ; XID_Continue # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A6D..1A72 ; XID_Continue # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A73..1A7C ; XID_Continue # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; XID_Continue # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1A80..1A89 ; XID_Continue # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99 ; XID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA7 ; XID_Continue # Lm TAI THAM SIGN MAI YAMOK
+1AB0..1ABD ; XID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABF..1ACE ; XID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
+1B00..1B03 ; XID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B04 ; XID_Continue # Mc BALINESE SIGN BISAH
+1B05..1B33 ; XID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B34 ; XID_Continue # Mn BALINESE SIGN REREKAN
+1B35 ; XID_Continue # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A ; XID_Continue # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3B ; XID_Continue # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3C ; XID_Continue # Mn BALINESE VOWEL SIGN LA LENGA
+1B3D..1B41 ; XID_Continue # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B42 ; XID_Continue # Mn BALINESE VOWEL SIGN PEPET
+1B43..1B44 ; XID_Continue # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4C ; XID_Continue # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+1B50..1B59 ; XID_Continue # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B6B..1B73 ; XID_Continue # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81 ; XID_Continue # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1B82 ; XID_Continue # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0 ; XID_Continue # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1 ; XID_Continue # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA2..1BA5 ; XID_Continue # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA6..1BA7 ; XID_Continue # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BA8..1BA9 ; XID_Continue # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAA ; XID_Continue # Mc SUNDANESE SIGN PAMAAEH
+1BAB..1BAD ; XID_Continue # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BAF ; XID_Continue # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9 ; XID_Continue # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BE5 ; XID_Continue # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+1BE6 ; XID_Continue # Mn BATAK SIGN TOMPI
+1BE7 ; XID_Continue # Mc BATAK VOWEL SIGN E
+1BE8..1BE9 ; XID_Continue # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BEA..1BEC ; XID_Continue # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BED ; XID_Continue # Mn BATAK VOWEL SIGN KARO O
+1BEE ; XID_Continue # Mc BATAK VOWEL SIGN U
+1BEF..1BF1 ; XID_Continue # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1BF2..1BF3 ; XID_Continue # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1C00..1C23 ; XID_Continue # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B ; XID_Continue # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C2C..1C33 ; XID_Continue # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C34..1C35 ; XID_Continue # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C36..1C37 ; XID_Continue # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1C40..1C49 ; XID_Continue # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F ; XID_Continue # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59 ; XID_Continue # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77 ; XID_Continue # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; XID_Continue # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C80..1C88 ; XID_Continue # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; XID_Continue # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; XID_Continue # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CD0..1CD2 ; XID_Continue # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0 ; XID_Continue # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE1 ; XID_Continue # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE2..1CE8 ; XID_Continue # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CE9..1CEC ; XID_Continue # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CED ; XID_Continue # Mn VEDIC SIGN TIRYAK
+1CEE..1CF3 ; XID_Continue # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF4 ; XID_Continue # Mn VEDIC TONE CANDRA ABOVE
+1CF5..1CF6 ; XID_Continue # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7 ; XID_Continue # Mc VEDIC SIGN ATIKRAMA
+1CF8..1CF9 ; XID_Continue # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1CFA ; XID_Continue # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B ; XID_Continue # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; XID_Continue # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; XID_Continue # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; XID_Continue # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; XID_Continue # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; XID_Continue # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1DC0..1DFF ; XID_Continue # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E00..1F15 ; XID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; XID_Continue # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; XID_Continue # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; XID_Continue # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; XID_Continue # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; XID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; XID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; XID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; XID_Continue # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; XID_Continue # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; XID_Continue # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; XID_Continue # L& GREEK PROSGEGRAMMENI
+1FC2..1FC4 ; XID_Continue # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; XID_Continue # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD3 ; XID_Continue # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; XID_Continue # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE0..1FEC ; XID_Continue # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4 ; XID_Continue # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; XID_Continue # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+203F..2040 ; XID_Continue # Pc [2] UNDERTIE..CHARACTER TIE
+2054 ; XID_Continue # Pc INVERTED UNDERTIE
+2071 ; XID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; XID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; XID_Continue # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20D0..20DC ; XID_Continue # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1 ; XID_Continue # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20F0 ; XID_Continue # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2102 ; XID_Continue # L& DOUBLE-STRUCK CAPITAL C
+2107 ; XID_Continue # L& EULER CONSTANT
+210A..2113 ; XID_Continue # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; XID_Continue # L& DOUBLE-STRUCK CAPITAL N
+2118 ; XID_Continue # Sm SCRIPT CAPITAL P
+2119..211D ; XID_Continue # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124 ; XID_Continue # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; XID_Continue # L& OHM SIGN
+2128 ; XID_Continue # L& BLACK-LETTER CAPITAL Z
+212A..212D ; XID_Continue # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E ; XID_Continue # So ESTIMATED SYMBOL
+212F..2134 ; XID_Continue # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; XID_Continue # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; XID_Continue # L& INFORMATION SOURCE
+213C..213F ; XID_Continue # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2145..2149 ; XID_Continue # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214E ; XID_Continue # L& TURNED SMALL F
+2160..2182 ; XID_Continue # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; XID_Continue # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; XID_Continue # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C00..2C7B ; XID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; XID_Continue # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; XID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CEB..2CEE ; XID_Continue # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CEF..2CF1 ; XID_Continue # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF2..2CF3 ; XID_Continue # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2D00..2D25 ; XID_Continue # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; XID_Continue # L& GEORGIAN SMALL LETTER YN
+2D2D ; XID_Continue # L& GEORGIAN SMALL LETTER AEN
+2D30..2D67 ; XID_Continue # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; XID_Continue # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D7F ; XID_Continue # Mn TIFINAGH CONSONANT JOINER
+2D80..2D96 ; XID_Continue # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2DE0..2DFF ; XID_Continue # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+3005 ; XID_Continue # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; XID_Continue # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; XID_Continue # Nl IDEOGRAPHIC NUMBER ZERO
+3021..3029 ; XID_Continue # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+302A..302D ; XID_Continue # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F ; XID_Continue # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3031..3035 ; XID_Continue # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3038..303A ; XID_Continue # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; XID_Continue # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; XID_Continue # Lo MASU MARK
+3041..3096 ; XID_Continue # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+3099..309A ; XID_Continue # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E ; XID_Continue # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; XID_Continue # Lo HIRAGANA DIGRAPH YORI
+30A1..30FA ; XID_Continue # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE ; XID_Continue # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; XID_Continue # Lo KATAKANA DIGRAPH KOTO
+3105..312F ; XID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E ; XID_Continue # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+31A0..31BF ; XID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+31F0..31FF ; XID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3400..4DBF ; XID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..A014 ; XID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
+A015 ; XID_Continue # Lm YI SYLLABLE WU
+A016..A48C ; XID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A4D0..A4F7 ; XID_Continue # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; XID_Continue # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A500..A60B ; XID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; XID_Continue # Lm VAI SYLLABLE LENGTHENER
+A610..A61F ; XID_Continue # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629 ; XID_Continue # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B ; XID_Continue # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D ; XID_Continue # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; XID_Continue # Lo CYRILLIC LETTER MULTIOCULAR O
+A66F ; XID_Continue # Mn COMBINING CYRILLIC VZMET
+A674..A67D ; XID_Continue # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A67F ; XID_Continue # Lm CYRILLIC PAYEROK
+A680..A69B ; XID_Continue # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; XID_Continue # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A69E..A69F ; XID_Continue # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6A0..A6E5 ; XID_Continue # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; XID_Continue # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F0..A6F1 ; XID_Continue # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A717..A71F ; XID_Continue # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A722..A76F ; XID_Continue # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; XID_Continue # Lm MODIFIER LETTER US
+A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7CA ; XID_Continue # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; XID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; XID_Continue # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; XID_Continue # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4 ; XID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; XID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; XID_Continue # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A801 ; XID_Continue # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A802 ; XID_Continue # Mn SYLOTI NAGRI SIGN DVISVARA
+A803..A805 ; XID_Continue # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A806 ; XID_Continue # Mn SYLOTI NAGRI SIGN HASANTA
+A807..A80A ; XID_Continue # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80B ; XID_Continue # Mn SYLOTI NAGRI SIGN ANUSVARA
+A80C..A822 ; XID_Continue # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; XID_Continue # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A825..A826 ; XID_Continue # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A827 ; XID_Continue # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; XID_Continue # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A840..A873 ; XID_Continue # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A880..A881 ; XID_Continue # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3 ; XID_Continue # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3 ; XID_Continue # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8C4..A8C5 ; XID_Continue # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8D0..A8D9 ; XID_Continue # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8E0..A8F1 ; XID_Continue # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8F2..A8F7 ; XID_Continue # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB ; XID_Continue # Lo DEVANAGARI HEADSTROKE
+A8FD..A8FE ; XID_Continue # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A8FF ; XID_Continue # Mn DEVANAGARI VOWEL SIGN AY
+A900..A909 ; XID_Continue # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925 ; XID_Continue # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A926..A92D ; XID_Continue # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A930..A946 ; XID_Continue # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A947..A951 ; XID_Continue # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A952..A953 ; XID_Continue # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A960..A97C ; XID_Continue # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A980..A982 ; XID_Continue # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A983 ; XID_Continue # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2 ; XID_Continue # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B3 ; XID_Continue # Mn JAVANESE SIGN CECAK TELU
+A9B4..A9B5 ; XID_Continue # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9B6..A9B9 ; XID_Continue # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BA..A9BB ; XID_Continue # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BC..A9BD ; XID_Continue # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9BE..A9C0 ; XID_Continue # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+A9CF ; XID_Continue # Lm JAVANESE PANGRANGKEP
+A9D0..A9D9 ; XID_Continue # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9E0..A9E4 ; XID_Continue # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E5 ; XID_Continue # Mn MYANMAR SIGN SHAN SAW
+A9E6 ; XID_Continue # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; XID_Continue # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9F0..A9F9 ; XID_Continue # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+A9FA..A9FE ; XID_Continue # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28 ; XID_Continue # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA29..AA2E ; XID_Continue # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA2F..AA30 ; XID_Continue # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA31..AA32 ; XID_Continue # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA33..AA34 ; XID_Continue # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA35..AA36 ; XID_Continue # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA40..AA42 ; XID_Continue # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA43 ; XID_Continue # Mn CHAM CONSONANT SIGN FINAL NG
+AA44..AA4B ; XID_Continue # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4C ; XID_Continue # Mn CHAM CONSONANT SIGN FINAL M
+AA4D ; XID_Continue # Mc CHAM CONSONANT SIGN FINAL H
+AA50..AA59 ; XID_Continue # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA60..AA6F ; XID_Continue # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; XID_Continue # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; XID_Continue # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A ; XID_Continue # Lo MYANMAR LETTER AITON RA
+AA7B ; XID_Continue # Mc MYANMAR SIGN PAO KAREN TONE
+AA7C ; XID_Continue # Mn MYANMAR SIGN TAI LAING TONE-2
+AA7D ; XID_Continue # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AAAF ; XID_Continue # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+AAB0 ; XID_Continue # Mn TAI VIET MAI KANG
+AAB1 ; XID_Continue # Lo TAI VIET VOWEL AA
+AAB2..AAB4 ; XID_Continue # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB5..AAB6 ; XID_Continue # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB7..AAB8 ; XID_Continue # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AAB9..AABD ; XID_Continue # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AABE..AABF ; XID_Continue # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC0 ; XID_Continue # Lo TAI VIET TONE MAI NUENG
+AAC1 ; XID_Continue # Mn TAI VIET TONE MAI THO
+AAC2 ; XID_Continue # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; XID_Continue # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; XID_Continue # Lm TAI VIET SYMBOL SAM
+AAE0..AAEA ; XID_Continue # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB ; XID_Continue # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; XID_Continue # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF2 ; XID_Continue # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; XID_Continue # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5 ; XID_Continue # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AAF6 ; XID_Continue # Mn MEETEI MAYEK VIRAMA
+AB01..AB06 ; XID_Continue # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; XID_Continue # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; XID_Continue # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A ; XID_Continue # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5C..AB5F ; XID_Continue # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; XID_Continue # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; XID_Continue # Lm MODIFIER LETTER SMALL TURNED W
+AB70..ABBF ; XID_Continue # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2 ; XID_Continue # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4 ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE5 ; XID_Continue # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE6..ABE7 ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE8 ; XID_Continue # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABE9..ABEA ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC ; XID_Continue # Mc MEETEI MAYEK LUM IYEK
+ABED ; XID_Continue # Mn MEETEI MAYEK APUN IYEK
+ABF0..ABF9 ; XID_Continue # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3 ; XID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; XID_Continue # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; XID_Continue # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA6D ; XID_Continue # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; XID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; XID_Continue # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; XID_Continue # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; XID_Continue # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1E ; XID_Continue # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FB1F..FB28 ; XID_Continue # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB2A..FB36 ; XID_Continue # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; XID_Continue # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; XID_Continue # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; XID_Continue # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; XID_Continue # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; XID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FC5D ; XID_Continue # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64..FD3D ; XID_Continue # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; XID_Continue # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; XID_Continue # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDF9 ; XID_Continue # Lo [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM
+FE00..FE0F ; XID_Continue # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE2F ; XID_Continue # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FE33..FE34 ; XID_Continue # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE4D..FE4F ; XID_Continue # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE71 ; XID_Continue # Lo ARABIC TATWEEL WITH FATHATAN ABOVE
+FE73 ; XID_Continue # Lo ARABIC TAIL FRAGMENT
+FE77 ; XID_Continue # Lo ARABIC FATHA MEDIAL FORM
+FE79 ; XID_Continue # Lo ARABIC DAMMA MEDIAL FORM
+FE7B ; XID_Continue # Lo ARABIC KASRA MEDIAL FORM
+FE7D ; XID_Continue # Lo ARABIC SHADDA MEDIAL FORM
+FE7F..FEFC ; XID_Continue # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF10..FF19 ; XID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF21..FF3A ; XID_Continue # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3F ; XID_Continue # Pc FULLWIDTH LOW LINE
+FF41..FF5A ; XID_Continue # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF66..FF6F ; XID_Continue # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; XID_Continue # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; XID_Continue # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; XID_Continue # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; XID_Continue # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; XID_Continue # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; XID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; XID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+10000..1000B ; XID_Continue # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; XID_Continue # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; XID_Continue # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; XID_Continue # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; XID_Continue # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; XID_Continue # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; XID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10140..10174 ; XID_Continue # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+101FD ; XID_Continue # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+10280..1029C ; XID_Continue # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0 ; XID_Continue # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+102E0 ; XID_Continue # Mn COPTIC EPACT THOUSANDS MARK
+10300..1031F ; XID_Continue # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+1032D..10340 ; XID_Continue # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+10341 ; XID_Continue # Nl GOTHIC LETTER NINETY
+10342..10349 ; XID_Continue # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; XID_Continue # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375 ; XID_Continue # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10376..1037A ; XID_Continue # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10380..1039D ; XID_Continue # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3 ; XID_Continue # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; XID_Continue # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5 ; XID_Continue # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F ; XID_Continue # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; XID_Continue # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9 ; XID_Continue # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+104B0..104D3 ; XID_Continue # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; XID_Continue # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527 ; XID_Continue # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563 ; XID_Continue # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+10570..1057A ; XID_Continue # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; XID_Continue # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; XID_Continue # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; XID_Continue # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; XID_Continue # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; XID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; XID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; XID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10600..10736 ; XID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; XID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; XID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785 ; XID_Continue # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; XID_Continue # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; XID_Continue # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10800..10805 ; XID_Continue # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; XID_Continue # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; XID_Continue # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; XID_Continue # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; XID_Continue # Lo CYPRIOT SYLLABLE ZA
+1083F..10855 ; XID_Continue # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10860..10876 ; XID_Continue # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10880..1089E ; XID_Continue # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108E0..108F2 ; XID_Continue # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; XID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+10900..10915 ; XID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939 ; XID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+10980..109B7 ; XID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF ; XID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+10A00 ; XID_Continue # Lo KHAROSHTHI LETTER A
+10A01..10A03 ; XID_Continue # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; XID_Continue # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; XID_Continue # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A10..10A13 ; XID_Continue # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; XID_Continue # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; XID_Continue # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A38..10A3A ; XID_Continue # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; XID_Continue # Mn KHAROSHTHI VIRAMA
+10A60..10A7C ; XID_Continue # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A80..10A9C ; XID_Continue # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10AC0..10AC7 ; XID_Continue # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC9..10AE4 ; XID_Continue # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10AE5..10AE6 ; XID_Continue # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10B00..10B35 ; XID_Continue # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55 ; XID_Continue # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72 ; XID_Continue # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80..10B91 ; XID_Continue # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10C00..10C48 ; XID_Continue # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2 ; XID_Continue # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; XID_Continue # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10D00..10D23 ; XID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D24..10D27 ; XID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39 ; XID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E80..10EA9 ; XID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; XID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1 ; XID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C ; XID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F46..10F50 ; XID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F70..10F81 ; XID_Continue # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10F82..10F85 ; XID_Continue # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+10FB0..10FC4 ; XID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FE0..10FF6 ; XID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000 ; XID_Continue # Mc BRAHMI SIGN CANDRABINDU
+11001 ; XID_Continue # Mn BRAHMI SIGN ANUSVARA
+11002 ; XID_Continue # Mc BRAHMI SIGN VISARGA
+11003..11037 ; XID_Continue # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11038..11046 ; XID_Continue # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11066..1106F ; XID_Continue # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+11070 ; XID_Continue # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+11071..11072 ; XID_Continue # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11073..11074 ; XID_Continue # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+11075 ; XID_Continue # Lo BRAHMI LETTER OLD TAMIL LLA
+1107F..11081 ; XID_Continue # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
+11082 ; XID_Continue # Mc KAITHI SIGN VISARGA
+11083..110AF ; XID_Continue # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2 ; XID_Continue # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B3..110B6 ; XID_Continue # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B7..110B8 ; XID_Continue # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110B9..110BA ; XID_Continue # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110C2 ; XID_Continue # Mn KAITHI VOWEL SIGN VOCALIC R
+110D0..110E8 ; XID_Continue # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9 ; XID_Continue # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+11100..11102 ; XID_Continue # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126 ; XID_Continue # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B ; XID_Continue # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; XID_Continue # Mc CHAKMA VOWEL SIGN E
+1112D..11134 ; XID_Continue # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11136..1113F ; XID_Continue # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11144 ; XID_Continue # Lo CHAKMA LETTER LHAA
+11145..11146 ; XID_Continue # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; XID_Continue # Lo CHAKMA LETTER VAA
+11150..11172 ; XID_Continue # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11173 ; XID_Continue # Mn MAHAJANI SIGN NUKTA
+11176 ; XID_Continue # Lo MAHAJANI LIGATURE SHRI
+11180..11181 ; XID_Continue # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; XID_Continue # Mc SHARADA SIGN VISARGA
+11183..111B2 ; XID_Continue # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5 ; XID_Continue # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; XID_Continue # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF..111C0 ; XID_Continue # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4 ; XID_Continue # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C9..111CC ; XID_Continue # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; XID_Continue # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; XID_Continue # Mn SHARADA SIGN INVERTED CANDRABINDU
+111D0..111D9 ; XID_Continue # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA ; XID_Continue # Lo SHARADA EKAM
+111DC ; XID_Continue # Lo SHARADA HEADSTROKE
+11200..11211 ; XID_Continue # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; XID_Continue # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E ; XID_Continue # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+1122F..11231 ; XID_Continue # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11232..11233 ; XID_Continue # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11234 ; XID_Continue # Mn KHOJKI SIGN ANUSVARA
+11235 ; XID_Continue # Mc KHOJKI SIGN VIRAMA
+11236..11237 ; XID_Continue # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; XID_Continue # Mn KHOJKI SIGN SUKUN
+11280..11286 ; XID_Continue # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; XID_Continue # Lo MULTANI LETTER GHA
+1128A..1128D ; XID_Continue # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; XID_Continue # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; XID_Continue # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112B0..112DE ; XID_Continue # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112DF ; XID_Continue # Mn KHUDAWADI SIGN ANUSVARA
+112E0..112E2 ; XID_Continue # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112E3..112EA ; XID_Continue # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+112F0..112F9 ; XID_Continue # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11300..11301 ; XID_Continue # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+11302..11303 ; XID_Continue # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C ; XID_Continue # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; XID_Continue # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; XID_Continue # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; XID_Continue # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; XID_Continue # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; XID_Continue # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133B..1133C ; XID_Continue # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+1133D ; XID_Continue # Lo GRANTHA SIGN AVAGRAHA
+1133E..1133F ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+11340 ; XID_Continue # Mn GRANTHA VOWEL SIGN II
+11341..11344 ; XID_Continue # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D ; XID_Continue # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350 ; XID_Continue # Lo GRANTHA OM
+11357 ; XID_Continue # Mc GRANTHA AU LENGTH MARK
+1135D..11361 ; XID_Continue # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363 ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11366..1136C ; XID_Continue # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; XID_Continue # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11400..11434 ; XID_Continue # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437 ; XID_Continue # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; XID_Continue # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; XID_Continue # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444 ; XID_Continue # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445 ; XID_Continue # Mc NEWA SIGN VISARGA
+11446 ; XID_Continue # Mn NEWA SIGN NUKTA
+11447..1144A ; XID_Continue # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+11450..11459 ; XID_Continue # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145E ; XID_Continue # Mn NEWA SANDHI MARK
+1145F..11461 ; XID_Continue # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+11480..114AF ; XID_Continue # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B0..114B2 ; XID_Continue # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+114B3..114B8 ; XID_Continue # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114B9 ; XID_Continue # Mc TIRHUTA VOWEL SIGN E
+114BA ; XID_Continue # Mn TIRHUTA VOWEL SIGN SHORT E
+114BB..114BE ; XID_Continue # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+114BF..114C0 ; XID_Continue # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C1 ; XID_Continue # Mc TIRHUTA SIGN VISARGA
+114C2..114C3 ; XID_Continue # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+114C4..114C5 ; XID_Continue # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C7 ; XID_Continue # Lo TIRHUTA OM
+114D0..114D9 ; XID_Continue # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+11580..115AE ; XID_Continue # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115AF..115B1 ; XID_Continue # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+115B2..115B5 ; XID_Continue # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115BB ; XID_Continue # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BC..115BD ; XID_Continue # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BE ; XID_Continue # Mc SIDDHAM SIGN VISARGA
+115BF..115C0 ; XID_Continue # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115D8..115DB ; XID_Continue # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+115DC..115DD ; XID_Continue # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11600..1162F ; XID_Continue # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632 ; XID_Continue # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+11633..1163A ; XID_Continue # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163B..1163C ; XID_Continue # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163D ; XID_Continue # Mn MODI SIGN ANUSVARA
+1163E ; XID_Continue # Mc MODI SIGN VISARGA
+1163F..11640 ; XID_Continue # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+11644 ; XID_Continue # Lo MODI SIGN HUVA
+11650..11659 ; XID_Continue # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11680..116AA ; XID_Continue # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB ; XID_Continue # Mn TAKRI SIGN ANUSVARA
+116AC ; XID_Continue # Mc TAKRI SIGN VISARGA
+116AD ; XID_Continue # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; XID_Continue # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; XID_Continue # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B6 ; XID_Continue # Mc TAKRI SIGN VIRAMA
+116B7 ; XID_Continue # Mn TAKRI SIGN NUKTA
+116B8 ; XID_Continue # Lo TAKRI LETTER ARCHAIC KHA
+116C0..116C9 ; XID_Continue # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+11700..1171A ; XID_Continue # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+1171D..1171F ; XID_Continue # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11720..11721 ; XID_Continue # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11722..11725 ; XID_Continue # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11726 ; XID_Continue # Mc AHOM VOWEL SIGN E
+11727..1172B ; XID_Continue # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11730..11739 ; XID_Continue # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+11740..11746 ; XID_Continue # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
+11800..1182B ; XID_Continue # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; XID_Continue # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+1182F..11837 ; XID_Continue # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11838 ; XID_Continue # Mc DOGRA SIGN VISARGA
+11839..1183A ; XID_Continue # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+118A0..118DF ; XID_Continue # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118E0..118E9 ; XID_Continue # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+118FF..11906 ; XID_Continue # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; XID_Continue # Lo DIVES AKURU LETTER O
+1190C..11913 ; XID_Continue # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; XID_Continue # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; XID_Continue # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; XID_Continue # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; XID_Continue # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; XID_Continue # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; XID_Continue # Mc DIVES AKURU SIGN HALANTA
+1193E ; XID_Continue # Mn DIVES AKURU VIRAMA
+1193F ; XID_Continue # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; XID_Continue # Mc DIVES AKURU MEDIAL YA
+11941 ; XID_Continue # Lo DIVES AKURU INITIAL RA
+11942 ; XID_Continue # Mc DIVES AKURU MEDIAL RA
+11943 ; XID_Continue # Mn DIVES AKURU SIGN NUKTA
+11950..11959 ; XID_Continue # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+119A0..119A7 ; XID_Continue # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; XID_Continue # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3 ; XID_Continue # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119D4..119D7 ; XID_Continue # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; XID_Continue # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119DC..119DF ; XID_Continue # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E0 ; XID_Continue # Mn NANDINAGARI SIGN VIRAMA
+119E1 ; XID_Continue # Lo NANDINAGARI SIGN AVAGRAHA
+119E3 ; XID_Continue # Lo NANDINAGARI HEADSTROKE
+119E4 ; XID_Continue # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00 ; XID_Continue # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A0A ; XID_Continue # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32 ; XID_Continue # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38 ; XID_Continue # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; XID_Continue # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A ; XID_Continue # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E ; XID_Continue # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; XID_Continue # Mn ZANABAZAR SQUARE SUBJOINER
+11A50 ; XID_Continue # Lo SOYOMBO LETTER A
+11A51..11A56 ; XID_Continue # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; XID_Continue # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; XID_Continue # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A89 ; XID_Continue # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96 ; XID_Continue # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; XID_Continue # Mc SOYOMBO SIGN VISARGA
+11A98..11A99 ; XID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9D ; XID_Continue # Lo SOYOMBO MARK PLUTA
+11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; XID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; XID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F ; XID_Continue # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; XID_Continue # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; XID_Continue # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; XID_Continue # Mc BHAIKSUKI SIGN VISARGA
+11C3F ; XID_Continue # Mn BHAIKSUKI SIGN VIRAMA
+11C40 ; XID_Continue # Lo BHAIKSUKI SIGN AVAGRAHA
+11C50..11C59 ; XID_Continue # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C72..11C8F ; XID_Continue # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7 ; XID_Continue # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; XID_Continue # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; XID_Continue # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; XID_Continue # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; XID_Continue # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; XID_Continue # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; XID_Continue # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D00..11D06 ; XID_Continue # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; XID_Continue # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; XID_Continue # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36 ; XID_Continue # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; XID_Continue # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; XID_Continue # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; XID_Continue # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46 ; XID_Continue # Lo MASARAM GONDI REPHA
+11D47 ; XID_Continue # Mn MASARAM GONDI RA-KARA
+11D50..11D59 ; XID_Continue # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+11D60..11D65 ; XID_Continue # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; XID_Continue # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; XID_Continue # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; XID_Continue # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91 ; XID_Continue # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D94 ; XID_Continue # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D95 ; XID_Continue # Mn GUNJALA GONDI SIGN ANUSVARA
+11D96 ; XID_Continue # Mc GUNJALA GONDI SIGN VISARGA
+11D97 ; XID_Continue # Mn GUNJALA GONDI VIRAMA
+11D98 ; XID_Continue # Lo GUNJALA GONDI OM
+11DA0..11DA9 ; XID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+11EE0..11EF2 ; XID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF3..11EF4 ; XID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+11EF5..11EF6 ; XID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11FB0 ; XID_Continue # Lo LISU LETTER YHA
+12000..12399 ; XID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; XID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12480..12543 ; XID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0 ; XID_Continue # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+13000..1342E ; XID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646 ; XID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38 ; XID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E ; XID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69 ; XID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
+16A70..16ABE ; XID_Continue # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AC0..16AC9 ; XID_Continue # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
+16AD0..16AED ; XID_Continue # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF0..16AF4 ; XID_Continue # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B00..16B2F ; XID_Continue # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B30..16B36 ; XID_Continue # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16B40..16B43 ; XID_Continue # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B50..16B59 ; XID_Continue # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B63..16B77 ; XID_Continue # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; XID_Continue # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F ; XID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16F00..16F4A ; XID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F4F ; XID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F50 ; XID_Continue # Lo MIAO LETTER NASALIZATION
+16F51..16F87 ; XID_Continue # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F8F..16F92 ; XID_Continue # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; XID_Continue # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; XID_Continue # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE3 ; XID_Continue # Lm OLD CHINESE ITERATION MARK
+16FE4 ; XID_Continue # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; XID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3 ; XID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; XID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; XID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1B000..1B122 ; XID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
+1B150..1B152 ; XID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167 ; XID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB ; XID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A ; XID_Continue # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; XID_Continue # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; XID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; XID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9D..1BC9E ; XID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1CF00..1CF2D ; XID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30..1CF46 ; XID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+1D165..1D166 ; XID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D167..1D169 ; XID_Continue # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172 ; XID_Continue # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182 ; XID_Continue # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; XID_Continue # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; XID_Continue # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244 ; XID_Continue # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1D400..1D454 ; XID_Continue # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; XID_Continue # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; XID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; XID_Continue # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; XID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; XID_Continue # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; XID_Continue # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; XID_Continue # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; XID_Continue # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; XID_Continue # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; XID_Continue # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; XID_Continue # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; XID_Continue # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; XID_Continue # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; XID_Continue # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; XID_Continue # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; XID_Continue # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; XID_Continue # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; XID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; XID_Continue # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C2..1D6DA ; XID_Continue # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DC..1D6FA ; XID_Continue # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FC..1D714 ; XID_Continue # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D716..1D734 ; XID_Continue # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D736..1D74E ; XID_Continue # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D750..1D76E ; XID_Continue # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D770..1D788 ; XID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D78A..1D7A8 ; XID_Continue # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7AA..1D7C2 ; XID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C4..1D7CB ; XID_Continue # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; XID_Continue # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1DA00..1DA36 ; XID_Continue # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA3B..1DA6C ; XID_Continue # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA75 ; XID_Continue # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA84 ; XID_Continue # Mn SIGNWRITING LOCATION HEAD NECK
+1DA9B..1DA9F ; XID_Continue # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; XID_Continue # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1DF00..1DF09 ; XID_Continue # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A ; XID_Continue # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E ; XID_Continue # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E000..1E006 ; XID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; XID_Continue # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; XID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; XID_Continue # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; XID_Continue # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E100..1E12C ; XID_Continue # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E130..1E136 ; XID_Continue # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E137..1E13D ; XID_Continue # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149 ; XID_Continue # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E ; XID_Continue # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E290..1E2AD ; XID_Continue # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2AE ; XID_Continue # Mn TOTO SIGN RISING TONE
+1E2C0..1E2EB ; XID_Continue # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E2EC..1E2EF ; XID_Continue # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E2F0..1E2F9 ; XID_Continue # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+1E7E0..1E7E6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE ; XID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE ; XID_Continue # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E800..1E8C4 ; XID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8D0..1E8D6 ; XID_Continue # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E900..1E943 ; XID_Continue # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A ; XID_Continue # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E94B ; XID_Continue # Lm ADLAM NASALIZATION MARK
+1E950..1E959 ; XID_Continue # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1EE00..1EE03 ; XID_Continue # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; XID_Continue # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; XID_Continue # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; XID_Continue # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; XID_Continue # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; XID_Continue # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; XID_Continue # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; XID_Continue # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; XID_Continue # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; XID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; XID_Continue # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; XID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; XID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; XID_Continue # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; XID_Continue # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; XID_Continue # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; XID_Continue # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; XID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; XID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1FBF0..1FBF9 ; XID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DF ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; XID_Continue # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 135053
+
+# ================================================
+
+# Derived Property: Default_Ignorable_Code_Point
+# Generated from
+# Other_Default_Ignorable_Code_Point
+# + Cf (Format characters)
+# + Variation_Selector
+# - White_Space
+# - FFF9..FFFB (Interlinear annotation format characters)
+# - 13430..13438 (Egyptian hieroglyph format characters)
+# - Prepended_Concatenation_Mark (Exceptional format characters that should be visible)
+
+00AD ; Default_Ignorable_Code_Point # Cf SOFT HYPHEN
+034F ; Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER
+061C ; Default_Ignorable_Code_Point # Cf ARABIC LETTER MARK
+115F..1160 ; Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+17B4..17B5 ; Default_Ignorable_Code_Point # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+180B..180D ; Default_Ignorable_Code_Point # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; Default_Ignorable_Code_Point # Cf MONGOLIAN VOWEL SEPARATOR
+180F ; Default_Ignorable_Code_Point # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+200B..200F ; Default_Ignorable_Code_Point # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+202A..202E ; Default_Ignorable_Code_Point # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2064 ; Default_Ignorable_Code_Point # Cf [5] WORD JOINER..INVISIBLE PLUS
+2065 ; Default_Ignorable_Code_Point # Cn <reserved-2065>
+2066..206F ; Default_Ignorable_Code_Point # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+3164 ; Default_Ignorable_Code_Point # Lo HANGUL FILLER
+FE00..FE0F ; Default_Ignorable_Code_Point # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FEFF ; Default_Ignorable_Code_Point # Cf ZERO WIDTH NO-BREAK SPACE
+FFA0 ; Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER
+FFF0..FFF8 ; Default_Ignorable_Code_Point # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+1BCA0..1BCA3 ; Default_Ignorable_Code_Point # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D173..1D17A ; Default_Ignorable_Code_Point # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+E0000 ; Default_Ignorable_Code_Point # Cn <reserved-E0000>
+E0001 ; Default_Ignorable_Code_Point # Cf LANGUAGE TAG
+E0002..E001F ; Default_Ignorable_Code_Point # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0020..E007F ; Default_Ignorable_Code_Point # Cf [96] TAG SPACE..CANCEL TAG
+E0080..E00FF ; Default_Ignorable_Code_Point # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E0100..E01EF ; Default_Ignorable_Code_Point # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 4174
+
+# ================================================
+
+# Derived Property: Grapheme_Extend
+# Generated from: Me + Mn + Other_Grapheme_Extend
+# Note: depending on an application's interpretation of Co (private use),
+# they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither.
+
+0300..036F ; Grapheme_Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+0483..0487 ; Grapheme_Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+0488..0489 ; Grapheme_Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+0591..05BD ; Grapheme_Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+05BF ; Grapheme_Extend # Mn HEBREW POINT RAFE
+05C1..05C2 ; Grapheme_Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5 ; Grapheme_Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7 ; Grapheme_Extend # Mn HEBREW POINT QAMATS QATAN
+0610..061A ; Grapheme_Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+064B..065F ; Grapheme_Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+0670 ; Grapheme_Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF
+06D6..06DC ; Grapheme_Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4 ; Grapheme_Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E7..06E8 ; Grapheme_Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED ; Grapheme_Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+0711 ; Grapheme_Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH
+0730..074A ; Grapheme_Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+07A6..07B0 ; Grapheme_Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN
+07EB..07F3 ; Grapheme_Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+07FD ; Grapheme_Extend # Mn NKO DANTAYALAN
+0816..0819 ; Grapheme_Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+081B..0823 ; Grapheme_Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0825..0827 ; Grapheme_Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0829..082D ; Grapheme_Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+0859..085B ; Grapheme_Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+0898..089F ; Grapheme_Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+08CA..08E1 ; Grapheme_Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
+08E3..0902 ; Grapheme_Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
+093A ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN OE
+093C ; Grapheme_Extend # Mn DEVANAGARI SIGN NUKTA
+0941..0948 ; Grapheme_Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+094D ; Grapheme_Extend # Mn DEVANAGARI SIGN VIRAMA
+0951..0957 ; Grapheme_Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+0962..0963 ; Grapheme_Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0981 ; Grapheme_Extend # Mn BENGALI SIGN CANDRABINDU
+09BC ; Grapheme_Extend # Mn BENGALI SIGN NUKTA
+09BE ; Grapheme_Extend # Mc BENGALI VOWEL SIGN AA
+09C1..09C4 ; Grapheme_Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09CD ; Grapheme_Extend # Mn BENGALI SIGN VIRAMA
+09D7 ; Grapheme_Extend # Mc BENGALI AU LENGTH MARK
+09E2..09E3 ; Grapheme_Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09FE ; Grapheme_Extend # Mn BENGALI SANDHI MARK
+0A01..0A02 ; Grapheme_Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A3C ; Grapheme_Extend # Mn GURMUKHI SIGN NUKTA
+0A41..0A42 ; Grapheme_Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48 ; Grapheme_Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D ; Grapheme_Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A51 ; Grapheme_Extend # Mn GURMUKHI SIGN UDAAT
+0A70..0A71 ; Grapheme_Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+0A75 ; Grapheme_Extend # Mn GURMUKHI SIGN YAKASH
+0A81..0A82 ; Grapheme_Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+0ABC ; Grapheme_Extend # Mn GUJARATI SIGN NUKTA
+0AC1..0AC5 ; Grapheme_Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC8 ; Grapheme_Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+0ACD ; Grapheme_Extend # Mn GUJARATI SIGN VIRAMA
+0AE2..0AE3 ; Grapheme_Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AFA..0AFF ; Grapheme_Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01 ; Grapheme_Extend # Mn ORIYA SIGN CANDRABINDU
+0B3C ; Grapheme_Extend # Mn ORIYA SIGN NUKTA
+0B3E ; Grapheme_Extend # Mc ORIYA VOWEL SIGN AA
+0B3F ; Grapheme_Extend # Mn ORIYA VOWEL SIGN I
+0B41..0B44 ; Grapheme_Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+0B4D ; Grapheme_Extend # Mn ORIYA SIGN VIRAMA
+0B55..0B56 ; Grapheme_Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+0B57 ; Grapheme_Extend # Mc ORIYA AU LENGTH MARK
+0B62..0B63 ; Grapheme_Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0B82 ; Grapheme_Extend # Mn TAMIL SIGN ANUSVARA
+0BBE ; Grapheme_Extend # Mc TAMIL VOWEL SIGN AA
+0BC0 ; Grapheme_Extend # Mn TAMIL VOWEL SIGN II
+0BCD ; Grapheme_Extend # Mn TAMIL SIGN VIRAMA
+0BD7 ; Grapheme_Extend # Mc TAMIL AU LENGTH MARK
+0C00 ; Grapheme_Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C04 ; Grapheme_Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C3C ; Grapheme_Extend # Mn TELUGU SIGN NUKTA
+0C3E..0C40 ; Grapheme_Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+0C46..0C48 ; Grapheme_Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D ; Grapheme_Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56 ; Grapheme_Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C62..0C63 ; Grapheme_Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0C81 ; Grapheme_Extend # Mn KANNADA SIGN CANDRABINDU
+0CBC ; Grapheme_Extend # Mn KANNADA SIGN NUKTA
+0CBF ; Grapheme_Extend # Mn KANNADA VOWEL SIGN I
+0CC2 ; Grapheme_Extend # Mc KANNADA VOWEL SIGN UU
+0CC6 ; Grapheme_Extend # Mn KANNADA VOWEL SIGN E
+0CCC..0CCD ; Grapheme_Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+0CD5..0CD6 ; Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE2..0CE3 ; Grapheme_Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0D00..0D01 ; Grapheme_Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D3B..0D3C ; Grapheme_Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D3E ; Grapheme_Extend # Mc MALAYALAM VOWEL SIGN AA
+0D41..0D44 ; Grapheme_Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+0D4D ; Grapheme_Extend # Mn MALAYALAM SIGN VIRAMA
+0D57 ; Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK
+0D62..0D63 ; Grapheme_Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Grapheme_Extend # Mn SINHALA SIGN CANDRABINDU
+0DCA ; Grapheme_Extend # Mn SINHALA SIGN AL-LAKUNA
+0DCF ; Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA
+0DD2..0DD4 ; Grapheme_Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6 ; Grapheme_Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DDF ; Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA
+0E31 ; Grapheme_Extend # Mn THAI CHARACTER MAI HAN-AKAT
+0E34..0E3A ; Grapheme_Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E47..0E4E ; Grapheme_Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+0EB1 ; Grapheme_Extend # Mn LAO VOWEL SIGN MAI KAN
+0EB4..0EBC ; Grapheme_Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+0EC8..0ECD ; Grapheme_Extend # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
+0F18..0F19 ; Grapheme_Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+0F35 ; Grapheme_Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37 ; Grapheme_Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F39 ; Grapheme_Extend # Mn TIBETAN MARK TSA -PHRU
+0F71..0F7E ; Grapheme_Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+0F80..0F84 ; Grapheme_Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+0F86..0F87 ; Grapheme_Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+0F8D..0F97 ; Grapheme_Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+0F99..0FBC ; Grapheme_Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6 ; Grapheme_Extend # Mn TIBETAN SYMBOL PADMA GDAN
+102D..1030 ; Grapheme_Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+1032..1037 ; Grapheme_Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+1039..103A ; Grapheme_Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+103D..103E ; Grapheme_Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+1058..1059 ; Grapheme_Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+105E..1060 ; Grapheme_Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+1071..1074 ; Grapheme_Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+1082 ; Grapheme_Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+1085..1086 ; Grapheme_Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+108D ; Grapheme_Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+109D ; Grapheme_Extend # Mn MYANMAR VOWEL SIGN AITON AI
+135D..135F ; Grapheme_Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1712..1714 ; Grapheme_Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1732..1733 ; Grapheme_Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1752..1753 ; Grapheme_Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+1772..1773 ; Grapheme_Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+17B4..17B5 ; Grapheme_Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B7..17BD ; Grapheme_Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+17C6 ; Grapheme_Extend # Mn KHMER SIGN NIKAHIT
+17C9..17D3 ; Grapheme_Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+17DD ; Grapheme_Extend # Mn KHMER SIGN ATTHACAN
+180B..180D ; Grapheme_Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180F ; Grapheme_Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+1885..1886 ; Grapheme_Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+18A9 ; Grapheme_Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA
+1920..1922 ; Grapheme_Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+1927..1928 ; Grapheme_Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+1932 ; Grapheme_Extend # Mn LIMBU SMALL LETTER ANUSVARA
+1939..193B ; Grapheme_Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+1A17..1A18 ; Grapheme_Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+1A1B ; Grapheme_Extend # Mn BUGINESE VOWEL SIGN AE
+1A56 ; Grapheme_Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA
+1A58..1A5E ; Grapheme_Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+1A60 ; Grapheme_Extend # Mn TAI THAM SIGN SAKOT
+1A62 ; Grapheme_Extend # Mn TAI THAM VOWEL SIGN MAI SAT
+1A65..1A6C ; Grapheme_Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+1A73..1A7C ; Grapheme_Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F ; Grapheme_Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
+1AB0..1ABD ; Grapheme_Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE ; Grapheme_Extend # Me COMBINING PARENTHESES OVERLAY
+1ABF..1ACE ; Grapheme_Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
+1B00..1B03 ; Grapheme_Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+1B34 ; Grapheme_Extend # Mn BALINESE SIGN REREKAN
+1B35 ; Grapheme_Extend # Mc BALINESE VOWEL SIGN TEDUNG
+1B36..1B3A ; Grapheme_Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+1B3C ; Grapheme_Extend # Mn BALINESE VOWEL SIGN LA LENGA
+1B42 ; Grapheme_Extend # Mn BALINESE VOWEL SIGN PEPET
+1B6B..1B73 ; Grapheme_Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1B81 ; Grapheme_Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+1BA2..1BA5 ; Grapheme_Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+1BA8..1BA9 ; Grapheme_Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAB..1BAD ; Grapheme_Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BE6 ; Grapheme_Extend # Mn BATAK SIGN TOMPI
+1BE8..1BE9 ; Grapheme_Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+1BED ; Grapheme_Extend # Mn BATAK VOWEL SIGN KARO O
+1BEF..1BF1 ; Grapheme_Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+1C2C..1C33 ; Grapheme_Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+1C36..1C37 ; Grapheme_Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+1CD0..1CD2 ; Grapheme_Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CE0 ; Grapheme_Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+1CE2..1CE8 ; Grapheme_Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+1CED ; Grapheme_Extend # Mn VEDIC SIGN TIRYAK
+1CF4 ; Grapheme_Extend # Mn VEDIC TONE CANDRA ABOVE
+1CF8..1CF9 ; Grapheme_Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+1DC0..1DFF ; Grapheme_Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C ; Grapheme_Extend # Cf ZERO WIDTH NON-JOINER
+20D0..20DC ; Grapheme_Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20DD..20E0 ; Grapheme_Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E1 ; Grapheme_Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE
+20E2..20E4 ; Grapheme_Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+20E5..20F0 ; Grapheme_Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+2CEF..2CF1 ; Grapheme_Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2D7F ; Grapheme_Extend # Mn TIFINAGH CONSONANT JOINER
+2DE0..2DFF ; Grapheme_Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+302A..302D ; Grapheme_Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F ; Grapheme_Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+3099..309A ; Grapheme_Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+A66F ; Grapheme_Extend # Mn COMBINING CYRILLIC VZMET
+A670..A672 ; Grapheme_Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+A674..A67D ; Grapheme_Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+A69E..A69F ; Grapheme_Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+A6F0..A6F1 ; Grapheme_Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+A802 ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN DVISVARA
+A806 ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN HASANTA
+A80B ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
+A825..A826 ; Grapheme_Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A8C4..A8C5 ; Grapheme_Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+A8E0..A8F1 ; Grapheme_Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+A8FF ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN AY
+A926..A92D ; Grapheme_Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+A947..A951 ; Grapheme_Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+A980..A982 ; Grapheme_Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+A9B3 ; Grapheme_Extend # Mn JAVANESE SIGN CECAK TELU
+A9B6..A9B9 ; Grapheme_Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+A9BC..A9BD ; Grapheme_Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+A9E5 ; Grapheme_Extend # Mn MYANMAR SIGN SHAN SAW
+AA29..AA2E ; Grapheme_Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+AA31..AA32 ; Grapheme_Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+AA35..AA36 ; Grapheme_Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+AA43 ; Grapheme_Extend # Mn CHAM CONSONANT SIGN FINAL NG
+AA4C ; Grapheme_Extend # Mn CHAM CONSONANT SIGN FINAL M
+AA7C ; Grapheme_Extend # Mn MYANMAR SIGN TAI LAING TONE-2
+AAB0 ; Grapheme_Extend # Mn TAI VIET MAI KANG
+AAB2..AAB4 ; Grapheme_Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+AAB7..AAB8 ; Grapheme_Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+AABE..AABF ; Grapheme_Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+AAC1 ; Grapheme_Extend # Mn TAI VIET TONE MAI THO
+AAEC..AAED ; Grapheme_Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAF6 ; Grapheme_Extend # Mn MEETEI MAYEK VIRAMA
+ABE5 ; Grapheme_Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP
+ABE8 ; Grapheme_Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP
+ABED ; Grapheme_Extend # Mn MEETEI MAYEK APUN IYEK
+FB1E ; Grapheme_Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA
+FE00..FE0F ; Grapheme_Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE20..FE2F ; Grapheme_Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+101FD ; Grapheme_Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+102E0 ; Grapheme_Extend # Mn COPTIC EPACT THOUSANDS MARK
+10376..1037A ; Grapheme_Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10A01..10A03 ; Grapheme_Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06 ; Grapheme_Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A0F ; Grapheme_Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+10A38..10A3A ; Grapheme_Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F ; Grapheme_Extend # Mn KHAROSHTHI VIRAMA
+10AE5..10AE6 ; Grapheme_Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+10D24..10D27 ; Grapheme_Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Grapheme_Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10F46..10F50 ; Grapheme_Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F82..10F85 ; Grapheme_Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+11001 ; Grapheme_Extend # Mn BRAHMI SIGN ANUSVARA
+11038..11046 ; Grapheme_Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+11070 ; Grapheme_Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+11073..11074 ; Grapheme_Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+1107F..11081 ; Grapheme_Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
+110B3..110B6 ; Grapheme_Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+110B9..110BA ; Grapheme_Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+110C2 ; Grapheme_Extend # Mn KAITHI VOWEL SIGN VOCALIC R
+11100..11102 ; Grapheme_Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11127..1112B ; Grapheme_Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112D..11134 ; Grapheme_Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11173 ; Grapheme_Extend # Mn MAHAJANI SIGN NUKTA
+11180..11181 ; Grapheme_Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+111B6..111BE ; Grapheme_Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111C9..111CC ; Grapheme_Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; Grapheme_Extend # Mn SHARADA SIGN INVERTED CANDRABINDU
+1122F..11231 ; Grapheme_Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+11234 ; Grapheme_Extend # Mn KHOJKI SIGN ANUSVARA
+11236..11237 ; Grapheme_Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; Grapheme_Extend # Mn KHOJKI SIGN SUKUN
+112DF ; Grapheme_Extend # Mn KHUDAWADI SIGN ANUSVARA
+112E3..112EA ; Grapheme_Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+11300..11301 ; Grapheme_Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+1133B..1133C ; Grapheme_Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+1133E ; Grapheme_Extend # Mc GRANTHA VOWEL SIGN AA
+11340 ; Grapheme_Extend # Mn GRANTHA VOWEL SIGN II
+11357 ; Grapheme_Extend # Mc GRANTHA AU LENGTH MARK
+11366..1136C ; Grapheme_Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374 ; Grapheme_Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11438..1143F ; Grapheme_Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11442..11444 ; Grapheme_Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11446 ; Grapheme_Extend # Mn NEWA SIGN NUKTA
+1145E ; Grapheme_Extend # Mn NEWA SANDHI MARK
+114B0 ; Grapheme_Extend # Mc TIRHUTA VOWEL SIGN AA
+114B3..114B8 ; Grapheme_Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+114BA ; Grapheme_Extend # Mn TIRHUTA VOWEL SIGN SHORT E
+114BD ; Grapheme_Extend # Mc TIRHUTA VOWEL SIGN SHORT O
+114BF..114C0 ; Grapheme_Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+114C2..114C3 ; Grapheme_Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+115AF ; Grapheme_Extend # Mc SIDDHAM VOWEL SIGN AA
+115B2..115B5 ; Grapheme_Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+115BC..115BD ; Grapheme_Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+115BF..115C0 ; Grapheme_Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+115DC..115DD ; Grapheme_Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+11633..1163A ; Grapheme_Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+1163D ; Grapheme_Extend # Mn MODI SIGN ANUSVARA
+1163F..11640 ; Grapheme_Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+116AB ; Grapheme_Extend # Mn TAKRI SIGN ANUSVARA
+116AD ; Grapheme_Extend # Mn TAKRI VOWEL SIGN AA
+116B0..116B5 ; Grapheme_Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B7 ; Grapheme_Extend # Mn TAKRI SIGN NUKTA
+1171D..1171F ; Grapheme_Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11722..11725 ; Grapheme_Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+11727..1172B ; Grapheme_Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+1182F..11837 ; Grapheme_Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+11839..1183A ; Grapheme_Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11930 ; Grapheme_Extend # Mc DIVES AKURU VOWEL SIGN AA
+1193B..1193C ; Grapheme_Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; Grapheme_Extend # Mn DIVES AKURU VIRAMA
+11943 ; Grapheme_Extend # Mn DIVES AKURU SIGN NUKTA
+119D4..119D7 ; Grapheme_Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119DB ; Grapheme_Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+119E0 ; Grapheme_Extend # Mn NANDINAGARI SIGN VIRAMA
+11A01..11A0A ; Grapheme_Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A33..11A38 ; Grapheme_Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A3B..11A3E ; Grapheme_Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; Grapheme_Extend # Mn ZANABAZAR SQUARE SUBJOINER
+11A51..11A56 ; Grapheme_Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A59..11A5B ; Grapheme_Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A96 ; Grapheme_Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A98..11A99 ; Grapheme_Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11C30..11C36 ; Grapheme_Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Grapheme_Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3F ; Grapheme_Extend # Mn BHAIKSUKI SIGN VIRAMA
+11C92..11CA7 ; Grapheme_Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CAA..11CB0 ; Grapheme_Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB2..11CB3 ; Grapheme_Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB5..11CB6 ; Grapheme_Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D36 ; Grapheme_Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Grapheme_Extend # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Grapheme_Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Grapheme_Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D47 ; Grapheme_Extend # Mn MASARAM GONDI RA-KARA
+11D90..11D91 ; Grapheme_Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D95 ; Grapheme_Extend # Mn GUNJALA GONDI SIGN ANUSVARA
+11D97 ; Grapheme_Extend # Mn GUNJALA GONDI VIRAMA
+11EF3..11EF4 ; Grapheme_Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+16AF0..16AF4 ; Grapheme_Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B30..16B36 ; Grapheme_Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+16F4F ; Grapheme_Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR
+16F8F..16F92 ; Grapheme_Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; Grapheme_Extend # Mn KHITAN SMALL SCRIPT FILLER
+1BC9D..1BC9E ; Grapheme_Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1CF00..1CF2D ; Grapheme_Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30..1CF46 ; Grapheme_Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+1D165 ; Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM
+1D167..1D169 ; Grapheme_Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16E..1D172 ; Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182 ; Grapheme_Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B ; Grapheme_Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD ; Grapheme_Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+1D242..1D244 ; Grapheme_Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+1DA00..1DA36 ; Grapheme_Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA3B..1DA6C ; Grapheme_Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA75 ; Grapheme_Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA84 ; Grapheme_Extend # Mn SIGNWRITING LOCATION HEAD NECK
+1DA9B..1DA9F ; Grapheme_Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF ; Grapheme_Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006 ; Grapheme_Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Grapheme_Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Grapheme_Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Grapheme_Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Grapheme_Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E130..1E136 ; Grapheme_Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E2AE ; Grapheme_Extend # Mn TOTO SIGN RISING TONE
+1E2EC..1E2EF ; Grapheme_Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
+1E8D0..1E8D6 ; Grapheme_Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E944..1E94A ; Grapheme_Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+E0020..E007F ; Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG
+E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 2090
+
+# ================================================
+
+# Derived Property: Grapheme_Base
+# Generated from: [0..10FFFF] - Cc - Cf - Cs - Co - Cn - Zl - Zp - Grapheme_Extend
+# Note: depending on an application's interpretation of Co (private use),
+# they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither.
+
+0020 ; Grapheme_Base # Zs SPACE
+0021..0023 ; Grapheme_Base # Po [3] EXCLAMATION MARK..NUMBER SIGN
+0024 ; Grapheme_Base # Sc DOLLAR SIGN
+0025..0027 ; Grapheme_Base # Po [3] PERCENT SIGN..APOSTROPHE
+0028 ; Grapheme_Base # Ps LEFT PARENTHESIS
+0029 ; Grapheme_Base # Pe RIGHT PARENTHESIS
+002A ; Grapheme_Base # Po ASTERISK
+002B ; Grapheme_Base # Sm PLUS SIGN
+002C ; Grapheme_Base # Po COMMA
+002D ; Grapheme_Base # Pd HYPHEN-MINUS
+002E..002F ; Grapheme_Base # Po [2] FULL STOP..SOLIDUS
+0030..0039 ; Grapheme_Base # Nd [10] DIGIT ZERO..DIGIT NINE
+003A..003B ; Grapheme_Base # Po [2] COLON..SEMICOLON
+003C..003E ; Grapheme_Base # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN
+003F..0040 ; Grapheme_Base # Po [2] QUESTION MARK..COMMERCIAL AT
+0041..005A ; Grapheme_Base # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005B ; Grapheme_Base # Ps LEFT SQUARE BRACKET
+005C ; Grapheme_Base # Po REVERSE SOLIDUS
+005D ; Grapheme_Base # Pe RIGHT SQUARE BRACKET
+005E ; Grapheme_Base # Sk CIRCUMFLEX ACCENT
+005F ; Grapheme_Base # Pc LOW LINE
+0060 ; Grapheme_Base # Sk GRAVE ACCENT
+0061..007A ; Grapheme_Base # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+007B ; Grapheme_Base # Ps LEFT CURLY BRACKET
+007C ; Grapheme_Base # Sm VERTICAL LINE
+007D ; Grapheme_Base # Pe RIGHT CURLY BRACKET
+007E ; Grapheme_Base # Sm TILDE
+00A0 ; Grapheme_Base # Zs NO-BREAK SPACE
+00A1 ; Grapheme_Base # Po INVERTED EXCLAMATION MARK
+00A2..00A5 ; Grapheme_Base # Sc [4] CENT SIGN..YEN SIGN
+00A6 ; Grapheme_Base # So BROKEN BAR
+00A7 ; Grapheme_Base # Po SECTION SIGN
+00A8 ; Grapheme_Base # Sk DIAERESIS
+00A9 ; Grapheme_Base # So COPYRIGHT SIGN
+00AA ; Grapheme_Base # Lo FEMININE ORDINAL INDICATOR
+00AB ; Grapheme_Base # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+00AC ; Grapheme_Base # Sm NOT SIGN
+00AE ; Grapheme_Base # So REGISTERED SIGN
+00AF ; Grapheme_Base # Sk MACRON
+00B0 ; Grapheme_Base # So DEGREE SIGN
+00B1 ; Grapheme_Base # Sm PLUS-MINUS SIGN
+00B2..00B3 ; Grapheme_Base # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4 ; Grapheme_Base # Sk ACUTE ACCENT
+00B5 ; Grapheme_Base # L& MICRO SIGN
+00B6..00B7 ; Grapheme_Base # Po [2] PILCROW SIGN..MIDDLE DOT
+00B8 ; Grapheme_Base # Sk CEDILLA
+00B9 ; Grapheme_Base # No SUPERSCRIPT ONE
+00BA ; Grapheme_Base # Lo MASCULINE ORDINAL INDICATOR
+00BB ; Grapheme_Base # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BC..00BE ; Grapheme_Base # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00BF ; Grapheme_Base # Po INVERTED QUESTION MARK
+00C0..00D6 ; Grapheme_Base # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D7 ; Grapheme_Base # Sm MULTIPLICATION SIGN
+00D8..00F6 ; Grapheme_Base # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F7 ; Grapheme_Base # Sm DIVISION SIGN
+00F8..01BA ; Grapheme_Base # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB ; Grapheme_Base # Lo LATIN LETTER TWO WITH STROKE
+01BC..01BF ; Grapheme_Base # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3 ; Grapheme_Base # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293 ; Grapheme_Base # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294 ; Grapheme_Base # Lo LATIN LETTER GLOTTAL STOP
+0295..02AF ; Grapheme_Base # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1 ; Grapheme_Base # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; Grapheme_Base # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02C6..02D1 ; Grapheme_Base # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02DF ; Grapheme_Base # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+02E0..02E4 ; Grapheme_Base # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB ; Grapheme_Base # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+02EC ; Grapheme_Base # Lm MODIFIER LETTER VOICING
+02ED ; Grapheme_Base # Sk MODIFIER LETTER UNASPIRATED
+02EE ; Grapheme_Base # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; Grapheme_Base # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+0370..0373 ; Grapheme_Base # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374 ; Grapheme_Base # Lm GREEK NUMERAL SIGN
+0375 ; Grapheme_Base # Sk GREEK LOWER NUMERAL SIGN
+0376..0377 ; Grapheme_Base # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A ; Grapheme_Base # Lm GREEK YPOGEGRAMMENI
+037B..037D ; Grapheme_Base # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+037E ; Grapheme_Base # Po GREEK QUESTION MARK
+037F ; Grapheme_Base # L& GREEK CAPITAL LETTER YOT
+0384..0385 ; Grapheme_Base # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386 ; Grapheme_Base # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; Grapheme_Base # Po GREEK ANO TELEIA
+0388..038A ; Grapheme_Base # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Grapheme_Base # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1 ; Grapheme_Base # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5 ; Grapheme_Base # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F6 ; Grapheme_Base # Sm GREEK REVERSED LUNATE EPSILON SYMBOL
+03F7..0481 ; Grapheme_Base # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+0482 ; Grapheme_Base # So CYRILLIC THOUSANDS SIGN
+048A..052F ; Grapheme_Base # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556 ; Grapheme_Base # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559 ; Grapheme_Base # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055A..055F ; Grapheme_Base # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0560..0588 ; Grapheme_Base # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+0589 ; Grapheme_Base # Po ARMENIAN FULL STOP
+058A ; Grapheme_Base # Pd ARMENIAN HYPHEN
+058D..058E ; Grapheme_Base # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+058F ; Grapheme_Base # Sc ARMENIAN DRAM SIGN
+05BE ; Grapheme_Base # Pd HEBREW PUNCTUATION MAQAF
+05C0 ; Grapheme_Base # Po HEBREW PUNCTUATION PASEQ
+05C3 ; Grapheme_Base # Po HEBREW PUNCTUATION SOF PASUQ
+05C6 ; Grapheme_Base # Po HEBREW PUNCTUATION NUN HAFUKHA
+05D0..05EA ; Grapheme_Base # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF..05F2 ; Grapheme_Base # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+05F3..05F4 ; Grapheme_Base # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+0606..0608 ; Grapheme_Base # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+0609..060A ; Grapheme_Base # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B ; Grapheme_Base # Sc AFGHANI SIGN
+060C..060D ; Grapheme_Base # Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR
+060E..060F ; Grapheme_Base # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+061B ; Grapheme_Base # Po ARABIC SEMICOLON
+061D..061F ; Grapheme_Base # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
+0620..063F ; Grapheme_Base # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640 ; Grapheme_Base # Lm ARABIC TATWEEL
+0641..064A ; Grapheme_Base # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+0660..0669 ; Grapheme_Base # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+066A..066D ; Grapheme_Base # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+066E..066F ; Grapheme_Base # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0671..06D3 ; Grapheme_Base # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D4 ; Grapheme_Base # Po ARABIC FULL STOP
+06D5 ; Grapheme_Base # Lo ARABIC LETTER AE
+06DE ; Grapheme_Base # So ARABIC START OF RUB EL HIZB
+06E5..06E6 ; Grapheme_Base # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E9 ; Grapheme_Base # So ARABIC PLACE OF SAJDAH
+06EE..06EF ; Grapheme_Base # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9 ; Grapheme_Base # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC ; Grapheme_Base # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FD..06FE ; Grapheme_Base # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF ; Grapheme_Base # Lo ARABIC LETTER HEH WITH INVERTED V
+0700..070D ; Grapheme_Base # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+0710 ; Grapheme_Base # Lo SYRIAC LETTER ALAPH
+0712..072F ; Grapheme_Base # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+074D..07A5 ; Grapheme_Base # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07B1 ; Grapheme_Base # Lo THAANA LETTER NAA
+07C0..07C9 ; Grapheme_Base # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE
+07CA..07EA ; Grapheme_Base # Lo [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5 ; Grapheme_Base # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07F6 ; Grapheme_Base # So NKO SYMBOL OO DENNEN
+07F7..07F9 ; Grapheme_Base # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+07FA ; Grapheme_Base # Lm NKO LAJANYALAN
+07FE..07FF ; Grapheme_Base # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN
+0800..0815 ; Grapheme_Base # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+081A ; Grapheme_Base # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+0824 ; Grapheme_Base # Lm SAMARITAN MODIFIER LETTER SHORT A
+0828 ; Grapheme_Base # Lm SAMARITAN MODIFIER LETTER I
+0830..083E ; Grapheme_Base # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+0840..0858 ; Grapheme_Base # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+085E ; Grapheme_Base # Po MANDAIC PUNCTUATION
+0860..086A ; Grapheme_Base # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+0870..0887 ; Grapheme_Base # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0888 ; Grapheme_Base # Sk ARABIC RAISED ROUND DOT
+0889..088E ; Grapheme_Base # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+08A0..08C8 ; Grapheme_Base # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9 ; Grapheme_Base # Lm ARABIC SMALL FARSI YEH
+0903 ; Grapheme_Base # Mc DEVANAGARI SIGN VISARGA
+0904..0939 ; Grapheme_Base # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093B ; Grapheme_Base # Mc DEVANAGARI VOWEL SIGN OOE
+093D ; Grapheme_Base # Lo DEVANAGARI SIGN AVAGRAHA
+093E..0940 ; Grapheme_Base # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0949..094C ; Grapheme_Base # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E..094F ; Grapheme_Base # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950 ; Grapheme_Base # Lo DEVANAGARI OM
+0958..0961 ; Grapheme_Base # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0964..0965 ; Grapheme_Base # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0966..096F ; Grapheme_Base # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970 ; Grapheme_Base # Po DEVANAGARI ABBREVIATION SIGN
+0971 ; Grapheme_Base # Lm DEVANAGARI SIGN HIGH SPACING DOT
+0972..0980 ; Grapheme_Base # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+0982..0983 ; Grapheme_Base # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C ; Grapheme_Base # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990 ; Grapheme_Base # Lo [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8 ; Grapheme_Base # Lo [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0 ; Grapheme_Base # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2 ; Grapheme_Base # Lo BENGALI LETTER LA
+09B6..09B9 ; Grapheme_Base # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD ; Grapheme_Base # Lo BENGALI SIGN AVAGRAHA
+09BF..09C0 ; Grapheme_Base # Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II
+09C7..09C8 ; Grapheme_Base # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC ; Grapheme_Base # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CE ; Grapheme_Base # Lo BENGALI LETTER KHANDA TA
+09DC..09DD ; Grapheme_Base # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1 ; Grapheme_Base # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E6..09EF ; Grapheme_Base # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+09F0..09F1 ; Grapheme_Base # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09F2..09F3 ; Grapheme_Base # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+09F4..09F9 ; Grapheme_Base # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+09FA ; Grapheme_Base # So BENGALI ISSHAR
+09FB ; Grapheme_Base # Sc BENGALI GANDA MARK
+09FC ; Grapheme_Base # Lo BENGALI LETTER VEDIC ANUSVARA
+09FD ; Grapheme_Base # Po BENGALI ABBREVIATION SIGN
+0A03 ; Grapheme_Base # Mc GURMUKHI SIGN VISARGA
+0A05..0A0A ; Grapheme_Base # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10 ; Grapheme_Base # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28 ; Grapheme_Base # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30 ; Grapheme_Base # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33 ; Grapheme_Base # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36 ; Grapheme_Base # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39 ; Grapheme_Base # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3E..0A40 ; Grapheme_Base # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A59..0A5C ; Grapheme_Base # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+0A5E ; Grapheme_Base # Lo GURMUKHI LETTER FA
+0A66..0A6F ; Grapheme_Base # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+0A72..0A74 ; Grapheme_Base # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+0A76 ; Grapheme_Base # Po GURMUKHI ABBREVIATION SIGN
+0A83 ; Grapheme_Base # Mc GUJARATI SIGN VISARGA
+0A85..0A8D ; Grapheme_Base # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+0A8F..0A91 ; Grapheme_Base # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8 ; Grapheme_Base # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0 ; Grapheme_Base # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3 ; Grapheme_Base # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9 ; Grapheme_Base # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABD ; Grapheme_Base # Lo GUJARATI SIGN AVAGRAHA
+0ABE..0AC0 ; Grapheme_Base # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+0AC9 ; Grapheme_Base # Mc GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACC ; Grapheme_Base # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+0AD0 ; Grapheme_Base # Lo GUJARATI OM
+0AE0..0AE1 ; Grapheme_Base # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+0AE6..0AEF ; Grapheme_Base # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF0 ; Grapheme_Base # Po GUJARATI ABBREVIATION SIGN
+0AF1 ; Grapheme_Base # Sc GUJARATI RUPEE SIGN
+0AF9 ; Grapheme_Base # Lo GUJARATI LETTER ZHA
+0B02..0B03 ; Grapheme_Base # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+0B05..0B0C ; Grapheme_Base # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10 ; Grapheme_Base # Lo [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28 ; Grapheme_Base # Lo [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30 ; Grapheme_Base # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33 ; Grapheme_Base # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35..0B39 ; Grapheme_Base # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA
+0B3D ; Grapheme_Base # Lo ORIYA SIGN AVAGRAHA
+0B40 ; Grapheme_Base # Mc ORIYA VOWEL SIGN II
+0B47..0B48 ; Grapheme_Base # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Grapheme_Base # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D ; Grapheme_Base # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B5F..0B61 ; Grapheme_Base # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B66..0B6F ; Grapheme_Base # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B70 ; Grapheme_Base # So ORIYA ISSHAR
+0B71 ; Grapheme_Base # Lo ORIYA LETTER WA
+0B72..0B77 ; Grapheme_Base # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+0B83 ; Grapheme_Base # Lo TAMIL SIGN VISARGA
+0B85..0B8A ; Grapheme_Base # Lo [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90 ; Grapheme_Base # Lo [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95 ; Grapheme_Base # Lo [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A ; Grapheme_Base # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C ; Grapheme_Base # Lo TAMIL LETTER JA
+0B9E..0B9F ; Grapheme_Base # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4 ; Grapheme_Base # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA ; Grapheme_Base # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB9 ; Grapheme_Base # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA
+0BBF ; Grapheme_Base # Mc TAMIL VOWEL SIGN I
+0BC1..0BC2 ; Grapheme_Base # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+0BC6..0BC8 ; Grapheme_Base # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCC ; Grapheme_Base # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0BD0 ; Grapheme_Base # Lo TAMIL OM
+0BE6..0BEF ; Grapheme_Base # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+0BF0..0BF2 ; Grapheme_Base # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BF8 ; Grapheme_Base # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+0BF9 ; Grapheme_Base # Sc TAMIL RUPEE SIGN
+0BFA ; Grapheme_Base # So TAMIL NUMBER SIGN
+0C01..0C03 ; Grapheme_Base # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C05..0C0C ; Grapheme_Base # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10 ; Grapheme_Base # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28 ; Grapheme_Base # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C39 ; Grapheme_Base # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3D ; Grapheme_Base # Lo TELUGU SIGN AVAGRAHA
+0C41..0C44 ; Grapheme_Base # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+0C58..0C5A ; Grapheme_Base # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D ; Grapheme_Base # Lo TELUGU LETTER NAKAARA POLLU
+0C60..0C61 ; Grapheme_Base # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C66..0C6F ; Grapheme_Base # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C77 ; Grapheme_Base # Po TELUGU SIGN SIDDHAM
+0C78..0C7E ; Grapheme_Base # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+0C7F ; Grapheme_Base # So TELUGU SIGN TUUMU
+0C80 ; Grapheme_Base # Lo KANNADA SIGN SPACING CANDRABINDU
+0C82..0C83 ; Grapheme_Base # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C84 ; Grapheme_Base # Po KANNADA SIGN SIDDHAM
+0C85..0C8C ; Grapheme_Base # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90 ; Grapheme_Base # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8 ; Grapheme_Base # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3 ; Grapheme_Base # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9 ; Grapheme_Base # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBD ; Grapheme_Base # Lo KANNADA SIGN AVAGRAHA
+0CBE ; Grapheme_Base # Mc KANNADA VOWEL SIGN AA
+0CC0..0CC1 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U
+0CC3..0CC4 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR
+0CC7..0CC8 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0CDD..0CDE ; Grapheme_Base # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+0CE0..0CE1 ; Grapheme_Base # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE6..0CEF ; Grapheme_Base # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2 ; Grapheme_Base # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D02..0D03 ; Grapheme_Base # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D04..0D0C ; Grapheme_Base # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+0D0E..0D10 ; Grapheme_Base # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D3A ; Grapheme_Base # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3D ; Grapheme_Base # Lo MALAYALAM SIGN AVAGRAHA
+0D3F..0D40 ; Grapheme_Base # Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II
+0D46..0D48 ; Grapheme_Base # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4C ; Grapheme_Base # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0D4E ; Grapheme_Base # Lo MALAYALAM LETTER DOT REPH
+0D4F ; Grapheme_Base # So MALAYALAM SIGN PARA
+0D54..0D56 ; Grapheme_Base # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D58..0D5E ; Grapheme_Base # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+0D5F..0D61 ; Grapheme_Base # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+0D66..0D6F ; Grapheme_Base # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D70..0D78 ; Grapheme_Base # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
+0D79 ; Grapheme_Base # So MALAYALAM DATE MARK
+0D7A..0D7F ; Grapheme_Base # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83 ; Grapheme_Base # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D96 ; Grapheme_Base # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+0D9A..0DB1 ; Grapheme_Base # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB ; Grapheme_Base # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD ; Grapheme_Base # Lo SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6 ; Grapheme_Base # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DD0..0DD1 ; Grapheme_Base # Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+0DD8..0DDE ; Grapheme_Base # Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DE6..0DEF ; Grapheme_Base # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+0DF2..0DF3 ; Grapheme_Base # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+0DF4 ; Grapheme_Base # Po SINHALA PUNCTUATION KUNDDALIYA
+0E01..0E30 ; Grapheme_Base # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+0E32..0E33 ; Grapheme_Base # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+0E3F ; Grapheme_Base # Sc THAI CURRENCY SYMBOL BAHT
+0E40..0E45 ; Grapheme_Base # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+0E46 ; Grapheme_Base # Lm THAI CHARACTER MAIYAMOK
+0E4F ; Grapheme_Base # Po THAI CHARACTER FONGMAN
+0E50..0E59 ; Grapheme_Base # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E5A..0E5B ; Grapheme_Base # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0E81..0E82 ; Grapheme_Base # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84 ; Grapheme_Base # Lo LAO LETTER KHO TAM
+0E86..0E8A ; Grapheme_Base # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+0E8C..0EA3 ; Grapheme_Base # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+0EA5 ; Grapheme_Base # Lo LAO LETTER LO LOOT
+0EA7..0EB0 ; Grapheme_Base # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A
+0EB2..0EB3 ; Grapheme_Base # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+0EBD ; Grapheme_Base # Lo LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4 ; Grapheme_Base # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6 ; Grapheme_Base # Lm LAO KO LA
+0ED0..0ED9 ; Grapheme_Base # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDC..0EDF ; Grapheme_Base # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
+0F00 ; Grapheme_Base # Lo TIBETAN SYLLABLE OM
+0F01..0F03 ; Grapheme_Base # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+0F04..0F12 ; Grapheme_Base # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+0F13 ; Grapheme_Base # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14 ; Grapheme_Base # Po TIBETAN MARK GTER TSHEG
+0F15..0F17 ; Grapheme_Base # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F1A..0F1F ; Grapheme_Base # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F20..0F29 ; Grapheme_Base # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F2A..0F33 ; Grapheme_Base # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+0F34 ; Grapheme_Base # So TIBETAN MARK BSDUS RTAGS
+0F36 ; Grapheme_Base # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F38 ; Grapheme_Base # So TIBETAN MARK CHE MGO
+0F3A ; Grapheme_Base # Ps TIBETAN MARK GUG RTAGS GYON
+0F3B ; Grapheme_Base # Pe TIBETAN MARK GUG RTAGS GYAS
+0F3C ; Grapheme_Base # Ps TIBETAN MARK ANG KHANG GYON
+0F3D ; Grapheme_Base # Pe TIBETAN MARK ANG KHANG GYAS
+0F3E..0F3F ; Grapheme_Base # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+0F40..0F47 ; Grapheme_Base # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+0F49..0F6C ; Grapheme_Base # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+0F7F ; Grapheme_Base # Mc TIBETAN SIGN RNAM BCAD
+0F85 ; Grapheme_Base # Po TIBETAN MARK PALUTA
+0F88..0F8C ; Grapheme_Base # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+0FBE..0FC5 ; Grapheme_Base # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC7..0FCC ; Grapheme_Base # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE..0FCF ; Grapheme_Base # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD4 ; Grapheme_Base # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5..0FD8 ; Grapheme_Base # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+0FD9..0FDA ; Grapheme_Base # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+1000..102A ; Grapheme_Base # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+102B..102C ; Grapheme_Base # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+1031 ; Grapheme_Base # Mc MYANMAR VOWEL SIGN E
+1038 ; Grapheme_Base # Mc MYANMAR SIGN VISARGA
+103B..103C ; Grapheme_Base # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+103F ; Grapheme_Base # Lo MYANMAR LETTER GREAT SA
+1040..1049 ; Grapheme_Base # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+104A..104F ; Grapheme_Base # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+1050..1055 ; Grapheme_Base # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+1056..1057 ; Grapheme_Base # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+105A..105D ; Grapheme_Base # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+1061 ; Grapheme_Base # Lo MYANMAR LETTER SGAW KAREN SHA
+1062..1064 ; Grapheme_Base # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+1065..1066 ; Grapheme_Base # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+1067..106D ; Grapheme_Base # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+106E..1070 ; Grapheme_Base # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+1075..1081 ; Grapheme_Base # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+1083..1084 ; Grapheme_Base # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+1087..108C ; Grapheme_Base # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+108E ; Grapheme_Base # Lo MYANMAR LETTER RUMAI PALAUNG FA
+108F ; Grapheme_Base # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
+1090..1099 ; Grapheme_Base # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+109A..109C ; Grapheme_Base # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+109E..109F ; Grapheme_Base # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+10A0..10C5 ; Grapheme_Base # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Grapheme_Base # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Grapheme_Base # L& GEORGIAN CAPITAL LETTER AEN
+10D0..10FA ; Grapheme_Base # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+10FB ; Grapheme_Base # Po GEORGIAN PARAGRAPH SEPARATOR
+10FC ; Grapheme_Base # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; Grapheme_Base # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1100..1248 ; Grapheme_Base # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+124A..124D ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258 ; Grapheme_Base # Lo ETHIOPIC SYLLABLE QHWA
+125A..125D ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1288 ; Grapheme_Base # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+128A..128D ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12B0 ; Grapheme_Base # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+12B2..12B5 ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0 ; Grapheme_Base # Lo ETHIOPIC SYLLABLE KXWA
+12C2..12C5 ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12D6 ; Grapheme_Base # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..1310 ; Grapheme_Base # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+1312..1315 ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..135A ; Grapheme_Base # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+1360..1368 ; Grapheme_Base # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+1369..137C ; Grapheme_Base # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+1380..138F ; Grapheme_Base # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1390..1399 ; Grapheme_Base # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+13A0..13F5 ; Grapheme_Base # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+13F8..13FD ; Grapheme_Base # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1400 ; Grapheme_Base # Pd CANADIAN SYLLABICS HYPHEN
+1401..166C ; Grapheme_Base # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166D ; Grapheme_Base # So CANADIAN SYLLABICS CHI SIGN
+166E ; Grapheme_Base # Po CANADIAN SYLLABICS FULL STOP
+166F..167F ; Grapheme_Base # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+1680 ; Grapheme_Base # Zs OGHAM SPACE MARK
+1681..169A ; Grapheme_Base # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+169B ; Grapheme_Base # Ps OGHAM FEATHER MARK
+169C ; Grapheme_Base # Pe OGHAM REVERSED FEATHER MARK
+16A0..16EA ; Grapheme_Base # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EB..16ED ; Grapheme_Base # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+16EE..16F0 ; Grapheme_Base # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8 ; Grapheme_Base # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..1711 ; Grapheme_Base # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
+1715 ; Grapheme_Base # Mc TAGALOG SIGN PAMUDPOD
+171F..1731 ; Grapheme_Base # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA
+1734 ; Grapheme_Base # Mc HANUNOO SIGN PAMUDPOD
+1735..1736 ; Grapheme_Base # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1740..1751 ; Grapheme_Base # Lo [18] BUHID LETTER A..BUHID LETTER HA
+1760..176C ; Grapheme_Base # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770 ; Grapheme_Base # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1780..17B3 ; Grapheme_Base # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+17B6 ; Grapheme_Base # Mc KHMER VOWEL SIGN AA
+17BE..17C5 ; Grapheme_Base # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+17C7..17C8 ; Grapheme_Base # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+17D4..17D6 ; Grapheme_Base # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D7 ; Grapheme_Base # Lm KHMER SIGN LEK TOO
+17D8..17DA ; Grapheme_Base # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+17DB ; Grapheme_Base # Sc KHMER CURRENCY SYMBOL RIEL
+17DC ; Grapheme_Base # Lo KHMER SIGN AVAKRAHASANYA
+17E0..17E9 ; Grapheme_Base # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+17F0..17F9 ; Grapheme_Base # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+1800..1805 ; Grapheme_Base # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+1806 ; Grapheme_Base # Pd MONGOLIAN TODO SOFT HYPHEN
+1807..180A ; Grapheme_Base # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+1810..1819 ; Grapheme_Base # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1842 ; Grapheme_Base # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+1843 ; Grapheme_Base # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
+1844..1878 ; Grapheme_Base # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..1884 ; Grapheme_Base # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1887..18A8 ; Grapheme_Base # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA ; Grapheme_Base # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+18B0..18F5 ; Grapheme_Base # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191E ; Grapheme_Base # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+1923..1926 ; Grapheme_Base # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+1929..192B ; Grapheme_Base # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+1930..1931 ; Grapheme_Base # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+1933..1938 ; Grapheme_Base # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+1940 ; Grapheme_Base # So LIMBU SIGN LOO
+1944..1945 ; Grapheme_Base # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+1946..194F ; Grapheme_Base # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+1950..196D ; Grapheme_Base # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI
+1970..1974 ; Grapheme_Base # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19AB ; Grapheme_Base # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9 ; Grapheme_Base # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9 ; Grapheme_Base # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA ; Grapheme_Base # No NEW TAI LUE THAM DIGIT ONE
+19DE..19FF ; Grapheme_Base # So [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC
+1A00..1A16 ; Grapheme_Base # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+1A19..1A1A ; Grapheme_Base # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+1A1E..1A1F ; Grapheme_Base # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+1A20..1A54 ; Grapheme_Base # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+1A55 ; Grapheme_Base # Mc TAI THAM CONSONANT SIGN MEDIAL RA
+1A57 ; Grapheme_Base # Mc TAI THAM CONSONANT SIGN LA TANG LAI
+1A61 ; Grapheme_Base # Mc TAI THAM VOWEL SIGN A
+1A63..1A64 ; Grapheme_Base # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+1A6D..1A72 ; Grapheme_Base # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+1A80..1A89 ; Grapheme_Base # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+1A90..1A99 ; Grapheme_Base # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA0..1AA6 ; Grapheme_Base # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA7 ; Grapheme_Base # Lm TAI THAM SIGN MAI YAMOK
+1AA8..1AAD ; Grapheme_Base # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+1B04 ; Grapheme_Base # Mc BALINESE SIGN BISAH
+1B05..1B33 ; Grapheme_Base # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+1B3B ; Grapheme_Base # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D..1B41 ; Grapheme_Base # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43..1B44 ; Grapheme_Base # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+1B45..1B4C ; Grapheme_Base # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+1B50..1B59 ; Grapheme_Base # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B5A..1B60 ; Grapheme_Base # Po [7] BALINESE PANTI..BALINESE PAMENENG
+1B61..1B6A ; Grapheme_Base # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+1B74..1B7C ; Grapheme_Base # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B7D..1B7E ; Grapheme_Base # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
+1B82 ; Grapheme_Base # Mc SUNDANESE SIGN PANGWISAD
+1B83..1BA0 ; Grapheme_Base # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+1BA1 ; Grapheme_Base # Mc SUNDANESE CONSONANT SIGN PAMINGKAL
+1BA6..1BA7 ; Grapheme_Base # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+1BAA ; Grapheme_Base # Mc SUNDANESE SIGN PAMAAEH
+1BAE..1BAF ; Grapheme_Base # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+1BB0..1BB9 ; Grapheme_Base # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BE5 ; Grapheme_Base # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+1BE7 ; Grapheme_Base # Mc BATAK VOWEL SIGN E
+1BEA..1BEC ; Grapheme_Base # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+1BEE ; Grapheme_Base # Mc BATAK VOWEL SIGN U
+1BF2..1BF3 ; Grapheme_Base # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+1BFC..1BFF ; Grapheme_Base # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+1C00..1C23 ; Grapheme_Base # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A
+1C24..1C2B ; Grapheme_Base # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+1C34..1C35 ; Grapheme_Base # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+1C3B..1C3F ; Grapheme_Base # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C40..1C49 ; Grapheme_Base # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C4F ; Grapheme_Base # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+1C50..1C59 ; Grapheme_Base # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+1C5A..1C77 ; Grapheme_Base # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+1C78..1C7D ; Grapheme_Base # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C7E..1C7F ; Grapheme_Base # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1C80..1C88 ; Grapheme_Base # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; Grapheme_Base # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Grapheme_Base # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1CC0..1CC7 ; Grapheme_Base # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+1CD3 ; Grapheme_Base # Po VEDIC SIGN NIHSHVASA
+1CE1 ; Grapheme_Base # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+1CE9..1CEC ; Grapheme_Base # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+1CEE..1CF3 ; Grapheme_Base # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF5..1CF6 ; Grapheme_Base # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7 ; Grapheme_Base # Mc VEDIC SIGN ATIKRAMA
+1CFA ; Grapheme_Base # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+1D00..1D2B ; Grapheme_Base # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2C..1D6A ; Grapheme_Base # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+1D6B..1D77 ; Grapheme_Base # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+1D78 ; Grapheme_Base # Lm MODIFIER LETTER CYRILLIC EN
+1D79..1D9A ; Grapheme_Base # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1D9B..1DBF ; Grapheme_Base # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1F15 ; Grapheme_Base # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Grapheme_Base # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Grapheme_Base # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Grapheme_Base # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Grapheme_Base # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Grapheme_Base # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Grapheme_Base # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Grapheme_Base # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Grapheme_Base # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Grapheme_Base # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Grapheme_Base # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; Grapheme_Base # Sk GREEK KORONIS
+1FBE ; Grapheme_Base # L& GREEK PROSGEGRAMMENI
+1FBF..1FC1 ; Grapheme_Base # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Grapheme_Base # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Grapheme_Base # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Grapheme_Base # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; Grapheme_Base # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Grapheme_Base # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Grapheme_Base # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; Grapheme_Base # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; Grapheme_Base # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; Grapheme_Base # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Grapheme_Base # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE ; Grapheme_Base # Sk [2] GREEK OXIA..GREEK DASIA
+2000..200A ; Grapheme_Base # Zs [11] EN QUAD..HAIR SPACE
+2010..2015 ; Grapheme_Base # Pd [6] HYPHEN..HORIZONTAL BAR
+2016..2017 ; Grapheme_Base # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+2018 ; Grapheme_Base # Pi LEFT SINGLE QUOTATION MARK
+2019 ; Grapheme_Base # Pf RIGHT SINGLE QUOTATION MARK
+201A ; Grapheme_Base # Ps SINGLE LOW-9 QUOTATION MARK
+201B..201C ; Grapheme_Base # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+201D ; Grapheme_Base # Pf RIGHT DOUBLE QUOTATION MARK
+201E ; Grapheme_Base # Ps DOUBLE LOW-9 QUOTATION MARK
+201F ; Grapheme_Base # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+2020..2027 ; Grapheme_Base # Po [8] DAGGER..HYPHENATION POINT
+202F ; Grapheme_Base # Zs NARROW NO-BREAK SPACE
+2030..2038 ; Grapheme_Base # Po [9] PER MILLE SIGN..CARET
+2039 ; Grapheme_Base # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+203A ; Grapheme_Base # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+203B..203E ; Grapheme_Base # Po [4] REFERENCE MARK..OVERLINE
+203F..2040 ; Grapheme_Base # Pc [2] UNDERTIE..CHARACTER TIE
+2041..2043 ; Grapheme_Base # Po [3] CARET INSERTION POINT..HYPHEN BULLET
+2044 ; Grapheme_Base # Sm FRACTION SLASH
+2045 ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH QUILL
+2046 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH QUILL
+2047..2051 ; Grapheme_Base # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+2052 ; Grapheme_Base # Sm COMMERCIAL MINUS SIGN
+2053 ; Grapheme_Base # Po SWUNG DASH
+2054 ; Grapheme_Base # Pc INVERTED UNDERTIE
+2055..205E ; Grapheme_Base # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+205F ; Grapheme_Base # Zs MEDIUM MATHEMATICAL SPACE
+2070 ; Grapheme_Base # No SUPERSCRIPT ZERO
+2071 ; Grapheme_Base # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074..2079 ; Grapheme_Base # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; Grapheme_Base # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; Grapheme_Base # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Grapheme_Base # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F ; Grapheme_Base # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080..2089 ; Grapheme_Base # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; Grapheme_Base # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; Grapheme_Base # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Grapheme_Base # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090..209C ; Grapheme_Base # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20A0..20C0 ; Grapheme_Base # Sc [33] EURO-CURRENCY SIGN..SOM SIGN
+2100..2101 ; Grapheme_Base # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102 ; Grapheme_Base # L& DOUBLE-STRUCK CAPITAL C
+2103..2106 ; Grapheme_Base # So [4] DEGREE CELSIUS..CADA UNA
+2107 ; Grapheme_Base # L& EULER CONSTANT
+2108..2109 ; Grapheme_Base # So [2] SCRUPLE..DEGREE FAHRENHEIT
+210A..2113 ; Grapheme_Base # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2114 ; Grapheme_Base # So L B BAR SYMBOL
+2115 ; Grapheme_Base # L& DOUBLE-STRUCK CAPITAL N
+2116..2117 ; Grapheme_Base # So [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT
+2118 ; Grapheme_Base # Sm SCRIPT CAPITAL P
+2119..211D ; Grapheme_Base # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+211E..2123 ; Grapheme_Base # So [6] PRESCRIPTION TAKE..VERSICLE
+2124 ; Grapheme_Base # L& DOUBLE-STRUCK CAPITAL Z
+2125 ; Grapheme_Base # So OUNCE SIGN
+2126 ; Grapheme_Base # L& OHM SIGN
+2127 ; Grapheme_Base # So INVERTED OHM SIGN
+2128 ; Grapheme_Base # L& BLACK-LETTER CAPITAL Z
+2129 ; Grapheme_Base # So TURNED GREEK SMALL LETTER IOTA
+212A..212D ; Grapheme_Base # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212E ; Grapheme_Base # So ESTIMATED SYMBOL
+212F..2134 ; Grapheme_Base # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; Grapheme_Base # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; Grapheme_Base # L& INFORMATION SOURCE
+213A..213B ; Grapheme_Base # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+213C..213F ; Grapheme_Base # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144 ; Grapheme_Base # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149 ; Grapheme_Base # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214A ; Grapheme_Base # So PROPERTY LINE
+214B ; Grapheme_Base # Sm TURNED AMPERSAND
+214C..214D ; Grapheme_Base # So [2] PER SIGN..AKTIESELSKAB
+214E ; Grapheme_Base # L& TURNED SMALL F
+214F ; Grapheme_Base # So SYMBOL FOR SAMARITAN SOURCE
+2150..215F ; Grapheme_Base # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2160..2182 ; Grapheme_Base # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+2183..2184 ; Grapheme_Base # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+2185..2188 ; Grapheme_Base # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2189 ; Grapheme_Base # No VULGAR FRACTION ZERO THIRDS
+218A..218B ; Grapheme_Base # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+2190..2194 ; Grapheme_Base # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199 ; Grapheme_Base # So [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B ; Grapheme_Base # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F ; Grapheme_Base # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0 ; Grapheme_Base # Sm RIGHTWARDS TWO HEADED ARROW
+21A1..21A2 ; Grapheme_Base # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3 ; Grapheme_Base # Sm RIGHTWARDS ARROW WITH TAIL
+21A4..21A5 ; Grapheme_Base # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6 ; Grapheme_Base # Sm RIGHTWARDS ARROW FROM BAR
+21A7..21AD ; Grapheme_Base # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+21AE ; Grapheme_Base # Sm LEFT RIGHT ARROW WITH STROKE
+21AF..21CD ; Grapheme_Base # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Grapheme_Base # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1 ; Grapheme_Base # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2 ; Grapheme_Base # Sm RIGHTWARDS DOUBLE ARROW
+21D3 ; Grapheme_Base # So DOWNWARDS DOUBLE ARROW
+21D4 ; Grapheme_Base # Sm LEFT RIGHT DOUBLE ARROW
+21D5..21F3 ; Grapheme_Base # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+21F4..22FF ; Grapheme_Base # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2300..2307 ; Grapheme_Base # So [8] DIAMETER SIGN..WAVY LINE
+2308 ; Grapheme_Base # Ps LEFT CEILING
+2309 ; Grapheme_Base # Pe RIGHT CEILING
+230A ; Grapheme_Base # Ps LEFT FLOOR
+230B ; Grapheme_Base # Pe RIGHT FLOOR
+230C..231F ; Grapheme_Base # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+2320..2321 ; Grapheme_Base # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+2322..2328 ; Grapheme_Base # So [7] FROWN..KEYBOARD
+2329 ; Grapheme_Base # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Grapheme_Base # Pe RIGHT-POINTING ANGLE BRACKET
+232B..237B ; Grapheme_Base # So [81] ERASE TO THE LEFT..NOT CHECK MARK
+237C ; Grapheme_Base # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A ; Grapheme_Base # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23B3 ; Grapheme_Base # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23DB ; Grapheme_Base # So [40] TOP SQUARE BRACKET..FUSE
+23DC..23E1 ; Grapheme_Base # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2..2426 ; Grapheme_Base # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A ; Grapheme_Base # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2460..249B ; Grapheme_Base # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9 ; Grapheme_Base # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA..24FF ; Grapheme_Base # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+2500..25B6 ; Grapheme_Base # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+25B7 ; Grapheme_Base # Sm WHITE RIGHT-POINTING TRIANGLE
+25B8..25C0 ; Grapheme_Base # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1 ; Grapheme_Base # Sm WHITE LEFT-POINTING TRIANGLE
+25C2..25F7 ; Grapheme_Base # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF ; Grapheme_Base # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..266E ; Grapheme_Base # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+266F ; Grapheme_Base # Sm MUSIC SHARP SIGN
+2670..2767 ; Grapheme_Base # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET
+2768 ; Grapheme_Base # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
+2769 ; Grapheme_Base # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
+276A ; Grapheme_Base # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+276B ; Grapheme_Base # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+276C ; Grapheme_Base # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+276D ; Grapheme_Base # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+276E ; Grapheme_Base # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+276F ; Grapheme_Base # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+2770 ; Grapheme_Base # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+2771 ; Grapheme_Base # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+2772 ; Grapheme_Base # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+2773 ; Grapheme_Base # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+2774 ; Grapheme_Base # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT
+2775 ; Grapheme_Base # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2793 ; Grapheme_Base # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+2794..27BF ; Grapheme_Base # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
+27C0..27C4 ; Grapheme_Base # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5 ; Grapheme_Base # Ps LEFT S-SHAPED BAG DELIMITER
+27C6 ; Grapheme_Base # Pe RIGHT S-SHAPED BAG DELIMITER
+27C7..27E5 ; Grapheme_Base # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6 ; Grapheme_Base # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7 ; Grapheme_Base # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8 ; Grapheme_Base # Ps MATHEMATICAL LEFT ANGLE BRACKET
+27E9 ; Grapheme_Base # Pe MATHEMATICAL RIGHT ANGLE BRACKET
+27EA ; Grapheme_Base # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB ; Grapheme_Base # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC ; Grapheme_Base # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED ; Grapheme_Base # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE ; Grapheme_Base # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF ; Grapheme_Base # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF ; Grapheme_Base # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2800..28FF ; Grapheme_Base # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+2900..2982 ; Grapheme_Base # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983 ; Grapheme_Base # Ps LEFT WHITE CURLY BRACKET
+2984 ; Grapheme_Base # Pe RIGHT WHITE CURLY BRACKET
+2985 ; Grapheme_Base # Ps LEFT WHITE PARENTHESIS
+2986 ; Grapheme_Base # Pe RIGHT WHITE PARENTHESIS
+2987 ; Grapheme_Base # Ps Z NOTATION LEFT IMAGE BRACKET
+2988 ; Grapheme_Base # Pe Z NOTATION RIGHT IMAGE BRACKET
+2989 ; Grapheme_Base # Ps Z NOTATION LEFT BINDING BRACKET
+298A ; Grapheme_Base # Pe Z NOTATION RIGHT BINDING BRACKET
+298B ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH UNDERBAR
+298C ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH UNDERBAR
+298D ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991 ; Grapheme_Base # Ps LEFT ANGLE BRACKET WITH DOT
+2992 ; Grapheme_Base # Pe RIGHT ANGLE BRACKET WITH DOT
+2993 ; Grapheme_Base # Ps LEFT ARC LESS-THAN BRACKET
+2994 ; Grapheme_Base # Pe RIGHT ARC GREATER-THAN BRACKET
+2995 ; Grapheme_Base # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996 ; Grapheme_Base # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997 ; Grapheme_Base # Ps LEFT BLACK TORTOISE SHELL BRACKET
+2998 ; Grapheme_Base # Pe RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7 ; Grapheme_Base # Sm [63] DOTTED FENCE..BLACK HOURGLASS
+29D8 ; Grapheme_Base # Ps LEFT WIGGLY FENCE
+29D9 ; Grapheme_Base # Pe RIGHT WIGGLY FENCE
+29DA ; Grapheme_Base # Ps LEFT DOUBLE WIGGLY FENCE
+29DB ; Grapheme_Base # Pe RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB ; Grapheme_Base # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC ; Grapheme_Base # Ps LEFT-POINTING CURVED ANGLE BRACKET
+29FD ; Grapheme_Base # Pe RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF ; Grapheme_Base # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B00..2B2F ; Grapheme_Base # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+2B30..2B44 ; Grapheme_Base # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B45..2B46 ; Grapheme_Base # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+2B47..2B4C ; Grapheme_Base # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B73 ; Grapheme_Base # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B76..2B95 ; Grapheme_Base # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B97..2BFF ; Grapheme_Base # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
+2C00..2C7B ; Grapheme_Base # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; Grapheme_Base # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2CE4 ; Grapheme_Base # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI
+2CE5..2CEA ; Grapheme_Base # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CEB..2CEE ; Grapheme_Base # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+2CF2..2CF3 ; Grapheme_Base # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+2CF9..2CFC ; Grapheme_Base # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+2CFD ; Grapheme_Base # No COPTIC FRACTION ONE HALF
+2CFE..2CFF ; Grapheme_Base # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+2D00..2D25 ; Grapheme_Base # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Grapheme_Base # L& GEORGIAN SMALL LETTER YN
+2D2D ; Grapheme_Base # L& GEORGIAN SMALL LETTER AEN
+2D30..2D67 ; Grapheme_Base # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+2D6F ; Grapheme_Base # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2D70 ; Grapheme_Base # Po TIFINAGH SEPARATOR MARK
+2D80..2D96 ; Grapheme_Base # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+2E00..2E01 ; Grapheme_Base # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+2E02 ; Grapheme_Base # Pi LEFT SUBSTITUTION BRACKET
+2E03 ; Grapheme_Base # Pf RIGHT SUBSTITUTION BRACKET
+2E04 ; Grapheme_Base # Pi LEFT DOTTED SUBSTITUTION BRACKET
+2E05 ; Grapheme_Base # Pf RIGHT DOTTED SUBSTITUTION BRACKET
+2E06..2E08 ; Grapheme_Base # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+2E09 ; Grapheme_Base # Pi LEFT TRANSPOSITION BRACKET
+2E0A ; Grapheme_Base # Pf RIGHT TRANSPOSITION BRACKET
+2E0B ; Grapheme_Base # Po RAISED SQUARE
+2E0C ; Grapheme_Base # Pi LEFT RAISED OMISSION BRACKET
+2E0D ; Grapheme_Base # Pf RIGHT RAISED OMISSION BRACKET
+2E0E..2E16 ; Grapheme_Base # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E17 ; Grapheme_Base # Pd DOUBLE OBLIQUE HYPHEN
+2E18..2E19 ; Grapheme_Base # Po [2] INVERTED INTERROBANG..PALM BRANCH
+2E1A ; Grapheme_Base # Pd HYPHEN WITH DIAERESIS
+2E1B ; Grapheme_Base # Po TILDE WITH RING ABOVE
+2E1C ; Grapheme_Base # Pi LEFT LOW PARAPHRASE BRACKET
+2E1D ; Grapheme_Base # Pf RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E1F ; Grapheme_Base # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+2E20 ; Grapheme_Base # Pi LEFT VERTICAL BAR WITH QUILL
+2E21 ; Grapheme_Base # Pf RIGHT VERTICAL BAR WITH QUILL
+2E22 ; Grapheme_Base # Ps TOP LEFT HALF BRACKET
+2E23 ; Grapheme_Base # Pe TOP RIGHT HALF BRACKET
+2E24 ; Grapheme_Base # Ps BOTTOM LEFT HALF BRACKET
+2E25 ; Grapheme_Base # Pe BOTTOM RIGHT HALF BRACKET
+2E26 ; Grapheme_Base # Ps LEFT SIDEWAYS U BRACKET
+2E27 ; Grapheme_Base # Pe RIGHT SIDEWAYS U BRACKET
+2E28 ; Grapheme_Base # Ps LEFT DOUBLE PARENTHESIS
+2E29 ; Grapheme_Base # Pe RIGHT DOUBLE PARENTHESIS
+2E2A..2E2E ; Grapheme_Base # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+2E2F ; Grapheme_Base # Lm VERTICAL TILDE
+2E30..2E39 ; Grapheme_Base # Po [10] RING POINT..TOP HALF SECTION SIGN
+2E3A..2E3B ; Grapheme_Base # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E3F ; Grapheme_Base # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM
+2E40 ; Grapheme_Base # Pd DOUBLE HYPHEN
+2E41 ; Grapheme_Base # Po REVERSED COMMA
+2E42 ; Grapheme_Base # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E4F ; Grapheme_Base # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51 ; Grapheme_Base # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52..2E54 ; Grapheme_Base # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK
+2E55 ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH STROKE
+2E56 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH STROKE
+2E57 ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE
+2E58 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+2E59 ; Grapheme_Base # Ps TOP HALF LEFT PARENTHESIS
+2E5A ; Grapheme_Base # Pe TOP HALF RIGHT PARENTHESIS
+2E5B ; Grapheme_Base # Ps BOTTOM HALF LEFT PARENTHESIS
+2E5C ; Grapheme_Base # Pe BOTTOM HALF RIGHT PARENTHESIS
+2E5D ; Grapheme_Base # Pd OBLIQUE HYPHEN
+2E80..2E99 ; Grapheme_Base # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2EF3 ; Grapheme_Base # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Grapheme_Base # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+2FF0..2FFB ; Grapheme_Base # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3000 ; Grapheme_Base # Zs IDEOGRAPHIC SPACE
+3001..3003 ; Grapheme_Base # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
+3004 ; Grapheme_Base # So JAPANESE INDUSTRIAL STANDARD SYMBOL
+3005 ; Grapheme_Base # Lm IDEOGRAPHIC ITERATION MARK
+3006 ; Grapheme_Base # Lo IDEOGRAPHIC CLOSING MARK
+3007 ; Grapheme_Base # Nl IDEOGRAPHIC NUMBER ZERO
+3008 ; Grapheme_Base # Ps LEFT ANGLE BRACKET
+3009 ; Grapheme_Base # Pe RIGHT ANGLE BRACKET
+300A ; Grapheme_Base # Ps LEFT DOUBLE ANGLE BRACKET
+300B ; Grapheme_Base # Pe RIGHT DOUBLE ANGLE BRACKET
+300C ; Grapheme_Base # Ps LEFT CORNER BRACKET
+300D ; Grapheme_Base # Pe RIGHT CORNER BRACKET
+300E ; Grapheme_Base # Ps LEFT WHITE CORNER BRACKET
+300F ; Grapheme_Base # Pe RIGHT WHITE CORNER BRACKET
+3010 ; Grapheme_Base # Ps LEFT BLACK LENTICULAR BRACKET
+3011 ; Grapheme_Base # Pe RIGHT BLACK LENTICULAR BRACKET
+3012..3013 ; Grapheme_Base # So [2] POSTAL MARK..GETA MARK
+3014 ; Grapheme_Base # Ps LEFT TORTOISE SHELL BRACKET
+3015 ; Grapheme_Base # Pe RIGHT TORTOISE SHELL BRACKET
+3016 ; Grapheme_Base # Ps LEFT WHITE LENTICULAR BRACKET
+3017 ; Grapheme_Base # Pe RIGHT WHITE LENTICULAR BRACKET
+3018 ; Grapheme_Base # Ps LEFT WHITE TORTOISE SHELL BRACKET
+3019 ; Grapheme_Base # Pe RIGHT WHITE TORTOISE SHELL BRACKET
+301A ; Grapheme_Base # Ps LEFT WHITE SQUARE BRACKET
+301B ; Grapheme_Base # Pe RIGHT WHITE SQUARE BRACKET
+301C ; Grapheme_Base # Pd WAVE DASH
+301D ; Grapheme_Base # Ps REVERSED DOUBLE PRIME QUOTATION MARK
+301E..301F ; Grapheme_Base # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+3020 ; Grapheme_Base # So POSTAL MARK FACE
+3021..3029 ; Grapheme_Base # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+3030 ; Grapheme_Base # Pd WAVY DASH
+3031..3035 ; Grapheme_Base # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+3036..3037 ; Grapheme_Base # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+3038..303A ; Grapheme_Base # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+303B ; Grapheme_Base # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
+303C ; Grapheme_Base # Lo MASU MARK
+303D ; Grapheme_Base # Po PART ALTERNATION MARK
+303E..303F ; Grapheme_Base # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+3041..3096 ; Grapheme_Base # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+309B..309C ; Grapheme_Base # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E ; Grapheme_Base # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+309F ; Grapheme_Base # Lo HIRAGANA DIGRAPH YORI
+30A0 ; Grapheme_Base # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1..30FA ; Grapheme_Base # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FB ; Grapheme_Base # Po KATAKANA MIDDLE DOT
+30FC..30FE ; Grapheme_Base # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+30FF ; Grapheme_Base # Lo KATAKANA DIGRAPH KOTO
+3105..312F ; Grapheme_Base # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+3131..318E ; Grapheme_Base # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3190..3191 ; Grapheme_Base # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+3192..3195 ; Grapheme_Base # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; Grapheme_Base # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+31A0..31BF ; Grapheme_Base # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+31C0..31E3 ; Grapheme_Base # So [36] CJK STROKE T..CJK STROKE Q
+31F0..31FF ; Grapheme_Base # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+3200..321E ; Grapheme_Base # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; Grapheme_Base # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247 ; Grapheme_Base # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3248..324F ; Grapheme_Base # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+3250 ; Grapheme_Base # So PARTNERSHIP SIGN
+3251..325F ; Grapheme_Base # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327F ; Grapheme_Base # So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
+3280..3289 ; Grapheme_Base # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; Grapheme_Base # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; Grapheme_Base # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..33FF ; Grapheme_Base # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
+3400..4DBF ; Grapheme_Base # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4DC0..4DFF ; Grapheme_Base # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+4E00..A014 ; Grapheme_Base # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E
+A015 ; Grapheme_Base # Lm YI SYLLABLE WU
+A016..A48C ; Grapheme_Base # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+A490..A4C6 ; Grapheme_Base # So [55] YI RADICAL QOT..YI RADICAL KE
+A4D0..A4F7 ; Grapheme_Base # Lo [40] LISU LETTER BA..LISU LETTER OE
+A4F8..A4FD ; Grapheme_Base # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+A4FE..A4FF ; Grapheme_Base # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A500..A60B ; Grapheme_Base # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+A60C ; Grapheme_Base # Lm VAI SYLLABLE LENGTHENER
+A60D..A60F ; Grapheme_Base # Po [3] VAI COMMA..VAI QUESTION MARK
+A610..A61F ; Grapheme_Base # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+A620..A629 ; Grapheme_Base # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE
+A62A..A62B ; Grapheme_Base # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+A640..A66D ; Grapheme_Base # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+A66E ; Grapheme_Base # Lo CYRILLIC LETTER MULTIOCULAR O
+A673 ; Grapheme_Base # Po SLAVONIC ASTERISK
+A67E ; Grapheme_Base # Po CYRILLIC KAVYKA
+A67F ; Grapheme_Base # Lm CYRILLIC PAYEROK
+A680..A69B ; Grapheme_Base # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+A69C..A69D ; Grapheme_Base # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A6A0..A6E5 ; Grapheme_Base # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
+A6E6..A6EF ; Grapheme_Base # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A6F2..A6F7 ; Grapheme_Base # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+A700..A716 ; Grapheme_Base # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+A717..A71F ; Grapheme_Base # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721 ; Grapheme_Base # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A722..A76F ; Grapheme_Base # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+A770 ; Grapheme_Base # Lm MODIFIER LETTER US
+A771..A787 ; Grapheme_Base # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A788 ; Grapheme_Base # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A ; Grapheme_Base # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A78B..A78E ; Grapheme_Base # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A78F ; Grapheme_Base # Lo LATIN LETTER SINOLOGICAL DOT
+A790..A7CA ; Grapheme_Base # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1 ; Grapheme_Base # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3 ; Grapheme_Base # L& LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9 ; Grapheme_Base # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4 ; Grapheme_Base # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5..A7F6 ; Grapheme_Base # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7 ; Grapheme_Base # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7F8..A7F9 ; Grapheme_Base # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+A7FA ; Grapheme_Base # L& LATIN LETTER SMALL CAPITAL TURNED M
+A7FB..A801 ; Grapheme_Base # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+A803..A805 ; Grapheme_Base # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+A807..A80A ; Grapheme_Base # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+A80C..A822 ; Grapheme_Base # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+A823..A824 ; Grapheme_Base # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+A827 ; Grapheme_Base # Mc SYLOTI NAGRI VOWEL SIGN OO
+A828..A82B ; Grapheme_Base # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A830..A835 ; Grapheme_Base # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+A836..A837 ; Grapheme_Base # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+A838 ; Grapheme_Base # Sc NORTH INDIC RUPEE MARK
+A839 ; Grapheme_Base # So NORTH INDIC QUANTITY MARK
+A840..A873 ; Grapheme_Base # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A874..A877 ; Grapheme_Base # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+A880..A881 ; Grapheme_Base # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+A882..A8B3 ; Grapheme_Base # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+A8B4..A8C3 ; Grapheme_Base # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+A8CE..A8CF ; Grapheme_Base # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A8D0..A8D9 ; Grapheme_Base # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A8F2..A8F7 ; Grapheme_Base # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8F8..A8FA ; Grapheme_Base # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+A8FB ; Grapheme_Base # Lo DEVANAGARI HEADSTROKE
+A8FC ; Grapheme_Base # Po DEVANAGARI SIGN SIDDHAM
+A8FD..A8FE ; Grapheme_Base # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+A900..A909 ; Grapheme_Base # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+A90A..A925 ; Grapheme_Base # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+A92E..A92F ; Grapheme_Base # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+A930..A946 ; Grapheme_Base # Lo [23] REJANG LETTER KA..REJANG LETTER A
+A952..A953 ; Grapheme_Base # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+A95F ; Grapheme_Base # Po REJANG SECTION MARK
+A960..A97C ; Grapheme_Base # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A983 ; Grapheme_Base # Mc JAVANESE SIGN WIGNYAN
+A984..A9B2 ; Grapheme_Base # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA
+A9B4..A9B5 ; Grapheme_Base # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+A9BA..A9BB ; Grapheme_Base # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+A9BE..A9C0 ; Grapheme_Base # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+A9C1..A9CD ; Grapheme_Base # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+A9CF ; Grapheme_Base # Lm JAVANESE PANGRANGKEP
+A9D0..A9D9 ; Grapheme_Base # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+A9DE..A9DF ; Grapheme_Base # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+A9E0..A9E4 ; Grapheme_Base # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+A9E6 ; Grapheme_Base # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+A9E7..A9EF ; Grapheme_Base # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+A9F0..A9F9 ; Grapheme_Base # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+A9FA..A9FE ; Grapheme_Base # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+AA00..AA28 ; Grapheme_Base # Lo [41] CHAM LETTER A..CHAM LETTER HA
+AA2F..AA30 ; Grapheme_Base # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+AA33..AA34 ; Grapheme_Base # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+AA40..AA42 ; Grapheme_Base # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+AA44..AA4B ; Grapheme_Base # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+AA4D ; Grapheme_Base # Mc CHAM CONSONANT SIGN FINAL H
+AA50..AA59 ; Grapheme_Base # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA5C..AA5F ; Grapheme_Base # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+AA60..AA6F ; Grapheme_Base # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+AA70 ; Grapheme_Base # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+AA71..AA76 ; Grapheme_Base # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+AA77..AA79 ; Grapheme_Base # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AA7A ; Grapheme_Base # Lo MYANMAR LETTER AITON RA
+AA7B ; Grapheme_Base # Mc MYANMAR SIGN PAO KAREN TONE
+AA7D ; Grapheme_Base # Mc MYANMAR SIGN TAI LAING TONE-5
+AA7E..AAAF ; Grapheme_Base # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+AAB1 ; Grapheme_Base # Lo TAI VIET VOWEL AA
+AAB5..AAB6 ; Grapheme_Base # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+AAB9..AABD ; Grapheme_Base # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+AAC0 ; Grapheme_Base # Lo TAI VIET TONE MAI NUENG
+AAC2 ; Grapheme_Base # Lo TAI VIET TONE MAI SONG
+AADB..AADC ; Grapheme_Base # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+AADD ; Grapheme_Base # Lm TAI VIET SYMBOL SAM
+AADE..AADF ; Grapheme_Base # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+AAE0..AAEA ; Grapheme_Base # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB ; Grapheme_Base # Mc MEETEI MAYEK VOWEL SIGN II
+AAEE..AAEF ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF0..AAF1 ; Grapheme_Base # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+AAF2 ; Grapheme_Base # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; Grapheme_Base # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5 ; Grapheme_Base # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AB01..AB06 ; Grapheme_Base # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E ; Grapheme_Base # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16 ; Grapheme_Base # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB30..AB5A ; Grapheme_Base # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5B ; Grapheme_Base # Sk MODIFIER BREVE WITH INVERTED BREVE
+AB5C..AB5F ; Grapheme_Base # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB60..AB68 ; Grapheme_Base # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; Grapheme_Base # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; Grapheme_Base # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
+AB70..ABBF ; Grapheme_Base # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABE2 ; Grapheme_Base # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+ABE3..ABE4 ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+ABE6..ABE7 ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+ABE9..ABEA ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+ABEB ; Grapheme_Base # Po MEETEI MAYEK CHEIKHEI
+ABEC ; Grapheme_Base # Mc MEETEI MAYEK LUM IYEK
+ABF0..ABF9 ; Grapheme_Base # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+AC00..D7A3 ; Grapheme_Base # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+D7B0..D7C6 ; Grapheme_Base # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB ; Grapheme_Base # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+F900..FA6D ; Grapheme_Base # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; Grapheme_Base # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; Grapheme_Base # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Grapheme_Base # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; Grapheme_Base # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; Grapheme_Base # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29 ; Grapheme_Base # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36 ; Grapheme_Base # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Grapheme_Base # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Grapheme_Base # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Grapheme_Base # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Grapheme_Base # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; Grapheme_Base # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBB2..FBC2 ; Grapheme_Base # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE
+FBD3..FD3D ; Grapheme_Base # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD3E ; Grapheme_Base # Pe ORNATE LEFT PARENTHESIS
+FD3F ; Grapheme_Base # Ps ORNATE RIGHT PARENTHESIS
+FD40..FD4F ; Grapheme_Base # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH
+FD50..FD8F ; Grapheme_Base # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Grapheme_Base # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDCF ; Grapheme_Base # So ARABIC LIGATURE SALAAMUHU ALAYNAA
+FDF0..FDFB ; Grapheme_Base # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Grapheme_Base # Sc RIAL SIGN
+FDFD..FDFF ; Grapheme_Base # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL
+FE10..FE16 ; Grapheme_Base # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; Grapheme_Base # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; Grapheme_Base # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; Grapheme_Base # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; Grapheme_Base # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE45..FE46 ; Grapheme_Base # Po [2] SESAME DOT..WHITE SESAME DOT
+FE47 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; Grapheme_Base # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; Grapheme_Base # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52 ; Grapheme_Base # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Grapheme_Base # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; Grapheme_Base # Pd SMALL EM DASH
+FE59 ; Grapheme_Base # Ps SMALL LEFT PARENTHESIS
+FE5A ; Grapheme_Base # Pe SMALL RIGHT PARENTHESIS
+FE5B ; Grapheme_Base # Ps SMALL LEFT CURLY BRACKET
+FE5C ; Grapheme_Base # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; Grapheme_Base # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; Grapheme_Base # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; Grapheme_Base # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; Grapheme_Base # Sm SMALL PLUS SIGN
+FE63 ; Grapheme_Base # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; Grapheme_Base # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; Grapheme_Base # Po SMALL REVERSE SOLIDUS
+FE69 ; Grapheme_Base # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; Grapheme_Base # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FE70..FE74 ; Grapheme_Base # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; Grapheme_Base # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF01..FF03 ; Grapheme_Base # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; Grapheme_Base # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; Grapheme_Base # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; Grapheme_Base # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; Grapheme_Base # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; Grapheme_Base # Po FULLWIDTH ASTERISK
+FF0B ; Grapheme_Base # Sm FULLWIDTH PLUS SIGN
+FF0C ; Grapheme_Base # Po FULLWIDTH COMMA
+FF0D ; Grapheme_Base # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; Grapheme_Base # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; Grapheme_Base # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; Grapheme_Base # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; Grapheme_Base # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; Grapheme_Base # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A ; Grapheme_Base # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B ; Grapheme_Base # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; Grapheme_Base # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; Grapheme_Base # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; Grapheme_Base # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; Grapheme_Base # Pc FULLWIDTH LOW LINE
+FF40 ; Grapheme_Base # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A ; Grapheme_Base # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B ; Grapheme_Base # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; Grapheme_Base # Sm FULLWIDTH VERTICAL LINE
+FF5D ; Grapheme_Base # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; Grapheme_Base # Sm FULLWIDTH TILDE
+FF5F ; Grapheme_Base # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; Grapheme_Base # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; Grapheme_Base # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; Grapheme_Base # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Grapheme_Base # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; Grapheme_Base # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F ; Grapheme_Base # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; Grapheme_Base # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; Grapheme_Base # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FFA0..FFBE ; Grapheme_Base # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; Grapheme_Base # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; Grapheme_Base # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; Grapheme_Base # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; Grapheme_Base # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE1 ; Grapheme_Base # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; Grapheme_Base # Sm FULLWIDTH NOT SIGN
+FFE3 ; Grapheme_Base # Sk FULLWIDTH MACRON
+FFE4 ; Grapheme_Base # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; Grapheme_Base # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8 ; Grapheme_Base # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; Grapheme_Base # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; Grapheme_Base # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+10000..1000B ; Grapheme_Base # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026 ; Grapheme_Base # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A ; Grapheme_Base # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D ; Grapheme_Base # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D ; Grapheme_Base # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D ; Grapheme_Base # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA ; Grapheme_Base # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10100..10102 ; Grapheme_Base # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+10107..10133 ; Grapheme_Base # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F ; Grapheme_Base # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10140..10174 ; Grapheme_Base # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+10175..10178 ; Grapheme_Base # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+10179..10189 ; Grapheme_Base # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+1018A..1018B ; Grapheme_Base # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
+1018C..1018E ; Grapheme_Base # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
+10190..1019C ; Grapheme_Base # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
+101A0 ; Grapheme_Base # So GREEK SYMBOL TAU RHO
+101D0..101FC ; Grapheme_Base # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+10280..1029C ; Grapheme_Base # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0 ; Grapheme_Base # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
+102E1..102FB ; Grapheme_Base # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+10300..1031F ; Grapheme_Base # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+10320..10323 ; Grapheme_Base # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1032D..10340 ; Grapheme_Base # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+10341 ; Grapheme_Base # Nl GOTHIC LETTER NINETY
+10342..10349 ; Grapheme_Base # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+1034A ; Grapheme_Base # Nl GOTHIC LETTER NINE HUNDRED
+10350..10375 ; Grapheme_Base # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+10380..1039D ; Grapheme_Base # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+1039F ; Grapheme_Base # Po UGARITIC WORD DIVIDER
+103A0..103C3 ; Grapheme_Base # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF ; Grapheme_Base # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D0 ; Grapheme_Base # Po OLD PERSIAN WORD DIVIDER
+103D1..103D5 ; Grapheme_Base # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..1044F ; Grapheme_Base # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+10450..1049D ; Grapheme_Base # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104A0..104A9 ; Grapheme_Base # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+104B0..104D3 ; Grapheme_Base # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; Grapheme_Base # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10500..10527 ; Grapheme_Base # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563 ; Grapheme_Base # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+1056F ; Grapheme_Base # Po CAUCASIAN ALBANIAN CITATION MARK
+10570..1057A ; Grapheme_Base # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Grapheme_Base # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Grapheme_Base # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Grapheme_Base # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1 ; Grapheme_Base # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1 ; Grapheme_Base # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9 ; Grapheme_Base # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC ; Grapheme_Base # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+10600..10736 ; Grapheme_Base # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755 ; Grapheme_Base # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767 ; Grapheme_Base # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785 ; Grapheme_Base # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Grapheme_Base # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Grapheme_Base # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10800..10805 ; Grapheme_Base # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808 ; Grapheme_Base # Lo CYPRIOT SYLLABLE JO
+1080A..10835 ; Grapheme_Base # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838 ; Grapheme_Base # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C ; Grapheme_Base # Lo CYPRIOT SYLLABLE ZA
+1083F..10855 ; Grapheme_Base # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+10857 ; Grapheme_Base # Po IMPERIAL ARAMAIC SECTION SIGN
+10858..1085F ; Grapheme_Base # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10860..10876 ; Grapheme_Base # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10877..10878 ; Grapheme_Base # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
+10879..1087F ; Grapheme_Base # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
+10880..1089E ; Grapheme_Base # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108A7..108AF ; Grapheme_Base # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+108E0..108F2 ; Grapheme_Base # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5 ; Grapheme_Base # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+108FB..108FF ; Grapheme_Base # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+10900..10915 ; Grapheme_Base # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10916..1091B ; Grapheme_Base # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+1091F ; Grapheme_Base # Po PHOENICIAN WORD SEPARATOR
+10920..10939 ; Grapheme_Base # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C
+1093F ; Grapheme_Base # Po LYDIAN TRIANGULAR MARK
+10980..109B7 ; Grapheme_Base # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BC..109BD ; Grapheme_Base # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+109BE..109BF ; Grapheme_Base # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+109C0..109CF ; Grapheme_Base # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF ; Grapheme_Base # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+10A00 ; Grapheme_Base # Lo KHAROSHTHI LETTER A
+10A10..10A13 ; Grapheme_Base # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+10A15..10A17 ; Grapheme_Base # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A35 ; Grapheme_Base # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+10A40..10A48 ; Grapheme_Base # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
+10A50..10A58 ; Grapheme_Base # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+10A60..10A7C ; Grapheme_Base # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A7D..10A7E ; Grapheme_Base # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+10A7F ; Grapheme_Base # Po OLD SOUTH ARABIAN NUMERIC INDICATOR
+10A80..10A9C ; Grapheme_Base # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10A9D..10A9F ; Grapheme_Base # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+10AC0..10AC7 ; Grapheme_Base # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC8 ; Grapheme_Base # So MANICHAEAN SIGN UD
+10AC9..10AE4 ; Grapheme_Base # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+10AEB..10AEF ; Grapheme_Base # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
+10AF0..10AF6 ; Grapheme_Base # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
+10B00..10B35 ; Grapheme_Base # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B39..10B3F ; Grapheme_Base # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B40..10B55 ; Grapheme_Base # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B58..10B5F ; Grapheme_Base # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B60..10B72 ; Grapheme_Base # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B78..10B7F ; Grapheme_Base # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10B80..10B91 ; Grapheme_Base # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10B99..10B9C ; Grapheme_Base # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10BA9..10BAF ; Grapheme_Base # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+10C00..10C48 ; Grapheme_Base # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2 ; Grapheme_Base # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2 ; Grapheme_Base # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10CFA..10CFF ; Grapheme_Base # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+10D00..10D23 ; Grapheme_Base # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10D30..10D39 ; Grapheme_Base # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E60..10E7E ; Grapheme_Base # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9 ; Grapheme_Base # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAD ; Grapheme_Base # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1 ; Grapheme_Base # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C ; Grapheme_Base # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F1D..10F26 ; Grapheme_Base # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F27 ; Grapheme_Base # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F45 ; Grapheme_Base # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10F51..10F54 ; Grapheme_Base # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10F55..10F59 ; Grapheme_Base # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10F70..10F81 ; Grapheme_Base # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10F86..10F89 ; Grapheme_Base # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
+10FB0..10FC4 ; Grapheme_Base # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; Grapheme_Base # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+10FE0..10FF6 ; Grapheme_Base # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000 ; Grapheme_Base # Mc BRAHMI SIGN CANDRABINDU
+11002 ; Grapheme_Base # Mc BRAHMI SIGN VISARGA
+11003..11037 ; Grapheme_Base # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+11047..1104D ; Grapheme_Base # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+11052..11065 ; Grapheme_Base # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+11066..1106F ; Grapheme_Base # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+11071..11072 ; Grapheme_Base # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11075 ; Grapheme_Base # Lo BRAHMI LETTER OLD TAMIL LLA
+11082 ; Grapheme_Base # Mc KAITHI SIGN VISARGA
+11083..110AF ; Grapheme_Base # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
+110B0..110B2 ; Grapheme_Base # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+110B7..110B8 ; Grapheme_Base # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110BB..110BC ; Grapheme_Base # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BE..110C1 ; Grapheme_Base # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+110D0..110E8 ; Grapheme_Base # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9 ; Grapheme_Base # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+11103..11126 ; Grapheme_Base # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+1112C ; Grapheme_Base # Mc CHAKMA VOWEL SIGN E
+11136..1113F ; Grapheme_Base # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11140..11143 ; Grapheme_Base # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+11144 ; Grapheme_Base # Lo CHAKMA LETTER LHAA
+11145..11146 ; Grapheme_Base # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; Grapheme_Base # Lo CHAKMA LETTER VAA
+11150..11172 ; Grapheme_Base # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+11174..11175 ; Grapheme_Base # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
+11176 ; Grapheme_Base # Lo MAHAJANI LIGATURE SHRI
+11182 ; Grapheme_Base # Mc SHARADA SIGN VISARGA
+11183..111B2 ; Grapheme_Base # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5 ; Grapheme_Base # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111BF..111C0 ; Grapheme_Base # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4 ; Grapheme_Base # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C5..111C8 ; Grapheme_Base # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111CD ; Grapheme_Base # Po SHARADA SUTRA MARK
+111CE ; Grapheme_Base # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111D0..111D9 ; Grapheme_Base # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA ; Grapheme_Base # Lo SHARADA EKAM
+111DB ; Grapheme_Base # Po SHARADA SIGN SIDDHAM
+111DC ; Grapheme_Base # Lo SHARADA HEADSTROKE
+111DD..111DF ; Grapheme_Base # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+111E1..111F4 ; Grapheme_Base # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+11200..11211 ; Grapheme_Base # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..1122B ; Grapheme_Base # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+1122C..1122E ; Grapheme_Base # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+11232..11233 ; Grapheme_Base # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+11235 ; Grapheme_Base # Mc KHOJKI SIGN VIRAMA
+11238..1123D ; Grapheme_Base # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+11280..11286 ; Grapheme_Base # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
+11288 ; Grapheme_Base # Lo MULTANI LETTER GHA
+1128A..1128D ; Grapheme_Base # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D ; Grapheme_Base # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8 ; Grapheme_Base # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112A9 ; Grapheme_Base # Po MULTANI SECTION MARK
+112B0..112DE ; Grapheme_Base # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+112E0..112E2 ; Grapheme_Base # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+112F0..112F9 ; Grapheme_Base # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11302..11303 ; Grapheme_Base # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+11305..1130C ; Grapheme_Base # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310 ; Grapheme_Base # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328 ; Grapheme_Base # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330 ; Grapheme_Base # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333 ; Grapheme_Base # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339 ; Grapheme_Base # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133D ; Grapheme_Base # Lo GRANTHA SIGN AVAGRAHA
+1133F ; Grapheme_Base # Mc GRANTHA VOWEL SIGN I
+11341..11344 ; Grapheme_Base # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348 ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D ; Grapheme_Base # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350 ; Grapheme_Base # Lo GRANTHA OM
+1135D..11361 ; Grapheme_Base # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11362..11363 ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11400..11434 ; Grapheme_Base # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437 ; Grapheme_Base # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11440..11441 ; Grapheme_Base # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11445 ; Grapheme_Base # Mc NEWA SIGN VISARGA
+11447..1144A ; Grapheme_Base # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1144B..1144F ; Grapheme_Base # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+11450..11459 ; Grapheme_Base # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145A..1145B ; Grapheme_Base # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
+1145D ; Grapheme_Base # Po NEWA INSERTION SIGN
+1145F..11461 ; Grapheme_Base # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+11480..114AF ; Grapheme_Base # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+114B1..114B2 ; Grapheme_Base # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II
+114B9 ; Grapheme_Base # Mc TIRHUTA VOWEL SIGN E
+114BB..114BC ; Grapheme_Base # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
+114BE ; Grapheme_Base # Mc TIRHUTA VOWEL SIGN AU
+114C1 ; Grapheme_Base # Mc TIRHUTA SIGN VISARGA
+114C4..114C5 ; Grapheme_Base # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+114C6 ; Grapheme_Base # Po TIRHUTA ABBREVIATION SIGN
+114C7 ; Grapheme_Base # Lo TIRHUTA OM
+114D0..114D9 ; Grapheme_Base # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+11580..115AE ; Grapheme_Base # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+115B0..115B1 ; Grapheme_Base # Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II
+115B8..115BB ; Grapheme_Base # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+115BE ; Grapheme_Base # Mc SIDDHAM SIGN VISARGA
+115C1..115D7 ; Grapheme_Base # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+115D8..115DB ; Grapheme_Base # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+11600..1162F ; Grapheme_Base # Lo [48] MODI LETTER A..MODI LETTER LLA
+11630..11632 ; Grapheme_Base # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+1163B..1163C ; Grapheme_Base # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+1163E ; Grapheme_Base # Mc MODI SIGN VISARGA
+11641..11643 ; Grapheme_Base # Po [3] MODI DANDA..MODI ABBREVIATION SIGN
+11644 ; Grapheme_Base # Lo MODI SIGN HUVA
+11650..11659 ; Grapheme_Base # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11660..1166C ; Grapheme_Base # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+11680..116AA ; Grapheme_Base # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AC ; Grapheme_Base # Mc TAKRI SIGN VISARGA
+116AE..116AF ; Grapheme_Base # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B6 ; Grapheme_Base # Mc TAKRI SIGN VIRAMA
+116B8 ; Grapheme_Base # Lo TAKRI LETTER ARCHAIC KHA
+116B9 ; Grapheme_Base # Po TAKRI ABBREVIATION SIGN
+116C0..116C9 ; Grapheme_Base # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+11700..1171A ; Grapheme_Base # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+11720..11721 ; Grapheme_Base # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+11726 ; Grapheme_Base # Mc AHOM VOWEL SIGN E
+11730..11739 ; Grapheme_Base # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+1173A..1173B ; Grapheme_Base # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+1173C..1173E ; Grapheme_Base # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+1173F ; Grapheme_Base # So AHOM SYMBOL VI
+11740..11746 ; Grapheme_Base # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
+11800..1182B ; Grapheme_Base # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
+1182C..1182E ; Grapheme_Base # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+11838 ; Grapheme_Base # Mc DOGRA SIGN VISARGA
+1183B ; Grapheme_Base # Po DOGRA ABBREVIATION SIGN
+118A0..118DF ; Grapheme_Base # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+118E0..118E9 ; Grapheme_Base # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+118EA..118F2 ; Grapheme_Base # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+118FF..11906 ; Grapheme_Base # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; Grapheme_Base # Lo DIVES AKURU LETTER O
+1190C..11913 ; Grapheme_Base # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Grapheme_Base # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Grapheme_Base # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11931..11935 ; Grapheme_Base # Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Grapheme_Base # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193D ; Grapheme_Base # Mc DIVES AKURU SIGN HALANTA
+1193F ; Grapheme_Base # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; Grapheme_Base # Mc DIVES AKURU MEDIAL YA
+11941 ; Grapheme_Base # Lo DIVES AKURU INITIAL RA
+11942 ; Grapheme_Base # Mc DIVES AKURU MEDIAL RA
+11944..11946 ; Grapheme_Base # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; Grapheme_Base # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+119A0..119A7 ; Grapheme_Base # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D0 ; Grapheme_Base # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+119D1..119D3 ; Grapheme_Base # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+119DC..119DF ; Grapheme_Base # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+119E1 ; Grapheme_Base # Lo NANDINAGARI SIGN AVAGRAHA
+119E2 ; Grapheme_Base # Po NANDINAGARI SIGN SIDDHAM
+119E3 ; Grapheme_Base # Lo NANDINAGARI HEADSTROKE
+119E4 ; Grapheme_Base # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00 ; Grapheme_Base # Lo ZANABAZAR SQUARE LETTER A
+11A0B..11A32 ; Grapheme_Base # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A39 ; Grapheme_Base # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A ; Grapheme_Base # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3F..11A46 ; Grapheme_Base # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A50 ; Grapheme_Base # Lo SOYOMBO LETTER A
+11A57..11A58 ; Grapheme_Base # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A5C..11A89 ; Grapheme_Base # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A97 ; Grapheme_Base # Mc SOYOMBO SIGN VISARGA
+11A9A..11A9C ; Grapheme_Base # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9D ; Grapheme_Base # Lo SOYOMBO MARK PLUTA
+11A9E..11AA2 ; Grapheme_Base # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+11AB0..11AF8 ; Grapheme_Base # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; Grapheme_Base # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; Grapheme_Base # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F ; Grapheme_Base # Mc BHAIKSUKI VOWEL SIGN AA
+11C3E ; Grapheme_Base # Mc BHAIKSUKI SIGN VISARGA
+11C40 ; Grapheme_Base # Lo BHAIKSUKI SIGN AVAGRAHA
+11C41..11C45 ; Grapheme_Base # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C50..11C59 ; Grapheme_Base # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C5A..11C6C ; Grapheme_Base # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+11C70..11C71 ; Grapheme_Base # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+11C72..11C8F ; Grapheme_Base # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11CA9 ; Grapheme_Base # Mc MARCHEN SUBJOINED LETTER YA
+11CB1 ; Grapheme_Base # Mc MARCHEN VOWEL SIGN I
+11CB4 ; Grapheme_Base # Mc MARCHEN VOWEL SIGN O
+11D00..11D06 ; Grapheme_Base # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; Grapheme_Base # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; Grapheme_Base # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D46 ; Grapheme_Base # Lo MASARAM GONDI REPHA
+11D50..11D59 ; Grapheme_Base # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+11D60..11D65 ; Grapheme_Base # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68 ; Grapheme_Base # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D89 ; Grapheme_Base # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+11D8A..11D8E ; Grapheme_Base # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+11D93..11D94 ; Grapheme_Base # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+11D96 ; Grapheme_Base # Mc GUNJALA GONDI SIGN VISARGA
+11D98 ; Grapheme_Base # Lo GUNJALA GONDI OM
+11DA0..11DA9 ; Grapheme_Base # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+11EE0..11EF2 ; Grapheme_Base # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11EF5..11EF6 ; Grapheme_Base # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11EF7..11EF8 ; Grapheme_Base # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0 ; Grapheme_Base # Lo LISU LETTER YHA
+11FC0..11FD4 ; Grapheme_Base # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+11FD5..11FDC ; Grapheme_Base # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
+11FDD..11FE0 ; Grapheme_Base # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
+11FE1..11FF1 ; Grapheme_Base # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
+11FFF ; Grapheme_Base # Po TAMIL PUNCTUATION END OF TEXT
+12000..12399 ; Grapheme_Base # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+12400..1246E ; Grapheme_Base # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12470..12474 ; Grapheme_Base # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+12480..12543 ; Grapheme_Base # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0 ; Grapheme_Base # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+12FF1..12FF2 ; Grapheme_Base # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302
+13000..1342E ; Grapheme_Base # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646 ; Grapheme_Base # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16800..16A38 ; Grapheme_Base # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16A40..16A5E ; Grapheme_Base # Lo [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69 ; Grapheme_Base # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
+16A6E..16A6F ; Grapheme_Base # Po [2] MRO DANDA..MRO DOUBLE DANDA
+16A70..16ABE ; Grapheme_Base # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AC0..16AC9 ; Grapheme_Base # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
+16AD0..16AED ; Grapheme_Base # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF5 ; Grapheme_Base # Po BASSA VAH FULL STOP
+16B00..16B2F ; Grapheme_Base # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+16B37..16B3B ; Grapheme_Base # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
+16B3C..16B3F ; Grapheme_Base # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
+16B40..16B43 ; Grapheme_Base # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B44 ; Grapheme_Base # Po PAHAWH HMONG SIGN XAUS
+16B45 ; Grapheme_Base # So PAHAWH HMONG SIGN CIM TSOV ROG
+16B50..16B59 ; Grapheme_Base # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B5B..16B61 ; Grapheme_Base # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+16B63..16B77 ; Grapheme_Base # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F ; Grapheme_Base # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F ; Grapheme_Base # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16E80..16E96 ; Grapheme_Base # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+16E97..16E9A ; Grapheme_Base # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+16F00..16F4A ; Grapheme_Base # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
+16F50 ; Grapheme_Base # Lo MIAO LETTER NASALIZATION
+16F51..16F87 ; Grapheme_Base # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16F93..16F9F ; Grapheme_Base # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; Grapheme_Base # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+16FE2 ; Grapheme_Base # Po OLD CHINESE HOOK MARK
+16FE3 ; Grapheme_Base # Lm OLD CHINESE ITERATION MARK
+16FF0..16FF1 ; Grapheme_Base # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+17000..187F7 ; Grapheme_Base # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+18800..18CD5 ; Grapheme_Base # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; Grapheme_Base # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3 ; Grapheme_Base # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; Grapheme_Base # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; Grapheme_Base # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1B000..1B122 ; Grapheme_Base # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU
+1B150..1B152 ; Grapheme_Base # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167 ; Grapheme_Base # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+1B170..1B2FB ; Grapheme_Base # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A ; Grapheme_Base # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C ; Grapheme_Base # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88 ; Grapheme_Base # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99 ; Grapheme_Base # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9C ; Grapheme_Base # So DUPLOYAN SIGN O WITH CROSS
+1BC9F ; Grapheme_Base # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1CF50..1CFC3 ; Grapheme_Base # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK
+1D000..1D0F5 ; Grapheme_Base # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126 ; Grapheme_Base # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129..1D164 ; Grapheme_Base # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D166 ; Grapheme_Base # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+1D16A..1D16C ; Grapheme_Base # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D16D ; Grapheme_Base # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT
+1D183..1D184 ; Grapheme_Base # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9 ; Grapheme_Base # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1EA ; Grapheme_Base # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON
+1D200..1D241 ; Grapheme_Base # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D245 ; Grapheme_Base # So GREEK MUSICAL LEIMMA
+1D2E0..1D2F3 ; Grapheme_Base # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+1D300..1D356 ; Grapheme_Base # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+1D360..1D378 ; Grapheme_Base # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
+1D400..1D454 ; Grapheme_Base # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Grapheme_Base # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Grapheme_Base # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Grapheme_Base # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Grapheme_Base # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Grapheme_Base # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Grapheme_Base # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Grapheme_Base # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Grapheme_Base # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Grapheme_Base # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Grapheme_Base # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Grapheme_Base # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Grapheme_Base # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Grapheme_Base # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Grapheme_Base # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Grapheme_Base # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Grapheme_Base # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Grapheme_Base # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Grapheme_Base # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Grapheme_Base # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; Grapheme_Base # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; Grapheme_Base # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; Grapheme_Base # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; Grapheme_Base # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; Grapheme_Base # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; Grapheme_Base # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; Grapheme_Base # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; Grapheme_Base # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; Grapheme_Base # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; Grapheme_Base # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; Grapheme_Base # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; Grapheme_Base # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; Grapheme_Base # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; Grapheme_Base # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; Grapheme_Base # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB ; Grapheme_Base # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; Grapheme_Base # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1D800..1D9FF ; Grapheme_Base # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA37..1DA3A ; Grapheme_Base # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA6D..1DA74 ; Grapheme_Base # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA76..1DA83 ; Grapheme_Base # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA85..1DA86 ; Grapheme_Base # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+1DA87..1DA8B ; Grapheme_Base # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+1DF00..1DF09 ; Grapheme_Base # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A ; Grapheme_Base # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E ; Grapheme_Base # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+1E100..1E12C ; Grapheme_Base # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E137..1E13D ; Grapheme_Base # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149 ; Grapheme_Base # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E ; Grapheme_Base # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E14F ; Grapheme_Base # So NYIAKENG PUACHUE HMONG CIRCLED CA
+1E290..1E2AD ; Grapheme_Base # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2C0..1E2EB ; Grapheme_Base # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
+1E2F0..1E2F9 ; Grapheme_Base # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+1E2FF ; Grapheme_Base # Sc WANCHO NGUN SIGN
+1E7E0..1E7E6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE ; Grapheme_Base # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE ; Grapheme_Base # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E800..1E8C4 ; Grapheme_Base # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8C7..1E8CF ; Grapheme_Base # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+1E900..1E943 ; Grapheme_Base # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E94B ; Grapheme_Base # Lm ADLAM NASALIZATION MARK
+1E950..1E959 ; Grapheme_Base # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F ; Grapheme_Base # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+1EC71..1ECAB ; Grapheme_Base # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+1ECAC ; Grapheme_Base # So INDIC SIYAQ PLACEHOLDER
+1ECAD..1ECAF ; Grapheme_Base # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+1ECB0 ; Grapheme_Base # Sc INDIC SIYAQ RUPEE MARK
+1ECB1..1ECB4 ; Grapheme_Base # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+1ED01..1ED2D ; Grapheme_Base # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+1ED2E ; Grapheme_Base # So OTTOMAN SIYAQ MARRATAN
+1ED2F..1ED3D ; Grapheme_Base # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
+1EE00..1EE03 ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Grapheme_Base # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Grapheme_Base # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Grapheme_Base # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Grapheme_Base # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Grapheme_Base # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Grapheme_Base # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Grapheme_Base # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Grapheme_Base # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Grapheme_Base # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Grapheme_Base # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Grapheme_Base # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Grapheme_Base # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Grapheme_Base # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Grapheme_Base # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1EEF0..1EEF1 ; Grapheme_Base # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+1F000..1F02B ; Grapheme_Base # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F030..1F093 ; Grapheme_Base # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F0A0..1F0AE ; Grapheme_Base # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0B1..1F0BF ; Grapheme_Base # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+1F0C1..1F0CF ; Grapheme_Base # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
+1F0D1..1F0F5 ; Grapheme_Base # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+1F100..1F10C ; Grapheme_Base # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F1AD ; Grapheme_Base # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
+1F1E6..1F202 ; Grapheme_Base # So [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA
+1F210..1F23B ; Grapheme_Base # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248 ; Grapheme_Base # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251 ; Grapheme_Base # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1F260..1F265 ; Grapheme_Base # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F300..1F3FA ; Grapheme_Base # So [251] CYCLONE..AMPHORA
+1F3FB..1F3FF ; Grapheme_Base # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F6D7 ; Grapheme_Base # So [728] RAT..ELEVATOR
+1F6DD..1F6EC ; Grapheme_Base # So [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING
+1F6F0..1F6FC ; Grapheme_Base # So [13] SATELLITE..ROLLER SKATE
+1F700..1F773 ; Grapheme_Base # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F780..1F7D8 ; Grapheme_Base # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
+1F7E0..1F7EB ; Grapheme_Base # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+1F7F0 ; Grapheme_Base # So HEAVY EQUALS SIGN
+1F800..1F80B ; Grapheme_Base # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F810..1F847 ; Grapheme_Base # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+1F850..1F859 ; Grapheme_Base # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+1F860..1F887 ; Grapheme_Base # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F890..1F8AD ; Grapheme_Base # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F8B0..1F8B1 ; Grapheme_Base # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1FA53 ; Grapheme_Base # So [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP
+1FA60..1FA6D ; Grapheme_Base # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FA70..1FA74 ; Grapheme_Base # So [5] BALLET SHOES..THONG SANDAL
+1FA78..1FA7C ; Grapheme_Base # So [5] DROP OF BLOOD..CRUTCH
+1FA80..1FA86 ; Grapheme_Base # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAAC ; Grapheme_Base # So [29] RINGED PLANET..HAMSA
+1FAB0..1FABA ; Grapheme_Base # So [11] FLY..NEST WITH EGGS
+1FAC0..1FAC5 ; Grapheme_Base # So [6] ANATOMICAL HEART..PERSON WITH CROWN
+1FAD0..1FAD9 ; Grapheme_Base # So [10] BLUEBERRIES..JAR
+1FAE0..1FAE7 ; Grapheme_Base # So [8] MELTING FACE..BUBBLES
+1FAF0..1FAF6 ; Grapheme_Base # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS
+1FB00..1FB92 ; Grapheme_Base # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; Grapheme_Base # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9 ; Grapheme_Base # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DF ; Grapheme_Base # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; Grapheme_Base # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B740..2B81D ; Grapheme_Base # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1 ; Grapheme_Base # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; Grapheme_Base # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2F800..2FA1D ; Grapheme_Base # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Grapheme_Base # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 142539
+
+# ================================================
+
+# Derived Property: Grapheme_Link (deprecated)
+# Generated from: Canonical_Combining_Class=Virama
+# Use Canonical_Combining_Class=Virama directly instead
+
+094D ; Grapheme_Link # Mn DEVANAGARI SIGN VIRAMA
+09CD ; Grapheme_Link # Mn BENGALI SIGN VIRAMA
+0A4D ; Grapheme_Link # Mn GURMUKHI SIGN VIRAMA
+0ACD ; Grapheme_Link # Mn GUJARATI SIGN VIRAMA
+0B4D ; Grapheme_Link # Mn ORIYA SIGN VIRAMA
+0BCD ; Grapheme_Link # Mn TAMIL SIGN VIRAMA
+0C4D ; Grapheme_Link # Mn TELUGU SIGN VIRAMA
+0CCD ; Grapheme_Link # Mn KANNADA SIGN VIRAMA
+0D3B..0D3C ; Grapheme_Link # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D4D ; Grapheme_Link # Mn MALAYALAM SIGN VIRAMA
+0DCA ; Grapheme_Link # Mn SINHALA SIGN AL-LAKUNA
+0E3A ; Grapheme_Link # Mn THAI CHARACTER PHINTHU
+0EBA ; Grapheme_Link # Mn LAO SIGN PALI VIRAMA
+0F84 ; Grapheme_Link # Mn TIBETAN MARK HALANTA
+1039..103A ; Grapheme_Link # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+1714 ; Grapheme_Link # Mn TAGALOG SIGN VIRAMA
+1715 ; Grapheme_Link # Mc TAGALOG SIGN PAMUDPOD
+1734 ; Grapheme_Link # Mc HANUNOO SIGN PAMUDPOD
+17D2 ; Grapheme_Link # Mn KHMER SIGN COENG
+1A60 ; Grapheme_Link # Mn TAI THAM SIGN SAKOT
+1B44 ; Grapheme_Link # Mc BALINESE ADEG ADEG
+1BAA ; Grapheme_Link # Mc SUNDANESE SIGN PAMAAEH
+1BAB ; Grapheme_Link # Mn SUNDANESE SIGN VIRAMA
+1BF2..1BF3 ; Grapheme_Link # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+2D7F ; Grapheme_Link # Mn TIFINAGH CONSONANT JOINER
+A806 ; Grapheme_Link # Mn SYLOTI NAGRI SIGN HASANTA
+A82C ; Grapheme_Link # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A8C4 ; Grapheme_Link # Mn SAURASHTRA SIGN VIRAMA
+A953 ; Grapheme_Link # Mc REJANG VIRAMA
+A9C0 ; Grapheme_Link # Mc JAVANESE PANGKON
+AAF6 ; Grapheme_Link # Mn MEETEI MAYEK VIRAMA
+ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK
+10A3F ; Grapheme_Link # Mn KHAROSHTHI VIRAMA
+11046 ; Grapheme_Link # Mn BRAHMI VIRAMA
+11070 ; Grapheme_Link # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+1107F ; Grapheme_Link # Mn BRAHMI NUMBER JOINER
+110B9 ; Grapheme_Link # Mn KAITHI SIGN VIRAMA
+11133..11134 ; Grapheme_Link # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
+111C0 ; Grapheme_Link # Mc SHARADA SIGN VIRAMA
+11235 ; Grapheme_Link # Mc KHOJKI SIGN VIRAMA
+112EA ; Grapheme_Link # Mn KHUDAWADI SIGN VIRAMA
+1134D ; Grapheme_Link # Mc GRANTHA SIGN VIRAMA
+11442 ; Grapheme_Link # Mn NEWA SIGN VIRAMA
+114C2 ; Grapheme_Link # Mn TIRHUTA SIGN VIRAMA
+115BF ; Grapheme_Link # Mn SIDDHAM SIGN VIRAMA
+1163F ; Grapheme_Link # Mn MODI SIGN VIRAMA
+116B6 ; Grapheme_Link # Mc TAKRI SIGN VIRAMA
+1172B ; Grapheme_Link # Mn AHOM SIGN KILLER
+11839 ; Grapheme_Link # Mn DOGRA SIGN VIRAMA
+1193D ; Grapheme_Link # Mc DIVES AKURU SIGN HALANTA
+1193E ; Grapheme_Link # Mn DIVES AKURU VIRAMA
+119E0 ; Grapheme_Link # Mn NANDINAGARI SIGN VIRAMA
+11A34 ; Grapheme_Link # Mn ZANABAZAR SQUARE SIGN VIRAMA
+11A47 ; Grapheme_Link # Mn ZANABAZAR SQUARE SUBJOINER
+11A99 ; Grapheme_Link # Mn SOYOMBO SUBJOINER
+11C3F ; Grapheme_Link # Mn BHAIKSUKI SIGN VIRAMA
+11D44..11D45 ; Grapheme_Link # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA
+11D97 ; Grapheme_Link # Mn GUNJALA GONDI VIRAMA
+
+# Total code points: 63
+
+# EOF
diff --git a/contrib/unicode/DerivedNormalizationProps.txt b/contrib/unicode/DerivedNormalizationProps.txt
new file mode 100644
index 0000000..b344567
--- /dev/null
+++ b/contrib/unicode/DerivedNormalizationProps.txt
@@ -0,0 +1,9953 @@
+# DerivedNormalizationProps-14.0.0.txt
+# Date: 2021-06-04, 02:19:20 GMT
+# © 2021 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# ================================================
+
+# Derived Property: FC_NFKC_Closure (DEPRECATED as of Unicode 6.0.0)
+# Generated from computing: b = NFKC(Fold(a)); c = NFKC(Fold(b));
+# Then if (c != b) add the mapping from a to c to the set of
+# mappings that constitute the FC_NFKC_Closure list
+# Uses the full case folding from CaseFolding.txt, without the T option.
+
+037A ; FC_NFKC; 0020 03B9 # Lm GREEK YPOGEGRAMMENI
+03D2 ; FC_NFKC; 03C5 # L& GREEK UPSILON WITH HOOK SYMBOL
+03D3 ; FC_NFKC; 03CD # L& GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4 ; FC_NFKC; 03CB # L& GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03F2 ; FC_NFKC; 03C3 # L& GREEK LUNATE SIGMA SYMBOL
+03F9 ; FC_NFKC; 03C3 # L& GREEK CAPITAL LUNATE SIGMA SYMBOL
+1D2C ; FC_NFKC; 0061 # Lm MODIFIER LETTER CAPITAL A
+1D2D ; FC_NFKC; 00E6 # Lm MODIFIER LETTER CAPITAL AE
+1D2E ; FC_NFKC; 0062 # Lm MODIFIER LETTER CAPITAL B
+1D30 ; FC_NFKC; 0064 # Lm MODIFIER LETTER CAPITAL D
+1D31 ; FC_NFKC; 0065 # Lm MODIFIER LETTER CAPITAL E
+1D32 ; FC_NFKC; 01DD # Lm MODIFIER LETTER CAPITAL REVERSED E
+1D33 ; FC_NFKC; 0067 # Lm MODIFIER LETTER CAPITAL G
+1D34 ; FC_NFKC; 0068 # Lm MODIFIER LETTER CAPITAL H
+1D35 ; FC_NFKC; 0069 # Lm MODIFIER LETTER CAPITAL I
+1D36 ; FC_NFKC; 006A # Lm MODIFIER LETTER CAPITAL J
+1D37 ; FC_NFKC; 006B # Lm MODIFIER LETTER CAPITAL K
+1D38 ; FC_NFKC; 006C # Lm MODIFIER LETTER CAPITAL L
+1D39 ; FC_NFKC; 006D # Lm MODIFIER LETTER CAPITAL M
+1D3A ; FC_NFKC; 006E # Lm MODIFIER LETTER CAPITAL N
+1D3C ; FC_NFKC; 006F # Lm MODIFIER LETTER CAPITAL O
+1D3D ; FC_NFKC; 0223 # Lm MODIFIER LETTER CAPITAL OU
+1D3E ; FC_NFKC; 0070 # Lm MODIFIER LETTER CAPITAL P
+1D3F ; FC_NFKC; 0072 # Lm MODIFIER LETTER CAPITAL R
+1D40 ; FC_NFKC; 0074 # Lm MODIFIER LETTER CAPITAL T
+1D41 ; FC_NFKC; 0075 # Lm MODIFIER LETTER CAPITAL U
+1D42 ; FC_NFKC; 0077 # Lm MODIFIER LETTER CAPITAL W
+20A8 ; FC_NFKC; 0072 0073 # Sc RUPEE SIGN
+2102 ; FC_NFKC; 0063 # L& DOUBLE-STRUCK CAPITAL C
+2103 ; FC_NFKC; 00B0 0063 # So DEGREE CELSIUS
+2107 ; FC_NFKC; 025B # L& EULER CONSTANT
+2109 ; FC_NFKC; 00B0 0066 # So DEGREE FAHRENHEIT
+210B ; FC_NFKC; 0068 # L& SCRIPT CAPITAL H
+210C ; FC_NFKC; 0068 # L& BLACK-LETTER CAPITAL H
+210D ; FC_NFKC; 0068 # L& DOUBLE-STRUCK CAPITAL H
+2110 ; FC_NFKC; 0069 # L& SCRIPT CAPITAL I
+2111 ; FC_NFKC; 0069 # L& BLACK-LETTER CAPITAL I
+2112 ; FC_NFKC; 006C # L& SCRIPT CAPITAL L
+2115 ; FC_NFKC; 006E # L& DOUBLE-STRUCK CAPITAL N
+2116 ; FC_NFKC; 006E 006F # So NUMERO SIGN
+2119 ; FC_NFKC; 0070 # L& DOUBLE-STRUCK CAPITAL P
+211A ; FC_NFKC; 0071 # L& DOUBLE-STRUCK CAPITAL Q
+211B ; FC_NFKC; 0072 # L& SCRIPT CAPITAL R
+211C ; FC_NFKC; 0072 # L& BLACK-LETTER CAPITAL R
+211D ; FC_NFKC; 0072 # L& DOUBLE-STRUCK CAPITAL R
+2120 ; FC_NFKC; 0073 006D # So SERVICE MARK
+2121 ; FC_NFKC; 0074 0065 006C # So TELEPHONE SIGN
+2122 ; FC_NFKC; 0074 006D # So TRADE MARK SIGN
+2124 ; FC_NFKC; 007A # L& DOUBLE-STRUCK CAPITAL Z
+2128 ; FC_NFKC; 007A # L& BLACK-LETTER CAPITAL Z
+212C ; FC_NFKC; 0062 # L& SCRIPT CAPITAL B
+212D ; FC_NFKC; 0063 # L& BLACK-LETTER CAPITAL C
+2130 ; FC_NFKC; 0065 # L& SCRIPT CAPITAL E
+2131 ; FC_NFKC; 0066 # L& SCRIPT CAPITAL F
+2133 ; FC_NFKC; 006D # L& SCRIPT CAPITAL M
+213B ; FC_NFKC; 0066 0061 0078 # So FACSIMILE SIGN
+213E ; FC_NFKC; 03B3 # L& DOUBLE-STRUCK CAPITAL GAMMA
+213F ; FC_NFKC; 03C0 # L& DOUBLE-STRUCK CAPITAL PI
+2145 ; FC_NFKC; 0064 # L& DOUBLE-STRUCK ITALIC CAPITAL D
+2C7D ; FC_NFKC; 0076 # Lm MODIFIER LETTER CAPITAL V
+3250 ; FC_NFKC; 0070 0074 0065 # So PARTNERSHIP SIGN
+32CC ; FC_NFKC; 0068 0067 # So SQUARE HG
+32CE ; FC_NFKC; 0065 0076 # So SQUARE EV
+32CF ; FC_NFKC; 006C 0074 0064 # So LIMITED LIABILITY SIGN
+3371 ; FC_NFKC; 0068 0070 0061 # So SQUARE HPA
+3373 ; FC_NFKC; 0061 0075 # So SQUARE AU
+3375 ; FC_NFKC; 006F 0076 # So SQUARE OV
+337A ; FC_NFKC; 0069 0075 # So SQUARE IU
+3380 ; FC_NFKC; 0070 0061 # So SQUARE PA AMPS
+3381 ; FC_NFKC; 006E 0061 # So SQUARE NA
+3382 ; FC_NFKC; 03BC 0061 # So SQUARE MU A
+3383 ; FC_NFKC; 006D 0061 # So SQUARE MA
+3384 ; FC_NFKC; 006B 0061 # So SQUARE KA
+3385 ; FC_NFKC; 006B 0062 # So SQUARE KB
+3386 ; FC_NFKC; 006D 0062 # So SQUARE MB
+3387 ; FC_NFKC; 0067 0062 # So SQUARE GB
+338A ; FC_NFKC; 0070 0066 # So SQUARE PF
+338B ; FC_NFKC; 006E 0066 # So SQUARE NF
+338C ; FC_NFKC; 03BC 0066 # So SQUARE MU F
+3390 ; FC_NFKC; 0068 007A # So SQUARE HZ
+3391 ; FC_NFKC; 006B 0068 007A # So SQUARE KHZ
+3392 ; FC_NFKC; 006D 0068 007A # So SQUARE MHZ
+3393 ; FC_NFKC; 0067 0068 007A # So SQUARE GHZ
+3394 ; FC_NFKC; 0074 0068 007A # So SQUARE THZ
+33A9 ; FC_NFKC; 0070 0061 # So SQUARE PA
+33AA ; FC_NFKC; 006B 0070 0061 # So SQUARE KPA
+33AB ; FC_NFKC; 006D 0070 0061 # So SQUARE MPA
+33AC ; FC_NFKC; 0067 0070 0061 # So SQUARE GPA
+33B4 ; FC_NFKC; 0070 0076 # So SQUARE PV
+33B5 ; FC_NFKC; 006E 0076 # So SQUARE NV
+33B6 ; FC_NFKC; 03BC 0076 # So SQUARE MU V
+33B7 ; FC_NFKC; 006D 0076 # So SQUARE MV
+33B8 ; FC_NFKC; 006B 0076 # So SQUARE KV
+33B9 ; FC_NFKC; 006D 0076 # So SQUARE MV MEGA
+33BA ; FC_NFKC; 0070 0077 # So SQUARE PW
+33BB ; FC_NFKC; 006E 0077 # So SQUARE NW
+33BC ; FC_NFKC; 03BC 0077 # So SQUARE MU W
+33BD ; FC_NFKC; 006D 0077 # So SQUARE MW
+33BE ; FC_NFKC; 006B 0077 # So SQUARE KW
+33BF ; FC_NFKC; 006D 0077 # So SQUARE MW MEGA
+33C0 ; FC_NFKC; 006B 03C9 # So SQUARE K OHM
+33C1 ; FC_NFKC; 006D 03C9 # So SQUARE M OHM
+33C3 ; FC_NFKC; 0062 0071 # So SQUARE BQ
+33C6 ; FC_NFKC; 0063 2215 006B 0067 #So SQUARE C OVER KG
+33C7 ; FC_NFKC; 0063 006F 002E # So SQUARE CO
+33C8 ; FC_NFKC; 0064 0062 # So SQUARE DB
+33C9 ; FC_NFKC; 0067 0079 # So SQUARE GY
+33CB ; FC_NFKC; 0068 0070 # So SQUARE HP
+33CD ; FC_NFKC; 006B 006B # So SQUARE KK
+33CE ; FC_NFKC; 006B 006D # So SQUARE KM CAPITAL
+33D7 ; FC_NFKC; 0070 0068 # So SQUARE PH
+33D9 ; FC_NFKC; 0070 0070 006D # So SQUARE PPM
+33DA ; FC_NFKC; 0070 0072 # So SQUARE PR
+33DC ; FC_NFKC; 0073 0076 # So SQUARE SV
+33DD ; FC_NFKC; 0077 0062 # So SQUARE WB
+33DE ; FC_NFKC; 0076 2215 006D # So SQUARE V OVER M
+33DF ; FC_NFKC; 0061 2215 006D # So SQUARE A OVER M
+A7F2 ; FC_NFKC; 0063 # Lm MODIFIER LETTER CAPITAL C
+A7F3 ; FC_NFKC; 0066 # Lm MODIFIER LETTER CAPITAL F
+A7F4 ; FC_NFKC; 0071 # Lm MODIFIER LETTER CAPITAL Q
+A7F8 ; FC_NFKC; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE
+1D400 ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD CAPITAL A
+1D401 ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD CAPITAL B
+1D402 ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD CAPITAL C
+1D403 ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD CAPITAL D
+1D404 ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD CAPITAL E
+1D405 ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD CAPITAL F
+1D406 ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD CAPITAL G
+1D407 ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD CAPITAL H
+1D408 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD CAPITAL I
+1D409 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD CAPITAL J
+1D40A ; FC_NFKC; 006B # L& MATHEMATICAL BOLD CAPITAL K
+1D40B ; FC_NFKC; 006C # L& MATHEMATICAL BOLD CAPITAL L
+1D40C ; FC_NFKC; 006D # L& MATHEMATICAL BOLD CAPITAL M
+1D40D ; FC_NFKC; 006E # L& MATHEMATICAL BOLD CAPITAL N
+1D40E ; FC_NFKC; 006F # L& MATHEMATICAL BOLD CAPITAL O
+1D40F ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD CAPITAL P
+1D410 ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD CAPITAL Q
+1D411 ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD CAPITAL R
+1D412 ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD CAPITAL S
+1D413 ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD CAPITAL T
+1D414 ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD CAPITAL U
+1D415 ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD CAPITAL V
+1D416 ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD CAPITAL W
+1D417 ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD CAPITAL X
+1D418 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD CAPITAL Y
+1D419 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD CAPITAL Z
+1D434 ; FC_NFKC; 0061 # L& MATHEMATICAL ITALIC CAPITAL A
+1D435 ; FC_NFKC; 0062 # L& MATHEMATICAL ITALIC CAPITAL B
+1D436 ; FC_NFKC; 0063 # L& MATHEMATICAL ITALIC CAPITAL C
+1D437 ; FC_NFKC; 0064 # L& MATHEMATICAL ITALIC CAPITAL D
+1D438 ; FC_NFKC; 0065 # L& MATHEMATICAL ITALIC CAPITAL E
+1D439 ; FC_NFKC; 0066 # L& MATHEMATICAL ITALIC CAPITAL F
+1D43A ; FC_NFKC; 0067 # L& MATHEMATICAL ITALIC CAPITAL G
+1D43B ; FC_NFKC; 0068 # L& MATHEMATICAL ITALIC CAPITAL H
+1D43C ; FC_NFKC; 0069 # L& MATHEMATICAL ITALIC CAPITAL I
+1D43D ; FC_NFKC; 006A # L& MATHEMATICAL ITALIC CAPITAL J
+1D43E ; FC_NFKC; 006B # L& MATHEMATICAL ITALIC CAPITAL K
+1D43F ; FC_NFKC; 006C # L& MATHEMATICAL ITALIC CAPITAL L
+1D440 ; FC_NFKC; 006D # L& MATHEMATICAL ITALIC CAPITAL M
+1D441 ; FC_NFKC; 006E # L& MATHEMATICAL ITALIC CAPITAL N
+1D442 ; FC_NFKC; 006F # L& MATHEMATICAL ITALIC CAPITAL O
+1D443 ; FC_NFKC; 0070 # L& MATHEMATICAL ITALIC CAPITAL P
+1D444 ; FC_NFKC; 0071 # L& MATHEMATICAL ITALIC CAPITAL Q
+1D445 ; FC_NFKC; 0072 # L& MATHEMATICAL ITALIC CAPITAL R
+1D446 ; FC_NFKC; 0073 # L& MATHEMATICAL ITALIC CAPITAL S
+1D447 ; FC_NFKC; 0074 # L& MATHEMATICAL ITALIC CAPITAL T
+1D448 ; FC_NFKC; 0075 # L& MATHEMATICAL ITALIC CAPITAL U
+1D449 ; FC_NFKC; 0076 # L& MATHEMATICAL ITALIC CAPITAL V
+1D44A ; FC_NFKC; 0077 # L& MATHEMATICAL ITALIC CAPITAL W
+1D44B ; FC_NFKC; 0078 # L& MATHEMATICAL ITALIC CAPITAL X
+1D44C ; FC_NFKC; 0079 # L& MATHEMATICAL ITALIC CAPITAL Y
+1D44D ; FC_NFKC; 007A # L& MATHEMATICAL ITALIC CAPITAL Z
+1D468 ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469 ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472 ; FC_NFKC; 006B # L& MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473 ; FC_NFKC; 006C # L& MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474 ; FC_NFKC; 006D # L& MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475 ; FC_NFKC; 006E # L& MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476 ; FC_NFKC; 006F # L& MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477 ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478 ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479 ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D49C ; FC_NFKC; 0061 # L& MATHEMATICAL SCRIPT CAPITAL A
+1D49E ; FC_NFKC; 0063 # L& MATHEMATICAL SCRIPT CAPITAL C
+1D49F ; FC_NFKC; 0064 # L& MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; FC_NFKC; 0067 # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5 ; FC_NFKC; 006A # L& MATHEMATICAL SCRIPT CAPITAL J
+1D4A6 ; FC_NFKC; 006B # L& MATHEMATICAL SCRIPT CAPITAL K
+1D4A9 ; FC_NFKC; 006E # L& MATHEMATICAL SCRIPT CAPITAL N
+1D4AA ; FC_NFKC; 006F # L& MATHEMATICAL SCRIPT CAPITAL O
+1D4AB ; FC_NFKC; 0070 # L& MATHEMATICAL SCRIPT CAPITAL P
+1D4AC ; FC_NFKC; 0071 # L& MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE ; FC_NFKC; 0073 # L& MATHEMATICAL SCRIPT CAPITAL S
+1D4AF ; FC_NFKC; 0074 # L& MATHEMATICAL SCRIPT CAPITAL T
+1D4B0 ; FC_NFKC; 0075 # L& MATHEMATICAL SCRIPT CAPITAL U
+1D4B1 ; FC_NFKC; 0076 # L& MATHEMATICAL SCRIPT CAPITAL V
+1D4B2 ; FC_NFKC; 0077 # L& MATHEMATICAL SCRIPT CAPITAL W
+1D4B3 ; FC_NFKC; 0078 # L& MATHEMATICAL SCRIPT CAPITAL X
+1D4B4 ; FC_NFKC; 0079 # L& MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5 ; FC_NFKC; 007A # L& MATHEMATICAL SCRIPT CAPITAL Z
+1D4D0 ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1 ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2 ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3 ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4 ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5 ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6 ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7 ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA ; FC_NFKC; 006B # L& MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB ; FC_NFKC; 006C # L& MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC ; FC_NFKC; 006D # L& MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD ; FC_NFKC; 006E # L& MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE ; FC_NFKC; 006F # L& MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0 ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1 ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2 ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3 ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4 ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5 ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6 ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7 ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D504 ; FC_NFKC; 0061 # L& MATHEMATICAL FRAKTUR CAPITAL A
+1D505 ; FC_NFKC; 0062 # L& MATHEMATICAL FRAKTUR CAPITAL B
+1D507 ; FC_NFKC; 0064 # L& MATHEMATICAL FRAKTUR CAPITAL D
+1D508 ; FC_NFKC; 0065 # L& MATHEMATICAL FRAKTUR CAPITAL E
+1D509 ; FC_NFKC; 0066 # L& MATHEMATICAL FRAKTUR CAPITAL F
+1D50A ; FC_NFKC; 0067 # L& MATHEMATICAL FRAKTUR CAPITAL G
+1D50D ; FC_NFKC; 006A # L& MATHEMATICAL FRAKTUR CAPITAL J
+1D50E ; FC_NFKC; 006B # L& MATHEMATICAL FRAKTUR CAPITAL K
+1D50F ; FC_NFKC; 006C # L& MATHEMATICAL FRAKTUR CAPITAL L
+1D510 ; FC_NFKC; 006D # L& MATHEMATICAL FRAKTUR CAPITAL M
+1D511 ; FC_NFKC; 006E # L& MATHEMATICAL FRAKTUR CAPITAL N
+1D512 ; FC_NFKC; 006F # L& MATHEMATICAL FRAKTUR CAPITAL O
+1D513 ; FC_NFKC; 0070 # L& MATHEMATICAL FRAKTUR CAPITAL P
+1D514 ; FC_NFKC; 0071 # L& MATHEMATICAL FRAKTUR CAPITAL Q
+1D516 ; FC_NFKC; 0073 # L& MATHEMATICAL FRAKTUR CAPITAL S
+1D517 ; FC_NFKC; 0074 # L& MATHEMATICAL FRAKTUR CAPITAL T
+1D518 ; FC_NFKC; 0075 # L& MATHEMATICAL FRAKTUR CAPITAL U
+1D519 ; FC_NFKC; 0076 # L& MATHEMATICAL FRAKTUR CAPITAL V
+1D51A ; FC_NFKC; 0077 # L& MATHEMATICAL FRAKTUR CAPITAL W
+1D51B ; FC_NFKC; 0078 # L& MATHEMATICAL FRAKTUR CAPITAL X
+1D51C ; FC_NFKC; 0079 # L& MATHEMATICAL FRAKTUR CAPITAL Y
+1D538 ; FC_NFKC; 0061 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539 ; FC_NFKC; 0062 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B ; FC_NFKC; 0064 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C ; FC_NFKC; 0065 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D ; FC_NFKC; 0066 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E ; FC_NFKC; 0067 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540 ; FC_NFKC; 0069 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541 ; FC_NFKC; 006A # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542 ; FC_NFKC; 006B # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543 ; FC_NFKC; 006C # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544 ; FC_NFKC; 006D # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; FC_NFKC; 006F # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A ; FC_NFKC; 0073 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B ; FC_NFKC; 0074 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C ; FC_NFKC; 0075 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D ; FC_NFKC; 0076 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E ; FC_NFKC; 0077 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F ; FC_NFKC; 0078 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550 ; FC_NFKC; 0079 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D56C ; FC_NFKC; 0061 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D ; FC_NFKC; 0062 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E ; FC_NFKC; 0063 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F ; FC_NFKC; 0064 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570 ; FC_NFKC; 0065 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571 ; FC_NFKC; 0066 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572 ; FC_NFKC; 0067 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573 ; FC_NFKC; 0068 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574 ; FC_NFKC; 0069 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575 ; FC_NFKC; 006A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576 ; FC_NFKC; 006B # L& MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577 ; FC_NFKC; 006C # L& MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578 ; FC_NFKC; 006D # L& MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579 ; FC_NFKC; 006E # L& MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A ; FC_NFKC; 006F # L& MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B ; FC_NFKC; 0070 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C ; FC_NFKC; 0071 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D ; FC_NFKC; 0072 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E ; FC_NFKC; 0073 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F ; FC_NFKC; 0074 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580 ; FC_NFKC; 0075 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581 ; FC_NFKC; 0076 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582 ; FC_NFKC; 0077 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583 ; FC_NFKC; 0078 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584 ; FC_NFKC; 0079 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585 ; FC_NFKC; 007A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D5A0 ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1 ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2 ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3 ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4 ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5 ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6 ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7 ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8 ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9 ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0 ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1 ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2 ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3 ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4 ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5 ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6 ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7 ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8 ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9 ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5D4 ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5 ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6 ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7 ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8 ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9 ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0 ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1 ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2 ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3 ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4 ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5 ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6 ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7 ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8 ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9 ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D608 ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609 ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610 ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611 ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612 ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613 ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614 ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615 ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616 ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617 ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618 ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619 ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620 ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621 ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D63C ; FC_NFKC; 0061 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D ; FC_NFKC; 0062 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E ; FC_NFKC; 0063 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F ; FC_NFKC; 0064 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640 ; FC_NFKC; 0065 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641 ; FC_NFKC; 0066 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642 ; FC_NFKC; 0067 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643 ; FC_NFKC; 0068 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644 ; FC_NFKC; 0069 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645 ; FC_NFKC; 006A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646 ; FC_NFKC; 006B # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647 ; FC_NFKC; 006C # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648 ; FC_NFKC; 006D # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649 ; FC_NFKC; 006E # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A ; FC_NFKC; 006F # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B ; FC_NFKC; 0070 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C ; FC_NFKC; 0071 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D ; FC_NFKC; 0072 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E ; FC_NFKC; 0073 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F ; FC_NFKC; 0074 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650 ; FC_NFKC; 0075 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651 ; FC_NFKC; 0076 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652 ; FC_NFKC; 0077 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653 ; FC_NFKC; 0078 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654 ; FC_NFKC; 0079 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655 ; FC_NFKC; 007A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D670 ; FC_NFKC; 0061 # L& MATHEMATICAL MONOSPACE CAPITAL A
+1D671 ; FC_NFKC; 0062 # L& MATHEMATICAL MONOSPACE CAPITAL B
+1D672 ; FC_NFKC; 0063 # L& MATHEMATICAL MONOSPACE CAPITAL C
+1D673 ; FC_NFKC; 0064 # L& MATHEMATICAL MONOSPACE CAPITAL D
+1D674 ; FC_NFKC; 0065 # L& MATHEMATICAL MONOSPACE CAPITAL E
+1D675 ; FC_NFKC; 0066 # L& MATHEMATICAL MONOSPACE CAPITAL F
+1D676 ; FC_NFKC; 0067 # L& MATHEMATICAL MONOSPACE CAPITAL G
+1D677 ; FC_NFKC; 0068 # L& MATHEMATICAL MONOSPACE CAPITAL H
+1D678 ; FC_NFKC; 0069 # L& MATHEMATICAL MONOSPACE CAPITAL I
+1D679 ; FC_NFKC; 006A # L& MATHEMATICAL MONOSPACE CAPITAL J
+1D67A ; FC_NFKC; 006B # L& MATHEMATICAL MONOSPACE CAPITAL K
+1D67B ; FC_NFKC; 006C # L& MATHEMATICAL MONOSPACE CAPITAL L
+1D67C ; FC_NFKC; 006D # L& MATHEMATICAL MONOSPACE CAPITAL M
+1D67D ; FC_NFKC; 006E # L& MATHEMATICAL MONOSPACE CAPITAL N
+1D67E ; FC_NFKC; 006F # L& MATHEMATICAL MONOSPACE CAPITAL O
+1D67F ; FC_NFKC; 0070 # L& MATHEMATICAL MONOSPACE CAPITAL P
+1D680 ; FC_NFKC; 0071 # L& MATHEMATICAL MONOSPACE CAPITAL Q
+1D681 ; FC_NFKC; 0072 # L& MATHEMATICAL MONOSPACE CAPITAL R
+1D682 ; FC_NFKC; 0073 # L& MATHEMATICAL MONOSPACE CAPITAL S
+1D683 ; FC_NFKC; 0074 # L& MATHEMATICAL MONOSPACE CAPITAL T
+1D684 ; FC_NFKC; 0075 # L& MATHEMATICAL MONOSPACE CAPITAL U
+1D685 ; FC_NFKC; 0076 # L& MATHEMATICAL MONOSPACE CAPITAL V
+1D686 ; FC_NFKC; 0077 # L& MATHEMATICAL MONOSPACE CAPITAL W
+1D687 ; FC_NFKC; 0078 # L& MATHEMATICAL MONOSPACE CAPITAL X
+1D688 ; FC_NFKC; 0079 # L& MATHEMATICAL MONOSPACE CAPITAL Y
+1D689 ; FC_NFKC; 007A # L& MATHEMATICAL MONOSPACE CAPITAL Z
+1D6A8 ; FC_NFKC; 03B1 # L& MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9 ; FC_NFKC; 03B2 # L& MATHEMATICAL BOLD CAPITAL BETA
+1D6AA ; FC_NFKC; 03B3 # L& MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB ; FC_NFKC; 03B4 # L& MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC ; FC_NFKC; 03B5 # L& MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD ; FC_NFKC; 03B6 # L& MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE ; FC_NFKC; 03B7 # L& MATHEMATICAL BOLD CAPITAL ETA
+1D6AF ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA
+1D6B0 ; FC_NFKC; 03B9 # L& MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1 ; FC_NFKC; 03BA # L& MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2 ; FC_NFKC; 03BB # L& MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3 ; FC_NFKC; 03BC # L& MATHEMATICAL BOLD CAPITAL MU
+1D6B4 ; FC_NFKC; 03BD # L& MATHEMATICAL BOLD CAPITAL NU
+1D6B5 ; FC_NFKC; 03BE # L& MATHEMATICAL BOLD CAPITAL XI
+1D6B6 ; FC_NFKC; 03BF # L& MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7 ; FC_NFKC; 03C0 # L& MATHEMATICAL BOLD CAPITAL PI
+1D6B8 ; FC_NFKC; 03C1 # L& MATHEMATICAL BOLD CAPITAL RHO
+1D6B9 ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB ; FC_NFKC; 03C4 # L& MATHEMATICAL BOLD CAPITAL TAU
+1D6BC ; FC_NFKC; 03C5 # L& MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD ; FC_NFKC; 03C6 # L& MATHEMATICAL BOLD CAPITAL PHI
+1D6BE ; FC_NFKC; 03C7 # L& MATHEMATICAL BOLD CAPITAL CHI
+1D6BF ; FC_NFKC; 03C8 # L& MATHEMATICAL BOLD CAPITAL PSI
+1D6C0 ; FC_NFKC; 03C9 # L& MATHEMATICAL BOLD CAPITAL OMEGA
+1D6D3 ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD SMALL FINAL SIGMA
+1D6E2 ; FC_NFKC; 03B1 # L& MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3 ; FC_NFKC; 03B2 # L& MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4 ; FC_NFKC; 03B3 # L& MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5 ; FC_NFKC; 03B4 # L& MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6 ; FC_NFKC; 03B5 # L& MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7 ; FC_NFKC; 03B6 # L& MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8 ; FC_NFKC; 03B7 # L& MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9 ; FC_NFKC; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA ; FC_NFKC; 03B9 # L& MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB ; FC_NFKC; 03BA # L& MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC ; FC_NFKC; 03BB # L& MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED ; FC_NFKC; 03BC # L& MATHEMATICAL ITALIC CAPITAL MU
+1D6EE ; FC_NFKC; 03BD # L& MATHEMATICAL ITALIC CAPITAL NU
+1D6EF ; FC_NFKC; 03BE # L& MATHEMATICAL ITALIC CAPITAL XI
+1D6F0 ; FC_NFKC; 03BF # L& MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1 ; FC_NFKC; 03C0 # L& MATHEMATICAL ITALIC CAPITAL PI
+1D6F2 ; FC_NFKC; 03C1 # L& MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3 ; FC_NFKC; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4 ; FC_NFKC; 03C3 # L& MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5 ; FC_NFKC; 03C4 # L& MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6 ; FC_NFKC; 03C5 # L& MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7 ; FC_NFKC; 03C6 # L& MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8 ; FC_NFKC; 03C7 # L& MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9 ; FC_NFKC; 03C8 # L& MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA ; FC_NFKC; 03C9 # L& MATHEMATICAL ITALIC CAPITAL OMEGA
+1D70D ; FC_NFKC; 03C3 # L& MATHEMATICAL ITALIC SMALL FINAL SIGMA
+1D71C ; FC_NFKC; 03B1 # L& MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D ; FC_NFKC; 03B2 # L& MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E ; FC_NFKC; 03B3 # L& MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F ; FC_NFKC; 03B4 # L& MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720 ; FC_NFKC; 03B5 # L& MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721 ; FC_NFKC; 03B6 # L& MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722 ; FC_NFKC; 03B7 # L& MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723 ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724 ; FC_NFKC; 03B9 # L& MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725 ; FC_NFKC; 03BA # L& MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726 ; FC_NFKC; 03BB # L& MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727 ; FC_NFKC; 03BC # L& MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728 ; FC_NFKC; 03BD # L& MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729 ; FC_NFKC; 03BE # L& MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A ; FC_NFKC; 03BF # L& MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B ; FC_NFKC; 03C0 # L& MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C ; FC_NFKC; 03C1 # L& MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D ; FC_NFKC; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F ; FC_NFKC; 03C4 # L& MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730 ; FC_NFKC; 03C5 # L& MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731 ; FC_NFKC; 03C6 # L& MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732 ; FC_NFKC; 03C7 # L& MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733 ; FC_NFKC; 03C8 # L& MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734 ; FC_NFKC; 03C9 # L& MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D747 ; FC_NFKC; 03C3 # L& MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA
+1D756 ; FC_NFKC; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757 ; FC_NFKC; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758 ; FC_NFKC; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759 ; FC_NFKC; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A ; FC_NFKC; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B ; FC_NFKC; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C ; FC_NFKC; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E ; FC_NFKC; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F ; FC_NFKC; 03BA # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760 ; FC_NFKC; 03BB # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761 ; FC_NFKC; 03BC # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762 ; FC_NFKC; 03BD # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763 ; FC_NFKC; 03BE # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764 ; FC_NFKC; 03BF # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765 ; FC_NFKC; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766 ; FC_NFKC; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767 ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768 ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769 ; FC_NFKC; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A ; FC_NFKC; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B ; FC_NFKC; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C ; FC_NFKC; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D ; FC_NFKC; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E ; FC_NFKC; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D781 ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA
+1D790 ; FC_NFKC; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791 ; FC_NFKC; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792 ; FC_NFKC; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793 ; FC_NFKC; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794 ; FC_NFKC; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795 ; FC_NFKC; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796 ; FC_NFKC; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797 ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798 ; FC_NFKC; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799 ; FC_NFKC; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A ; FC_NFKC; 03BB # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B ; FC_NFKC; 03BC # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C ; FC_NFKC; 03BD # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D ; FC_NFKC; 03BE # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E ; FC_NFKC; 03BF # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F ; FC_NFKC; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0 ; FC_NFKC; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1 ; FC_NFKC; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2 ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3 ; FC_NFKC; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4 ; FC_NFKC; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5 ; FC_NFKC; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6 ; FC_NFKC; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7 ; FC_NFKC; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8 ; FC_NFKC; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7BB ; FC_NFKC; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA
+1D7CA ; FC_NFKC; 03DD # L& MATHEMATICAL BOLD CAPITAL DIGAMMA
+1F110 ; FC_NFKC; 0028 0061 0029 # So PARENTHESIZED LATIN CAPITAL LETTER A
+1F111 ; FC_NFKC; 0028 0062 0029 # So PARENTHESIZED LATIN CAPITAL LETTER B
+1F112 ; FC_NFKC; 0028 0063 0029 # So PARENTHESIZED LATIN CAPITAL LETTER C
+1F113 ; FC_NFKC; 0028 0064 0029 # So PARENTHESIZED LATIN CAPITAL LETTER D
+1F114 ; FC_NFKC; 0028 0065 0029 # So PARENTHESIZED LATIN CAPITAL LETTER E
+1F115 ; FC_NFKC; 0028 0066 0029 # So PARENTHESIZED LATIN CAPITAL LETTER F
+1F116 ; FC_NFKC; 0028 0067 0029 # So PARENTHESIZED LATIN CAPITAL LETTER G
+1F117 ; FC_NFKC; 0028 0068 0029 # So PARENTHESIZED LATIN CAPITAL LETTER H
+1F118 ; FC_NFKC; 0028 0069 0029 # So PARENTHESIZED LATIN CAPITAL LETTER I
+1F119 ; FC_NFKC; 0028 006A 0029 # So PARENTHESIZED LATIN CAPITAL LETTER J
+1F11A ; FC_NFKC; 0028 006B 0029 # So PARENTHESIZED LATIN CAPITAL LETTER K
+1F11B ; FC_NFKC; 0028 006C 0029 # So PARENTHESIZED LATIN CAPITAL LETTER L
+1F11C ; FC_NFKC; 0028 006D 0029 # So PARENTHESIZED LATIN CAPITAL LETTER M
+1F11D ; FC_NFKC; 0028 006E 0029 # So PARENTHESIZED LATIN CAPITAL LETTER N
+1F11E ; FC_NFKC; 0028 006F 0029 # So PARENTHESIZED LATIN CAPITAL LETTER O
+1F11F ; FC_NFKC; 0028 0070 0029 # So PARENTHESIZED LATIN CAPITAL LETTER P
+1F120 ; FC_NFKC; 0028 0071 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Q
+1F121 ; FC_NFKC; 0028 0072 0029 # So PARENTHESIZED LATIN CAPITAL LETTER R
+1F122 ; FC_NFKC; 0028 0073 0029 # So PARENTHESIZED LATIN CAPITAL LETTER S
+1F123 ; FC_NFKC; 0028 0074 0029 # So PARENTHESIZED LATIN CAPITAL LETTER T
+1F124 ; FC_NFKC; 0028 0075 0029 # So PARENTHESIZED LATIN CAPITAL LETTER U
+1F125 ; FC_NFKC; 0028 0076 0029 # So PARENTHESIZED LATIN CAPITAL LETTER V
+1F126 ; FC_NFKC; 0028 0077 0029 # So PARENTHESIZED LATIN CAPITAL LETTER W
+1F127 ; FC_NFKC; 0028 0078 0029 # So PARENTHESIZED LATIN CAPITAL LETTER X
+1F128 ; FC_NFKC; 0028 0079 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Y
+1F129 ; FC_NFKC; 0028 007A 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Z
+1F12A ; FC_NFKC; 3014 0073 3015 # So TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
+1F12B ; FC_NFKC; 0063 # So CIRCLED ITALIC LATIN CAPITAL LETTER C
+1F12C ; FC_NFKC; 0072 # So CIRCLED ITALIC LATIN CAPITAL LETTER R
+1F12D ; FC_NFKC; 0063 0064 # So CIRCLED CD
+1F12E ; FC_NFKC; 0077 007A # So CIRCLED WZ
+1F130 ; FC_NFKC; 0061 # So SQUARED LATIN CAPITAL LETTER A
+1F131 ; FC_NFKC; 0062 # So SQUARED LATIN CAPITAL LETTER B
+1F132 ; FC_NFKC; 0063 # So SQUARED LATIN CAPITAL LETTER C
+1F133 ; FC_NFKC; 0064 # So SQUARED LATIN CAPITAL LETTER D
+1F134 ; FC_NFKC; 0065 # So SQUARED LATIN CAPITAL LETTER E
+1F135 ; FC_NFKC; 0066 # So SQUARED LATIN CAPITAL LETTER F
+1F136 ; FC_NFKC; 0067 # So SQUARED LATIN CAPITAL LETTER G
+1F137 ; FC_NFKC; 0068 # So SQUARED LATIN CAPITAL LETTER H
+1F138 ; FC_NFKC; 0069 # So SQUARED LATIN CAPITAL LETTER I
+1F139 ; FC_NFKC; 006A # So SQUARED LATIN CAPITAL LETTER J
+1F13A ; FC_NFKC; 006B # So SQUARED LATIN CAPITAL LETTER K
+1F13B ; FC_NFKC; 006C # So SQUARED LATIN CAPITAL LETTER L
+1F13C ; FC_NFKC; 006D # So SQUARED LATIN CAPITAL LETTER M
+1F13D ; FC_NFKC; 006E # So SQUARED LATIN CAPITAL LETTER N
+1F13E ; FC_NFKC; 006F # So SQUARED LATIN CAPITAL LETTER O
+1F13F ; FC_NFKC; 0070 # So SQUARED LATIN CAPITAL LETTER P
+1F140 ; FC_NFKC; 0071 # So SQUARED LATIN CAPITAL LETTER Q
+1F141 ; FC_NFKC; 0072 # So SQUARED LATIN CAPITAL LETTER R
+1F142 ; FC_NFKC; 0073 # So SQUARED LATIN CAPITAL LETTER S
+1F143 ; FC_NFKC; 0074 # So SQUARED LATIN CAPITAL LETTER T
+1F144 ; FC_NFKC; 0075 # So SQUARED LATIN CAPITAL LETTER U
+1F145 ; FC_NFKC; 0076 # So SQUARED LATIN CAPITAL LETTER V
+1F146 ; FC_NFKC; 0077 # So SQUARED LATIN CAPITAL LETTER W
+1F147 ; FC_NFKC; 0078 # So SQUARED LATIN CAPITAL LETTER X
+1F148 ; FC_NFKC; 0079 # So SQUARED LATIN CAPITAL LETTER Y
+1F149 ; FC_NFKC; 007A # So SQUARED LATIN CAPITAL LETTER Z
+1F14A ; FC_NFKC; 0068 0076 # So SQUARED HV
+1F14B ; FC_NFKC; 006D 0076 # So SQUARED MV
+1F14C ; FC_NFKC; 0073 0064 # So SQUARED SD
+1F14D ; FC_NFKC; 0073 0073 # So SQUARED SS
+1F14E ; FC_NFKC; 0070 0070 0076 # So SQUARED PPV
+1F14F ; FC_NFKC; 0077 0063 # So SQUARED WC
+1F16A ; FC_NFKC; 006D 0063 # So RAISED MC SIGN
+1F16B ; FC_NFKC; 006D 0064 # So RAISED MD SIGN
+1F16C ; FC_NFKC; 006D 0072 # So RAISED MR SIGN
+1F190 ; FC_NFKC; 0064 006A # So SQUARE DJ
+
+# Total code points: 637
+
+# ================================================
+
+# Derived Property: Full_Composition_Exclusion
+# Generated from: Composition Exclusions + Singletons + Non-Starter Decompositions
+
+0340..0341 ; Full_Composition_Exclusion # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344 ; Full_Composition_Exclusion # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374 ; Full_Composition_Exclusion # Lm GREEK NUMERAL SIGN
+037E ; Full_Composition_Exclusion # Po GREEK QUESTION MARK
+0387 ; Full_Composition_Exclusion # Po GREEK ANO TELEIA
+0958..095F ; Full_Composition_Exclusion # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD ; Full_Composition_Exclusion # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Full_Composition_Exclusion # Lo BENGALI LETTER YYA
+0A33 ; Full_Composition_Exclusion # Lo GURMUKHI LETTER LLA
+0A36 ; Full_Composition_Exclusion # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Full_Composition_Exclusion # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Full_Composition_Exclusion # Lo GURMUKHI LETTER FA
+0B5C..0B5D ; Full_Composition_Exclusion # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0F43 ; Full_Composition_Exclusion # Lo TIBETAN LETTER GHA
+0F4D ; Full_Composition_Exclusion # Lo TIBETAN LETTER DDHA
+0F52 ; Full_Composition_Exclusion # Lo TIBETAN LETTER DHA
+0F57 ; Full_Composition_Exclusion # Lo TIBETAN LETTER BHA
+0F5C ; Full_Composition_Exclusion # Lo TIBETAN LETTER DZHA
+0F69 ; Full_Composition_Exclusion # Lo TIBETAN LETTER KSSA
+0F73 ; Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN II
+0F75..0F76 ; Full_Composition_Exclusion # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78 ; Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F81 ; Full_Composition_Exclusion # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Full_Composition_Exclusion # Mn TIBETAN SUBJOINED LETTER KSSA
+1F71 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER ALPHA WITH OXIA
+1F73 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER EPSILON WITH OXIA
+1F75 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER ETA WITH OXIA
+1F77 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH OXIA
+1F79 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER OMICRON WITH OXIA
+1F7B ; Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH OXIA
+1F7D ; Full_Composition_Exclusion # L& GREEK SMALL LETTER OMEGA WITH OXIA
+1FBB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBE ; Full_Composition_Exclusion # L& GREEK PROSGEGRAMMENI
+1FC9 ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER ETA WITH OXIA
+1FD3 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FDB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE3 ; Full_Composition_Exclusion # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FEB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEE..1FEF ; Full_Composition_Exclusion # Sk [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA
+1FF9 ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFB ; Full_Composition_Exclusion # L& GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFD ; Full_Composition_Exclusion # Sk GREEK OXIA
+2000..2001 ; Full_Composition_Exclusion # Zs [2] EN QUAD..EM QUAD
+2126 ; Full_Composition_Exclusion # L& OHM SIGN
+212A..212B ; Full_Composition_Exclusion # L& [2] KELVIN SIGN..ANGSTROM SIGN
+2329 ; Full_Composition_Exclusion # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Full_Composition_Exclusion # Pe RIGHT-POINTING ANGLE BRACKET
+2ADC ; Full_Composition_Exclusion # Sm FORKING
+F900..FA0D ; Full_Composition_Exclusion # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; Full_Composition_Exclusion # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; Full_Composition_Exclusion # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; Full_Composition_Exclusion # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA6D ; Full_Composition_Exclusion # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; Full_Composition_Exclusion # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB1D ; Full_Composition_Exclusion # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; Full_Composition_Exclusion # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; Full_Composition_Exclusion # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Full_Composition_Exclusion # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Full_Composition_Exclusion # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Full_Composition_Exclusion # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Full_Composition_Exclusion # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4E ; Full_Composition_Exclusion # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE
+1D15E..1D164 ; Full_Composition_Exclusion # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; Full_Composition_Exclusion # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+2F800..2FA1D ; Full_Composition_Exclusion # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 1120
+
+# ================================================
+
+# Property: NFD_Quick_Check
+
+# All code points not explicitly listed for NFD_Quick_Check
+# have the value Yes (Y).
+
+# @missing: 0000..10FFFF; NFD_QC; Yes
+
+# ================================================
+
+# NFD_Quick_Check=No
+
+00C0..00C5 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+00C7..00CF ; NFD_QC; N # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1..00D6 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D9..00DD ; NFD_QC; N # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+00E0..00E5 ; NFD_QC; N # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE
+00E7..00EF ; NFD_QC; N # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS
+00F1..00F6 ; NFD_QC; N # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS
+00F9..00FD ; NFD_QC; N # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE
+00FF..010F ; NFD_QC; N # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON
+0112..0125 ; NFD_QC; N # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX
+0128..0130 ; NFD_QC; N # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+0134..0137 ; NFD_QC; N # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
+0139..013E ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
+0143..0148 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N WITH CARON
+014C..0151 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0154..0165 ; NFD_QC; N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+0168..017E ; NFD_QC; N # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON
+01A0..01A1 ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0 ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01CD..01DC ; NFD_QC; N # L& [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3 ; NFD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F0 ; NFD_QC; N # L& [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F4..01F5 ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE
+01F8..021B ; NFD_QC; N # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F ; NFD_QC; N # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233 ; NFD_QC; N # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+0340..0341 ; NFD_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344 ; NFD_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374 ; NFD_QC; N # Lm GREEK NUMERAL SIGN
+037E ; NFD_QC; N # Po GREEK QUESTION MARK
+0385 ; NFD_QC; N # Sk GREEK DIALYTIKA TONOS
+0386 ; NFD_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; NFD_QC; N # Po GREEK ANO TELEIA
+0388..038A ; NFD_QC; N # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; NFD_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..0390 ; NFD_QC; N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AA..03B0 ; NFD_QC; N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CA..03CE ; NFD_QC; N # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D3..03D4 ; NFD_QC; N # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+0400..0401 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO
+0403 ; NFD_QC; N # L& CYRILLIC CAPITAL LETTER GJE
+0407 ; NFD_QC; N # L& CYRILLIC CAPITAL LETTER YI
+040C..040E ; NFD_QC; N # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U
+0419 ; NFD_QC; N # L& CYRILLIC CAPITAL LETTER SHORT I
+0439 ; NFD_QC; N # L& CYRILLIC SMALL LETTER SHORT I
+0450..0451 ; NFD_QC; N # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO
+0453 ; NFD_QC; N # L& CYRILLIC SMALL LETTER GJE
+0457 ; NFD_QC; N # L& CYRILLIC SMALL LETTER YI
+045C..045E ; NFD_QC; N # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U
+0476..0477 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+04C1..04C2 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE
+04D0..04D3 ; NFD_QC; N # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D6..04D7 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE
+04DA..04DF ; NFD_QC; N # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E2..04E7 ; NFD_QC; N # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS
+04EA..04F5 ; NFD_QC; N # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8..04F9 ; NFD_QC; N # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0622..0626 ; NFD_QC; N # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE
+06C0 ; NFD_QC; N # Lo ARABIC LETTER HEH WITH YEH ABOVE
+06C2 ; NFD_QC; N # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06D3 ; NFD_QC; N # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+0929 ; NFD_QC; N # Lo DEVANAGARI LETTER NNNA
+0931 ; NFD_QC; N # Lo DEVANAGARI LETTER RRA
+0934 ; NFD_QC; N # Lo DEVANAGARI LETTER LLLA
+0958..095F ; NFD_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09CB..09CC ; NFD_QC; N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09DC..09DD ; NFD_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; NFD_QC; N # Lo BENGALI LETTER YYA
+0A33 ; NFD_QC; N # Lo GURMUKHI LETTER LLA
+0A36 ; NFD_QC; N # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; NFD_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; NFD_QC; N # Lo GURMUKHI LETTER FA
+0B48 ; NFD_QC; N # Mc ORIYA VOWEL SIGN AI
+0B4B..0B4C ; NFD_QC; N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D ; NFD_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B94 ; NFD_QC; N # Lo TAMIL LETTER AU
+0BCA..0BCC ; NFD_QC; N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0C48 ; NFD_QC; N # Mn TELUGU VOWEL SIGN AI
+0CC0 ; NFD_QC; N # Mc KANNADA VOWEL SIGN II
+0CC7..0CC8 ; NFD_QC; N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; NFD_QC; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0D4A..0D4C ; NFD_QC; N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0DDA ; NFD_QC; N # Mc SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDC..0DDE ; NFD_QC; N # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0F43 ; NFD_QC; N # Lo TIBETAN LETTER GHA
+0F4D ; NFD_QC; N # Lo TIBETAN LETTER DDHA
+0F52 ; NFD_QC; N # Lo TIBETAN LETTER DHA
+0F57 ; NFD_QC; N # Lo TIBETAN LETTER BHA
+0F5C ; NFD_QC; N # Lo TIBETAN LETTER DZHA
+0F69 ; NFD_QC; N # Lo TIBETAN LETTER KSSA
+0F73 ; NFD_QC; N # Mn TIBETAN VOWEL SIGN II
+0F75..0F76 ; NFD_QC; N # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78 ; NFD_QC; N # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F81 ; NFD_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; NFD_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA
+1026 ; NFD_QC; N # Lo MYANMAR LETTER UU
+1B06 ; NFD_QC; N # Lo BALINESE LETTER AKARA TEDUNG
+1B08 ; NFD_QC; N # Lo BALINESE LETTER IKARA TEDUNG
+1B0A ; NFD_QC; N # Lo BALINESE LETTER UKARA TEDUNG
+1B0C ; NFD_QC; N # Lo BALINESE LETTER RA REPA TEDUNG
+1B0E ; NFD_QC; N # Lo BALINESE LETTER LA LENGA TEDUNG
+1B12 ; NFD_QC; N # Lo BALINESE LETTER OKARA TEDUNG
+1B3B ; NFD_QC; N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D ; NFD_QC; N # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B40..1B41 ; NFD_QC; N # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43 ; NFD_QC; N # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+1E00..1E99 ; NFD_QC; N # L& [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE
+1E9B ; NFD_QC; N # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; NFD_QC; N # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15 ; NFD_QC; N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; NFD_QC; N # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; NFD_QC; N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; NFD_QC; N # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; NFD_QC; N # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; NFD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; NFD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; NFD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; NFD_QC; N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; NFD_QC; N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; NFD_QC; N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBE ; NFD_QC; N # L& GREEK PROSGEGRAMMENI
+1FC1 ; NFD_QC; N # Sk GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; NFD_QC; N # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; NFD_QC; N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; NFD_QC; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; NFD_QC; N # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; NFD_QC; N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; NFD_QC; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; NFD_QC; N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; NFD_QC; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; NFD_QC; N # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; NFD_QC; N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD ; NFD_QC; N # Sk GREEK OXIA
+2000..2001 ; NFD_QC; N # Zs [2] EN QUAD..EM QUAD
+2126 ; NFD_QC; N # L& OHM SIGN
+212A..212B ; NFD_QC; N # L& [2] KELVIN SIGN..ANGSTROM SIGN
+219A..219B ; NFD_QC; N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+21AE ; NFD_QC; N # Sm LEFT RIGHT ARROW WITH STROKE
+21CD ; NFD_QC; N # So LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; NFD_QC; N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+2204 ; NFD_QC; N # Sm THERE DOES NOT EXIST
+2209 ; NFD_QC; N # Sm NOT AN ELEMENT OF
+220C ; NFD_QC; N # Sm DOES NOT CONTAIN AS MEMBER
+2224 ; NFD_QC; N # Sm DOES NOT DIVIDE
+2226 ; NFD_QC; N # Sm NOT PARALLEL TO
+2241 ; NFD_QC; N # Sm NOT TILDE
+2244 ; NFD_QC; N # Sm NOT ASYMPTOTICALLY EQUAL TO
+2247 ; NFD_QC; N # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2249 ; NFD_QC; N # Sm NOT ALMOST EQUAL TO
+2260 ; NFD_QC; N # Sm NOT EQUAL TO
+2262 ; NFD_QC; N # Sm NOT IDENTICAL TO
+226D..2271 ; NFD_QC; N # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO
+2274..2275 ; NFD_QC; N # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO
+2278..2279 ; NFD_QC; N # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN
+2280..2281 ; NFD_QC; N # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED
+2284..2285 ; NFD_QC; N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2288..2289 ; NFD_QC; N # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO
+22AC..22AF ; NFD_QC; N # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22E0..22E3 ; NFD_QC; N # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO
+22EA..22ED ; NFD_QC; N # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+2329 ; NFD_QC; N # Ps LEFT-POINTING ANGLE BRACKET
+232A ; NFD_QC; N # Pe RIGHT-POINTING ANGLE BRACKET
+2ADC ; NFD_QC; N # Sm FORKING
+304C ; NFD_QC; N # Lo HIRAGANA LETTER GA
+304E ; NFD_QC; N # Lo HIRAGANA LETTER GI
+3050 ; NFD_QC; N # Lo HIRAGANA LETTER GU
+3052 ; NFD_QC; N # Lo HIRAGANA LETTER GE
+3054 ; NFD_QC; N # Lo HIRAGANA LETTER GO
+3056 ; NFD_QC; N # Lo HIRAGANA LETTER ZA
+3058 ; NFD_QC; N # Lo HIRAGANA LETTER ZI
+305A ; NFD_QC; N # Lo HIRAGANA LETTER ZU
+305C ; NFD_QC; N # Lo HIRAGANA LETTER ZE
+305E ; NFD_QC; N # Lo HIRAGANA LETTER ZO
+3060 ; NFD_QC; N # Lo HIRAGANA LETTER DA
+3062 ; NFD_QC; N # Lo HIRAGANA LETTER DI
+3065 ; NFD_QC; N # Lo HIRAGANA LETTER DU
+3067 ; NFD_QC; N # Lo HIRAGANA LETTER DE
+3069 ; NFD_QC; N # Lo HIRAGANA LETTER DO
+3070..3071 ; NFD_QC; N # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA
+3073..3074 ; NFD_QC; N # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI
+3076..3077 ; NFD_QC; N # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU
+3079..307A ; NFD_QC; N # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE
+307C..307D ; NFD_QC; N # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO
+3094 ; NFD_QC; N # Lo HIRAGANA LETTER VU
+309E ; NFD_QC; N # Lm HIRAGANA VOICED ITERATION MARK
+30AC ; NFD_QC; N # Lo KATAKANA LETTER GA
+30AE ; NFD_QC; N # Lo KATAKANA LETTER GI
+30B0 ; NFD_QC; N # Lo KATAKANA LETTER GU
+30B2 ; NFD_QC; N # Lo KATAKANA LETTER GE
+30B4 ; NFD_QC; N # Lo KATAKANA LETTER GO
+30B6 ; NFD_QC; N # Lo KATAKANA LETTER ZA
+30B8 ; NFD_QC; N # Lo KATAKANA LETTER ZI
+30BA ; NFD_QC; N # Lo KATAKANA LETTER ZU
+30BC ; NFD_QC; N # Lo KATAKANA LETTER ZE
+30BE ; NFD_QC; N # Lo KATAKANA LETTER ZO
+30C0 ; NFD_QC; N # Lo KATAKANA LETTER DA
+30C2 ; NFD_QC; N # Lo KATAKANA LETTER DI
+30C5 ; NFD_QC; N # Lo KATAKANA LETTER DU
+30C7 ; NFD_QC; N # Lo KATAKANA LETTER DE
+30C9 ; NFD_QC; N # Lo KATAKANA LETTER DO
+30D0..30D1 ; NFD_QC; N # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA
+30D3..30D4 ; NFD_QC; N # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI
+30D6..30D7 ; NFD_QC; N # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU
+30D9..30DA ; NFD_QC; N # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE
+30DC..30DD ; NFD_QC; N # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO
+30F4 ; NFD_QC; N # Lo KATAKANA LETTER VU
+30F7..30FA ; NFD_QC; N # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO
+30FE ; NFD_QC; N # Lm KATAKANA VOICED ITERATION MARK
+AC00..D7A3 ; NFD_QC; N # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+F900..FA0D ; NFD_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; NFD_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; NFD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; NFD_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA6D ; NFD_QC; N # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; NFD_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB1D ; NFD_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; NFD_QC; N # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; NFD_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; NFD_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; NFD_QC; N # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; NFD_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; NFD_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4E ; NFD_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE
+1109A ; NFD_QC; N # Lo KAITHI LETTER DDDHA
+1109C ; NFD_QC; N # Lo KAITHI LETTER RHA
+110AB ; NFD_QC; N # Lo KAITHI LETTER VA
+1112E..1112F ; NFD_QC; N # Mn [2] CHAKMA VOWEL SIGN O..CHAKMA VOWEL SIGN AU
+1134B..1134C ; NFD_QC; N # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+114BB..114BC ; NFD_QC; N # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
+114BE ; NFD_QC; N # Mc TIRHUTA VOWEL SIGN AU
+115BA..115BB ; NFD_QC; N # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; NFD_QC; N # Mc DIVES AKURU VOWEL SIGN O
+1D15E..1D164 ; NFD_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; NFD_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+2F800..2FA1D ; NFD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 13233
+
+# ================================================
+
+# Property: NFC_Quick_Check
+
+# All code points not explicitly listed for NFC_Quick_Check
+# have the value Yes (Y).
+
+# @missing: 0000..10FFFF; NFC_QC; Yes
+
+# ================================================
+
+# NFC_Quick_Check=No
+
+0340..0341 ; NFC_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344 ; NFC_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374 ; NFC_QC; N # Lm GREEK NUMERAL SIGN
+037E ; NFC_QC; N # Po GREEK QUESTION MARK
+0387 ; NFC_QC; N # Po GREEK ANO TELEIA
+0958..095F ; NFC_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD ; NFC_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; NFC_QC; N # Lo BENGALI LETTER YYA
+0A33 ; NFC_QC; N # Lo GURMUKHI LETTER LLA
+0A36 ; NFC_QC; N # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; NFC_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; NFC_QC; N # Lo GURMUKHI LETTER FA
+0B5C..0B5D ; NFC_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0F43 ; NFC_QC; N # Lo TIBETAN LETTER GHA
+0F4D ; NFC_QC; N # Lo TIBETAN LETTER DDHA
+0F52 ; NFC_QC; N # Lo TIBETAN LETTER DHA
+0F57 ; NFC_QC; N # Lo TIBETAN LETTER BHA
+0F5C ; NFC_QC; N # Lo TIBETAN LETTER DZHA
+0F69 ; NFC_QC; N # Lo TIBETAN LETTER KSSA
+0F73 ; NFC_QC; N # Mn TIBETAN VOWEL SIGN II
+0F75..0F76 ; NFC_QC; N # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78 ; NFC_QC; N # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F81 ; NFC_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; NFC_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA
+1F71 ; NFC_QC; N # L& GREEK SMALL LETTER ALPHA WITH OXIA
+1F73 ; NFC_QC; N # L& GREEK SMALL LETTER EPSILON WITH OXIA
+1F75 ; NFC_QC; N # L& GREEK SMALL LETTER ETA WITH OXIA
+1F77 ; NFC_QC; N # L& GREEK SMALL LETTER IOTA WITH OXIA
+1F79 ; NFC_QC; N # L& GREEK SMALL LETTER OMICRON WITH OXIA
+1F7B ; NFC_QC; N # L& GREEK SMALL LETTER UPSILON WITH OXIA
+1F7D ; NFC_QC; N # L& GREEK SMALL LETTER OMEGA WITH OXIA
+1FBB ; NFC_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBE ; NFC_QC; N # L& GREEK PROSGEGRAMMENI
+1FC9 ; NFC_QC; N # L& GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCB ; NFC_QC; N # L& GREEK CAPITAL LETTER ETA WITH OXIA
+1FD3 ; NFC_QC; N # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FDB ; NFC_QC; N # L& GREEK CAPITAL LETTER IOTA WITH OXIA
+1FE3 ; NFC_QC; N # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FEB ; NFC_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEE..1FEF ; NFC_QC; N # Sk [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA
+1FF9 ; NFC_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFB ; NFC_QC; N # L& GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFD ; NFC_QC; N # Sk GREEK OXIA
+2000..2001 ; NFC_QC; N # Zs [2] EN QUAD..EM QUAD
+2126 ; NFC_QC; N # L& OHM SIGN
+212A..212B ; NFC_QC; N # L& [2] KELVIN SIGN..ANGSTROM SIGN
+2329 ; NFC_QC; N # Ps LEFT-POINTING ANGLE BRACKET
+232A ; NFC_QC; N # Pe RIGHT-POINTING ANGLE BRACKET
+2ADC ; NFC_QC; N # Sm FORKING
+F900..FA0D ; NFC_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; NFC_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; NFC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; NFC_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA6D ; NFC_QC; N # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; NFC_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB1D ; NFC_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; NFC_QC; N # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; NFC_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; NFC_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; NFC_QC; N # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; NFC_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; NFC_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4E ; NFC_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE
+1D15E..1D164 ; NFC_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; NFC_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+2F800..2FA1D ; NFC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 1120
+
+# ================================================
+
+# NFC_Quick_Check=Maybe
+
+0300..0304 ; NFC_QC; M # Mn [5] COMBINING GRAVE ACCENT..COMBINING MACRON
+0306..030C ; NFC_QC; M # Mn [7] COMBINING BREVE..COMBINING CARON
+030F ; NFC_QC; M # Mn COMBINING DOUBLE GRAVE ACCENT
+0311 ; NFC_QC; M # Mn COMBINING INVERTED BREVE
+0313..0314 ; NFC_QC; M # Mn [2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE
+031B ; NFC_QC; M # Mn COMBINING HORN
+0323..0328 ; NFC_QC; M # Mn [6] COMBINING DOT BELOW..COMBINING OGONEK
+032D..032E ; NFC_QC; M # Mn [2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW
+0330..0331 ; NFC_QC; M # Mn [2] COMBINING TILDE BELOW..COMBINING MACRON BELOW
+0338 ; NFC_QC; M # Mn COMBINING LONG SOLIDUS OVERLAY
+0342 ; NFC_QC; M # Mn COMBINING GREEK PERISPOMENI
+0345 ; NFC_QC; M # Mn COMBINING GREEK YPOGEGRAMMENI
+0653..0655 ; NFC_QC; M # Mn [3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW
+093C ; NFC_QC; M # Mn DEVANAGARI SIGN NUKTA
+09BE ; NFC_QC; M # Mc BENGALI VOWEL SIGN AA
+09D7 ; NFC_QC; M # Mc BENGALI AU LENGTH MARK
+0B3E ; NFC_QC; M # Mc ORIYA VOWEL SIGN AA
+0B56 ; NFC_QC; M # Mn ORIYA AI LENGTH MARK
+0B57 ; NFC_QC; M # Mc ORIYA AU LENGTH MARK
+0BBE ; NFC_QC; M # Mc TAMIL VOWEL SIGN AA
+0BD7 ; NFC_QC; M # Mc TAMIL AU LENGTH MARK
+0C56 ; NFC_QC; M # Mn TELUGU AI LENGTH MARK
+0CC2 ; NFC_QC; M # Mc KANNADA VOWEL SIGN UU
+0CD5..0CD6 ; NFC_QC; M # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0D3E ; NFC_QC; M # Mc MALAYALAM VOWEL SIGN AA
+0D57 ; NFC_QC; M # Mc MALAYALAM AU LENGTH MARK
+0DCA ; NFC_QC; M # Mn SINHALA SIGN AL-LAKUNA
+0DCF ; NFC_QC; M # Mc SINHALA VOWEL SIGN AELA-PILLA
+0DDF ; NFC_QC; M # Mc SINHALA VOWEL SIGN GAYANUKITTA
+102E ; NFC_QC; M # Mn MYANMAR VOWEL SIGN II
+1161..1175 ; NFC_QC; M # Lo [21] HANGUL JUNGSEONG A..HANGUL JUNGSEONG I
+11A8..11C2 ; NFC_QC; M # Lo [27] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG HIEUH
+1B35 ; NFC_QC; M # Mc BALINESE VOWEL SIGN TEDUNG
+3099..309A ; NFC_QC; M # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+110BA ; NFC_QC; M # Mn KAITHI SIGN NUKTA
+11127 ; NFC_QC; M # Mn CHAKMA VOWEL SIGN A
+1133E ; NFC_QC; M # Mc GRANTHA VOWEL SIGN AA
+11357 ; NFC_QC; M # Mc GRANTHA AU LENGTH MARK
+114B0 ; NFC_QC; M # Mc TIRHUTA VOWEL SIGN AA
+114BA ; NFC_QC; M # Mn TIRHUTA VOWEL SIGN SHORT E
+114BD ; NFC_QC; M # Mc TIRHUTA VOWEL SIGN SHORT O
+115AF ; NFC_QC; M # Mc SIDDHAM VOWEL SIGN AA
+11930 ; NFC_QC; M # Mc DIVES AKURU VOWEL SIGN AA
+
+# Total code points: 111
+
+# ================================================
+
+# Property: NFKD_Quick_Check
+
+# All code points not explicitly listed for NFKD_Quick_Check
+# have the value Yes (Y).
+
+# @missing: 0000..10FFFF; NFKD_QC; Yes
+
+# ================================================
+
+# NFKD_Quick_Check=No
+
+00A0 ; NFKD_QC; N # Zs NO-BREAK SPACE
+00A8 ; NFKD_QC; N # Sk DIAERESIS
+00AA ; NFKD_QC; N # Lo FEMININE ORDINAL INDICATOR
+00AF ; NFKD_QC; N # Sk MACRON
+00B2..00B3 ; NFKD_QC; N # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4 ; NFKD_QC; N # Sk ACUTE ACCENT
+00B5 ; NFKD_QC; N # L& MICRO SIGN
+00B8 ; NFKD_QC; N # Sk CEDILLA
+00B9 ; NFKD_QC; N # No SUPERSCRIPT ONE
+00BA ; NFKD_QC; N # Lo MASCULINE ORDINAL INDICATOR
+00BC..00BE ; NFKD_QC; N # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00C0..00C5 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+00C7..00CF ; NFKD_QC; N # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1..00D6 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D9..00DD ; NFKD_QC; N # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+00E0..00E5 ; NFKD_QC; N # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE
+00E7..00EF ; NFKD_QC; N # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS
+00F1..00F6 ; NFKD_QC; N # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS
+00F9..00FD ; NFKD_QC; N # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE
+00FF..010F ; NFKD_QC; N # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON
+0112..0125 ; NFKD_QC; N # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX
+0128..0130 ; NFKD_QC; N # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132..0137 ; NFKD_QC; N # L& [6] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LETTER K WITH CEDILLA
+0139..0140 ; NFKD_QC; N # L& [8] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH MIDDLE DOT
+0143..0149 ; NFKD_QC; N # L& [7] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014C..0151 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0154..0165 ; NFKD_QC; N # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+0168..017F ; NFKD_QC; N # L& [24] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER LONG S
+01A0..01A1 ; NFKD_QC; N # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0 ; NFKD_QC; N # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01C4..01DC ; NFKD_QC; N # L& [25] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3 ; NFKD_QC; N # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F5 ; NFKD_QC; N # L& [16] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER G WITH ACUTE
+01F8..021B ; NFKD_QC; N # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F ; NFKD_QC; N # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233 ; NFKD_QC; N # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+02B0..02B8 ; NFKD_QC; N # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02D8..02DD ; NFKD_QC; N # Sk [6] BREVE..DOUBLE ACUTE ACCENT
+02E0..02E4 ; NFKD_QC; N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0340..0341 ; NFKD_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344 ; NFKD_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374 ; NFKD_QC; N # Lm GREEK NUMERAL SIGN
+037A ; NFKD_QC; N # Lm GREEK YPOGEGRAMMENI
+037E ; NFKD_QC; N # Po GREEK QUESTION MARK
+0384..0385 ; NFKD_QC; N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386 ; NFKD_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; NFKD_QC; N # Po GREEK ANO TELEIA
+0388..038A ; NFKD_QC; N # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; NFKD_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..0390 ; NFKD_QC; N # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AA..03B0 ; NFKD_QC; N # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CA..03CE ; NFKD_QC; N # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D0..03D6 ; NFKD_QC; N # L& [7] GREEK BETA SYMBOL..GREEK PI SYMBOL
+03F0..03F2 ; NFKD_QC; N # L& [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL
+03F4..03F5 ; NFKD_QC; N # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F9 ; NFKD_QC; N # L& GREEK CAPITAL LUNATE SIGMA SYMBOL
+0400..0401 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO
+0403 ; NFKD_QC; N # L& CYRILLIC CAPITAL LETTER GJE
+0407 ; NFKD_QC; N # L& CYRILLIC CAPITAL LETTER YI
+040C..040E ; NFKD_QC; N # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U
+0419 ; NFKD_QC; N # L& CYRILLIC CAPITAL LETTER SHORT I
+0439 ; NFKD_QC; N # L& CYRILLIC SMALL LETTER SHORT I
+0450..0451 ; NFKD_QC; N # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO
+0453 ; NFKD_QC; N # L& CYRILLIC SMALL LETTER GJE
+0457 ; NFKD_QC; N # L& CYRILLIC SMALL LETTER YI
+045C..045E ; NFKD_QC; N # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U
+0476..0477 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+04C1..04C2 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE
+04D0..04D3 ; NFKD_QC; N # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D6..04D7 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE
+04DA..04DF ; NFKD_QC; N # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E2..04E7 ; NFKD_QC; N # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS
+04EA..04F5 ; NFKD_QC; N # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8..04F9 ; NFKD_QC; N # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0587 ; NFKD_QC; N # L& ARMENIAN SMALL LIGATURE ECH YIWN
+0622..0626 ; NFKD_QC; N # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE
+0675..0678 ; NFKD_QC; N # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+06C0 ; NFKD_QC; N # Lo ARABIC LETTER HEH WITH YEH ABOVE
+06C2 ; NFKD_QC; N # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06D3 ; NFKD_QC; N # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+0929 ; NFKD_QC; N # Lo DEVANAGARI LETTER NNNA
+0931 ; NFKD_QC; N # Lo DEVANAGARI LETTER RRA
+0934 ; NFKD_QC; N # Lo DEVANAGARI LETTER LLLA
+0958..095F ; NFKD_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09CB..09CC ; NFKD_QC; N # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09DC..09DD ; NFKD_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; NFKD_QC; N # Lo BENGALI LETTER YYA
+0A33 ; NFKD_QC; N # Lo GURMUKHI LETTER LLA
+0A36 ; NFKD_QC; N # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; NFKD_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; NFKD_QC; N # Lo GURMUKHI LETTER FA
+0B48 ; NFKD_QC; N # Mc ORIYA VOWEL SIGN AI
+0B4B..0B4C ; NFKD_QC; N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D ; NFKD_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B94 ; NFKD_QC; N # Lo TAMIL LETTER AU
+0BCA..0BCC ; NFKD_QC; N # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0C48 ; NFKD_QC; N # Mn TELUGU VOWEL SIGN AI
+0CC0 ; NFKD_QC; N # Mc KANNADA VOWEL SIGN II
+0CC7..0CC8 ; NFKD_QC; N # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; NFKD_QC; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0D4A..0D4C ; NFKD_QC; N # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0DDA ; NFKD_QC; N # Mc SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDC..0DDE ; NFKD_QC; N # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0E33 ; NFKD_QC; N # Lo THAI CHARACTER SARA AM
+0EB3 ; NFKD_QC; N # Lo LAO VOWEL SIGN AM
+0EDC..0EDD ; NFKD_QC; N # Lo [2] LAO HO NO..LAO HO MO
+0F0C ; NFKD_QC; N # Po TIBETAN MARK DELIMITER TSHEG BSTAR
+0F43 ; NFKD_QC; N # Lo TIBETAN LETTER GHA
+0F4D ; NFKD_QC; N # Lo TIBETAN LETTER DDHA
+0F52 ; NFKD_QC; N # Lo TIBETAN LETTER DHA
+0F57 ; NFKD_QC; N # Lo TIBETAN LETTER BHA
+0F5C ; NFKD_QC; N # Lo TIBETAN LETTER DZHA
+0F69 ; NFKD_QC; N # Lo TIBETAN LETTER KSSA
+0F73 ; NFKD_QC; N # Mn TIBETAN VOWEL SIGN II
+0F75..0F79 ; NFKD_QC; N # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; NFKD_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; NFKD_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA
+1026 ; NFKD_QC; N # Lo MYANMAR LETTER UU
+10FC ; NFKD_QC; N # Lm MODIFIER LETTER GEORGIAN NAR
+1B06 ; NFKD_QC; N # Lo BALINESE LETTER AKARA TEDUNG
+1B08 ; NFKD_QC; N # Lo BALINESE LETTER IKARA TEDUNG
+1B0A ; NFKD_QC; N # Lo BALINESE LETTER UKARA TEDUNG
+1B0C ; NFKD_QC; N # Lo BALINESE LETTER RA REPA TEDUNG
+1B0E ; NFKD_QC; N # Lo BALINESE LETTER LA LENGA TEDUNG
+1B12 ; NFKD_QC; N # Lo BALINESE LETTER OKARA TEDUNG
+1B3B ; NFKD_QC; N # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D ; NFKD_QC; N # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B40..1B41 ; NFKD_QC; N # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43 ; NFKD_QC; N # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+1D2C..1D2E ; NFKD_QC; N # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B
+1D30..1D3A ; NFKD_QC; N # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N
+1D3C..1D4D ; NFKD_QC; N # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G
+1D4F..1D6A ; NFKD_QC; N # Lm [28] MODIFIER LETTER SMALL K..GREEK SUBSCRIPT SMALL LETTER CHI
+1D78 ; NFKD_QC; N # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; NFKD_QC; N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00..1E9B ; NFKD_QC; N # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; NFKD_QC; N # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15 ; NFKD_QC; N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; NFKD_QC; N # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; NFKD_QC; N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; NFKD_QC; N # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; NFKD_QC; N # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; NFKD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; NFKD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; NFKD_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; NFKD_QC; N # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; NFKD_QC; N # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; NFKD_QC; N # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; NFKD_QC; N # Sk GREEK KORONIS
+1FBE ; NFKD_QC; N # L& GREEK PROSGEGRAMMENI
+1FBF..1FC1 ; NFKD_QC; N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; NFKD_QC; N # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; NFKD_QC; N # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; NFKD_QC; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; NFKD_QC; N # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; NFKD_QC; N # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; NFKD_QC; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; NFKD_QC; N # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; NFKD_QC; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; NFKD_QC; N # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; NFKD_QC; N # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE ; NFKD_QC; N # Sk [2] GREEK OXIA..GREEK DASIA
+2000..200A ; NFKD_QC; N # Zs [11] EN QUAD..HAIR SPACE
+2011 ; NFKD_QC; N # Pd NON-BREAKING HYPHEN
+2017 ; NFKD_QC; N # Po DOUBLE LOW LINE
+2024..2026 ; NFKD_QC; N # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
+202F ; NFKD_QC; N # Zs NARROW NO-BREAK SPACE
+2033..2034 ; NFKD_QC; N # Po [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037 ; NFKD_QC; N # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C ; NFKD_QC; N # Po DOUBLE EXCLAMATION MARK
+203E ; NFKD_QC; N # Po OVERLINE
+2047..2049 ; NFKD_QC; N # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2057 ; NFKD_QC; N # Po QUADRUPLE PRIME
+205F ; NFKD_QC; N # Zs MEDIUM MATHEMATICAL SPACE
+2070 ; NFKD_QC; N # No SUPERSCRIPT ZERO
+2071 ; NFKD_QC; N # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074..2079 ; NFKD_QC; N # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; NFKD_QC; N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; NFKD_QC; N # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; NFKD_QC; N # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F ; NFKD_QC; N # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080..2089 ; NFKD_QC; N # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; NFKD_QC; N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; NFKD_QC; N # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; NFKD_QC; N # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090..209C ; NFKD_QC; N # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20A8 ; NFKD_QC; N # Sc RUPEE SIGN
+2100..2101 ; NFKD_QC; N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102 ; NFKD_QC; N # L& DOUBLE-STRUCK CAPITAL C
+2103 ; NFKD_QC; N # So DEGREE CELSIUS
+2105..2106 ; NFKD_QC; N # So [2] CARE OF..CADA UNA
+2107 ; NFKD_QC; N # L& EULER CONSTANT
+2109 ; NFKD_QC; N # So DEGREE FAHRENHEIT
+210A..2113 ; NFKD_QC; N # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; NFKD_QC; N # L& DOUBLE-STRUCK CAPITAL N
+2116 ; NFKD_QC; N # So NUMERO SIGN
+2119..211D ; NFKD_QC; N # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2120..2122 ; NFKD_QC; N # So [3] SERVICE MARK..TRADE MARK SIGN
+2124 ; NFKD_QC; N # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; NFKD_QC; N # L& OHM SIGN
+2128 ; NFKD_QC; N # L& BLACK-LETTER CAPITAL Z
+212A..212D ; NFKD_QC; N # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2131 ; NFKD_QC; N # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; NFKD_QC; N # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; NFKD_QC; N # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; NFKD_QC; N # L& INFORMATION SOURCE
+213B ; NFKD_QC; N # So FACSIMILE SIGN
+213C..213F ; NFKD_QC; N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140 ; NFKD_QC; N # Sm DOUBLE-STRUCK N-ARY SUMMATION
+2145..2149 ; NFKD_QC; N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2150..215F ; NFKD_QC; N # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2160..217F ; NFKD_QC; N # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2189 ; NFKD_QC; N # No VULGAR FRACTION ZERO THIRDS
+219A..219B ; NFKD_QC; N # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+21AE ; NFKD_QC; N # Sm LEFT RIGHT ARROW WITH STROKE
+21CD ; NFKD_QC; N # So LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; NFKD_QC; N # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+2204 ; NFKD_QC; N # Sm THERE DOES NOT EXIST
+2209 ; NFKD_QC; N # Sm NOT AN ELEMENT OF
+220C ; NFKD_QC; N # Sm DOES NOT CONTAIN AS MEMBER
+2224 ; NFKD_QC; N # Sm DOES NOT DIVIDE
+2226 ; NFKD_QC; N # Sm NOT PARALLEL TO
+222C..222D ; NFKD_QC; N # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230 ; NFKD_QC; N # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2241 ; NFKD_QC; N # Sm NOT TILDE
+2244 ; NFKD_QC; N # Sm NOT ASYMPTOTICALLY EQUAL TO
+2247 ; NFKD_QC; N # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2249 ; NFKD_QC; N # Sm NOT ALMOST EQUAL TO
+2260 ; NFKD_QC; N # Sm NOT EQUAL TO
+2262 ; NFKD_QC; N # Sm NOT IDENTICAL TO
+226D..2271 ; NFKD_QC; N # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO
+2274..2275 ; NFKD_QC; N # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO
+2278..2279 ; NFKD_QC; N # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN
+2280..2281 ; NFKD_QC; N # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED
+2284..2285 ; NFKD_QC; N # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2288..2289 ; NFKD_QC; N # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO
+22AC..22AF ; NFKD_QC; N # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22E0..22E3 ; NFKD_QC; N # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO
+22EA..22ED ; NFKD_QC; N # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+2329 ; NFKD_QC; N # Ps LEFT-POINTING ANGLE BRACKET
+232A ; NFKD_QC; N # Pe RIGHT-POINTING ANGLE BRACKET
+2460..249B ; NFKD_QC; N # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9 ; NFKD_QC; N # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA ; NFKD_QC; N # No CIRCLED DIGIT ZERO
+2A0C ; NFKD_QC; N # Sm QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76 ; NFKD_QC; N # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2ADC ; NFKD_QC; N # Sm FORKING
+2C7C..2C7D ; NFKD_QC; N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2D6F ; NFKD_QC; N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2E9F ; NFKD_QC; N # So CJK RADICAL MOTHER
+2EF3 ; NFKD_QC; N # So CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; NFKD_QC; N # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3000 ; NFKD_QC; N # Zs IDEOGRAPHIC SPACE
+3036 ; NFKD_QC; N # So CIRCLED POSTAL MARK
+3038..303A ; NFKD_QC; N # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+304C ; NFKD_QC; N # Lo HIRAGANA LETTER GA
+304E ; NFKD_QC; N # Lo HIRAGANA LETTER GI
+3050 ; NFKD_QC; N # Lo HIRAGANA LETTER GU
+3052 ; NFKD_QC; N # Lo HIRAGANA LETTER GE
+3054 ; NFKD_QC; N # Lo HIRAGANA LETTER GO
+3056 ; NFKD_QC; N # Lo HIRAGANA LETTER ZA
+3058 ; NFKD_QC; N # Lo HIRAGANA LETTER ZI
+305A ; NFKD_QC; N # Lo HIRAGANA LETTER ZU
+305C ; NFKD_QC; N # Lo HIRAGANA LETTER ZE
+305E ; NFKD_QC; N # Lo HIRAGANA LETTER ZO
+3060 ; NFKD_QC; N # Lo HIRAGANA LETTER DA
+3062 ; NFKD_QC; N # Lo HIRAGANA LETTER DI
+3065 ; NFKD_QC; N # Lo HIRAGANA LETTER DU
+3067 ; NFKD_QC; N # Lo HIRAGANA LETTER DE
+3069 ; NFKD_QC; N # Lo HIRAGANA LETTER DO
+3070..3071 ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA
+3073..3074 ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI
+3076..3077 ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU
+3079..307A ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE
+307C..307D ; NFKD_QC; N # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO
+3094 ; NFKD_QC; N # Lo HIRAGANA LETTER VU
+309B..309C ; NFKD_QC; N # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309E ; NFKD_QC; N # Lm HIRAGANA VOICED ITERATION MARK
+309F ; NFKD_QC; N # Lo HIRAGANA DIGRAPH YORI
+30AC ; NFKD_QC; N # Lo KATAKANA LETTER GA
+30AE ; NFKD_QC; N # Lo KATAKANA LETTER GI
+30B0 ; NFKD_QC; N # Lo KATAKANA LETTER GU
+30B2 ; NFKD_QC; N # Lo KATAKANA LETTER GE
+30B4 ; NFKD_QC; N # Lo KATAKANA LETTER GO
+30B6 ; NFKD_QC; N # Lo KATAKANA LETTER ZA
+30B8 ; NFKD_QC; N # Lo KATAKANA LETTER ZI
+30BA ; NFKD_QC; N # Lo KATAKANA LETTER ZU
+30BC ; NFKD_QC; N # Lo KATAKANA LETTER ZE
+30BE ; NFKD_QC; N # Lo KATAKANA LETTER ZO
+30C0 ; NFKD_QC; N # Lo KATAKANA LETTER DA
+30C2 ; NFKD_QC; N # Lo KATAKANA LETTER DI
+30C5 ; NFKD_QC; N # Lo KATAKANA LETTER DU
+30C7 ; NFKD_QC; N # Lo KATAKANA LETTER DE
+30C9 ; NFKD_QC; N # Lo KATAKANA LETTER DO
+30D0..30D1 ; NFKD_QC; N # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA
+30D3..30D4 ; NFKD_QC; N # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI
+30D6..30D7 ; NFKD_QC; N # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU
+30D9..30DA ; NFKD_QC; N # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE
+30DC..30DD ; NFKD_QC; N # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO
+30F4 ; NFKD_QC; N # Lo KATAKANA LETTER VU
+30F7..30FA ; NFKD_QC; N # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO
+30FE ; NFKD_QC; N # Lm KATAKANA VOICED ITERATION MARK
+30FF ; NFKD_QC; N # Lo KATAKANA DIGRAPH KOTO
+3131..318E ; NFKD_QC; N # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3192..3195 ; NFKD_QC; N # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; NFKD_QC; N # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+3200..321E ; NFKD_QC; N # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; NFKD_QC; N # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247 ; NFKD_QC; N # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3250 ; NFKD_QC; N # So PARTNERSHIP SIGN
+3251..325F ; NFKD_QC; N # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327E ; NFKD_QC; N # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
+3280..3289 ; NFKD_QC; N # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; NFKD_QC; N # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; NFKD_QC; N # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..33FF ; NFKD_QC; N # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
+A69C..A69D ; NFKD_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A770 ; NFKD_QC; N # Lm MODIFIER LETTER US
+A7F2..A7F4 ; NFKD_QC; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F8..A7F9 ; NFKD_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+AB5C..AB5F ; NFKD_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; NFKD_QC; N # Lm MODIFIER LETTER SMALL TURNED W
+AC00..D7A3 ; NFKD_QC; N # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+F900..FA0D ; NFKD_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; NFKD_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; NFKD_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA6D ; NFKD_QC; N # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; NFKD_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; NFKD_QC; N # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; NFKD_QC; N # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; NFKD_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; NFKD_QC; N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29 ; NFKD_QC; N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36 ; NFKD_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; NFKD_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; NFKD_QC; N # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; NFKD_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; NFKD_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; NFKD_QC; N # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; NFKD_QC; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; NFKD_QC; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; NFKD_QC; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; NFKD_QC; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; NFKD_QC; N # Sc RIAL SIGN
+FE10..FE16 ; NFKD_QC; N # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; NFKD_QC; N # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; NFKD_QC; N # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; NFKD_QC; N # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; NFKD_QC; N # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE47 ; NFKD_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; NFKD_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; NFKD_QC; N # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; NFKD_QC; N # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52 ; NFKD_QC; N # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; NFKD_QC; N # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; NFKD_QC; N # Pd SMALL EM DASH
+FE59 ; NFKD_QC; N # Ps SMALL LEFT PARENTHESIS
+FE5A ; NFKD_QC; N # Pe SMALL RIGHT PARENTHESIS
+FE5B ; NFKD_QC; N # Ps SMALL LEFT CURLY BRACKET
+FE5C ; NFKD_QC; N # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; NFKD_QC; N # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; NFKD_QC; N # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; NFKD_QC; N # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; NFKD_QC; N # Sm SMALL PLUS SIGN
+FE63 ; NFKD_QC; N # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; NFKD_QC; N # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; NFKD_QC; N # Po SMALL REVERSE SOLIDUS
+FE69 ; NFKD_QC; N # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; NFKD_QC; N # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FE70..FE72 ; NFKD_QC; N # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
+FE74 ; NFKD_QC; N # Lo ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; NFKD_QC; N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF01..FF03 ; NFKD_QC; N # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; NFKD_QC; N # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; NFKD_QC; N # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; NFKD_QC; N # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; NFKD_QC; N # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; NFKD_QC; N # Po FULLWIDTH ASTERISK
+FF0B ; NFKD_QC; N # Sm FULLWIDTH PLUS SIGN
+FF0C ; NFKD_QC; N # Po FULLWIDTH COMMA
+FF0D ; NFKD_QC; N # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; NFKD_QC; N # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; NFKD_QC; N # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; NFKD_QC; N # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; NFKD_QC; N # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; NFKD_QC; N # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A ; NFKD_QC; N # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B ; NFKD_QC; N # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; NFKD_QC; N # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; NFKD_QC; N # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; NFKD_QC; N # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; NFKD_QC; N # Pc FULLWIDTH LOW LINE
+FF40 ; NFKD_QC; N # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A ; NFKD_QC; N # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B ; NFKD_QC; N # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; NFKD_QC; N # Sm FULLWIDTH VERTICAL LINE
+FF5D ; NFKD_QC; N # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; NFKD_QC; N # Sm FULLWIDTH TILDE
+FF5F ; NFKD_QC; N # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; NFKD_QC; N # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; NFKD_QC; N # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; NFKD_QC; N # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; NFKD_QC; N # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; NFKD_QC; N # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F ; NFKD_QC; N # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; NFKD_QC; N # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; NFKD_QC; N # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; NFKD_QC; N # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; NFKD_QC; N # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; NFKD_QC; N # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; NFKD_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; NFKD_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; NFKD_QC; N # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE1 ; NFKD_QC; N # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; NFKD_QC; N # Sm FULLWIDTH NOT SIGN
+FFE3 ; NFKD_QC; N # Sk FULLWIDTH MACRON
+FFE4 ; NFKD_QC; N # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; NFKD_QC; N # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8 ; NFKD_QC; N # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; NFKD_QC; N # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+10781..10785 ; NFKD_QC; N # Lm [5] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; NFKD_QC; N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; NFKD_QC; N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+1109A ; NFKD_QC; N # Lo KAITHI LETTER DDDHA
+1109C ; NFKD_QC; N # Lo KAITHI LETTER RHA
+110AB ; NFKD_QC; N # Lo KAITHI LETTER VA
+1112E..1112F ; NFKD_QC; N # Mn [2] CHAKMA VOWEL SIGN O..CHAKMA VOWEL SIGN AU
+1134B..1134C ; NFKD_QC; N # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+114BB..114BC ; NFKD_QC; N # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
+114BE ; NFKD_QC; N # Mc TIRHUTA VOWEL SIGN AU
+115BA..115BB ; NFKD_QC; N # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; NFKD_QC; N # Mc DIVES AKURU VOWEL SIGN O
+1D15E..1D164 ; NFKD_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; NFKD_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+1D400..1D454 ; NFKD_QC; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; NFKD_QC; N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; NFKD_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; NFKD_QC; N # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; NFKD_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; NFKD_QC; N # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; NFKD_QC; N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; NFKD_QC; N # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; NFKD_QC; N # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; NFKD_QC; N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; NFKD_QC; N # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; NFKD_QC; N # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; NFKD_QC; N # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; NFKD_QC; N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; NFKD_QC; N # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; NFKD_QC; N # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; NFKD_QC; N # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; NFKD_QC; N # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; NFKD_QC; N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; NFKD_QC; N # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; NFKD_QC; N # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; NFKD_QC; N # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; NFKD_QC; N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; NFKD_QC; N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; NFKD_QC; N # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; NFKD_QC; N # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; NFKD_QC; N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; NFKD_QC; N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; NFKD_QC; N # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; NFKD_QC; N # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; NFKD_QC; N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; NFKD_QC; N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; NFKD_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; NFKD_QC; N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; NFKD_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; NFKD_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB ; NFKD_QC; N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; NFKD_QC; N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EE00..1EE03 ; NFKD_QC; N # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; NFKD_QC; N # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; NFKD_QC; N # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; NFKD_QC; N # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; NFKD_QC; N # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; NFKD_QC; N # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; NFKD_QC; N # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; NFKD_QC; N # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; NFKD_QC; N # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; NFKD_QC; N # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; NFKD_QC; N # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; NFKD_QC; N # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; NFKD_QC; N # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; NFKD_QC; N # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; NFKD_QC; N # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; NFKD_QC; N # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; NFKD_QC; N # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; NFKD_QC; N # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; NFKD_QC; N # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; NFKD_QC; N # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; NFKD_QC; N # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1F100..1F10A ; NFKD_QC; N # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12E ; NFKD_QC; N # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
+1F130..1F14F ; NFKD_QC; N # So [32] SQUARED LATIN CAPITAL LETTER A..SQUARED WC
+1F16A..1F16C ; NFKD_QC; N # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F190 ; NFKD_QC; N # So SQUARE DJ
+1F200..1F202 ; NFKD_QC; N # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
+1F210..1F23B ; NFKD_QC; N # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248 ; NFKD_QC; N # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251 ; NFKD_QC; N # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9 ; NFKD_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+2F800..2FA1D ; NFKD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 16967
+
+# ================================================
+
+# Property: NFKC_Quick_Check
+
+# All code points not explicitly listed for NFKC_Quick_Check
+# have the value Yes (Y).
+
+# @missing: 0000..10FFFF; NFKC_QC; Yes
+
+# ================================================
+
+# NFKC_Quick_Check=No
+
+00A0 ; NFKC_QC; N # Zs NO-BREAK SPACE
+00A8 ; NFKC_QC; N # Sk DIAERESIS
+00AA ; NFKC_QC; N # Lo FEMININE ORDINAL INDICATOR
+00AF ; NFKC_QC; N # Sk MACRON
+00B2..00B3 ; NFKC_QC; N # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4 ; NFKC_QC; N # Sk ACUTE ACCENT
+00B5 ; NFKC_QC; N # L& MICRO SIGN
+00B8 ; NFKC_QC; N # Sk CEDILLA
+00B9 ; NFKC_QC; N # No SUPERSCRIPT ONE
+00BA ; NFKC_QC; N # Lo MASCULINE ORDINAL INDICATOR
+00BC..00BE ; NFKC_QC; N # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+0132..0133 ; NFKC_QC; N # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ
+013F..0140 ; NFKC_QC; N # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT
+0149 ; NFKC_QC; N # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+017F ; NFKC_QC; N # L& LATIN SMALL LETTER LONG S
+01C4..01CC ; NFKC_QC; N # L& [9] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER NJ
+01F1..01F3 ; NFKC_QC; N # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ
+02B0..02B8 ; NFKC_QC; N # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02D8..02DD ; NFKC_QC; N # Sk [6] BREVE..DOUBLE ACUTE ACCENT
+02E0..02E4 ; NFKC_QC; N # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0340..0341 ; NFKC_QC; N # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344 ; NFKC_QC; N # Mn [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374 ; NFKC_QC; N # Lm GREEK NUMERAL SIGN
+037A ; NFKC_QC; N # Lm GREEK YPOGEGRAMMENI
+037E ; NFKC_QC; N # Po GREEK QUESTION MARK
+0384..0385 ; NFKC_QC; N # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0387 ; NFKC_QC; N # Po GREEK ANO TELEIA
+03D0..03D6 ; NFKC_QC; N # L& [7] GREEK BETA SYMBOL..GREEK PI SYMBOL
+03F0..03F2 ; NFKC_QC; N # L& [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL
+03F4..03F5 ; NFKC_QC; N # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F9 ; NFKC_QC; N # L& GREEK CAPITAL LUNATE SIGMA SYMBOL
+0587 ; NFKC_QC; N # L& ARMENIAN SMALL LIGATURE ECH YIWN
+0675..0678 ; NFKC_QC; N # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+0958..095F ; NFKC_QC; N # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD ; NFKC_QC; N # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; NFKC_QC; N # Lo BENGALI LETTER YYA
+0A33 ; NFKC_QC; N # Lo GURMUKHI LETTER LLA
+0A36 ; NFKC_QC; N # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; NFKC_QC; N # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; NFKC_QC; N # Lo GURMUKHI LETTER FA
+0B5C..0B5D ; NFKC_QC; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0E33 ; NFKC_QC; N # Lo THAI CHARACTER SARA AM
+0EB3 ; NFKC_QC; N # Lo LAO VOWEL SIGN AM
+0EDC..0EDD ; NFKC_QC; N # Lo [2] LAO HO NO..LAO HO MO
+0F0C ; NFKC_QC; N # Po TIBETAN MARK DELIMITER TSHEG BSTAR
+0F43 ; NFKC_QC; N # Lo TIBETAN LETTER GHA
+0F4D ; NFKC_QC; N # Lo TIBETAN LETTER DDHA
+0F52 ; NFKC_QC; N # Lo TIBETAN LETTER DHA
+0F57 ; NFKC_QC; N # Lo TIBETAN LETTER BHA
+0F5C ; NFKC_QC; N # Lo TIBETAN LETTER DZHA
+0F69 ; NFKC_QC; N # Lo TIBETAN LETTER KSSA
+0F73 ; NFKC_QC; N # Mn TIBETAN VOWEL SIGN II
+0F75..0F79 ; NFKC_QC; N # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; NFKC_QC; N # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; NFKC_QC; N # Mn TIBETAN SUBJOINED LETTER KSSA
+10FC ; NFKC_QC; N # Lm MODIFIER LETTER GEORGIAN NAR
+1D2C..1D2E ; NFKC_QC; N # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B
+1D30..1D3A ; NFKC_QC; N # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N
+1D3C..1D4D ; NFKC_QC; N # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G
+1D4F..1D6A ; NFKC_QC; N # Lm [28] MODIFIER LETTER SMALL K..GREEK SUBSCRIPT SMALL LETTER CHI
+1D78 ; NFKC_QC; N # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; NFKC_QC; N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E9A..1E9B ; NFKC_QC; N # L& [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1F71 ; NFKC_QC; N # L& GREEK SMALL LETTER ALPHA WITH OXIA
+1F73 ; NFKC_QC; N # L& GREEK SMALL LETTER EPSILON WITH OXIA
+1F75 ; NFKC_QC; N # L& GREEK SMALL LETTER ETA WITH OXIA
+1F77 ; NFKC_QC; N # L& GREEK SMALL LETTER IOTA WITH OXIA
+1F79 ; NFKC_QC; N # L& GREEK SMALL LETTER OMICRON WITH OXIA
+1F7B ; NFKC_QC; N # L& GREEK SMALL LETTER UPSILON WITH OXIA
+1F7D ; NFKC_QC; N # L& GREEK SMALL LETTER OMEGA WITH OXIA
+1FBB ; NFKC_QC; N # L& GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBD ; NFKC_QC; N # Sk GREEK KORONIS
+1FBE ; NFKC_QC; N # L& GREEK PROSGEGRAMMENI
+1FBF..1FC1 ; NFKC_QC; N # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC9 ; NFKC_QC; N # L& GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCB ; NFKC_QC; N # L& GREEK CAPITAL LETTER ETA WITH OXIA
+1FCD..1FCF ; NFKC_QC; N # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD3 ; NFKC_QC; N # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FDB ; NFKC_QC; N # L& GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; NFKC_QC; N # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE3 ; NFKC_QC; N # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FEB ; NFKC_QC; N # L& GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FED..1FEF ; NFKC_QC; N # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF9 ; NFKC_QC; N # L& GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFB ; NFKC_QC; N # L& GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFD..1FFE ; NFKC_QC; N # Sk [2] GREEK OXIA..GREEK DASIA
+2000..200A ; NFKC_QC; N # Zs [11] EN QUAD..HAIR SPACE
+2011 ; NFKC_QC; N # Pd NON-BREAKING HYPHEN
+2017 ; NFKC_QC; N # Po DOUBLE LOW LINE
+2024..2026 ; NFKC_QC; N # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
+202F ; NFKC_QC; N # Zs NARROW NO-BREAK SPACE
+2033..2034 ; NFKC_QC; N # Po [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037 ; NFKC_QC; N # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C ; NFKC_QC; N # Po DOUBLE EXCLAMATION MARK
+203E ; NFKC_QC; N # Po OVERLINE
+2047..2049 ; NFKC_QC; N # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2057 ; NFKC_QC; N # Po QUADRUPLE PRIME
+205F ; NFKC_QC; N # Zs MEDIUM MATHEMATICAL SPACE
+2070 ; NFKC_QC; N # No SUPERSCRIPT ZERO
+2071 ; NFKC_QC; N # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074..2079 ; NFKC_QC; N # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; NFKC_QC; N # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; NFKC_QC; N # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; NFKC_QC; N # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F ; NFKC_QC; N # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080..2089 ; NFKC_QC; N # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; NFKC_QC; N # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; NFKC_QC; N # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; NFKC_QC; N # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090..209C ; NFKC_QC; N # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20A8 ; NFKC_QC; N # Sc RUPEE SIGN
+2100..2101 ; NFKC_QC; N # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102 ; NFKC_QC; N # L& DOUBLE-STRUCK CAPITAL C
+2103 ; NFKC_QC; N # So DEGREE CELSIUS
+2105..2106 ; NFKC_QC; N # So [2] CARE OF..CADA UNA
+2107 ; NFKC_QC; N # L& EULER CONSTANT
+2109 ; NFKC_QC; N # So DEGREE FAHRENHEIT
+210A..2113 ; NFKC_QC; N # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; NFKC_QC; N # L& DOUBLE-STRUCK CAPITAL N
+2116 ; NFKC_QC; N # So NUMERO SIGN
+2119..211D ; NFKC_QC; N # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2120..2122 ; NFKC_QC; N # So [3] SERVICE MARK..TRADE MARK SIGN
+2124 ; NFKC_QC; N # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; NFKC_QC; N # L& OHM SIGN
+2128 ; NFKC_QC; N # L& BLACK-LETTER CAPITAL Z
+212A..212D ; NFKC_QC; N # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2131 ; NFKC_QC; N # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134 ; NFKC_QC; N # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138 ; NFKC_QC; N # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; NFKC_QC; N # L& INFORMATION SOURCE
+213B ; NFKC_QC; N # So FACSIMILE SIGN
+213C..213F ; NFKC_QC; N # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140 ; NFKC_QC; N # Sm DOUBLE-STRUCK N-ARY SUMMATION
+2145..2149 ; NFKC_QC; N # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2150..215F ; NFKC_QC; N # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2160..217F ; NFKC_QC; N # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2189 ; NFKC_QC; N # No VULGAR FRACTION ZERO THIRDS
+222C..222D ; NFKC_QC; N # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230 ; NFKC_QC; N # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2329 ; NFKC_QC; N # Ps LEFT-POINTING ANGLE BRACKET
+232A ; NFKC_QC; N # Pe RIGHT-POINTING ANGLE BRACKET
+2460..249B ; NFKC_QC; N # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9 ; NFKC_QC; N # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA ; NFKC_QC; N # No CIRCLED DIGIT ZERO
+2A0C ; NFKC_QC; N # Sm QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76 ; NFKC_QC; N # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2ADC ; NFKC_QC; N # Sm FORKING
+2C7C..2C7D ; NFKC_QC; N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2D6F ; NFKC_QC; N # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2E9F ; NFKC_QC; N # So CJK RADICAL MOTHER
+2EF3 ; NFKC_QC; N # So CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; NFKC_QC; N # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3000 ; NFKC_QC; N # Zs IDEOGRAPHIC SPACE
+3036 ; NFKC_QC; N # So CIRCLED POSTAL MARK
+3038..303A ; NFKC_QC; N # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+309B..309C ; NFKC_QC; N # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309F ; NFKC_QC; N # Lo HIRAGANA DIGRAPH YORI
+30FF ; NFKC_QC; N # Lo KATAKANA DIGRAPH KOTO
+3131..318E ; NFKC_QC; N # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3192..3195 ; NFKC_QC; N # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; NFKC_QC; N # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+3200..321E ; NFKC_QC; N # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; NFKC_QC; N # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247 ; NFKC_QC; N # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3250 ; NFKC_QC; N # So PARTNERSHIP SIGN
+3251..325F ; NFKC_QC; N # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327E ; NFKC_QC; N # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
+3280..3289 ; NFKC_QC; N # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; NFKC_QC; N # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; NFKC_QC; N # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..33FF ; NFKC_QC; N # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
+A69C..A69D ; NFKC_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A770 ; NFKC_QC; N # Lm MODIFIER LETTER US
+A7F2..A7F4 ; NFKC_QC; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F8..A7F9 ; NFKC_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+AB5C..AB5F ; NFKC_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; NFKC_QC; N # Lm MODIFIER LETTER SMALL TURNED W
+F900..FA0D ; NFKC_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; NFKC_QC; N # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; NFKC_QC; N # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA6D ; NFKC_QC; N # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; NFKC_QC; N # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; NFKC_QC; N # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; NFKC_QC; N # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; NFKC_QC; N # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; NFKC_QC; N # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29 ; NFKC_QC; N # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36 ; NFKC_QC; N # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; NFKC_QC; N # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; NFKC_QC; N # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; NFKC_QC; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; NFKC_QC; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; NFKC_QC; N # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; NFKC_QC; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; NFKC_QC; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; NFKC_QC; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; NFKC_QC; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; NFKC_QC; N # Sc RIAL SIGN
+FE10..FE16 ; NFKC_QC; N # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; NFKC_QC; N # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; NFKC_QC; N # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; NFKC_QC; N # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; NFKC_QC; N # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE47 ; NFKC_QC; N # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; NFKC_QC; N # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; NFKC_QC; N # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; NFKC_QC; N # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52 ; NFKC_QC; N # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; NFKC_QC; N # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; NFKC_QC; N # Pd SMALL EM DASH
+FE59 ; NFKC_QC; N # Ps SMALL LEFT PARENTHESIS
+FE5A ; NFKC_QC; N # Pe SMALL RIGHT PARENTHESIS
+FE5B ; NFKC_QC; N # Ps SMALL LEFT CURLY BRACKET
+FE5C ; NFKC_QC; N # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; NFKC_QC; N # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; NFKC_QC; N # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; NFKC_QC; N # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; NFKC_QC; N # Sm SMALL PLUS SIGN
+FE63 ; NFKC_QC; N # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; NFKC_QC; N # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; NFKC_QC; N # Po SMALL REVERSE SOLIDUS
+FE69 ; NFKC_QC; N # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; NFKC_QC; N # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FE70..FE72 ; NFKC_QC; N # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
+FE74 ; NFKC_QC; N # Lo ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; NFKC_QC; N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF01..FF03 ; NFKC_QC; N # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; NFKC_QC; N # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; NFKC_QC; N # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; NFKC_QC; N # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; NFKC_QC; N # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; NFKC_QC; N # Po FULLWIDTH ASTERISK
+FF0B ; NFKC_QC; N # Sm FULLWIDTH PLUS SIGN
+FF0C ; NFKC_QC; N # Po FULLWIDTH COMMA
+FF0D ; NFKC_QC; N # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; NFKC_QC; N # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; NFKC_QC; N # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; NFKC_QC; N # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; NFKC_QC; N # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; NFKC_QC; N # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A ; NFKC_QC; N # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B ; NFKC_QC; N # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; NFKC_QC; N # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; NFKC_QC; N # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; NFKC_QC; N # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; NFKC_QC; N # Pc FULLWIDTH LOW LINE
+FF40 ; NFKC_QC; N # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A ; NFKC_QC; N # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B ; NFKC_QC; N # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; NFKC_QC; N # Sm FULLWIDTH VERTICAL LINE
+FF5D ; NFKC_QC; N # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; NFKC_QC; N # Sm FULLWIDTH TILDE
+FF5F ; NFKC_QC; N # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; NFKC_QC; N # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; NFKC_QC; N # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; NFKC_QC; N # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; NFKC_QC; N # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; NFKC_QC; N # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F ; NFKC_QC; N # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; NFKC_QC; N # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; NFKC_QC; N # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; NFKC_QC; N # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; NFKC_QC; N # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; NFKC_QC; N # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; NFKC_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; NFKC_QC; N # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; NFKC_QC; N # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE1 ; NFKC_QC; N # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; NFKC_QC; N # Sm FULLWIDTH NOT SIGN
+FFE3 ; NFKC_QC; N # Sk FULLWIDTH MACRON
+FFE4 ; NFKC_QC; N # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; NFKC_QC; N # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8 ; NFKC_QC; N # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; NFKC_QC; N # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+10781..10785 ; NFKC_QC; N # Lm [5] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; NFKC_QC; N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; NFKC_QC; N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+1D15E..1D164 ; NFKC_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; NFKC_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+1D400..1D454 ; NFKC_QC; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; NFKC_QC; N # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; NFKC_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; NFKC_QC; N # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; NFKC_QC; N # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; NFKC_QC; N # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; NFKC_QC; N # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; NFKC_QC; N # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; NFKC_QC; N # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; NFKC_QC; N # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; NFKC_QC; N # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; NFKC_QC; N # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; NFKC_QC; N # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; NFKC_QC; N # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; NFKC_QC; N # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; NFKC_QC; N # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; NFKC_QC; N # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; NFKC_QC; N # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; NFKC_QC; N # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; NFKC_QC; N # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; NFKC_QC; N # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; NFKC_QC; N # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; NFKC_QC; N # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; NFKC_QC; N # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; NFKC_QC; N # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; NFKC_QC; N # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; NFKC_QC; N # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; NFKC_QC; N # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; NFKC_QC; N # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; NFKC_QC; N # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; NFKC_QC; N # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; NFKC_QC; N # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; NFKC_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; NFKC_QC; N # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; NFKC_QC; N # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; NFKC_QC; N # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB ; NFKC_QC; N # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; NFKC_QC; N # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EE00..1EE03 ; NFKC_QC; N # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; NFKC_QC; N # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; NFKC_QC; N # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; NFKC_QC; N # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; NFKC_QC; N # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; NFKC_QC; N # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; NFKC_QC; N # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; NFKC_QC; N # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; NFKC_QC; N # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; NFKC_QC; N # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; NFKC_QC; N # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; NFKC_QC; N # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; NFKC_QC; N # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; NFKC_QC; N # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; NFKC_QC; N # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; NFKC_QC; N # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; NFKC_QC; N # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; NFKC_QC; N # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; NFKC_QC; N # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; NFKC_QC; N # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; NFKC_QC; N # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1F100..1F10A ; NFKC_QC; N # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12E ; NFKC_QC; N # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
+1F130..1F14F ; NFKC_QC; N # So [32] SQUARED LATIN CAPITAL LETTER A..SQUARED WC
+1F16A..1F16C ; NFKC_QC; N # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F190 ; NFKC_QC; N # So SQUARE DJ
+1F200..1F202 ; NFKC_QC; N # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
+1F210..1F23B ; NFKC_QC; N # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248 ; NFKC_QC; N # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251 ; NFKC_QC; N # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9 ; NFKC_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+2F800..2FA1D ; NFKC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 4866
+
+# ================================================
+
+# NFKC_Quick_Check=Maybe
+
+0300..0304 ; NFKC_QC; M # Mn [5] COMBINING GRAVE ACCENT..COMBINING MACRON
+0306..030C ; NFKC_QC; M # Mn [7] COMBINING BREVE..COMBINING CARON
+030F ; NFKC_QC; M # Mn COMBINING DOUBLE GRAVE ACCENT
+0311 ; NFKC_QC; M # Mn COMBINING INVERTED BREVE
+0313..0314 ; NFKC_QC; M # Mn [2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE
+031B ; NFKC_QC; M # Mn COMBINING HORN
+0323..0328 ; NFKC_QC; M # Mn [6] COMBINING DOT BELOW..COMBINING OGONEK
+032D..032E ; NFKC_QC; M # Mn [2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW
+0330..0331 ; NFKC_QC; M # Mn [2] COMBINING TILDE BELOW..COMBINING MACRON BELOW
+0338 ; NFKC_QC; M # Mn COMBINING LONG SOLIDUS OVERLAY
+0342 ; NFKC_QC; M # Mn COMBINING GREEK PERISPOMENI
+0345 ; NFKC_QC; M # Mn COMBINING GREEK YPOGEGRAMMENI
+0653..0655 ; NFKC_QC; M # Mn [3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW
+093C ; NFKC_QC; M # Mn DEVANAGARI SIGN NUKTA
+09BE ; NFKC_QC; M # Mc BENGALI VOWEL SIGN AA
+09D7 ; NFKC_QC; M # Mc BENGALI AU LENGTH MARK
+0B3E ; NFKC_QC; M # Mc ORIYA VOWEL SIGN AA
+0B56 ; NFKC_QC; M # Mn ORIYA AI LENGTH MARK
+0B57 ; NFKC_QC; M # Mc ORIYA AU LENGTH MARK
+0BBE ; NFKC_QC; M # Mc TAMIL VOWEL SIGN AA
+0BD7 ; NFKC_QC; M # Mc TAMIL AU LENGTH MARK
+0C56 ; NFKC_QC; M # Mn TELUGU AI LENGTH MARK
+0CC2 ; NFKC_QC; M # Mc KANNADA VOWEL SIGN UU
+0CD5..0CD6 ; NFKC_QC; M # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0D3E ; NFKC_QC; M # Mc MALAYALAM VOWEL SIGN AA
+0D57 ; NFKC_QC; M # Mc MALAYALAM AU LENGTH MARK
+0DCA ; NFKC_QC; M # Mn SINHALA SIGN AL-LAKUNA
+0DCF ; NFKC_QC; M # Mc SINHALA VOWEL SIGN AELA-PILLA
+0DDF ; NFKC_QC; M # Mc SINHALA VOWEL SIGN GAYANUKITTA
+102E ; NFKC_QC; M # Mn MYANMAR VOWEL SIGN II
+1161..1175 ; NFKC_QC; M # Lo [21] HANGUL JUNGSEONG A..HANGUL JUNGSEONG I
+11A8..11C2 ; NFKC_QC; M # Lo [27] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG HIEUH
+1B35 ; NFKC_QC; M # Mc BALINESE VOWEL SIGN TEDUNG
+3099..309A ; NFKC_QC; M # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+110BA ; NFKC_QC; M # Mn KAITHI SIGN NUKTA
+11127 ; NFKC_QC; M # Mn CHAKMA VOWEL SIGN A
+1133E ; NFKC_QC; M # Mc GRANTHA VOWEL SIGN AA
+11357 ; NFKC_QC; M # Mc GRANTHA AU LENGTH MARK
+114B0 ; NFKC_QC; M # Mc TIRHUTA VOWEL SIGN AA
+114BA ; NFKC_QC; M # Mn TIRHUTA VOWEL SIGN SHORT E
+114BD ; NFKC_QC; M # Mc TIRHUTA VOWEL SIGN SHORT O
+115AF ; NFKC_QC; M # Mc SIDDHAM VOWEL SIGN AA
+11930 ; NFKC_QC; M # Mc DIVES AKURU VOWEL SIGN AA
+
+# Total code points: 111
+
+# ================================================
+
+# Derived Property: Expands_On_NFD (DEPRECATED as of Unicode 6.0.0)
+# Generated according to UAX #15.
+# Characters whose normalized length is not one.
+# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact.
+# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters!
+
+00C0..00C5 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+00C7..00CF ; Expands_On_NFD # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1..00D6 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D9..00DD ; Expands_On_NFD # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+00E0..00E5 ; Expands_On_NFD # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE
+00E7..00EF ; Expands_On_NFD # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS
+00F1..00F6 ; Expands_On_NFD # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS
+00F9..00FD ; Expands_On_NFD # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE
+00FF..010F ; Expands_On_NFD # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON
+0112..0125 ; Expands_On_NFD # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX
+0128..0130 ; Expands_On_NFD # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+0134..0137 ; Expands_On_NFD # L& [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
+0139..013E ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
+0143..0148 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N WITH CARON
+014C..0151 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0154..0165 ; Expands_On_NFD # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+0168..017E ; Expands_On_NFD # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON
+01A0..01A1 ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0 ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01CD..01DC ; Expands_On_NFD # L& [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3 ; Expands_On_NFD # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F0 ; Expands_On_NFD # L& [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F4..01F5 ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE
+01F8..021B ; Expands_On_NFD # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F ; Expands_On_NFD # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233 ; Expands_On_NFD # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+0344 ; Expands_On_NFD # Mn COMBINING GREEK DIALYTIKA TONOS
+0385 ; Expands_On_NFD # Sk GREEK DIALYTIKA TONOS
+0386 ; Expands_On_NFD # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Expands_On_NFD # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Expands_On_NFD # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..0390 ; Expands_On_NFD # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AA..03B0 ; Expands_On_NFD # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CA..03CE ; Expands_On_NFD # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D3..03D4 ; Expands_On_NFD # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+0400..0401 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO
+0403 ; Expands_On_NFD # L& CYRILLIC CAPITAL LETTER GJE
+0407 ; Expands_On_NFD # L& CYRILLIC CAPITAL LETTER YI
+040C..040E ; Expands_On_NFD # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U
+0419 ; Expands_On_NFD # L& CYRILLIC CAPITAL LETTER SHORT I
+0439 ; Expands_On_NFD # L& CYRILLIC SMALL LETTER SHORT I
+0450..0451 ; Expands_On_NFD # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO
+0453 ; Expands_On_NFD # L& CYRILLIC SMALL LETTER GJE
+0457 ; Expands_On_NFD # L& CYRILLIC SMALL LETTER YI
+045C..045E ; Expands_On_NFD # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U
+0476..0477 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+04C1..04C2 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE
+04D0..04D3 ; Expands_On_NFD # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D6..04D7 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE
+04DA..04DF ; Expands_On_NFD # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E2..04E7 ; Expands_On_NFD # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS
+04EA..04F5 ; Expands_On_NFD # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8..04F9 ; Expands_On_NFD # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0622..0626 ; Expands_On_NFD # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE
+06C0 ; Expands_On_NFD # Lo ARABIC LETTER HEH WITH YEH ABOVE
+06C2 ; Expands_On_NFD # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06D3 ; Expands_On_NFD # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+0929 ; Expands_On_NFD # Lo DEVANAGARI LETTER NNNA
+0931 ; Expands_On_NFD # Lo DEVANAGARI LETTER RRA
+0934 ; Expands_On_NFD # Lo DEVANAGARI LETTER LLLA
+0958..095F ; Expands_On_NFD # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09CB..09CC ; Expands_On_NFD # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09DC..09DD ; Expands_On_NFD # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Expands_On_NFD # Lo BENGALI LETTER YYA
+0A33 ; Expands_On_NFD # Lo GURMUKHI LETTER LLA
+0A36 ; Expands_On_NFD # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Expands_On_NFD # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Expands_On_NFD # Lo GURMUKHI LETTER FA
+0B48 ; Expands_On_NFD # Mc ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Expands_On_NFD # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D ; Expands_On_NFD # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B94 ; Expands_On_NFD # Lo TAMIL LETTER AU
+0BCA..0BCC ; Expands_On_NFD # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0C48 ; Expands_On_NFD # Mn TELUGU VOWEL SIGN AI
+0CC0 ; Expands_On_NFD # Mc KANNADA VOWEL SIGN II
+0CC7..0CC8 ; Expands_On_NFD # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Expands_On_NFD # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0D4A..0D4C ; Expands_On_NFD # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0DDA ; Expands_On_NFD # Mc SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDC..0DDE ; Expands_On_NFD # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0F43 ; Expands_On_NFD # Lo TIBETAN LETTER GHA
+0F4D ; Expands_On_NFD # Lo TIBETAN LETTER DDHA
+0F52 ; Expands_On_NFD # Lo TIBETAN LETTER DHA
+0F57 ; Expands_On_NFD # Lo TIBETAN LETTER BHA
+0F5C ; Expands_On_NFD # Lo TIBETAN LETTER DZHA
+0F69 ; Expands_On_NFD # Lo TIBETAN LETTER KSSA
+0F73 ; Expands_On_NFD # Mn TIBETAN VOWEL SIGN II
+0F75..0F76 ; Expands_On_NFD # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78 ; Expands_On_NFD # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F81 ; Expands_On_NFD # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Expands_On_NFD # Mn TIBETAN SUBJOINED LETTER KSSA
+1026 ; Expands_On_NFD # Lo MYANMAR LETTER UU
+1B06 ; Expands_On_NFD # Lo BALINESE LETTER AKARA TEDUNG
+1B08 ; Expands_On_NFD # Lo BALINESE LETTER IKARA TEDUNG
+1B0A ; Expands_On_NFD # Lo BALINESE LETTER UKARA TEDUNG
+1B0C ; Expands_On_NFD # Lo BALINESE LETTER RA REPA TEDUNG
+1B0E ; Expands_On_NFD # Lo BALINESE LETTER LA LENGA TEDUNG
+1B12 ; Expands_On_NFD # Lo BALINESE LETTER OKARA TEDUNG
+1B3B ; Expands_On_NFD # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D ; Expands_On_NFD # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B40..1B41 ; Expands_On_NFD # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43 ; Expands_On_NFD # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+1E00..1E99 ; Expands_On_NFD # L& [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE
+1E9B ; Expands_On_NFD # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; Expands_On_NFD # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15 ; Expands_On_NFD # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Expands_On_NFD # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Expands_On_NFD # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Expands_On_NFD # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Expands_On_NFD # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Expands_On_NFD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Expands_On_NFD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Expands_On_NFD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Expands_On_NFD # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Expands_On_NFD # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Expands_On_NFD # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC1 ; Expands_On_NFD # Sk GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Expands_On_NFD # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Expands_On_NFD # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Expands_On_NFD # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; Expands_On_NFD # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Expands_On_NFD # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Expands_On_NFD # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; Expands_On_NFD # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEE ; Expands_On_NFD # Sk [2] GREEK DIALYTIKA AND VARIA..GREEK DIALYTIKA AND OXIA
+1FF2..1FF4 ; Expands_On_NFD # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Expands_On_NFD # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+212B ; Expands_On_NFD # L& ANGSTROM SIGN
+219A..219B ; Expands_On_NFD # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+21AE ; Expands_On_NFD # Sm LEFT RIGHT ARROW WITH STROKE
+21CD ; Expands_On_NFD # So LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Expands_On_NFD # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+2204 ; Expands_On_NFD # Sm THERE DOES NOT EXIST
+2209 ; Expands_On_NFD # Sm NOT AN ELEMENT OF
+220C ; Expands_On_NFD # Sm DOES NOT CONTAIN AS MEMBER
+2224 ; Expands_On_NFD # Sm DOES NOT DIVIDE
+2226 ; Expands_On_NFD # Sm NOT PARALLEL TO
+2241 ; Expands_On_NFD # Sm NOT TILDE
+2244 ; Expands_On_NFD # Sm NOT ASYMPTOTICALLY EQUAL TO
+2247 ; Expands_On_NFD # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2249 ; Expands_On_NFD # Sm NOT ALMOST EQUAL TO
+2260 ; Expands_On_NFD # Sm NOT EQUAL TO
+2262 ; Expands_On_NFD # Sm NOT IDENTICAL TO
+226D..2271 ; Expands_On_NFD # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO
+2274..2275 ; Expands_On_NFD # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO
+2278..2279 ; Expands_On_NFD # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN
+2280..2281 ; Expands_On_NFD # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED
+2284..2285 ; Expands_On_NFD # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2288..2289 ; Expands_On_NFD # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO
+22AC..22AF ; Expands_On_NFD # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22E0..22E3 ; Expands_On_NFD # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO
+22EA..22ED ; Expands_On_NFD # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+2ADC ; Expands_On_NFD # Sm FORKING
+304C ; Expands_On_NFD # Lo HIRAGANA LETTER GA
+304E ; Expands_On_NFD # Lo HIRAGANA LETTER GI
+3050 ; Expands_On_NFD # Lo HIRAGANA LETTER GU
+3052 ; Expands_On_NFD # Lo HIRAGANA LETTER GE
+3054 ; Expands_On_NFD # Lo HIRAGANA LETTER GO
+3056 ; Expands_On_NFD # Lo HIRAGANA LETTER ZA
+3058 ; Expands_On_NFD # Lo HIRAGANA LETTER ZI
+305A ; Expands_On_NFD # Lo HIRAGANA LETTER ZU
+305C ; Expands_On_NFD # Lo HIRAGANA LETTER ZE
+305E ; Expands_On_NFD # Lo HIRAGANA LETTER ZO
+3060 ; Expands_On_NFD # Lo HIRAGANA LETTER DA
+3062 ; Expands_On_NFD # Lo HIRAGANA LETTER DI
+3065 ; Expands_On_NFD # Lo HIRAGANA LETTER DU
+3067 ; Expands_On_NFD # Lo HIRAGANA LETTER DE
+3069 ; Expands_On_NFD # Lo HIRAGANA LETTER DO
+3070..3071 ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA
+3073..3074 ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI
+3076..3077 ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU
+3079..307A ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE
+307C..307D ; Expands_On_NFD # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO
+3094 ; Expands_On_NFD # Lo HIRAGANA LETTER VU
+309E ; Expands_On_NFD # Lm HIRAGANA VOICED ITERATION MARK
+30AC ; Expands_On_NFD # Lo KATAKANA LETTER GA
+30AE ; Expands_On_NFD # Lo KATAKANA LETTER GI
+30B0 ; Expands_On_NFD # Lo KATAKANA LETTER GU
+30B2 ; Expands_On_NFD # Lo KATAKANA LETTER GE
+30B4 ; Expands_On_NFD # Lo KATAKANA LETTER GO
+30B6 ; Expands_On_NFD # Lo KATAKANA LETTER ZA
+30B8 ; Expands_On_NFD # Lo KATAKANA LETTER ZI
+30BA ; Expands_On_NFD # Lo KATAKANA LETTER ZU
+30BC ; Expands_On_NFD # Lo KATAKANA LETTER ZE
+30BE ; Expands_On_NFD # Lo KATAKANA LETTER ZO
+30C0 ; Expands_On_NFD # Lo KATAKANA LETTER DA
+30C2 ; Expands_On_NFD # Lo KATAKANA LETTER DI
+30C5 ; Expands_On_NFD # Lo KATAKANA LETTER DU
+30C7 ; Expands_On_NFD # Lo KATAKANA LETTER DE
+30C9 ; Expands_On_NFD # Lo KATAKANA LETTER DO
+30D0..30D1 ; Expands_On_NFD # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA
+30D3..30D4 ; Expands_On_NFD # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI
+30D6..30D7 ; Expands_On_NFD # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU
+30D9..30DA ; Expands_On_NFD # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE
+30DC..30DD ; Expands_On_NFD # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO
+30F4 ; Expands_On_NFD # Lo KATAKANA LETTER VU
+30F7..30FA ; Expands_On_NFD # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO
+30FE ; Expands_On_NFD # Lm KATAKANA VOICED ITERATION MARK
+AC00..D7A3 ; Expands_On_NFD # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+FB1D ; Expands_On_NFD # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; Expands_On_NFD # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; Expands_On_NFD # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Expands_On_NFD # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Expands_On_NFD # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Expands_On_NFD # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Expands_On_NFD # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4E ; Expands_On_NFD # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE
+1109A ; Expands_On_NFD # Lo KAITHI LETTER DDDHA
+1109C ; Expands_On_NFD # Lo KAITHI LETTER RHA
+110AB ; Expands_On_NFD # Lo KAITHI LETTER VA
+1112E..1112F ; Expands_On_NFD # Mn [2] CHAKMA VOWEL SIGN O..CHAKMA VOWEL SIGN AU
+1134B..1134C ; Expands_On_NFD # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+114BB..114BC ; Expands_On_NFD # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
+114BE ; Expands_On_NFD # Mc TIRHUTA VOWEL SIGN AU
+115BA..115BB ; Expands_On_NFD # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; Expands_On_NFD # Mc DIVES AKURU VOWEL SIGN O
+1D15E..1D164 ; Expands_On_NFD # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; Expands_On_NFD # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+
+# Total code points: 12216
+
+# ================================================
+
+# Derived Property: Expands_On_NFC (DEPRECATED as of Unicode 6.0.0)
+# Generated according to UAX #15.
+# Characters whose normalized length is not one.
+# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact.
+# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters!
+
+0344 ; Expands_On_NFC # Mn COMBINING GREEK DIALYTIKA TONOS
+0958..095F ; Expands_On_NFC # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD ; Expands_On_NFC # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Expands_On_NFC # Lo BENGALI LETTER YYA
+0A33 ; Expands_On_NFC # Lo GURMUKHI LETTER LLA
+0A36 ; Expands_On_NFC # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Expands_On_NFC # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Expands_On_NFC # Lo GURMUKHI LETTER FA
+0B5C..0B5D ; Expands_On_NFC # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0F43 ; Expands_On_NFC # Lo TIBETAN LETTER GHA
+0F4D ; Expands_On_NFC # Lo TIBETAN LETTER DDHA
+0F52 ; Expands_On_NFC # Lo TIBETAN LETTER DHA
+0F57 ; Expands_On_NFC # Lo TIBETAN LETTER BHA
+0F5C ; Expands_On_NFC # Lo TIBETAN LETTER DZHA
+0F69 ; Expands_On_NFC # Lo TIBETAN LETTER KSSA
+0F73 ; Expands_On_NFC # Mn TIBETAN VOWEL SIGN II
+0F75..0F76 ; Expands_On_NFC # Mn [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78 ; Expands_On_NFC # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F81 ; Expands_On_NFC # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Expands_On_NFC # Mn TIBETAN SUBJOINED LETTER KSSA
+2ADC ; Expands_On_NFC # Sm FORKING
+FB1D ; Expands_On_NFC # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; Expands_On_NFC # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; Expands_On_NFC # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Expands_On_NFC # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Expands_On_NFC # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Expands_On_NFC # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Expands_On_NFC # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4E ; Expands_On_NFC # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LETTER PE WITH RAFE
+1D15E..1D164 ; Expands_On_NFC # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; Expands_On_NFC # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+
+# Total code points: 85
+
+# ================================================
+
+# Derived Property: Expands_On_NFKD (DEPRECATED as of Unicode 6.0.0)
+# Generated according to UAX #15.
+# Characters whose normalized length is not one.
+# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact.
+# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters!
+
+00A8 ; Expands_On_NFKD # Sk DIAERESIS
+00AF ; Expands_On_NFKD # Sk MACRON
+00B4 ; Expands_On_NFKD # Sk ACUTE ACCENT
+00B8 ; Expands_On_NFKD # Sk CEDILLA
+00BC..00BE ; Expands_On_NFKD # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00C0..00C5 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+00C7..00CF ; Expands_On_NFKD # L& [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+00D1..00D6 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D9..00DD ; Expands_On_NFKD # L& [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+00E0..00E5 ; Expands_On_NFKD # L& [6] LATIN SMALL LETTER A WITH GRAVE..LATIN SMALL LETTER A WITH RING ABOVE
+00E7..00EF ; Expands_On_NFKD # L& [9] LATIN SMALL LETTER C WITH CEDILLA..LATIN SMALL LETTER I WITH DIAERESIS
+00F1..00F6 ; Expands_On_NFKD # L& [6] LATIN SMALL LETTER N WITH TILDE..LATIN SMALL LETTER O WITH DIAERESIS
+00F9..00FD ; Expands_On_NFKD # L& [5] LATIN SMALL LETTER U WITH GRAVE..LATIN SMALL LETTER Y WITH ACUTE
+00FF..010F ; Expands_On_NFKD # L& [17] LATIN SMALL LETTER Y WITH DIAERESIS..LATIN SMALL LETTER D WITH CARON
+0112..0125 ; Expands_On_NFKD # L& [20] LATIN CAPITAL LETTER E WITH MACRON..LATIN SMALL LETTER H WITH CIRCUMFLEX
+0128..0130 ; Expands_On_NFKD # L& [9] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132..0137 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LETTER K WITH CEDILLA
+0139..0140 ; Expands_On_NFKD # L& [8] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH MIDDLE DOT
+0143..0149 ; Expands_On_NFKD # L& [7] LATIN CAPITAL LETTER N WITH ACUTE..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014C..0151 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER O WITH MACRON..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0154..0165 ; Expands_On_NFKD # L& [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+0168..017E ; Expands_On_NFKD # L& [23] LATIN CAPITAL LETTER U WITH TILDE..LATIN SMALL LETTER Z WITH CARON
+01A0..01A1 ; Expands_On_NFKD # L& [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0 ; Expands_On_NFKD # L& [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01C4..01DC ; Expands_On_NFKD # L& [25] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3 ; Expands_On_NFKD # L& [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F5 ; Expands_On_NFKD # L& [16] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER G WITH ACUTE
+01F8..021B ; Expands_On_NFKD # L& [36] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F ; Expands_On_NFKD # L& [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233 ; Expands_On_NFKD # L& [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+02D8..02DD ; Expands_On_NFKD # Sk [6] BREVE..DOUBLE ACUTE ACCENT
+0344 ; Expands_On_NFKD # Mn COMBINING GREEK DIALYTIKA TONOS
+037A ; Expands_On_NFKD # Lm GREEK YPOGEGRAMMENI
+0384..0385 ; Expands_On_NFKD # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386 ; Expands_On_NFKD # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A ; Expands_On_NFKD # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Expands_On_NFKD # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..0390 ; Expands_On_NFKD # L& [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+03AA..03B0 ; Expands_On_NFKD # L& [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+03CA..03CE ; Expands_On_NFKD # L& [5] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER OMEGA WITH TONOS
+03D3..03D4 ; Expands_On_NFKD # L& [2] GREEK UPSILON WITH ACUTE AND HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+0400..0401 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER IE WITH GRAVE..CYRILLIC CAPITAL LETTER IO
+0403 ; Expands_On_NFKD # L& CYRILLIC CAPITAL LETTER GJE
+0407 ; Expands_On_NFKD # L& CYRILLIC CAPITAL LETTER YI
+040C..040E ; Expands_On_NFKD # L& [3] CYRILLIC CAPITAL LETTER KJE..CYRILLIC CAPITAL LETTER SHORT U
+0419 ; Expands_On_NFKD # L& CYRILLIC CAPITAL LETTER SHORT I
+0439 ; Expands_On_NFKD # L& CYRILLIC SMALL LETTER SHORT I
+0450..0451 ; Expands_On_NFKD # L& [2] CYRILLIC SMALL LETTER IE WITH GRAVE..CYRILLIC SMALL LETTER IO
+0453 ; Expands_On_NFKD # L& CYRILLIC SMALL LETTER GJE
+0457 ; Expands_On_NFKD # L& CYRILLIC SMALL LETTER YI
+045C..045E ; Expands_On_NFKD # L& [3] CYRILLIC SMALL LETTER KJE..CYRILLIC SMALL LETTER SHORT U
+0476..0477 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT..CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+04C1..04C2 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER ZHE WITH BREVE..CYRILLIC SMALL LETTER ZHE WITH BREVE
+04D0..04D3 ; Expands_On_NFKD # L& [4] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER A WITH DIAERESIS
+04D6..04D7 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER IE WITH BREVE..CYRILLIC SMALL LETTER IE WITH BREVE
+04DA..04DF ; Expands_On_NFKD # L& [6] CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS..CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+04E2..04E7 ; Expands_On_NFKD # L& [6] CYRILLIC CAPITAL LETTER I WITH MACRON..CYRILLIC SMALL LETTER O WITH DIAERESIS
+04EA..04F5 ; Expands_On_NFKD # L& [12] CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F8..04F9 ; Expands_On_NFKD # L& [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+0587 ; Expands_On_NFKD # L& ARMENIAN SMALL LIGATURE ECH YIWN
+0622..0626 ; Expands_On_NFKD # Lo [5] ARABIC LETTER ALEF WITH MADDA ABOVE..ARABIC LETTER YEH WITH HAMZA ABOVE
+0675..0678 ; Expands_On_NFKD # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+06C0 ; Expands_On_NFKD # Lo ARABIC LETTER HEH WITH YEH ABOVE
+06C2 ; Expands_On_NFKD # Lo ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+06D3 ; Expands_On_NFKD # Lo ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+0929 ; Expands_On_NFKD # Lo DEVANAGARI LETTER NNNA
+0931 ; Expands_On_NFKD # Lo DEVANAGARI LETTER RRA
+0934 ; Expands_On_NFKD # Lo DEVANAGARI LETTER LLLA
+0958..095F ; Expands_On_NFKD # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09CB..09CC ; Expands_On_NFKD # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09DC..09DD ; Expands_On_NFKD # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Expands_On_NFKD # Lo BENGALI LETTER YYA
+0A33 ; Expands_On_NFKD # Lo GURMUKHI LETTER LLA
+0A36 ; Expands_On_NFKD # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Expands_On_NFKD # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Expands_On_NFKD # Lo GURMUKHI LETTER FA
+0B48 ; Expands_On_NFKD # Mc ORIYA VOWEL SIGN AI
+0B4B..0B4C ; Expands_On_NFKD # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+0B5C..0B5D ; Expands_On_NFKD # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0B94 ; Expands_On_NFKD # Lo TAMIL LETTER AU
+0BCA..0BCC ; Expands_On_NFKD # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+0C48 ; Expands_On_NFKD # Mn TELUGU VOWEL SIGN AI
+0CC0 ; Expands_On_NFKD # Mc KANNADA VOWEL SIGN II
+0CC7..0CC8 ; Expands_On_NFKD # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+0CCA..0CCB ; Expands_On_NFKD # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+0D4A..0D4C ; Expands_On_NFKD # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+0DDA ; Expands_On_NFKD # Mc SINHALA VOWEL SIGN DIGA KOMBUVA
+0DDC..0DDE ; Expands_On_NFKD # Mc [3] SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0E33 ; Expands_On_NFKD # Lo THAI CHARACTER SARA AM
+0EB3 ; Expands_On_NFKD # Lo LAO VOWEL SIGN AM
+0EDC..0EDD ; Expands_On_NFKD # Lo [2] LAO HO NO..LAO HO MO
+0F43 ; Expands_On_NFKD # Lo TIBETAN LETTER GHA
+0F4D ; Expands_On_NFKD # Lo TIBETAN LETTER DDHA
+0F52 ; Expands_On_NFKD # Lo TIBETAN LETTER DHA
+0F57 ; Expands_On_NFKD # Lo TIBETAN LETTER BHA
+0F5C ; Expands_On_NFKD # Lo TIBETAN LETTER DZHA
+0F69 ; Expands_On_NFKD # Lo TIBETAN LETTER KSSA
+0F73 ; Expands_On_NFKD # Mn TIBETAN VOWEL SIGN II
+0F75..0F79 ; Expands_On_NFKD # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; Expands_On_NFKD # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Expands_On_NFKD # Mn TIBETAN SUBJOINED LETTER KSSA
+1026 ; Expands_On_NFKD # Lo MYANMAR LETTER UU
+1B06 ; Expands_On_NFKD # Lo BALINESE LETTER AKARA TEDUNG
+1B08 ; Expands_On_NFKD # Lo BALINESE LETTER IKARA TEDUNG
+1B0A ; Expands_On_NFKD # Lo BALINESE LETTER UKARA TEDUNG
+1B0C ; Expands_On_NFKD # Lo BALINESE LETTER RA REPA TEDUNG
+1B0E ; Expands_On_NFKD # Lo BALINESE LETTER LA LENGA TEDUNG
+1B12 ; Expands_On_NFKD # Lo BALINESE LETTER OKARA TEDUNG
+1B3B ; Expands_On_NFKD # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+1B3D ; Expands_On_NFKD # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG
+1B40..1B41 ; Expands_On_NFKD # Mc [2] BALINESE VOWEL SIGN TALING TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+1B43 ; Expands_On_NFKD # Mc BALINESE VOWEL SIGN PEPET TEDUNG
+1E00..1E9B ; Expands_On_NFKD # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1EA0..1EF9 ; Expands_On_NFKD # L& [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15 ; Expands_On_NFKD # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D ; Expands_On_NFKD # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45 ; Expands_On_NFKD # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D ; Expands_On_NFKD # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57 ; Expands_On_NFKD # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59 ; Expands_On_NFKD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Expands_On_NFKD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Expands_On_NFKD # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F7D ; Expands_On_NFKD # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FB4 ; Expands_On_NFKD # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBC ; Expands_On_NFKD # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; Expands_On_NFKD # Sk GREEK KORONIS
+1FBF..1FC1 ; Expands_On_NFKD # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Expands_On_NFKD # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FCC ; Expands_On_NFKD # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Expands_On_NFKD # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD0..1FD3 ; Expands_On_NFKD # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD6..1FDB ; Expands_On_NFKD # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Expands_On_NFKD # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE0..1FEC ; Expands_On_NFKD # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEE ; Expands_On_NFKD # Sk [2] GREEK DIALYTIKA AND VARIA..GREEK DIALYTIKA AND OXIA
+1FF2..1FF4 ; Expands_On_NFKD # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FFC ; Expands_On_NFKD # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE ; Expands_On_NFKD # Sk [2] GREEK OXIA..GREEK DASIA
+2017 ; Expands_On_NFKD # Po DOUBLE LOW LINE
+2025..2026 ; Expands_On_NFKD # Po [2] TWO DOT LEADER..HORIZONTAL ELLIPSIS
+2033..2034 ; Expands_On_NFKD # Po [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037 ; Expands_On_NFKD # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C ; Expands_On_NFKD # Po DOUBLE EXCLAMATION MARK
+203E ; Expands_On_NFKD # Po OVERLINE
+2047..2049 ; Expands_On_NFKD # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2057 ; Expands_On_NFKD # Po QUADRUPLE PRIME
+20A8 ; Expands_On_NFKD # Sc RUPEE SIGN
+2100..2101 ; Expands_On_NFKD # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2103 ; Expands_On_NFKD # So DEGREE CELSIUS
+2105..2106 ; Expands_On_NFKD # So [2] CARE OF..CADA UNA
+2109 ; Expands_On_NFKD # So DEGREE FAHRENHEIT
+2116 ; Expands_On_NFKD # So NUMERO SIGN
+2120..2122 ; Expands_On_NFKD # So [3] SERVICE MARK..TRADE MARK SIGN
+212B ; Expands_On_NFKD # L& ANGSTROM SIGN
+213B ; Expands_On_NFKD # So FACSIMILE SIGN
+2150..215F ; Expands_On_NFKD # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2161..2163 ; Expands_On_NFKD # Nl [3] ROMAN NUMERAL TWO..ROMAN NUMERAL FOUR
+2165..2168 ; Expands_On_NFKD # Nl [4] ROMAN NUMERAL SIX..ROMAN NUMERAL NINE
+216A..216B ; Expands_On_NFKD # Nl [2] ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TWELVE
+2171..2173 ; Expands_On_NFKD # Nl [3] SMALL ROMAN NUMERAL TWO..SMALL ROMAN NUMERAL FOUR
+2175..2178 ; Expands_On_NFKD # Nl [4] SMALL ROMAN NUMERAL SIX..SMALL ROMAN NUMERAL NINE
+217A..217B ; Expands_On_NFKD # Nl [2] SMALL ROMAN NUMERAL ELEVEN..SMALL ROMAN NUMERAL TWELVE
+2189 ; Expands_On_NFKD # No VULGAR FRACTION ZERO THIRDS
+219A..219B ; Expands_On_NFKD # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+21AE ; Expands_On_NFKD # Sm LEFT RIGHT ARROW WITH STROKE
+21CD ; Expands_On_NFKD # So LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF ; Expands_On_NFKD # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+2204 ; Expands_On_NFKD # Sm THERE DOES NOT EXIST
+2209 ; Expands_On_NFKD # Sm NOT AN ELEMENT OF
+220C ; Expands_On_NFKD # Sm DOES NOT CONTAIN AS MEMBER
+2224 ; Expands_On_NFKD # Sm DOES NOT DIVIDE
+2226 ; Expands_On_NFKD # Sm NOT PARALLEL TO
+222C..222D ; Expands_On_NFKD # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230 ; Expands_On_NFKD # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2241 ; Expands_On_NFKD # Sm NOT TILDE
+2244 ; Expands_On_NFKD # Sm NOT ASYMPTOTICALLY EQUAL TO
+2247 ; Expands_On_NFKD # Sm NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+2249 ; Expands_On_NFKD # Sm NOT ALMOST EQUAL TO
+2260 ; Expands_On_NFKD # Sm NOT EQUAL TO
+2262 ; Expands_On_NFKD # Sm NOT IDENTICAL TO
+226D..2271 ; Expands_On_NFKD # Sm [5] NOT EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUAL TO
+2274..2275 ; Expands_On_NFKD # Sm [2] NEITHER LESS-THAN NOR EQUIVALENT TO..NEITHER GREATER-THAN NOR EQUIVALENT TO
+2278..2279 ; Expands_On_NFKD # Sm [2] NEITHER LESS-THAN NOR GREATER-THAN..NEITHER GREATER-THAN NOR LESS-THAN
+2280..2281 ; Expands_On_NFKD # Sm [2] DOES NOT PRECEDE..DOES NOT SUCCEED
+2284..2285 ; Expands_On_NFKD # Sm [2] NOT A SUBSET OF..NOT A SUPERSET OF
+2288..2289 ; Expands_On_NFKD # Sm [2] NEITHER A SUBSET OF NOR EQUAL TO..NEITHER A SUPERSET OF NOR EQUAL TO
+22AC..22AF ; Expands_On_NFKD # Sm [4] DOES NOT PROVE..NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+22E0..22E3 ; Expands_On_NFKD # Sm [4] DOES NOT PRECEDE OR EQUAL..NOT SQUARE ORIGINAL OF OR EQUAL TO
+22EA..22ED ; Expands_On_NFKD # Sm [4] NOT NORMAL SUBGROUP OF..DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+2469..249B ; Expands_On_NFKD # No [51] CIRCLED NUMBER TEN..NUMBER TWENTY FULL STOP
+249C..24B5 ; Expands_On_NFKD # So [26] PARENTHESIZED LATIN SMALL LETTER A..PARENTHESIZED LATIN SMALL LETTER Z
+2A0C ; Expands_On_NFKD # Sm QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76 ; Expands_On_NFKD # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2ADC ; Expands_On_NFKD # Sm FORKING
+304C ; Expands_On_NFKD # Lo HIRAGANA LETTER GA
+304E ; Expands_On_NFKD # Lo HIRAGANA LETTER GI
+3050 ; Expands_On_NFKD # Lo HIRAGANA LETTER GU
+3052 ; Expands_On_NFKD # Lo HIRAGANA LETTER GE
+3054 ; Expands_On_NFKD # Lo HIRAGANA LETTER GO
+3056 ; Expands_On_NFKD # Lo HIRAGANA LETTER ZA
+3058 ; Expands_On_NFKD # Lo HIRAGANA LETTER ZI
+305A ; Expands_On_NFKD # Lo HIRAGANA LETTER ZU
+305C ; Expands_On_NFKD # Lo HIRAGANA LETTER ZE
+305E ; Expands_On_NFKD # Lo HIRAGANA LETTER ZO
+3060 ; Expands_On_NFKD # Lo HIRAGANA LETTER DA
+3062 ; Expands_On_NFKD # Lo HIRAGANA LETTER DI
+3065 ; Expands_On_NFKD # Lo HIRAGANA LETTER DU
+3067 ; Expands_On_NFKD # Lo HIRAGANA LETTER DE
+3069 ; Expands_On_NFKD # Lo HIRAGANA LETTER DO
+3070..3071 ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BA..HIRAGANA LETTER PA
+3073..3074 ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BI..HIRAGANA LETTER PI
+3076..3077 ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BU..HIRAGANA LETTER PU
+3079..307A ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BE..HIRAGANA LETTER PE
+307C..307D ; Expands_On_NFKD # Lo [2] HIRAGANA LETTER BO..HIRAGANA LETTER PO
+3094 ; Expands_On_NFKD # Lo HIRAGANA LETTER VU
+309B..309C ; Expands_On_NFKD # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309E ; Expands_On_NFKD # Lm HIRAGANA VOICED ITERATION MARK
+309F ; Expands_On_NFKD # Lo HIRAGANA DIGRAPH YORI
+30AC ; Expands_On_NFKD # Lo KATAKANA LETTER GA
+30AE ; Expands_On_NFKD # Lo KATAKANA LETTER GI
+30B0 ; Expands_On_NFKD # Lo KATAKANA LETTER GU
+30B2 ; Expands_On_NFKD # Lo KATAKANA LETTER GE
+30B4 ; Expands_On_NFKD # Lo KATAKANA LETTER GO
+30B6 ; Expands_On_NFKD # Lo KATAKANA LETTER ZA
+30B8 ; Expands_On_NFKD # Lo KATAKANA LETTER ZI
+30BA ; Expands_On_NFKD # Lo KATAKANA LETTER ZU
+30BC ; Expands_On_NFKD # Lo KATAKANA LETTER ZE
+30BE ; Expands_On_NFKD # Lo KATAKANA LETTER ZO
+30C0 ; Expands_On_NFKD # Lo KATAKANA LETTER DA
+30C2 ; Expands_On_NFKD # Lo KATAKANA LETTER DI
+30C5 ; Expands_On_NFKD # Lo KATAKANA LETTER DU
+30C7 ; Expands_On_NFKD # Lo KATAKANA LETTER DE
+30C9 ; Expands_On_NFKD # Lo KATAKANA LETTER DO
+30D0..30D1 ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BA..KATAKANA LETTER PA
+30D3..30D4 ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BI..KATAKANA LETTER PI
+30D6..30D7 ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BU..KATAKANA LETTER PU
+30D9..30DA ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BE..KATAKANA LETTER PE
+30DC..30DD ; Expands_On_NFKD # Lo [2] KATAKANA LETTER BO..KATAKANA LETTER PO
+30F4 ; Expands_On_NFKD # Lo KATAKANA LETTER VU
+30F7..30FA ; Expands_On_NFKD # Lo [4] KATAKANA LETTER VA..KATAKANA LETTER VO
+30FE ; Expands_On_NFKD # Lm KATAKANA VOICED ITERATION MARK
+30FF ; Expands_On_NFKD # Lo KATAKANA DIGRAPH KOTO
+3200..321E ; Expands_On_NFKD # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; Expands_On_NFKD # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3243 ; Expands_On_NFKD # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
+3250 ; Expands_On_NFKD # So PARTNERSHIP SIGN
+3251..325F ; Expands_On_NFKD # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+326E..327E ; Expands_On_NFKD # So [17] CIRCLED HANGUL KIYEOK A..CIRCLED HANGUL IEUNG U
+32B1..32BF ; Expands_On_NFKD # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32CF ; Expands_On_NFKD # So [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN
+32FF..33FF ; Expands_On_NFKD # So [257] SQUARE ERA NAME REIWA..SQUARE GAL
+AC00..D7A3 ; Expands_On_NFKD # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+FB00..FB06 ; Expands_On_NFKD # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Expands_On_NFKD # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; Expands_On_NFKD # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; Expands_On_NFKD # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; Expands_On_NFKD # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Expands_On_NFKD # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Expands_On_NFKD # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Expands_On_NFKD # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Expands_On_NFKD # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F ; Expands_On_NFKD # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+FBA4..FBA5 ; Expands_On_NFKD # Lo [2] ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM..ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBB0..FBB1 ; Expands_On_NFKD # Lo [2] ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBDD ; Expands_On_NFKD # Lo ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBEA..FBFB ; Expands_On_NFKD # Lo [18] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FC00..FD3D ; Expands_On_NFKD # Lo [318] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; Expands_On_NFKD # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Expands_On_NFKD # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; Expands_On_NFKD # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Expands_On_NFKD # Sc RIAL SIGN
+FE19 ; Expands_On_NFKD # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; Expands_On_NFKD # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE49..FE4C ; Expands_On_NFKD # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE70..FE72 ; Expands_On_NFKD # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
+FE74 ; Expands_On_NFKD # Lo ARABIC KASRATAN ISOLATED FORM
+FE76..FE7F ; Expands_On_NFKD # Lo [10] ARABIC FATHA ISOLATED FORM..ARABIC SUKUN MEDIAL FORM
+FE81..FE8C ; Expands_On_NFKD # Lo [12] ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FEF5..FEFC ; Expands_On_NFKD # Lo [8] ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FFE3 ; Expands_On_NFKD # Sk FULLWIDTH MACRON
+1109A ; Expands_On_NFKD # Lo KAITHI LETTER DDDHA
+1109C ; Expands_On_NFKD # Lo KAITHI LETTER RHA
+110AB ; Expands_On_NFKD # Lo KAITHI LETTER VA
+1112E..1112F ; Expands_On_NFKD # Mn [2] CHAKMA VOWEL SIGN O..CHAKMA VOWEL SIGN AU
+1134B..1134C ; Expands_On_NFKD # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU
+114BB..114BC ; Expands_On_NFKD # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
+114BE ; Expands_On_NFKD # Mc TIRHUTA VOWEL SIGN AU
+115BA..115BB ; Expands_On_NFKD # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; Expands_On_NFKD # Mc DIVES AKURU VOWEL SIGN O
+1D15E..1D164 ; Expands_On_NFKD # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; Expands_On_NFKD # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+1F100..1F10A ; Expands_On_NFKD # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12A ; Expands_On_NFKD # So [27] PARENTHESIZED LATIN CAPITAL LETTER A..TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
+1F12D..1F12E ; Expands_On_NFKD # So [2] CIRCLED CD..CIRCLED WZ
+1F14A..1F14F ; Expands_On_NFKD # So [6] SQUARED HV..SQUARED WC
+1F16A..1F16C ; Expands_On_NFKD # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F190 ; Expands_On_NFKD # So SQUARE DJ
+1F200..1F201 ; Expands_On_NFKD # So [2] SQUARE HIRAGANA HOKA..SQUARED KATAKANA KOKO
+1F213 ; Expands_On_NFKD # So SQUARED KATAKANA DE
+1F240..1F248 ; Expands_On_NFKD # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+
+# Total code points: 13390
+
+# ================================================
+
+# Derived Property: Expands_On_NFKC (DEPRECATED as of Unicode 6.0.0)
+# Generated according to UAX #15.
+# Characters whose normalized length is not one.
+# WARNING: Normalization of STRINGS must use the algorithm in UAX #15 because characters may interact.
+# The length of a normalized string is not necessarily the sum of the lengths of the normalized characters!
+
+00A8 ; Expands_On_NFKC # Sk DIAERESIS
+00AF ; Expands_On_NFKC # Sk MACRON
+00B4 ; Expands_On_NFKC # Sk ACUTE ACCENT
+00B8 ; Expands_On_NFKC # Sk CEDILLA
+00BC..00BE ; Expands_On_NFKC # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+0132..0133 ; Expands_On_NFKC # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ
+013F..0140 ; Expands_On_NFKC # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT
+0149 ; Expands_On_NFKC # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+01C4..01CC ; Expands_On_NFKC # L& [9] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER NJ
+01F1..01F3 ; Expands_On_NFKC # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ
+02D8..02DD ; Expands_On_NFKC # Sk [6] BREVE..DOUBLE ACUTE ACCENT
+0344 ; Expands_On_NFKC # Mn COMBINING GREEK DIALYTIKA TONOS
+037A ; Expands_On_NFKC # Lm GREEK YPOGEGRAMMENI
+0384..0385 ; Expands_On_NFKC # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0587 ; Expands_On_NFKC # L& ARMENIAN SMALL LIGATURE ECH YIWN
+0675..0678 ; Expands_On_NFKC # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+0958..095F ; Expands_On_NFKC # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD ; Expands_On_NFKC # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Expands_On_NFKC # Lo BENGALI LETTER YYA
+0A33 ; Expands_On_NFKC # Lo GURMUKHI LETTER LLA
+0A36 ; Expands_On_NFKC # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Expands_On_NFKC # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Expands_On_NFKC # Lo GURMUKHI LETTER FA
+0B5C..0B5D ; Expands_On_NFKC # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0E33 ; Expands_On_NFKC # Lo THAI CHARACTER SARA AM
+0EB3 ; Expands_On_NFKC # Lo LAO VOWEL SIGN AM
+0EDC..0EDD ; Expands_On_NFKC # Lo [2] LAO HO NO..LAO HO MO
+0F43 ; Expands_On_NFKC # Lo TIBETAN LETTER GHA
+0F4D ; Expands_On_NFKC # Lo TIBETAN LETTER DDHA
+0F52 ; Expands_On_NFKC # Lo TIBETAN LETTER DHA
+0F57 ; Expands_On_NFKC # Lo TIBETAN LETTER BHA
+0F5C ; Expands_On_NFKC # Lo TIBETAN LETTER DZHA
+0F69 ; Expands_On_NFKC # Lo TIBETAN LETTER KSSA
+0F73 ; Expands_On_NFKC # Mn TIBETAN VOWEL SIGN II
+0F75..0F79 ; Expands_On_NFKC # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; Expands_On_NFKC # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Expands_On_NFKC # Mn TIBETAN SUBJOINED LETTER KSSA
+1E9A ; Expands_On_NFKC # L& LATIN SMALL LETTER A WITH RIGHT HALF RING
+1FBD ; Expands_On_NFKC # Sk GREEK KORONIS
+1FBF..1FC1 ; Expands_On_NFKC # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FCD..1FCF ; Expands_On_NFKC # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FDD..1FDF ; Expands_On_NFKC # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FED..1FEE ; Expands_On_NFKC # Sk [2] GREEK DIALYTIKA AND VARIA..GREEK DIALYTIKA AND OXIA
+1FFD..1FFE ; Expands_On_NFKC # Sk [2] GREEK OXIA..GREEK DASIA
+2017 ; Expands_On_NFKC # Po DOUBLE LOW LINE
+2025..2026 ; Expands_On_NFKC # Po [2] TWO DOT LEADER..HORIZONTAL ELLIPSIS
+2033..2034 ; Expands_On_NFKC # Po [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037 ; Expands_On_NFKC # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C ; Expands_On_NFKC # Po DOUBLE EXCLAMATION MARK
+203E ; Expands_On_NFKC # Po OVERLINE
+2047..2049 ; Expands_On_NFKC # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2057 ; Expands_On_NFKC # Po QUADRUPLE PRIME
+20A8 ; Expands_On_NFKC # Sc RUPEE SIGN
+2100..2101 ; Expands_On_NFKC # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2103 ; Expands_On_NFKC # So DEGREE CELSIUS
+2105..2106 ; Expands_On_NFKC # So [2] CARE OF..CADA UNA
+2109 ; Expands_On_NFKC # So DEGREE FAHRENHEIT
+2116 ; Expands_On_NFKC # So NUMERO SIGN
+2120..2122 ; Expands_On_NFKC # So [3] SERVICE MARK..TRADE MARK SIGN
+213B ; Expands_On_NFKC # So FACSIMILE SIGN
+2150..215F ; Expands_On_NFKC # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2161..2163 ; Expands_On_NFKC # Nl [3] ROMAN NUMERAL TWO..ROMAN NUMERAL FOUR
+2165..2168 ; Expands_On_NFKC # Nl [4] ROMAN NUMERAL SIX..ROMAN NUMERAL NINE
+216A..216B ; Expands_On_NFKC # Nl [2] ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TWELVE
+2171..2173 ; Expands_On_NFKC # Nl [3] SMALL ROMAN NUMERAL TWO..SMALL ROMAN NUMERAL FOUR
+2175..2178 ; Expands_On_NFKC # Nl [4] SMALL ROMAN NUMERAL SIX..SMALL ROMAN NUMERAL NINE
+217A..217B ; Expands_On_NFKC # Nl [2] SMALL ROMAN NUMERAL ELEVEN..SMALL ROMAN NUMERAL TWELVE
+2189 ; Expands_On_NFKC # No VULGAR FRACTION ZERO THIRDS
+222C..222D ; Expands_On_NFKC # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230 ; Expands_On_NFKC # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2469..249B ; Expands_On_NFKC # No [51] CIRCLED NUMBER TEN..NUMBER TWENTY FULL STOP
+249C..24B5 ; Expands_On_NFKC # So [26] PARENTHESIZED LATIN SMALL LETTER A..PARENTHESIZED LATIN SMALL LETTER Z
+2A0C ; Expands_On_NFKC # Sm QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76 ; Expands_On_NFKC # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2ADC ; Expands_On_NFKC # Sm FORKING
+309B..309C ; Expands_On_NFKC # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309F ; Expands_On_NFKC # Lo HIRAGANA DIGRAPH YORI
+30FF ; Expands_On_NFKC # Lo KATAKANA DIGRAPH KOTO
+3200..321E ; Expands_On_NFKC # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; Expands_On_NFKC # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3243 ; Expands_On_NFKC # So [26] PARENTHESIZED IDEOGRAPH MOON..PARENTHESIZED IDEOGRAPH REACH
+3250 ; Expands_On_NFKC # So PARTNERSHIP SIGN
+3251..325F ; Expands_On_NFKC # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+327C..327D ; Expands_On_NFKC # So [2] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED KOREAN CHARACTER JUEUI
+32B1..32BF ; Expands_On_NFKC # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32CF ; Expands_On_NFKC # So [16] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..LIMITED LIABILITY SIGN
+32FF..33FF ; Expands_On_NFKC # So [257] SQUARE ERA NAME REIWA..SQUARE GAL
+FB00..FB06 ; Expands_On_NFKC # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Expands_On_NFKC # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; Expands_On_NFKC # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; Expands_On_NFKC # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A..FB36 ; Expands_On_NFKC # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Expands_On_NFKC # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Expands_On_NFKC # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Expands_On_NFKC # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Expands_On_NFKC # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FB4F ; Expands_On_NFKC # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+FBDD ; Expands_On_NFKC # Lo ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBEA..FBFB ; Expands_On_NFKC # Lo [18] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FC00..FD3D ; Expands_On_NFKC # Lo [318] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; Expands_On_NFKC # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Expands_On_NFKC # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; Expands_On_NFKC # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Expands_On_NFKC # Sc RIAL SIGN
+FE19 ; Expands_On_NFKC # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; Expands_On_NFKC # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE49..FE4C ; Expands_On_NFKC # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE70..FE72 ; Expands_On_NFKC # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
+FE74 ; Expands_On_NFKC # Lo ARABIC KASRATAN ISOLATED FORM
+FE76..FE7F ; Expands_On_NFKC # Lo [10] ARABIC FATHA ISOLATED FORM..ARABIC SUKUN MEDIAL FORM
+FEF5..FEFC ; Expands_On_NFKC # Lo [8] ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FFE3 ; Expands_On_NFKC # Sk FULLWIDTH MACRON
+1D15E..1D164 ; Expands_On_NFKC # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0 ; Expands_On_NFKC # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+1F100..1F10A ; Expands_On_NFKC # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12A ; Expands_On_NFKC # So [27] PARENTHESIZED LATIN CAPITAL LETTER A..TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
+1F12D..1F12E ; Expands_On_NFKC # So [2] CIRCLED CD..CIRCLED WZ
+1F14A..1F14F ; Expands_On_NFKC # So [6] SQUARED HV..SQUARED WC
+1F16A..1F16C ; Expands_On_NFKC # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F190 ; Expands_On_NFKC # So SQUARE DJ
+1F200..1F201 ; Expands_On_NFKC # So [2] SQUARE HIRAGANA HOKA..SQUARED KATAKANA KOKO
+1F240..1F248 ; Expands_On_NFKC # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+
+# Total code points: 1237
+
+# ================================================
+
+# Derived Property: NFKC_Casefold (NFKC_CF)
+# This property removes certain variations from characters: case, compatibility, and default-ignorables.
+# It is used for loose matching and certain types of identifiers.
+# It is constructed by applying NFKC, CaseFolding, and removal of Default_Ignorable_Code_Points.
+# The process of applying these transformations is repeated until a stable result is produced.
+# WARNING: Application to STRINGS must apply NFC after mapping each character, because characters may interact.
+# For more information, see [https://www.unicode.org/reports/tr44/]
+# Omitted code points are unchanged by this mapping.
+# @missing: 0000..10FFFF; NFKC_CF; <code point>
+
+# All code points not explicitly listed for NFKC_Casefold
+# have the value <codepoint>.
+
+0041 ; NFKC_CF; 0061 # L& LATIN CAPITAL LETTER A
+0042 ; NFKC_CF; 0062 # L& LATIN CAPITAL LETTER B
+0043 ; NFKC_CF; 0063 # L& LATIN CAPITAL LETTER C
+0044 ; NFKC_CF; 0064 # L& LATIN CAPITAL LETTER D
+0045 ; NFKC_CF; 0065 # L& LATIN CAPITAL LETTER E
+0046 ; NFKC_CF; 0066 # L& LATIN CAPITAL LETTER F
+0047 ; NFKC_CF; 0067 # L& LATIN CAPITAL LETTER G
+0048 ; NFKC_CF; 0068 # L& LATIN CAPITAL LETTER H
+0049 ; NFKC_CF; 0069 # L& LATIN CAPITAL LETTER I
+004A ; NFKC_CF; 006A # L& LATIN CAPITAL LETTER J
+004B ; NFKC_CF; 006B # L& LATIN CAPITAL LETTER K
+004C ; NFKC_CF; 006C # L& LATIN CAPITAL LETTER L
+004D ; NFKC_CF; 006D # L& LATIN CAPITAL LETTER M
+004E ; NFKC_CF; 006E # L& LATIN CAPITAL LETTER N
+004F ; NFKC_CF; 006F # L& LATIN CAPITAL LETTER O
+0050 ; NFKC_CF; 0070 # L& LATIN CAPITAL LETTER P
+0051 ; NFKC_CF; 0071 # L& LATIN CAPITAL LETTER Q
+0052 ; NFKC_CF; 0072 # L& LATIN CAPITAL LETTER R
+0053 ; NFKC_CF; 0073 # L& LATIN CAPITAL LETTER S
+0054 ; NFKC_CF; 0074 # L& LATIN CAPITAL LETTER T
+0055 ; NFKC_CF; 0075 # L& LATIN CAPITAL LETTER U
+0056 ; NFKC_CF; 0076 # L& LATIN CAPITAL LETTER V
+0057 ; NFKC_CF; 0077 # L& LATIN CAPITAL LETTER W
+0058 ; NFKC_CF; 0078 # L& LATIN CAPITAL LETTER X
+0059 ; NFKC_CF; 0079 # L& LATIN CAPITAL LETTER Y
+005A ; NFKC_CF; 007A # L& LATIN CAPITAL LETTER Z
+00A0 ; NFKC_CF; 0020 # Zs NO-BREAK SPACE
+00A8 ; NFKC_CF; 0020 0308 # Sk DIAERESIS
+00AA ; NFKC_CF; 0061 # Lo FEMININE ORDINAL INDICATOR
+00AD ; NFKC_CF; # Cf SOFT HYPHEN
+00AF ; NFKC_CF; 0020 0304 # Sk MACRON
+00B2 ; NFKC_CF; 0032 # No SUPERSCRIPT TWO
+00B3 ; NFKC_CF; 0033 # No SUPERSCRIPT THREE
+00B4 ; NFKC_CF; 0020 0301 # Sk ACUTE ACCENT
+00B5 ; NFKC_CF; 03BC # L& MICRO SIGN
+00B8 ; NFKC_CF; 0020 0327 # Sk CEDILLA
+00B9 ; NFKC_CF; 0031 # No SUPERSCRIPT ONE
+00BA ; NFKC_CF; 006F # Lo MASCULINE ORDINAL INDICATOR
+00BC ; NFKC_CF; 0031 2044 0034 # No VULGAR FRACTION ONE QUARTER
+00BD ; NFKC_CF; 0031 2044 0032 # No VULGAR FRACTION ONE HALF
+00BE ; NFKC_CF; 0033 2044 0034 # No VULGAR FRACTION THREE QUARTERS
+00C0 ; NFKC_CF; 00E0 # L& LATIN CAPITAL LETTER A WITH GRAVE
+00C1 ; NFKC_CF; 00E1 # L& LATIN CAPITAL LETTER A WITH ACUTE
+00C2 ; NFKC_CF; 00E2 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+00C3 ; NFKC_CF; 00E3 # L& LATIN CAPITAL LETTER A WITH TILDE
+00C4 ; NFKC_CF; 00E4 # L& LATIN CAPITAL LETTER A WITH DIAERESIS
+00C5 ; NFKC_CF; 00E5 # L& LATIN CAPITAL LETTER A WITH RING ABOVE
+00C6 ; NFKC_CF; 00E6 # L& LATIN CAPITAL LETTER AE
+00C7 ; NFKC_CF; 00E7 # L& LATIN CAPITAL LETTER C WITH CEDILLA
+00C8 ; NFKC_CF; 00E8 # L& LATIN CAPITAL LETTER E WITH GRAVE
+00C9 ; NFKC_CF; 00E9 # L& LATIN CAPITAL LETTER E WITH ACUTE
+00CA ; NFKC_CF; 00EA # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+00CB ; NFKC_CF; 00EB # L& LATIN CAPITAL LETTER E WITH DIAERESIS
+00CC ; NFKC_CF; 00EC # L& LATIN CAPITAL LETTER I WITH GRAVE
+00CD ; NFKC_CF; 00ED # L& LATIN CAPITAL LETTER I WITH ACUTE
+00CE ; NFKC_CF; 00EE # L& LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+00CF ; NFKC_CF; 00EF # L& LATIN CAPITAL LETTER I WITH DIAERESIS
+00D0 ; NFKC_CF; 00F0 # L& LATIN CAPITAL LETTER ETH
+00D1 ; NFKC_CF; 00F1 # L& LATIN CAPITAL LETTER N WITH TILDE
+00D2 ; NFKC_CF; 00F2 # L& LATIN CAPITAL LETTER O WITH GRAVE
+00D3 ; NFKC_CF; 00F3 # L& LATIN CAPITAL LETTER O WITH ACUTE
+00D4 ; NFKC_CF; 00F4 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+00D5 ; NFKC_CF; 00F5 # L& LATIN CAPITAL LETTER O WITH TILDE
+00D6 ; NFKC_CF; 00F6 # L& LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8 ; NFKC_CF; 00F8 # L& LATIN CAPITAL LETTER O WITH STROKE
+00D9 ; NFKC_CF; 00F9 # L& LATIN CAPITAL LETTER U WITH GRAVE
+00DA ; NFKC_CF; 00FA # L& LATIN CAPITAL LETTER U WITH ACUTE
+00DB ; NFKC_CF; 00FB # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+00DC ; NFKC_CF; 00FC # L& LATIN CAPITAL LETTER U WITH DIAERESIS
+00DD ; NFKC_CF; 00FD # L& LATIN CAPITAL LETTER Y WITH ACUTE
+00DE ; NFKC_CF; 00FE # L& LATIN CAPITAL LETTER THORN
+00DF ; NFKC_CF; 0073 0073 # L& LATIN SMALL LETTER SHARP S
+0100 ; NFKC_CF; 0101 # L& LATIN CAPITAL LETTER A WITH MACRON
+0102 ; NFKC_CF; 0103 # L& LATIN CAPITAL LETTER A WITH BREVE
+0104 ; NFKC_CF; 0105 # L& LATIN CAPITAL LETTER A WITH OGONEK
+0106 ; NFKC_CF; 0107 # L& LATIN CAPITAL LETTER C WITH ACUTE
+0108 ; NFKC_CF; 0109 # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A ; NFKC_CF; 010B # L& LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C ; NFKC_CF; 010D # L& LATIN CAPITAL LETTER C WITH CARON
+010E ; NFKC_CF; 010F # L& LATIN CAPITAL LETTER D WITH CARON
+0110 ; NFKC_CF; 0111 # L& LATIN CAPITAL LETTER D WITH STROKE
+0112 ; NFKC_CF; 0113 # L& LATIN CAPITAL LETTER E WITH MACRON
+0114 ; NFKC_CF; 0115 # L& LATIN CAPITAL LETTER E WITH BREVE
+0116 ; NFKC_CF; 0117 # L& LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118 ; NFKC_CF; 0119 # L& LATIN CAPITAL LETTER E WITH OGONEK
+011A ; NFKC_CF; 011B # L& LATIN CAPITAL LETTER E WITH CARON
+011C ; NFKC_CF; 011D # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E ; NFKC_CF; 011F # L& LATIN CAPITAL LETTER G WITH BREVE
+0120 ; NFKC_CF; 0121 # L& LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122 ; NFKC_CF; 0123 # L& LATIN CAPITAL LETTER G WITH CEDILLA
+0124 ; NFKC_CF; 0125 # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126 ; NFKC_CF; 0127 # L& LATIN CAPITAL LETTER H WITH STROKE
+0128 ; NFKC_CF; 0129 # L& LATIN CAPITAL LETTER I WITH TILDE
+012A ; NFKC_CF; 012B # L& LATIN CAPITAL LETTER I WITH MACRON
+012C ; NFKC_CF; 012D # L& LATIN CAPITAL LETTER I WITH BREVE
+012E ; NFKC_CF; 012F # L& LATIN CAPITAL LETTER I WITH OGONEK
+0130 ; NFKC_CF; 0069 0307 # L& LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132..0133 ; NFKC_CF; 0069 006A # L& [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ
+0134 ; NFKC_CF; 0135 # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136 ; NFKC_CF; 0137 # L& LATIN CAPITAL LETTER K WITH CEDILLA
+0139 ; NFKC_CF; 013A # L& LATIN CAPITAL LETTER L WITH ACUTE
+013B ; NFKC_CF; 013C # L& LATIN CAPITAL LETTER L WITH CEDILLA
+013D ; NFKC_CF; 013E # L& LATIN CAPITAL LETTER L WITH CARON
+013F..0140 ; NFKC_CF; 006C 00B7 # L& [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT
+0141 ; NFKC_CF; 0142 # L& LATIN CAPITAL LETTER L WITH STROKE
+0143 ; NFKC_CF; 0144 # L& LATIN CAPITAL LETTER N WITH ACUTE
+0145 ; NFKC_CF; 0146 # L& LATIN CAPITAL LETTER N WITH CEDILLA
+0147 ; NFKC_CF; 0148 # L& LATIN CAPITAL LETTER N WITH CARON
+0149 ; NFKC_CF; 02BC 006E # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+014A ; NFKC_CF; 014B # L& LATIN CAPITAL LETTER ENG
+014C ; NFKC_CF; 014D # L& LATIN CAPITAL LETTER O WITH MACRON
+014E ; NFKC_CF; 014F # L& LATIN CAPITAL LETTER O WITH BREVE
+0150 ; NFKC_CF; 0151 # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152 ; NFKC_CF; 0153 # L& LATIN CAPITAL LIGATURE OE
+0154 ; NFKC_CF; 0155 # L& LATIN CAPITAL LETTER R WITH ACUTE
+0156 ; NFKC_CF; 0157 # L& LATIN CAPITAL LETTER R WITH CEDILLA
+0158 ; NFKC_CF; 0159 # L& LATIN CAPITAL LETTER R WITH CARON
+015A ; NFKC_CF; 015B # L& LATIN CAPITAL LETTER S WITH ACUTE
+015C ; NFKC_CF; 015D # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E ; NFKC_CF; 015F # L& LATIN CAPITAL LETTER S WITH CEDILLA
+0160 ; NFKC_CF; 0161 # L& LATIN CAPITAL LETTER S WITH CARON
+0162 ; NFKC_CF; 0163 # L& LATIN CAPITAL LETTER T WITH CEDILLA
+0164 ; NFKC_CF; 0165 # L& LATIN CAPITAL LETTER T WITH CARON
+0166 ; NFKC_CF; 0167 # L& LATIN CAPITAL LETTER T WITH STROKE
+0168 ; NFKC_CF; 0169 # L& LATIN CAPITAL LETTER U WITH TILDE
+016A ; NFKC_CF; 016B # L& LATIN CAPITAL LETTER U WITH MACRON
+016C ; NFKC_CF; 016D # L& LATIN CAPITAL LETTER U WITH BREVE
+016E ; NFKC_CF; 016F # L& LATIN CAPITAL LETTER U WITH RING ABOVE
+0170 ; NFKC_CF; 0171 # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172 ; NFKC_CF; 0173 # L& LATIN CAPITAL LETTER U WITH OGONEK
+0174 ; NFKC_CF; 0175 # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176 ; NFKC_CF; 0177 # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178 ; NFKC_CF; 00FF # L& LATIN CAPITAL LETTER Y WITH DIAERESIS
+0179 ; NFKC_CF; 017A # L& LATIN CAPITAL LETTER Z WITH ACUTE
+017B ; NFKC_CF; 017C # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D ; NFKC_CF; 017E # L& LATIN CAPITAL LETTER Z WITH CARON
+017F ; NFKC_CF; 0073 # L& LATIN SMALL LETTER LONG S
+0181 ; NFKC_CF; 0253 # L& LATIN CAPITAL LETTER B WITH HOOK
+0182 ; NFKC_CF; 0183 # L& LATIN CAPITAL LETTER B WITH TOPBAR
+0184 ; NFKC_CF; 0185 # L& LATIN CAPITAL LETTER TONE SIX
+0186 ; NFKC_CF; 0254 # L& LATIN CAPITAL LETTER OPEN O
+0187 ; NFKC_CF; 0188 # L& LATIN CAPITAL LETTER C WITH HOOK
+0189 ; NFKC_CF; 0256 # L& LATIN CAPITAL LETTER AFRICAN D
+018A ; NFKC_CF; 0257 # L& LATIN CAPITAL LETTER D WITH HOOK
+018B ; NFKC_CF; 018C # L& LATIN CAPITAL LETTER D WITH TOPBAR
+018E ; NFKC_CF; 01DD # L& LATIN CAPITAL LETTER REVERSED E
+018F ; NFKC_CF; 0259 # L& LATIN CAPITAL LETTER SCHWA
+0190 ; NFKC_CF; 025B # L& LATIN CAPITAL LETTER OPEN E
+0191 ; NFKC_CF; 0192 # L& LATIN CAPITAL LETTER F WITH HOOK
+0193 ; NFKC_CF; 0260 # L& LATIN CAPITAL LETTER G WITH HOOK
+0194 ; NFKC_CF; 0263 # L& LATIN CAPITAL LETTER GAMMA
+0196 ; NFKC_CF; 0269 # L& LATIN CAPITAL LETTER IOTA
+0197 ; NFKC_CF; 0268 # L& LATIN CAPITAL LETTER I WITH STROKE
+0198 ; NFKC_CF; 0199 # L& LATIN CAPITAL LETTER K WITH HOOK
+019C ; NFKC_CF; 026F # L& LATIN CAPITAL LETTER TURNED M
+019D ; NFKC_CF; 0272 # L& LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F ; NFKC_CF; 0275 # L& LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A0 ; NFKC_CF; 01A1 # L& LATIN CAPITAL LETTER O WITH HORN
+01A2 ; NFKC_CF; 01A3 # L& LATIN CAPITAL LETTER OI
+01A4 ; NFKC_CF; 01A5 # L& LATIN CAPITAL LETTER P WITH HOOK
+01A6 ; NFKC_CF; 0280 # L& LATIN LETTER YR
+01A7 ; NFKC_CF; 01A8 # L& LATIN CAPITAL LETTER TONE TWO
+01A9 ; NFKC_CF; 0283 # L& LATIN CAPITAL LETTER ESH
+01AC ; NFKC_CF; 01AD # L& LATIN CAPITAL LETTER T WITH HOOK
+01AE ; NFKC_CF; 0288 # L& LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01AF ; NFKC_CF; 01B0 # L& LATIN CAPITAL LETTER U WITH HORN
+01B1 ; NFKC_CF; 028A # L& LATIN CAPITAL LETTER UPSILON
+01B2 ; NFKC_CF; 028B # L& LATIN CAPITAL LETTER V WITH HOOK
+01B3 ; NFKC_CF; 01B4 # L& LATIN CAPITAL LETTER Y WITH HOOK
+01B5 ; NFKC_CF; 01B6 # L& LATIN CAPITAL LETTER Z WITH STROKE
+01B7 ; NFKC_CF; 0292 # L& LATIN CAPITAL LETTER EZH
+01B8 ; NFKC_CF; 01B9 # L& LATIN CAPITAL LETTER EZH REVERSED
+01BC ; NFKC_CF; 01BD # L& LATIN CAPITAL LETTER TONE FIVE
+01C4..01C6 ; NFKC_CF; 0064 017E # L& [3] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER DZ WITH CARON
+01C7..01C9 ; NFKC_CF; 006C 006A # L& [3] LATIN CAPITAL LETTER LJ..LATIN SMALL LETTER LJ
+01CA..01CC ; NFKC_CF; 006E 006A # L& [3] LATIN CAPITAL LETTER NJ..LATIN SMALL LETTER NJ
+01CD ; NFKC_CF; 01CE # L& LATIN CAPITAL LETTER A WITH CARON
+01CF ; NFKC_CF; 01D0 # L& LATIN CAPITAL LETTER I WITH CARON
+01D1 ; NFKC_CF; 01D2 # L& LATIN CAPITAL LETTER O WITH CARON
+01D3 ; NFKC_CF; 01D4 # L& LATIN CAPITAL LETTER U WITH CARON
+01D5 ; NFKC_CF; 01D6 # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7 ; NFKC_CF; 01D8 # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9 ; NFKC_CF; 01DA # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB ; NFKC_CF; 01DC # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE ; NFKC_CF; 01DF # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0 ; NFKC_CF; 01E1 # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2 ; NFKC_CF; 01E3 # L& LATIN CAPITAL LETTER AE WITH MACRON
+01E4 ; NFKC_CF; 01E5 # L& LATIN CAPITAL LETTER G WITH STROKE
+01E6 ; NFKC_CF; 01E7 # L& LATIN CAPITAL LETTER G WITH CARON
+01E8 ; NFKC_CF; 01E9 # L& LATIN CAPITAL LETTER K WITH CARON
+01EA ; NFKC_CF; 01EB # L& LATIN CAPITAL LETTER O WITH OGONEK
+01EC ; NFKC_CF; 01ED # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE ; NFKC_CF; 01EF # L& LATIN CAPITAL LETTER EZH WITH CARON
+01F1..01F3 ; NFKC_CF; 0064 007A # L& [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ
+01F4 ; NFKC_CF; 01F5 # L& LATIN CAPITAL LETTER G WITH ACUTE
+01F6 ; NFKC_CF; 0195 # L& LATIN CAPITAL LETTER HWAIR
+01F7 ; NFKC_CF; 01BF # L& LATIN CAPITAL LETTER WYNN
+01F8 ; NFKC_CF; 01F9 # L& LATIN CAPITAL LETTER N WITH GRAVE
+01FA ; NFKC_CF; 01FB # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC ; NFKC_CF; 01FD # L& LATIN CAPITAL LETTER AE WITH ACUTE
+01FE ; NFKC_CF; 01FF # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200 ; NFKC_CF; 0201 # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202 ; NFKC_CF; 0203 # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204 ; NFKC_CF; 0205 # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206 ; NFKC_CF; 0207 # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208 ; NFKC_CF; 0209 # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A ; NFKC_CF; 020B # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C ; NFKC_CF; 020D # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E ; NFKC_CF; 020F # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210 ; NFKC_CF; 0211 # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212 ; NFKC_CF; 0213 # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214 ; NFKC_CF; 0215 # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216 ; NFKC_CF; 0217 # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218 ; NFKC_CF; 0219 # L& LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A ; NFKC_CF; 021B # L& LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C ; NFKC_CF; 021D # L& LATIN CAPITAL LETTER YOGH
+021E ; NFKC_CF; 021F # L& LATIN CAPITAL LETTER H WITH CARON
+0220 ; NFKC_CF; 019E # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222 ; NFKC_CF; 0223 # L& LATIN CAPITAL LETTER OU
+0224 ; NFKC_CF; 0225 # L& LATIN CAPITAL LETTER Z WITH HOOK
+0226 ; NFKC_CF; 0227 # L& LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228 ; NFKC_CF; 0229 # L& LATIN CAPITAL LETTER E WITH CEDILLA
+022A ; NFKC_CF; 022B # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C ; NFKC_CF; 022D # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E ; NFKC_CF; 022F # L& LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230 ; NFKC_CF; 0231 # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232 ; NFKC_CF; 0233 # L& LATIN CAPITAL LETTER Y WITH MACRON
+023A ; NFKC_CF; 2C65 # L& LATIN CAPITAL LETTER A WITH STROKE
+023B ; NFKC_CF; 023C # L& LATIN CAPITAL LETTER C WITH STROKE
+023D ; NFKC_CF; 019A # L& LATIN CAPITAL LETTER L WITH BAR
+023E ; NFKC_CF; 2C66 # L& LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241 ; NFKC_CF; 0242 # L& LATIN CAPITAL LETTER GLOTTAL STOP
+0243 ; NFKC_CF; 0180 # L& LATIN CAPITAL LETTER B WITH STROKE
+0244 ; NFKC_CF; 0289 # L& LATIN CAPITAL LETTER U BAR
+0245 ; NFKC_CF; 028C # L& LATIN CAPITAL LETTER TURNED V
+0246 ; NFKC_CF; 0247 # L& LATIN CAPITAL LETTER E WITH STROKE
+0248 ; NFKC_CF; 0249 # L& LATIN CAPITAL LETTER J WITH STROKE
+024A ; NFKC_CF; 024B # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C ; NFKC_CF; 024D # L& LATIN CAPITAL LETTER R WITH STROKE
+024E ; NFKC_CF; 024F # L& LATIN CAPITAL LETTER Y WITH STROKE
+02B0 ; NFKC_CF; 0068 # Lm MODIFIER LETTER SMALL H
+02B1 ; NFKC_CF; 0266 # Lm MODIFIER LETTER SMALL H WITH HOOK
+02B2 ; NFKC_CF; 006A # Lm MODIFIER LETTER SMALL J
+02B3 ; NFKC_CF; 0072 # Lm MODIFIER LETTER SMALL R
+02B4 ; NFKC_CF; 0279 # Lm MODIFIER LETTER SMALL TURNED R
+02B5 ; NFKC_CF; 027B # Lm MODIFIER LETTER SMALL TURNED R WITH HOOK
+02B6 ; NFKC_CF; 0281 # Lm MODIFIER LETTER SMALL CAPITAL INVERTED R
+02B7 ; NFKC_CF; 0077 # Lm MODIFIER LETTER SMALL W
+02B8 ; NFKC_CF; 0079 # Lm MODIFIER LETTER SMALL Y
+02D8 ; NFKC_CF; 0020 0306 # Sk BREVE
+02D9 ; NFKC_CF; 0020 0307 # Sk DOT ABOVE
+02DA ; NFKC_CF; 0020 030A # Sk RING ABOVE
+02DB ; NFKC_CF; 0020 0328 # Sk OGONEK
+02DC ; NFKC_CF; 0020 0303 # Sk SMALL TILDE
+02DD ; NFKC_CF; 0020 030B # Sk DOUBLE ACUTE ACCENT
+02E0 ; NFKC_CF; 0263 # Lm MODIFIER LETTER SMALL GAMMA
+02E1 ; NFKC_CF; 006C # Lm MODIFIER LETTER SMALL L
+02E2 ; NFKC_CF; 0073 # Lm MODIFIER LETTER SMALL S
+02E3 ; NFKC_CF; 0078 # Lm MODIFIER LETTER SMALL X
+02E4 ; NFKC_CF; 0295 # Lm MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0340 ; NFKC_CF; 0300 # Mn COMBINING GRAVE TONE MARK
+0341 ; NFKC_CF; 0301 # Mn COMBINING ACUTE TONE MARK
+0343 ; NFKC_CF; 0313 # Mn COMBINING GREEK KORONIS
+0344 ; NFKC_CF; 0308 0301 # Mn COMBINING GREEK DIALYTIKA TONOS
+0345 ; NFKC_CF; 03B9 # Mn COMBINING GREEK YPOGEGRAMMENI
+034F ; NFKC_CF; # Mn COMBINING GRAPHEME JOINER
+0370 ; NFKC_CF; 0371 # L& GREEK CAPITAL LETTER HETA
+0372 ; NFKC_CF; 0373 # L& GREEK CAPITAL LETTER ARCHAIC SAMPI
+0374 ; NFKC_CF; 02B9 # Lm GREEK NUMERAL SIGN
+0376 ; NFKC_CF; 0377 # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037A ; NFKC_CF; 0020 03B9 # Lm GREEK YPOGEGRAMMENI
+037E ; NFKC_CF; 003B # Po GREEK QUESTION MARK
+037F ; NFKC_CF; 03F3 # L& GREEK CAPITAL LETTER YOT
+0384 ; NFKC_CF; 0020 0301 # Sk GREEK TONOS
+0385 ; NFKC_CF; 0020 0308 0301 # Sk GREEK DIALYTIKA TONOS
+0386 ; NFKC_CF; 03AC # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; NFKC_CF; 00B7 # Po GREEK ANO TELEIA
+0388 ; NFKC_CF; 03AD # L& GREEK CAPITAL LETTER EPSILON WITH TONOS
+0389 ; NFKC_CF; 03AE # L& GREEK CAPITAL LETTER ETA WITH TONOS
+038A ; NFKC_CF; 03AF # L& GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; NFKC_CF; 03CC # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E ; NFKC_CF; 03CD # L& GREEK CAPITAL LETTER UPSILON WITH TONOS
+038F ; NFKC_CF; 03CE # L& GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391 ; NFKC_CF; 03B1 # L& GREEK CAPITAL LETTER ALPHA
+0392 ; NFKC_CF; 03B2 # L& GREEK CAPITAL LETTER BETA
+0393 ; NFKC_CF; 03B3 # L& GREEK CAPITAL LETTER GAMMA
+0394 ; NFKC_CF; 03B4 # L& GREEK CAPITAL LETTER DELTA
+0395 ; NFKC_CF; 03B5 # L& GREEK CAPITAL LETTER EPSILON
+0396 ; NFKC_CF; 03B6 # L& GREEK CAPITAL LETTER ZETA
+0397 ; NFKC_CF; 03B7 # L& GREEK CAPITAL LETTER ETA
+0398 ; NFKC_CF; 03B8 # L& GREEK CAPITAL LETTER THETA
+0399 ; NFKC_CF; 03B9 # L& GREEK CAPITAL LETTER IOTA
+039A ; NFKC_CF; 03BA # L& GREEK CAPITAL LETTER KAPPA
+039B ; NFKC_CF; 03BB # L& GREEK CAPITAL LETTER LAMDA
+039C ; NFKC_CF; 03BC # L& GREEK CAPITAL LETTER MU
+039D ; NFKC_CF; 03BD # L& GREEK CAPITAL LETTER NU
+039E ; NFKC_CF; 03BE # L& GREEK CAPITAL LETTER XI
+039F ; NFKC_CF; 03BF # L& GREEK CAPITAL LETTER OMICRON
+03A0 ; NFKC_CF; 03C0 # L& GREEK CAPITAL LETTER PI
+03A1 ; NFKC_CF; 03C1 # L& GREEK CAPITAL LETTER RHO
+03A3 ; NFKC_CF; 03C3 # L& GREEK CAPITAL LETTER SIGMA
+03A4 ; NFKC_CF; 03C4 # L& GREEK CAPITAL LETTER TAU
+03A5 ; NFKC_CF; 03C5 # L& GREEK CAPITAL LETTER UPSILON
+03A6 ; NFKC_CF; 03C6 # L& GREEK CAPITAL LETTER PHI
+03A7 ; NFKC_CF; 03C7 # L& GREEK CAPITAL LETTER CHI
+03A8 ; NFKC_CF; 03C8 # L& GREEK CAPITAL LETTER PSI
+03A9 ; NFKC_CF; 03C9 # L& GREEK CAPITAL LETTER OMEGA
+03AA ; NFKC_CF; 03CA # L& GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+03AB ; NFKC_CF; 03CB # L& GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03C2 ; NFKC_CF; 03C3 # L& GREEK SMALL LETTER FINAL SIGMA
+03CF ; NFKC_CF; 03D7 # L& GREEK CAPITAL KAI SYMBOL
+03D0 ; NFKC_CF; 03B2 # L& GREEK BETA SYMBOL
+03D1 ; NFKC_CF; 03B8 # L& GREEK THETA SYMBOL
+03D2 ; NFKC_CF; 03C5 # L& GREEK UPSILON WITH HOOK SYMBOL
+03D3 ; NFKC_CF; 03CD # L& GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+03D4 ; NFKC_CF; 03CB # L& GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+03D5 ; NFKC_CF; 03C6 # L& GREEK PHI SYMBOL
+03D6 ; NFKC_CF; 03C0 # L& GREEK PI SYMBOL
+03D8 ; NFKC_CF; 03D9 # L& GREEK LETTER ARCHAIC KOPPA
+03DA ; NFKC_CF; 03DB # L& GREEK LETTER STIGMA
+03DC ; NFKC_CF; 03DD # L& GREEK LETTER DIGAMMA
+03DE ; NFKC_CF; 03DF # L& GREEK LETTER KOPPA
+03E0 ; NFKC_CF; 03E1 # L& GREEK LETTER SAMPI
+03E2 ; NFKC_CF; 03E3 # L& COPTIC CAPITAL LETTER SHEI
+03E4 ; NFKC_CF; 03E5 # L& COPTIC CAPITAL LETTER FEI
+03E6 ; NFKC_CF; 03E7 # L& COPTIC CAPITAL LETTER KHEI
+03E8 ; NFKC_CF; 03E9 # L& COPTIC CAPITAL LETTER HORI
+03EA ; NFKC_CF; 03EB # L& COPTIC CAPITAL LETTER GANGIA
+03EC ; NFKC_CF; 03ED # L& COPTIC CAPITAL LETTER SHIMA
+03EE ; NFKC_CF; 03EF # L& COPTIC CAPITAL LETTER DEI
+03F0 ; NFKC_CF; 03BA # L& GREEK KAPPA SYMBOL
+03F1 ; NFKC_CF; 03C1 # L& GREEK RHO SYMBOL
+03F2 ; NFKC_CF; 03C3 # L& GREEK LUNATE SIGMA SYMBOL
+03F4 ; NFKC_CF; 03B8 # L& GREEK CAPITAL THETA SYMBOL
+03F5 ; NFKC_CF; 03B5 # L& GREEK LUNATE EPSILON SYMBOL
+03F7 ; NFKC_CF; 03F8 # L& GREEK CAPITAL LETTER SHO
+03F9 ; NFKC_CF; 03C3 # L& GREEK CAPITAL LUNATE SIGMA SYMBOL
+03FA ; NFKC_CF; 03FB # L& GREEK CAPITAL LETTER SAN
+03FD ; NFKC_CF; 037B # L& GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+03FE ; NFKC_CF; 037C # L& GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+03FF ; NFKC_CF; 037D # L& GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400 ; NFKC_CF; 0450 # L& CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401 ; NFKC_CF; 0451 # L& CYRILLIC CAPITAL LETTER IO
+0402 ; NFKC_CF; 0452 # L& CYRILLIC CAPITAL LETTER DJE
+0403 ; NFKC_CF; 0453 # L& CYRILLIC CAPITAL LETTER GJE
+0404 ; NFKC_CF; 0454 # L& CYRILLIC CAPITAL LETTER UKRAINIAN IE
+0405 ; NFKC_CF; 0455 # L& CYRILLIC CAPITAL LETTER DZE
+0406 ; NFKC_CF; 0456 # L& CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0407 ; NFKC_CF; 0457 # L& CYRILLIC CAPITAL LETTER YI
+0408 ; NFKC_CF; 0458 # L& CYRILLIC CAPITAL LETTER JE
+0409 ; NFKC_CF; 0459 # L& CYRILLIC CAPITAL LETTER LJE
+040A ; NFKC_CF; 045A # L& CYRILLIC CAPITAL LETTER NJE
+040B ; NFKC_CF; 045B # L& CYRILLIC CAPITAL LETTER TSHE
+040C ; NFKC_CF; 045C # L& CYRILLIC CAPITAL LETTER KJE
+040D ; NFKC_CF; 045D # L& CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E ; NFKC_CF; 045E # L& CYRILLIC CAPITAL LETTER SHORT U
+040F ; NFKC_CF; 045F # L& CYRILLIC CAPITAL LETTER DZHE
+0410 ; NFKC_CF; 0430 # L& CYRILLIC CAPITAL LETTER A
+0411 ; NFKC_CF; 0431 # L& CYRILLIC CAPITAL LETTER BE
+0412 ; NFKC_CF; 0432 # L& CYRILLIC CAPITAL LETTER VE
+0413 ; NFKC_CF; 0433 # L& CYRILLIC CAPITAL LETTER GHE
+0414 ; NFKC_CF; 0434 # L& CYRILLIC CAPITAL LETTER DE
+0415 ; NFKC_CF; 0435 # L& CYRILLIC CAPITAL LETTER IE
+0416 ; NFKC_CF; 0436 # L& CYRILLIC CAPITAL LETTER ZHE
+0417 ; NFKC_CF; 0437 # L& CYRILLIC CAPITAL LETTER ZE
+0418 ; NFKC_CF; 0438 # L& CYRILLIC CAPITAL LETTER I
+0419 ; NFKC_CF; 0439 # L& CYRILLIC CAPITAL LETTER SHORT I
+041A ; NFKC_CF; 043A # L& CYRILLIC CAPITAL LETTER KA
+041B ; NFKC_CF; 043B # L& CYRILLIC CAPITAL LETTER EL
+041C ; NFKC_CF; 043C # L& CYRILLIC CAPITAL LETTER EM
+041D ; NFKC_CF; 043D # L& CYRILLIC CAPITAL LETTER EN
+041E ; NFKC_CF; 043E # L& CYRILLIC CAPITAL LETTER O
+041F ; NFKC_CF; 043F # L& CYRILLIC CAPITAL LETTER PE
+0420 ; NFKC_CF; 0440 # L& CYRILLIC CAPITAL LETTER ER
+0421 ; NFKC_CF; 0441 # L& CYRILLIC CAPITAL LETTER ES
+0422 ; NFKC_CF; 0442 # L& CYRILLIC CAPITAL LETTER TE
+0423 ; NFKC_CF; 0443 # L& CYRILLIC CAPITAL LETTER U
+0424 ; NFKC_CF; 0444 # L& CYRILLIC CAPITAL LETTER EF
+0425 ; NFKC_CF; 0445 # L& CYRILLIC CAPITAL LETTER HA
+0426 ; NFKC_CF; 0446 # L& CYRILLIC CAPITAL LETTER TSE
+0427 ; NFKC_CF; 0447 # L& CYRILLIC CAPITAL LETTER CHE
+0428 ; NFKC_CF; 0448 # L& CYRILLIC CAPITAL LETTER SHA
+0429 ; NFKC_CF; 0449 # L& CYRILLIC CAPITAL LETTER SHCHA
+042A ; NFKC_CF; 044A # L& CYRILLIC CAPITAL LETTER HARD SIGN
+042B ; NFKC_CF; 044B # L& CYRILLIC CAPITAL LETTER YERU
+042C ; NFKC_CF; 044C # L& CYRILLIC CAPITAL LETTER SOFT SIGN
+042D ; NFKC_CF; 044D # L& CYRILLIC CAPITAL LETTER E
+042E ; NFKC_CF; 044E # L& CYRILLIC CAPITAL LETTER YU
+042F ; NFKC_CF; 044F # L& CYRILLIC CAPITAL LETTER YA
+0460 ; NFKC_CF; 0461 # L& CYRILLIC CAPITAL LETTER OMEGA
+0462 ; NFKC_CF; 0463 # L& CYRILLIC CAPITAL LETTER YAT
+0464 ; NFKC_CF; 0465 # L& CYRILLIC CAPITAL LETTER IOTIFIED E
+0466 ; NFKC_CF; 0467 # L& CYRILLIC CAPITAL LETTER LITTLE YUS
+0468 ; NFKC_CF; 0469 # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A ; NFKC_CF; 046B # L& CYRILLIC CAPITAL LETTER BIG YUS
+046C ; NFKC_CF; 046D # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E ; NFKC_CF; 046F # L& CYRILLIC CAPITAL LETTER KSI
+0470 ; NFKC_CF; 0471 # L& CYRILLIC CAPITAL LETTER PSI
+0472 ; NFKC_CF; 0473 # L& CYRILLIC CAPITAL LETTER FITA
+0474 ; NFKC_CF; 0475 # L& CYRILLIC CAPITAL LETTER IZHITSA
+0476 ; NFKC_CF; 0477 # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 ; NFKC_CF; 0479 # L& CYRILLIC CAPITAL LETTER UK
+047A ; NFKC_CF; 047B # L& CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C ; NFKC_CF; 047D # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E ; NFKC_CF; 047F # L& CYRILLIC CAPITAL LETTER OT
+0480 ; NFKC_CF; 0481 # L& CYRILLIC CAPITAL LETTER KOPPA
+048A ; NFKC_CF; 048B # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C ; NFKC_CF; 048D # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E ; NFKC_CF; 048F # L& CYRILLIC CAPITAL LETTER ER WITH TICK
+0490 ; NFKC_CF; 0491 # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492 ; NFKC_CF; 0493 # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494 ; NFKC_CF; 0495 # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496 ; NFKC_CF; 0497 # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498 ; NFKC_CF; 0499 # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A ; NFKC_CF; 049B # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C ; NFKC_CF; 049D # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E ; NFKC_CF; 049F # L& CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0 ; NFKC_CF; 04A1 # L& CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2 ; NFKC_CF; 04A3 # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4 ; NFKC_CF; 04A5 # L& CYRILLIC CAPITAL LIGATURE EN GHE
+04A6 ; NFKC_CF; 04A7 # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8 ; NFKC_CF; 04A9 # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA ; NFKC_CF; 04AB # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC ; NFKC_CF; 04AD # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE ; NFKC_CF; 04AF # L& CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0 ; NFKC_CF; 04B1 # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2 ; NFKC_CF; 04B3 # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4 ; NFKC_CF; 04B5 # L& CYRILLIC CAPITAL LIGATURE TE TSE
+04B6 ; NFKC_CF; 04B7 # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8 ; NFKC_CF; 04B9 # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA ; NFKC_CF; 04BB # L& CYRILLIC CAPITAL LETTER SHHA
+04BC ; NFKC_CF; 04BD # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE ; NFKC_CF; 04BF # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0 ; NFKC_CF; 04CF # L& CYRILLIC LETTER PALOCHKA
+04C1 ; NFKC_CF; 04C2 # L& CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3 ; NFKC_CF; 04C4 # L& CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5 ; NFKC_CF; 04C6 # L& CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7 ; NFKC_CF; 04C8 # L& CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9 ; NFKC_CF; 04CA # L& CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB ; NFKC_CF; 04CC # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD ; NFKC_CF; 04CE # L& CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0 ; NFKC_CF; 04D1 # L& CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2 ; NFKC_CF; 04D3 # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4 ; NFKC_CF; 04D5 # L& CYRILLIC CAPITAL LIGATURE A IE
+04D6 ; NFKC_CF; 04D7 # L& CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8 ; NFKC_CF; 04D9 # L& CYRILLIC CAPITAL LETTER SCHWA
+04DA ; NFKC_CF; 04DB # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC ; NFKC_CF; 04DD # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE ; NFKC_CF; 04DF # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0 ; NFKC_CF; 04E1 # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2 ; NFKC_CF; 04E3 # L& CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4 ; NFKC_CF; 04E5 # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6 ; NFKC_CF; 04E7 # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8 ; NFKC_CF; 04E9 # L& CYRILLIC CAPITAL LETTER BARRED O
+04EA ; NFKC_CF; 04EB # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC ; NFKC_CF; 04ED # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE ; NFKC_CF; 04EF # L& CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0 ; NFKC_CF; 04F1 # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2 ; NFKC_CF; 04F3 # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4 ; NFKC_CF; 04F5 # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6 ; NFKC_CF; 04F7 # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8 ; NFKC_CF; 04F9 # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA ; NFKC_CF; 04FB # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC ; NFKC_CF; 04FD # L& CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE ; NFKC_CF; 04FF # L& CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500 ; NFKC_CF; 0501 # L& CYRILLIC CAPITAL LETTER KOMI DE
+0502 ; NFKC_CF; 0503 # L& CYRILLIC CAPITAL LETTER KOMI DJE
+0504 ; NFKC_CF; 0505 # L& CYRILLIC CAPITAL LETTER KOMI ZJE
+0506 ; NFKC_CF; 0507 # L& CYRILLIC CAPITAL LETTER KOMI DZJE
+0508 ; NFKC_CF; 0509 # L& CYRILLIC CAPITAL LETTER KOMI LJE
+050A ; NFKC_CF; 050B # L& CYRILLIC CAPITAL LETTER KOMI NJE
+050C ; NFKC_CF; 050D # L& CYRILLIC CAPITAL LETTER KOMI SJE
+050E ; NFKC_CF; 050F # L& CYRILLIC CAPITAL LETTER KOMI TJE
+0510 ; NFKC_CF; 0511 # L& CYRILLIC CAPITAL LETTER REVERSED ZE
+0512 ; NFKC_CF; 0513 # L& CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514 ; NFKC_CF; 0515 # L& CYRILLIC CAPITAL LETTER LHA
+0516 ; NFKC_CF; 0517 # L& CYRILLIC CAPITAL LETTER RHA
+0518 ; NFKC_CF; 0519 # L& CYRILLIC CAPITAL LETTER YAE
+051A ; NFKC_CF; 051B # L& CYRILLIC CAPITAL LETTER QA
+051C ; NFKC_CF; 051D # L& CYRILLIC CAPITAL LETTER WE
+051E ; NFKC_CF; 051F # L& CYRILLIC CAPITAL LETTER ALEUT KA
+0520 ; NFKC_CF; 0521 # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522 ; NFKC_CF; 0523 # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524 ; NFKC_CF; 0525 # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526 ; NFKC_CF; 0527 # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528 ; NFKC_CF; 0529 # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A ; NFKC_CF; 052B # L& CYRILLIC CAPITAL LETTER DZZHE
+052C ; NFKC_CF; 052D # L& CYRILLIC CAPITAL LETTER DCHE
+052E ; NFKC_CF; 052F # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531 ; NFKC_CF; 0561 # L& ARMENIAN CAPITAL LETTER AYB
+0532 ; NFKC_CF; 0562 # L& ARMENIAN CAPITAL LETTER BEN
+0533 ; NFKC_CF; 0563 # L& ARMENIAN CAPITAL LETTER GIM
+0534 ; NFKC_CF; 0564 # L& ARMENIAN CAPITAL LETTER DA
+0535 ; NFKC_CF; 0565 # L& ARMENIAN CAPITAL LETTER ECH
+0536 ; NFKC_CF; 0566 # L& ARMENIAN CAPITAL LETTER ZA
+0537 ; NFKC_CF; 0567 # L& ARMENIAN CAPITAL LETTER EH
+0538 ; NFKC_CF; 0568 # L& ARMENIAN CAPITAL LETTER ET
+0539 ; NFKC_CF; 0569 # L& ARMENIAN CAPITAL LETTER TO
+053A ; NFKC_CF; 056A # L& ARMENIAN CAPITAL LETTER ZHE
+053B ; NFKC_CF; 056B # L& ARMENIAN CAPITAL LETTER INI
+053C ; NFKC_CF; 056C # L& ARMENIAN CAPITAL LETTER LIWN
+053D ; NFKC_CF; 056D # L& ARMENIAN CAPITAL LETTER XEH
+053E ; NFKC_CF; 056E # L& ARMENIAN CAPITAL LETTER CA
+053F ; NFKC_CF; 056F # L& ARMENIAN CAPITAL LETTER KEN
+0540 ; NFKC_CF; 0570 # L& ARMENIAN CAPITAL LETTER HO
+0541 ; NFKC_CF; 0571 # L& ARMENIAN CAPITAL LETTER JA
+0542 ; NFKC_CF; 0572 # L& ARMENIAN CAPITAL LETTER GHAD
+0543 ; NFKC_CF; 0573 # L& ARMENIAN CAPITAL LETTER CHEH
+0544 ; NFKC_CF; 0574 # L& ARMENIAN CAPITAL LETTER MEN
+0545 ; NFKC_CF; 0575 # L& ARMENIAN CAPITAL LETTER YI
+0546 ; NFKC_CF; 0576 # L& ARMENIAN CAPITAL LETTER NOW
+0547 ; NFKC_CF; 0577 # L& ARMENIAN CAPITAL LETTER SHA
+0548 ; NFKC_CF; 0578 # L& ARMENIAN CAPITAL LETTER VO
+0549 ; NFKC_CF; 0579 # L& ARMENIAN CAPITAL LETTER CHA
+054A ; NFKC_CF; 057A # L& ARMENIAN CAPITAL LETTER PEH
+054B ; NFKC_CF; 057B # L& ARMENIAN CAPITAL LETTER JHEH
+054C ; NFKC_CF; 057C # L& ARMENIAN CAPITAL LETTER RA
+054D ; NFKC_CF; 057D # L& ARMENIAN CAPITAL LETTER SEH
+054E ; NFKC_CF; 057E # L& ARMENIAN CAPITAL LETTER VEW
+054F ; NFKC_CF; 057F # L& ARMENIAN CAPITAL LETTER TIWN
+0550 ; NFKC_CF; 0580 # L& ARMENIAN CAPITAL LETTER REH
+0551 ; NFKC_CF; 0581 # L& ARMENIAN CAPITAL LETTER CO
+0552 ; NFKC_CF; 0582 # L& ARMENIAN CAPITAL LETTER YIWN
+0553 ; NFKC_CF; 0583 # L& ARMENIAN CAPITAL LETTER PIWR
+0554 ; NFKC_CF; 0584 # L& ARMENIAN CAPITAL LETTER KEH
+0555 ; NFKC_CF; 0585 # L& ARMENIAN CAPITAL LETTER OH
+0556 ; NFKC_CF; 0586 # L& ARMENIAN CAPITAL LETTER FEH
+0587 ; NFKC_CF; 0565 0582 # L& ARMENIAN SMALL LIGATURE ECH YIWN
+061C ; NFKC_CF; # Cf ARABIC LETTER MARK
+0675 ; NFKC_CF; 0627 0674 # Lo ARABIC LETTER HIGH HAMZA ALEF
+0676 ; NFKC_CF; 0648 0674 # Lo ARABIC LETTER HIGH HAMZA WAW
+0677 ; NFKC_CF; 06C7 0674 # Lo ARABIC LETTER U WITH HAMZA ABOVE
+0678 ; NFKC_CF; 064A 0674 # Lo ARABIC LETTER HIGH HAMZA YEH
+0958 ; NFKC_CF; 0915 093C # Lo DEVANAGARI LETTER QA
+0959 ; NFKC_CF; 0916 093C # Lo DEVANAGARI LETTER KHHA
+095A ; NFKC_CF; 0917 093C # Lo DEVANAGARI LETTER GHHA
+095B ; NFKC_CF; 091C 093C # Lo DEVANAGARI LETTER ZA
+095C ; NFKC_CF; 0921 093C # Lo DEVANAGARI LETTER DDDHA
+095D ; NFKC_CF; 0922 093C # Lo DEVANAGARI LETTER RHA
+095E ; NFKC_CF; 092B 093C # Lo DEVANAGARI LETTER FA
+095F ; NFKC_CF; 092F 093C # Lo DEVANAGARI LETTER YYA
+09DC ; NFKC_CF; 09A1 09BC # Lo BENGALI LETTER RRA
+09DD ; NFKC_CF; 09A2 09BC # Lo BENGALI LETTER RHA
+09DF ; NFKC_CF; 09AF 09BC # Lo BENGALI LETTER YYA
+0A33 ; NFKC_CF; 0A32 0A3C # Lo GURMUKHI LETTER LLA
+0A36 ; NFKC_CF; 0A38 0A3C # Lo GURMUKHI LETTER SHA
+0A59 ; NFKC_CF; 0A16 0A3C # Lo GURMUKHI LETTER KHHA
+0A5A ; NFKC_CF; 0A17 0A3C # Lo GURMUKHI LETTER GHHA
+0A5B ; NFKC_CF; 0A1C 0A3C # Lo GURMUKHI LETTER ZA
+0A5E ; NFKC_CF; 0A2B 0A3C # Lo GURMUKHI LETTER FA
+0B5C ; NFKC_CF; 0B21 0B3C # Lo ORIYA LETTER RRA
+0B5D ; NFKC_CF; 0B22 0B3C # Lo ORIYA LETTER RHA
+0E33 ; NFKC_CF; 0E4D 0E32 # Lo THAI CHARACTER SARA AM
+0EB3 ; NFKC_CF; 0ECD 0EB2 # Lo LAO VOWEL SIGN AM
+0EDC ; NFKC_CF; 0EAB 0E99 # Lo LAO HO NO
+0EDD ; NFKC_CF; 0EAB 0EA1 # Lo LAO HO MO
+0F0C ; NFKC_CF; 0F0B # Po TIBETAN MARK DELIMITER TSHEG BSTAR
+0F43 ; NFKC_CF; 0F42 0FB7 # Lo TIBETAN LETTER GHA
+0F4D ; NFKC_CF; 0F4C 0FB7 # Lo TIBETAN LETTER DDHA
+0F52 ; NFKC_CF; 0F51 0FB7 # Lo TIBETAN LETTER DHA
+0F57 ; NFKC_CF; 0F56 0FB7 # Lo TIBETAN LETTER BHA
+0F5C ; NFKC_CF; 0F5B 0FB7 # Lo TIBETAN LETTER DZHA
+0F69 ; NFKC_CF; 0F40 0FB5 # Lo TIBETAN LETTER KSSA
+0F73 ; NFKC_CF; 0F71 0F72 # Mn TIBETAN VOWEL SIGN II
+0F75 ; NFKC_CF; 0F71 0F74 # Mn TIBETAN VOWEL SIGN UU
+0F76 ; NFKC_CF; 0FB2 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC R
+0F77 ; NFKC_CF; 0FB2 0F71 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC RR
+0F78 ; NFKC_CF; 0FB3 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC L
+0F79 ; NFKC_CF; 0FB3 0F71 0F80 # Mn TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; NFKC_CF; 0F71 0F80 # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; NFKC_CF; 0F92 0FB7 # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; NFKC_CF; 0F9C 0FB7 # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; NFKC_CF; 0FA1 0FB7 # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; NFKC_CF; 0FA6 0FB7 # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; NFKC_CF; 0FAB 0FB7 # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; NFKC_CF; 0F90 0FB5 # Mn TIBETAN SUBJOINED LETTER KSSA
+10A0 ; NFKC_CF; 2D00 # L& GEORGIAN CAPITAL LETTER AN
+10A1 ; NFKC_CF; 2D01 # L& GEORGIAN CAPITAL LETTER BAN
+10A2 ; NFKC_CF; 2D02 # L& GEORGIAN CAPITAL LETTER GAN
+10A3 ; NFKC_CF; 2D03 # L& GEORGIAN CAPITAL LETTER DON
+10A4 ; NFKC_CF; 2D04 # L& GEORGIAN CAPITAL LETTER EN
+10A5 ; NFKC_CF; 2D05 # L& GEORGIAN CAPITAL LETTER VIN
+10A6 ; NFKC_CF; 2D06 # L& GEORGIAN CAPITAL LETTER ZEN
+10A7 ; NFKC_CF; 2D07 # L& GEORGIAN CAPITAL LETTER TAN
+10A8 ; NFKC_CF; 2D08 # L& GEORGIAN CAPITAL LETTER IN
+10A9 ; NFKC_CF; 2D09 # L& GEORGIAN CAPITAL LETTER KAN
+10AA ; NFKC_CF; 2D0A # L& GEORGIAN CAPITAL LETTER LAS
+10AB ; NFKC_CF; 2D0B # L& GEORGIAN CAPITAL LETTER MAN
+10AC ; NFKC_CF; 2D0C # L& GEORGIAN CAPITAL LETTER NAR
+10AD ; NFKC_CF; 2D0D # L& GEORGIAN CAPITAL LETTER ON
+10AE ; NFKC_CF; 2D0E # L& GEORGIAN CAPITAL LETTER PAR
+10AF ; NFKC_CF; 2D0F # L& GEORGIAN CAPITAL LETTER ZHAR
+10B0 ; NFKC_CF; 2D10 # L& GEORGIAN CAPITAL LETTER RAE
+10B1 ; NFKC_CF; 2D11 # L& GEORGIAN CAPITAL LETTER SAN
+10B2 ; NFKC_CF; 2D12 # L& GEORGIAN CAPITAL LETTER TAR
+10B3 ; NFKC_CF; 2D13 # L& GEORGIAN CAPITAL LETTER UN
+10B4 ; NFKC_CF; 2D14 # L& GEORGIAN CAPITAL LETTER PHAR
+10B5 ; NFKC_CF; 2D15 # L& GEORGIAN CAPITAL LETTER KHAR
+10B6 ; NFKC_CF; 2D16 # L& GEORGIAN CAPITAL LETTER GHAN
+10B7 ; NFKC_CF; 2D17 # L& GEORGIAN CAPITAL LETTER QAR
+10B8 ; NFKC_CF; 2D18 # L& GEORGIAN CAPITAL LETTER SHIN
+10B9 ; NFKC_CF; 2D19 # L& GEORGIAN CAPITAL LETTER CHIN
+10BA ; NFKC_CF; 2D1A # L& GEORGIAN CAPITAL LETTER CAN
+10BB ; NFKC_CF; 2D1B # L& GEORGIAN CAPITAL LETTER JIL
+10BC ; NFKC_CF; 2D1C # L& GEORGIAN CAPITAL LETTER CIL
+10BD ; NFKC_CF; 2D1D # L& GEORGIAN CAPITAL LETTER CHAR
+10BE ; NFKC_CF; 2D1E # L& GEORGIAN CAPITAL LETTER XAN
+10BF ; NFKC_CF; 2D1F # L& GEORGIAN CAPITAL LETTER JHAN
+10C0 ; NFKC_CF; 2D20 # L& GEORGIAN CAPITAL LETTER HAE
+10C1 ; NFKC_CF; 2D21 # L& GEORGIAN CAPITAL LETTER HE
+10C2 ; NFKC_CF; 2D22 # L& GEORGIAN CAPITAL LETTER HIE
+10C3 ; NFKC_CF; 2D23 # L& GEORGIAN CAPITAL LETTER WE
+10C4 ; NFKC_CF; 2D24 # L& GEORGIAN CAPITAL LETTER HAR
+10C5 ; NFKC_CF; 2D25 # L& GEORGIAN CAPITAL LETTER HOE
+10C7 ; NFKC_CF; 2D27 # L& GEORGIAN CAPITAL LETTER YN
+10CD ; NFKC_CF; 2D2D # L& GEORGIAN CAPITAL LETTER AEN
+10FC ; NFKC_CF; 10DC # Lm MODIFIER LETTER GEORGIAN NAR
+115F..1160 ; NFKC_CF; # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+13F8 ; NFKC_CF; 13F0 # L& CHEROKEE SMALL LETTER YE
+13F9 ; NFKC_CF; 13F1 # L& CHEROKEE SMALL LETTER YI
+13FA ; NFKC_CF; 13F2 # L& CHEROKEE SMALL LETTER YO
+13FB ; NFKC_CF; 13F3 # L& CHEROKEE SMALL LETTER YU
+13FC ; NFKC_CF; 13F4 # L& CHEROKEE SMALL LETTER YV
+13FD ; NFKC_CF; 13F5 # L& CHEROKEE SMALL LETTER MV
+17B4..17B5 ; NFKC_CF; # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+180B..180D ; NFKC_CF; # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; NFKC_CF; # Cf MONGOLIAN VOWEL SEPARATOR
+180F ; NFKC_CF; # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+1C80 ; NFKC_CF; 0432 # L& CYRILLIC SMALL LETTER ROUNDED VE
+1C81 ; NFKC_CF; 0434 # L& CYRILLIC SMALL LETTER LONG-LEGGED DE
+1C82 ; NFKC_CF; 043E # L& CYRILLIC SMALL LETTER NARROW O
+1C83 ; NFKC_CF; 0441 # L& CYRILLIC SMALL LETTER WIDE ES
+1C84..1C85 ; NFKC_CF; 0442 # L& [2] CYRILLIC SMALL LETTER TALL TE..CYRILLIC SMALL LETTER THREE-LEGGED TE
+1C86 ; NFKC_CF; 044A # L& CYRILLIC SMALL LETTER TALL HARD SIGN
+1C87 ; NFKC_CF; 0463 # L& CYRILLIC SMALL LETTER TALL YAT
+1C88 ; NFKC_CF; A64B # L& CYRILLIC SMALL LETTER UNBLENDED UK
+1C90 ; NFKC_CF; 10D0 # L& GEORGIAN MTAVRULI CAPITAL LETTER AN
+1C91 ; NFKC_CF; 10D1 # L& GEORGIAN MTAVRULI CAPITAL LETTER BAN
+1C92 ; NFKC_CF; 10D2 # L& GEORGIAN MTAVRULI CAPITAL LETTER GAN
+1C93 ; NFKC_CF; 10D3 # L& GEORGIAN MTAVRULI CAPITAL LETTER DON
+1C94 ; NFKC_CF; 10D4 # L& GEORGIAN MTAVRULI CAPITAL LETTER EN
+1C95 ; NFKC_CF; 10D5 # L& GEORGIAN MTAVRULI CAPITAL LETTER VIN
+1C96 ; NFKC_CF; 10D6 # L& GEORGIAN MTAVRULI CAPITAL LETTER ZEN
+1C97 ; NFKC_CF; 10D7 # L& GEORGIAN MTAVRULI CAPITAL LETTER TAN
+1C98 ; NFKC_CF; 10D8 # L& GEORGIAN MTAVRULI CAPITAL LETTER IN
+1C99 ; NFKC_CF; 10D9 # L& GEORGIAN MTAVRULI CAPITAL LETTER KAN
+1C9A ; NFKC_CF; 10DA # L& GEORGIAN MTAVRULI CAPITAL LETTER LAS
+1C9B ; NFKC_CF; 10DB # L& GEORGIAN MTAVRULI CAPITAL LETTER MAN
+1C9C ; NFKC_CF; 10DC # L& GEORGIAN MTAVRULI CAPITAL LETTER NAR
+1C9D ; NFKC_CF; 10DD # L& GEORGIAN MTAVRULI CAPITAL LETTER ON
+1C9E ; NFKC_CF; 10DE # L& GEORGIAN MTAVRULI CAPITAL LETTER PAR
+1C9F ; NFKC_CF; 10DF # L& GEORGIAN MTAVRULI CAPITAL LETTER ZHAR
+1CA0 ; NFKC_CF; 10E0 # L& GEORGIAN MTAVRULI CAPITAL LETTER RAE
+1CA1 ; NFKC_CF; 10E1 # L& GEORGIAN MTAVRULI CAPITAL LETTER SAN
+1CA2 ; NFKC_CF; 10E2 # L& GEORGIAN MTAVRULI CAPITAL LETTER TAR
+1CA3 ; NFKC_CF; 10E3 # L& GEORGIAN MTAVRULI CAPITAL LETTER UN
+1CA4 ; NFKC_CF; 10E4 # L& GEORGIAN MTAVRULI CAPITAL LETTER PHAR
+1CA5 ; NFKC_CF; 10E5 # L& GEORGIAN MTAVRULI CAPITAL LETTER KHAR
+1CA6 ; NFKC_CF; 10E6 # L& GEORGIAN MTAVRULI CAPITAL LETTER GHAN
+1CA7 ; NFKC_CF; 10E7 # L& GEORGIAN MTAVRULI CAPITAL LETTER QAR
+1CA8 ; NFKC_CF; 10E8 # L& GEORGIAN MTAVRULI CAPITAL LETTER SHIN
+1CA9 ; NFKC_CF; 10E9 # L& GEORGIAN MTAVRULI CAPITAL LETTER CHIN
+1CAA ; NFKC_CF; 10EA # L& GEORGIAN MTAVRULI CAPITAL LETTER CAN
+1CAB ; NFKC_CF; 10EB # L& GEORGIAN MTAVRULI CAPITAL LETTER JIL
+1CAC ; NFKC_CF; 10EC # L& GEORGIAN MTAVRULI CAPITAL LETTER CIL
+1CAD ; NFKC_CF; 10ED # L& GEORGIAN MTAVRULI CAPITAL LETTER CHAR
+1CAE ; NFKC_CF; 10EE # L& GEORGIAN MTAVRULI CAPITAL LETTER XAN
+1CAF ; NFKC_CF; 10EF # L& GEORGIAN MTAVRULI CAPITAL LETTER JHAN
+1CB0 ; NFKC_CF; 10F0 # L& GEORGIAN MTAVRULI CAPITAL LETTER HAE
+1CB1 ; NFKC_CF; 10F1 # L& GEORGIAN MTAVRULI CAPITAL LETTER HE
+1CB2 ; NFKC_CF; 10F2 # L& GEORGIAN MTAVRULI CAPITAL LETTER HIE
+1CB3 ; NFKC_CF; 10F3 # L& GEORGIAN MTAVRULI CAPITAL LETTER WE
+1CB4 ; NFKC_CF; 10F4 # L& GEORGIAN MTAVRULI CAPITAL LETTER HAR
+1CB5 ; NFKC_CF; 10F5 # L& GEORGIAN MTAVRULI CAPITAL LETTER HOE
+1CB6 ; NFKC_CF; 10F6 # L& GEORGIAN MTAVRULI CAPITAL LETTER FI
+1CB7 ; NFKC_CF; 10F7 # L& GEORGIAN MTAVRULI CAPITAL LETTER YN
+1CB8 ; NFKC_CF; 10F8 # L& GEORGIAN MTAVRULI CAPITAL LETTER ELIFI
+1CB9 ; NFKC_CF; 10F9 # L& GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN
+1CBA ; NFKC_CF; 10FA # L& GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD ; NFKC_CF; 10FD # L& GEORGIAN MTAVRULI CAPITAL LETTER AEN
+1CBE ; NFKC_CF; 10FE # L& GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN
+1CBF ; NFKC_CF; 10FF # L& GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1D2C ; NFKC_CF; 0061 # Lm MODIFIER LETTER CAPITAL A
+1D2D ; NFKC_CF; 00E6 # Lm MODIFIER LETTER CAPITAL AE
+1D2E ; NFKC_CF; 0062 # Lm MODIFIER LETTER CAPITAL B
+1D30 ; NFKC_CF; 0064 # Lm MODIFIER LETTER CAPITAL D
+1D31 ; NFKC_CF; 0065 # Lm MODIFIER LETTER CAPITAL E
+1D32 ; NFKC_CF; 01DD # Lm MODIFIER LETTER CAPITAL REVERSED E
+1D33 ; NFKC_CF; 0067 # Lm MODIFIER LETTER CAPITAL G
+1D34 ; NFKC_CF; 0068 # Lm MODIFIER LETTER CAPITAL H
+1D35 ; NFKC_CF; 0069 # Lm MODIFIER LETTER CAPITAL I
+1D36 ; NFKC_CF; 006A # Lm MODIFIER LETTER CAPITAL J
+1D37 ; NFKC_CF; 006B # Lm MODIFIER LETTER CAPITAL K
+1D38 ; NFKC_CF; 006C # Lm MODIFIER LETTER CAPITAL L
+1D39 ; NFKC_CF; 006D # Lm MODIFIER LETTER CAPITAL M
+1D3A ; NFKC_CF; 006E # Lm MODIFIER LETTER CAPITAL N
+1D3C ; NFKC_CF; 006F # Lm MODIFIER LETTER CAPITAL O
+1D3D ; NFKC_CF; 0223 # Lm MODIFIER LETTER CAPITAL OU
+1D3E ; NFKC_CF; 0070 # Lm MODIFIER LETTER CAPITAL P
+1D3F ; NFKC_CF; 0072 # Lm MODIFIER LETTER CAPITAL R
+1D40 ; NFKC_CF; 0074 # Lm MODIFIER LETTER CAPITAL T
+1D41 ; NFKC_CF; 0075 # Lm MODIFIER LETTER CAPITAL U
+1D42 ; NFKC_CF; 0077 # Lm MODIFIER LETTER CAPITAL W
+1D43 ; NFKC_CF; 0061 # Lm MODIFIER LETTER SMALL A
+1D44 ; NFKC_CF; 0250 # Lm MODIFIER LETTER SMALL TURNED A
+1D45 ; NFKC_CF; 0251 # Lm MODIFIER LETTER SMALL ALPHA
+1D46 ; NFKC_CF; 1D02 # Lm MODIFIER LETTER SMALL TURNED AE
+1D47 ; NFKC_CF; 0062 # Lm MODIFIER LETTER SMALL B
+1D48 ; NFKC_CF; 0064 # Lm MODIFIER LETTER SMALL D
+1D49 ; NFKC_CF; 0065 # Lm MODIFIER LETTER SMALL E
+1D4A ; NFKC_CF; 0259 # Lm MODIFIER LETTER SMALL SCHWA
+1D4B ; NFKC_CF; 025B # Lm MODIFIER LETTER SMALL OPEN E
+1D4C ; NFKC_CF; 025C # Lm MODIFIER LETTER SMALL TURNED OPEN E
+1D4D ; NFKC_CF; 0067 # Lm MODIFIER LETTER SMALL G
+1D4F ; NFKC_CF; 006B # Lm MODIFIER LETTER SMALL K
+1D50 ; NFKC_CF; 006D # Lm MODIFIER LETTER SMALL M
+1D51 ; NFKC_CF; 014B # Lm MODIFIER LETTER SMALL ENG
+1D52 ; NFKC_CF; 006F # Lm MODIFIER LETTER SMALL O
+1D53 ; NFKC_CF; 0254 # Lm MODIFIER LETTER SMALL OPEN O
+1D54 ; NFKC_CF; 1D16 # Lm MODIFIER LETTER SMALL TOP HALF O
+1D55 ; NFKC_CF; 1D17 # Lm MODIFIER LETTER SMALL BOTTOM HALF O
+1D56 ; NFKC_CF; 0070 # Lm MODIFIER LETTER SMALL P
+1D57 ; NFKC_CF; 0074 # Lm MODIFIER LETTER SMALL T
+1D58 ; NFKC_CF; 0075 # Lm MODIFIER LETTER SMALL U
+1D59 ; NFKC_CF; 1D1D # Lm MODIFIER LETTER SMALL SIDEWAYS U
+1D5A ; NFKC_CF; 026F # Lm MODIFIER LETTER SMALL TURNED M
+1D5B ; NFKC_CF; 0076 # Lm MODIFIER LETTER SMALL V
+1D5C ; NFKC_CF; 1D25 # Lm MODIFIER LETTER SMALL AIN
+1D5D ; NFKC_CF; 03B2 # Lm MODIFIER LETTER SMALL BETA
+1D5E ; NFKC_CF; 03B3 # Lm MODIFIER LETTER SMALL GREEK GAMMA
+1D5F ; NFKC_CF; 03B4 # Lm MODIFIER LETTER SMALL DELTA
+1D60 ; NFKC_CF; 03C6 # Lm MODIFIER LETTER SMALL GREEK PHI
+1D61 ; NFKC_CF; 03C7 # Lm MODIFIER LETTER SMALL CHI
+1D62 ; NFKC_CF; 0069 # Lm LATIN SUBSCRIPT SMALL LETTER I
+1D63 ; NFKC_CF; 0072 # Lm LATIN SUBSCRIPT SMALL LETTER R
+1D64 ; NFKC_CF; 0075 # Lm LATIN SUBSCRIPT SMALL LETTER U
+1D65 ; NFKC_CF; 0076 # Lm LATIN SUBSCRIPT SMALL LETTER V
+1D66 ; NFKC_CF; 03B2 # Lm GREEK SUBSCRIPT SMALL LETTER BETA
+1D67 ; NFKC_CF; 03B3 # Lm GREEK SUBSCRIPT SMALL LETTER GAMMA
+1D68 ; NFKC_CF; 03C1 # Lm GREEK SUBSCRIPT SMALL LETTER RHO
+1D69 ; NFKC_CF; 03C6 # Lm GREEK SUBSCRIPT SMALL LETTER PHI
+1D6A ; NFKC_CF; 03C7 # Lm GREEK SUBSCRIPT SMALL LETTER CHI
+1D78 ; NFKC_CF; 043D # Lm MODIFIER LETTER CYRILLIC EN
+1D9B ; NFKC_CF; 0252 # Lm MODIFIER LETTER SMALL TURNED ALPHA
+1D9C ; NFKC_CF; 0063 # Lm MODIFIER LETTER SMALL C
+1D9D ; NFKC_CF; 0255 # Lm MODIFIER LETTER SMALL C WITH CURL
+1D9E ; NFKC_CF; 00F0 # Lm MODIFIER LETTER SMALL ETH
+1D9F ; NFKC_CF; 025C # Lm MODIFIER LETTER SMALL REVERSED OPEN E
+1DA0 ; NFKC_CF; 0066 # Lm MODIFIER LETTER SMALL F
+1DA1 ; NFKC_CF; 025F # Lm MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+1DA2 ; NFKC_CF; 0261 # Lm MODIFIER LETTER SMALL SCRIPT G
+1DA3 ; NFKC_CF; 0265 # Lm MODIFIER LETTER SMALL TURNED H
+1DA4 ; NFKC_CF; 0268 # Lm MODIFIER LETTER SMALL I WITH STROKE
+1DA5 ; NFKC_CF; 0269 # Lm MODIFIER LETTER SMALL IOTA
+1DA6 ; NFKC_CF; 026A # Lm MODIFIER LETTER SMALL CAPITAL I
+1DA7 ; NFKC_CF; 1D7B # Lm MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+1DA8 ; NFKC_CF; 029D # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+1DA9 ; NFKC_CF; 026D # Lm MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+1DAA ; NFKC_CF; 1D85 # Lm MODIFIER LETTER SMALL L WITH PALATAL HOOK
+1DAB ; NFKC_CF; 029F # Lm MODIFIER LETTER SMALL CAPITAL L
+1DAC ; NFKC_CF; 0271 # Lm MODIFIER LETTER SMALL M WITH HOOK
+1DAD ; NFKC_CF; 0270 # Lm MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+1DAE ; NFKC_CF; 0272 # Lm MODIFIER LETTER SMALL N WITH LEFT HOOK
+1DAF ; NFKC_CF; 0273 # Lm MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+1DB0 ; NFKC_CF; 0274 # Lm MODIFIER LETTER SMALL CAPITAL N
+1DB1 ; NFKC_CF; 0275 # Lm MODIFIER LETTER SMALL BARRED O
+1DB2 ; NFKC_CF; 0278 # Lm MODIFIER LETTER SMALL PHI
+1DB3 ; NFKC_CF; 0282 # Lm MODIFIER LETTER SMALL S WITH HOOK
+1DB4 ; NFKC_CF; 0283 # Lm MODIFIER LETTER SMALL ESH
+1DB5 ; NFKC_CF; 01AB # Lm MODIFIER LETTER SMALL T WITH PALATAL HOOK
+1DB6 ; NFKC_CF; 0289 # Lm MODIFIER LETTER SMALL U BAR
+1DB7 ; NFKC_CF; 028A # Lm MODIFIER LETTER SMALL UPSILON
+1DB8 ; NFKC_CF; 1D1C # Lm MODIFIER LETTER SMALL CAPITAL U
+1DB9 ; NFKC_CF; 028B # Lm MODIFIER LETTER SMALL V WITH HOOK
+1DBA ; NFKC_CF; 028C # Lm MODIFIER LETTER SMALL TURNED V
+1DBB ; NFKC_CF; 007A # Lm MODIFIER LETTER SMALL Z
+1DBC ; NFKC_CF; 0290 # Lm MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+1DBD ; NFKC_CF; 0291 # Lm MODIFIER LETTER SMALL Z WITH CURL
+1DBE ; NFKC_CF; 0292 # Lm MODIFIER LETTER SMALL EZH
+1DBF ; NFKC_CF; 03B8 # Lm MODIFIER LETTER SMALL THETA
+1E00 ; NFKC_CF; 1E01 # L& LATIN CAPITAL LETTER A WITH RING BELOW
+1E02 ; NFKC_CF; 1E03 # L& LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04 ; NFKC_CF; 1E05 # L& LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06 ; NFKC_CF; 1E07 # L& LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08 ; NFKC_CF; 1E09 # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A ; NFKC_CF; 1E0B # L& LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C ; NFKC_CF; 1E0D # L& LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E ; NFKC_CF; 1E0F # L& LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10 ; NFKC_CF; 1E11 # L& LATIN CAPITAL LETTER D WITH CEDILLA
+1E12 ; NFKC_CF; 1E13 # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14 ; NFKC_CF; 1E15 # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16 ; NFKC_CF; 1E17 # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18 ; NFKC_CF; 1E19 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A ; NFKC_CF; 1E1B # L& LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C ; NFKC_CF; 1E1D # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E ; NFKC_CF; 1E1F # L& LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20 ; NFKC_CF; 1E21 # L& LATIN CAPITAL LETTER G WITH MACRON
+1E22 ; NFKC_CF; 1E23 # L& LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24 ; NFKC_CF; 1E25 # L& LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26 ; NFKC_CF; 1E27 # L& LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28 ; NFKC_CF; 1E29 # L& LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A ; NFKC_CF; 1E2B # L& LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C ; NFKC_CF; 1E2D # L& LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E ; NFKC_CF; 1E2F # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30 ; NFKC_CF; 1E31 # L& LATIN CAPITAL LETTER K WITH ACUTE
+1E32 ; NFKC_CF; 1E33 # L& LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34 ; NFKC_CF; 1E35 # L& LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36 ; NFKC_CF; 1E37 # L& LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38 ; NFKC_CF; 1E39 # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A ; NFKC_CF; 1E3B # L& LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C ; NFKC_CF; 1E3D # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E ; NFKC_CF; 1E3F # L& LATIN CAPITAL LETTER M WITH ACUTE
+1E40 ; NFKC_CF; 1E41 # L& LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42 ; NFKC_CF; 1E43 # L& LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44 ; NFKC_CF; 1E45 # L& LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46 ; NFKC_CF; 1E47 # L& LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48 ; NFKC_CF; 1E49 # L& LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A ; NFKC_CF; 1E4B # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C ; NFKC_CF; 1E4D # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E ; NFKC_CF; 1E4F # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50 ; NFKC_CF; 1E51 # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52 ; NFKC_CF; 1E53 # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54 ; NFKC_CF; 1E55 # L& LATIN CAPITAL LETTER P WITH ACUTE
+1E56 ; NFKC_CF; 1E57 # L& LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58 ; NFKC_CF; 1E59 # L& LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A ; NFKC_CF; 1E5B # L& LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C ; NFKC_CF; 1E5D # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E ; NFKC_CF; 1E5F # L& LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60 ; NFKC_CF; 1E61 # L& LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62 ; NFKC_CF; 1E63 # L& LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64 ; NFKC_CF; 1E65 # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 ; NFKC_CF; 1E67 # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68 ; NFKC_CF; 1E69 # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A ; NFKC_CF; 1E6B # L& LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C ; NFKC_CF; 1E6D # L& LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E ; NFKC_CF; 1E6F # L& LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70 ; NFKC_CF; 1E71 # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72 ; NFKC_CF; 1E73 # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74 ; NFKC_CF; 1E75 # L& LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76 ; NFKC_CF; 1E77 # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78 ; NFKC_CF; 1E79 # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A ; NFKC_CF; 1E7B # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C ; NFKC_CF; 1E7D # L& LATIN CAPITAL LETTER V WITH TILDE
+1E7E ; NFKC_CF; 1E7F # L& LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80 ; NFKC_CF; 1E81 # L& LATIN CAPITAL LETTER W WITH GRAVE
+1E82 ; NFKC_CF; 1E83 # L& LATIN CAPITAL LETTER W WITH ACUTE
+1E84 ; NFKC_CF; 1E85 # L& LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86 ; NFKC_CF; 1E87 # L& LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88 ; NFKC_CF; 1E89 # L& LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A ; NFKC_CF; 1E8B # L& LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C ; NFKC_CF; 1E8D # L& LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E ; NFKC_CF; 1E8F # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90 ; NFKC_CF; 1E91 # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92 ; NFKC_CF; 1E93 # L& LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94 ; NFKC_CF; 1E95 # L& LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9A ; NFKC_CF; 0061 02BE # L& LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B ; NFKC_CF; 1E61 # L& LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E ; NFKC_CF; 0073 0073 # L& LATIN CAPITAL LETTER SHARP S
+1EA0 ; NFKC_CF; 1EA1 # L& LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2 ; NFKC_CF; 1EA3 # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4 ; NFKC_CF; 1EA5 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 ; NFKC_CF; 1EA7 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 ; NFKC_CF; 1EA9 # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA ; NFKC_CF; 1EAB # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC ; NFKC_CF; 1EAD # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE ; NFKC_CF; 1EAF # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0 ; NFKC_CF; 1EB1 # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2 ; NFKC_CF; 1EB3 # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 ; NFKC_CF; 1EB5 # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6 ; NFKC_CF; 1EB7 # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8 ; NFKC_CF; 1EB9 # L& LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA ; NFKC_CF; 1EBB # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC ; NFKC_CF; 1EBD # L& LATIN CAPITAL LETTER E WITH TILDE
+1EBE ; NFKC_CF; 1EBF # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 ; NFKC_CF; 1EC1 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 ; NFKC_CF; 1EC3 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 ; NFKC_CF; 1EC5 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 ; NFKC_CF; 1EC7 # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 ; NFKC_CF; 1EC9 # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA ; NFKC_CF; 1ECB # L& LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC ; NFKC_CF; 1ECD # L& LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE ; NFKC_CF; 1ECF # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0 ; NFKC_CF; 1ED1 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 ; NFKC_CF; 1ED3 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 ; NFKC_CF; 1ED5 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 ; NFKC_CF; 1ED7 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 ; NFKC_CF; 1ED9 # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA ; NFKC_CF; 1EDB # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC ; NFKC_CF; 1EDD # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE ; NFKC_CF; 1EDF # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 ; NFKC_CF; 1EE1 # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2 ; NFKC_CF; 1EE3 # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4 ; NFKC_CF; 1EE5 # L& LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6 ; NFKC_CF; 1EE7 # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8 ; NFKC_CF; 1EE9 # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA ; NFKC_CF; 1EEB # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC ; NFKC_CF; 1EED # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE ; NFKC_CF; 1EEF # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0 ; NFKC_CF; 1EF1 # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2 ; NFKC_CF; 1EF3 # L& LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4 ; NFKC_CF; 1EF5 # L& LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6 ; NFKC_CF; 1EF7 # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8 ; NFKC_CF; 1EF9 # L& LATIN CAPITAL LETTER Y WITH TILDE
+1EFA ; NFKC_CF; 1EFB # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC ; NFKC_CF; 1EFD # L& LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE ; NFKC_CF; 1EFF # L& LATIN CAPITAL LETTER Y WITH LOOP
+1F08 ; NFKC_CF; 1F00 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI
+1F09 ; NFKC_CF; 1F01 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA
+1F0A ; NFKC_CF; 1F02 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+1F0B ; NFKC_CF; 1F03 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+1F0C ; NFKC_CF; 1F04 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+1F0D ; NFKC_CF; 1F05 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+1F0E ; NFKC_CF; 1F06 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+1F0F ; NFKC_CF; 1F07 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18 ; NFKC_CF; 1F10 # L& GREEK CAPITAL LETTER EPSILON WITH PSILI
+1F19 ; NFKC_CF; 1F11 # L& GREEK CAPITAL LETTER EPSILON WITH DASIA
+1F1A ; NFKC_CF; 1F12 # L& GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+1F1B ; NFKC_CF; 1F13 # L& GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+1F1C ; NFKC_CF; 1F14 # L& GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+1F1D ; NFKC_CF; 1F15 # L& GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28 ; NFKC_CF; 1F20 # L& GREEK CAPITAL LETTER ETA WITH PSILI
+1F29 ; NFKC_CF; 1F21 # L& GREEK CAPITAL LETTER ETA WITH DASIA
+1F2A ; NFKC_CF; 1F22 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+1F2B ; NFKC_CF; 1F23 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+1F2C ; NFKC_CF; 1F24 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+1F2D ; NFKC_CF; 1F25 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+1F2E ; NFKC_CF; 1F26 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+1F2F ; NFKC_CF; 1F27 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38 ; NFKC_CF; 1F30 # L& GREEK CAPITAL LETTER IOTA WITH PSILI
+1F39 ; NFKC_CF; 1F31 # L& GREEK CAPITAL LETTER IOTA WITH DASIA
+1F3A ; NFKC_CF; 1F32 # L& GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+1F3B ; NFKC_CF; 1F33 # L& GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+1F3C ; NFKC_CF; 1F34 # L& GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+1F3D ; NFKC_CF; 1F35 # L& GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+1F3E ; NFKC_CF; 1F36 # L& GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+1F3F ; NFKC_CF; 1F37 # L& GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48 ; NFKC_CF; 1F40 # L& GREEK CAPITAL LETTER OMICRON WITH PSILI
+1F49 ; NFKC_CF; 1F41 # L& GREEK CAPITAL LETTER OMICRON WITH DASIA
+1F4A ; NFKC_CF; 1F42 # L& GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+1F4B ; NFKC_CF; 1F43 # L& GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+1F4C ; NFKC_CF; 1F44 # L& GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+1F4D ; NFKC_CF; 1F45 # L& GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59 ; NFKC_CF; 1F51 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; NFKC_CF; 1F53 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; NFKC_CF; 1F55 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F ; NFKC_CF; 1F57 # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68 ; NFKC_CF; 1F60 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI
+1F69 ; NFKC_CF; 1F61 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA
+1F6A ; NFKC_CF; 1F62 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+1F6B ; NFKC_CF; 1F63 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+1F6C ; NFKC_CF; 1F64 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+1F6D ; NFKC_CF; 1F65 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+1F6E ; NFKC_CF; 1F66 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+1F6F ; NFKC_CF; 1F67 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F71 ; NFKC_CF; 03AC # L& GREEK SMALL LETTER ALPHA WITH OXIA
+1F73 ; NFKC_CF; 03AD # L& GREEK SMALL LETTER EPSILON WITH OXIA
+1F75 ; NFKC_CF; 03AE # L& GREEK SMALL LETTER ETA WITH OXIA
+1F77 ; NFKC_CF; 03AF # L& GREEK SMALL LETTER IOTA WITH OXIA
+1F79 ; NFKC_CF; 03CC # L& GREEK SMALL LETTER OMICRON WITH OXIA
+1F7B ; NFKC_CF; 03CD # L& GREEK SMALL LETTER UPSILON WITH OXIA
+1F7D ; NFKC_CF; 03CE # L& GREEK SMALL LETTER OMEGA WITH OXIA
+1F80 ; NFKC_CF; 1F00 03B9 # L& GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+1F81 ; NFKC_CF; 1F01 03B9 # L& GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+1F82 ; NFKC_CF; 1F02 03B9 # L& GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F83 ; NFKC_CF; 1F03 03B9 # L& GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F84 ; NFKC_CF; 1F04 03B9 # L& GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F85 ; NFKC_CF; 1F05 03B9 # L& GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F86 ; NFKC_CF; 1F06 03B9 # L& GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F87 ; NFKC_CF; 1F07 03B9 # L& GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F88 ; NFKC_CF; 1F00 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+1F89 ; NFKC_CF; 1F01 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+1F8A ; NFKC_CF; 1F02 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F8B ; NFKC_CF; 1F03 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F8C ; NFKC_CF; 1F04 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F8D ; NFKC_CF; 1F05 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F8E ; NFKC_CF; 1F06 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F8F ; NFKC_CF; 1F07 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1F90 ; NFKC_CF; 1F20 03B9 # L& GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+1F91 ; NFKC_CF; 1F21 03B9 # L& GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+1F92 ; NFKC_CF; 1F22 03B9 # L& GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1F93 ; NFKC_CF; 1F23 03B9 # L& GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1F94 ; NFKC_CF; 1F24 03B9 # L& GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1F95 ; NFKC_CF; 1F25 03B9 # L& GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1F96 ; NFKC_CF; 1F26 03B9 # L& GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1F97 ; NFKC_CF; 1F27 03B9 # L& GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1F98 ; NFKC_CF; 1F20 03B9 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+1F99 ; NFKC_CF; 1F21 03B9 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+1F9A ; NFKC_CF; 1F22 03B9 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1F9B ; NFKC_CF; 1F23 03B9 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1F9C ; NFKC_CF; 1F24 03B9 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1F9D ; NFKC_CF; 1F25 03B9 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1F9E ; NFKC_CF; 1F26 03B9 # L& GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1F9F ; NFKC_CF; 1F27 03B9 # L& GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FA0 ; NFKC_CF; 1F60 03B9 # L& GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+1FA1 ; NFKC_CF; 1F61 03B9 # L& GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+1FA2 ; NFKC_CF; 1F62 03B9 # L& GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+1FA3 ; NFKC_CF; 1F63 03B9 # L& GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+1FA4 ; NFKC_CF; 1F64 03B9 # L& GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+1FA5 ; NFKC_CF; 1F65 03B9 # L& GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+1FA6 ; NFKC_CF; 1F66 03B9 # L& GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+1FA7 ; NFKC_CF; 1F67 03B9 # L& GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+1FA8 ; NFKC_CF; 1F60 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+1FA9 ; NFKC_CF; 1F61 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+1FAA ; NFKC_CF; 1F62 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+1FAB ; NFKC_CF; 1F63 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+1FAC ; NFKC_CF; 1F64 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+1FAD ; NFKC_CF; 1F65 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+1FAE ; NFKC_CF; 1F66 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+1FAF ; NFKC_CF; 1F67 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2 ; NFKC_CF; 1F70 03B9 # L& GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+1FB3 ; NFKC_CF; 03B1 03B9 # L& GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+1FB4 ; NFKC_CF; 03AC 03B9 # L& GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB7 ; NFKC_CF; 1FB6 03B9 # L& GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FB8 ; NFKC_CF; 1FB0 # L& GREEK CAPITAL LETTER ALPHA WITH VRACHY
+1FB9 ; NFKC_CF; 1FB1 # L& GREEK CAPITAL LETTER ALPHA WITH MACRON
+1FBA ; NFKC_CF; 1F70 # L& GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBB ; NFKC_CF; 03AC # L& GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBC ; NFKC_CF; 03B1 03B9 # L& GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; NFKC_CF; 0020 0313 # Sk GREEK KORONIS
+1FBE ; NFKC_CF; 03B9 # L& GREEK PROSGEGRAMMENI
+1FBF ; NFKC_CF; 0020 0313 # Sk GREEK PSILI
+1FC0 ; NFKC_CF; 0020 0342 # Sk GREEK PERISPOMENI
+1FC1 ; NFKC_CF; 0020 0308 0342 # Sk GREEK DIALYTIKA AND PERISPOMENI
+1FC2 ; NFKC_CF; 1F74 03B9 # L& GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+1FC3 ; NFKC_CF; 03B7 03B9 # L& GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+1FC4 ; NFKC_CF; 03AE 03B9 # L& GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC7 ; NFKC_CF; 1FC6 03B9 # L& GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FC8 ; NFKC_CF; 1F72 # L& GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FC9 ; NFKC_CF; 03AD # L& GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCA ; NFKC_CF; 1F74 # L& GREEK CAPITAL LETTER ETA WITH VARIA
+1FCB ; NFKC_CF; 03AE # L& GREEK CAPITAL LETTER ETA WITH OXIA
+1FCC ; NFKC_CF; 03B7 03B9 # L& GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD ; NFKC_CF; 0020 0313 0300 # Sk GREEK PSILI AND VARIA
+1FCE ; NFKC_CF; 0020 0313 0301 # Sk GREEK PSILI AND OXIA
+1FCF ; NFKC_CF; 0020 0313 0342 # Sk GREEK PSILI AND PERISPOMENI
+1FD3 ; NFKC_CF; 0390 # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD8 ; NFKC_CF; 1FD0 # L& GREEK CAPITAL LETTER IOTA WITH VRACHY
+1FD9 ; NFKC_CF; 1FD1 # L& GREEK CAPITAL LETTER IOTA WITH MACRON
+1FDA ; NFKC_CF; 1F76 # L& GREEK CAPITAL LETTER IOTA WITH VARIA
+1FDB ; NFKC_CF; 03AF # L& GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD ; NFKC_CF; 0020 0314 0300 # Sk GREEK DASIA AND VARIA
+1FDE ; NFKC_CF; 0020 0314 0301 # Sk GREEK DASIA AND OXIA
+1FDF ; NFKC_CF; 0020 0314 0342 # Sk GREEK DASIA AND PERISPOMENI
+1FE3 ; NFKC_CF; 03B0 # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE8 ; NFKC_CF; 1FE0 # L& GREEK CAPITAL LETTER UPSILON WITH VRACHY
+1FE9 ; NFKC_CF; 1FE1 # L& GREEK CAPITAL LETTER UPSILON WITH MACRON
+1FEA ; NFKC_CF; 1F7A # L& GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEB ; NFKC_CF; 03CD # L& GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FEC ; NFKC_CF; 1FE5 # L& GREEK CAPITAL LETTER RHO WITH DASIA
+1FED ; NFKC_CF; 0020 0308 0300 # Sk GREEK DIALYTIKA AND VARIA
+1FEE ; NFKC_CF; 0020 0308 0301 # Sk GREEK DIALYTIKA AND OXIA
+1FEF ; NFKC_CF; 0060 # Sk GREEK VARIA
+1FF2 ; NFKC_CF; 1F7C 03B9 # L& GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+1FF3 ; NFKC_CF; 03C9 03B9 # L& GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+1FF4 ; NFKC_CF; 03CE 03B9 # L& GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF7 ; NFKC_CF; 1FF6 03B9 # L& GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+1FF8 ; NFKC_CF; 1F78 # L& GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FF9 ; NFKC_CF; 03CC # L& GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFA ; NFKC_CF; 1F7C # L& GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFB ; NFKC_CF; 03CE # L& GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFC ; NFKC_CF; 03C9 03B9 # L& GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD ; NFKC_CF; 0020 0301 # Sk GREEK OXIA
+1FFE ; NFKC_CF; 0020 0314 # Sk GREEK DASIA
+2000..200A ; NFKC_CF; 0020 # Zs [11] EN QUAD..HAIR SPACE
+200B..200F ; NFKC_CF; # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+2011 ; NFKC_CF; 2010 # Pd NON-BREAKING HYPHEN
+2017 ; NFKC_CF; 0020 0333 # Po DOUBLE LOW LINE
+2024 ; NFKC_CF; 002E # Po ONE DOT LEADER
+2025 ; NFKC_CF; 002E 002E # Po TWO DOT LEADER
+2026 ; NFKC_CF; 002E 002E 002E # Po HORIZONTAL ELLIPSIS
+202A..202E ; NFKC_CF; # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F ; NFKC_CF; 0020 # Zs NARROW NO-BREAK SPACE
+2033 ; NFKC_CF; 2032 2032 # Po DOUBLE PRIME
+2034 ; NFKC_CF; 2032 2032 2032 # Po TRIPLE PRIME
+2036 ; NFKC_CF; 2035 2035 # Po REVERSED DOUBLE PRIME
+2037 ; NFKC_CF; 2035 2035 2035 # Po REVERSED TRIPLE PRIME
+203C ; NFKC_CF; 0021 0021 # Po DOUBLE EXCLAMATION MARK
+203E ; NFKC_CF; 0020 0305 # Po OVERLINE
+2047 ; NFKC_CF; 003F 003F # Po DOUBLE QUESTION MARK
+2048 ; NFKC_CF; 003F 0021 # Po QUESTION EXCLAMATION MARK
+2049 ; NFKC_CF; 0021 003F # Po EXCLAMATION QUESTION MARK
+2057 ; NFKC_CF; 2032 2032 2032 2032 #Po QUADRUPLE PRIME
+205F ; NFKC_CF; 0020 # Zs MEDIUM MATHEMATICAL SPACE
+2060..2064 ; NFKC_CF; # Cf [5] WORD JOINER..INVISIBLE PLUS
+2065 ; NFKC_CF; # Cn <reserved-2065>
+2066..206F ; NFKC_CF; # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+2070 ; NFKC_CF; 0030 # No SUPERSCRIPT ZERO
+2071 ; NFKC_CF; 0069 # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074 ; NFKC_CF; 0034 # No SUPERSCRIPT FOUR
+2075 ; NFKC_CF; 0035 # No SUPERSCRIPT FIVE
+2076 ; NFKC_CF; 0036 # No SUPERSCRIPT SIX
+2077 ; NFKC_CF; 0037 # No SUPERSCRIPT SEVEN
+2078 ; NFKC_CF; 0038 # No SUPERSCRIPT EIGHT
+2079 ; NFKC_CF; 0039 # No SUPERSCRIPT NINE
+207A ; NFKC_CF; 002B # Sm SUPERSCRIPT PLUS SIGN
+207B ; NFKC_CF; 2212 # Sm SUPERSCRIPT MINUS
+207C ; NFKC_CF; 003D # Sm SUPERSCRIPT EQUALS SIGN
+207D ; NFKC_CF; 0028 # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; NFKC_CF; 0029 # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F ; NFKC_CF; 006E # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080 ; NFKC_CF; 0030 # No SUBSCRIPT ZERO
+2081 ; NFKC_CF; 0031 # No SUBSCRIPT ONE
+2082 ; NFKC_CF; 0032 # No SUBSCRIPT TWO
+2083 ; NFKC_CF; 0033 # No SUBSCRIPT THREE
+2084 ; NFKC_CF; 0034 # No SUBSCRIPT FOUR
+2085 ; NFKC_CF; 0035 # No SUBSCRIPT FIVE
+2086 ; NFKC_CF; 0036 # No SUBSCRIPT SIX
+2087 ; NFKC_CF; 0037 # No SUBSCRIPT SEVEN
+2088 ; NFKC_CF; 0038 # No SUBSCRIPT EIGHT
+2089 ; NFKC_CF; 0039 # No SUBSCRIPT NINE
+208A ; NFKC_CF; 002B # Sm SUBSCRIPT PLUS SIGN
+208B ; NFKC_CF; 2212 # Sm SUBSCRIPT MINUS
+208C ; NFKC_CF; 003D # Sm SUBSCRIPT EQUALS SIGN
+208D ; NFKC_CF; 0028 # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; NFKC_CF; 0029 # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090 ; NFKC_CF; 0061 # Lm LATIN SUBSCRIPT SMALL LETTER A
+2091 ; NFKC_CF; 0065 # Lm LATIN SUBSCRIPT SMALL LETTER E
+2092 ; NFKC_CF; 006F # Lm LATIN SUBSCRIPT SMALL LETTER O
+2093 ; NFKC_CF; 0078 # Lm LATIN SUBSCRIPT SMALL LETTER X
+2094 ; NFKC_CF; 0259 # Lm LATIN SUBSCRIPT SMALL LETTER SCHWA
+2095 ; NFKC_CF; 0068 # Lm LATIN SUBSCRIPT SMALL LETTER H
+2096 ; NFKC_CF; 006B # Lm LATIN SUBSCRIPT SMALL LETTER K
+2097 ; NFKC_CF; 006C # Lm LATIN SUBSCRIPT SMALL LETTER L
+2098 ; NFKC_CF; 006D # Lm LATIN SUBSCRIPT SMALL LETTER M
+2099 ; NFKC_CF; 006E # Lm LATIN SUBSCRIPT SMALL LETTER N
+209A ; NFKC_CF; 0070 # Lm LATIN SUBSCRIPT SMALL LETTER P
+209B ; NFKC_CF; 0073 # Lm LATIN SUBSCRIPT SMALL LETTER S
+209C ; NFKC_CF; 0074 # Lm LATIN SUBSCRIPT SMALL LETTER T
+20A8 ; NFKC_CF; 0072 0073 # Sc RUPEE SIGN
+2100 ; NFKC_CF; 0061 002F 0063 # So ACCOUNT OF
+2101 ; NFKC_CF; 0061 002F 0073 # So ADDRESSED TO THE SUBJECT
+2102 ; NFKC_CF; 0063 # L& DOUBLE-STRUCK CAPITAL C
+2103 ; NFKC_CF; 00B0 0063 # So DEGREE CELSIUS
+2105 ; NFKC_CF; 0063 002F 006F # So CARE OF
+2106 ; NFKC_CF; 0063 002F 0075 # So CADA UNA
+2107 ; NFKC_CF; 025B # L& EULER CONSTANT
+2109 ; NFKC_CF; 00B0 0066 # So DEGREE FAHRENHEIT
+210A ; NFKC_CF; 0067 # L& SCRIPT SMALL G
+210B..210E ; NFKC_CF; 0068 # L& [4] SCRIPT CAPITAL H..PLANCK CONSTANT
+210F ; NFKC_CF; 0127 # L& PLANCK CONSTANT OVER TWO PI
+2110..2111 ; NFKC_CF; 0069 # L& [2] SCRIPT CAPITAL I..BLACK-LETTER CAPITAL I
+2112..2113 ; NFKC_CF; 006C # L& [2] SCRIPT CAPITAL L..SCRIPT SMALL L
+2115 ; NFKC_CF; 006E # L& DOUBLE-STRUCK CAPITAL N
+2116 ; NFKC_CF; 006E 006F # So NUMERO SIGN
+2119 ; NFKC_CF; 0070 # L& DOUBLE-STRUCK CAPITAL P
+211A ; NFKC_CF; 0071 # L& DOUBLE-STRUCK CAPITAL Q
+211B..211D ; NFKC_CF; 0072 # L& [3] SCRIPT CAPITAL R..DOUBLE-STRUCK CAPITAL R
+2120 ; NFKC_CF; 0073 006D # So SERVICE MARK
+2121 ; NFKC_CF; 0074 0065 006C # So TELEPHONE SIGN
+2122 ; NFKC_CF; 0074 006D # So TRADE MARK SIGN
+2124 ; NFKC_CF; 007A # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; NFKC_CF; 03C9 # L& OHM SIGN
+2128 ; NFKC_CF; 007A # L& BLACK-LETTER CAPITAL Z
+212A ; NFKC_CF; 006B # L& KELVIN SIGN
+212B ; NFKC_CF; 00E5 # L& ANGSTROM SIGN
+212C ; NFKC_CF; 0062 # L& SCRIPT CAPITAL B
+212D ; NFKC_CF; 0063 # L& BLACK-LETTER CAPITAL C
+212F..2130 ; NFKC_CF; 0065 # L& [2] SCRIPT SMALL E..SCRIPT CAPITAL E
+2131 ; NFKC_CF; 0066 # L& SCRIPT CAPITAL F
+2132 ; NFKC_CF; 214E # L& TURNED CAPITAL F
+2133 ; NFKC_CF; 006D # L& SCRIPT CAPITAL M
+2134 ; NFKC_CF; 006F # L& SCRIPT SMALL O
+2135 ; NFKC_CF; 05D0 # Lo ALEF SYMBOL
+2136 ; NFKC_CF; 05D1 # Lo BET SYMBOL
+2137 ; NFKC_CF; 05D2 # Lo GIMEL SYMBOL
+2138 ; NFKC_CF; 05D3 # Lo DALET SYMBOL
+2139 ; NFKC_CF; 0069 # L& INFORMATION SOURCE
+213B ; NFKC_CF; 0066 0061 0078 # So FACSIMILE SIGN
+213C ; NFKC_CF; 03C0 # L& DOUBLE-STRUCK SMALL PI
+213D..213E ; NFKC_CF; 03B3 # L& [2] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK CAPITAL GAMMA
+213F ; NFKC_CF; 03C0 # L& DOUBLE-STRUCK CAPITAL PI
+2140 ; NFKC_CF; 2211 # Sm DOUBLE-STRUCK N-ARY SUMMATION
+2145..2146 ; NFKC_CF; 0064 # L& [2] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL D
+2147 ; NFKC_CF; 0065 # L& DOUBLE-STRUCK ITALIC SMALL E
+2148 ; NFKC_CF; 0069 # L& DOUBLE-STRUCK ITALIC SMALL I
+2149 ; NFKC_CF; 006A # L& DOUBLE-STRUCK ITALIC SMALL J
+2150 ; NFKC_CF; 0031 2044 0037 # No VULGAR FRACTION ONE SEVENTH
+2151 ; NFKC_CF; 0031 2044 0039 # No VULGAR FRACTION ONE NINTH
+2152 ; NFKC_CF; 0031 2044 0031 0030 #No VULGAR FRACTION ONE TENTH
+2153 ; NFKC_CF; 0031 2044 0033 # No VULGAR FRACTION ONE THIRD
+2154 ; NFKC_CF; 0032 2044 0033 # No VULGAR FRACTION TWO THIRDS
+2155 ; NFKC_CF; 0031 2044 0035 # No VULGAR FRACTION ONE FIFTH
+2156 ; NFKC_CF; 0032 2044 0035 # No VULGAR FRACTION TWO FIFTHS
+2157 ; NFKC_CF; 0033 2044 0035 # No VULGAR FRACTION THREE FIFTHS
+2158 ; NFKC_CF; 0034 2044 0035 # No VULGAR FRACTION FOUR FIFTHS
+2159 ; NFKC_CF; 0031 2044 0036 # No VULGAR FRACTION ONE SIXTH
+215A ; NFKC_CF; 0035 2044 0036 # No VULGAR FRACTION FIVE SIXTHS
+215B ; NFKC_CF; 0031 2044 0038 # No VULGAR FRACTION ONE EIGHTH
+215C ; NFKC_CF; 0033 2044 0038 # No VULGAR FRACTION THREE EIGHTHS
+215D ; NFKC_CF; 0035 2044 0038 # No VULGAR FRACTION FIVE EIGHTHS
+215E ; NFKC_CF; 0037 2044 0038 # No VULGAR FRACTION SEVEN EIGHTHS
+215F ; NFKC_CF; 0031 2044 # No FRACTION NUMERATOR ONE
+2160 ; NFKC_CF; 0069 # Nl ROMAN NUMERAL ONE
+2161 ; NFKC_CF; 0069 0069 # Nl ROMAN NUMERAL TWO
+2162 ; NFKC_CF; 0069 0069 0069 # Nl ROMAN NUMERAL THREE
+2163 ; NFKC_CF; 0069 0076 # Nl ROMAN NUMERAL FOUR
+2164 ; NFKC_CF; 0076 # Nl ROMAN NUMERAL FIVE
+2165 ; NFKC_CF; 0076 0069 # Nl ROMAN NUMERAL SIX
+2166 ; NFKC_CF; 0076 0069 0069 # Nl ROMAN NUMERAL SEVEN
+2167 ; NFKC_CF; 0076 0069 0069 0069 #Nl ROMAN NUMERAL EIGHT
+2168 ; NFKC_CF; 0069 0078 # Nl ROMAN NUMERAL NINE
+2169 ; NFKC_CF; 0078 # Nl ROMAN NUMERAL TEN
+216A ; NFKC_CF; 0078 0069 # Nl ROMAN NUMERAL ELEVEN
+216B ; NFKC_CF; 0078 0069 0069 # Nl ROMAN NUMERAL TWELVE
+216C ; NFKC_CF; 006C # Nl ROMAN NUMERAL FIFTY
+216D ; NFKC_CF; 0063 # Nl ROMAN NUMERAL ONE HUNDRED
+216E ; NFKC_CF; 0064 # Nl ROMAN NUMERAL FIVE HUNDRED
+216F ; NFKC_CF; 006D # Nl ROMAN NUMERAL ONE THOUSAND
+2170 ; NFKC_CF; 0069 # Nl SMALL ROMAN NUMERAL ONE
+2171 ; NFKC_CF; 0069 0069 # Nl SMALL ROMAN NUMERAL TWO
+2172 ; NFKC_CF; 0069 0069 0069 # Nl SMALL ROMAN NUMERAL THREE
+2173 ; NFKC_CF; 0069 0076 # Nl SMALL ROMAN NUMERAL FOUR
+2174 ; NFKC_CF; 0076 # Nl SMALL ROMAN NUMERAL FIVE
+2175 ; NFKC_CF; 0076 0069 # Nl SMALL ROMAN NUMERAL SIX
+2176 ; NFKC_CF; 0076 0069 0069 # Nl SMALL ROMAN NUMERAL SEVEN
+2177 ; NFKC_CF; 0076 0069 0069 0069 #Nl SMALL ROMAN NUMERAL EIGHT
+2178 ; NFKC_CF; 0069 0078 # Nl SMALL ROMAN NUMERAL NINE
+2179 ; NFKC_CF; 0078 # Nl SMALL ROMAN NUMERAL TEN
+217A ; NFKC_CF; 0078 0069 # Nl SMALL ROMAN NUMERAL ELEVEN
+217B ; NFKC_CF; 0078 0069 0069 # Nl SMALL ROMAN NUMERAL TWELVE
+217C ; NFKC_CF; 006C # Nl SMALL ROMAN NUMERAL FIFTY
+217D ; NFKC_CF; 0063 # Nl SMALL ROMAN NUMERAL ONE HUNDRED
+217E ; NFKC_CF; 0064 # Nl SMALL ROMAN NUMERAL FIVE HUNDRED
+217F ; NFKC_CF; 006D # Nl SMALL ROMAN NUMERAL ONE THOUSAND
+2183 ; NFKC_CF; 2184 # L& ROMAN NUMERAL REVERSED ONE HUNDRED
+2189 ; NFKC_CF; 0030 2044 0033 # No VULGAR FRACTION ZERO THIRDS
+222C ; NFKC_CF; 222B 222B # Sm DOUBLE INTEGRAL
+222D ; NFKC_CF; 222B 222B 222B # Sm TRIPLE INTEGRAL
+222F ; NFKC_CF; 222E 222E # Sm SURFACE INTEGRAL
+2230 ; NFKC_CF; 222E 222E 222E # Sm VOLUME INTEGRAL
+2329 ; NFKC_CF; 3008 # Ps LEFT-POINTING ANGLE BRACKET
+232A ; NFKC_CF; 3009 # Pe RIGHT-POINTING ANGLE BRACKET
+2460 ; NFKC_CF; 0031 # No CIRCLED DIGIT ONE
+2461 ; NFKC_CF; 0032 # No CIRCLED DIGIT TWO
+2462 ; NFKC_CF; 0033 # No CIRCLED DIGIT THREE
+2463 ; NFKC_CF; 0034 # No CIRCLED DIGIT FOUR
+2464 ; NFKC_CF; 0035 # No CIRCLED DIGIT FIVE
+2465 ; NFKC_CF; 0036 # No CIRCLED DIGIT SIX
+2466 ; NFKC_CF; 0037 # No CIRCLED DIGIT SEVEN
+2467 ; NFKC_CF; 0038 # No CIRCLED DIGIT EIGHT
+2468 ; NFKC_CF; 0039 # No CIRCLED DIGIT NINE
+2469 ; NFKC_CF; 0031 0030 # No CIRCLED NUMBER TEN
+246A ; NFKC_CF; 0031 0031 # No CIRCLED NUMBER ELEVEN
+246B ; NFKC_CF; 0031 0032 # No CIRCLED NUMBER TWELVE
+246C ; NFKC_CF; 0031 0033 # No CIRCLED NUMBER THIRTEEN
+246D ; NFKC_CF; 0031 0034 # No CIRCLED NUMBER FOURTEEN
+246E ; NFKC_CF; 0031 0035 # No CIRCLED NUMBER FIFTEEN
+246F ; NFKC_CF; 0031 0036 # No CIRCLED NUMBER SIXTEEN
+2470 ; NFKC_CF; 0031 0037 # No CIRCLED NUMBER SEVENTEEN
+2471 ; NFKC_CF; 0031 0038 # No CIRCLED NUMBER EIGHTEEN
+2472 ; NFKC_CF; 0031 0039 # No CIRCLED NUMBER NINETEEN
+2473 ; NFKC_CF; 0032 0030 # No CIRCLED NUMBER TWENTY
+2474 ; NFKC_CF; 0028 0031 0029 # No PARENTHESIZED DIGIT ONE
+2475 ; NFKC_CF; 0028 0032 0029 # No PARENTHESIZED DIGIT TWO
+2476 ; NFKC_CF; 0028 0033 0029 # No PARENTHESIZED DIGIT THREE
+2477 ; NFKC_CF; 0028 0034 0029 # No PARENTHESIZED DIGIT FOUR
+2478 ; NFKC_CF; 0028 0035 0029 # No PARENTHESIZED DIGIT FIVE
+2479 ; NFKC_CF; 0028 0036 0029 # No PARENTHESIZED DIGIT SIX
+247A ; NFKC_CF; 0028 0037 0029 # No PARENTHESIZED DIGIT SEVEN
+247B ; NFKC_CF; 0028 0038 0029 # No PARENTHESIZED DIGIT EIGHT
+247C ; NFKC_CF; 0028 0039 0029 # No PARENTHESIZED DIGIT NINE
+247D ; NFKC_CF; 0028 0031 0030 0029 #No PARENTHESIZED NUMBER TEN
+247E ; NFKC_CF; 0028 0031 0031 0029 #No PARENTHESIZED NUMBER ELEVEN
+247F ; NFKC_CF; 0028 0031 0032 0029 #No PARENTHESIZED NUMBER TWELVE
+2480 ; NFKC_CF; 0028 0031 0033 0029 #No PARENTHESIZED NUMBER THIRTEEN
+2481 ; NFKC_CF; 0028 0031 0034 0029 #No PARENTHESIZED NUMBER FOURTEEN
+2482 ; NFKC_CF; 0028 0031 0035 0029 #No PARENTHESIZED NUMBER FIFTEEN
+2483 ; NFKC_CF; 0028 0031 0036 0029 #No PARENTHESIZED NUMBER SIXTEEN
+2484 ; NFKC_CF; 0028 0031 0037 0029 #No PARENTHESIZED NUMBER SEVENTEEN
+2485 ; NFKC_CF; 0028 0031 0038 0029 #No PARENTHESIZED NUMBER EIGHTEEN
+2486 ; NFKC_CF; 0028 0031 0039 0029 #No PARENTHESIZED NUMBER NINETEEN
+2487 ; NFKC_CF; 0028 0032 0030 0029 #No PARENTHESIZED NUMBER TWENTY
+2488 ; NFKC_CF; 0031 002E # No DIGIT ONE FULL STOP
+2489 ; NFKC_CF; 0032 002E # No DIGIT TWO FULL STOP
+248A ; NFKC_CF; 0033 002E # No DIGIT THREE FULL STOP
+248B ; NFKC_CF; 0034 002E # No DIGIT FOUR FULL STOP
+248C ; NFKC_CF; 0035 002E # No DIGIT FIVE FULL STOP
+248D ; NFKC_CF; 0036 002E # No DIGIT SIX FULL STOP
+248E ; NFKC_CF; 0037 002E # No DIGIT SEVEN FULL STOP
+248F ; NFKC_CF; 0038 002E # No DIGIT EIGHT FULL STOP
+2490 ; NFKC_CF; 0039 002E # No DIGIT NINE FULL STOP
+2491 ; NFKC_CF; 0031 0030 002E # No NUMBER TEN FULL STOP
+2492 ; NFKC_CF; 0031 0031 002E # No NUMBER ELEVEN FULL STOP
+2493 ; NFKC_CF; 0031 0032 002E # No NUMBER TWELVE FULL STOP
+2494 ; NFKC_CF; 0031 0033 002E # No NUMBER THIRTEEN FULL STOP
+2495 ; NFKC_CF; 0031 0034 002E # No NUMBER FOURTEEN FULL STOP
+2496 ; NFKC_CF; 0031 0035 002E # No NUMBER FIFTEEN FULL STOP
+2497 ; NFKC_CF; 0031 0036 002E # No NUMBER SIXTEEN FULL STOP
+2498 ; NFKC_CF; 0031 0037 002E # No NUMBER SEVENTEEN FULL STOP
+2499 ; NFKC_CF; 0031 0038 002E # No NUMBER EIGHTEEN FULL STOP
+249A ; NFKC_CF; 0031 0039 002E # No NUMBER NINETEEN FULL STOP
+249B ; NFKC_CF; 0032 0030 002E # No NUMBER TWENTY FULL STOP
+249C ; NFKC_CF; 0028 0061 0029 # So PARENTHESIZED LATIN SMALL LETTER A
+249D ; NFKC_CF; 0028 0062 0029 # So PARENTHESIZED LATIN SMALL LETTER B
+249E ; NFKC_CF; 0028 0063 0029 # So PARENTHESIZED LATIN SMALL LETTER C
+249F ; NFKC_CF; 0028 0064 0029 # So PARENTHESIZED LATIN SMALL LETTER D
+24A0 ; NFKC_CF; 0028 0065 0029 # So PARENTHESIZED LATIN SMALL LETTER E
+24A1 ; NFKC_CF; 0028 0066 0029 # So PARENTHESIZED LATIN SMALL LETTER F
+24A2 ; NFKC_CF; 0028 0067 0029 # So PARENTHESIZED LATIN SMALL LETTER G
+24A3 ; NFKC_CF; 0028 0068 0029 # So PARENTHESIZED LATIN SMALL LETTER H
+24A4 ; NFKC_CF; 0028 0069 0029 # So PARENTHESIZED LATIN SMALL LETTER I
+24A5 ; NFKC_CF; 0028 006A 0029 # So PARENTHESIZED LATIN SMALL LETTER J
+24A6 ; NFKC_CF; 0028 006B 0029 # So PARENTHESIZED LATIN SMALL LETTER K
+24A7 ; NFKC_CF; 0028 006C 0029 # So PARENTHESIZED LATIN SMALL LETTER L
+24A8 ; NFKC_CF; 0028 006D 0029 # So PARENTHESIZED LATIN SMALL LETTER M
+24A9 ; NFKC_CF; 0028 006E 0029 # So PARENTHESIZED LATIN SMALL LETTER N
+24AA ; NFKC_CF; 0028 006F 0029 # So PARENTHESIZED LATIN SMALL LETTER O
+24AB ; NFKC_CF; 0028 0070 0029 # So PARENTHESIZED LATIN SMALL LETTER P
+24AC ; NFKC_CF; 0028 0071 0029 # So PARENTHESIZED LATIN SMALL LETTER Q
+24AD ; NFKC_CF; 0028 0072 0029 # So PARENTHESIZED LATIN SMALL LETTER R
+24AE ; NFKC_CF; 0028 0073 0029 # So PARENTHESIZED LATIN SMALL LETTER S
+24AF ; NFKC_CF; 0028 0074 0029 # So PARENTHESIZED LATIN SMALL LETTER T
+24B0 ; NFKC_CF; 0028 0075 0029 # So PARENTHESIZED LATIN SMALL LETTER U
+24B1 ; NFKC_CF; 0028 0076 0029 # So PARENTHESIZED LATIN SMALL LETTER V
+24B2 ; NFKC_CF; 0028 0077 0029 # So PARENTHESIZED LATIN SMALL LETTER W
+24B3 ; NFKC_CF; 0028 0078 0029 # So PARENTHESIZED LATIN SMALL LETTER X
+24B4 ; NFKC_CF; 0028 0079 0029 # So PARENTHESIZED LATIN SMALL LETTER Y
+24B5 ; NFKC_CF; 0028 007A 0029 # So PARENTHESIZED LATIN SMALL LETTER Z
+24B6 ; NFKC_CF; 0061 # So CIRCLED LATIN CAPITAL LETTER A
+24B7 ; NFKC_CF; 0062 # So CIRCLED LATIN CAPITAL LETTER B
+24B8 ; NFKC_CF; 0063 # So CIRCLED LATIN CAPITAL LETTER C
+24B9 ; NFKC_CF; 0064 # So CIRCLED LATIN CAPITAL LETTER D
+24BA ; NFKC_CF; 0065 # So CIRCLED LATIN CAPITAL LETTER E
+24BB ; NFKC_CF; 0066 # So CIRCLED LATIN CAPITAL LETTER F
+24BC ; NFKC_CF; 0067 # So CIRCLED LATIN CAPITAL LETTER G
+24BD ; NFKC_CF; 0068 # So CIRCLED LATIN CAPITAL LETTER H
+24BE ; NFKC_CF; 0069 # So CIRCLED LATIN CAPITAL LETTER I
+24BF ; NFKC_CF; 006A # So CIRCLED LATIN CAPITAL LETTER J
+24C0 ; NFKC_CF; 006B # So CIRCLED LATIN CAPITAL LETTER K
+24C1 ; NFKC_CF; 006C # So CIRCLED LATIN CAPITAL LETTER L
+24C2 ; NFKC_CF; 006D # So CIRCLED LATIN CAPITAL LETTER M
+24C3 ; NFKC_CF; 006E # So CIRCLED LATIN CAPITAL LETTER N
+24C4 ; NFKC_CF; 006F # So CIRCLED LATIN CAPITAL LETTER O
+24C5 ; NFKC_CF; 0070 # So CIRCLED LATIN CAPITAL LETTER P
+24C6 ; NFKC_CF; 0071 # So CIRCLED LATIN CAPITAL LETTER Q
+24C7 ; NFKC_CF; 0072 # So CIRCLED LATIN CAPITAL LETTER R
+24C8 ; NFKC_CF; 0073 # So CIRCLED LATIN CAPITAL LETTER S
+24C9 ; NFKC_CF; 0074 # So CIRCLED LATIN CAPITAL LETTER T
+24CA ; NFKC_CF; 0075 # So CIRCLED LATIN CAPITAL LETTER U
+24CB ; NFKC_CF; 0076 # So CIRCLED LATIN CAPITAL LETTER V
+24CC ; NFKC_CF; 0077 # So CIRCLED LATIN CAPITAL LETTER W
+24CD ; NFKC_CF; 0078 # So CIRCLED LATIN CAPITAL LETTER X
+24CE ; NFKC_CF; 0079 # So CIRCLED LATIN CAPITAL LETTER Y
+24CF ; NFKC_CF; 007A # So CIRCLED LATIN CAPITAL LETTER Z
+24D0 ; NFKC_CF; 0061 # So CIRCLED LATIN SMALL LETTER A
+24D1 ; NFKC_CF; 0062 # So CIRCLED LATIN SMALL LETTER B
+24D2 ; NFKC_CF; 0063 # So CIRCLED LATIN SMALL LETTER C
+24D3 ; NFKC_CF; 0064 # So CIRCLED LATIN SMALL LETTER D
+24D4 ; NFKC_CF; 0065 # So CIRCLED LATIN SMALL LETTER E
+24D5 ; NFKC_CF; 0066 # So CIRCLED LATIN SMALL LETTER F
+24D6 ; NFKC_CF; 0067 # So CIRCLED LATIN SMALL LETTER G
+24D7 ; NFKC_CF; 0068 # So CIRCLED LATIN SMALL LETTER H
+24D8 ; NFKC_CF; 0069 # So CIRCLED LATIN SMALL LETTER I
+24D9 ; NFKC_CF; 006A # So CIRCLED LATIN SMALL LETTER J
+24DA ; NFKC_CF; 006B # So CIRCLED LATIN SMALL LETTER K
+24DB ; NFKC_CF; 006C # So CIRCLED LATIN SMALL LETTER L
+24DC ; NFKC_CF; 006D # So CIRCLED LATIN SMALL LETTER M
+24DD ; NFKC_CF; 006E # So CIRCLED LATIN SMALL LETTER N
+24DE ; NFKC_CF; 006F # So CIRCLED LATIN SMALL LETTER O
+24DF ; NFKC_CF; 0070 # So CIRCLED LATIN SMALL LETTER P
+24E0 ; NFKC_CF; 0071 # So CIRCLED LATIN SMALL LETTER Q
+24E1 ; NFKC_CF; 0072 # So CIRCLED LATIN SMALL LETTER R
+24E2 ; NFKC_CF; 0073 # So CIRCLED LATIN SMALL LETTER S
+24E3 ; NFKC_CF; 0074 # So CIRCLED LATIN SMALL LETTER T
+24E4 ; NFKC_CF; 0075 # So CIRCLED LATIN SMALL LETTER U
+24E5 ; NFKC_CF; 0076 # So CIRCLED LATIN SMALL LETTER V
+24E6 ; NFKC_CF; 0077 # So CIRCLED LATIN SMALL LETTER W
+24E7 ; NFKC_CF; 0078 # So CIRCLED LATIN SMALL LETTER X
+24E8 ; NFKC_CF; 0079 # So CIRCLED LATIN SMALL LETTER Y
+24E9 ; NFKC_CF; 007A # So CIRCLED LATIN SMALL LETTER Z
+24EA ; NFKC_CF; 0030 # No CIRCLED DIGIT ZERO
+2A0C ; NFKC_CF; 222B 222B 222B 222B #Sm QUADRUPLE INTEGRAL OPERATOR
+2A74 ; NFKC_CF; 003A 003A 003D # Sm DOUBLE COLON EQUAL
+2A75 ; NFKC_CF; 003D 003D # Sm TWO CONSECUTIVE EQUALS SIGNS
+2A76 ; NFKC_CF; 003D 003D 003D # Sm THREE CONSECUTIVE EQUALS SIGNS
+2ADC ; NFKC_CF; 2ADD 0338 # Sm FORKING
+2C00 ; NFKC_CF; 2C30 # L& GLAGOLITIC CAPITAL LETTER AZU
+2C01 ; NFKC_CF; 2C31 # L& GLAGOLITIC CAPITAL LETTER BUKY
+2C02 ; NFKC_CF; 2C32 # L& GLAGOLITIC CAPITAL LETTER VEDE
+2C03 ; NFKC_CF; 2C33 # L& GLAGOLITIC CAPITAL LETTER GLAGOLI
+2C04 ; NFKC_CF; 2C34 # L& GLAGOLITIC CAPITAL LETTER DOBRO
+2C05 ; NFKC_CF; 2C35 # L& GLAGOLITIC CAPITAL LETTER YESTU
+2C06 ; NFKC_CF; 2C36 # L& GLAGOLITIC CAPITAL LETTER ZHIVETE
+2C07 ; NFKC_CF; 2C37 # L& GLAGOLITIC CAPITAL LETTER DZELO
+2C08 ; NFKC_CF; 2C38 # L& GLAGOLITIC CAPITAL LETTER ZEMLJA
+2C09 ; NFKC_CF; 2C39 # L& GLAGOLITIC CAPITAL LETTER IZHE
+2C0A ; NFKC_CF; 2C3A # L& GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+2C0B ; NFKC_CF; 2C3B # L& GLAGOLITIC CAPITAL LETTER I
+2C0C ; NFKC_CF; 2C3C # L& GLAGOLITIC CAPITAL LETTER DJERVI
+2C0D ; NFKC_CF; 2C3D # L& GLAGOLITIC CAPITAL LETTER KAKO
+2C0E ; NFKC_CF; 2C3E # L& GLAGOLITIC CAPITAL LETTER LJUDIJE
+2C0F ; NFKC_CF; 2C3F # L& GLAGOLITIC CAPITAL LETTER MYSLITE
+2C10 ; NFKC_CF; 2C40 # L& GLAGOLITIC CAPITAL LETTER NASHI
+2C11 ; NFKC_CF; 2C41 # L& GLAGOLITIC CAPITAL LETTER ONU
+2C12 ; NFKC_CF; 2C42 # L& GLAGOLITIC CAPITAL LETTER POKOJI
+2C13 ; NFKC_CF; 2C43 # L& GLAGOLITIC CAPITAL LETTER RITSI
+2C14 ; NFKC_CF; 2C44 # L& GLAGOLITIC CAPITAL LETTER SLOVO
+2C15 ; NFKC_CF; 2C45 # L& GLAGOLITIC CAPITAL LETTER TVRIDO
+2C16 ; NFKC_CF; 2C46 # L& GLAGOLITIC CAPITAL LETTER UKU
+2C17 ; NFKC_CF; 2C47 # L& GLAGOLITIC CAPITAL LETTER FRITU
+2C18 ; NFKC_CF; 2C48 # L& GLAGOLITIC CAPITAL LETTER HERU
+2C19 ; NFKC_CF; 2C49 # L& GLAGOLITIC CAPITAL LETTER OTU
+2C1A ; NFKC_CF; 2C4A # L& GLAGOLITIC CAPITAL LETTER PE
+2C1B ; NFKC_CF; 2C4B # L& GLAGOLITIC CAPITAL LETTER SHTA
+2C1C ; NFKC_CF; 2C4C # L& GLAGOLITIC CAPITAL LETTER TSI
+2C1D ; NFKC_CF; 2C4D # L& GLAGOLITIC CAPITAL LETTER CHRIVI
+2C1E ; NFKC_CF; 2C4E # L& GLAGOLITIC CAPITAL LETTER SHA
+2C1F ; NFKC_CF; 2C4F # L& GLAGOLITIC CAPITAL LETTER YERU
+2C20 ; NFKC_CF; 2C50 # L& GLAGOLITIC CAPITAL LETTER YERI
+2C21 ; NFKC_CF; 2C51 # L& GLAGOLITIC CAPITAL LETTER YATI
+2C22 ; NFKC_CF; 2C52 # L& GLAGOLITIC CAPITAL LETTER SPIDERY HA
+2C23 ; NFKC_CF; 2C53 # L& GLAGOLITIC CAPITAL LETTER YU
+2C24 ; NFKC_CF; 2C54 # L& GLAGOLITIC CAPITAL LETTER SMALL YUS
+2C25 ; NFKC_CF; 2C55 # L& GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+2C26 ; NFKC_CF; 2C56 # L& GLAGOLITIC CAPITAL LETTER YO
+2C27 ; NFKC_CF; 2C57 # L& GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+2C28 ; NFKC_CF; 2C58 # L& GLAGOLITIC CAPITAL LETTER BIG YUS
+2C29 ; NFKC_CF; 2C59 # L& GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+2C2A ; NFKC_CF; 2C5A # L& GLAGOLITIC CAPITAL LETTER FITA
+2C2B ; NFKC_CF; 2C5B # L& GLAGOLITIC CAPITAL LETTER IZHITSA
+2C2C ; NFKC_CF; 2C5C # L& GLAGOLITIC CAPITAL LETTER SHTAPIC
+2C2D ; NFKC_CF; 2C5D # L& GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+2C2E ; NFKC_CF; 2C5E # L& GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C2F ; NFKC_CF; 2C5F # L& GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+2C60 ; NFKC_CF; 2C61 # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62 ; NFKC_CF; 026B # L& LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+2C63 ; NFKC_CF; 1D7D # L& LATIN CAPITAL LETTER P WITH STROKE
+2C64 ; NFKC_CF; 027D # L& LATIN CAPITAL LETTER R WITH TAIL
+2C67 ; NFKC_CF; 2C68 # L& LATIN CAPITAL LETTER H WITH DESCENDER
+2C69 ; NFKC_CF; 2C6A # L& LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B ; NFKC_CF; 2C6C # L& LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D ; NFKC_CF; 0251 # L& LATIN CAPITAL LETTER ALPHA
+2C6E ; NFKC_CF; 0271 # L& LATIN CAPITAL LETTER M WITH HOOK
+2C6F ; NFKC_CF; 0250 # L& LATIN CAPITAL LETTER TURNED A
+2C70 ; NFKC_CF; 0252 # L& LATIN CAPITAL LETTER TURNED ALPHA
+2C72 ; NFKC_CF; 2C73 # L& LATIN CAPITAL LETTER W WITH HOOK
+2C75 ; NFKC_CF; 2C76 # L& LATIN CAPITAL LETTER HALF H
+2C7C ; NFKC_CF; 006A # Lm LATIN SUBSCRIPT SMALL LETTER J
+2C7D ; NFKC_CF; 0076 # Lm MODIFIER LETTER CAPITAL V
+2C7E ; NFKC_CF; 023F # L& LATIN CAPITAL LETTER S WITH SWASH TAIL
+2C7F ; NFKC_CF; 0240 # L& LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2C80 ; NFKC_CF; 2C81 # L& COPTIC CAPITAL LETTER ALFA
+2C82 ; NFKC_CF; 2C83 # L& COPTIC CAPITAL LETTER VIDA
+2C84 ; NFKC_CF; 2C85 # L& COPTIC CAPITAL LETTER GAMMA
+2C86 ; NFKC_CF; 2C87 # L& COPTIC CAPITAL LETTER DALDA
+2C88 ; NFKC_CF; 2C89 # L& COPTIC CAPITAL LETTER EIE
+2C8A ; NFKC_CF; 2C8B # L& COPTIC CAPITAL LETTER SOU
+2C8C ; NFKC_CF; 2C8D # L& COPTIC CAPITAL LETTER ZATA
+2C8E ; NFKC_CF; 2C8F # L& COPTIC CAPITAL LETTER HATE
+2C90 ; NFKC_CF; 2C91 # L& COPTIC CAPITAL LETTER THETHE
+2C92 ; NFKC_CF; 2C93 # L& COPTIC CAPITAL LETTER IAUDA
+2C94 ; NFKC_CF; 2C95 # L& COPTIC CAPITAL LETTER KAPA
+2C96 ; NFKC_CF; 2C97 # L& COPTIC CAPITAL LETTER LAULA
+2C98 ; NFKC_CF; 2C99 # L& COPTIC CAPITAL LETTER MI
+2C9A ; NFKC_CF; 2C9B # L& COPTIC CAPITAL LETTER NI
+2C9C ; NFKC_CF; 2C9D # L& COPTIC CAPITAL LETTER KSI
+2C9E ; NFKC_CF; 2C9F # L& COPTIC CAPITAL LETTER O
+2CA0 ; NFKC_CF; 2CA1 # L& COPTIC CAPITAL LETTER PI
+2CA2 ; NFKC_CF; 2CA3 # L& COPTIC CAPITAL LETTER RO
+2CA4 ; NFKC_CF; 2CA5 # L& COPTIC CAPITAL LETTER SIMA
+2CA6 ; NFKC_CF; 2CA7 # L& COPTIC CAPITAL LETTER TAU
+2CA8 ; NFKC_CF; 2CA9 # L& COPTIC CAPITAL LETTER UA
+2CAA ; NFKC_CF; 2CAB # L& COPTIC CAPITAL LETTER FI
+2CAC ; NFKC_CF; 2CAD # L& COPTIC CAPITAL LETTER KHI
+2CAE ; NFKC_CF; 2CAF # L& COPTIC CAPITAL LETTER PSI
+2CB0 ; NFKC_CF; 2CB1 # L& COPTIC CAPITAL LETTER OOU
+2CB2 ; NFKC_CF; 2CB3 # L& COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4 ; NFKC_CF; 2CB5 # L& COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6 ; NFKC_CF; 2CB7 # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8 ; NFKC_CF; 2CB9 # L& COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA ; NFKC_CF; 2CBB # L& COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC ; NFKC_CF; 2CBD # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE ; NFKC_CF; 2CBF # L& COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0 ; NFKC_CF; 2CC1 # L& COPTIC CAPITAL LETTER SAMPI
+2CC2 ; NFKC_CF; 2CC3 # L& COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4 ; NFKC_CF; 2CC5 # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6 ; NFKC_CF; 2CC7 # L& COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8 ; NFKC_CF; 2CC9 # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA ; NFKC_CF; 2CCB # L& COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC ; NFKC_CF; 2CCD # L& COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE ; NFKC_CF; 2CCF # L& COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0 ; NFKC_CF; 2CD1 # L& COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2 ; NFKC_CF; 2CD3 # L& COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4 ; NFKC_CF; 2CD5 # L& COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6 ; NFKC_CF; 2CD7 # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8 ; NFKC_CF; 2CD9 # L& COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA ; NFKC_CF; 2CDB # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC ; NFKC_CF; 2CDD # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE ; NFKC_CF; 2CDF # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0 ; NFKC_CF; 2CE1 # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2 ; NFKC_CF; 2CE3 # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB ; NFKC_CF; 2CEC # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED ; NFKC_CF; 2CEE # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2 ; NFKC_CF; 2CF3 # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI
+2D6F ; NFKC_CF; 2D61 # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2E9F ; NFKC_CF; 6BCD # So CJK RADICAL MOTHER
+2EF3 ; NFKC_CF; 9F9F # So CJK RADICAL C-SIMPLIFIED TURTLE
+2F00 ; NFKC_CF; 4E00 # So KANGXI RADICAL ONE
+2F01 ; NFKC_CF; 4E28 # So KANGXI RADICAL LINE
+2F02 ; NFKC_CF; 4E36 # So KANGXI RADICAL DOT
+2F03 ; NFKC_CF; 4E3F # So KANGXI RADICAL SLASH
+2F04 ; NFKC_CF; 4E59 # So KANGXI RADICAL SECOND
+2F05 ; NFKC_CF; 4E85 # So KANGXI RADICAL HOOK
+2F06 ; NFKC_CF; 4E8C # So KANGXI RADICAL TWO
+2F07 ; NFKC_CF; 4EA0 # So KANGXI RADICAL LID
+2F08 ; NFKC_CF; 4EBA # So KANGXI RADICAL MAN
+2F09 ; NFKC_CF; 513F # So KANGXI RADICAL LEGS
+2F0A ; NFKC_CF; 5165 # So KANGXI RADICAL ENTER
+2F0B ; NFKC_CF; 516B # So KANGXI RADICAL EIGHT
+2F0C ; NFKC_CF; 5182 # So KANGXI RADICAL DOWN BOX
+2F0D ; NFKC_CF; 5196 # So KANGXI RADICAL COVER
+2F0E ; NFKC_CF; 51AB # So KANGXI RADICAL ICE
+2F0F ; NFKC_CF; 51E0 # So KANGXI RADICAL TABLE
+2F10 ; NFKC_CF; 51F5 # So KANGXI RADICAL OPEN BOX
+2F11 ; NFKC_CF; 5200 # So KANGXI RADICAL KNIFE
+2F12 ; NFKC_CF; 529B # So KANGXI RADICAL POWER
+2F13 ; NFKC_CF; 52F9 # So KANGXI RADICAL WRAP
+2F14 ; NFKC_CF; 5315 # So KANGXI RADICAL SPOON
+2F15 ; NFKC_CF; 531A # So KANGXI RADICAL RIGHT OPEN BOX
+2F16 ; NFKC_CF; 5338 # So KANGXI RADICAL HIDING ENCLOSURE
+2F17 ; NFKC_CF; 5341 # So KANGXI RADICAL TEN
+2F18 ; NFKC_CF; 535C # So KANGXI RADICAL DIVINATION
+2F19 ; NFKC_CF; 5369 # So KANGXI RADICAL SEAL
+2F1A ; NFKC_CF; 5382 # So KANGXI RADICAL CLIFF
+2F1B ; NFKC_CF; 53B6 # So KANGXI RADICAL PRIVATE
+2F1C ; NFKC_CF; 53C8 # So KANGXI RADICAL AGAIN
+2F1D ; NFKC_CF; 53E3 # So KANGXI RADICAL MOUTH
+2F1E ; NFKC_CF; 56D7 # So KANGXI RADICAL ENCLOSURE
+2F1F ; NFKC_CF; 571F # So KANGXI RADICAL EARTH
+2F20 ; NFKC_CF; 58EB # So KANGXI RADICAL SCHOLAR
+2F21 ; NFKC_CF; 5902 # So KANGXI RADICAL GO
+2F22 ; NFKC_CF; 590A # So KANGXI RADICAL GO SLOWLY
+2F23 ; NFKC_CF; 5915 # So KANGXI RADICAL EVENING
+2F24 ; NFKC_CF; 5927 # So KANGXI RADICAL BIG
+2F25 ; NFKC_CF; 5973 # So KANGXI RADICAL WOMAN
+2F26 ; NFKC_CF; 5B50 # So KANGXI RADICAL CHILD
+2F27 ; NFKC_CF; 5B80 # So KANGXI RADICAL ROOF
+2F28 ; NFKC_CF; 5BF8 # So KANGXI RADICAL INCH
+2F29 ; NFKC_CF; 5C0F # So KANGXI RADICAL SMALL
+2F2A ; NFKC_CF; 5C22 # So KANGXI RADICAL LAME
+2F2B ; NFKC_CF; 5C38 # So KANGXI RADICAL CORPSE
+2F2C ; NFKC_CF; 5C6E # So KANGXI RADICAL SPROUT
+2F2D ; NFKC_CF; 5C71 # So KANGXI RADICAL MOUNTAIN
+2F2E ; NFKC_CF; 5DDB # So KANGXI RADICAL RIVER
+2F2F ; NFKC_CF; 5DE5 # So KANGXI RADICAL WORK
+2F30 ; NFKC_CF; 5DF1 # So KANGXI RADICAL ONESELF
+2F31 ; NFKC_CF; 5DFE # So KANGXI RADICAL TURBAN
+2F32 ; NFKC_CF; 5E72 # So KANGXI RADICAL DRY
+2F33 ; NFKC_CF; 5E7A # So KANGXI RADICAL SHORT THREAD
+2F34 ; NFKC_CF; 5E7F # So KANGXI RADICAL DOTTED CLIFF
+2F35 ; NFKC_CF; 5EF4 # So KANGXI RADICAL LONG STRIDE
+2F36 ; NFKC_CF; 5EFE # So KANGXI RADICAL TWO HANDS
+2F37 ; NFKC_CF; 5F0B # So KANGXI RADICAL SHOOT
+2F38 ; NFKC_CF; 5F13 # So KANGXI RADICAL BOW
+2F39 ; NFKC_CF; 5F50 # So KANGXI RADICAL SNOUT
+2F3A ; NFKC_CF; 5F61 # So KANGXI RADICAL BRISTLE
+2F3B ; NFKC_CF; 5F73 # So KANGXI RADICAL STEP
+2F3C ; NFKC_CF; 5FC3 # So KANGXI RADICAL HEART
+2F3D ; NFKC_CF; 6208 # So KANGXI RADICAL HALBERD
+2F3E ; NFKC_CF; 6236 # So KANGXI RADICAL DOOR
+2F3F ; NFKC_CF; 624B # So KANGXI RADICAL HAND
+2F40 ; NFKC_CF; 652F # So KANGXI RADICAL BRANCH
+2F41 ; NFKC_CF; 6534 # So KANGXI RADICAL RAP
+2F42 ; NFKC_CF; 6587 # So KANGXI RADICAL SCRIPT
+2F43 ; NFKC_CF; 6597 # So KANGXI RADICAL DIPPER
+2F44 ; NFKC_CF; 65A4 # So KANGXI RADICAL AXE
+2F45 ; NFKC_CF; 65B9 # So KANGXI RADICAL SQUARE
+2F46 ; NFKC_CF; 65E0 # So KANGXI RADICAL NOT
+2F47 ; NFKC_CF; 65E5 # So KANGXI RADICAL SUN
+2F48 ; NFKC_CF; 66F0 # So KANGXI RADICAL SAY
+2F49 ; NFKC_CF; 6708 # So KANGXI RADICAL MOON
+2F4A ; NFKC_CF; 6728 # So KANGXI RADICAL TREE
+2F4B ; NFKC_CF; 6B20 # So KANGXI RADICAL LACK
+2F4C ; NFKC_CF; 6B62 # So KANGXI RADICAL STOP
+2F4D ; NFKC_CF; 6B79 # So KANGXI RADICAL DEATH
+2F4E ; NFKC_CF; 6BB3 # So KANGXI RADICAL WEAPON
+2F4F ; NFKC_CF; 6BCB # So KANGXI RADICAL DO NOT
+2F50 ; NFKC_CF; 6BD4 # So KANGXI RADICAL COMPARE
+2F51 ; NFKC_CF; 6BDB # So KANGXI RADICAL FUR
+2F52 ; NFKC_CF; 6C0F # So KANGXI RADICAL CLAN
+2F53 ; NFKC_CF; 6C14 # So KANGXI RADICAL STEAM
+2F54 ; NFKC_CF; 6C34 # So KANGXI RADICAL WATER
+2F55 ; NFKC_CF; 706B # So KANGXI RADICAL FIRE
+2F56 ; NFKC_CF; 722A # So KANGXI RADICAL CLAW
+2F57 ; NFKC_CF; 7236 # So KANGXI RADICAL FATHER
+2F58 ; NFKC_CF; 723B # So KANGXI RADICAL DOUBLE X
+2F59 ; NFKC_CF; 723F # So KANGXI RADICAL HALF TREE TRUNK
+2F5A ; NFKC_CF; 7247 # So KANGXI RADICAL SLICE
+2F5B ; NFKC_CF; 7259 # So KANGXI RADICAL FANG
+2F5C ; NFKC_CF; 725B # So KANGXI RADICAL COW
+2F5D ; NFKC_CF; 72AC # So KANGXI RADICAL DOG
+2F5E ; NFKC_CF; 7384 # So KANGXI RADICAL PROFOUND
+2F5F ; NFKC_CF; 7389 # So KANGXI RADICAL JADE
+2F60 ; NFKC_CF; 74DC # So KANGXI RADICAL MELON
+2F61 ; NFKC_CF; 74E6 # So KANGXI RADICAL TILE
+2F62 ; NFKC_CF; 7518 # So KANGXI RADICAL SWEET
+2F63 ; NFKC_CF; 751F # So KANGXI RADICAL LIFE
+2F64 ; NFKC_CF; 7528 # So KANGXI RADICAL USE
+2F65 ; NFKC_CF; 7530 # So KANGXI RADICAL FIELD
+2F66 ; NFKC_CF; 758B # So KANGXI RADICAL BOLT OF CLOTH
+2F67 ; NFKC_CF; 7592 # So KANGXI RADICAL SICKNESS
+2F68 ; NFKC_CF; 7676 # So KANGXI RADICAL DOTTED TENT
+2F69 ; NFKC_CF; 767D # So KANGXI RADICAL WHITE
+2F6A ; NFKC_CF; 76AE # So KANGXI RADICAL SKIN
+2F6B ; NFKC_CF; 76BF # So KANGXI RADICAL DISH
+2F6C ; NFKC_CF; 76EE # So KANGXI RADICAL EYE
+2F6D ; NFKC_CF; 77DB # So KANGXI RADICAL SPEAR
+2F6E ; NFKC_CF; 77E2 # So KANGXI RADICAL ARROW
+2F6F ; NFKC_CF; 77F3 # So KANGXI RADICAL STONE
+2F70 ; NFKC_CF; 793A # So KANGXI RADICAL SPIRIT
+2F71 ; NFKC_CF; 79B8 # So KANGXI RADICAL TRACK
+2F72 ; NFKC_CF; 79BE # So KANGXI RADICAL GRAIN
+2F73 ; NFKC_CF; 7A74 # So KANGXI RADICAL CAVE
+2F74 ; NFKC_CF; 7ACB # So KANGXI RADICAL STAND
+2F75 ; NFKC_CF; 7AF9 # So KANGXI RADICAL BAMBOO
+2F76 ; NFKC_CF; 7C73 # So KANGXI RADICAL RICE
+2F77 ; NFKC_CF; 7CF8 # So KANGXI RADICAL SILK
+2F78 ; NFKC_CF; 7F36 # So KANGXI RADICAL JAR
+2F79 ; NFKC_CF; 7F51 # So KANGXI RADICAL NET
+2F7A ; NFKC_CF; 7F8A # So KANGXI RADICAL SHEEP
+2F7B ; NFKC_CF; 7FBD # So KANGXI RADICAL FEATHER
+2F7C ; NFKC_CF; 8001 # So KANGXI RADICAL OLD
+2F7D ; NFKC_CF; 800C # So KANGXI RADICAL AND
+2F7E ; NFKC_CF; 8012 # So KANGXI RADICAL PLOW
+2F7F ; NFKC_CF; 8033 # So KANGXI RADICAL EAR
+2F80 ; NFKC_CF; 807F # So KANGXI RADICAL BRUSH
+2F81 ; NFKC_CF; 8089 # So KANGXI RADICAL MEAT
+2F82 ; NFKC_CF; 81E3 # So KANGXI RADICAL MINISTER
+2F83 ; NFKC_CF; 81EA # So KANGXI RADICAL SELF
+2F84 ; NFKC_CF; 81F3 # So KANGXI RADICAL ARRIVE
+2F85 ; NFKC_CF; 81FC # So KANGXI RADICAL MORTAR
+2F86 ; NFKC_CF; 820C # So KANGXI RADICAL TONGUE
+2F87 ; NFKC_CF; 821B # So KANGXI RADICAL OPPOSE
+2F88 ; NFKC_CF; 821F # So KANGXI RADICAL BOAT
+2F89 ; NFKC_CF; 826E # So KANGXI RADICAL STOPPING
+2F8A ; NFKC_CF; 8272 # So KANGXI RADICAL COLOR
+2F8B ; NFKC_CF; 8278 # So KANGXI RADICAL GRASS
+2F8C ; NFKC_CF; 864D # So KANGXI RADICAL TIGER
+2F8D ; NFKC_CF; 866B # So KANGXI RADICAL INSECT
+2F8E ; NFKC_CF; 8840 # So KANGXI RADICAL BLOOD
+2F8F ; NFKC_CF; 884C # So KANGXI RADICAL WALK ENCLOSURE
+2F90 ; NFKC_CF; 8863 # So KANGXI RADICAL CLOTHES
+2F91 ; NFKC_CF; 897E # So KANGXI RADICAL WEST
+2F92 ; NFKC_CF; 898B # So KANGXI RADICAL SEE
+2F93 ; NFKC_CF; 89D2 # So KANGXI RADICAL HORN
+2F94 ; NFKC_CF; 8A00 # So KANGXI RADICAL SPEECH
+2F95 ; NFKC_CF; 8C37 # So KANGXI RADICAL VALLEY
+2F96 ; NFKC_CF; 8C46 # So KANGXI RADICAL BEAN
+2F97 ; NFKC_CF; 8C55 # So KANGXI RADICAL PIG
+2F98 ; NFKC_CF; 8C78 # So KANGXI RADICAL BADGER
+2F99 ; NFKC_CF; 8C9D # So KANGXI RADICAL SHELL
+2F9A ; NFKC_CF; 8D64 # So KANGXI RADICAL RED
+2F9B ; NFKC_CF; 8D70 # So KANGXI RADICAL RUN
+2F9C ; NFKC_CF; 8DB3 # So KANGXI RADICAL FOOT
+2F9D ; NFKC_CF; 8EAB # So KANGXI RADICAL BODY
+2F9E ; NFKC_CF; 8ECA # So KANGXI RADICAL CART
+2F9F ; NFKC_CF; 8F9B # So KANGXI RADICAL BITTER
+2FA0 ; NFKC_CF; 8FB0 # So KANGXI RADICAL MORNING
+2FA1 ; NFKC_CF; 8FB5 # So KANGXI RADICAL WALK
+2FA2 ; NFKC_CF; 9091 # So KANGXI RADICAL CITY
+2FA3 ; NFKC_CF; 9149 # So KANGXI RADICAL WINE
+2FA4 ; NFKC_CF; 91C6 # So KANGXI RADICAL DISTINGUISH
+2FA5 ; NFKC_CF; 91CC # So KANGXI RADICAL VILLAGE
+2FA6 ; NFKC_CF; 91D1 # So KANGXI RADICAL GOLD
+2FA7 ; NFKC_CF; 9577 # So KANGXI RADICAL LONG
+2FA8 ; NFKC_CF; 9580 # So KANGXI RADICAL GATE
+2FA9 ; NFKC_CF; 961C # So KANGXI RADICAL MOUND
+2FAA ; NFKC_CF; 96B6 # So KANGXI RADICAL SLAVE
+2FAB ; NFKC_CF; 96B9 # So KANGXI RADICAL SHORT TAILED BIRD
+2FAC ; NFKC_CF; 96E8 # So KANGXI RADICAL RAIN
+2FAD ; NFKC_CF; 9751 # So KANGXI RADICAL BLUE
+2FAE ; NFKC_CF; 975E # So KANGXI RADICAL WRONG
+2FAF ; NFKC_CF; 9762 # So KANGXI RADICAL FACE
+2FB0 ; NFKC_CF; 9769 # So KANGXI RADICAL LEATHER
+2FB1 ; NFKC_CF; 97CB # So KANGXI RADICAL TANNED LEATHER
+2FB2 ; NFKC_CF; 97ED # So KANGXI RADICAL LEEK
+2FB3 ; NFKC_CF; 97F3 # So KANGXI RADICAL SOUND
+2FB4 ; NFKC_CF; 9801 # So KANGXI RADICAL LEAF
+2FB5 ; NFKC_CF; 98A8 # So KANGXI RADICAL WIND
+2FB6 ; NFKC_CF; 98DB # So KANGXI RADICAL FLY
+2FB7 ; NFKC_CF; 98DF # So KANGXI RADICAL EAT
+2FB8 ; NFKC_CF; 9996 # So KANGXI RADICAL HEAD
+2FB9 ; NFKC_CF; 9999 # So KANGXI RADICAL FRAGRANT
+2FBA ; NFKC_CF; 99AC # So KANGXI RADICAL HORSE
+2FBB ; NFKC_CF; 9AA8 # So KANGXI RADICAL BONE
+2FBC ; NFKC_CF; 9AD8 # So KANGXI RADICAL TALL
+2FBD ; NFKC_CF; 9ADF # So KANGXI RADICAL HAIR
+2FBE ; NFKC_CF; 9B25 # So KANGXI RADICAL FIGHT
+2FBF ; NFKC_CF; 9B2F # So KANGXI RADICAL SACRIFICIAL WINE
+2FC0 ; NFKC_CF; 9B32 # So KANGXI RADICAL CAULDRON
+2FC1 ; NFKC_CF; 9B3C # So KANGXI RADICAL GHOST
+2FC2 ; NFKC_CF; 9B5A # So KANGXI RADICAL FISH
+2FC3 ; NFKC_CF; 9CE5 # So KANGXI RADICAL BIRD
+2FC4 ; NFKC_CF; 9E75 # So KANGXI RADICAL SALT
+2FC5 ; NFKC_CF; 9E7F # So KANGXI RADICAL DEER
+2FC6 ; NFKC_CF; 9EA5 # So KANGXI RADICAL WHEAT
+2FC7 ; NFKC_CF; 9EBB # So KANGXI RADICAL HEMP
+2FC8 ; NFKC_CF; 9EC3 # So KANGXI RADICAL YELLOW
+2FC9 ; NFKC_CF; 9ECD # So KANGXI RADICAL MILLET
+2FCA ; NFKC_CF; 9ED1 # So KANGXI RADICAL BLACK
+2FCB ; NFKC_CF; 9EF9 # So KANGXI RADICAL EMBROIDERY
+2FCC ; NFKC_CF; 9EFD # So KANGXI RADICAL FROG
+2FCD ; NFKC_CF; 9F0E # So KANGXI RADICAL TRIPOD
+2FCE ; NFKC_CF; 9F13 # So KANGXI RADICAL DRUM
+2FCF ; NFKC_CF; 9F20 # So KANGXI RADICAL RAT
+2FD0 ; NFKC_CF; 9F3B # So KANGXI RADICAL NOSE
+2FD1 ; NFKC_CF; 9F4A # So KANGXI RADICAL EVEN
+2FD2 ; NFKC_CF; 9F52 # So KANGXI RADICAL TOOTH
+2FD3 ; NFKC_CF; 9F8D # So KANGXI RADICAL DRAGON
+2FD4 ; NFKC_CF; 9F9C # So KANGXI RADICAL TURTLE
+2FD5 ; NFKC_CF; 9FA0 # So KANGXI RADICAL FLUTE
+3000 ; NFKC_CF; 0020 # Zs IDEOGRAPHIC SPACE
+3036 ; NFKC_CF; 3012 # So CIRCLED POSTAL MARK
+3038 ; NFKC_CF; 5341 # Nl HANGZHOU NUMERAL TEN
+3039 ; NFKC_CF; 5344 # Nl HANGZHOU NUMERAL TWENTY
+303A ; NFKC_CF; 5345 # Nl HANGZHOU NUMERAL THIRTY
+309B ; NFKC_CF; 0020 3099 # Sk KATAKANA-HIRAGANA VOICED SOUND MARK
+309C ; NFKC_CF; 0020 309A # Sk KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309F ; NFKC_CF; 3088 308A # Lo HIRAGANA DIGRAPH YORI
+30FF ; NFKC_CF; 30B3 30C8 # Lo KATAKANA DIGRAPH KOTO
+3131 ; NFKC_CF; 1100 # Lo HANGUL LETTER KIYEOK
+3132 ; NFKC_CF; 1101 # Lo HANGUL LETTER SSANGKIYEOK
+3133 ; NFKC_CF; 11AA # Lo HANGUL LETTER KIYEOK-SIOS
+3134 ; NFKC_CF; 1102 # Lo HANGUL LETTER NIEUN
+3135 ; NFKC_CF; 11AC # Lo HANGUL LETTER NIEUN-CIEUC
+3136 ; NFKC_CF; 11AD # Lo HANGUL LETTER NIEUN-HIEUH
+3137 ; NFKC_CF; 1103 # Lo HANGUL LETTER TIKEUT
+3138 ; NFKC_CF; 1104 # Lo HANGUL LETTER SSANGTIKEUT
+3139 ; NFKC_CF; 1105 # Lo HANGUL LETTER RIEUL
+313A ; NFKC_CF; 11B0 # Lo HANGUL LETTER RIEUL-KIYEOK
+313B ; NFKC_CF; 11B1 # Lo HANGUL LETTER RIEUL-MIEUM
+313C ; NFKC_CF; 11B2 # Lo HANGUL LETTER RIEUL-PIEUP
+313D ; NFKC_CF; 11B3 # Lo HANGUL LETTER RIEUL-SIOS
+313E ; NFKC_CF; 11B4 # Lo HANGUL LETTER RIEUL-THIEUTH
+313F ; NFKC_CF; 11B5 # Lo HANGUL LETTER RIEUL-PHIEUPH
+3140 ; NFKC_CF; 111A # Lo HANGUL LETTER RIEUL-HIEUH
+3141 ; NFKC_CF; 1106 # Lo HANGUL LETTER MIEUM
+3142 ; NFKC_CF; 1107 # Lo HANGUL LETTER PIEUP
+3143 ; NFKC_CF; 1108 # Lo HANGUL LETTER SSANGPIEUP
+3144 ; NFKC_CF; 1121 # Lo HANGUL LETTER PIEUP-SIOS
+3145 ; NFKC_CF; 1109 # Lo HANGUL LETTER SIOS
+3146 ; NFKC_CF; 110A # Lo HANGUL LETTER SSANGSIOS
+3147 ; NFKC_CF; 110B # Lo HANGUL LETTER IEUNG
+3148 ; NFKC_CF; 110C # Lo HANGUL LETTER CIEUC
+3149 ; NFKC_CF; 110D # Lo HANGUL LETTER SSANGCIEUC
+314A ; NFKC_CF; 110E # Lo HANGUL LETTER CHIEUCH
+314B ; NFKC_CF; 110F # Lo HANGUL LETTER KHIEUKH
+314C ; NFKC_CF; 1110 # Lo HANGUL LETTER THIEUTH
+314D ; NFKC_CF; 1111 # Lo HANGUL LETTER PHIEUPH
+314E ; NFKC_CF; 1112 # Lo HANGUL LETTER HIEUH
+314F ; NFKC_CF; 1161 # Lo HANGUL LETTER A
+3150 ; NFKC_CF; 1162 # Lo HANGUL LETTER AE
+3151 ; NFKC_CF; 1163 # Lo HANGUL LETTER YA
+3152 ; NFKC_CF; 1164 # Lo HANGUL LETTER YAE
+3153 ; NFKC_CF; 1165 # Lo HANGUL LETTER EO
+3154 ; NFKC_CF; 1166 # Lo HANGUL LETTER E
+3155 ; NFKC_CF; 1167 # Lo HANGUL LETTER YEO
+3156 ; NFKC_CF; 1168 # Lo HANGUL LETTER YE
+3157 ; NFKC_CF; 1169 # Lo HANGUL LETTER O
+3158 ; NFKC_CF; 116A # Lo HANGUL LETTER WA
+3159 ; NFKC_CF; 116B # Lo HANGUL LETTER WAE
+315A ; NFKC_CF; 116C # Lo HANGUL LETTER OE
+315B ; NFKC_CF; 116D # Lo HANGUL LETTER YO
+315C ; NFKC_CF; 116E # Lo HANGUL LETTER U
+315D ; NFKC_CF; 116F # Lo HANGUL LETTER WEO
+315E ; NFKC_CF; 1170 # Lo HANGUL LETTER WE
+315F ; NFKC_CF; 1171 # Lo HANGUL LETTER WI
+3160 ; NFKC_CF; 1172 # Lo HANGUL LETTER YU
+3161 ; NFKC_CF; 1173 # Lo HANGUL LETTER EU
+3162 ; NFKC_CF; 1174 # Lo HANGUL LETTER YI
+3163 ; NFKC_CF; 1175 # Lo HANGUL LETTER I
+3164 ; NFKC_CF; # Lo HANGUL FILLER
+3165 ; NFKC_CF; 1114 # Lo HANGUL LETTER SSANGNIEUN
+3166 ; NFKC_CF; 1115 # Lo HANGUL LETTER NIEUN-TIKEUT
+3167 ; NFKC_CF; 11C7 # Lo HANGUL LETTER NIEUN-SIOS
+3168 ; NFKC_CF; 11C8 # Lo HANGUL LETTER NIEUN-PANSIOS
+3169 ; NFKC_CF; 11CC # Lo HANGUL LETTER RIEUL-KIYEOK-SIOS
+316A ; NFKC_CF; 11CE # Lo HANGUL LETTER RIEUL-TIKEUT
+316B ; NFKC_CF; 11D3 # Lo HANGUL LETTER RIEUL-PIEUP-SIOS
+316C ; NFKC_CF; 11D7 # Lo HANGUL LETTER RIEUL-PANSIOS
+316D ; NFKC_CF; 11D9 # Lo HANGUL LETTER RIEUL-YEORINHIEUH
+316E ; NFKC_CF; 111C # Lo HANGUL LETTER MIEUM-PIEUP
+316F ; NFKC_CF; 11DD # Lo HANGUL LETTER MIEUM-SIOS
+3170 ; NFKC_CF; 11DF # Lo HANGUL LETTER MIEUM-PANSIOS
+3171 ; NFKC_CF; 111D # Lo HANGUL LETTER KAPYEOUNMIEUM
+3172 ; NFKC_CF; 111E # Lo HANGUL LETTER PIEUP-KIYEOK
+3173 ; NFKC_CF; 1120 # Lo HANGUL LETTER PIEUP-TIKEUT
+3174 ; NFKC_CF; 1122 # Lo HANGUL LETTER PIEUP-SIOS-KIYEOK
+3175 ; NFKC_CF; 1123 # Lo HANGUL LETTER PIEUP-SIOS-TIKEUT
+3176 ; NFKC_CF; 1127 # Lo HANGUL LETTER PIEUP-CIEUC
+3177 ; NFKC_CF; 1129 # Lo HANGUL LETTER PIEUP-THIEUTH
+3178 ; NFKC_CF; 112B # Lo HANGUL LETTER KAPYEOUNPIEUP
+3179 ; NFKC_CF; 112C # Lo HANGUL LETTER KAPYEOUNSSANGPIEUP
+317A ; NFKC_CF; 112D # Lo HANGUL LETTER SIOS-KIYEOK
+317B ; NFKC_CF; 112E # Lo HANGUL LETTER SIOS-NIEUN
+317C ; NFKC_CF; 112F # Lo HANGUL LETTER SIOS-TIKEUT
+317D ; NFKC_CF; 1132 # Lo HANGUL LETTER SIOS-PIEUP
+317E ; NFKC_CF; 1136 # Lo HANGUL LETTER SIOS-CIEUC
+317F ; NFKC_CF; 1140 # Lo HANGUL LETTER PANSIOS
+3180 ; NFKC_CF; 1147 # Lo HANGUL LETTER SSANGIEUNG
+3181 ; NFKC_CF; 114C # Lo HANGUL LETTER YESIEUNG
+3182 ; NFKC_CF; 11F1 # Lo HANGUL LETTER YESIEUNG-SIOS
+3183 ; NFKC_CF; 11F2 # Lo HANGUL LETTER YESIEUNG-PANSIOS
+3184 ; NFKC_CF; 1157 # Lo HANGUL LETTER KAPYEOUNPHIEUPH
+3185 ; NFKC_CF; 1158 # Lo HANGUL LETTER SSANGHIEUH
+3186 ; NFKC_CF; 1159 # Lo HANGUL LETTER YEORINHIEUH
+3187 ; NFKC_CF; 1184 # Lo HANGUL LETTER YO-YA
+3188 ; NFKC_CF; 1185 # Lo HANGUL LETTER YO-YAE
+3189 ; NFKC_CF; 1188 # Lo HANGUL LETTER YO-I
+318A ; NFKC_CF; 1191 # Lo HANGUL LETTER YU-YEO
+318B ; NFKC_CF; 1192 # Lo HANGUL LETTER YU-YE
+318C ; NFKC_CF; 1194 # Lo HANGUL LETTER YU-I
+318D ; NFKC_CF; 119E # Lo HANGUL LETTER ARAEA
+318E ; NFKC_CF; 11A1 # Lo HANGUL LETTER ARAEAE
+3192 ; NFKC_CF; 4E00 # No IDEOGRAPHIC ANNOTATION ONE MARK
+3193 ; NFKC_CF; 4E8C # No IDEOGRAPHIC ANNOTATION TWO MARK
+3194 ; NFKC_CF; 4E09 # No IDEOGRAPHIC ANNOTATION THREE MARK
+3195 ; NFKC_CF; 56DB # No IDEOGRAPHIC ANNOTATION FOUR MARK
+3196 ; NFKC_CF; 4E0A # So IDEOGRAPHIC ANNOTATION TOP MARK
+3197 ; NFKC_CF; 4E2D # So IDEOGRAPHIC ANNOTATION MIDDLE MARK
+3198 ; NFKC_CF; 4E0B # So IDEOGRAPHIC ANNOTATION BOTTOM MARK
+3199 ; NFKC_CF; 7532 # So IDEOGRAPHIC ANNOTATION FIRST MARK
+319A ; NFKC_CF; 4E59 # So IDEOGRAPHIC ANNOTATION SECOND MARK
+319B ; NFKC_CF; 4E19 # So IDEOGRAPHIC ANNOTATION THIRD MARK
+319C ; NFKC_CF; 4E01 # So IDEOGRAPHIC ANNOTATION FOURTH MARK
+319D ; NFKC_CF; 5929 # So IDEOGRAPHIC ANNOTATION HEAVEN MARK
+319E ; NFKC_CF; 5730 # So IDEOGRAPHIC ANNOTATION EARTH MARK
+319F ; NFKC_CF; 4EBA # So IDEOGRAPHIC ANNOTATION MAN MARK
+3200 ; NFKC_CF; 0028 1100 0029 # So PARENTHESIZED HANGUL KIYEOK
+3201 ; NFKC_CF; 0028 1102 0029 # So PARENTHESIZED HANGUL NIEUN
+3202 ; NFKC_CF; 0028 1103 0029 # So PARENTHESIZED HANGUL TIKEUT
+3203 ; NFKC_CF; 0028 1105 0029 # So PARENTHESIZED HANGUL RIEUL
+3204 ; NFKC_CF; 0028 1106 0029 # So PARENTHESIZED HANGUL MIEUM
+3205 ; NFKC_CF; 0028 1107 0029 # So PARENTHESIZED HANGUL PIEUP
+3206 ; NFKC_CF; 0028 1109 0029 # So PARENTHESIZED HANGUL SIOS
+3207 ; NFKC_CF; 0028 110B 0029 # So PARENTHESIZED HANGUL IEUNG
+3208 ; NFKC_CF; 0028 110C 0029 # So PARENTHESIZED HANGUL CIEUC
+3209 ; NFKC_CF; 0028 110E 0029 # So PARENTHESIZED HANGUL CHIEUCH
+320A ; NFKC_CF; 0028 110F 0029 # So PARENTHESIZED HANGUL KHIEUKH
+320B ; NFKC_CF; 0028 1110 0029 # So PARENTHESIZED HANGUL THIEUTH
+320C ; NFKC_CF; 0028 1111 0029 # So PARENTHESIZED HANGUL PHIEUPH
+320D ; NFKC_CF; 0028 1112 0029 # So PARENTHESIZED HANGUL HIEUH
+320E ; NFKC_CF; 0028 AC00 0029 # So PARENTHESIZED HANGUL KIYEOK A
+320F ; NFKC_CF; 0028 B098 0029 # So PARENTHESIZED HANGUL NIEUN A
+3210 ; NFKC_CF; 0028 B2E4 0029 # So PARENTHESIZED HANGUL TIKEUT A
+3211 ; NFKC_CF; 0028 B77C 0029 # So PARENTHESIZED HANGUL RIEUL A
+3212 ; NFKC_CF; 0028 B9C8 0029 # So PARENTHESIZED HANGUL MIEUM A
+3213 ; NFKC_CF; 0028 BC14 0029 # So PARENTHESIZED HANGUL PIEUP A
+3214 ; NFKC_CF; 0028 C0AC 0029 # So PARENTHESIZED HANGUL SIOS A
+3215 ; NFKC_CF; 0028 C544 0029 # So PARENTHESIZED HANGUL IEUNG A
+3216 ; NFKC_CF; 0028 C790 0029 # So PARENTHESIZED HANGUL CIEUC A
+3217 ; NFKC_CF; 0028 CC28 0029 # So PARENTHESIZED HANGUL CHIEUCH A
+3218 ; NFKC_CF; 0028 CE74 0029 # So PARENTHESIZED HANGUL KHIEUKH A
+3219 ; NFKC_CF; 0028 D0C0 0029 # So PARENTHESIZED HANGUL THIEUTH A
+321A ; NFKC_CF; 0028 D30C 0029 # So PARENTHESIZED HANGUL PHIEUPH A
+321B ; NFKC_CF; 0028 D558 0029 # So PARENTHESIZED HANGUL HIEUH A
+321C ; NFKC_CF; 0028 C8FC 0029 # So PARENTHESIZED HANGUL CIEUC U
+321D ; NFKC_CF; 0028 C624 C804 0029 #So PARENTHESIZED KOREAN CHARACTER OJEON
+321E ; NFKC_CF; 0028 C624 D6C4 0029 #So PARENTHESIZED KOREAN CHARACTER O HU
+3220 ; NFKC_CF; 0028 4E00 0029 # No PARENTHESIZED IDEOGRAPH ONE
+3221 ; NFKC_CF; 0028 4E8C 0029 # No PARENTHESIZED IDEOGRAPH TWO
+3222 ; NFKC_CF; 0028 4E09 0029 # No PARENTHESIZED IDEOGRAPH THREE
+3223 ; NFKC_CF; 0028 56DB 0029 # No PARENTHESIZED IDEOGRAPH FOUR
+3224 ; NFKC_CF; 0028 4E94 0029 # No PARENTHESIZED IDEOGRAPH FIVE
+3225 ; NFKC_CF; 0028 516D 0029 # No PARENTHESIZED IDEOGRAPH SIX
+3226 ; NFKC_CF; 0028 4E03 0029 # No PARENTHESIZED IDEOGRAPH SEVEN
+3227 ; NFKC_CF; 0028 516B 0029 # No PARENTHESIZED IDEOGRAPH EIGHT
+3228 ; NFKC_CF; 0028 4E5D 0029 # No PARENTHESIZED IDEOGRAPH NINE
+3229 ; NFKC_CF; 0028 5341 0029 # No PARENTHESIZED IDEOGRAPH TEN
+322A ; NFKC_CF; 0028 6708 0029 # So PARENTHESIZED IDEOGRAPH MOON
+322B ; NFKC_CF; 0028 706B 0029 # So PARENTHESIZED IDEOGRAPH FIRE
+322C ; NFKC_CF; 0028 6C34 0029 # So PARENTHESIZED IDEOGRAPH WATER
+322D ; NFKC_CF; 0028 6728 0029 # So PARENTHESIZED IDEOGRAPH WOOD
+322E ; NFKC_CF; 0028 91D1 0029 # So PARENTHESIZED IDEOGRAPH METAL
+322F ; NFKC_CF; 0028 571F 0029 # So PARENTHESIZED IDEOGRAPH EARTH
+3230 ; NFKC_CF; 0028 65E5 0029 # So PARENTHESIZED IDEOGRAPH SUN
+3231 ; NFKC_CF; 0028 682A 0029 # So PARENTHESIZED IDEOGRAPH STOCK
+3232 ; NFKC_CF; 0028 6709 0029 # So PARENTHESIZED IDEOGRAPH HAVE
+3233 ; NFKC_CF; 0028 793E 0029 # So PARENTHESIZED IDEOGRAPH SOCIETY
+3234 ; NFKC_CF; 0028 540D 0029 # So PARENTHESIZED IDEOGRAPH NAME
+3235 ; NFKC_CF; 0028 7279 0029 # So PARENTHESIZED IDEOGRAPH SPECIAL
+3236 ; NFKC_CF; 0028 8CA1 0029 # So PARENTHESIZED IDEOGRAPH FINANCIAL
+3237 ; NFKC_CF; 0028 795D 0029 # So PARENTHESIZED IDEOGRAPH CONGRATULATION
+3238 ; NFKC_CF; 0028 52B4 0029 # So PARENTHESIZED IDEOGRAPH LABOR
+3239 ; NFKC_CF; 0028 4EE3 0029 # So PARENTHESIZED IDEOGRAPH REPRESENT
+323A ; NFKC_CF; 0028 547C 0029 # So PARENTHESIZED IDEOGRAPH CALL
+323B ; NFKC_CF; 0028 5B66 0029 # So PARENTHESIZED IDEOGRAPH STUDY
+323C ; NFKC_CF; 0028 76E3 0029 # So PARENTHESIZED IDEOGRAPH SUPERVISE
+323D ; NFKC_CF; 0028 4F01 0029 # So PARENTHESIZED IDEOGRAPH ENTERPRISE
+323E ; NFKC_CF; 0028 8CC7 0029 # So PARENTHESIZED IDEOGRAPH RESOURCE
+323F ; NFKC_CF; 0028 5354 0029 # So PARENTHESIZED IDEOGRAPH ALLIANCE
+3240 ; NFKC_CF; 0028 796D 0029 # So PARENTHESIZED IDEOGRAPH FESTIVAL
+3241 ; NFKC_CF; 0028 4F11 0029 # So PARENTHESIZED IDEOGRAPH REST
+3242 ; NFKC_CF; 0028 81EA 0029 # So PARENTHESIZED IDEOGRAPH SELF
+3243 ; NFKC_CF; 0028 81F3 0029 # So PARENTHESIZED IDEOGRAPH REACH
+3244 ; NFKC_CF; 554F # So CIRCLED IDEOGRAPH QUESTION
+3245 ; NFKC_CF; 5E7C # So CIRCLED IDEOGRAPH KINDERGARTEN
+3246 ; NFKC_CF; 6587 # So CIRCLED IDEOGRAPH SCHOOL
+3247 ; NFKC_CF; 7B8F # So CIRCLED IDEOGRAPH KOTO
+3250 ; NFKC_CF; 0070 0074 0065 # So PARTNERSHIP SIGN
+3251 ; NFKC_CF; 0032 0031 # No CIRCLED NUMBER TWENTY ONE
+3252 ; NFKC_CF; 0032 0032 # No CIRCLED NUMBER TWENTY TWO
+3253 ; NFKC_CF; 0032 0033 # No CIRCLED NUMBER TWENTY THREE
+3254 ; NFKC_CF; 0032 0034 # No CIRCLED NUMBER TWENTY FOUR
+3255 ; NFKC_CF; 0032 0035 # No CIRCLED NUMBER TWENTY FIVE
+3256 ; NFKC_CF; 0032 0036 # No CIRCLED NUMBER TWENTY SIX
+3257 ; NFKC_CF; 0032 0037 # No CIRCLED NUMBER TWENTY SEVEN
+3258 ; NFKC_CF; 0032 0038 # No CIRCLED NUMBER TWENTY EIGHT
+3259 ; NFKC_CF; 0032 0039 # No CIRCLED NUMBER TWENTY NINE
+325A ; NFKC_CF; 0033 0030 # No CIRCLED NUMBER THIRTY
+325B ; NFKC_CF; 0033 0031 # No CIRCLED NUMBER THIRTY ONE
+325C ; NFKC_CF; 0033 0032 # No CIRCLED NUMBER THIRTY TWO
+325D ; NFKC_CF; 0033 0033 # No CIRCLED NUMBER THIRTY THREE
+325E ; NFKC_CF; 0033 0034 # No CIRCLED NUMBER THIRTY FOUR
+325F ; NFKC_CF; 0033 0035 # No CIRCLED NUMBER THIRTY FIVE
+3260 ; NFKC_CF; 1100 # So CIRCLED HANGUL KIYEOK
+3261 ; NFKC_CF; 1102 # So CIRCLED HANGUL NIEUN
+3262 ; NFKC_CF; 1103 # So CIRCLED HANGUL TIKEUT
+3263 ; NFKC_CF; 1105 # So CIRCLED HANGUL RIEUL
+3264 ; NFKC_CF; 1106 # So CIRCLED HANGUL MIEUM
+3265 ; NFKC_CF; 1107 # So CIRCLED HANGUL PIEUP
+3266 ; NFKC_CF; 1109 # So CIRCLED HANGUL SIOS
+3267 ; NFKC_CF; 110B # So CIRCLED HANGUL IEUNG
+3268 ; NFKC_CF; 110C # So CIRCLED HANGUL CIEUC
+3269 ; NFKC_CF; 110E # So CIRCLED HANGUL CHIEUCH
+326A ; NFKC_CF; 110F # So CIRCLED HANGUL KHIEUKH
+326B ; NFKC_CF; 1110 # So CIRCLED HANGUL THIEUTH
+326C ; NFKC_CF; 1111 # So CIRCLED HANGUL PHIEUPH
+326D ; NFKC_CF; 1112 # So CIRCLED HANGUL HIEUH
+326E ; NFKC_CF; AC00 # So CIRCLED HANGUL KIYEOK A
+326F ; NFKC_CF; B098 # So CIRCLED HANGUL NIEUN A
+3270 ; NFKC_CF; B2E4 # So CIRCLED HANGUL TIKEUT A
+3271 ; NFKC_CF; B77C # So CIRCLED HANGUL RIEUL A
+3272 ; NFKC_CF; B9C8 # So CIRCLED HANGUL MIEUM A
+3273 ; NFKC_CF; BC14 # So CIRCLED HANGUL PIEUP A
+3274 ; NFKC_CF; C0AC # So CIRCLED HANGUL SIOS A
+3275 ; NFKC_CF; C544 # So CIRCLED HANGUL IEUNG A
+3276 ; NFKC_CF; C790 # So CIRCLED HANGUL CIEUC A
+3277 ; NFKC_CF; CC28 # So CIRCLED HANGUL CHIEUCH A
+3278 ; NFKC_CF; CE74 # So CIRCLED HANGUL KHIEUKH A
+3279 ; NFKC_CF; D0C0 # So CIRCLED HANGUL THIEUTH A
+327A ; NFKC_CF; D30C # So CIRCLED HANGUL PHIEUPH A
+327B ; NFKC_CF; D558 # So CIRCLED HANGUL HIEUH A
+327C ; NFKC_CF; CC38 ACE0 # So CIRCLED KOREAN CHARACTER CHAMKO
+327D ; NFKC_CF; C8FC C758 # So CIRCLED KOREAN CHARACTER JUEUI
+327E ; NFKC_CF; C6B0 # So CIRCLED HANGUL IEUNG U
+3280 ; NFKC_CF; 4E00 # No CIRCLED IDEOGRAPH ONE
+3281 ; NFKC_CF; 4E8C # No CIRCLED IDEOGRAPH TWO
+3282 ; NFKC_CF; 4E09 # No CIRCLED IDEOGRAPH THREE
+3283 ; NFKC_CF; 56DB # No CIRCLED IDEOGRAPH FOUR
+3284 ; NFKC_CF; 4E94 # No CIRCLED IDEOGRAPH FIVE
+3285 ; NFKC_CF; 516D # No CIRCLED IDEOGRAPH SIX
+3286 ; NFKC_CF; 4E03 # No CIRCLED IDEOGRAPH SEVEN
+3287 ; NFKC_CF; 516B # No CIRCLED IDEOGRAPH EIGHT
+3288 ; NFKC_CF; 4E5D # No CIRCLED IDEOGRAPH NINE
+3289 ; NFKC_CF; 5341 # No CIRCLED IDEOGRAPH TEN
+328A ; NFKC_CF; 6708 # So CIRCLED IDEOGRAPH MOON
+328B ; NFKC_CF; 706B # So CIRCLED IDEOGRAPH FIRE
+328C ; NFKC_CF; 6C34 # So CIRCLED IDEOGRAPH WATER
+328D ; NFKC_CF; 6728 # So CIRCLED IDEOGRAPH WOOD
+328E ; NFKC_CF; 91D1 # So CIRCLED IDEOGRAPH METAL
+328F ; NFKC_CF; 571F # So CIRCLED IDEOGRAPH EARTH
+3290 ; NFKC_CF; 65E5 # So CIRCLED IDEOGRAPH SUN
+3291 ; NFKC_CF; 682A # So CIRCLED IDEOGRAPH STOCK
+3292 ; NFKC_CF; 6709 # So CIRCLED IDEOGRAPH HAVE
+3293 ; NFKC_CF; 793E # So CIRCLED IDEOGRAPH SOCIETY
+3294 ; NFKC_CF; 540D # So CIRCLED IDEOGRAPH NAME
+3295 ; NFKC_CF; 7279 # So CIRCLED IDEOGRAPH SPECIAL
+3296 ; NFKC_CF; 8CA1 # So CIRCLED IDEOGRAPH FINANCIAL
+3297 ; NFKC_CF; 795D # So CIRCLED IDEOGRAPH CONGRATULATION
+3298 ; NFKC_CF; 52B4 # So CIRCLED IDEOGRAPH LABOR
+3299 ; NFKC_CF; 79D8 # So CIRCLED IDEOGRAPH SECRET
+329A ; NFKC_CF; 7537 # So CIRCLED IDEOGRAPH MALE
+329B ; NFKC_CF; 5973 # So CIRCLED IDEOGRAPH FEMALE
+329C ; NFKC_CF; 9069 # So CIRCLED IDEOGRAPH SUITABLE
+329D ; NFKC_CF; 512A # So CIRCLED IDEOGRAPH EXCELLENT
+329E ; NFKC_CF; 5370 # So CIRCLED IDEOGRAPH PRINT
+329F ; NFKC_CF; 6CE8 # So CIRCLED IDEOGRAPH ATTENTION
+32A0 ; NFKC_CF; 9805 # So CIRCLED IDEOGRAPH ITEM
+32A1 ; NFKC_CF; 4F11 # So CIRCLED IDEOGRAPH REST
+32A2 ; NFKC_CF; 5199 # So CIRCLED IDEOGRAPH COPY
+32A3 ; NFKC_CF; 6B63 # So CIRCLED IDEOGRAPH CORRECT
+32A4 ; NFKC_CF; 4E0A # So CIRCLED IDEOGRAPH HIGH
+32A5 ; NFKC_CF; 4E2D # So CIRCLED IDEOGRAPH CENTRE
+32A6 ; NFKC_CF; 4E0B # So CIRCLED IDEOGRAPH LOW
+32A7 ; NFKC_CF; 5DE6 # So CIRCLED IDEOGRAPH LEFT
+32A8 ; NFKC_CF; 53F3 # So CIRCLED IDEOGRAPH RIGHT
+32A9 ; NFKC_CF; 533B # So CIRCLED IDEOGRAPH MEDICINE
+32AA ; NFKC_CF; 5B97 # So CIRCLED IDEOGRAPH RELIGION
+32AB ; NFKC_CF; 5B66 # So CIRCLED IDEOGRAPH STUDY
+32AC ; NFKC_CF; 76E3 # So CIRCLED IDEOGRAPH SUPERVISE
+32AD ; NFKC_CF; 4F01 # So CIRCLED IDEOGRAPH ENTERPRISE
+32AE ; NFKC_CF; 8CC7 # So CIRCLED IDEOGRAPH RESOURCE
+32AF ; NFKC_CF; 5354 # So CIRCLED IDEOGRAPH ALLIANCE
+32B0 ; NFKC_CF; 591C # So CIRCLED IDEOGRAPH NIGHT
+32B1 ; NFKC_CF; 0033 0036 # No CIRCLED NUMBER THIRTY SIX
+32B2 ; NFKC_CF; 0033 0037 # No CIRCLED NUMBER THIRTY SEVEN
+32B3 ; NFKC_CF; 0033 0038 # No CIRCLED NUMBER THIRTY EIGHT
+32B4 ; NFKC_CF; 0033 0039 # No CIRCLED NUMBER THIRTY NINE
+32B5 ; NFKC_CF; 0034 0030 # No CIRCLED NUMBER FORTY
+32B6 ; NFKC_CF; 0034 0031 # No CIRCLED NUMBER FORTY ONE
+32B7 ; NFKC_CF; 0034 0032 # No CIRCLED NUMBER FORTY TWO
+32B8 ; NFKC_CF; 0034 0033 # No CIRCLED NUMBER FORTY THREE
+32B9 ; NFKC_CF; 0034 0034 # No CIRCLED NUMBER FORTY FOUR
+32BA ; NFKC_CF; 0034 0035 # No CIRCLED NUMBER FORTY FIVE
+32BB ; NFKC_CF; 0034 0036 # No CIRCLED NUMBER FORTY SIX
+32BC ; NFKC_CF; 0034 0037 # No CIRCLED NUMBER FORTY SEVEN
+32BD ; NFKC_CF; 0034 0038 # No CIRCLED NUMBER FORTY EIGHT
+32BE ; NFKC_CF; 0034 0039 # No CIRCLED NUMBER FORTY NINE
+32BF ; NFKC_CF; 0035 0030 # No CIRCLED NUMBER FIFTY
+32C0 ; NFKC_CF; 0031 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+32C1 ; NFKC_CF; 0032 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+32C2 ; NFKC_CF; 0033 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+32C3 ; NFKC_CF; 0034 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+32C4 ; NFKC_CF; 0035 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+32C5 ; NFKC_CF; 0036 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+32C6 ; NFKC_CF; 0037 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+32C7 ; NFKC_CF; 0038 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+32C8 ; NFKC_CF; 0039 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+32C9 ; NFKC_CF; 0031 0030 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+32CA ; NFKC_CF; 0031 0031 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+32CB ; NFKC_CF; 0031 0032 6708 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32CC ; NFKC_CF; 0068 0067 # So SQUARE HG
+32CD ; NFKC_CF; 0065 0072 0067 # So SQUARE ERG
+32CE ; NFKC_CF; 0065 0076 # So SQUARE EV
+32CF ; NFKC_CF; 006C 0074 0064 # So LIMITED LIABILITY SIGN
+32D0 ; NFKC_CF; 30A2 # So CIRCLED KATAKANA A
+32D1 ; NFKC_CF; 30A4 # So CIRCLED KATAKANA I
+32D2 ; NFKC_CF; 30A6 # So CIRCLED KATAKANA U
+32D3 ; NFKC_CF; 30A8 # So CIRCLED KATAKANA E
+32D4 ; NFKC_CF; 30AA # So CIRCLED KATAKANA O
+32D5 ; NFKC_CF; 30AB # So CIRCLED KATAKANA KA
+32D6 ; NFKC_CF; 30AD # So CIRCLED KATAKANA KI
+32D7 ; NFKC_CF; 30AF # So CIRCLED KATAKANA KU
+32D8 ; NFKC_CF; 30B1 # So CIRCLED KATAKANA KE
+32D9 ; NFKC_CF; 30B3 # So CIRCLED KATAKANA KO
+32DA ; NFKC_CF; 30B5 # So CIRCLED KATAKANA SA
+32DB ; NFKC_CF; 30B7 # So CIRCLED KATAKANA SI
+32DC ; NFKC_CF; 30B9 # So CIRCLED KATAKANA SU
+32DD ; NFKC_CF; 30BB # So CIRCLED KATAKANA SE
+32DE ; NFKC_CF; 30BD # So CIRCLED KATAKANA SO
+32DF ; NFKC_CF; 30BF # So CIRCLED KATAKANA TA
+32E0 ; NFKC_CF; 30C1 # So CIRCLED KATAKANA TI
+32E1 ; NFKC_CF; 30C4 # So CIRCLED KATAKANA TU
+32E2 ; NFKC_CF; 30C6 # So CIRCLED KATAKANA TE
+32E3 ; NFKC_CF; 30C8 # So CIRCLED KATAKANA TO
+32E4 ; NFKC_CF; 30CA # So CIRCLED KATAKANA NA
+32E5 ; NFKC_CF; 30CB # So CIRCLED KATAKANA NI
+32E6 ; NFKC_CF; 30CC # So CIRCLED KATAKANA NU
+32E7 ; NFKC_CF; 30CD # So CIRCLED KATAKANA NE
+32E8 ; NFKC_CF; 30CE # So CIRCLED KATAKANA NO
+32E9 ; NFKC_CF; 30CF # So CIRCLED KATAKANA HA
+32EA ; NFKC_CF; 30D2 # So CIRCLED KATAKANA HI
+32EB ; NFKC_CF; 30D5 # So CIRCLED KATAKANA HU
+32EC ; NFKC_CF; 30D8 # So CIRCLED KATAKANA HE
+32ED ; NFKC_CF; 30DB # So CIRCLED KATAKANA HO
+32EE ; NFKC_CF; 30DE # So CIRCLED KATAKANA MA
+32EF ; NFKC_CF; 30DF # So CIRCLED KATAKANA MI
+32F0 ; NFKC_CF; 30E0 # So CIRCLED KATAKANA MU
+32F1 ; NFKC_CF; 30E1 # So CIRCLED KATAKANA ME
+32F2 ; NFKC_CF; 30E2 # So CIRCLED KATAKANA MO
+32F3 ; NFKC_CF; 30E4 # So CIRCLED KATAKANA YA
+32F4 ; NFKC_CF; 30E6 # So CIRCLED KATAKANA YU
+32F5 ; NFKC_CF; 30E8 # So CIRCLED KATAKANA YO
+32F6 ; NFKC_CF; 30E9 # So CIRCLED KATAKANA RA
+32F7 ; NFKC_CF; 30EA # So CIRCLED KATAKANA RI
+32F8 ; NFKC_CF; 30EB # So CIRCLED KATAKANA RU
+32F9 ; NFKC_CF; 30EC # So CIRCLED KATAKANA RE
+32FA ; NFKC_CF; 30ED # So CIRCLED KATAKANA RO
+32FB ; NFKC_CF; 30EF # So CIRCLED KATAKANA WA
+32FC ; NFKC_CF; 30F0 # So CIRCLED KATAKANA WI
+32FD ; NFKC_CF; 30F1 # So CIRCLED KATAKANA WE
+32FE ; NFKC_CF; 30F2 # So CIRCLED KATAKANA WO
+32FF ; NFKC_CF; 4EE4 548C # So SQUARE ERA NAME REIWA
+3300 ; NFKC_CF; 30A2 30D1 30FC 30C8 #So SQUARE APAATO
+3301 ; NFKC_CF; 30A2 30EB 30D5 30A1 #So SQUARE ARUHUA
+3302 ; NFKC_CF; 30A2 30F3 30DA 30A2 #So SQUARE ANPEA
+3303 ; NFKC_CF; 30A2 30FC 30EB # So SQUARE AARU
+3304 ; NFKC_CF; 30A4 30CB 30F3 30B0 #So SQUARE ININGU
+3305 ; NFKC_CF; 30A4 30F3 30C1 # So SQUARE INTI
+3306 ; NFKC_CF; 30A6 30A9 30F3 # So SQUARE UON
+3307 ; NFKC_CF; 30A8 30B9 30AF 30FC 30C9 #So SQUARE ESUKUUDO
+3308 ; NFKC_CF; 30A8 30FC 30AB 30FC #So SQUARE EEKAA
+3309 ; NFKC_CF; 30AA 30F3 30B9 # So SQUARE ONSU
+330A ; NFKC_CF; 30AA 30FC 30E0 # So SQUARE OOMU
+330B ; NFKC_CF; 30AB 30A4 30EA # So SQUARE KAIRI
+330C ; NFKC_CF; 30AB 30E9 30C3 30C8 #So SQUARE KARATTO
+330D ; NFKC_CF; 30AB 30ED 30EA 30FC #So SQUARE KARORII
+330E ; NFKC_CF; 30AC 30ED 30F3 # So SQUARE GARON
+330F ; NFKC_CF; 30AC 30F3 30DE # So SQUARE GANMA
+3310 ; NFKC_CF; 30AE 30AC # So SQUARE GIGA
+3311 ; NFKC_CF; 30AE 30CB 30FC # So SQUARE GINII
+3312 ; NFKC_CF; 30AD 30E5 30EA 30FC #So SQUARE KYURII
+3313 ; NFKC_CF; 30AE 30EB 30C0 30FC #So SQUARE GIRUDAA
+3314 ; NFKC_CF; 30AD 30ED # So SQUARE KIRO
+3315 ; NFKC_CF; 30AD 30ED 30B0 30E9 30E0 #So SQUARE KIROGURAMU
+3316 ; NFKC_CF; 30AD 30ED 30E1 30FC 30C8 30EB #So SQUARE KIROMEETORU
+3317 ; NFKC_CF; 30AD 30ED 30EF 30C3 30C8 #So SQUARE KIROWATTO
+3318 ; NFKC_CF; 30B0 30E9 30E0 # So SQUARE GURAMU
+3319 ; NFKC_CF; 30B0 30E9 30E0 30C8 30F3 #So SQUARE GURAMUTON
+331A ; NFKC_CF; 30AF 30EB 30BC 30A4 30ED #So SQUARE KURUZEIRO
+331B ; NFKC_CF; 30AF 30ED 30FC 30CD #So SQUARE KUROONE
+331C ; NFKC_CF; 30B1 30FC 30B9 # So SQUARE KEESU
+331D ; NFKC_CF; 30B3 30EB 30CA # So SQUARE KORUNA
+331E ; NFKC_CF; 30B3 30FC 30DD # So SQUARE KOOPO
+331F ; NFKC_CF; 30B5 30A4 30AF 30EB #So SQUARE SAIKURU
+3320 ; NFKC_CF; 30B5 30F3 30C1 30FC 30E0 #So SQUARE SANTIIMU
+3321 ; NFKC_CF; 30B7 30EA 30F3 30B0 #So SQUARE SIRINGU
+3322 ; NFKC_CF; 30BB 30F3 30C1 # So SQUARE SENTI
+3323 ; NFKC_CF; 30BB 30F3 30C8 # So SQUARE SENTO
+3324 ; NFKC_CF; 30C0 30FC 30B9 # So SQUARE DAASU
+3325 ; NFKC_CF; 30C7 30B7 # So SQUARE DESI
+3326 ; NFKC_CF; 30C9 30EB # So SQUARE DORU
+3327 ; NFKC_CF; 30C8 30F3 # So SQUARE TON
+3328 ; NFKC_CF; 30CA 30CE # So SQUARE NANO
+3329 ; NFKC_CF; 30CE 30C3 30C8 # So SQUARE NOTTO
+332A ; NFKC_CF; 30CF 30A4 30C4 # So SQUARE HAITU
+332B ; NFKC_CF; 30D1 30FC 30BB 30F3 30C8 #So SQUARE PAASENTO
+332C ; NFKC_CF; 30D1 30FC 30C4 # So SQUARE PAATU
+332D ; NFKC_CF; 30D0 30FC 30EC 30EB #So SQUARE BAARERU
+332E ; NFKC_CF; 30D4 30A2 30B9 30C8 30EB #So SQUARE PIASUTORU
+332F ; NFKC_CF; 30D4 30AF 30EB # So SQUARE PIKURU
+3330 ; NFKC_CF; 30D4 30B3 # So SQUARE PIKO
+3331 ; NFKC_CF; 30D3 30EB # So SQUARE BIRU
+3332 ; NFKC_CF; 30D5 30A1 30E9 30C3 30C9 #So SQUARE HUARADDO
+3333 ; NFKC_CF; 30D5 30A3 30FC 30C8 #So SQUARE HUIITO
+3334 ; NFKC_CF; 30D6 30C3 30B7 30A7 30EB #So SQUARE BUSSYERU
+3335 ; NFKC_CF; 30D5 30E9 30F3 # So SQUARE HURAN
+3336 ; NFKC_CF; 30D8 30AF 30BF 30FC 30EB #So SQUARE HEKUTAARU
+3337 ; NFKC_CF; 30DA 30BD # So SQUARE PESO
+3338 ; NFKC_CF; 30DA 30CB 30D2 # So SQUARE PENIHI
+3339 ; NFKC_CF; 30D8 30EB 30C4 # So SQUARE HERUTU
+333A ; NFKC_CF; 30DA 30F3 30B9 # So SQUARE PENSU
+333B ; NFKC_CF; 30DA 30FC 30B8 # So SQUARE PEEZI
+333C ; NFKC_CF; 30D9 30FC 30BF # So SQUARE BEETA
+333D ; NFKC_CF; 30DD 30A4 30F3 30C8 #So SQUARE POINTO
+333E ; NFKC_CF; 30DC 30EB 30C8 # So SQUARE BORUTO
+333F ; NFKC_CF; 30DB 30F3 # So SQUARE HON
+3340 ; NFKC_CF; 30DD 30F3 30C9 # So SQUARE PONDO
+3341 ; NFKC_CF; 30DB 30FC 30EB # So SQUARE HOORU
+3342 ; NFKC_CF; 30DB 30FC 30F3 # So SQUARE HOON
+3343 ; NFKC_CF; 30DE 30A4 30AF 30ED #So SQUARE MAIKURO
+3344 ; NFKC_CF; 30DE 30A4 30EB # So SQUARE MAIRU
+3345 ; NFKC_CF; 30DE 30C3 30CF # So SQUARE MAHHA
+3346 ; NFKC_CF; 30DE 30EB 30AF # So SQUARE MARUKU
+3347 ; NFKC_CF; 30DE 30F3 30B7 30E7 30F3 #So SQUARE MANSYON
+3348 ; NFKC_CF; 30DF 30AF 30ED 30F3 #So SQUARE MIKURON
+3349 ; NFKC_CF; 30DF 30EA # So SQUARE MIRI
+334A ; NFKC_CF; 30DF 30EA 30D0 30FC 30EB #So SQUARE MIRIBAARU
+334B ; NFKC_CF; 30E1 30AC # So SQUARE MEGA
+334C ; NFKC_CF; 30E1 30AC 30C8 30F3 #So SQUARE MEGATON
+334D ; NFKC_CF; 30E1 30FC 30C8 30EB #So SQUARE MEETORU
+334E ; NFKC_CF; 30E4 30FC 30C9 # So SQUARE YAADO
+334F ; NFKC_CF; 30E4 30FC 30EB # So SQUARE YAARU
+3350 ; NFKC_CF; 30E6 30A2 30F3 # So SQUARE YUAN
+3351 ; NFKC_CF; 30EA 30C3 30C8 30EB #So SQUARE RITTORU
+3352 ; NFKC_CF; 30EA 30E9 # So SQUARE RIRA
+3353 ; NFKC_CF; 30EB 30D4 30FC # So SQUARE RUPII
+3354 ; NFKC_CF; 30EB 30FC 30D6 30EB #So SQUARE RUUBURU
+3355 ; NFKC_CF; 30EC 30E0 # So SQUARE REMU
+3356 ; NFKC_CF; 30EC 30F3 30C8 30B2 30F3 #So SQUARE RENTOGEN
+3357 ; NFKC_CF; 30EF 30C3 30C8 # So SQUARE WATTO
+3358 ; NFKC_CF; 0030 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+3359 ; NFKC_CF; 0031 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+335A ; NFKC_CF; 0032 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+335B ; NFKC_CF; 0033 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+335C ; NFKC_CF; 0034 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+335D ; NFKC_CF; 0035 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+335E ; NFKC_CF; 0036 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+335F ; NFKC_CF; 0037 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+3360 ; NFKC_CF; 0038 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+3361 ; NFKC_CF; 0039 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+3362 ; NFKC_CF; 0031 0030 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+3363 ; NFKC_CF; 0031 0031 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+3364 ; NFKC_CF; 0031 0032 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+3365 ; NFKC_CF; 0031 0033 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+3366 ; NFKC_CF; 0031 0034 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+3367 ; NFKC_CF; 0031 0035 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+3368 ; NFKC_CF; 0031 0036 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+3369 ; NFKC_CF; 0031 0037 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+336A ; NFKC_CF; 0031 0038 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+336B ; NFKC_CF; 0031 0039 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+336C ; NFKC_CF; 0032 0030 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+336D ; NFKC_CF; 0032 0031 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+336E ; NFKC_CF; 0032 0032 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+336F ; NFKC_CF; 0032 0033 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+3370 ; NFKC_CF; 0032 0034 70B9 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+3371 ; NFKC_CF; 0068 0070 0061 # So SQUARE HPA
+3372 ; NFKC_CF; 0064 0061 # So SQUARE DA
+3373 ; NFKC_CF; 0061 0075 # So SQUARE AU
+3374 ; NFKC_CF; 0062 0061 0072 # So SQUARE BAR
+3375 ; NFKC_CF; 006F 0076 # So SQUARE OV
+3376 ; NFKC_CF; 0070 0063 # So SQUARE PC
+3377 ; NFKC_CF; 0064 006D # So SQUARE DM
+3378 ; NFKC_CF; 0064 006D 0032 # So SQUARE DM SQUARED
+3379 ; NFKC_CF; 0064 006D 0033 # So SQUARE DM CUBED
+337A ; NFKC_CF; 0069 0075 # So SQUARE IU
+337B ; NFKC_CF; 5E73 6210 # So SQUARE ERA NAME HEISEI
+337C ; NFKC_CF; 662D 548C # So SQUARE ERA NAME SYOUWA
+337D ; NFKC_CF; 5927 6B63 # So SQUARE ERA NAME TAISYOU
+337E ; NFKC_CF; 660E 6CBB # So SQUARE ERA NAME MEIZI
+337F ; NFKC_CF; 682A 5F0F 4F1A 793E #So SQUARE CORPORATION
+3380 ; NFKC_CF; 0070 0061 # So SQUARE PA AMPS
+3381 ; NFKC_CF; 006E 0061 # So SQUARE NA
+3382 ; NFKC_CF; 03BC 0061 # So SQUARE MU A
+3383 ; NFKC_CF; 006D 0061 # So SQUARE MA
+3384 ; NFKC_CF; 006B 0061 # So SQUARE KA
+3385 ; NFKC_CF; 006B 0062 # So SQUARE KB
+3386 ; NFKC_CF; 006D 0062 # So SQUARE MB
+3387 ; NFKC_CF; 0067 0062 # So SQUARE GB
+3388 ; NFKC_CF; 0063 0061 006C # So SQUARE CAL
+3389 ; NFKC_CF; 006B 0063 0061 006C #So SQUARE KCAL
+338A ; NFKC_CF; 0070 0066 # So SQUARE PF
+338B ; NFKC_CF; 006E 0066 # So SQUARE NF
+338C ; NFKC_CF; 03BC 0066 # So SQUARE MU F
+338D ; NFKC_CF; 03BC 0067 # So SQUARE MU G
+338E ; NFKC_CF; 006D 0067 # So SQUARE MG
+338F ; NFKC_CF; 006B 0067 # So SQUARE KG
+3390 ; NFKC_CF; 0068 007A # So SQUARE HZ
+3391 ; NFKC_CF; 006B 0068 007A # So SQUARE KHZ
+3392 ; NFKC_CF; 006D 0068 007A # So SQUARE MHZ
+3393 ; NFKC_CF; 0067 0068 007A # So SQUARE GHZ
+3394 ; NFKC_CF; 0074 0068 007A # So SQUARE THZ
+3395 ; NFKC_CF; 03BC 006C # So SQUARE MU L
+3396 ; NFKC_CF; 006D 006C # So SQUARE ML
+3397 ; NFKC_CF; 0064 006C # So SQUARE DL
+3398 ; NFKC_CF; 006B 006C # So SQUARE KL
+3399 ; NFKC_CF; 0066 006D # So SQUARE FM
+339A ; NFKC_CF; 006E 006D # So SQUARE NM
+339B ; NFKC_CF; 03BC 006D # So SQUARE MU M
+339C ; NFKC_CF; 006D 006D # So SQUARE MM
+339D ; NFKC_CF; 0063 006D # So SQUARE CM
+339E ; NFKC_CF; 006B 006D # So SQUARE KM
+339F ; NFKC_CF; 006D 006D 0032 # So SQUARE MM SQUARED
+33A0 ; NFKC_CF; 0063 006D 0032 # So SQUARE CM SQUARED
+33A1 ; NFKC_CF; 006D 0032 # So SQUARE M SQUARED
+33A2 ; NFKC_CF; 006B 006D 0032 # So SQUARE KM SQUARED
+33A3 ; NFKC_CF; 006D 006D 0033 # So SQUARE MM CUBED
+33A4 ; NFKC_CF; 0063 006D 0033 # So SQUARE CM CUBED
+33A5 ; NFKC_CF; 006D 0033 # So SQUARE M CUBED
+33A6 ; NFKC_CF; 006B 006D 0033 # So SQUARE KM CUBED
+33A7 ; NFKC_CF; 006D 2215 0073 # So SQUARE M OVER S
+33A8 ; NFKC_CF; 006D 2215 0073 0032 #So SQUARE M OVER S SQUARED
+33A9 ; NFKC_CF; 0070 0061 # So SQUARE PA
+33AA ; NFKC_CF; 006B 0070 0061 # So SQUARE KPA
+33AB ; NFKC_CF; 006D 0070 0061 # So SQUARE MPA
+33AC ; NFKC_CF; 0067 0070 0061 # So SQUARE GPA
+33AD ; NFKC_CF; 0072 0061 0064 # So SQUARE RAD
+33AE ; NFKC_CF; 0072 0061 0064 2215 0073 #So SQUARE RAD OVER S
+33AF ; NFKC_CF; 0072 0061 0064 2215 0073 0032 #So SQUARE RAD OVER S SQUARED
+33B0 ; NFKC_CF; 0070 0073 # So SQUARE PS
+33B1 ; NFKC_CF; 006E 0073 # So SQUARE NS
+33B2 ; NFKC_CF; 03BC 0073 # So SQUARE MU S
+33B3 ; NFKC_CF; 006D 0073 # So SQUARE MS
+33B4 ; NFKC_CF; 0070 0076 # So SQUARE PV
+33B5 ; NFKC_CF; 006E 0076 # So SQUARE NV
+33B6 ; NFKC_CF; 03BC 0076 # So SQUARE MU V
+33B7 ; NFKC_CF; 006D 0076 # So SQUARE MV
+33B8 ; NFKC_CF; 006B 0076 # So SQUARE KV
+33B9 ; NFKC_CF; 006D 0076 # So SQUARE MV MEGA
+33BA ; NFKC_CF; 0070 0077 # So SQUARE PW
+33BB ; NFKC_CF; 006E 0077 # So SQUARE NW
+33BC ; NFKC_CF; 03BC 0077 # So SQUARE MU W
+33BD ; NFKC_CF; 006D 0077 # So SQUARE MW
+33BE ; NFKC_CF; 006B 0077 # So SQUARE KW
+33BF ; NFKC_CF; 006D 0077 # So SQUARE MW MEGA
+33C0 ; NFKC_CF; 006B 03C9 # So SQUARE K OHM
+33C1 ; NFKC_CF; 006D 03C9 # So SQUARE M OHM
+33C2 ; NFKC_CF; 0061 002E 006D 002E #So SQUARE AM
+33C3 ; NFKC_CF; 0062 0071 # So SQUARE BQ
+33C4 ; NFKC_CF; 0063 0063 # So SQUARE CC
+33C5 ; NFKC_CF; 0063 0064 # So SQUARE CD
+33C6 ; NFKC_CF; 0063 2215 006B 0067 #So SQUARE C OVER KG
+33C7 ; NFKC_CF; 0063 006F 002E # So SQUARE CO
+33C8 ; NFKC_CF; 0064 0062 # So SQUARE DB
+33C9 ; NFKC_CF; 0067 0079 # So SQUARE GY
+33CA ; NFKC_CF; 0068 0061 # So SQUARE HA
+33CB ; NFKC_CF; 0068 0070 # So SQUARE HP
+33CC ; NFKC_CF; 0069 006E # So SQUARE IN
+33CD ; NFKC_CF; 006B 006B # So SQUARE KK
+33CE ; NFKC_CF; 006B 006D # So SQUARE KM CAPITAL
+33CF ; NFKC_CF; 006B 0074 # So SQUARE KT
+33D0 ; NFKC_CF; 006C 006D # So SQUARE LM
+33D1 ; NFKC_CF; 006C 006E # So SQUARE LN
+33D2 ; NFKC_CF; 006C 006F 0067 # So SQUARE LOG
+33D3 ; NFKC_CF; 006C 0078 # So SQUARE LX
+33D4 ; NFKC_CF; 006D 0062 # So SQUARE MB SMALL
+33D5 ; NFKC_CF; 006D 0069 006C # So SQUARE MIL
+33D6 ; NFKC_CF; 006D 006F 006C # So SQUARE MOL
+33D7 ; NFKC_CF; 0070 0068 # So SQUARE PH
+33D8 ; NFKC_CF; 0070 002E 006D 002E #So SQUARE PM
+33D9 ; NFKC_CF; 0070 0070 006D # So SQUARE PPM
+33DA ; NFKC_CF; 0070 0072 # So SQUARE PR
+33DB ; NFKC_CF; 0073 0072 # So SQUARE SR
+33DC ; NFKC_CF; 0073 0076 # So SQUARE SV
+33DD ; NFKC_CF; 0077 0062 # So SQUARE WB
+33DE ; NFKC_CF; 0076 2215 006D # So SQUARE V OVER M
+33DF ; NFKC_CF; 0061 2215 006D # So SQUARE A OVER M
+33E0 ; NFKC_CF; 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+33E1 ; NFKC_CF; 0032 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+33E2 ; NFKC_CF; 0033 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+33E3 ; NFKC_CF; 0034 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+33E4 ; NFKC_CF; 0035 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+33E5 ; NFKC_CF; 0036 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+33E6 ; NFKC_CF; 0037 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+33E7 ; NFKC_CF; 0038 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+33E8 ; NFKC_CF; 0039 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+33E9 ; NFKC_CF; 0031 0030 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+33EA ; NFKC_CF; 0031 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+33EB ; NFKC_CF; 0031 0032 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+33EC ; NFKC_CF; 0031 0033 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+33ED ; NFKC_CF; 0031 0034 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+33EE ; NFKC_CF; 0031 0035 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+33EF ; NFKC_CF; 0031 0036 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+33F0 ; NFKC_CF; 0031 0037 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+33F1 ; NFKC_CF; 0031 0038 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+33F2 ; NFKC_CF; 0031 0039 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+33F3 ; NFKC_CF; 0032 0030 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+33F4 ; NFKC_CF; 0032 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+33F5 ; NFKC_CF; 0032 0032 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+33F6 ; NFKC_CF; 0032 0033 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+33F7 ; NFKC_CF; 0032 0034 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+33F8 ; NFKC_CF; 0032 0035 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+33F9 ; NFKC_CF; 0032 0036 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+33FA ; NFKC_CF; 0032 0037 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+33FB ; NFKC_CF; 0032 0038 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+33FC ; NFKC_CF; 0032 0039 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+33FD ; NFKC_CF; 0033 0030 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+33FE ; NFKC_CF; 0033 0031 65E5 # So IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33FF ; NFKC_CF; 0067 0061 006C # So SQUARE GAL
+A640 ; NFKC_CF; A641 # L& CYRILLIC CAPITAL LETTER ZEMLYA
+A642 ; NFKC_CF; A643 # L& CYRILLIC CAPITAL LETTER DZELO
+A644 ; NFKC_CF; A645 # L& CYRILLIC CAPITAL LETTER REVERSED DZE
+A646 ; NFKC_CF; A647 # L& CYRILLIC CAPITAL LETTER IOTA
+A648 ; NFKC_CF; A649 # L& CYRILLIC CAPITAL LETTER DJERV
+A64A ; NFKC_CF; A64B # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C ; NFKC_CF; A64D # L& CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E ; NFKC_CF; A64F # L& CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650 ; NFKC_CF; A651 # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652 ; NFKC_CF; A653 # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654 ; NFKC_CF; A655 # L& CYRILLIC CAPITAL LETTER REVERSED YU
+A656 ; NFKC_CF; A657 # L& CYRILLIC CAPITAL LETTER IOTIFIED A
+A658 ; NFKC_CF; A659 # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A ; NFKC_CF; A65B # L& CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C ; NFKC_CF; A65D # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E ; NFKC_CF; A65F # L& CYRILLIC CAPITAL LETTER YN
+A660 ; NFKC_CF; A661 # L& CYRILLIC CAPITAL LETTER REVERSED TSE
+A662 ; NFKC_CF; A663 # L& CYRILLIC CAPITAL LETTER SOFT DE
+A664 ; NFKC_CF; A665 # L& CYRILLIC CAPITAL LETTER SOFT EL
+A666 ; NFKC_CF; A667 # L& CYRILLIC CAPITAL LETTER SOFT EM
+A668 ; NFKC_CF; A669 # L& CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A ; NFKC_CF; A66B # L& CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C ; NFKC_CF; A66D # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680 ; NFKC_CF; A681 # L& CYRILLIC CAPITAL LETTER DWE
+A682 ; NFKC_CF; A683 # L& CYRILLIC CAPITAL LETTER DZWE
+A684 ; NFKC_CF; A685 # L& CYRILLIC CAPITAL LETTER ZHWE
+A686 ; NFKC_CF; A687 # L& CYRILLIC CAPITAL LETTER CCHE
+A688 ; NFKC_CF; A689 # L& CYRILLIC CAPITAL LETTER DZZE
+A68A ; NFKC_CF; A68B # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C ; NFKC_CF; A68D # L& CYRILLIC CAPITAL LETTER TWE
+A68E ; NFKC_CF; A68F # L& CYRILLIC CAPITAL LETTER TSWE
+A690 ; NFKC_CF; A691 # L& CYRILLIC CAPITAL LETTER TSSE
+A692 ; NFKC_CF; A693 # L& CYRILLIC CAPITAL LETTER TCHE
+A694 ; NFKC_CF; A695 # L& CYRILLIC CAPITAL LETTER HWE
+A696 ; NFKC_CF; A697 # L& CYRILLIC CAPITAL LETTER SHWE
+A698 ; NFKC_CF; A699 # L& CYRILLIC CAPITAL LETTER DOUBLE O
+A69A ; NFKC_CF; A69B # L& CYRILLIC CAPITAL LETTER CROSSED O
+A69C ; NFKC_CF; 044A # Lm MODIFIER LETTER CYRILLIC HARD SIGN
+A69D ; NFKC_CF; 044C # Lm MODIFIER LETTER CYRILLIC SOFT SIGN
+A722 ; NFKC_CF; A723 # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724 ; NFKC_CF; A725 # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726 ; NFKC_CF; A727 # L& LATIN CAPITAL LETTER HENG
+A728 ; NFKC_CF; A729 # L& LATIN CAPITAL LETTER TZ
+A72A ; NFKC_CF; A72B # L& LATIN CAPITAL LETTER TRESILLO
+A72C ; NFKC_CF; A72D # L& LATIN CAPITAL LETTER CUATRILLO
+A72E ; NFKC_CF; A72F # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732 ; NFKC_CF; A733 # L& LATIN CAPITAL LETTER AA
+A734 ; NFKC_CF; A735 # L& LATIN CAPITAL LETTER AO
+A736 ; NFKC_CF; A737 # L& LATIN CAPITAL LETTER AU
+A738 ; NFKC_CF; A739 # L& LATIN CAPITAL LETTER AV
+A73A ; NFKC_CF; A73B # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C ; NFKC_CF; A73D # L& LATIN CAPITAL LETTER AY
+A73E ; NFKC_CF; A73F # L& LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740 ; NFKC_CF; A741 # L& LATIN CAPITAL LETTER K WITH STROKE
+A742 ; NFKC_CF; A743 # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744 ; NFKC_CF; A745 # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746 ; NFKC_CF; A747 # L& LATIN CAPITAL LETTER BROKEN L
+A748 ; NFKC_CF; A749 # L& LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A ; NFKC_CF; A74B # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C ; NFKC_CF; A74D # L& LATIN CAPITAL LETTER O WITH LOOP
+A74E ; NFKC_CF; A74F # L& LATIN CAPITAL LETTER OO
+A750 ; NFKC_CF; A751 # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752 ; NFKC_CF; A753 # L& LATIN CAPITAL LETTER P WITH FLOURISH
+A754 ; NFKC_CF; A755 # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756 ; NFKC_CF; A757 # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758 ; NFKC_CF; A759 # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A ; NFKC_CF; A75B # L& LATIN CAPITAL LETTER R ROTUNDA
+A75C ; NFKC_CF; A75D # L& LATIN CAPITAL LETTER RUM ROTUNDA
+A75E ; NFKC_CF; A75F # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760 ; NFKC_CF; A761 # L& LATIN CAPITAL LETTER VY
+A762 ; NFKC_CF; A763 # L& LATIN CAPITAL LETTER VISIGOTHIC Z
+A764 ; NFKC_CF; A765 # L& LATIN CAPITAL LETTER THORN WITH STROKE
+A766 ; NFKC_CF; A767 # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768 ; NFKC_CF; A769 # L& LATIN CAPITAL LETTER VEND
+A76A ; NFKC_CF; A76B # L& LATIN CAPITAL LETTER ET
+A76C ; NFKC_CF; A76D # L& LATIN CAPITAL LETTER IS
+A76E ; NFKC_CF; A76F # L& LATIN CAPITAL LETTER CON
+A770 ; NFKC_CF; A76F # Lm MODIFIER LETTER US
+A779 ; NFKC_CF; A77A # L& LATIN CAPITAL LETTER INSULAR D
+A77B ; NFKC_CF; A77C # L& LATIN CAPITAL LETTER INSULAR F
+A77D ; NFKC_CF; 1D79 # L& LATIN CAPITAL LETTER INSULAR G
+A77E ; NFKC_CF; A77F # L& LATIN CAPITAL LETTER TURNED INSULAR G
+A780 ; NFKC_CF; A781 # L& LATIN CAPITAL LETTER TURNED L
+A782 ; NFKC_CF; A783 # L& LATIN CAPITAL LETTER INSULAR R
+A784 ; NFKC_CF; A785 # L& LATIN CAPITAL LETTER INSULAR S
+A786 ; NFKC_CF; A787 # L& LATIN CAPITAL LETTER INSULAR T
+A78B ; NFKC_CF; A78C # L& LATIN CAPITAL LETTER SALTILLO
+A78D ; NFKC_CF; 0265 # L& LATIN CAPITAL LETTER TURNED H
+A790 ; NFKC_CF; A791 # L& LATIN CAPITAL LETTER N WITH DESCENDER
+A792 ; NFKC_CF; A793 # L& LATIN CAPITAL LETTER C WITH BAR
+A796 ; NFKC_CF; A797 # L& LATIN CAPITAL LETTER B WITH FLOURISH
+A798 ; NFKC_CF; A799 # L& LATIN CAPITAL LETTER F WITH STROKE
+A79A ; NFKC_CF; A79B # L& LATIN CAPITAL LETTER VOLAPUK AE
+A79C ; NFKC_CF; A79D # L& LATIN CAPITAL LETTER VOLAPUK OE
+A79E ; NFKC_CF; A79F # L& LATIN CAPITAL LETTER VOLAPUK UE
+A7A0 ; NFKC_CF; A7A1 # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2 ; NFKC_CF; A7A3 # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4 ; NFKC_CF; A7A5 # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6 ; NFKC_CF; A7A7 # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8 ; NFKC_CF; A7A9 # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA ; NFKC_CF; 0266 # L& LATIN CAPITAL LETTER H WITH HOOK
+A7AB ; NFKC_CF; 025C # L& LATIN CAPITAL LETTER REVERSED OPEN E
+A7AC ; NFKC_CF; 0261 # L& LATIN CAPITAL LETTER SCRIPT G
+A7AD ; NFKC_CF; 026C # L& LATIN CAPITAL LETTER L WITH BELT
+A7AE ; NFKC_CF; 026A # L& LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0 ; NFKC_CF; 029E # L& LATIN CAPITAL LETTER TURNED K
+A7B1 ; NFKC_CF; 0287 # L& LATIN CAPITAL LETTER TURNED T
+A7B2 ; NFKC_CF; 029D # L& LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+A7B3 ; NFKC_CF; AB53 # L& LATIN CAPITAL LETTER CHI
+A7B4 ; NFKC_CF; A7B5 # L& LATIN CAPITAL LETTER BETA
+A7B6 ; NFKC_CF; A7B7 # L& LATIN CAPITAL LETTER OMEGA
+A7B8 ; NFKC_CF; A7B9 # L& LATIN CAPITAL LETTER U WITH STROKE
+A7BA ; NFKC_CF; A7BB # L& LATIN CAPITAL LETTER GLOTTAL A
+A7BC ; NFKC_CF; A7BD # L& LATIN CAPITAL LETTER GLOTTAL I
+A7BE ; NFKC_CF; A7BF # L& LATIN CAPITAL LETTER GLOTTAL U
+A7C0 ; NFKC_CF; A7C1 # L& LATIN CAPITAL LETTER OLD POLISH O
+A7C2 ; NFKC_CF; A7C3 # L& LATIN CAPITAL LETTER ANGLICANA W
+A7C4 ; NFKC_CF; A794 # L& LATIN CAPITAL LETTER C WITH PALATAL HOOK
+A7C5 ; NFKC_CF; 0282 # L& LATIN CAPITAL LETTER S WITH HOOK
+A7C6 ; NFKC_CF; 1D8E # L& LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C7 ; NFKC_CF; A7C8 # L& LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; NFKC_CF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7D0 ; NFKC_CF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G
+A7D6 ; NFKC_CF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S
+A7D8 ; NFKC_CF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S
+A7F2 ; NFKC_CF; 0063 # Lm MODIFIER LETTER CAPITAL C
+A7F3 ; NFKC_CF; 0066 # Lm MODIFIER LETTER CAPITAL F
+A7F4 ; NFKC_CF; 0071 # Lm MODIFIER LETTER CAPITAL Q
+A7F5 ; NFKC_CF; A7F6 # L& LATIN CAPITAL LETTER REVERSED HALF H
+A7F8 ; NFKC_CF; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE
+A7F9 ; NFKC_CF; 0153 # Lm MODIFIER LETTER SMALL LIGATURE OE
+AB5C ; NFKC_CF; A727 # Lm MODIFIER LETTER SMALL HENG
+AB5D ; NFKC_CF; AB37 # Lm MODIFIER LETTER SMALL L WITH INVERTED LAZY S
+AB5E ; NFKC_CF; 026B # Lm MODIFIER LETTER SMALL L WITH MIDDLE TILDE
+AB5F ; NFKC_CF; AB52 # Lm MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; NFKC_CF; 028D # Lm MODIFIER LETTER SMALL TURNED W
+AB70 ; NFKC_CF; 13A0 # L& CHEROKEE SMALL LETTER A
+AB71 ; NFKC_CF; 13A1 # L& CHEROKEE SMALL LETTER E
+AB72 ; NFKC_CF; 13A2 # L& CHEROKEE SMALL LETTER I
+AB73 ; NFKC_CF; 13A3 # L& CHEROKEE SMALL LETTER O
+AB74 ; NFKC_CF; 13A4 # L& CHEROKEE SMALL LETTER U
+AB75 ; NFKC_CF; 13A5 # L& CHEROKEE SMALL LETTER V
+AB76 ; NFKC_CF; 13A6 # L& CHEROKEE SMALL LETTER GA
+AB77 ; NFKC_CF; 13A7 # L& CHEROKEE SMALL LETTER KA
+AB78 ; NFKC_CF; 13A8 # L& CHEROKEE SMALL LETTER GE
+AB79 ; NFKC_CF; 13A9 # L& CHEROKEE SMALL LETTER GI
+AB7A ; NFKC_CF; 13AA # L& CHEROKEE SMALL LETTER GO
+AB7B ; NFKC_CF; 13AB # L& CHEROKEE SMALL LETTER GU
+AB7C ; NFKC_CF; 13AC # L& CHEROKEE SMALL LETTER GV
+AB7D ; NFKC_CF; 13AD # L& CHEROKEE SMALL LETTER HA
+AB7E ; NFKC_CF; 13AE # L& CHEROKEE SMALL LETTER HE
+AB7F ; NFKC_CF; 13AF # L& CHEROKEE SMALL LETTER HI
+AB80 ; NFKC_CF; 13B0 # L& CHEROKEE SMALL LETTER HO
+AB81 ; NFKC_CF; 13B1 # L& CHEROKEE SMALL LETTER HU
+AB82 ; NFKC_CF; 13B2 # L& CHEROKEE SMALL LETTER HV
+AB83 ; NFKC_CF; 13B3 # L& CHEROKEE SMALL LETTER LA
+AB84 ; NFKC_CF; 13B4 # L& CHEROKEE SMALL LETTER LE
+AB85 ; NFKC_CF; 13B5 # L& CHEROKEE SMALL LETTER LI
+AB86 ; NFKC_CF; 13B6 # L& CHEROKEE SMALL LETTER LO
+AB87 ; NFKC_CF; 13B7 # L& CHEROKEE SMALL LETTER LU
+AB88 ; NFKC_CF; 13B8 # L& CHEROKEE SMALL LETTER LV
+AB89 ; NFKC_CF; 13B9 # L& CHEROKEE SMALL LETTER MA
+AB8A ; NFKC_CF; 13BA # L& CHEROKEE SMALL LETTER ME
+AB8B ; NFKC_CF; 13BB # L& CHEROKEE SMALL LETTER MI
+AB8C ; NFKC_CF; 13BC # L& CHEROKEE SMALL LETTER MO
+AB8D ; NFKC_CF; 13BD # L& CHEROKEE SMALL LETTER MU
+AB8E ; NFKC_CF; 13BE # L& CHEROKEE SMALL LETTER NA
+AB8F ; NFKC_CF; 13BF # L& CHEROKEE SMALL LETTER HNA
+AB90 ; NFKC_CF; 13C0 # L& CHEROKEE SMALL LETTER NAH
+AB91 ; NFKC_CF; 13C1 # L& CHEROKEE SMALL LETTER NE
+AB92 ; NFKC_CF; 13C2 # L& CHEROKEE SMALL LETTER NI
+AB93 ; NFKC_CF; 13C3 # L& CHEROKEE SMALL LETTER NO
+AB94 ; NFKC_CF; 13C4 # L& CHEROKEE SMALL LETTER NU
+AB95 ; NFKC_CF; 13C5 # L& CHEROKEE SMALL LETTER NV
+AB96 ; NFKC_CF; 13C6 # L& CHEROKEE SMALL LETTER QUA
+AB97 ; NFKC_CF; 13C7 # L& CHEROKEE SMALL LETTER QUE
+AB98 ; NFKC_CF; 13C8 # L& CHEROKEE SMALL LETTER QUI
+AB99 ; NFKC_CF; 13C9 # L& CHEROKEE SMALL LETTER QUO
+AB9A ; NFKC_CF; 13CA # L& CHEROKEE SMALL LETTER QUU
+AB9B ; NFKC_CF; 13CB # L& CHEROKEE SMALL LETTER QUV
+AB9C ; NFKC_CF; 13CC # L& CHEROKEE SMALL LETTER SA
+AB9D ; NFKC_CF; 13CD # L& CHEROKEE SMALL LETTER S
+AB9E ; NFKC_CF; 13CE # L& CHEROKEE SMALL LETTER SE
+AB9F ; NFKC_CF; 13CF # L& CHEROKEE SMALL LETTER SI
+ABA0 ; NFKC_CF; 13D0 # L& CHEROKEE SMALL LETTER SO
+ABA1 ; NFKC_CF; 13D1 # L& CHEROKEE SMALL LETTER SU
+ABA2 ; NFKC_CF; 13D2 # L& CHEROKEE SMALL LETTER SV
+ABA3 ; NFKC_CF; 13D3 # L& CHEROKEE SMALL LETTER DA
+ABA4 ; NFKC_CF; 13D4 # L& CHEROKEE SMALL LETTER TA
+ABA5 ; NFKC_CF; 13D5 # L& CHEROKEE SMALL LETTER DE
+ABA6 ; NFKC_CF; 13D6 # L& CHEROKEE SMALL LETTER TE
+ABA7 ; NFKC_CF; 13D7 # L& CHEROKEE SMALL LETTER DI
+ABA8 ; NFKC_CF; 13D8 # L& CHEROKEE SMALL LETTER TI
+ABA9 ; NFKC_CF; 13D9 # L& CHEROKEE SMALL LETTER DO
+ABAA ; NFKC_CF; 13DA # L& CHEROKEE SMALL LETTER DU
+ABAB ; NFKC_CF; 13DB # L& CHEROKEE SMALL LETTER DV
+ABAC ; NFKC_CF; 13DC # L& CHEROKEE SMALL LETTER DLA
+ABAD ; NFKC_CF; 13DD # L& CHEROKEE SMALL LETTER TLA
+ABAE ; NFKC_CF; 13DE # L& CHEROKEE SMALL LETTER TLE
+ABAF ; NFKC_CF; 13DF # L& CHEROKEE SMALL LETTER TLI
+ABB0 ; NFKC_CF; 13E0 # L& CHEROKEE SMALL LETTER TLO
+ABB1 ; NFKC_CF; 13E1 # L& CHEROKEE SMALL LETTER TLU
+ABB2 ; NFKC_CF; 13E2 # L& CHEROKEE SMALL LETTER TLV
+ABB3 ; NFKC_CF; 13E3 # L& CHEROKEE SMALL LETTER TSA
+ABB4 ; NFKC_CF; 13E4 # L& CHEROKEE SMALL LETTER TSE
+ABB5 ; NFKC_CF; 13E5 # L& CHEROKEE SMALL LETTER TSI
+ABB6 ; NFKC_CF; 13E6 # L& CHEROKEE SMALL LETTER TSO
+ABB7 ; NFKC_CF; 13E7 # L& CHEROKEE SMALL LETTER TSU
+ABB8 ; NFKC_CF; 13E8 # L& CHEROKEE SMALL LETTER TSV
+ABB9 ; NFKC_CF; 13E9 # L& CHEROKEE SMALL LETTER WA
+ABBA ; NFKC_CF; 13EA # L& CHEROKEE SMALL LETTER WE
+ABBB ; NFKC_CF; 13EB # L& CHEROKEE SMALL LETTER WI
+ABBC ; NFKC_CF; 13EC # L& CHEROKEE SMALL LETTER WO
+ABBD ; NFKC_CF; 13ED # L& CHEROKEE SMALL LETTER WU
+ABBE ; NFKC_CF; 13EE # L& CHEROKEE SMALL LETTER WV
+ABBF ; NFKC_CF; 13EF # L& CHEROKEE SMALL LETTER YA
+F900 ; NFKC_CF; 8C48 # Lo CJK COMPATIBILITY IDEOGRAPH-F900
+F901 ; NFKC_CF; 66F4 # Lo CJK COMPATIBILITY IDEOGRAPH-F901
+F902 ; NFKC_CF; 8ECA # Lo CJK COMPATIBILITY IDEOGRAPH-F902
+F903 ; NFKC_CF; 8CC8 # Lo CJK COMPATIBILITY IDEOGRAPH-F903
+F904 ; NFKC_CF; 6ED1 # Lo CJK COMPATIBILITY IDEOGRAPH-F904
+F905 ; NFKC_CF; 4E32 # Lo CJK COMPATIBILITY IDEOGRAPH-F905
+F906 ; NFKC_CF; 53E5 # Lo CJK COMPATIBILITY IDEOGRAPH-F906
+F907..F908 ; NFKC_CF; 9F9C # Lo [2] CJK COMPATIBILITY IDEOGRAPH-F907..CJK COMPATIBILITY IDEOGRAPH-F908
+F909 ; NFKC_CF; 5951 # Lo CJK COMPATIBILITY IDEOGRAPH-F909
+F90A ; NFKC_CF; 91D1 # Lo CJK COMPATIBILITY IDEOGRAPH-F90A
+F90B ; NFKC_CF; 5587 # Lo CJK COMPATIBILITY IDEOGRAPH-F90B
+F90C ; NFKC_CF; 5948 # Lo CJK COMPATIBILITY IDEOGRAPH-F90C
+F90D ; NFKC_CF; 61F6 # Lo CJK COMPATIBILITY IDEOGRAPH-F90D
+F90E ; NFKC_CF; 7669 # Lo CJK COMPATIBILITY IDEOGRAPH-F90E
+F90F ; NFKC_CF; 7F85 # Lo CJK COMPATIBILITY IDEOGRAPH-F90F
+F910 ; NFKC_CF; 863F # Lo CJK COMPATIBILITY IDEOGRAPH-F910
+F911 ; NFKC_CF; 87BA # Lo CJK COMPATIBILITY IDEOGRAPH-F911
+F912 ; NFKC_CF; 88F8 # Lo CJK COMPATIBILITY IDEOGRAPH-F912
+F913 ; NFKC_CF; 908F # Lo CJK COMPATIBILITY IDEOGRAPH-F913
+F914 ; NFKC_CF; 6A02 # Lo CJK COMPATIBILITY IDEOGRAPH-F914
+F915 ; NFKC_CF; 6D1B # Lo CJK COMPATIBILITY IDEOGRAPH-F915
+F916 ; NFKC_CF; 70D9 # Lo CJK COMPATIBILITY IDEOGRAPH-F916
+F917 ; NFKC_CF; 73DE # Lo CJK COMPATIBILITY IDEOGRAPH-F917
+F918 ; NFKC_CF; 843D # Lo CJK COMPATIBILITY IDEOGRAPH-F918
+F919 ; NFKC_CF; 916A # Lo CJK COMPATIBILITY IDEOGRAPH-F919
+F91A ; NFKC_CF; 99F1 # Lo CJK COMPATIBILITY IDEOGRAPH-F91A
+F91B ; NFKC_CF; 4E82 # Lo CJK COMPATIBILITY IDEOGRAPH-F91B
+F91C ; NFKC_CF; 5375 # Lo CJK COMPATIBILITY IDEOGRAPH-F91C
+F91D ; NFKC_CF; 6B04 # Lo CJK COMPATIBILITY IDEOGRAPH-F91D
+F91E ; NFKC_CF; 721B # Lo CJK COMPATIBILITY IDEOGRAPH-F91E
+F91F ; NFKC_CF; 862D # Lo CJK COMPATIBILITY IDEOGRAPH-F91F
+F920 ; NFKC_CF; 9E1E # Lo CJK COMPATIBILITY IDEOGRAPH-F920
+F921 ; NFKC_CF; 5D50 # Lo CJK COMPATIBILITY IDEOGRAPH-F921
+F922 ; NFKC_CF; 6FEB # Lo CJK COMPATIBILITY IDEOGRAPH-F922
+F923 ; NFKC_CF; 85CD # Lo CJK COMPATIBILITY IDEOGRAPH-F923
+F924 ; NFKC_CF; 8964 # Lo CJK COMPATIBILITY IDEOGRAPH-F924
+F925 ; NFKC_CF; 62C9 # Lo CJK COMPATIBILITY IDEOGRAPH-F925
+F926 ; NFKC_CF; 81D8 # Lo CJK COMPATIBILITY IDEOGRAPH-F926
+F927 ; NFKC_CF; 881F # Lo CJK COMPATIBILITY IDEOGRAPH-F927
+F928 ; NFKC_CF; 5ECA # Lo CJK COMPATIBILITY IDEOGRAPH-F928
+F929 ; NFKC_CF; 6717 # Lo CJK COMPATIBILITY IDEOGRAPH-F929
+F92A ; NFKC_CF; 6D6A # Lo CJK COMPATIBILITY IDEOGRAPH-F92A
+F92B ; NFKC_CF; 72FC # Lo CJK COMPATIBILITY IDEOGRAPH-F92B
+F92C ; NFKC_CF; 90CE # Lo CJK COMPATIBILITY IDEOGRAPH-F92C
+F92D ; NFKC_CF; 4F86 # Lo CJK COMPATIBILITY IDEOGRAPH-F92D
+F92E ; NFKC_CF; 51B7 # Lo CJK COMPATIBILITY IDEOGRAPH-F92E
+F92F ; NFKC_CF; 52DE # Lo CJK COMPATIBILITY IDEOGRAPH-F92F
+F930 ; NFKC_CF; 64C4 # Lo CJK COMPATIBILITY IDEOGRAPH-F930
+F931 ; NFKC_CF; 6AD3 # Lo CJK COMPATIBILITY IDEOGRAPH-F931
+F932 ; NFKC_CF; 7210 # Lo CJK COMPATIBILITY IDEOGRAPH-F932
+F933 ; NFKC_CF; 76E7 # Lo CJK COMPATIBILITY IDEOGRAPH-F933
+F934 ; NFKC_CF; 8001 # Lo CJK COMPATIBILITY IDEOGRAPH-F934
+F935 ; NFKC_CF; 8606 # Lo CJK COMPATIBILITY IDEOGRAPH-F935
+F936 ; NFKC_CF; 865C # Lo CJK COMPATIBILITY IDEOGRAPH-F936
+F937 ; NFKC_CF; 8DEF # Lo CJK COMPATIBILITY IDEOGRAPH-F937
+F938 ; NFKC_CF; 9732 # Lo CJK COMPATIBILITY IDEOGRAPH-F938
+F939 ; NFKC_CF; 9B6F # Lo CJK COMPATIBILITY IDEOGRAPH-F939
+F93A ; NFKC_CF; 9DFA # Lo CJK COMPATIBILITY IDEOGRAPH-F93A
+F93B ; NFKC_CF; 788C # Lo CJK COMPATIBILITY IDEOGRAPH-F93B
+F93C ; NFKC_CF; 797F # Lo CJK COMPATIBILITY IDEOGRAPH-F93C
+F93D ; NFKC_CF; 7DA0 # Lo CJK COMPATIBILITY IDEOGRAPH-F93D
+F93E ; NFKC_CF; 83C9 # Lo CJK COMPATIBILITY IDEOGRAPH-F93E
+F93F ; NFKC_CF; 9304 # Lo CJK COMPATIBILITY IDEOGRAPH-F93F
+F940 ; NFKC_CF; 9E7F # Lo CJK COMPATIBILITY IDEOGRAPH-F940
+F941 ; NFKC_CF; 8AD6 # Lo CJK COMPATIBILITY IDEOGRAPH-F941
+F942 ; NFKC_CF; 58DF # Lo CJK COMPATIBILITY IDEOGRAPH-F942
+F943 ; NFKC_CF; 5F04 # Lo CJK COMPATIBILITY IDEOGRAPH-F943
+F944 ; NFKC_CF; 7C60 # Lo CJK COMPATIBILITY IDEOGRAPH-F944
+F945 ; NFKC_CF; 807E # Lo CJK COMPATIBILITY IDEOGRAPH-F945
+F946 ; NFKC_CF; 7262 # Lo CJK COMPATIBILITY IDEOGRAPH-F946
+F947 ; NFKC_CF; 78CA # Lo CJK COMPATIBILITY IDEOGRAPH-F947
+F948 ; NFKC_CF; 8CC2 # Lo CJK COMPATIBILITY IDEOGRAPH-F948
+F949 ; NFKC_CF; 96F7 # Lo CJK COMPATIBILITY IDEOGRAPH-F949
+F94A ; NFKC_CF; 58D8 # Lo CJK COMPATIBILITY IDEOGRAPH-F94A
+F94B ; NFKC_CF; 5C62 # Lo CJK COMPATIBILITY IDEOGRAPH-F94B
+F94C ; NFKC_CF; 6A13 # Lo CJK COMPATIBILITY IDEOGRAPH-F94C
+F94D ; NFKC_CF; 6DDA # Lo CJK COMPATIBILITY IDEOGRAPH-F94D
+F94E ; NFKC_CF; 6F0F # Lo CJK COMPATIBILITY IDEOGRAPH-F94E
+F94F ; NFKC_CF; 7D2F # Lo CJK COMPATIBILITY IDEOGRAPH-F94F
+F950 ; NFKC_CF; 7E37 # Lo CJK COMPATIBILITY IDEOGRAPH-F950
+F951 ; NFKC_CF; 964B # Lo CJK COMPATIBILITY IDEOGRAPH-F951
+F952 ; NFKC_CF; 52D2 # Lo CJK COMPATIBILITY IDEOGRAPH-F952
+F953 ; NFKC_CF; 808B # Lo CJK COMPATIBILITY IDEOGRAPH-F953
+F954 ; NFKC_CF; 51DC # Lo CJK COMPATIBILITY IDEOGRAPH-F954
+F955 ; NFKC_CF; 51CC # Lo CJK COMPATIBILITY IDEOGRAPH-F955
+F956 ; NFKC_CF; 7A1C # Lo CJK COMPATIBILITY IDEOGRAPH-F956
+F957 ; NFKC_CF; 7DBE # Lo CJK COMPATIBILITY IDEOGRAPH-F957
+F958 ; NFKC_CF; 83F1 # Lo CJK COMPATIBILITY IDEOGRAPH-F958
+F959 ; NFKC_CF; 9675 # Lo CJK COMPATIBILITY IDEOGRAPH-F959
+F95A ; NFKC_CF; 8B80 # Lo CJK COMPATIBILITY IDEOGRAPH-F95A
+F95B ; NFKC_CF; 62CF # Lo CJK COMPATIBILITY IDEOGRAPH-F95B
+F95C ; NFKC_CF; 6A02 # Lo CJK COMPATIBILITY IDEOGRAPH-F95C
+F95D ; NFKC_CF; 8AFE # Lo CJK COMPATIBILITY IDEOGRAPH-F95D
+F95E ; NFKC_CF; 4E39 # Lo CJK COMPATIBILITY IDEOGRAPH-F95E
+F95F ; NFKC_CF; 5BE7 # Lo CJK COMPATIBILITY IDEOGRAPH-F95F
+F960 ; NFKC_CF; 6012 # Lo CJK COMPATIBILITY IDEOGRAPH-F960
+F961 ; NFKC_CF; 7387 # Lo CJK COMPATIBILITY IDEOGRAPH-F961
+F962 ; NFKC_CF; 7570 # Lo CJK COMPATIBILITY IDEOGRAPH-F962
+F963 ; NFKC_CF; 5317 # Lo CJK COMPATIBILITY IDEOGRAPH-F963
+F964 ; NFKC_CF; 78FB # Lo CJK COMPATIBILITY IDEOGRAPH-F964
+F965 ; NFKC_CF; 4FBF # Lo CJK COMPATIBILITY IDEOGRAPH-F965
+F966 ; NFKC_CF; 5FA9 # Lo CJK COMPATIBILITY IDEOGRAPH-F966
+F967 ; NFKC_CF; 4E0D # Lo CJK COMPATIBILITY IDEOGRAPH-F967
+F968 ; NFKC_CF; 6CCC # Lo CJK COMPATIBILITY IDEOGRAPH-F968
+F969 ; NFKC_CF; 6578 # Lo CJK COMPATIBILITY IDEOGRAPH-F969
+F96A ; NFKC_CF; 7D22 # Lo CJK COMPATIBILITY IDEOGRAPH-F96A
+F96B ; NFKC_CF; 53C3 # Lo CJK COMPATIBILITY IDEOGRAPH-F96B
+F96C ; NFKC_CF; 585E # Lo CJK COMPATIBILITY IDEOGRAPH-F96C
+F96D ; NFKC_CF; 7701 # Lo CJK COMPATIBILITY IDEOGRAPH-F96D
+F96E ; NFKC_CF; 8449 # Lo CJK COMPATIBILITY IDEOGRAPH-F96E
+F96F ; NFKC_CF; 8AAA # Lo CJK COMPATIBILITY IDEOGRAPH-F96F
+F970 ; NFKC_CF; 6BBA # Lo CJK COMPATIBILITY IDEOGRAPH-F970
+F971 ; NFKC_CF; 8FB0 # Lo CJK COMPATIBILITY IDEOGRAPH-F971
+F972 ; NFKC_CF; 6C88 # Lo CJK COMPATIBILITY IDEOGRAPH-F972
+F973 ; NFKC_CF; 62FE # Lo CJK COMPATIBILITY IDEOGRAPH-F973
+F974 ; NFKC_CF; 82E5 # Lo CJK COMPATIBILITY IDEOGRAPH-F974
+F975 ; NFKC_CF; 63A0 # Lo CJK COMPATIBILITY IDEOGRAPH-F975
+F976 ; NFKC_CF; 7565 # Lo CJK COMPATIBILITY IDEOGRAPH-F976
+F977 ; NFKC_CF; 4EAE # Lo CJK COMPATIBILITY IDEOGRAPH-F977
+F978 ; NFKC_CF; 5169 # Lo CJK COMPATIBILITY IDEOGRAPH-F978
+F979 ; NFKC_CF; 51C9 # Lo CJK COMPATIBILITY IDEOGRAPH-F979
+F97A ; NFKC_CF; 6881 # Lo CJK COMPATIBILITY IDEOGRAPH-F97A
+F97B ; NFKC_CF; 7CE7 # Lo CJK COMPATIBILITY IDEOGRAPH-F97B
+F97C ; NFKC_CF; 826F # Lo CJK COMPATIBILITY IDEOGRAPH-F97C
+F97D ; NFKC_CF; 8AD2 # Lo CJK COMPATIBILITY IDEOGRAPH-F97D
+F97E ; NFKC_CF; 91CF # Lo CJK COMPATIBILITY IDEOGRAPH-F97E
+F97F ; NFKC_CF; 52F5 # Lo CJK COMPATIBILITY IDEOGRAPH-F97F
+F980 ; NFKC_CF; 5442 # Lo CJK COMPATIBILITY IDEOGRAPH-F980
+F981 ; NFKC_CF; 5973 # Lo CJK COMPATIBILITY IDEOGRAPH-F981
+F982 ; NFKC_CF; 5EEC # Lo CJK COMPATIBILITY IDEOGRAPH-F982
+F983 ; NFKC_CF; 65C5 # Lo CJK COMPATIBILITY IDEOGRAPH-F983
+F984 ; NFKC_CF; 6FFE # Lo CJK COMPATIBILITY IDEOGRAPH-F984
+F985 ; NFKC_CF; 792A # Lo CJK COMPATIBILITY IDEOGRAPH-F985
+F986 ; NFKC_CF; 95AD # Lo CJK COMPATIBILITY IDEOGRAPH-F986
+F987 ; NFKC_CF; 9A6A # Lo CJK COMPATIBILITY IDEOGRAPH-F987
+F988 ; NFKC_CF; 9E97 # Lo CJK COMPATIBILITY IDEOGRAPH-F988
+F989 ; NFKC_CF; 9ECE # Lo CJK COMPATIBILITY IDEOGRAPH-F989
+F98A ; NFKC_CF; 529B # Lo CJK COMPATIBILITY IDEOGRAPH-F98A
+F98B ; NFKC_CF; 66C6 # Lo CJK COMPATIBILITY IDEOGRAPH-F98B
+F98C ; NFKC_CF; 6B77 # Lo CJK COMPATIBILITY IDEOGRAPH-F98C
+F98D ; NFKC_CF; 8F62 # Lo CJK COMPATIBILITY IDEOGRAPH-F98D
+F98E ; NFKC_CF; 5E74 # Lo CJK COMPATIBILITY IDEOGRAPH-F98E
+F98F ; NFKC_CF; 6190 # Lo CJK COMPATIBILITY IDEOGRAPH-F98F
+F990 ; NFKC_CF; 6200 # Lo CJK COMPATIBILITY IDEOGRAPH-F990
+F991 ; NFKC_CF; 649A # Lo CJK COMPATIBILITY IDEOGRAPH-F991
+F992 ; NFKC_CF; 6F23 # Lo CJK COMPATIBILITY IDEOGRAPH-F992
+F993 ; NFKC_CF; 7149 # Lo CJK COMPATIBILITY IDEOGRAPH-F993
+F994 ; NFKC_CF; 7489 # Lo CJK COMPATIBILITY IDEOGRAPH-F994
+F995 ; NFKC_CF; 79CA # Lo CJK COMPATIBILITY IDEOGRAPH-F995
+F996 ; NFKC_CF; 7DF4 # Lo CJK COMPATIBILITY IDEOGRAPH-F996
+F997 ; NFKC_CF; 806F # Lo CJK COMPATIBILITY IDEOGRAPH-F997
+F998 ; NFKC_CF; 8F26 # Lo CJK COMPATIBILITY IDEOGRAPH-F998
+F999 ; NFKC_CF; 84EE # Lo CJK COMPATIBILITY IDEOGRAPH-F999
+F99A ; NFKC_CF; 9023 # Lo CJK COMPATIBILITY IDEOGRAPH-F99A
+F99B ; NFKC_CF; 934A # Lo CJK COMPATIBILITY IDEOGRAPH-F99B
+F99C ; NFKC_CF; 5217 # Lo CJK COMPATIBILITY IDEOGRAPH-F99C
+F99D ; NFKC_CF; 52A3 # Lo CJK COMPATIBILITY IDEOGRAPH-F99D
+F99E ; NFKC_CF; 54BD # Lo CJK COMPATIBILITY IDEOGRAPH-F99E
+F99F ; NFKC_CF; 70C8 # Lo CJK COMPATIBILITY IDEOGRAPH-F99F
+F9A0 ; NFKC_CF; 88C2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A0
+F9A1 ; NFKC_CF; 8AAA # Lo CJK COMPATIBILITY IDEOGRAPH-F9A1
+F9A2 ; NFKC_CF; 5EC9 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A2
+F9A3 ; NFKC_CF; 5FF5 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A3
+F9A4 ; NFKC_CF; 637B # Lo CJK COMPATIBILITY IDEOGRAPH-F9A4
+F9A5 ; NFKC_CF; 6BAE # Lo CJK COMPATIBILITY IDEOGRAPH-F9A5
+F9A6 ; NFKC_CF; 7C3E # Lo CJK COMPATIBILITY IDEOGRAPH-F9A6
+F9A7 ; NFKC_CF; 7375 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A7
+F9A8 ; NFKC_CF; 4EE4 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A8
+F9A9 ; NFKC_CF; 56F9 # Lo CJK COMPATIBILITY IDEOGRAPH-F9A9
+F9AA ; NFKC_CF; 5BE7 # Lo CJK COMPATIBILITY IDEOGRAPH-F9AA
+F9AB ; NFKC_CF; 5DBA # Lo CJK COMPATIBILITY IDEOGRAPH-F9AB
+F9AC ; NFKC_CF; 601C # Lo CJK COMPATIBILITY IDEOGRAPH-F9AC
+F9AD ; NFKC_CF; 73B2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9AD
+F9AE ; NFKC_CF; 7469 # Lo CJK COMPATIBILITY IDEOGRAPH-F9AE
+F9AF ; NFKC_CF; 7F9A # Lo CJK COMPATIBILITY IDEOGRAPH-F9AF
+F9B0 ; NFKC_CF; 8046 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B0
+F9B1 ; NFKC_CF; 9234 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B1
+F9B2 ; NFKC_CF; 96F6 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B2
+F9B3 ; NFKC_CF; 9748 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B3
+F9B4 ; NFKC_CF; 9818 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B4
+F9B5 ; NFKC_CF; 4F8B # Lo CJK COMPATIBILITY IDEOGRAPH-F9B5
+F9B6 ; NFKC_CF; 79AE # Lo CJK COMPATIBILITY IDEOGRAPH-F9B6
+F9B7 ; NFKC_CF; 91B4 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B7
+F9B8 ; NFKC_CF; 96B8 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B8
+F9B9 ; NFKC_CF; 60E1 # Lo CJK COMPATIBILITY IDEOGRAPH-F9B9
+F9BA ; NFKC_CF; 4E86 # Lo CJK COMPATIBILITY IDEOGRAPH-F9BA
+F9BB ; NFKC_CF; 50DA # Lo CJK COMPATIBILITY IDEOGRAPH-F9BB
+F9BC ; NFKC_CF; 5BEE # Lo CJK COMPATIBILITY IDEOGRAPH-F9BC
+F9BD ; NFKC_CF; 5C3F # Lo CJK COMPATIBILITY IDEOGRAPH-F9BD
+F9BE ; NFKC_CF; 6599 # Lo CJK COMPATIBILITY IDEOGRAPH-F9BE
+F9BF ; NFKC_CF; 6A02 # Lo CJK COMPATIBILITY IDEOGRAPH-F9BF
+F9C0 ; NFKC_CF; 71CE # Lo CJK COMPATIBILITY IDEOGRAPH-F9C0
+F9C1 ; NFKC_CF; 7642 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C1
+F9C2 ; NFKC_CF; 84FC # Lo CJK COMPATIBILITY IDEOGRAPH-F9C2
+F9C3 ; NFKC_CF; 907C # Lo CJK COMPATIBILITY IDEOGRAPH-F9C3
+F9C4 ; NFKC_CF; 9F8D # Lo CJK COMPATIBILITY IDEOGRAPH-F9C4
+F9C5 ; NFKC_CF; 6688 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C5
+F9C6 ; NFKC_CF; 962E # Lo CJK COMPATIBILITY IDEOGRAPH-F9C6
+F9C7 ; NFKC_CF; 5289 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C7
+F9C8 ; NFKC_CF; 677B # Lo CJK COMPATIBILITY IDEOGRAPH-F9C8
+F9C9 ; NFKC_CF; 67F3 # Lo CJK COMPATIBILITY IDEOGRAPH-F9C9
+F9CA ; NFKC_CF; 6D41 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CA
+F9CB ; NFKC_CF; 6E9C # Lo CJK COMPATIBILITY IDEOGRAPH-F9CB
+F9CC ; NFKC_CF; 7409 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CC
+F9CD ; NFKC_CF; 7559 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CD
+F9CE ; NFKC_CF; 786B # Lo CJK COMPATIBILITY IDEOGRAPH-F9CE
+F9CF ; NFKC_CF; 7D10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9CF
+F9D0 ; NFKC_CF; 985E # Lo CJK COMPATIBILITY IDEOGRAPH-F9D0
+F9D1 ; NFKC_CF; 516D # Lo CJK COMPATIBILITY IDEOGRAPH-F9D1
+F9D2 ; NFKC_CF; 622E # Lo CJK COMPATIBILITY IDEOGRAPH-F9D2
+F9D3 ; NFKC_CF; 9678 # Lo CJK COMPATIBILITY IDEOGRAPH-F9D3
+F9D4 ; NFKC_CF; 502B # Lo CJK COMPATIBILITY IDEOGRAPH-F9D4
+F9D5 ; NFKC_CF; 5D19 # Lo CJK COMPATIBILITY IDEOGRAPH-F9D5
+F9D6 ; NFKC_CF; 6DEA # Lo CJK COMPATIBILITY IDEOGRAPH-F9D6
+F9D7 ; NFKC_CF; 8F2A # Lo CJK COMPATIBILITY IDEOGRAPH-F9D7
+F9D8 ; NFKC_CF; 5F8B # Lo CJK COMPATIBILITY IDEOGRAPH-F9D8
+F9D9 ; NFKC_CF; 6144 # Lo CJK COMPATIBILITY IDEOGRAPH-F9D9
+F9DA ; NFKC_CF; 6817 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DA
+F9DB ; NFKC_CF; 7387 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DB
+F9DC ; NFKC_CF; 9686 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DC
+F9DD ; NFKC_CF; 5229 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DD
+F9DE ; NFKC_CF; 540F # Lo CJK COMPATIBILITY IDEOGRAPH-F9DE
+F9DF ; NFKC_CF; 5C65 # Lo CJK COMPATIBILITY IDEOGRAPH-F9DF
+F9E0 ; NFKC_CF; 6613 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E0
+F9E1 ; NFKC_CF; 674E # Lo CJK COMPATIBILITY IDEOGRAPH-F9E1
+F9E2 ; NFKC_CF; 68A8 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E2
+F9E3 ; NFKC_CF; 6CE5 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E3
+F9E4 ; NFKC_CF; 7406 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E4
+F9E5 ; NFKC_CF; 75E2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E5
+F9E6 ; NFKC_CF; 7F79 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E6
+F9E7 ; NFKC_CF; 88CF # Lo CJK COMPATIBILITY IDEOGRAPH-F9E7
+F9E8 ; NFKC_CF; 88E1 # Lo CJK COMPATIBILITY IDEOGRAPH-F9E8
+F9E9 ; NFKC_CF; 91CC # Lo CJK COMPATIBILITY IDEOGRAPH-F9E9
+F9EA ; NFKC_CF; 96E2 # Lo CJK COMPATIBILITY IDEOGRAPH-F9EA
+F9EB ; NFKC_CF; 533F # Lo CJK COMPATIBILITY IDEOGRAPH-F9EB
+F9EC ; NFKC_CF; 6EBA # Lo CJK COMPATIBILITY IDEOGRAPH-F9EC
+F9ED ; NFKC_CF; 541D # Lo CJK COMPATIBILITY IDEOGRAPH-F9ED
+F9EE ; NFKC_CF; 71D0 # Lo CJK COMPATIBILITY IDEOGRAPH-F9EE
+F9EF ; NFKC_CF; 7498 # Lo CJK COMPATIBILITY IDEOGRAPH-F9EF
+F9F0 ; NFKC_CF; 85FA # Lo CJK COMPATIBILITY IDEOGRAPH-F9F0
+F9F1 ; NFKC_CF; 96A3 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F1
+F9F2 ; NFKC_CF; 9C57 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F2
+F9F3 ; NFKC_CF; 9E9F # Lo CJK COMPATIBILITY IDEOGRAPH-F9F3
+F9F4 ; NFKC_CF; 6797 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F4
+F9F5 ; NFKC_CF; 6DCB # Lo CJK COMPATIBILITY IDEOGRAPH-F9F5
+F9F6 ; NFKC_CF; 81E8 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F6
+F9F7 ; NFKC_CF; 7ACB # Lo CJK COMPATIBILITY IDEOGRAPH-F9F7
+F9F8 ; NFKC_CF; 7B20 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F8
+F9F9 ; NFKC_CF; 7C92 # Lo CJK COMPATIBILITY IDEOGRAPH-F9F9
+F9FA ; NFKC_CF; 72C0 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FA
+F9FB ; NFKC_CF; 7099 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FB
+F9FC ; NFKC_CF; 8B58 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FC
+F9FD ; NFKC_CF; 4EC0 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
+F9FE ; NFKC_CF; 8336 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FE
+F9FF ; NFKC_CF; 523A # Lo CJK COMPATIBILITY IDEOGRAPH-F9FF
+FA00 ; NFKC_CF; 5207 # Lo CJK COMPATIBILITY IDEOGRAPH-FA00
+FA01 ; NFKC_CF; 5EA6 # Lo CJK COMPATIBILITY IDEOGRAPH-FA01
+FA02 ; NFKC_CF; 62D3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA02
+FA03 ; NFKC_CF; 7CD6 # Lo CJK COMPATIBILITY IDEOGRAPH-FA03
+FA04 ; NFKC_CF; 5B85 # Lo CJK COMPATIBILITY IDEOGRAPH-FA04
+FA05 ; NFKC_CF; 6D1E # Lo CJK COMPATIBILITY IDEOGRAPH-FA05
+FA06 ; NFKC_CF; 66B4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA06
+FA07 ; NFKC_CF; 8F3B # Lo CJK COMPATIBILITY IDEOGRAPH-FA07
+FA08 ; NFKC_CF; 884C # Lo CJK COMPATIBILITY IDEOGRAPH-FA08
+FA09 ; NFKC_CF; 964D # Lo CJK COMPATIBILITY IDEOGRAPH-FA09
+FA0A ; NFKC_CF; 898B # Lo CJK COMPATIBILITY IDEOGRAPH-FA0A
+FA0B ; NFKC_CF; 5ED3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA0B
+FA0C ; NFKC_CF; 5140 # Lo CJK COMPATIBILITY IDEOGRAPH-FA0C
+FA0D ; NFKC_CF; 55C0 # Lo CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; NFKC_CF; 585A # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; NFKC_CF; 6674 # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15 ; NFKC_CF; 51DE # Lo CJK COMPATIBILITY IDEOGRAPH-FA15
+FA16 ; NFKC_CF; 732A # Lo CJK COMPATIBILITY IDEOGRAPH-FA16
+FA17 ; NFKC_CF; 76CA # Lo CJK COMPATIBILITY IDEOGRAPH-FA17
+FA18 ; NFKC_CF; 793C # Lo CJK COMPATIBILITY IDEOGRAPH-FA18
+FA19 ; NFKC_CF; 795E # Lo CJK COMPATIBILITY IDEOGRAPH-FA19
+FA1A ; NFKC_CF; 7965 # Lo CJK COMPATIBILITY IDEOGRAPH-FA1A
+FA1B ; NFKC_CF; 798F # Lo CJK COMPATIBILITY IDEOGRAPH-FA1B
+FA1C ; NFKC_CF; 9756 # Lo CJK COMPATIBILITY IDEOGRAPH-FA1C
+FA1D ; NFKC_CF; 7CBE # Lo CJK COMPATIBILITY IDEOGRAPH-FA1D
+FA1E ; NFKC_CF; 7FBD # Lo CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; NFKC_CF; 8612 # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; NFKC_CF; 8AF8 # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25 ; NFKC_CF; 9038 # Lo CJK COMPATIBILITY IDEOGRAPH-FA25
+FA26 ; NFKC_CF; 90FD # Lo CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A ; NFKC_CF; 98EF # Lo CJK COMPATIBILITY IDEOGRAPH-FA2A
+FA2B ; NFKC_CF; 98FC # Lo CJK COMPATIBILITY IDEOGRAPH-FA2B
+FA2C ; NFKC_CF; 9928 # Lo CJK COMPATIBILITY IDEOGRAPH-FA2C
+FA2D ; NFKC_CF; 9DB4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA2E ; NFKC_CF; 90DE # Lo CJK COMPATIBILITY IDEOGRAPH-FA2E
+FA2F ; NFKC_CF; 96B7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA2F
+FA30 ; NFKC_CF; 4FAE # Lo CJK COMPATIBILITY IDEOGRAPH-FA30
+FA31 ; NFKC_CF; 50E7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA31
+FA32 ; NFKC_CF; 514D # Lo CJK COMPATIBILITY IDEOGRAPH-FA32
+FA33 ; NFKC_CF; 52C9 # Lo CJK COMPATIBILITY IDEOGRAPH-FA33
+FA34 ; NFKC_CF; 52E4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA34
+FA35 ; NFKC_CF; 5351 # Lo CJK COMPATIBILITY IDEOGRAPH-FA35
+FA36 ; NFKC_CF; 559D # Lo CJK COMPATIBILITY IDEOGRAPH-FA36
+FA37 ; NFKC_CF; 5606 # Lo CJK COMPATIBILITY IDEOGRAPH-FA37
+FA38 ; NFKC_CF; 5668 # Lo CJK COMPATIBILITY IDEOGRAPH-FA38
+FA39 ; NFKC_CF; 5840 # Lo CJK COMPATIBILITY IDEOGRAPH-FA39
+FA3A ; NFKC_CF; 58A8 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3A
+FA3B ; NFKC_CF; 5C64 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3B
+FA3C ; NFKC_CF; 5C6E # Lo CJK COMPATIBILITY IDEOGRAPH-FA3C
+FA3D ; NFKC_CF; 6094 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3D
+FA3E ; NFKC_CF; 6168 # Lo CJK COMPATIBILITY IDEOGRAPH-FA3E
+FA3F ; NFKC_CF; 618E # Lo CJK COMPATIBILITY IDEOGRAPH-FA3F
+FA40 ; NFKC_CF; 61F2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA40
+FA41 ; NFKC_CF; 654F # Lo CJK COMPATIBILITY IDEOGRAPH-FA41
+FA42 ; NFKC_CF; 65E2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA42
+FA43 ; NFKC_CF; 6691 # Lo CJK COMPATIBILITY IDEOGRAPH-FA43
+FA44 ; NFKC_CF; 6885 # Lo CJK COMPATIBILITY IDEOGRAPH-FA44
+FA45 ; NFKC_CF; 6D77 # Lo CJK COMPATIBILITY IDEOGRAPH-FA45
+FA46 ; NFKC_CF; 6E1A # Lo CJK COMPATIBILITY IDEOGRAPH-FA46
+FA47 ; NFKC_CF; 6F22 # Lo CJK COMPATIBILITY IDEOGRAPH-FA47
+FA48 ; NFKC_CF; 716E # Lo CJK COMPATIBILITY IDEOGRAPH-FA48
+FA49 ; NFKC_CF; 722B # Lo CJK COMPATIBILITY IDEOGRAPH-FA49
+FA4A ; NFKC_CF; 7422 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4A
+FA4B ; NFKC_CF; 7891 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4B
+FA4C ; NFKC_CF; 793E # Lo CJK COMPATIBILITY IDEOGRAPH-FA4C
+FA4D ; NFKC_CF; 7949 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4D
+FA4E ; NFKC_CF; 7948 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4E
+FA4F ; NFKC_CF; 7950 # Lo CJK COMPATIBILITY IDEOGRAPH-FA4F
+FA50 ; NFKC_CF; 7956 # Lo CJK COMPATIBILITY IDEOGRAPH-FA50
+FA51 ; NFKC_CF; 795D # Lo CJK COMPATIBILITY IDEOGRAPH-FA51
+FA52 ; NFKC_CF; 798D # Lo CJK COMPATIBILITY IDEOGRAPH-FA52
+FA53 ; NFKC_CF; 798E # Lo CJK COMPATIBILITY IDEOGRAPH-FA53
+FA54 ; NFKC_CF; 7A40 # Lo CJK COMPATIBILITY IDEOGRAPH-FA54
+FA55 ; NFKC_CF; 7A81 # Lo CJK COMPATIBILITY IDEOGRAPH-FA55
+FA56 ; NFKC_CF; 7BC0 # Lo CJK COMPATIBILITY IDEOGRAPH-FA56
+FA57 ; NFKC_CF; 7DF4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA57
+FA58 ; NFKC_CF; 7E09 # Lo CJK COMPATIBILITY IDEOGRAPH-FA58
+FA59 ; NFKC_CF; 7E41 # Lo CJK COMPATIBILITY IDEOGRAPH-FA59
+FA5A ; NFKC_CF; 7F72 # Lo CJK COMPATIBILITY IDEOGRAPH-FA5A
+FA5B ; NFKC_CF; 8005 # Lo CJK COMPATIBILITY IDEOGRAPH-FA5B
+FA5C ; NFKC_CF; 81ED # Lo CJK COMPATIBILITY IDEOGRAPH-FA5C
+FA5D..FA5E ; NFKC_CF; 8279 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA5D..CJK COMPATIBILITY IDEOGRAPH-FA5E
+FA5F ; NFKC_CF; 8457 # Lo CJK COMPATIBILITY IDEOGRAPH-FA5F
+FA60 ; NFKC_CF; 8910 # Lo CJK COMPATIBILITY IDEOGRAPH-FA60
+FA61 ; NFKC_CF; 8996 # Lo CJK COMPATIBILITY IDEOGRAPH-FA61
+FA62 ; NFKC_CF; 8B01 # Lo CJK COMPATIBILITY IDEOGRAPH-FA62
+FA63 ; NFKC_CF; 8B39 # Lo CJK COMPATIBILITY IDEOGRAPH-FA63
+FA64 ; NFKC_CF; 8CD3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA64
+FA65 ; NFKC_CF; 8D08 # Lo CJK COMPATIBILITY IDEOGRAPH-FA65
+FA66 ; NFKC_CF; 8FB6 # Lo CJK COMPATIBILITY IDEOGRAPH-FA66
+FA67 ; NFKC_CF; 9038 # Lo CJK COMPATIBILITY IDEOGRAPH-FA67
+FA68 ; NFKC_CF; 96E3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA68
+FA69 ; NFKC_CF; 97FF # Lo CJK COMPATIBILITY IDEOGRAPH-FA69
+FA6A ; NFKC_CF; 983B # Lo CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA6B ; NFKC_CF; 6075 # Lo CJK COMPATIBILITY IDEOGRAPH-FA6B
+FA6C ; NFKC_CF; 242EE # Lo CJK COMPATIBILITY IDEOGRAPH-FA6C
+FA6D ; NFKC_CF; 8218 # Lo CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70 ; NFKC_CF; 4E26 # Lo CJK COMPATIBILITY IDEOGRAPH-FA70
+FA71 ; NFKC_CF; 51B5 # Lo CJK COMPATIBILITY IDEOGRAPH-FA71
+FA72 ; NFKC_CF; 5168 # Lo CJK COMPATIBILITY IDEOGRAPH-FA72
+FA73 ; NFKC_CF; 4F80 # Lo CJK COMPATIBILITY IDEOGRAPH-FA73
+FA74 ; NFKC_CF; 5145 # Lo CJK COMPATIBILITY IDEOGRAPH-FA74
+FA75 ; NFKC_CF; 5180 # Lo CJK COMPATIBILITY IDEOGRAPH-FA75
+FA76 ; NFKC_CF; 52C7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA76
+FA77 ; NFKC_CF; 52FA # Lo CJK COMPATIBILITY IDEOGRAPH-FA77
+FA78 ; NFKC_CF; 559D # Lo CJK COMPATIBILITY IDEOGRAPH-FA78
+FA79 ; NFKC_CF; 5555 # Lo CJK COMPATIBILITY IDEOGRAPH-FA79
+FA7A ; NFKC_CF; 5599 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7A
+FA7B ; NFKC_CF; 55E2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7B
+FA7C ; NFKC_CF; 585A # Lo CJK COMPATIBILITY IDEOGRAPH-FA7C
+FA7D ; NFKC_CF; 58B3 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7D
+FA7E ; NFKC_CF; 5944 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7E
+FA7F ; NFKC_CF; 5954 # Lo CJK COMPATIBILITY IDEOGRAPH-FA7F
+FA80 ; NFKC_CF; 5A62 # Lo CJK COMPATIBILITY IDEOGRAPH-FA80
+FA81 ; NFKC_CF; 5B28 # Lo CJK COMPATIBILITY IDEOGRAPH-FA81
+FA82 ; NFKC_CF; 5ED2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA82
+FA83 ; NFKC_CF; 5ED9 # Lo CJK COMPATIBILITY IDEOGRAPH-FA83
+FA84 ; NFKC_CF; 5F69 # Lo CJK COMPATIBILITY IDEOGRAPH-FA84
+FA85 ; NFKC_CF; 5FAD # Lo CJK COMPATIBILITY IDEOGRAPH-FA85
+FA86 ; NFKC_CF; 60D8 # Lo CJK COMPATIBILITY IDEOGRAPH-FA86
+FA87 ; NFKC_CF; 614E # Lo CJK COMPATIBILITY IDEOGRAPH-FA87
+FA88 ; NFKC_CF; 6108 # Lo CJK COMPATIBILITY IDEOGRAPH-FA88
+FA89 ; NFKC_CF; 618E # Lo CJK COMPATIBILITY IDEOGRAPH-FA89
+FA8A ; NFKC_CF; 6160 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8A
+FA8B ; NFKC_CF; 61F2 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8B
+FA8C ; NFKC_CF; 6234 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8C
+FA8D ; NFKC_CF; 63C4 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8D
+FA8E ; NFKC_CF; 641C # Lo CJK COMPATIBILITY IDEOGRAPH-FA8E
+FA8F ; NFKC_CF; 6452 # Lo CJK COMPATIBILITY IDEOGRAPH-FA8F
+FA90 ; NFKC_CF; 6556 # Lo CJK COMPATIBILITY IDEOGRAPH-FA90
+FA91 ; NFKC_CF; 6674 # Lo CJK COMPATIBILITY IDEOGRAPH-FA91
+FA92 ; NFKC_CF; 6717 # Lo CJK COMPATIBILITY IDEOGRAPH-FA92
+FA93 ; NFKC_CF; 671B # Lo CJK COMPATIBILITY IDEOGRAPH-FA93
+FA94 ; NFKC_CF; 6756 # Lo CJK COMPATIBILITY IDEOGRAPH-FA94
+FA95 ; NFKC_CF; 6B79 # Lo CJK COMPATIBILITY IDEOGRAPH-FA95
+FA96 ; NFKC_CF; 6BBA # Lo CJK COMPATIBILITY IDEOGRAPH-FA96
+FA97 ; NFKC_CF; 6D41 # Lo CJK COMPATIBILITY IDEOGRAPH-FA97
+FA98 ; NFKC_CF; 6EDB # Lo CJK COMPATIBILITY IDEOGRAPH-FA98
+FA99 ; NFKC_CF; 6ECB # Lo CJK COMPATIBILITY IDEOGRAPH-FA99
+FA9A ; NFKC_CF; 6F22 # Lo CJK COMPATIBILITY IDEOGRAPH-FA9A
+FA9B ; NFKC_CF; 701E # Lo CJK COMPATIBILITY IDEOGRAPH-FA9B
+FA9C ; NFKC_CF; 716E # Lo CJK COMPATIBILITY IDEOGRAPH-FA9C
+FA9D ; NFKC_CF; 77A7 # Lo CJK COMPATIBILITY IDEOGRAPH-FA9D
+FA9E ; NFKC_CF; 7235 # Lo CJK COMPATIBILITY IDEOGRAPH-FA9E
+FA9F ; NFKC_CF; 72AF # Lo CJK COMPATIBILITY IDEOGRAPH-FA9F
+FAA0 ; NFKC_CF; 732A # Lo CJK COMPATIBILITY IDEOGRAPH-FAA0
+FAA1 ; NFKC_CF; 7471 # Lo CJK COMPATIBILITY IDEOGRAPH-FAA1
+FAA2 ; NFKC_CF; 7506 # Lo CJK COMPATIBILITY IDEOGRAPH-FAA2
+FAA3 ; NFKC_CF; 753B # Lo CJK COMPATIBILITY IDEOGRAPH-FAA3
+FAA4 ; NFKC_CF; 761D # Lo CJK COMPATIBILITY IDEOGRAPH-FAA4
+FAA5 ; NFKC_CF; 761F # Lo CJK COMPATIBILITY IDEOGRAPH-FAA5
+FAA6 ; NFKC_CF; 76CA # Lo CJK COMPATIBILITY IDEOGRAPH-FAA6
+FAA7 ; NFKC_CF; 76DB # Lo CJK COMPATIBILITY IDEOGRAPH-FAA7
+FAA8 ; NFKC_CF; 76F4 # Lo CJK COMPATIBILITY IDEOGRAPH-FAA8
+FAA9 ; NFKC_CF; 774A # Lo CJK COMPATIBILITY IDEOGRAPH-FAA9
+FAAA ; NFKC_CF; 7740 # Lo CJK COMPATIBILITY IDEOGRAPH-FAAA
+FAAB ; NFKC_CF; 78CC # Lo CJK COMPATIBILITY IDEOGRAPH-FAAB
+FAAC ; NFKC_CF; 7AB1 # Lo CJK COMPATIBILITY IDEOGRAPH-FAAC
+FAAD ; NFKC_CF; 7BC0 # Lo CJK COMPATIBILITY IDEOGRAPH-FAAD
+FAAE ; NFKC_CF; 7C7B # Lo CJK COMPATIBILITY IDEOGRAPH-FAAE
+FAAF ; NFKC_CF; 7D5B # Lo CJK COMPATIBILITY IDEOGRAPH-FAAF
+FAB0 ; NFKC_CF; 7DF4 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB0
+FAB1 ; NFKC_CF; 7F3E # Lo CJK COMPATIBILITY IDEOGRAPH-FAB1
+FAB2 ; NFKC_CF; 8005 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB2
+FAB3 ; NFKC_CF; 8352 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB3
+FAB4 ; NFKC_CF; 83EF # Lo CJK COMPATIBILITY IDEOGRAPH-FAB4
+FAB5 ; NFKC_CF; 8779 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB5
+FAB6 ; NFKC_CF; 8941 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB6
+FAB7 ; NFKC_CF; 8986 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB7
+FAB8 ; NFKC_CF; 8996 # Lo CJK COMPATIBILITY IDEOGRAPH-FAB8
+FAB9 ; NFKC_CF; 8ABF # Lo CJK COMPATIBILITY IDEOGRAPH-FAB9
+FABA ; NFKC_CF; 8AF8 # Lo CJK COMPATIBILITY IDEOGRAPH-FABA
+FABB ; NFKC_CF; 8ACB # Lo CJK COMPATIBILITY IDEOGRAPH-FABB
+FABC ; NFKC_CF; 8B01 # Lo CJK COMPATIBILITY IDEOGRAPH-FABC
+FABD ; NFKC_CF; 8AFE # Lo CJK COMPATIBILITY IDEOGRAPH-FABD
+FABE ; NFKC_CF; 8AED # Lo CJK COMPATIBILITY IDEOGRAPH-FABE
+FABF ; NFKC_CF; 8B39 # Lo CJK COMPATIBILITY IDEOGRAPH-FABF
+FAC0 ; NFKC_CF; 8B8A # Lo CJK COMPATIBILITY IDEOGRAPH-FAC0
+FAC1 ; NFKC_CF; 8D08 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC1
+FAC2 ; NFKC_CF; 8F38 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC2
+FAC3 ; NFKC_CF; 9072 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC3
+FAC4 ; NFKC_CF; 9199 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC4
+FAC5 ; NFKC_CF; 9276 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC5
+FAC6 ; NFKC_CF; 967C # Lo CJK COMPATIBILITY IDEOGRAPH-FAC6
+FAC7 ; NFKC_CF; 96E3 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC7
+FAC8 ; NFKC_CF; 9756 # Lo CJK COMPATIBILITY IDEOGRAPH-FAC8
+FAC9 ; NFKC_CF; 97DB # Lo CJK COMPATIBILITY IDEOGRAPH-FAC9
+FACA ; NFKC_CF; 97FF # Lo CJK COMPATIBILITY IDEOGRAPH-FACA
+FACB ; NFKC_CF; 980B # Lo CJK COMPATIBILITY IDEOGRAPH-FACB
+FACC ; NFKC_CF; 983B # Lo CJK COMPATIBILITY IDEOGRAPH-FACC
+FACD ; NFKC_CF; 9B12 # Lo CJK COMPATIBILITY IDEOGRAPH-FACD
+FACE ; NFKC_CF; 9F9C # Lo CJK COMPATIBILITY IDEOGRAPH-FACE
+FACF ; NFKC_CF; 2284A # Lo CJK COMPATIBILITY IDEOGRAPH-FACF
+FAD0 ; NFKC_CF; 22844 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD0
+FAD1 ; NFKC_CF; 233D5 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD1
+FAD2 ; NFKC_CF; 3B9D # Lo CJK COMPATIBILITY IDEOGRAPH-FAD2
+FAD3 ; NFKC_CF; 4018 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD3
+FAD4 ; NFKC_CF; 4039 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD4
+FAD5 ; NFKC_CF; 25249 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD5
+FAD6 ; NFKC_CF; 25CD0 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD6
+FAD7 ; NFKC_CF; 27ED3 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD7
+FAD8 ; NFKC_CF; 9F43 # Lo CJK COMPATIBILITY IDEOGRAPH-FAD8
+FAD9 ; NFKC_CF; 9F8E # Lo CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00 ; NFKC_CF; 0066 0066 # L& LATIN SMALL LIGATURE FF
+FB01 ; NFKC_CF; 0066 0069 # L& LATIN SMALL LIGATURE FI
+FB02 ; NFKC_CF; 0066 006C # L& LATIN SMALL LIGATURE FL
+FB03 ; NFKC_CF; 0066 0066 0069 # L& LATIN SMALL LIGATURE FFI
+FB04 ; NFKC_CF; 0066 0066 006C # L& LATIN SMALL LIGATURE FFL
+FB05..FB06 ; NFKC_CF; 0073 0074 # L& [2] LATIN SMALL LIGATURE LONG S T..LATIN SMALL LIGATURE ST
+FB13 ; NFKC_CF; 0574 0576 # L& ARMENIAN SMALL LIGATURE MEN NOW
+FB14 ; NFKC_CF; 0574 0565 # L& ARMENIAN SMALL LIGATURE MEN ECH
+FB15 ; NFKC_CF; 0574 056B # L& ARMENIAN SMALL LIGATURE MEN INI
+FB16 ; NFKC_CF; 057E 0576 # L& ARMENIAN SMALL LIGATURE VEW NOW
+FB17 ; NFKC_CF; 0574 056D # L& ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; NFKC_CF; 05D9 05B4 # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F ; NFKC_CF; 05F2 05B7 # Lo HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB20 ; NFKC_CF; 05E2 # Lo HEBREW LETTER ALTERNATIVE AYIN
+FB21 ; NFKC_CF; 05D0 # Lo HEBREW LETTER WIDE ALEF
+FB22 ; NFKC_CF; 05D3 # Lo HEBREW LETTER WIDE DALET
+FB23 ; NFKC_CF; 05D4 # Lo HEBREW LETTER WIDE HE
+FB24 ; NFKC_CF; 05DB # Lo HEBREW LETTER WIDE KAF
+FB25 ; NFKC_CF; 05DC # Lo HEBREW LETTER WIDE LAMED
+FB26 ; NFKC_CF; 05DD # Lo HEBREW LETTER WIDE FINAL MEM
+FB27 ; NFKC_CF; 05E8 # Lo HEBREW LETTER WIDE RESH
+FB28 ; NFKC_CF; 05EA # Lo HEBREW LETTER WIDE TAV
+FB29 ; NFKC_CF; 002B # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A ; NFKC_CF; 05E9 05C1 # Lo HEBREW LETTER SHIN WITH SHIN DOT
+FB2B ; NFKC_CF; 05E9 05C2 # Lo HEBREW LETTER SHIN WITH SIN DOT
+FB2C ; NFKC_CF; 05E9 05BC 05C1 # Lo HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D ; NFKC_CF; 05E9 05BC 05C2 # Lo HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E ; NFKC_CF; 05D0 05B7 # Lo HEBREW LETTER ALEF WITH PATAH
+FB2F ; NFKC_CF; 05D0 05B8 # Lo HEBREW LETTER ALEF WITH QAMATS
+FB30 ; NFKC_CF; 05D0 05BC # Lo HEBREW LETTER ALEF WITH MAPIQ
+FB31 ; NFKC_CF; 05D1 05BC # Lo HEBREW LETTER BET WITH DAGESH
+FB32 ; NFKC_CF; 05D2 05BC # Lo HEBREW LETTER GIMEL WITH DAGESH
+FB33 ; NFKC_CF; 05D3 05BC # Lo HEBREW LETTER DALET WITH DAGESH
+FB34 ; NFKC_CF; 05D4 05BC # Lo HEBREW LETTER HE WITH MAPIQ
+FB35 ; NFKC_CF; 05D5 05BC # Lo HEBREW LETTER VAV WITH DAGESH
+FB36 ; NFKC_CF; 05D6 05BC # Lo HEBREW LETTER ZAYIN WITH DAGESH
+FB38 ; NFKC_CF; 05D8 05BC # Lo HEBREW LETTER TET WITH DAGESH
+FB39 ; NFKC_CF; 05D9 05BC # Lo HEBREW LETTER YOD WITH DAGESH
+FB3A ; NFKC_CF; 05DA 05BC # Lo HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B ; NFKC_CF; 05DB 05BC # Lo HEBREW LETTER KAF WITH DAGESH
+FB3C ; NFKC_CF; 05DC 05BC # Lo HEBREW LETTER LAMED WITH DAGESH
+FB3E ; NFKC_CF; 05DE 05BC # Lo HEBREW LETTER MEM WITH DAGESH
+FB40 ; NFKC_CF; 05E0 05BC # Lo HEBREW LETTER NUN WITH DAGESH
+FB41 ; NFKC_CF; 05E1 05BC # Lo HEBREW LETTER SAMEKH WITH DAGESH
+FB43 ; NFKC_CF; 05E3 05BC # Lo HEBREW LETTER FINAL PE WITH DAGESH
+FB44 ; NFKC_CF; 05E4 05BC # Lo HEBREW LETTER PE WITH DAGESH
+FB46 ; NFKC_CF; 05E6 05BC # Lo HEBREW LETTER TSADI WITH DAGESH
+FB47 ; NFKC_CF; 05E7 05BC # Lo HEBREW LETTER QOF WITH DAGESH
+FB48 ; NFKC_CF; 05E8 05BC # Lo HEBREW LETTER RESH WITH DAGESH
+FB49 ; NFKC_CF; 05E9 05BC # Lo HEBREW LETTER SHIN WITH DAGESH
+FB4A ; NFKC_CF; 05EA 05BC # Lo HEBREW LETTER TAV WITH DAGESH
+FB4B ; NFKC_CF; 05D5 05B9 # Lo HEBREW LETTER VAV WITH HOLAM
+FB4C ; NFKC_CF; 05D1 05BF # Lo HEBREW LETTER BET WITH RAFE
+FB4D ; NFKC_CF; 05DB 05BF # Lo HEBREW LETTER KAF WITH RAFE
+FB4E ; NFKC_CF; 05E4 05BF # Lo HEBREW LETTER PE WITH RAFE
+FB4F ; NFKC_CF; 05D0 05DC # Lo HEBREW LIGATURE ALEF LAMED
+FB50..FB51 ; NFKC_CF; 0671 # Lo [2] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER ALEF WASLA FINAL FORM
+FB52..FB55 ; NFKC_CF; 067B # Lo [4] ARABIC LETTER BEEH ISOLATED FORM..ARABIC LETTER BEEH MEDIAL FORM
+FB56..FB59 ; NFKC_CF; 067E # Lo [4] ARABIC LETTER PEH ISOLATED FORM..ARABIC LETTER PEH MEDIAL FORM
+FB5A..FB5D ; NFKC_CF; 0680 # Lo [4] ARABIC LETTER BEHEH ISOLATED FORM..ARABIC LETTER BEHEH MEDIAL FORM
+FB5E..FB61 ; NFKC_CF; 067A # Lo [4] ARABIC LETTER TTEHEH ISOLATED FORM..ARABIC LETTER TTEHEH MEDIAL FORM
+FB62..FB65 ; NFKC_CF; 067F # Lo [4] ARABIC LETTER TEHEH ISOLATED FORM..ARABIC LETTER TEHEH MEDIAL FORM
+FB66..FB69 ; NFKC_CF; 0679 # Lo [4] ARABIC LETTER TTEH ISOLATED FORM..ARABIC LETTER TTEH MEDIAL FORM
+FB6A..FB6D ; NFKC_CF; 06A4 # Lo [4] ARABIC LETTER VEH ISOLATED FORM..ARABIC LETTER VEH MEDIAL FORM
+FB6E..FB71 ; NFKC_CF; 06A6 # Lo [4] ARABIC LETTER PEHEH ISOLATED FORM..ARABIC LETTER PEHEH MEDIAL FORM
+FB72..FB75 ; NFKC_CF; 0684 # Lo [4] ARABIC LETTER DYEH ISOLATED FORM..ARABIC LETTER DYEH MEDIAL FORM
+FB76..FB79 ; NFKC_CF; 0683 # Lo [4] ARABIC LETTER NYEH ISOLATED FORM..ARABIC LETTER NYEH MEDIAL FORM
+FB7A..FB7D ; NFKC_CF; 0686 # Lo [4] ARABIC LETTER TCHEH ISOLATED FORM..ARABIC LETTER TCHEH MEDIAL FORM
+FB7E..FB81 ; NFKC_CF; 0687 # Lo [4] ARABIC LETTER TCHEHEH ISOLATED FORM..ARABIC LETTER TCHEHEH MEDIAL FORM
+FB82..FB83 ; NFKC_CF; 068D # Lo [2] ARABIC LETTER DDAHAL ISOLATED FORM..ARABIC LETTER DDAHAL FINAL FORM
+FB84..FB85 ; NFKC_CF; 068C # Lo [2] ARABIC LETTER DAHAL ISOLATED FORM..ARABIC LETTER DAHAL FINAL FORM
+FB86..FB87 ; NFKC_CF; 068E # Lo [2] ARABIC LETTER DUL ISOLATED FORM..ARABIC LETTER DUL FINAL FORM
+FB88..FB89 ; NFKC_CF; 0688 # Lo [2] ARABIC LETTER DDAL ISOLATED FORM..ARABIC LETTER DDAL FINAL FORM
+FB8A..FB8B ; NFKC_CF; 0698 # Lo [2] ARABIC LETTER JEH ISOLATED FORM..ARABIC LETTER JEH FINAL FORM
+FB8C..FB8D ; NFKC_CF; 0691 # Lo [2] ARABIC LETTER RREH ISOLATED FORM..ARABIC LETTER RREH FINAL FORM
+FB8E..FB91 ; NFKC_CF; 06A9 # Lo [4] ARABIC LETTER KEHEH ISOLATED FORM..ARABIC LETTER KEHEH MEDIAL FORM
+FB92..FB95 ; NFKC_CF; 06AF # Lo [4] ARABIC LETTER GAF ISOLATED FORM..ARABIC LETTER GAF MEDIAL FORM
+FB96..FB99 ; NFKC_CF; 06B3 # Lo [4] ARABIC LETTER GUEH ISOLATED FORM..ARABIC LETTER GUEH MEDIAL FORM
+FB9A..FB9D ; NFKC_CF; 06B1 # Lo [4] ARABIC LETTER NGOEH ISOLATED FORM..ARABIC LETTER NGOEH MEDIAL FORM
+FB9E..FB9F ; NFKC_CF; 06BA # Lo [2] ARABIC LETTER NOON GHUNNA ISOLATED FORM..ARABIC LETTER NOON GHUNNA FINAL FORM
+FBA0..FBA3 ; NFKC_CF; 06BB # Lo [4] ARABIC LETTER RNOON ISOLATED FORM..ARABIC LETTER RNOON MEDIAL FORM
+FBA4..FBA5 ; NFKC_CF; 06C0 # Lo [2] ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM..ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+FBA6..FBA9 ; NFKC_CF; 06C1 # Lo [4] ARABIC LETTER HEH GOAL ISOLATED FORM..ARABIC LETTER HEH GOAL MEDIAL FORM
+FBAA..FBAD ; NFKC_CF; 06BE # Lo [4] ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM..ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+FBAE..FBAF ; NFKC_CF; 06D2 # Lo [2] ARABIC LETTER YEH BARREE ISOLATED FORM..ARABIC LETTER YEH BARREE FINAL FORM
+FBB0..FBB1 ; NFKC_CF; 06D3 # Lo [2] ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FBD6 ; NFKC_CF; 06AD # Lo [4] ARABIC LETTER NG ISOLATED FORM..ARABIC LETTER NG MEDIAL FORM
+FBD7..FBD8 ; NFKC_CF; 06C7 # Lo [2] ARABIC LETTER U ISOLATED FORM..ARABIC LETTER U FINAL FORM
+FBD9..FBDA ; NFKC_CF; 06C6 # Lo [2] ARABIC LETTER OE ISOLATED FORM..ARABIC LETTER OE FINAL FORM
+FBDB..FBDC ; NFKC_CF; 06C8 # Lo [2] ARABIC LETTER YU ISOLATED FORM..ARABIC LETTER YU FINAL FORM
+FBDD ; NFKC_CF; 06C7 0674 # Lo ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+FBDE..FBDF ; NFKC_CF; 06CB # Lo [2] ARABIC LETTER VE ISOLATED FORM..ARABIC LETTER VE FINAL FORM
+FBE0..FBE1 ; NFKC_CF; 06C5 # Lo [2] ARABIC LETTER KIRGHIZ OE ISOLATED FORM..ARABIC LETTER KIRGHIZ OE FINAL FORM
+FBE2..FBE3 ; NFKC_CF; 06C9 # Lo [2] ARABIC LETTER KIRGHIZ YU ISOLATED FORM..ARABIC LETTER KIRGHIZ YU FINAL FORM
+FBE4..FBE7 ; NFKC_CF; 06D0 # Lo [4] ARABIC LETTER E ISOLATED FORM..ARABIC LETTER E MEDIAL FORM
+FBE8..FBE9 ; NFKC_CF; 0649 # Lo [2] ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM..ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+FBEA..FBEB ; NFKC_CF; 0626 0627 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+FBEC..FBED ; NFKC_CF; 0626 06D5 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+FBEE..FBEF ; NFKC_CF; 0626 0648 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+FBF0..FBF1 ; NFKC_CF; 0626 06C7 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+FBF2..FBF3 ; NFKC_CF; 0626 06C6 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+FBF4..FBF5 ; NFKC_CF; 0626 06C8 # Lo [2] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+FBF6..FBF8 ; NFKC_CF; 0626 06D0 # Lo [3] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM..ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+FBF9..FBFB ; NFKC_CF; 0626 0649 # Lo [3] ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM..ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+FBFC..FBFF ; NFKC_CF; 06CC # Lo [4] ARABIC LETTER FARSI YEH ISOLATED FORM..ARABIC LETTER FARSI YEH MEDIAL FORM
+FC00 ; NFKC_CF; 0626 062C # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+FC01 ; NFKC_CF; 0626 062D # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+FC02 ; NFKC_CF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+FC03 ; NFKC_CF; 0626 0649 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+FC04 ; NFKC_CF; 0626 064A # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+FC05 ; NFKC_CF; 0628 062C # Lo ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+FC06 ; NFKC_CF; 0628 062D # Lo ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+FC07 ; NFKC_CF; 0628 062E # Lo ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+FC08 ; NFKC_CF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+FC09 ; NFKC_CF; 0628 0649 # Lo ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+FC0A ; NFKC_CF; 0628 064A # Lo ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+FC0B ; NFKC_CF; 062A 062C # Lo ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+FC0C ; NFKC_CF; 062A 062D # Lo ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+FC0D ; NFKC_CF; 062A 062E # Lo ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+FC0E ; NFKC_CF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+FC0F ; NFKC_CF; 062A 0649 # Lo ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+FC10 ; NFKC_CF; 062A 064A # Lo ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+FC11 ; NFKC_CF; 062B 062C # Lo ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+FC12 ; NFKC_CF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+FC13 ; NFKC_CF; 062B 0649 # Lo ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+FC14 ; NFKC_CF; 062B 064A # Lo ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+FC15 ; NFKC_CF; 062C 062D # Lo ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+FC16 ; NFKC_CF; 062C 0645 # Lo ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+FC17 ; NFKC_CF; 062D 062C # Lo ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+FC18 ; NFKC_CF; 062D 0645 # Lo ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+FC19 ; NFKC_CF; 062E 062C # Lo ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+FC1A ; NFKC_CF; 062E 062D # Lo ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+FC1B ; NFKC_CF; 062E 0645 # Lo ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+FC1C ; NFKC_CF; 0633 062C # Lo ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+FC1D ; NFKC_CF; 0633 062D # Lo ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+FC1E ; NFKC_CF; 0633 062E # Lo ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+FC1F ; NFKC_CF; 0633 0645 # Lo ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+FC20 ; NFKC_CF; 0635 062D # Lo ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+FC21 ; NFKC_CF; 0635 0645 # Lo ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+FC22 ; NFKC_CF; 0636 062C # Lo ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+FC23 ; NFKC_CF; 0636 062D # Lo ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+FC24 ; NFKC_CF; 0636 062E # Lo ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+FC25 ; NFKC_CF; 0636 0645 # Lo ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+FC26 ; NFKC_CF; 0637 062D # Lo ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+FC27 ; NFKC_CF; 0637 0645 # Lo ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+FC28 ; NFKC_CF; 0638 0645 # Lo ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+FC29 ; NFKC_CF; 0639 062C # Lo ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+FC2A ; NFKC_CF; 0639 0645 # Lo ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+FC2B ; NFKC_CF; 063A 062C # Lo ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+FC2C ; NFKC_CF; 063A 0645 # Lo ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+FC2D ; NFKC_CF; 0641 062C # Lo ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+FC2E ; NFKC_CF; 0641 062D # Lo ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+FC2F ; NFKC_CF; 0641 062E # Lo ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+FC30 ; NFKC_CF; 0641 0645 # Lo ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+FC31 ; NFKC_CF; 0641 0649 # Lo ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+FC32 ; NFKC_CF; 0641 064A # Lo ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+FC33 ; NFKC_CF; 0642 062D # Lo ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+FC34 ; NFKC_CF; 0642 0645 # Lo ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+FC35 ; NFKC_CF; 0642 0649 # Lo ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+FC36 ; NFKC_CF; 0642 064A # Lo ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+FC37 ; NFKC_CF; 0643 0627 # Lo ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+FC38 ; NFKC_CF; 0643 062C # Lo ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+FC39 ; NFKC_CF; 0643 062D # Lo ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+FC3A ; NFKC_CF; 0643 062E # Lo ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+FC3B ; NFKC_CF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+FC3C ; NFKC_CF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+FC3D ; NFKC_CF; 0643 0649 # Lo ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+FC3E ; NFKC_CF; 0643 064A # Lo ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+FC3F ; NFKC_CF; 0644 062C # Lo ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+FC40 ; NFKC_CF; 0644 062D # Lo ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+FC41 ; NFKC_CF; 0644 062E # Lo ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+FC42 ; NFKC_CF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+FC43 ; NFKC_CF; 0644 0649 # Lo ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+FC44 ; NFKC_CF; 0644 064A # Lo ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+FC45 ; NFKC_CF; 0645 062C # Lo ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+FC46 ; NFKC_CF; 0645 062D # Lo ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+FC47 ; NFKC_CF; 0645 062E # Lo ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+FC48 ; NFKC_CF; 0645 0645 # Lo ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+FC49 ; NFKC_CF; 0645 0649 # Lo ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+FC4A ; NFKC_CF; 0645 064A # Lo ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+FC4B ; NFKC_CF; 0646 062C # Lo ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+FC4C ; NFKC_CF; 0646 062D # Lo ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+FC4D ; NFKC_CF; 0646 062E # Lo ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+FC4E ; NFKC_CF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+FC4F ; NFKC_CF; 0646 0649 # Lo ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+FC50 ; NFKC_CF; 0646 064A # Lo ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+FC51 ; NFKC_CF; 0647 062C # Lo ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+FC52 ; NFKC_CF; 0647 0645 # Lo ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+FC53 ; NFKC_CF; 0647 0649 # Lo ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+FC54 ; NFKC_CF; 0647 064A # Lo ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+FC55 ; NFKC_CF; 064A 062C # Lo ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+FC56 ; NFKC_CF; 064A 062D # Lo ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+FC57 ; NFKC_CF; 064A 062E # Lo ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+FC58 ; NFKC_CF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+FC59 ; NFKC_CF; 064A 0649 # Lo ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+FC5A ; NFKC_CF; 064A 064A # Lo ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+FC5B ; NFKC_CF; 0630 0670 # Lo ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5C ; NFKC_CF; 0631 0670 # Lo ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5D ; NFKC_CF; 0649 0670 # Lo ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC5E ; NFKC_CF; 0020 064C 0651 # Lo ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+FC5F ; NFKC_CF; 0020 064D 0651 # Lo ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+FC60 ; NFKC_CF; 0020 064E 0651 # Lo ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+FC61 ; NFKC_CF; 0020 064F 0651 # Lo ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+FC62 ; NFKC_CF; 0020 0650 0651 # Lo ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+FC63 ; NFKC_CF; 0020 0651 0670 # Lo ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+FC64 ; NFKC_CF; 0626 0631 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+FC65 ; NFKC_CF; 0626 0632 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+FC66 ; NFKC_CF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+FC67 ; NFKC_CF; 0626 0646 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+FC68 ; NFKC_CF; 0626 0649 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+FC69 ; NFKC_CF; 0626 064A # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+FC6A ; NFKC_CF; 0628 0631 # Lo ARABIC LIGATURE BEH WITH REH FINAL FORM
+FC6B ; NFKC_CF; 0628 0632 # Lo ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+FC6C ; NFKC_CF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+FC6D ; NFKC_CF; 0628 0646 # Lo ARABIC LIGATURE BEH WITH NOON FINAL FORM
+FC6E ; NFKC_CF; 0628 0649 # Lo ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+FC6F ; NFKC_CF; 0628 064A # Lo ARABIC LIGATURE BEH WITH YEH FINAL FORM
+FC70 ; NFKC_CF; 062A 0631 # Lo ARABIC LIGATURE TEH WITH REH FINAL FORM
+FC71 ; NFKC_CF; 062A 0632 # Lo ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+FC72 ; NFKC_CF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+FC73 ; NFKC_CF; 062A 0646 # Lo ARABIC LIGATURE TEH WITH NOON FINAL FORM
+FC74 ; NFKC_CF; 062A 0649 # Lo ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+FC75 ; NFKC_CF; 062A 064A # Lo ARABIC LIGATURE TEH WITH YEH FINAL FORM
+FC76 ; NFKC_CF; 062B 0631 # Lo ARABIC LIGATURE THEH WITH REH FINAL FORM
+FC77 ; NFKC_CF; 062B 0632 # Lo ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+FC78 ; NFKC_CF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+FC79 ; NFKC_CF; 062B 0646 # Lo ARABIC LIGATURE THEH WITH NOON FINAL FORM
+FC7A ; NFKC_CF; 062B 0649 # Lo ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+FC7B ; NFKC_CF; 062B 064A # Lo ARABIC LIGATURE THEH WITH YEH FINAL FORM
+FC7C ; NFKC_CF; 0641 0649 # Lo ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+FC7D ; NFKC_CF; 0641 064A # Lo ARABIC LIGATURE FEH WITH YEH FINAL FORM
+FC7E ; NFKC_CF; 0642 0649 # Lo ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+FC7F ; NFKC_CF; 0642 064A # Lo ARABIC LIGATURE QAF WITH YEH FINAL FORM
+FC80 ; NFKC_CF; 0643 0627 # Lo ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+FC81 ; NFKC_CF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM FINAL FORM
+FC82 ; NFKC_CF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+FC83 ; NFKC_CF; 0643 0649 # Lo ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+FC84 ; NFKC_CF; 0643 064A # Lo ARABIC LIGATURE KAF WITH YEH FINAL FORM
+FC85 ; NFKC_CF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+FC86 ; NFKC_CF; 0644 0649 # Lo ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+FC87 ; NFKC_CF; 0644 064A # Lo ARABIC LIGATURE LAM WITH YEH FINAL FORM
+FC88 ; NFKC_CF; 0645 0627 # Lo ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+FC89 ; NFKC_CF; 0645 0645 # Lo ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+FC8A ; NFKC_CF; 0646 0631 # Lo ARABIC LIGATURE NOON WITH REH FINAL FORM
+FC8B ; NFKC_CF; 0646 0632 # Lo ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+FC8C ; NFKC_CF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+FC8D ; NFKC_CF; 0646 0646 # Lo ARABIC LIGATURE NOON WITH NOON FINAL FORM
+FC8E ; NFKC_CF; 0646 0649 # Lo ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+FC8F ; NFKC_CF; 0646 064A # Lo ARABIC LIGATURE NOON WITH YEH FINAL FORM
+FC90 ; NFKC_CF; 0649 0670 # Lo ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+FC91 ; NFKC_CF; 064A 0631 # Lo ARABIC LIGATURE YEH WITH REH FINAL FORM
+FC92 ; NFKC_CF; 064A 0632 # Lo ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+FC93 ; NFKC_CF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+FC94 ; NFKC_CF; 064A 0646 # Lo ARABIC LIGATURE YEH WITH NOON FINAL FORM
+FC95 ; NFKC_CF; 064A 0649 # Lo ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+FC96 ; NFKC_CF; 064A 064A # Lo ARABIC LIGATURE YEH WITH YEH FINAL FORM
+FC97 ; NFKC_CF; 0626 062C # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+FC98 ; NFKC_CF; 0626 062D # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+FC99 ; NFKC_CF; 0626 062E # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+FC9A ; NFKC_CF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+FC9B ; NFKC_CF; 0626 0647 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+FC9C ; NFKC_CF; 0628 062C # Lo ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+FC9D ; NFKC_CF; 0628 062D # Lo ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+FC9E ; NFKC_CF; 0628 062E # Lo ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+FC9F ; NFKC_CF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+FCA0 ; NFKC_CF; 0628 0647 # Lo ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+FCA1 ; NFKC_CF; 062A 062C # Lo ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+FCA2 ; NFKC_CF; 062A 062D # Lo ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+FCA3 ; NFKC_CF; 062A 062E # Lo ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+FCA4 ; NFKC_CF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+FCA5 ; NFKC_CF; 062A 0647 # Lo ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+FCA6 ; NFKC_CF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+FCA7 ; NFKC_CF; 062C 062D # Lo ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+FCA8 ; NFKC_CF; 062C 0645 # Lo ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+FCA9 ; NFKC_CF; 062D 062C # Lo ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+FCAA ; NFKC_CF; 062D 0645 # Lo ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+FCAB ; NFKC_CF; 062E 062C # Lo ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+FCAC ; NFKC_CF; 062E 0645 # Lo ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+FCAD ; NFKC_CF; 0633 062C # Lo ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+FCAE ; NFKC_CF; 0633 062D # Lo ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+FCAF ; NFKC_CF; 0633 062E # Lo ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+FCB0 ; NFKC_CF; 0633 0645 # Lo ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+FCB1 ; NFKC_CF; 0635 062D # Lo ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+FCB2 ; NFKC_CF; 0635 062E # Lo ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+FCB3 ; NFKC_CF; 0635 0645 # Lo ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+FCB4 ; NFKC_CF; 0636 062C # Lo ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+FCB5 ; NFKC_CF; 0636 062D # Lo ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+FCB6 ; NFKC_CF; 0636 062E # Lo ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+FCB7 ; NFKC_CF; 0636 0645 # Lo ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+FCB8 ; NFKC_CF; 0637 062D # Lo ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+FCB9 ; NFKC_CF; 0638 0645 # Lo ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+FCBA ; NFKC_CF; 0639 062C # Lo ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+FCBB ; NFKC_CF; 0639 0645 # Lo ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+FCBC ; NFKC_CF; 063A 062C # Lo ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+FCBD ; NFKC_CF; 063A 0645 # Lo ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+FCBE ; NFKC_CF; 0641 062C # Lo ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+FCBF ; NFKC_CF; 0641 062D # Lo ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+FCC0 ; NFKC_CF; 0641 062E # Lo ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+FCC1 ; NFKC_CF; 0641 0645 # Lo ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+FCC2 ; NFKC_CF; 0642 062D # Lo ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+FCC3 ; NFKC_CF; 0642 0645 # Lo ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+FCC4 ; NFKC_CF; 0643 062C # Lo ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+FCC5 ; NFKC_CF; 0643 062D # Lo ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+FCC6 ; NFKC_CF; 0643 062E # Lo ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+FCC7 ; NFKC_CF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+FCC8 ; NFKC_CF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+FCC9 ; NFKC_CF; 0644 062C # Lo ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+FCCA ; NFKC_CF; 0644 062D # Lo ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+FCCB ; NFKC_CF; 0644 062E # Lo ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+FCCC ; NFKC_CF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+FCCD ; NFKC_CF; 0644 0647 # Lo ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+FCCE ; NFKC_CF; 0645 062C # Lo ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+FCCF ; NFKC_CF; 0645 062D # Lo ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+FCD0 ; NFKC_CF; 0645 062E # Lo ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+FCD1 ; NFKC_CF; 0645 0645 # Lo ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+FCD2 ; NFKC_CF; 0646 062C # Lo ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+FCD3 ; NFKC_CF; 0646 062D # Lo ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+FCD4 ; NFKC_CF; 0646 062E # Lo ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+FCD5 ; NFKC_CF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+FCD6 ; NFKC_CF; 0646 0647 # Lo ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+FCD7 ; NFKC_CF; 0647 062C # Lo ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+FCD8 ; NFKC_CF; 0647 0645 # Lo ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+FCD9 ; NFKC_CF; 0647 0670 # Lo ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+FCDA ; NFKC_CF; 064A 062C # Lo ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+FCDB ; NFKC_CF; 064A 062D # Lo ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+FCDC ; NFKC_CF; 064A 062E # Lo ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+FCDD ; NFKC_CF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+FCDE ; NFKC_CF; 064A 0647 # Lo ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+FCDF ; NFKC_CF; 0626 0645 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+FCE0 ; NFKC_CF; 0626 0647 # Lo ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+FCE1 ; NFKC_CF; 0628 0645 # Lo ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+FCE2 ; NFKC_CF; 0628 0647 # Lo ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+FCE3 ; NFKC_CF; 062A 0645 # Lo ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+FCE4 ; NFKC_CF; 062A 0647 # Lo ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+FCE5 ; NFKC_CF; 062B 0645 # Lo ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+FCE6 ; NFKC_CF; 062B 0647 # Lo ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+FCE7 ; NFKC_CF; 0633 0645 # Lo ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+FCE8 ; NFKC_CF; 0633 0647 # Lo ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+FCE9 ; NFKC_CF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+FCEA ; NFKC_CF; 0634 0647 # Lo ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+FCEB ; NFKC_CF; 0643 0644 # Lo ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+FCEC ; NFKC_CF; 0643 0645 # Lo ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+FCED ; NFKC_CF; 0644 0645 # Lo ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+FCEE ; NFKC_CF; 0646 0645 # Lo ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+FCEF ; NFKC_CF; 0646 0647 # Lo ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+FCF0 ; NFKC_CF; 064A 0645 # Lo ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+FCF1 ; NFKC_CF; 064A 0647 # Lo ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+FCF2 ; NFKC_CF; 0640 064E 0651 # Lo ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+FCF3 ; NFKC_CF; 0640 064F 0651 # Lo ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+FCF4 ; NFKC_CF; 0640 0650 0651 # Lo ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+FCF5 ; NFKC_CF; 0637 0649 # Lo ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+FCF6 ; NFKC_CF; 0637 064A # Lo ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+FCF7 ; NFKC_CF; 0639 0649 # Lo ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+FCF8 ; NFKC_CF; 0639 064A # Lo ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+FCF9 ; NFKC_CF; 063A 0649 # Lo ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+FCFA ; NFKC_CF; 063A 064A # Lo ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+FCFB ; NFKC_CF; 0633 0649 # Lo ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFC ; NFKC_CF; 0633 064A # Lo ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+FCFD ; NFKC_CF; 0634 0649 # Lo ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+FCFE ; NFKC_CF; 0634 064A # Lo ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+FCFF ; NFKC_CF; 062D 0649 # Lo ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+FD00 ; NFKC_CF; 062D 064A # Lo ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+FD01 ; NFKC_CF; 062C 0649 # Lo ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+FD02 ; NFKC_CF; 062C 064A # Lo ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+FD03 ; NFKC_CF; 062E 0649 # Lo ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+FD04 ; NFKC_CF; 062E 064A # Lo ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+FD05 ; NFKC_CF; 0635 0649 # Lo ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+FD06 ; NFKC_CF; 0635 064A # Lo ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+FD07 ; NFKC_CF; 0636 0649 # Lo ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+FD08 ; NFKC_CF; 0636 064A # Lo ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+FD09 ; NFKC_CF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+FD0A ; NFKC_CF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+FD0B ; NFKC_CF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+FD0C ; NFKC_CF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+FD0D ; NFKC_CF; 0634 0631 # Lo ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+FD0E ; NFKC_CF; 0633 0631 # Lo ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+FD0F ; NFKC_CF; 0635 0631 # Lo ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+FD10 ; NFKC_CF; 0636 0631 # Lo ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+FD11 ; NFKC_CF; 0637 0649 # Lo ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+FD12 ; NFKC_CF; 0637 064A # Lo ARABIC LIGATURE TAH WITH YEH FINAL FORM
+FD13 ; NFKC_CF; 0639 0649 # Lo ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+FD14 ; NFKC_CF; 0639 064A # Lo ARABIC LIGATURE AIN WITH YEH FINAL FORM
+FD15 ; NFKC_CF; 063A 0649 # Lo ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+FD16 ; NFKC_CF; 063A 064A # Lo ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+FD17 ; NFKC_CF; 0633 0649 # Lo ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+FD18 ; NFKC_CF; 0633 064A # Lo ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+FD19 ; NFKC_CF; 0634 0649 # Lo ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+FD1A ; NFKC_CF; 0634 064A # Lo ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+FD1B ; NFKC_CF; 062D 0649 # Lo ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+FD1C ; NFKC_CF; 062D 064A # Lo ARABIC LIGATURE HAH WITH YEH FINAL FORM
+FD1D ; NFKC_CF; 062C 0649 # Lo ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+FD1E ; NFKC_CF; 062C 064A # Lo ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+FD1F ; NFKC_CF; 062E 0649 # Lo ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+FD20 ; NFKC_CF; 062E 064A # Lo ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+FD21 ; NFKC_CF; 0635 0649 # Lo ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+FD22 ; NFKC_CF; 0635 064A # Lo ARABIC LIGATURE SAD WITH YEH FINAL FORM
+FD23 ; NFKC_CF; 0636 0649 # Lo ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+FD24 ; NFKC_CF; 0636 064A # Lo ARABIC LIGATURE DAD WITH YEH FINAL FORM
+FD25 ; NFKC_CF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+FD26 ; NFKC_CF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+FD27 ; NFKC_CF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+FD28 ; NFKC_CF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+FD29 ; NFKC_CF; 0634 0631 # Lo ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+FD2A ; NFKC_CF; 0633 0631 # Lo ARABIC LIGATURE SEEN WITH REH FINAL FORM
+FD2B ; NFKC_CF; 0635 0631 # Lo ARABIC LIGATURE SAD WITH REH FINAL FORM
+FD2C ; NFKC_CF; 0636 0631 # Lo ARABIC LIGATURE DAD WITH REH FINAL FORM
+FD2D ; NFKC_CF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+FD2E ; NFKC_CF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+FD2F ; NFKC_CF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+FD30 ; NFKC_CF; 0634 0645 # Lo ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+FD31 ; NFKC_CF; 0633 0647 # Lo ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+FD32 ; NFKC_CF; 0634 0647 # Lo ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+FD33 ; NFKC_CF; 0637 0645 # Lo ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+FD34 ; NFKC_CF; 0633 062C # Lo ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+FD35 ; NFKC_CF; 0633 062D # Lo ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+FD36 ; NFKC_CF; 0633 062E # Lo ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+FD37 ; NFKC_CF; 0634 062C # Lo ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+FD38 ; NFKC_CF; 0634 062D # Lo ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+FD39 ; NFKC_CF; 0634 062E # Lo ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+FD3A ; NFKC_CF; 0637 0645 # Lo ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+FD3B ; NFKC_CF; 0638 0645 # Lo ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+FD3C..FD3D ; NFKC_CF; 0627 064B # Lo [2] ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50 ; NFKC_CF; 062A 062C 0645 # Lo ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+FD51..FD52 ; NFKC_CF; 062A 062D 062C # Lo [2] ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM..ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+FD53 ; NFKC_CF; 062A 062D 0645 # Lo ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+FD54 ; NFKC_CF; 062A 062E 0645 # Lo ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+FD55 ; NFKC_CF; 062A 0645 062C # Lo ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+FD56 ; NFKC_CF; 062A 0645 062D # Lo ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+FD57 ; NFKC_CF; 062A 0645 062E # Lo ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+FD58..FD59 ; NFKC_CF; 062C 0645 062D # Lo [2] ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+FD5A ; NFKC_CF; 062D 0645 064A # Lo ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+FD5B ; NFKC_CF; 062D 0645 0649 # Lo ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD5C ; NFKC_CF; 0633 062D 062C # Lo ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+FD5D ; NFKC_CF; 0633 062C 062D # Lo ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+FD5E ; NFKC_CF; 0633 062C 0649 # Lo ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD5F..FD60 ; NFKC_CF; 0633 0645 062D # Lo [2] ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+FD61 ; NFKC_CF; 0633 0645 062C # Lo ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+FD62..FD63 ; NFKC_CF; 0633 0645 0645 # Lo [2] ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+FD64..FD65 ; NFKC_CF; 0635 062D 062D # Lo [2] ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM..ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+FD66 ; NFKC_CF; 0635 0645 0645 # Lo ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+FD67..FD68 ; NFKC_CF; 0634 062D 0645 # Lo [2] ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+FD69 ; NFKC_CF; 0634 062C 064A # Lo ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+FD6A..FD6B ; NFKC_CF; 0634 0645 062E # Lo [2] ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+FD6C..FD6D ; NFKC_CF; 0634 0645 0645 # Lo [2] ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+FD6E ; NFKC_CF; 0636 062D 0649 # Lo ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD6F..FD70 ; NFKC_CF; 0636 062E 0645 # Lo [2] ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+FD71..FD72 ; NFKC_CF; 0637 0645 062D # Lo [2] ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+FD73 ; NFKC_CF; 0637 0645 0645 # Lo ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+FD74 ; NFKC_CF; 0637 0645 064A # Lo ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+FD75 ; NFKC_CF; 0639 062C 0645 # Lo ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+FD76..FD77 ; NFKC_CF; 0639 0645 0645 # Lo [2] ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+FD78 ; NFKC_CF; 0639 0645 0649 # Lo ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD79 ; NFKC_CF; 063A 0645 0645 # Lo ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+FD7A ; NFKC_CF; 063A 0645 064A # Lo ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+FD7B ; NFKC_CF; 063A 0645 0649 # Lo ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD7C..FD7D ; NFKC_CF; 0641 062E 0645 # Lo [2] ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+FD7E ; NFKC_CF; 0642 0645 062D # Lo ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+FD7F ; NFKC_CF; 0642 0645 0645 # Lo ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+FD80 ; NFKC_CF; 0644 062D 0645 # Lo ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+FD81 ; NFKC_CF; 0644 062D 064A # Lo ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+FD82 ; NFKC_CF; 0644 062D 0649 # Lo ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD83..FD84 ; NFKC_CF; 0644 062C 062C # Lo [2] ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM..ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+FD85..FD86 ; NFKC_CF; 0644 062E 0645 # Lo [2] ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM..ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+FD87..FD88 ; NFKC_CF; 0644 0645 062D # Lo [2] ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM..ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+FD89 ; NFKC_CF; 0645 062D 062C # Lo ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+FD8A ; NFKC_CF; 0645 062D 0645 # Lo ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+FD8B ; NFKC_CF; 0645 062D 064A # Lo ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+FD8C ; NFKC_CF; 0645 062C 062D # Lo ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+FD8D ; NFKC_CF; 0645 062C 0645 # Lo ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+FD8E ; NFKC_CF; 0645 062E 062C # Lo ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+FD8F ; NFKC_CF; 0645 062E 0645 # Lo ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92 ; NFKC_CF; 0645 062C 062E # Lo ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+FD93 ; NFKC_CF; 0647 0645 062C # Lo ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+FD94 ; NFKC_CF; 0647 0645 0645 # Lo ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+FD95 ; NFKC_CF; 0646 062D 0645 # Lo ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+FD96 ; NFKC_CF; 0646 062D 0649 # Lo ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+FD97..FD98 ; NFKC_CF; 0646 062C 0645 # Lo [2] ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+FD99 ; NFKC_CF; 0646 062C 0649 # Lo ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FD9A ; NFKC_CF; 0646 0645 064A # Lo ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+FD9B ; NFKC_CF; 0646 0645 0649 # Lo ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FD9C..FD9D ; NFKC_CF; 064A 0645 0645 # Lo [2] ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM..ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+FD9E ; NFKC_CF; 0628 062E 064A # Lo ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+FD9F ; NFKC_CF; 062A 062C 064A # Lo ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+FDA0 ; NFKC_CF; 062A 062C 0649 # Lo ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+FDA1 ; NFKC_CF; 062A 062E 064A # Lo ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+FDA2 ; NFKC_CF; 062A 062E 0649 # Lo ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA3 ; NFKC_CF; 062A 0645 064A # Lo ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+FDA4 ; NFKC_CF; 062A 0645 0649 # Lo ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA5 ; NFKC_CF; 062C 0645 064A # Lo ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+FDA6 ; NFKC_CF; 062C 062D 0649 # Lo ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+FDA7 ; NFKC_CF; 062C 0645 0649 # Lo ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+FDA8 ; NFKC_CF; 0633 062E 0649 # Lo ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+FDA9 ; NFKC_CF; 0635 062D 064A # Lo ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+FDAA ; NFKC_CF; 0634 062D 064A # Lo ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+FDAB ; NFKC_CF; 0636 062D 064A # Lo ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+FDAC ; NFKC_CF; 0644 062C 064A # Lo ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+FDAD ; NFKC_CF; 0644 0645 064A # Lo ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+FDAE ; NFKC_CF; 064A 062D 064A # Lo ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+FDAF ; NFKC_CF; 064A 062C 064A # Lo ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+FDB0 ; NFKC_CF; 064A 0645 064A # Lo ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+FDB1 ; NFKC_CF; 0645 0645 064A # Lo ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+FDB2 ; NFKC_CF; 0642 0645 064A # Lo ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+FDB3 ; NFKC_CF; 0646 062D 064A # Lo ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+FDB4 ; NFKC_CF; 0642 0645 062D # Lo ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+FDB5 ; NFKC_CF; 0644 062D 0645 # Lo ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+FDB6 ; NFKC_CF; 0639 0645 064A # Lo ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+FDB7 ; NFKC_CF; 0643 0645 064A # Lo ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+FDB8 ; NFKC_CF; 0646 062C 062D # Lo ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+FDB9 ; NFKC_CF; 0645 062E 064A # Lo ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+FDBA ; NFKC_CF; 0644 062C 0645 # Lo ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+FDBB ; NFKC_CF; 0643 0645 0645 # Lo ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+FDBC ; NFKC_CF; 0644 062C 0645 # Lo ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+FDBD ; NFKC_CF; 0646 062C 062D # Lo ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+FDBE ; NFKC_CF; 062C 062D 064A # Lo ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+FDBF ; NFKC_CF; 062D 062C 064A # Lo ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+FDC0 ; NFKC_CF; 0645 062C 064A # Lo ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+FDC1 ; NFKC_CF; 0641 0645 064A # Lo ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+FDC2 ; NFKC_CF; 0628 062D 064A # Lo ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+FDC3 ; NFKC_CF; 0643 0645 0645 # Lo ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+FDC4 ; NFKC_CF; 0639 062C 0645 # Lo ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+FDC5 ; NFKC_CF; 0635 0645 0645 # Lo ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+FDC6 ; NFKC_CF; 0633 062E 064A # Lo ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+FDC7 ; NFKC_CF; 0646 062C 064A # Lo ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0 ; NFKC_CF; 0635 0644 06D2 # Lo ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF1 ; NFKC_CF; 0642 0644 06D2 # Lo ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+FDF2 ; NFKC_CF; 0627 0644 0644 0647 #Lo ARABIC LIGATURE ALLAH ISOLATED FORM
+FDF3 ; NFKC_CF; 0627 0643 0628 0631 #Lo ARABIC LIGATURE AKBAR ISOLATED FORM
+FDF4 ; NFKC_CF; 0645 062D 0645 062F #Lo ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+FDF5 ; NFKC_CF; 0635 0644 0639 0645 #Lo ARABIC LIGATURE SALAM ISOLATED FORM
+FDF6 ; NFKC_CF; 0631 0633 0648 0644 #Lo ARABIC LIGATURE RASOUL ISOLATED FORM
+FDF7 ; NFKC_CF; 0639 0644 064A 0647 #Lo ARABIC LIGATURE ALAYHE ISOLATED FORM
+FDF8 ; NFKC_CF; 0648 0633 0644 0645 #Lo ARABIC LIGATURE WASALLAM ISOLATED FORM
+FDF9 ; NFKC_CF; 0635 0644 0649 # Lo ARABIC LIGATURE SALLA ISOLATED FORM
+FDFA ; NFKC_CF; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645 #Lo ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+FDFB ; NFKC_CF; 062C 0644 0020 062C 0644 0627 0644 0647 #Lo ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; NFKC_CF; 0631 06CC 0627 0644 #Sc RIAL SIGN
+FE00..FE0F ; NFKC_CF; # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE10 ; NFKC_CF; 002C # Po PRESENTATION FORM FOR VERTICAL COMMA
+FE11 ; NFKC_CF; 3001 # Po PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+FE12 ; NFKC_CF; 3002 # Po PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+FE13 ; NFKC_CF; 003A # Po PRESENTATION FORM FOR VERTICAL COLON
+FE14 ; NFKC_CF; 003B # Po PRESENTATION FORM FOR VERTICAL SEMICOLON
+FE15 ; NFKC_CF; 0021 # Po PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+FE16 ; NFKC_CF; 003F # Po PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; NFKC_CF; 3016 # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; NFKC_CF; 3017 # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; NFKC_CF; 002E 002E 002E # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; NFKC_CF; 002E 002E # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31 ; NFKC_CF; 2014 # Pd PRESENTATION FORM FOR VERTICAL EM DASH
+FE32 ; NFKC_CF; 2013 # Pd PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; NFKC_CF; 005F # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; NFKC_CF; 0028 # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; NFKC_CF; 0029 # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; NFKC_CF; 007B # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; NFKC_CF; 007D # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; NFKC_CF; 3014 # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; NFKC_CF; 3015 # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; NFKC_CF; 3010 # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; NFKC_CF; 3011 # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; NFKC_CF; 300A # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; NFKC_CF; 300B # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; NFKC_CF; 3008 # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; NFKC_CF; 3009 # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; NFKC_CF; 300C # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; NFKC_CF; 300D # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; NFKC_CF; 300E # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; NFKC_CF; 300F # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE47 ; NFKC_CF; 005B # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; NFKC_CF; 005D # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; NFKC_CF; 0020 0305 # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; NFKC_CF; 005F # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50 ; NFKC_CF; 002C # Po SMALL COMMA
+FE51 ; NFKC_CF; 3001 # Po SMALL IDEOGRAPHIC COMMA
+FE52 ; NFKC_CF; 002E # Po SMALL FULL STOP
+FE54 ; NFKC_CF; 003B # Po SMALL SEMICOLON
+FE55 ; NFKC_CF; 003A # Po SMALL COLON
+FE56 ; NFKC_CF; 003F # Po SMALL QUESTION MARK
+FE57 ; NFKC_CF; 0021 # Po SMALL EXCLAMATION MARK
+FE58 ; NFKC_CF; 2014 # Pd SMALL EM DASH
+FE59 ; NFKC_CF; 0028 # Ps SMALL LEFT PARENTHESIS
+FE5A ; NFKC_CF; 0029 # Pe SMALL RIGHT PARENTHESIS
+FE5B ; NFKC_CF; 007B # Ps SMALL LEFT CURLY BRACKET
+FE5C ; NFKC_CF; 007D # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; NFKC_CF; 3014 # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; NFKC_CF; 3015 # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F ; NFKC_CF; 0023 # Po SMALL NUMBER SIGN
+FE60 ; NFKC_CF; 0026 # Po SMALL AMPERSAND
+FE61 ; NFKC_CF; 002A # Po SMALL ASTERISK
+FE62 ; NFKC_CF; 002B # Sm SMALL PLUS SIGN
+FE63 ; NFKC_CF; 002D # Pd SMALL HYPHEN-MINUS
+FE64 ; NFKC_CF; 003C # Sm SMALL LESS-THAN SIGN
+FE65 ; NFKC_CF; 003E # Sm SMALL GREATER-THAN SIGN
+FE66 ; NFKC_CF; 003D # Sm SMALL EQUALS SIGN
+FE68 ; NFKC_CF; 005C # Po SMALL REVERSE SOLIDUS
+FE69 ; NFKC_CF; 0024 # Sc SMALL DOLLAR SIGN
+FE6A ; NFKC_CF; 0025 # Po SMALL PERCENT SIGN
+FE6B ; NFKC_CF; 0040 # Po SMALL COMMERCIAL AT
+FE70 ; NFKC_CF; 0020 064B # Lo ARABIC FATHATAN ISOLATED FORM
+FE71 ; NFKC_CF; 0640 064B # Lo ARABIC TATWEEL WITH FATHATAN ABOVE
+FE72 ; NFKC_CF; 0020 064C # Lo ARABIC DAMMATAN ISOLATED FORM
+FE74 ; NFKC_CF; 0020 064D # Lo ARABIC KASRATAN ISOLATED FORM
+FE76 ; NFKC_CF; 0020 064E # Lo ARABIC FATHA ISOLATED FORM
+FE77 ; NFKC_CF; 0640 064E # Lo ARABIC FATHA MEDIAL FORM
+FE78 ; NFKC_CF; 0020 064F # Lo ARABIC DAMMA ISOLATED FORM
+FE79 ; NFKC_CF; 0640 064F # Lo ARABIC DAMMA MEDIAL FORM
+FE7A ; NFKC_CF; 0020 0650 # Lo ARABIC KASRA ISOLATED FORM
+FE7B ; NFKC_CF; 0640 0650 # Lo ARABIC KASRA MEDIAL FORM
+FE7C ; NFKC_CF; 0020 0651 # Lo ARABIC SHADDA ISOLATED FORM
+FE7D ; NFKC_CF; 0640 0651 # Lo ARABIC SHADDA MEDIAL FORM
+FE7E ; NFKC_CF; 0020 0652 # Lo ARABIC SUKUN ISOLATED FORM
+FE7F ; NFKC_CF; 0640 0652 # Lo ARABIC SUKUN MEDIAL FORM
+FE80 ; NFKC_CF; 0621 # Lo ARABIC LETTER HAMZA ISOLATED FORM
+FE81..FE82 ; NFKC_CF; 0622 # Lo [2] ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+FE83..FE84 ; NFKC_CF; 0623 # Lo [2] ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+FE85..FE86 ; NFKC_CF; 0624 # Lo [2] ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+FE87..FE88 ; NFKC_CF; 0625 # Lo [2] ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM..ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+FE89..FE8C ; NFKC_CF; 0626 # Lo [4] ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+FE8D..FE8E ; NFKC_CF; 0627 # Lo [2] ARABIC LETTER ALEF ISOLATED FORM..ARABIC LETTER ALEF FINAL FORM
+FE8F..FE92 ; NFKC_CF; 0628 # Lo [4] ARABIC LETTER BEH ISOLATED FORM..ARABIC LETTER BEH MEDIAL FORM
+FE93..FE94 ; NFKC_CF; 0629 # Lo [2] ARABIC LETTER TEH MARBUTA ISOLATED FORM..ARABIC LETTER TEH MARBUTA FINAL FORM
+FE95..FE98 ; NFKC_CF; 062A # Lo [4] ARABIC LETTER TEH ISOLATED FORM..ARABIC LETTER TEH MEDIAL FORM
+FE99..FE9C ; NFKC_CF; 062B # Lo [4] ARABIC LETTER THEH ISOLATED FORM..ARABIC LETTER THEH MEDIAL FORM
+FE9D..FEA0 ; NFKC_CF; 062C # Lo [4] ARABIC LETTER JEEM ISOLATED FORM..ARABIC LETTER JEEM MEDIAL FORM
+FEA1..FEA4 ; NFKC_CF; 062D # Lo [4] ARABIC LETTER HAH ISOLATED FORM..ARABIC LETTER HAH MEDIAL FORM
+FEA5..FEA8 ; NFKC_CF; 062E # Lo [4] ARABIC LETTER KHAH ISOLATED FORM..ARABIC LETTER KHAH MEDIAL FORM
+FEA9..FEAA ; NFKC_CF; 062F # Lo [2] ARABIC LETTER DAL ISOLATED FORM..ARABIC LETTER DAL FINAL FORM
+FEAB..FEAC ; NFKC_CF; 0630 # Lo [2] ARABIC LETTER THAL ISOLATED FORM..ARABIC LETTER THAL FINAL FORM
+FEAD..FEAE ; NFKC_CF; 0631 # Lo [2] ARABIC LETTER REH ISOLATED FORM..ARABIC LETTER REH FINAL FORM
+FEAF..FEB0 ; NFKC_CF; 0632 # Lo [2] ARABIC LETTER ZAIN ISOLATED FORM..ARABIC LETTER ZAIN FINAL FORM
+FEB1..FEB4 ; NFKC_CF; 0633 # Lo [4] ARABIC LETTER SEEN ISOLATED FORM..ARABIC LETTER SEEN MEDIAL FORM
+FEB5..FEB8 ; NFKC_CF; 0634 # Lo [4] ARABIC LETTER SHEEN ISOLATED FORM..ARABIC LETTER SHEEN MEDIAL FORM
+FEB9..FEBC ; NFKC_CF; 0635 # Lo [4] ARABIC LETTER SAD ISOLATED FORM..ARABIC LETTER SAD MEDIAL FORM
+FEBD..FEC0 ; NFKC_CF; 0636 # Lo [4] ARABIC LETTER DAD ISOLATED FORM..ARABIC LETTER DAD MEDIAL FORM
+FEC1..FEC4 ; NFKC_CF; 0637 # Lo [4] ARABIC LETTER TAH ISOLATED FORM..ARABIC LETTER TAH MEDIAL FORM
+FEC5..FEC8 ; NFKC_CF; 0638 # Lo [4] ARABIC LETTER ZAH ISOLATED FORM..ARABIC LETTER ZAH MEDIAL FORM
+FEC9..FECC ; NFKC_CF; 0639 # Lo [4] ARABIC LETTER AIN ISOLATED FORM..ARABIC LETTER AIN MEDIAL FORM
+FECD..FED0 ; NFKC_CF; 063A # Lo [4] ARABIC LETTER GHAIN ISOLATED FORM..ARABIC LETTER GHAIN MEDIAL FORM
+FED1..FED4 ; NFKC_CF; 0641 # Lo [4] ARABIC LETTER FEH ISOLATED FORM..ARABIC LETTER FEH MEDIAL FORM
+FED5..FED8 ; NFKC_CF; 0642 # Lo [4] ARABIC LETTER QAF ISOLATED FORM..ARABIC LETTER QAF MEDIAL FORM
+FED9..FEDC ; NFKC_CF; 0643 # Lo [4] ARABIC LETTER KAF ISOLATED FORM..ARABIC LETTER KAF MEDIAL FORM
+FEDD..FEE0 ; NFKC_CF; 0644 # Lo [4] ARABIC LETTER LAM ISOLATED FORM..ARABIC LETTER LAM MEDIAL FORM
+FEE1..FEE4 ; NFKC_CF; 0645 # Lo [4] ARABIC LETTER MEEM ISOLATED FORM..ARABIC LETTER MEEM MEDIAL FORM
+FEE5..FEE8 ; NFKC_CF; 0646 # Lo [4] ARABIC LETTER NOON ISOLATED FORM..ARABIC LETTER NOON MEDIAL FORM
+FEE9..FEEC ; NFKC_CF; 0647 # Lo [4] ARABIC LETTER HEH ISOLATED FORM..ARABIC LETTER HEH MEDIAL FORM
+FEED..FEEE ; NFKC_CF; 0648 # Lo [2] ARABIC LETTER WAW ISOLATED FORM..ARABIC LETTER WAW FINAL FORM
+FEEF..FEF0 ; NFKC_CF; 0649 # Lo [2] ARABIC LETTER ALEF MAKSURA ISOLATED FORM..ARABIC LETTER ALEF MAKSURA FINAL FORM
+FEF1..FEF4 ; NFKC_CF; 064A # Lo [4] ARABIC LETTER YEH ISOLATED FORM..ARABIC LETTER YEH MEDIAL FORM
+FEF5..FEF6 ; NFKC_CF; 0644 0622 # Lo [2] ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+FEF7..FEF8 ; NFKC_CF; 0644 0623 # Lo [2] ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+FEF9..FEFA ; NFKC_CF; 0644 0625 # Lo [2] ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+FEFB..FEFC ; NFKC_CF; 0644 0627 # Lo [2] ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF ; NFKC_CF; # Cf ZERO WIDTH NO-BREAK SPACE
+FF01 ; NFKC_CF; 0021 # Po FULLWIDTH EXCLAMATION MARK
+FF02 ; NFKC_CF; 0022 # Po FULLWIDTH QUOTATION MARK
+FF03 ; NFKC_CF; 0023 # Po FULLWIDTH NUMBER SIGN
+FF04 ; NFKC_CF; 0024 # Sc FULLWIDTH DOLLAR SIGN
+FF05 ; NFKC_CF; 0025 # Po FULLWIDTH PERCENT SIGN
+FF06 ; NFKC_CF; 0026 # Po FULLWIDTH AMPERSAND
+FF07 ; NFKC_CF; 0027 # Po FULLWIDTH APOSTROPHE
+FF08 ; NFKC_CF; 0028 # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; NFKC_CF; 0029 # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; NFKC_CF; 002A # Po FULLWIDTH ASTERISK
+FF0B ; NFKC_CF; 002B # Sm FULLWIDTH PLUS SIGN
+FF0C ; NFKC_CF; 002C # Po FULLWIDTH COMMA
+FF0D ; NFKC_CF; 002D # Pd FULLWIDTH HYPHEN-MINUS
+FF0E ; NFKC_CF; 002E # Po FULLWIDTH FULL STOP
+FF0F ; NFKC_CF; 002F # Po FULLWIDTH SOLIDUS
+FF10 ; NFKC_CF; 0030 # Nd FULLWIDTH DIGIT ZERO
+FF11 ; NFKC_CF; 0031 # Nd FULLWIDTH DIGIT ONE
+FF12 ; NFKC_CF; 0032 # Nd FULLWIDTH DIGIT TWO
+FF13 ; NFKC_CF; 0033 # Nd FULLWIDTH DIGIT THREE
+FF14 ; NFKC_CF; 0034 # Nd FULLWIDTH DIGIT FOUR
+FF15 ; NFKC_CF; 0035 # Nd FULLWIDTH DIGIT FIVE
+FF16 ; NFKC_CF; 0036 # Nd FULLWIDTH DIGIT SIX
+FF17 ; NFKC_CF; 0037 # Nd FULLWIDTH DIGIT SEVEN
+FF18 ; NFKC_CF; 0038 # Nd FULLWIDTH DIGIT EIGHT
+FF19 ; NFKC_CF; 0039 # Nd FULLWIDTH DIGIT NINE
+FF1A ; NFKC_CF; 003A # Po FULLWIDTH COLON
+FF1B ; NFKC_CF; 003B # Po FULLWIDTH SEMICOLON
+FF1C ; NFKC_CF; 003C # Sm FULLWIDTH LESS-THAN SIGN
+FF1D ; NFKC_CF; 003D # Sm FULLWIDTH EQUALS SIGN
+FF1E ; NFKC_CF; 003E # Sm FULLWIDTH GREATER-THAN SIGN
+FF1F ; NFKC_CF; 003F # Po FULLWIDTH QUESTION MARK
+FF20 ; NFKC_CF; 0040 # Po FULLWIDTH COMMERCIAL AT
+FF21 ; NFKC_CF; 0061 # L& FULLWIDTH LATIN CAPITAL LETTER A
+FF22 ; NFKC_CF; 0062 # L& FULLWIDTH LATIN CAPITAL LETTER B
+FF23 ; NFKC_CF; 0063 # L& FULLWIDTH LATIN CAPITAL LETTER C
+FF24 ; NFKC_CF; 0064 # L& FULLWIDTH LATIN CAPITAL LETTER D
+FF25 ; NFKC_CF; 0065 # L& FULLWIDTH LATIN CAPITAL LETTER E
+FF26 ; NFKC_CF; 0066 # L& FULLWIDTH LATIN CAPITAL LETTER F
+FF27 ; NFKC_CF; 0067 # L& FULLWIDTH LATIN CAPITAL LETTER G
+FF28 ; NFKC_CF; 0068 # L& FULLWIDTH LATIN CAPITAL LETTER H
+FF29 ; NFKC_CF; 0069 # L& FULLWIDTH LATIN CAPITAL LETTER I
+FF2A ; NFKC_CF; 006A # L& FULLWIDTH LATIN CAPITAL LETTER J
+FF2B ; NFKC_CF; 006B # L& FULLWIDTH LATIN CAPITAL LETTER K
+FF2C ; NFKC_CF; 006C # L& FULLWIDTH LATIN CAPITAL LETTER L
+FF2D ; NFKC_CF; 006D # L& FULLWIDTH LATIN CAPITAL LETTER M
+FF2E ; NFKC_CF; 006E # L& FULLWIDTH LATIN CAPITAL LETTER N
+FF2F ; NFKC_CF; 006F # L& FULLWIDTH LATIN CAPITAL LETTER O
+FF30 ; NFKC_CF; 0070 # L& FULLWIDTH LATIN CAPITAL LETTER P
+FF31 ; NFKC_CF; 0071 # L& FULLWIDTH LATIN CAPITAL LETTER Q
+FF32 ; NFKC_CF; 0072 # L& FULLWIDTH LATIN CAPITAL LETTER R
+FF33 ; NFKC_CF; 0073 # L& FULLWIDTH LATIN CAPITAL LETTER S
+FF34 ; NFKC_CF; 0074 # L& FULLWIDTH LATIN CAPITAL LETTER T
+FF35 ; NFKC_CF; 0075 # L& FULLWIDTH LATIN CAPITAL LETTER U
+FF36 ; NFKC_CF; 0076 # L& FULLWIDTH LATIN CAPITAL LETTER V
+FF37 ; NFKC_CF; 0077 # L& FULLWIDTH LATIN CAPITAL LETTER W
+FF38 ; NFKC_CF; 0078 # L& FULLWIDTH LATIN CAPITAL LETTER X
+FF39 ; NFKC_CF; 0079 # L& FULLWIDTH LATIN CAPITAL LETTER Y
+FF3A ; NFKC_CF; 007A # L& FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B ; NFKC_CF; 005B # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; NFKC_CF; 005C # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; NFKC_CF; 005D # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; NFKC_CF; 005E # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; NFKC_CF; 005F # Pc FULLWIDTH LOW LINE
+FF40 ; NFKC_CF; 0060 # Sk FULLWIDTH GRAVE ACCENT
+FF41 ; NFKC_CF; 0061 # L& FULLWIDTH LATIN SMALL LETTER A
+FF42 ; NFKC_CF; 0062 # L& FULLWIDTH LATIN SMALL LETTER B
+FF43 ; NFKC_CF; 0063 # L& FULLWIDTH LATIN SMALL LETTER C
+FF44 ; NFKC_CF; 0064 # L& FULLWIDTH LATIN SMALL LETTER D
+FF45 ; NFKC_CF; 0065 # L& FULLWIDTH LATIN SMALL LETTER E
+FF46 ; NFKC_CF; 0066 # L& FULLWIDTH LATIN SMALL LETTER F
+FF47 ; NFKC_CF; 0067 # L& FULLWIDTH LATIN SMALL LETTER G
+FF48 ; NFKC_CF; 0068 # L& FULLWIDTH LATIN SMALL LETTER H
+FF49 ; NFKC_CF; 0069 # L& FULLWIDTH LATIN SMALL LETTER I
+FF4A ; NFKC_CF; 006A # L& FULLWIDTH LATIN SMALL LETTER J
+FF4B ; NFKC_CF; 006B # L& FULLWIDTH LATIN SMALL LETTER K
+FF4C ; NFKC_CF; 006C # L& FULLWIDTH LATIN SMALL LETTER L
+FF4D ; NFKC_CF; 006D # L& FULLWIDTH LATIN SMALL LETTER M
+FF4E ; NFKC_CF; 006E # L& FULLWIDTH LATIN SMALL LETTER N
+FF4F ; NFKC_CF; 006F # L& FULLWIDTH LATIN SMALL LETTER O
+FF50 ; NFKC_CF; 0070 # L& FULLWIDTH LATIN SMALL LETTER P
+FF51 ; NFKC_CF; 0071 # L& FULLWIDTH LATIN SMALL LETTER Q
+FF52 ; NFKC_CF; 0072 # L& FULLWIDTH LATIN SMALL LETTER R
+FF53 ; NFKC_CF; 0073 # L& FULLWIDTH LATIN SMALL LETTER S
+FF54 ; NFKC_CF; 0074 # L& FULLWIDTH LATIN SMALL LETTER T
+FF55 ; NFKC_CF; 0075 # L& FULLWIDTH LATIN SMALL LETTER U
+FF56 ; NFKC_CF; 0076 # L& FULLWIDTH LATIN SMALL LETTER V
+FF57 ; NFKC_CF; 0077 # L& FULLWIDTH LATIN SMALL LETTER W
+FF58 ; NFKC_CF; 0078 # L& FULLWIDTH LATIN SMALL LETTER X
+FF59 ; NFKC_CF; 0079 # L& FULLWIDTH LATIN SMALL LETTER Y
+FF5A ; NFKC_CF; 007A # L& FULLWIDTH LATIN SMALL LETTER Z
+FF5B ; NFKC_CF; 007B # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; NFKC_CF; 007C # Sm FULLWIDTH VERTICAL LINE
+FF5D ; NFKC_CF; 007D # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; NFKC_CF; 007E # Sm FULLWIDTH TILDE
+FF5F ; NFKC_CF; 2985 # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; NFKC_CF; 2986 # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; NFKC_CF; 3002 # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; NFKC_CF; 300C # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; NFKC_CF; 300D # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64 ; NFKC_CF; 3001 # Po HALFWIDTH IDEOGRAPHIC COMMA
+FF65 ; NFKC_CF; 30FB # Po HALFWIDTH KATAKANA MIDDLE DOT
+FF66 ; NFKC_CF; 30F2 # Lo HALFWIDTH KATAKANA LETTER WO
+FF67 ; NFKC_CF; 30A1 # Lo HALFWIDTH KATAKANA LETTER SMALL A
+FF68 ; NFKC_CF; 30A3 # Lo HALFWIDTH KATAKANA LETTER SMALL I
+FF69 ; NFKC_CF; 30A5 # Lo HALFWIDTH KATAKANA LETTER SMALL U
+FF6A ; NFKC_CF; 30A7 # Lo HALFWIDTH KATAKANA LETTER SMALL E
+FF6B ; NFKC_CF; 30A9 # Lo HALFWIDTH KATAKANA LETTER SMALL O
+FF6C ; NFKC_CF; 30E3 # Lo HALFWIDTH KATAKANA LETTER SMALL YA
+FF6D ; NFKC_CF; 30E5 # Lo HALFWIDTH KATAKANA LETTER SMALL YU
+FF6E ; NFKC_CF; 30E7 # Lo HALFWIDTH KATAKANA LETTER SMALL YO
+FF6F ; NFKC_CF; 30C3 # Lo HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; NFKC_CF; 30FC # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71 ; NFKC_CF; 30A2 # Lo HALFWIDTH KATAKANA LETTER A
+FF72 ; NFKC_CF; 30A4 # Lo HALFWIDTH KATAKANA LETTER I
+FF73 ; NFKC_CF; 30A6 # Lo HALFWIDTH KATAKANA LETTER U
+FF74 ; NFKC_CF; 30A8 # Lo HALFWIDTH KATAKANA LETTER E
+FF75 ; NFKC_CF; 30AA # Lo HALFWIDTH KATAKANA LETTER O
+FF76 ; NFKC_CF; 30AB # Lo HALFWIDTH KATAKANA LETTER KA
+FF77 ; NFKC_CF; 30AD # Lo HALFWIDTH KATAKANA LETTER KI
+FF78 ; NFKC_CF; 30AF # Lo HALFWIDTH KATAKANA LETTER KU
+FF79 ; NFKC_CF; 30B1 # Lo HALFWIDTH KATAKANA LETTER KE
+FF7A ; NFKC_CF; 30B3 # Lo HALFWIDTH KATAKANA LETTER KO
+FF7B ; NFKC_CF; 30B5 # Lo HALFWIDTH KATAKANA LETTER SA
+FF7C ; NFKC_CF; 30B7 # Lo HALFWIDTH KATAKANA LETTER SI
+FF7D ; NFKC_CF; 30B9 # Lo HALFWIDTH KATAKANA LETTER SU
+FF7E ; NFKC_CF; 30BB # Lo HALFWIDTH KATAKANA LETTER SE
+FF7F ; NFKC_CF; 30BD # Lo HALFWIDTH KATAKANA LETTER SO
+FF80 ; NFKC_CF; 30BF # Lo HALFWIDTH KATAKANA LETTER TA
+FF81 ; NFKC_CF; 30C1 # Lo HALFWIDTH KATAKANA LETTER TI
+FF82 ; NFKC_CF; 30C4 # Lo HALFWIDTH KATAKANA LETTER TU
+FF83 ; NFKC_CF; 30C6 # Lo HALFWIDTH KATAKANA LETTER TE
+FF84 ; NFKC_CF; 30C8 # Lo HALFWIDTH KATAKANA LETTER TO
+FF85 ; NFKC_CF; 30CA # Lo HALFWIDTH KATAKANA LETTER NA
+FF86 ; NFKC_CF; 30CB # Lo HALFWIDTH KATAKANA LETTER NI
+FF87 ; NFKC_CF; 30CC # Lo HALFWIDTH KATAKANA LETTER NU
+FF88 ; NFKC_CF; 30CD # Lo HALFWIDTH KATAKANA LETTER NE
+FF89 ; NFKC_CF; 30CE # Lo HALFWIDTH KATAKANA LETTER NO
+FF8A ; NFKC_CF; 30CF # Lo HALFWIDTH KATAKANA LETTER HA
+FF8B ; NFKC_CF; 30D2 # Lo HALFWIDTH KATAKANA LETTER HI
+FF8C ; NFKC_CF; 30D5 # Lo HALFWIDTH KATAKANA LETTER HU
+FF8D ; NFKC_CF; 30D8 # Lo HALFWIDTH KATAKANA LETTER HE
+FF8E ; NFKC_CF; 30DB # Lo HALFWIDTH KATAKANA LETTER HO
+FF8F ; NFKC_CF; 30DE # Lo HALFWIDTH KATAKANA LETTER MA
+FF90 ; NFKC_CF; 30DF # Lo HALFWIDTH KATAKANA LETTER MI
+FF91 ; NFKC_CF; 30E0 # Lo HALFWIDTH KATAKANA LETTER MU
+FF92 ; NFKC_CF; 30E1 # Lo HALFWIDTH KATAKANA LETTER ME
+FF93 ; NFKC_CF; 30E2 # Lo HALFWIDTH KATAKANA LETTER MO
+FF94 ; NFKC_CF; 30E4 # Lo HALFWIDTH KATAKANA LETTER YA
+FF95 ; NFKC_CF; 30E6 # Lo HALFWIDTH KATAKANA LETTER YU
+FF96 ; NFKC_CF; 30E8 # Lo HALFWIDTH KATAKANA LETTER YO
+FF97 ; NFKC_CF; 30E9 # Lo HALFWIDTH KATAKANA LETTER RA
+FF98 ; NFKC_CF; 30EA # Lo HALFWIDTH KATAKANA LETTER RI
+FF99 ; NFKC_CF; 30EB # Lo HALFWIDTH KATAKANA LETTER RU
+FF9A ; NFKC_CF; 30EC # Lo HALFWIDTH KATAKANA LETTER RE
+FF9B ; NFKC_CF; 30ED # Lo HALFWIDTH KATAKANA LETTER RO
+FF9C ; NFKC_CF; 30EF # Lo HALFWIDTH KATAKANA LETTER WA
+FF9D ; NFKC_CF; 30F3 # Lo HALFWIDTH KATAKANA LETTER N
+FF9E ; NFKC_CF; 3099 # Lm HALFWIDTH KATAKANA VOICED SOUND MARK
+FF9F ; NFKC_CF; 309A # Lm HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0 ; NFKC_CF; # Lo HALFWIDTH HANGUL FILLER
+FFA1 ; NFKC_CF; 1100 # Lo HALFWIDTH HANGUL LETTER KIYEOK
+FFA2 ; NFKC_CF; 1101 # Lo HALFWIDTH HANGUL LETTER SSANGKIYEOK
+FFA3 ; NFKC_CF; 11AA # Lo HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+FFA4 ; NFKC_CF; 1102 # Lo HALFWIDTH HANGUL LETTER NIEUN
+FFA5 ; NFKC_CF; 11AC # Lo HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+FFA6 ; NFKC_CF; 11AD # Lo HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+FFA7 ; NFKC_CF; 1103 # Lo HALFWIDTH HANGUL LETTER TIKEUT
+FFA8 ; NFKC_CF; 1104 # Lo HALFWIDTH HANGUL LETTER SSANGTIKEUT
+FFA9 ; NFKC_CF; 1105 # Lo HALFWIDTH HANGUL LETTER RIEUL
+FFAA ; NFKC_CF; 11B0 # Lo HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+FFAB ; NFKC_CF; 11B1 # Lo HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+FFAC ; NFKC_CF; 11B2 # Lo HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+FFAD ; NFKC_CF; 11B3 # Lo HALFWIDTH HANGUL LETTER RIEUL-SIOS
+FFAE ; NFKC_CF; 11B4 # Lo HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+FFAF ; NFKC_CF; 11B5 # Lo HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+FFB0 ; NFKC_CF; 111A # Lo HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+FFB1 ; NFKC_CF; 1106 # Lo HALFWIDTH HANGUL LETTER MIEUM
+FFB2 ; NFKC_CF; 1107 # Lo HALFWIDTH HANGUL LETTER PIEUP
+FFB3 ; NFKC_CF; 1108 # Lo HALFWIDTH HANGUL LETTER SSANGPIEUP
+FFB4 ; NFKC_CF; 1121 # Lo HALFWIDTH HANGUL LETTER PIEUP-SIOS
+FFB5 ; NFKC_CF; 1109 # Lo HALFWIDTH HANGUL LETTER SIOS
+FFB6 ; NFKC_CF; 110A # Lo HALFWIDTH HANGUL LETTER SSANGSIOS
+FFB7 ; NFKC_CF; 110B # Lo HALFWIDTH HANGUL LETTER IEUNG
+FFB8 ; NFKC_CF; 110C # Lo HALFWIDTH HANGUL LETTER CIEUC
+FFB9 ; NFKC_CF; 110D # Lo HALFWIDTH HANGUL LETTER SSANGCIEUC
+FFBA ; NFKC_CF; 110E # Lo HALFWIDTH HANGUL LETTER CHIEUCH
+FFBB ; NFKC_CF; 110F # Lo HALFWIDTH HANGUL LETTER KHIEUKH
+FFBC ; NFKC_CF; 1110 # Lo HALFWIDTH HANGUL LETTER THIEUTH
+FFBD ; NFKC_CF; 1111 # Lo HALFWIDTH HANGUL LETTER PHIEUPH
+FFBE ; NFKC_CF; 1112 # Lo HALFWIDTH HANGUL LETTER HIEUH
+FFC2 ; NFKC_CF; 1161 # Lo HALFWIDTH HANGUL LETTER A
+FFC3 ; NFKC_CF; 1162 # Lo HALFWIDTH HANGUL LETTER AE
+FFC4 ; NFKC_CF; 1163 # Lo HALFWIDTH HANGUL LETTER YA
+FFC5 ; NFKC_CF; 1164 # Lo HALFWIDTH HANGUL LETTER YAE
+FFC6 ; NFKC_CF; 1165 # Lo HALFWIDTH HANGUL LETTER EO
+FFC7 ; NFKC_CF; 1166 # Lo HALFWIDTH HANGUL LETTER E
+FFCA ; NFKC_CF; 1167 # Lo HALFWIDTH HANGUL LETTER YEO
+FFCB ; NFKC_CF; 1168 # Lo HALFWIDTH HANGUL LETTER YE
+FFCC ; NFKC_CF; 1169 # Lo HALFWIDTH HANGUL LETTER O
+FFCD ; NFKC_CF; 116A # Lo HALFWIDTH HANGUL LETTER WA
+FFCE ; NFKC_CF; 116B # Lo HALFWIDTH HANGUL LETTER WAE
+FFCF ; NFKC_CF; 116C # Lo HALFWIDTH HANGUL LETTER OE
+FFD2 ; NFKC_CF; 116D # Lo HALFWIDTH HANGUL LETTER YO
+FFD3 ; NFKC_CF; 116E # Lo HALFWIDTH HANGUL LETTER U
+FFD4 ; NFKC_CF; 116F # Lo HALFWIDTH HANGUL LETTER WEO
+FFD5 ; NFKC_CF; 1170 # Lo HALFWIDTH HANGUL LETTER WE
+FFD6 ; NFKC_CF; 1171 # Lo HALFWIDTH HANGUL LETTER WI
+FFD7 ; NFKC_CF; 1172 # Lo HALFWIDTH HANGUL LETTER YU
+FFDA ; NFKC_CF; 1173 # Lo HALFWIDTH HANGUL LETTER EU
+FFDB ; NFKC_CF; 1174 # Lo HALFWIDTH HANGUL LETTER YI
+FFDC ; NFKC_CF; 1175 # Lo HALFWIDTH HANGUL LETTER I
+FFE0 ; NFKC_CF; 00A2 # Sc FULLWIDTH CENT SIGN
+FFE1 ; NFKC_CF; 00A3 # Sc FULLWIDTH POUND SIGN
+FFE2 ; NFKC_CF; 00AC # Sm FULLWIDTH NOT SIGN
+FFE3 ; NFKC_CF; 0020 0304 # Sk FULLWIDTH MACRON
+FFE4 ; NFKC_CF; 00A6 # So FULLWIDTH BROKEN BAR
+FFE5 ; NFKC_CF; 00A5 # Sc FULLWIDTH YEN SIGN
+FFE6 ; NFKC_CF; 20A9 # Sc FULLWIDTH WON SIGN
+FFE8 ; NFKC_CF; 2502 # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9 ; NFKC_CF; 2190 # Sm HALFWIDTH LEFTWARDS ARROW
+FFEA ; NFKC_CF; 2191 # Sm HALFWIDTH UPWARDS ARROW
+FFEB ; NFKC_CF; 2192 # Sm HALFWIDTH RIGHTWARDS ARROW
+FFEC ; NFKC_CF; 2193 # Sm HALFWIDTH DOWNWARDS ARROW
+FFED ; NFKC_CF; 25A0 # So HALFWIDTH BLACK SQUARE
+FFEE ; NFKC_CF; 25CB # So HALFWIDTH WHITE CIRCLE
+FFF0..FFF8 ; NFKC_CF; # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+10400 ; NFKC_CF; 10428 # L& DESERET CAPITAL LETTER LONG I
+10401 ; NFKC_CF; 10429 # L& DESERET CAPITAL LETTER LONG E
+10402 ; NFKC_CF; 1042A # L& DESERET CAPITAL LETTER LONG A
+10403 ; NFKC_CF; 1042B # L& DESERET CAPITAL LETTER LONG AH
+10404 ; NFKC_CF; 1042C # L& DESERET CAPITAL LETTER LONG O
+10405 ; NFKC_CF; 1042D # L& DESERET CAPITAL LETTER LONG OO
+10406 ; NFKC_CF; 1042E # L& DESERET CAPITAL LETTER SHORT I
+10407 ; NFKC_CF; 1042F # L& DESERET CAPITAL LETTER SHORT E
+10408 ; NFKC_CF; 10430 # L& DESERET CAPITAL LETTER SHORT A
+10409 ; NFKC_CF; 10431 # L& DESERET CAPITAL LETTER SHORT AH
+1040A ; NFKC_CF; 10432 # L& DESERET CAPITAL LETTER SHORT O
+1040B ; NFKC_CF; 10433 # L& DESERET CAPITAL LETTER SHORT OO
+1040C ; NFKC_CF; 10434 # L& DESERET CAPITAL LETTER AY
+1040D ; NFKC_CF; 10435 # L& DESERET CAPITAL LETTER OW
+1040E ; NFKC_CF; 10436 # L& DESERET CAPITAL LETTER WU
+1040F ; NFKC_CF; 10437 # L& DESERET CAPITAL LETTER YEE
+10410 ; NFKC_CF; 10438 # L& DESERET CAPITAL LETTER H
+10411 ; NFKC_CF; 10439 # L& DESERET CAPITAL LETTER PEE
+10412 ; NFKC_CF; 1043A # L& DESERET CAPITAL LETTER BEE
+10413 ; NFKC_CF; 1043B # L& DESERET CAPITAL LETTER TEE
+10414 ; NFKC_CF; 1043C # L& DESERET CAPITAL LETTER DEE
+10415 ; NFKC_CF; 1043D # L& DESERET CAPITAL LETTER CHEE
+10416 ; NFKC_CF; 1043E # L& DESERET CAPITAL LETTER JEE
+10417 ; NFKC_CF; 1043F # L& DESERET CAPITAL LETTER KAY
+10418 ; NFKC_CF; 10440 # L& DESERET CAPITAL LETTER GAY
+10419 ; NFKC_CF; 10441 # L& DESERET CAPITAL LETTER EF
+1041A ; NFKC_CF; 10442 # L& DESERET CAPITAL LETTER VEE
+1041B ; NFKC_CF; 10443 # L& DESERET CAPITAL LETTER ETH
+1041C ; NFKC_CF; 10444 # L& DESERET CAPITAL LETTER THEE
+1041D ; NFKC_CF; 10445 # L& DESERET CAPITAL LETTER ES
+1041E ; NFKC_CF; 10446 # L& DESERET CAPITAL LETTER ZEE
+1041F ; NFKC_CF; 10447 # L& DESERET CAPITAL LETTER ESH
+10420 ; NFKC_CF; 10448 # L& DESERET CAPITAL LETTER ZHEE
+10421 ; NFKC_CF; 10449 # L& DESERET CAPITAL LETTER ER
+10422 ; NFKC_CF; 1044A # L& DESERET CAPITAL LETTER EL
+10423 ; NFKC_CF; 1044B # L& DESERET CAPITAL LETTER EM
+10424 ; NFKC_CF; 1044C # L& DESERET CAPITAL LETTER EN
+10425 ; NFKC_CF; 1044D # L& DESERET CAPITAL LETTER ENG
+10426 ; NFKC_CF; 1044E # L& DESERET CAPITAL LETTER OI
+10427 ; NFKC_CF; 1044F # L& DESERET CAPITAL LETTER EW
+104B0 ; NFKC_CF; 104D8 # L& OSAGE CAPITAL LETTER A
+104B1 ; NFKC_CF; 104D9 # L& OSAGE CAPITAL LETTER AI
+104B2 ; NFKC_CF; 104DA # L& OSAGE CAPITAL LETTER AIN
+104B3 ; NFKC_CF; 104DB # L& OSAGE CAPITAL LETTER AH
+104B4 ; NFKC_CF; 104DC # L& OSAGE CAPITAL LETTER BRA
+104B5 ; NFKC_CF; 104DD # L& OSAGE CAPITAL LETTER CHA
+104B6 ; NFKC_CF; 104DE # L& OSAGE CAPITAL LETTER EHCHA
+104B7 ; NFKC_CF; 104DF # L& OSAGE CAPITAL LETTER E
+104B8 ; NFKC_CF; 104E0 # L& OSAGE CAPITAL LETTER EIN
+104B9 ; NFKC_CF; 104E1 # L& OSAGE CAPITAL LETTER HA
+104BA ; NFKC_CF; 104E2 # L& OSAGE CAPITAL LETTER HYA
+104BB ; NFKC_CF; 104E3 # L& OSAGE CAPITAL LETTER I
+104BC ; NFKC_CF; 104E4 # L& OSAGE CAPITAL LETTER KA
+104BD ; NFKC_CF; 104E5 # L& OSAGE CAPITAL LETTER EHKA
+104BE ; NFKC_CF; 104E6 # L& OSAGE CAPITAL LETTER KYA
+104BF ; NFKC_CF; 104E7 # L& OSAGE CAPITAL LETTER LA
+104C0 ; NFKC_CF; 104E8 # L& OSAGE CAPITAL LETTER MA
+104C1 ; NFKC_CF; 104E9 # L& OSAGE CAPITAL LETTER NA
+104C2 ; NFKC_CF; 104EA # L& OSAGE CAPITAL LETTER O
+104C3 ; NFKC_CF; 104EB # L& OSAGE CAPITAL LETTER OIN
+104C4 ; NFKC_CF; 104EC # L& OSAGE CAPITAL LETTER PA
+104C5 ; NFKC_CF; 104ED # L& OSAGE CAPITAL LETTER EHPA
+104C6 ; NFKC_CF; 104EE # L& OSAGE CAPITAL LETTER SA
+104C7 ; NFKC_CF; 104EF # L& OSAGE CAPITAL LETTER SHA
+104C8 ; NFKC_CF; 104F0 # L& OSAGE CAPITAL LETTER TA
+104C9 ; NFKC_CF; 104F1 # L& OSAGE CAPITAL LETTER EHTA
+104CA ; NFKC_CF; 104F2 # L& OSAGE CAPITAL LETTER TSA
+104CB ; NFKC_CF; 104F3 # L& OSAGE CAPITAL LETTER EHTSA
+104CC ; NFKC_CF; 104F4 # L& OSAGE CAPITAL LETTER TSHA
+104CD ; NFKC_CF; 104F5 # L& OSAGE CAPITAL LETTER DHA
+104CE ; NFKC_CF; 104F6 # L& OSAGE CAPITAL LETTER U
+104CF ; NFKC_CF; 104F7 # L& OSAGE CAPITAL LETTER WA
+104D0 ; NFKC_CF; 104F8 # L& OSAGE CAPITAL LETTER KHA
+104D1 ; NFKC_CF; 104F9 # L& OSAGE CAPITAL LETTER GHA
+104D2 ; NFKC_CF; 104FA # L& OSAGE CAPITAL LETTER ZA
+104D3 ; NFKC_CF; 104FB # L& OSAGE CAPITAL LETTER ZHA
+10570 ; NFKC_CF; 10597 # L& VITHKUQI CAPITAL LETTER A
+10571 ; NFKC_CF; 10598 # L& VITHKUQI CAPITAL LETTER BBE
+10572 ; NFKC_CF; 10599 # L& VITHKUQI CAPITAL LETTER BE
+10573 ; NFKC_CF; 1059A # L& VITHKUQI CAPITAL LETTER CE
+10574 ; NFKC_CF; 1059B # L& VITHKUQI CAPITAL LETTER CHE
+10575 ; NFKC_CF; 1059C # L& VITHKUQI CAPITAL LETTER DE
+10576 ; NFKC_CF; 1059D # L& VITHKUQI CAPITAL LETTER DHE
+10577 ; NFKC_CF; 1059E # L& VITHKUQI CAPITAL LETTER EI
+10578 ; NFKC_CF; 1059F # L& VITHKUQI CAPITAL LETTER E
+10579 ; NFKC_CF; 105A0 # L& VITHKUQI CAPITAL LETTER FE
+1057A ; NFKC_CF; 105A1 # L& VITHKUQI CAPITAL LETTER GA
+1057C ; NFKC_CF; 105A3 # L& VITHKUQI CAPITAL LETTER HA
+1057D ; NFKC_CF; 105A4 # L& VITHKUQI CAPITAL LETTER HHA
+1057E ; NFKC_CF; 105A5 # L& VITHKUQI CAPITAL LETTER I
+1057F ; NFKC_CF; 105A6 # L& VITHKUQI CAPITAL LETTER IJE
+10580 ; NFKC_CF; 105A7 # L& VITHKUQI CAPITAL LETTER JE
+10581 ; NFKC_CF; 105A8 # L& VITHKUQI CAPITAL LETTER KA
+10582 ; NFKC_CF; 105A9 # L& VITHKUQI CAPITAL LETTER LA
+10583 ; NFKC_CF; 105AA # L& VITHKUQI CAPITAL LETTER LLA
+10584 ; NFKC_CF; 105AB # L& VITHKUQI CAPITAL LETTER ME
+10585 ; NFKC_CF; 105AC # L& VITHKUQI CAPITAL LETTER NE
+10586 ; NFKC_CF; 105AD # L& VITHKUQI CAPITAL LETTER NJE
+10587 ; NFKC_CF; 105AE # L& VITHKUQI CAPITAL LETTER O
+10588 ; NFKC_CF; 105AF # L& VITHKUQI CAPITAL LETTER PE
+10589 ; NFKC_CF; 105B0 # L& VITHKUQI CAPITAL LETTER QA
+1058A ; NFKC_CF; 105B1 # L& VITHKUQI CAPITAL LETTER RE
+1058C ; NFKC_CF; 105B3 # L& VITHKUQI CAPITAL LETTER SE
+1058D ; NFKC_CF; 105B4 # L& VITHKUQI CAPITAL LETTER SHE
+1058E ; NFKC_CF; 105B5 # L& VITHKUQI CAPITAL LETTER TE
+1058F ; NFKC_CF; 105B6 # L& VITHKUQI CAPITAL LETTER THE
+10590 ; NFKC_CF; 105B7 # L& VITHKUQI CAPITAL LETTER U
+10591 ; NFKC_CF; 105B8 # L& VITHKUQI CAPITAL LETTER VE
+10592 ; NFKC_CF; 105B9 # L& VITHKUQI CAPITAL LETTER XE
+10594 ; NFKC_CF; 105BB # L& VITHKUQI CAPITAL LETTER Y
+10595 ; NFKC_CF; 105BC # L& VITHKUQI CAPITAL LETTER ZE
+10781 ; NFKC_CF; 02D0 # Lm MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON
+10782 ; NFKC_CF; 02D1 # Lm MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON
+10783 ; NFKC_CF; 00E6 # Lm MODIFIER LETTER SMALL AE
+10784 ; NFKC_CF; 0299 # Lm MODIFIER LETTER SMALL CAPITAL B
+10785 ; NFKC_CF; 0253 # Lm MODIFIER LETTER SMALL B WITH HOOK
+10787 ; NFKC_CF; 02A3 # Lm MODIFIER LETTER SMALL DZ DIGRAPH
+10788 ; NFKC_CF; AB66 # Lm MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK
+10789 ; NFKC_CF; 02A5 # Lm MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL
+1078A ; NFKC_CF; 02A4 # Lm MODIFIER LETTER SMALL DEZH DIGRAPH
+1078B ; NFKC_CF; 0256 # Lm MODIFIER LETTER SMALL D WITH TAIL
+1078C ; NFKC_CF; 0257 # Lm MODIFIER LETTER SMALL D WITH HOOK
+1078D ; NFKC_CF; 1D91 # Lm MODIFIER LETTER SMALL D WITH HOOK AND TAIL
+1078E ; NFKC_CF; 0258 # Lm MODIFIER LETTER SMALL REVERSED E
+1078F ; NFKC_CF; 025E # Lm MODIFIER LETTER SMALL CLOSED REVERSED OPEN E
+10790 ; NFKC_CF; 02A9 # Lm MODIFIER LETTER SMALL FENG DIGRAPH
+10791 ; NFKC_CF; 0264 # Lm MODIFIER LETTER SMALL RAMS HORN
+10792 ; NFKC_CF; 0262 # Lm MODIFIER LETTER SMALL CAPITAL G
+10793 ; NFKC_CF; 0260 # Lm MODIFIER LETTER SMALL G WITH HOOK
+10794 ; NFKC_CF; 029B # Lm MODIFIER LETTER SMALL CAPITAL G WITH HOOK
+10795 ; NFKC_CF; 0127 # Lm MODIFIER LETTER SMALL H WITH STROKE
+10796 ; NFKC_CF; 029C # Lm MODIFIER LETTER SMALL CAPITAL H
+10797 ; NFKC_CF; 0267 # Lm MODIFIER LETTER SMALL HENG WITH HOOK
+10798 ; NFKC_CF; 0284 # Lm MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK
+10799 ; NFKC_CF; 02AA # Lm MODIFIER LETTER SMALL LS DIGRAPH
+1079A ; NFKC_CF; 02AB # Lm MODIFIER LETTER SMALL LZ DIGRAPH
+1079B ; NFKC_CF; 026C # Lm MODIFIER LETTER SMALL L WITH BELT
+1079C ; NFKC_CF; 1DF04 # Lm MODIFIER LETTER SMALL CAPITAL L WITH BELT
+1079D ; NFKC_CF; A78E # Lm MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT
+1079E ; NFKC_CF; 026E # Lm MODIFIER LETTER SMALL LEZH
+1079F ; NFKC_CF; 1DF05 # Lm MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK
+107A0 ; NFKC_CF; 028E # Lm MODIFIER LETTER SMALL TURNED Y
+107A1 ; NFKC_CF; 1DF06 # Lm MODIFIER LETTER SMALL TURNED Y WITH BELT
+107A2 ; NFKC_CF; 00F8 # Lm MODIFIER LETTER SMALL O WITH STROKE
+107A3 ; NFKC_CF; 0276 # Lm MODIFIER LETTER SMALL CAPITAL OE
+107A4 ; NFKC_CF; 0277 # Lm MODIFIER LETTER SMALL CLOSED OMEGA
+107A5 ; NFKC_CF; 0071 # Lm MODIFIER LETTER SMALL Q
+107A6 ; NFKC_CF; 027A # Lm MODIFIER LETTER SMALL TURNED R WITH LONG LEG
+107A7 ; NFKC_CF; 1DF08 # Lm MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK
+107A8 ; NFKC_CF; 027D # Lm MODIFIER LETTER SMALL R WITH TAIL
+107A9 ; NFKC_CF; 027E # Lm MODIFIER LETTER SMALL R WITH FISHHOOK
+107AA ; NFKC_CF; 0280 # Lm MODIFIER LETTER SMALL CAPITAL R
+107AB ; NFKC_CF; 02A8 # Lm MODIFIER LETTER SMALL TC DIGRAPH WITH CURL
+107AC ; NFKC_CF; 02A6 # Lm MODIFIER LETTER SMALL TS DIGRAPH
+107AD ; NFKC_CF; AB67 # Lm MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK
+107AE ; NFKC_CF; 02A7 # Lm MODIFIER LETTER SMALL TESH DIGRAPH
+107AF ; NFKC_CF; 0288 # Lm MODIFIER LETTER SMALL T WITH RETROFLEX HOOK
+107B0 ; NFKC_CF; 2C71 # Lm MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2 ; NFKC_CF; 028F # Lm MODIFIER LETTER SMALL CAPITAL Y
+107B3 ; NFKC_CF; 02A1 # Lm MODIFIER LETTER GLOTTAL STOP WITH STROKE
+107B4 ; NFKC_CF; 02A2 # Lm MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE
+107B5 ; NFKC_CF; 0298 # Lm MODIFIER LETTER BILABIAL CLICK
+107B6 ; NFKC_CF; 01C0 # Lm MODIFIER LETTER DENTAL CLICK
+107B7 ; NFKC_CF; 01C1 # Lm MODIFIER LETTER LATERAL CLICK
+107B8 ; NFKC_CF; 01C2 # Lm MODIFIER LETTER ALVEOLAR CLICK
+107B9 ; NFKC_CF; 1DF0A # Lm MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+107BA ; NFKC_CF; 1DF1E # Lm MODIFIER LETTER SMALL S WITH CURL
+10C80 ; NFKC_CF; 10CC0 # L& OLD HUNGARIAN CAPITAL LETTER A
+10C81 ; NFKC_CF; 10CC1 # L& OLD HUNGARIAN CAPITAL LETTER AA
+10C82 ; NFKC_CF; 10CC2 # L& OLD HUNGARIAN CAPITAL LETTER EB
+10C83 ; NFKC_CF; 10CC3 # L& OLD HUNGARIAN CAPITAL LETTER AMB
+10C84 ; NFKC_CF; 10CC4 # L& OLD HUNGARIAN CAPITAL LETTER EC
+10C85 ; NFKC_CF; 10CC5 # L& OLD HUNGARIAN CAPITAL LETTER ENC
+10C86 ; NFKC_CF; 10CC6 # L& OLD HUNGARIAN CAPITAL LETTER ECS
+10C87 ; NFKC_CF; 10CC7 # L& OLD HUNGARIAN CAPITAL LETTER ED
+10C88 ; NFKC_CF; 10CC8 # L& OLD HUNGARIAN CAPITAL LETTER AND
+10C89 ; NFKC_CF; 10CC9 # L& OLD HUNGARIAN CAPITAL LETTER E
+10C8A ; NFKC_CF; 10CCA # L& OLD HUNGARIAN CAPITAL LETTER CLOSE E
+10C8B ; NFKC_CF; 10CCB # L& OLD HUNGARIAN CAPITAL LETTER EE
+10C8C ; NFKC_CF; 10CCC # L& OLD HUNGARIAN CAPITAL LETTER EF
+10C8D ; NFKC_CF; 10CCD # L& OLD HUNGARIAN CAPITAL LETTER EG
+10C8E ; NFKC_CF; 10CCE # L& OLD HUNGARIAN CAPITAL LETTER EGY
+10C8F ; NFKC_CF; 10CCF # L& OLD HUNGARIAN CAPITAL LETTER EH
+10C90 ; NFKC_CF; 10CD0 # L& OLD HUNGARIAN CAPITAL LETTER I
+10C91 ; NFKC_CF; 10CD1 # L& OLD HUNGARIAN CAPITAL LETTER II
+10C92 ; NFKC_CF; 10CD2 # L& OLD HUNGARIAN CAPITAL LETTER EJ
+10C93 ; NFKC_CF; 10CD3 # L& OLD HUNGARIAN CAPITAL LETTER EK
+10C94 ; NFKC_CF; 10CD4 # L& OLD HUNGARIAN CAPITAL LETTER AK
+10C95 ; NFKC_CF; 10CD5 # L& OLD HUNGARIAN CAPITAL LETTER UNK
+10C96 ; NFKC_CF; 10CD6 # L& OLD HUNGARIAN CAPITAL LETTER EL
+10C97 ; NFKC_CF; 10CD7 # L& OLD HUNGARIAN CAPITAL LETTER ELY
+10C98 ; NFKC_CF; 10CD8 # L& OLD HUNGARIAN CAPITAL LETTER EM
+10C99 ; NFKC_CF; 10CD9 # L& OLD HUNGARIAN CAPITAL LETTER EN
+10C9A ; NFKC_CF; 10CDA # L& OLD HUNGARIAN CAPITAL LETTER ENY
+10C9B ; NFKC_CF; 10CDB # L& OLD HUNGARIAN CAPITAL LETTER O
+10C9C ; NFKC_CF; 10CDC # L& OLD HUNGARIAN CAPITAL LETTER OO
+10C9D ; NFKC_CF; 10CDD # L& OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
+10C9E ; NFKC_CF; 10CDE # L& OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
+10C9F ; NFKC_CF; 10CDF # L& OLD HUNGARIAN CAPITAL LETTER OEE
+10CA0 ; NFKC_CF; 10CE0 # L& OLD HUNGARIAN CAPITAL LETTER EP
+10CA1 ; NFKC_CF; 10CE1 # L& OLD HUNGARIAN CAPITAL LETTER EMP
+10CA2 ; NFKC_CF; 10CE2 # L& OLD HUNGARIAN CAPITAL LETTER ER
+10CA3 ; NFKC_CF; 10CE3 # L& OLD HUNGARIAN CAPITAL LETTER SHORT ER
+10CA4 ; NFKC_CF; 10CE4 # L& OLD HUNGARIAN CAPITAL LETTER ES
+10CA5 ; NFKC_CF; 10CE5 # L& OLD HUNGARIAN CAPITAL LETTER ESZ
+10CA6 ; NFKC_CF; 10CE6 # L& OLD HUNGARIAN CAPITAL LETTER ET
+10CA7 ; NFKC_CF; 10CE7 # L& OLD HUNGARIAN CAPITAL LETTER ENT
+10CA8 ; NFKC_CF; 10CE8 # L& OLD HUNGARIAN CAPITAL LETTER ETY
+10CA9 ; NFKC_CF; 10CE9 # L& OLD HUNGARIAN CAPITAL LETTER ECH
+10CAA ; NFKC_CF; 10CEA # L& OLD HUNGARIAN CAPITAL LETTER U
+10CAB ; NFKC_CF; 10CEB # L& OLD HUNGARIAN CAPITAL LETTER UU
+10CAC ; NFKC_CF; 10CEC # L& OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
+10CAD ; NFKC_CF; 10CED # L& OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
+10CAE ; NFKC_CF; 10CEE # L& OLD HUNGARIAN CAPITAL LETTER EV
+10CAF ; NFKC_CF; 10CEF # L& OLD HUNGARIAN CAPITAL LETTER EZ
+10CB0 ; NFKC_CF; 10CF0 # L& OLD HUNGARIAN CAPITAL LETTER EZS
+10CB1 ; NFKC_CF; 10CF1 # L& OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
+10CB2 ; NFKC_CF; 10CF2 # L& OLD HUNGARIAN CAPITAL LETTER US
+118A0 ; NFKC_CF; 118C0 # L& WARANG CITI CAPITAL LETTER NGAA
+118A1 ; NFKC_CF; 118C1 # L& WARANG CITI CAPITAL LETTER A
+118A2 ; NFKC_CF; 118C2 # L& WARANG CITI CAPITAL LETTER WI
+118A3 ; NFKC_CF; 118C3 # L& WARANG CITI CAPITAL LETTER YU
+118A4 ; NFKC_CF; 118C4 # L& WARANG CITI CAPITAL LETTER YA
+118A5 ; NFKC_CF; 118C5 # L& WARANG CITI CAPITAL LETTER YO
+118A6 ; NFKC_CF; 118C6 # L& WARANG CITI CAPITAL LETTER II
+118A7 ; NFKC_CF; 118C7 # L& WARANG CITI CAPITAL LETTER UU
+118A8 ; NFKC_CF; 118C8 # L& WARANG CITI CAPITAL LETTER E
+118A9 ; NFKC_CF; 118C9 # L& WARANG CITI CAPITAL LETTER O
+118AA ; NFKC_CF; 118CA # L& WARANG CITI CAPITAL LETTER ANG
+118AB ; NFKC_CF; 118CB # L& WARANG CITI CAPITAL LETTER GA
+118AC ; NFKC_CF; 118CC # L& WARANG CITI CAPITAL LETTER KO
+118AD ; NFKC_CF; 118CD # L& WARANG CITI CAPITAL LETTER ENY
+118AE ; NFKC_CF; 118CE # L& WARANG CITI CAPITAL LETTER YUJ
+118AF ; NFKC_CF; 118CF # L& WARANG CITI CAPITAL LETTER UC
+118B0 ; NFKC_CF; 118D0 # L& WARANG CITI CAPITAL LETTER ENN
+118B1 ; NFKC_CF; 118D1 # L& WARANG CITI CAPITAL LETTER ODD
+118B2 ; NFKC_CF; 118D2 # L& WARANG CITI CAPITAL LETTER TTE
+118B3 ; NFKC_CF; 118D3 # L& WARANG CITI CAPITAL LETTER NUNG
+118B4 ; NFKC_CF; 118D4 # L& WARANG CITI CAPITAL LETTER DA
+118B5 ; NFKC_CF; 118D5 # L& WARANG CITI CAPITAL LETTER AT
+118B6 ; NFKC_CF; 118D6 # L& WARANG CITI CAPITAL LETTER AM
+118B7 ; NFKC_CF; 118D7 # L& WARANG CITI CAPITAL LETTER BU
+118B8 ; NFKC_CF; 118D8 # L& WARANG CITI CAPITAL LETTER PU
+118B9 ; NFKC_CF; 118D9 # L& WARANG CITI CAPITAL LETTER HIYO
+118BA ; NFKC_CF; 118DA # L& WARANG CITI CAPITAL LETTER HOLO
+118BB ; NFKC_CF; 118DB # L& WARANG CITI CAPITAL LETTER HORR
+118BC ; NFKC_CF; 118DC # L& WARANG CITI CAPITAL LETTER HAR
+118BD ; NFKC_CF; 118DD # L& WARANG CITI CAPITAL LETTER SSUU
+118BE ; NFKC_CF; 118DE # L& WARANG CITI CAPITAL LETTER SII
+118BF ; NFKC_CF; 118DF # L& WARANG CITI CAPITAL LETTER VIYO
+16E40 ; NFKC_CF; 16E60 # L& MEDEFAIDRIN CAPITAL LETTER M
+16E41 ; NFKC_CF; 16E61 # L& MEDEFAIDRIN CAPITAL LETTER S
+16E42 ; NFKC_CF; 16E62 # L& MEDEFAIDRIN CAPITAL LETTER V
+16E43 ; NFKC_CF; 16E63 # L& MEDEFAIDRIN CAPITAL LETTER W
+16E44 ; NFKC_CF; 16E64 # L& MEDEFAIDRIN CAPITAL LETTER ATIU
+16E45 ; NFKC_CF; 16E65 # L& MEDEFAIDRIN CAPITAL LETTER Z
+16E46 ; NFKC_CF; 16E66 # L& MEDEFAIDRIN CAPITAL LETTER KP
+16E47 ; NFKC_CF; 16E67 # L& MEDEFAIDRIN CAPITAL LETTER P
+16E48 ; NFKC_CF; 16E68 # L& MEDEFAIDRIN CAPITAL LETTER T
+16E49 ; NFKC_CF; 16E69 # L& MEDEFAIDRIN CAPITAL LETTER G
+16E4A ; NFKC_CF; 16E6A # L& MEDEFAIDRIN CAPITAL LETTER F
+16E4B ; NFKC_CF; 16E6B # L& MEDEFAIDRIN CAPITAL LETTER I
+16E4C ; NFKC_CF; 16E6C # L& MEDEFAIDRIN CAPITAL LETTER K
+16E4D ; NFKC_CF; 16E6D # L& MEDEFAIDRIN CAPITAL LETTER A
+16E4E ; NFKC_CF; 16E6E # L& MEDEFAIDRIN CAPITAL LETTER J
+16E4F ; NFKC_CF; 16E6F # L& MEDEFAIDRIN CAPITAL LETTER E
+16E50 ; NFKC_CF; 16E70 # L& MEDEFAIDRIN CAPITAL LETTER B
+16E51 ; NFKC_CF; 16E71 # L& MEDEFAIDRIN CAPITAL LETTER C
+16E52 ; NFKC_CF; 16E72 # L& MEDEFAIDRIN CAPITAL LETTER U
+16E53 ; NFKC_CF; 16E73 # L& MEDEFAIDRIN CAPITAL LETTER YU
+16E54 ; NFKC_CF; 16E74 # L& MEDEFAIDRIN CAPITAL LETTER L
+16E55 ; NFKC_CF; 16E75 # L& MEDEFAIDRIN CAPITAL LETTER Q
+16E56 ; NFKC_CF; 16E76 # L& MEDEFAIDRIN CAPITAL LETTER HP
+16E57 ; NFKC_CF; 16E77 # L& MEDEFAIDRIN CAPITAL LETTER NY
+16E58 ; NFKC_CF; 16E78 # L& MEDEFAIDRIN CAPITAL LETTER X
+16E59 ; NFKC_CF; 16E79 # L& MEDEFAIDRIN CAPITAL LETTER D
+16E5A ; NFKC_CF; 16E7A # L& MEDEFAIDRIN CAPITAL LETTER OE
+16E5B ; NFKC_CF; 16E7B # L& MEDEFAIDRIN CAPITAL LETTER N
+16E5C ; NFKC_CF; 16E7C # L& MEDEFAIDRIN CAPITAL LETTER R
+16E5D ; NFKC_CF; 16E7D # L& MEDEFAIDRIN CAPITAL LETTER O
+16E5E ; NFKC_CF; 16E7E # L& MEDEFAIDRIN CAPITAL LETTER AI
+16E5F ; NFKC_CF; 16E7F # L& MEDEFAIDRIN CAPITAL LETTER Y
+1BCA0..1BCA3 ; NFKC_CF; # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D15E ; NFKC_CF; 1D157 1D165 # So MUSICAL SYMBOL HALF NOTE
+1D15F ; NFKC_CF; 1D158 1D165 # So MUSICAL SYMBOL QUARTER NOTE
+1D160 ; NFKC_CF; 1D158 1D165 1D16E #So MUSICAL SYMBOL EIGHTH NOTE
+1D161 ; NFKC_CF; 1D158 1D165 1D16F #So MUSICAL SYMBOL SIXTEENTH NOTE
+1D162 ; NFKC_CF; 1D158 1D165 1D170 #So MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163 ; NFKC_CF; 1D158 1D165 1D171 #So MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164 ; NFKC_CF; 1D158 1D165 1D172 #So MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D173..1D17A ; NFKC_CF; # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D1BB ; NFKC_CF; 1D1B9 1D165 # So MUSICAL SYMBOL MINIMA
+1D1BC ; NFKC_CF; 1D1BA 1D165 # So MUSICAL SYMBOL MINIMA BLACK
+1D1BD ; NFKC_CF; 1D1B9 1D165 1D16E #So MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE ; NFKC_CF; 1D1BA 1D165 1D16E #So MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF ; NFKC_CF; 1D1B9 1D165 1D16F #So MUSICAL SYMBOL FUSA WHITE
+1D1C0 ; NFKC_CF; 1D1BA 1D165 1D16F #So MUSICAL SYMBOL FUSA BLACK
+1D400 ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD CAPITAL A
+1D401 ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD CAPITAL B
+1D402 ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD CAPITAL C
+1D403 ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD CAPITAL D
+1D404 ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD CAPITAL E
+1D405 ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD CAPITAL F
+1D406 ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD CAPITAL G
+1D407 ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD CAPITAL H
+1D408 ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD CAPITAL I
+1D409 ; NFKC_CF; 006A # L& MATHEMATICAL BOLD CAPITAL J
+1D40A ; NFKC_CF; 006B # L& MATHEMATICAL BOLD CAPITAL K
+1D40B ; NFKC_CF; 006C # L& MATHEMATICAL BOLD CAPITAL L
+1D40C ; NFKC_CF; 006D # L& MATHEMATICAL BOLD CAPITAL M
+1D40D ; NFKC_CF; 006E # L& MATHEMATICAL BOLD CAPITAL N
+1D40E ; NFKC_CF; 006F # L& MATHEMATICAL BOLD CAPITAL O
+1D40F ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD CAPITAL P
+1D410 ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD CAPITAL Q
+1D411 ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD CAPITAL R
+1D412 ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD CAPITAL S
+1D413 ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD CAPITAL T
+1D414 ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD CAPITAL U
+1D415 ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD CAPITAL V
+1D416 ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD CAPITAL W
+1D417 ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD CAPITAL X
+1D418 ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD CAPITAL Y
+1D419 ; NFKC_CF; 007A # L& MATHEMATICAL BOLD CAPITAL Z
+1D41A ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD SMALL A
+1D41B ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD SMALL B
+1D41C ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD SMALL C
+1D41D ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD SMALL D
+1D41E ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD SMALL E
+1D41F ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD SMALL F
+1D420 ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD SMALL G
+1D421 ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD SMALL H
+1D422 ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD SMALL I
+1D423 ; NFKC_CF; 006A # L& MATHEMATICAL BOLD SMALL J
+1D424 ; NFKC_CF; 006B # L& MATHEMATICAL BOLD SMALL K
+1D425 ; NFKC_CF; 006C # L& MATHEMATICAL BOLD SMALL L
+1D426 ; NFKC_CF; 006D # L& MATHEMATICAL BOLD SMALL M
+1D427 ; NFKC_CF; 006E # L& MATHEMATICAL BOLD SMALL N
+1D428 ; NFKC_CF; 006F # L& MATHEMATICAL BOLD SMALL O
+1D429 ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD SMALL P
+1D42A ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD SMALL Q
+1D42B ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD SMALL R
+1D42C ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD SMALL S
+1D42D ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD SMALL T
+1D42E ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD SMALL U
+1D42F ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD SMALL V
+1D430 ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD SMALL W
+1D431 ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD SMALL X
+1D432 ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD SMALL Y
+1D433 ; NFKC_CF; 007A # L& MATHEMATICAL BOLD SMALL Z
+1D434 ; NFKC_CF; 0061 # L& MATHEMATICAL ITALIC CAPITAL A
+1D435 ; NFKC_CF; 0062 # L& MATHEMATICAL ITALIC CAPITAL B
+1D436 ; NFKC_CF; 0063 # L& MATHEMATICAL ITALIC CAPITAL C
+1D437 ; NFKC_CF; 0064 # L& MATHEMATICAL ITALIC CAPITAL D
+1D438 ; NFKC_CF; 0065 # L& MATHEMATICAL ITALIC CAPITAL E
+1D439 ; NFKC_CF; 0066 # L& MATHEMATICAL ITALIC CAPITAL F
+1D43A ; NFKC_CF; 0067 # L& MATHEMATICAL ITALIC CAPITAL G
+1D43B ; NFKC_CF; 0068 # L& MATHEMATICAL ITALIC CAPITAL H
+1D43C ; NFKC_CF; 0069 # L& MATHEMATICAL ITALIC CAPITAL I
+1D43D ; NFKC_CF; 006A # L& MATHEMATICAL ITALIC CAPITAL J
+1D43E ; NFKC_CF; 006B # L& MATHEMATICAL ITALIC CAPITAL K
+1D43F ; NFKC_CF; 006C # L& MATHEMATICAL ITALIC CAPITAL L
+1D440 ; NFKC_CF; 006D # L& MATHEMATICAL ITALIC CAPITAL M
+1D441 ; NFKC_CF; 006E # L& MATHEMATICAL ITALIC CAPITAL N
+1D442 ; NFKC_CF; 006F # L& MATHEMATICAL ITALIC CAPITAL O
+1D443 ; NFKC_CF; 0070 # L& MATHEMATICAL ITALIC CAPITAL P
+1D444 ; NFKC_CF; 0071 # L& MATHEMATICAL ITALIC CAPITAL Q
+1D445 ; NFKC_CF; 0072 # L& MATHEMATICAL ITALIC CAPITAL R
+1D446 ; NFKC_CF; 0073 # L& MATHEMATICAL ITALIC CAPITAL S
+1D447 ; NFKC_CF; 0074 # L& MATHEMATICAL ITALIC CAPITAL T
+1D448 ; NFKC_CF; 0075 # L& MATHEMATICAL ITALIC CAPITAL U
+1D449 ; NFKC_CF; 0076 # L& MATHEMATICAL ITALIC CAPITAL V
+1D44A ; NFKC_CF; 0077 # L& MATHEMATICAL ITALIC CAPITAL W
+1D44B ; NFKC_CF; 0078 # L& MATHEMATICAL ITALIC CAPITAL X
+1D44C ; NFKC_CF; 0079 # L& MATHEMATICAL ITALIC CAPITAL Y
+1D44D ; NFKC_CF; 007A # L& MATHEMATICAL ITALIC CAPITAL Z
+1D44E ; NFKC_CF; 0061 # L& MATHEMATICAL ITALIC SMALL A
+1D44F ; NFKC_CF; 0062 # L& MATHEMATICAL ITALIC SMALL B
+1D450 ; NFKC_CF; 0063 # L& MATHEMATICAL ITALIC SMALL C
+1D451 ; NFKC_CF; 0064 # L& MATHEMATICAL ITALIC SMALL D
+1D452 ; NFKC_CF; 0065 # L& MATHEMATICAL ITALIC SMALL E
+1D453 ; NFKC_CF; 0066 # L& MATHEMATICAL ITALIC SMALL F
+1D454 ; NFKC_CF; 0067 # L& MATHEMATICAL ITALIC SMALL G
+1D456 ; NFKC_CF; 0069 # L& MATHEMATICAL ITALIC SMALL I
+1D457 ; NFKC_CF; 006A # L& MATHEMATICAL ITALIC SMALL J
+1D458 ; NFKC_CF; 006B # L& MATHEMATICAL ITALIC SMALL K
+1D459 ; NFKC_CF; 006C # L& MATHEMATICAL ITALIC SMALL L
+1D45A ; NFKC_CF; 006D # L& MATHEMATICAL ITALIC SMALL M
+1D45B ; NFKC_CF; 006E # L& MATHEMATICAL ITALIC SMALL N
+1D45C ; NFKC_CF; 006F # L& MATHEMATICAL ITALIC SMALL O
+1D45D ; NFKC_CF; 0070 # L& MATHEMATICAL ITALIC SMALL P
+1D45E ; NFKC_CF; 0071 # L& MATHEMATICAL ITALIC SMALL Q
+1D45F ; NFKC_CF; 0072 # L& MATHEMATICAL ITALIC SMALL R
+1D460 ; NFKC_CF; 0073 # L& MATHEMATICAL ITALIC SMALL S
+1D461 ; NFKC_CF; 0074 # L& MATHEMATICAL ITALIC SMALL T
+1D462 ; NFKC_CF; 0075 # L& MATHEMATICAL ITALIC SMALL U
+1D463 ; NFKC_CF; 0076 # L& MATHEMATICAL ITALIC SMALL V
+1D464 ; NFKC_CF; 0077 # L& MATHEMATICAL ITALIC SMALL W
+1D465 ; NFKC_CF; 0078 # L& MATHEMATICAL ITALIC SMALL X
+1D466 ; NFKC_CF; 0079 # L& MATHEMATICAL ITALIC SMALL Y
+1D467 ; NFKC_CF; 007A # L& MATHEMATICAL ITALIC SMALL Z
+1D468 ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD ITALIC CAPITAL A
+1D469 ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD ITALIC CAPITAL B
+1D46A ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD ITALIC CAPITAL C
+1D46B ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD ITALIC CAPITAL D
+1D46C ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD ITALIC CAPITAL E
+1D46D ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD ITALIC CAPITAL F
+1D46E ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD ITALIC CAPITAL G
+1D46F ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD ITALIC CAPITAL H
+1D470 ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD ITALIC CAPITAL I
+1D471 ; NFKC_CF; 006A # L& MATHEMATICAL BOLD ITALIC CAPITAL J
+1D472 ; NFKC_CF; 006B # L& MATHEMATICAL BOLD ITALIC CAPITAL K
+1D473 ; NFKC_CF; 006C # L& MATHEMATICAL BOLD ITALIC CAPITAL L
+1D474 ; NFKC_CF; 006D # L& MATHEMATICAL BOLD ITALIC CAPITAL M
+1D475 ; NFKC_CF; 006E # L& MATHEMATICAL BOLD ITALIC CAPITAL N
+1D476 ; NFKC_CF; 006F # L& MATHEMATICAL BOLD ITALIC CAPITAL O
+1D477 ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD ITALIC CAPITAL P
+1D478 ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD ITALIC CAPITAL Q
+1D479 ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD ITALIC CAPITAL R
+1D47A ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD ITALIC CAPITAL S
+1D47B ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD ITALIC CAPITAL T
+1D47C ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD ITALIC CAPITAL U
+1D47D ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD ITALIC CAPITAL V
+1D47E ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD ITALIC CAPITAL W
+1D47F ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD ITALIC CAPITAL X
+1D480 ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD ITALIC CAPITAL Y
+1D481 ; NFKC_CF; 007A # L& MATHEMATICAL BOLD ITALIC CAPITAL Z
+1D482 ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD ITALIC SMALL A
+1D483 ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD ITALIC SMALL B
+1D484 ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD ITALIC SMALL C
+1D485 ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD ITALIC SMALL D
+1D486 ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD ITALIC SMALL E
+1D487 ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD ITALIC SMALL F
+1D488 ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD ITALIC SMALL G
+1D489 ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD ITALIC SMALL H
+1D48A ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD ITALIC SMALL I
+1D48B ; NFKC_CF; 006A # L& MATHEMATICAL BOLD ITALIC SMALL J
+1D48C ; NFKC_CF; 006B # L& MATHEMATICAL BOLD ITALIC SMALL K
+1D48D ; NFKC_CF; 006C # L& MATHEMATICAL BOLD ITALIC SMALL L
+1D48E ; NFKC_CF; 006D # L& MATHEMATICAL BOLD ITALIC SMALL M
+1D48F ; NFKC_CF; 006E # L& MATHEMATICAL BOLD ITALIC SMALL N
+1D490 ; NFKC_CF; 006F # L& MATHEMATICAL BOLD ITALIC SMALL O
+1D491 ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD ITALIC SMALL P
+1D492 ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD ITALIC SMALL Q
+1D493 ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD ITALIC SMALL R
+1D494 ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD ITALIC SMALL S
+1D495 ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD ITALIC SMALL T
+1D496 ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD ITALIC SMALL U
+1D497 ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD ITALIC SMALL V
+1D498 ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD ITALIC SMALL W
+1D499 ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD ITALIC SMALL X
+1D49A ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD ITALIC SMALL Y
+1D49B ; NFKC_CF; 007A # L& MATHEMATICAL BOLD ITALIC SMALL Z
+1D49C ; NFKC_CF; 0061 # L& MATHEMATICAL SCRIPT CAPITAL A
+1D49E ; NFKC_CF; 0063 # L& MATHEMATICAL SCRIPT CAPITAL C
+1D49F ; NFKC_CF; 0064 # L& MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; NFKC_CF; 0067 # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5 ; NFKC_CF; 006A # L& MATHEMATICAL SCRIPT CAPITAL J
+1D4A6 ; NFKC_CF; 006B # L& MATHEMATICAL SCRIPT CAPITAL K
+1D4A9 ; NFKC_CF; 006E # L& MATHEMATICAL SCRIPT CAPITAL N
+1D4AA ; NFKC_CF; 006F # L& MATHEMATICAL SCRIPT CAPITAL O
+1D4AB ; NFKC_CF; 0070 # L& MATHEMATICAL SCRIPT CAPITAL P
+1D4AC ; NFKC_CF; 0071 # L& MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE ; NFKC_CF; 0073 # L& MATHEMATICAL SCRIPT CAPITAL S
+1D4AF ; NFKC_CF; 0074 # L& MATHEMATICAL SCRIPT CAPITAL T
+1D4B0 ; NFKC_CF; 0075 # L& MATHEMATICAL SCRIPT CAPITAL U
+1D4B1 ; NFKC_CF; 0076 # L& MATHEMATICAL SCRIPT CAPITAL V
+1D4B2 ; NFKC_CF; 0077 # L& MATHEMATICAL SCRIPT CAPITAL W
+1D4B3 ; NFKC_CF; 0078 # L& MATHEMATICAL SCRIPT CAPITAL X
+1D4B4 ; NFKC_CF; 0079 # L& MATHEMATICAL SCRIPT CAPITAL Y
+1D4B5 ; NFKC_CF; 007A # L& MATHEMATICAL SCRIPT CAPITAL Z
+1D4B6 ; NFKC_CF; 0061 # L& MATHEMATICAL SCRIPT SMALL A
+1D4B7 ; NFKC_CF; 0062 # L& MATHEMATICAL SCRIPT SMALL B
+1D4B8 ; NFKC_CF; 0063 # L& MATHEMATICAL SCRIPT SMALL C
+1D4B9 ; NFKC_CF; 0064 # L& MATHEMATICAL SCRIPT SMALL D
+1D4BB ; NFKC_CF; 0066 # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD ; NFKC_CF; 0068 # L& MATHEMATICAL SCRIPT SMALL H
+1D4BE ; NFKC_CF; 0069 # L& MATHEMATICAL SCRIPT SMALL I
+1D4BF ; NFKC_CF; 006A # L& MATHEMATICAL SCRIPT SMALL J
+1D4C0 ; NFKC_CF; 006B # L& MATHEMATICAL SCRIPT SMALL K
+1D4C1 ; NFKC_CF; 006C # L& MATHEMATICAL SCRIPT SMALL L
+1D4C2 ; NFKC_CF; 006D # L& MATHEMATICAL SCRIPT SMALL M
+1D4C3 ; NFKC_CF; 006E # L& MATHEMATICAL SCRIPT SMALL N
+1D4C5 ; NFKC_CF; 0070 # L& MATHEMATICAL SCRIPT SMALL P
+1D4C6 ; NFKC_CF; 0071 # L& MATHEMATICAL SCRIPT SMALL Q
+1D4C7 ; NFKC_CF; 0072 # L& MATHEMATICAL SCRIPT SMALL R
+1D4C8 ; NFKC_CF; 0073 # L& MATHEMATICAL SCRIPT SMALL S
+1D4C9 ; NFKC_CF; 0074 # L& MATHEMATICAL SCRIPT SMALL T
+1D4CA ; NFKC_CF; 0075 # L& MATHEMATICAL SCRIPT SMALL U
+1D4CB ; NFKC_CF; 0076 # L& MATHEMATICAL SCRIPT SMALL V
+1D4CC ; NFKC_CF; 0077 # L& MATHEMATICAL SCRIPT SMALL W
+1D4CD ; NFKC_CF; 0078 # L& MATHEMATICAL SCRIPT SMALL X
+1D4CE ; NFKC_CF; 0079 # L& MATHEMATICAL SCRIPT SMALL Y
+1D4CF ; NFKC_CF; 007A # L& MATHEMATICAL SCRIPT SMALL Z
+1D4D0 ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD SCRIPT CAPITAL A
+1D4D1 ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD SCRIPT CAPITAL B
+1D4D2 ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD SCRIPT CAPITAL C
+1D4D3 ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD SCRIPT CAPITAL D
+1D4D4 ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD SCRIPT CAPITAL E
+1D4D5 ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD SCRIPT CAPITAL F
+1D4D6 ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD SCRIPT CAPITAL G
+1D4D7 ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD SCRIPT CAPITAL H
+1D4D8 ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD SCRIPT CAPITAL I
+1D4D9 ; NFKC_CF; 006A # L& MATHEMATICAL BOLD SCRIPT CAPITAL J
+1D4DA ; NFKC_CF; 006B # L& MATHEMATICAL BOLD SCRIPT CAPITAL K
+1D4DB ; NFKC_CF; 006C # L& MATHEMATICAL BOLD SCRIPT CAPITAL L
+1D4DC ; NFKC_CF; 006D # L& MATHEMATICAL BOLD SCRIPT CAPITAL M
+1D4DD ; NFKC_CF; 006E # L& MATHEMATICAL BOLD SCRIPT CAPITAL N
+1D4DE ; NFKC_CF; 006F # L& MATHEMATICAL BOLD SCRIPT CAPITAL O
+1D4DF ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD SCRIPT CAPITAL P
+1D4E0 ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Q
+1D4E1 ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD SCRIPT CAPITAL R
+1D4E2 ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD SCRIPT CAPITAL S
+1D4E3 ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD SCRIPT CAPITAL T
+1D4E4 ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD SCRIPT CAPITAL U
+1D4E5 ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD SCRIPT CAPITAL V
+1D4E6 ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD SCRIPT CAPITAL W
+1D4E7 ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD SCRIPT CAPITAL X
+1D4E8 ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD SCRIPT CAPITAL Y
+1D4E9 ; NFKC_CF; 007A # L& MATHEMATICAL BOLD SCRIPT CAPITAL Z
+1D4EA ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD SCRIPT SMALL A
+1D4EB ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD SCRIPT SMALL B
+1D4EC ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD SCRIPT SMALL C
+1D4ED ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD SCRIPT SMALL D
+1D4EE ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD SCRIPT SMALL E
+1D4EF ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD SCRIPT SMALL F
+1D4F0 ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD SCRIPT SMALL G
+1D4F1 ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD SCRIPT SMALL H
+1D4F2 ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD SCRIPT SMALL I
+1D4F3 ; NFKC_CF; 006A # L& MATHEMATICAL BOLD SCRIPT SMALL J
+1D4F4 ; NFKC_CF; 006B # L& MATHEMATICAL BOLD SCRIPT SMALL K
+1D4F5 ; NFKC_CF; 006C # L& MATHEMATICAL BOLD SCRIPT SMALL L
+1D4F6 ; NFKC_CF; 006D # L& MATHEMATICAL BOLD SCRIPT SMALL M
+1D4F7 ; NFKC_CF; 006E # L& MATHEMATICAL BOLD SCRIPT SMALL N
+1D4F8 ; NFKC_CF; 006F # L& MATHEMATICAL BOLD SCRIPT SMALL O
+1D4F9 ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD SCRIPT SMALL P
+1D4FA ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD SCRIPT SMALL Q
+1D4FB ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD SCRIPT SMALL R
+1D4FC ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD SCRIPT SMALL S
+1D4FD ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD SCRIPT SMALL T
+1D4FE ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD SCRIPT SMALL U
+1D4FF ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD SCRIPT SMALL V
+1D500 ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD SCRIPT SMALL W
+1D501 ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD SCRIPT SMALL X
+1D502 ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD SCRIPT SMALL Y
+1D503 ; NFKC_CF; 007A # L& MATHEMATICAL BOLD SCRIPT SMALL Z
+1D504 ; NFKC_CF; 0061 # L& MATHEMATICAL FRAKTUR CAPITAL A
+1D505 ; NFKC_CF; 0062 # L& MATHEMATICAL FRAKTUR CAPITAL B
+1D507 ; NFKC_CF; 0064 # L& MATHEMATICAL FRAKTUR CAPITAL D
+1D508 ; NFKC_CF; 0065 # L& MATHEMATICAL FRAKTUR CAPITAL E
+1D509 ; NFKC_CF; 0066 # L& MATHEMATICAL FRAKTUR CAPITAL F
+1D50A ; NFKC_CF; 0067 # L& MATHEMATICAL FRAKTUR CAPITAL G
+1D50D ; NFKC_CF; 006A # L& MATHEMATICAL FRAKTUR CAPITAL J
+1D50E ; NFKC_CF; 006B # L& MATHEMATICAL FRAKTUR CAPITAL K
+1D50F ; NFKC_CF; 006C # L& MATHEMATICAL FRAKTUR CAPITAL L
+1D510 ; NFKC_CF; 006D # L& MATHEMATICAL FRAKTUR CAPITAL M
+1D511 ; NFKC_CF; 006E # L& MATHEMATICAL FRAKTUR CAPITAL N
+1D512 ; NFKC_CF; 006F # L& MATHEMATICAL FRAKTUR CAPITAL O
+1D513 ; NFKC_CF; 0070 # L& MATHEMATICAL FRAKTUR CAPITAL P
+1D514 ; NFKC_CF; 0071 # L& MATHEMATICAL FRAKTUR CAPITAL Q
+1D516 ; NFKC_CF; 0073 # L& MATHEMATICAL FRAKTUR CAPITAL S
+1D517 ; NFKC_CF; 0074 # L& MATHEMATICAL FRAKTUR CAPITAL T
+1D518 ; NFKC_CF; 0075 # L& MATHEMATICAL FRAKTUR CAPITAL U
+1D519 ; NFKC_CF; 0076 # L& MATHEMATICAL FRAKTUR CAPITAL V
+1D51A ; NFKC_CF; 0077 # L& MATHEMATICAL FRAKTUR CAPITAL W
+1D51B ; NFKC_CF; 0078 # L& MATHEMATICAL FRAKTUR CAPITAL X
+1D51C ; NFKC_CF; 0079 # L& MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E ; NFKC_CF; 0061 # L& MATHEMATICAL FRAKTUR SMALL A
+1D51F ; NFKC_CF; 0062 # L& MATHEMATICAL FRAKTUR SMALL B
+1D520 ; NFKC_CF; 0063 # L& MATHEMATICAL FRAKTUR SMALL C
+1D521 ; NFKC_CF; 0064 # L& MATHEMATICAL FRAKTUR SMALL D
+1D522 ; NFKC_CF; 0065 # L& MATHEMATICAL FRAKTUR SMALL E
+1D523 ; NFKC_CF; 0066 # L& MATHEMATICAL FRAKTUR SMALL F
+1D524 ; NFKC_CF; 0067 # L& MATHEMATICAL FRAKTUR SMALL G
+1D525 ; NFKC_CF; 0068 # L& MATHEMATICAL FRAKTUR SMALL H
+1D526 ; NFKC_CF; 0069 # L& MATHEMATICAL FRAKTUR SMALL I
+1D527 ; NFKC_CF; 006A # L& MATHEMATICAL FRAKTUR SMALL J
+1D528 ; NFKC_CF; 006B # L& MATHEMATICAL FRAKTUR SMALL K
+1D529 ; NFKC_CF; 006C # L& MATHEMATICAL FRAKTUR SMALL L
+1D52A ; NFKC_CF; 006D # L& MATHEMATICAL FRAKTUR SMALL M
+1D52B ; NFKC_CF; 006E # L& MATHEMATICAL FRAKTUR SMALL N
+1D52C ; NFKC_CF; 006F # L& MATHEMATICAL FRAKTUR SMALL O
+1D52D ; NFKC_CF; 0070 # L& MATHEMATICAL FRAKTUR SMALL P
+1D52E ; NFKC_CF; 0071 # L& MATHEMATICAL FRAKTUR SMALL Q
+1D52F ; NFKC_CF; 0072 # L& MATHEMATICAL FRAKTUR SMALL R
+1D530 ; NFKC_CF; 0073 # L& MATHEMATICAL FRAKTUR SMALL S
+1D531 ; NFKC_CF; 0074 # L& MATHEMATICAL FRAKTUR SMALL T
+1D532 ; NFKC_CF; 0075 # L& MATHEMATICAL FRAKTUR SMALL U
+1D533 ; NFKC_CF; 0076 # L& MATHEMATICAL FRAKTUR SMALL V
+1D534 ; NFKC_CF; 0077 # L& MATHEMATICAL FRAKTUR SMALL W
+1D535 ; NFKC_CF; 0078 # L& MATHEMATICAL FRAKTUR SMALL X
+1D536 ; NFKC_CF; 0079 # L& MATHEMATICAL FRAKTUR SMALL Y
+1D537 ; NFKC_CF; 007A # L& MATHEMATICAL FRAKTUR SMALL Z
+1D538 ; NFKC_CF; 0061 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL A
+1D539 ; NFKC_CF; 0062 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B ; NFKC_CF; 0064 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL D
+1D53C ; NFKC_CF; 0065 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL E
+1D53D ; NFKC_CF; 0066 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL F
+1D53E ; NFKC_CF; 0067 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540 ; NFKC_CF; 0069 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL I
+1D541 ; NFKC_CF; 006A # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL J
+1D542 ; NFKC_CF; 006B # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL K
+1D543 ; NFKC_CF; 006C # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL L
+1D544 ; NFKC_CF; 006D # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; NFKC_CF; 006F # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A ; NFKC_CF; 0073 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL S
+1D54B ; NFKC_CF; 0074 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL T
+1D54C ; NFKC_CF; 0075 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL U
+1D54D ; NFKC_CF; 0076 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL V
+1D54E ; NFKC_CF; 0077 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL W
+1D54F ; NFKC_CF; 0078 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL X
+1D550 ; NFKC_CF; 0079 # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552 ; NFKC_CF; 0061 # L& MATHEMATICAL DOUBLE-STRUCK SMALL A
+1D553 ; NFKC_CF; 0062 # L& MATHEMATICAL DOUBLE-STRUCK SMALL B
+1D554 ; NFKC_CF; 0063 # L& MATHEMATICAL DOUBLE-STRUCK SMALL C
+1D555 ; NFKC_CF; 0064 # L& MATHEMATICAL DOUBLE-STRUCK SMALL D
+1D556 ; NFKC_CF; 0065 # L& MATHEMATICAL DOUBLE-STRUCK SMALL E
+1D557 ; NFKC_CF; 0066 # L& MATHEMATICAL DOUBLE-STRUCK SMALL F
+1D558 ; NFKC_CF; 0067 # L& MATHEMATICAL DOUBLE-STRUCK SMALL G
+1D559 ; NFKC_CF; 0068 # L& MATHEMATICAL DOUBLE-STRUCK SMALL H
+1D55A ; NFKC_CF; 0069 # L& MATHEMATICAL DOUBLE-STRUCK SMALL I
+1D55B ; NFKC_CF; 006A # L& MATHEMATICAL DOUBLE-STRUCK SMALL J
+1D55C ; NFKC_CF; 006B # L& MATHEMATICAL DOUBLE-STRUCK SMALL K
+1D55D ; NFKC_CF; 006C # L& MATHEMATICAL DOUBLE-STRUCK SMALL L
+1D55E ; NFKC_CF; 006D # L& MATHEMATICAL DOUBLE-STRUCK SMALL M
+1D55F ; NFKC_CF; 006E # L& MATHEMATICAL DOUBLE-STRUCK SMALL N
+1D560 ; NFKC_CF; 006F # L& MATHEMATICAL DOUBLE-STRUCK SMALL O
+1D561 ; NFKC_CF; 0070 # L& MATHEMATICAL DOUBLE-STRUCK SMALL P
+1D562 ; NFKC_CF; 0071 # L& MATHEMATICAL DOUBLE-STRUCK SMALL Q
+1D563 ; NFKC_CF; 0072 # L& MATHEMATICAL DOUBLE-STRUCK SMALL R
+1D564 ; NFKC_CF; 0073 # L& MATHEMATICAL DOUBLE-STRUCK SMALL S
+1D565 ; NFKC_CF; 0074 # L& MATHEMATICAL DOUBLE-STRUCK SMALL T
+1D566 ; NFKC_CF; 0075 # L& MATHEMATICAL DOUBLE-STRUCK SMALL U
+1D567 ; NFKC_CF; 0076 # L& MATHEMATICAL DOUBLE-STRUCK SMALL V
+1D568 ; NFKC_CF; 0077 # L& MATHEMATICAL DOUBLE-STRUCK SMALL W
+1D569 ; NFKC_CF; 0078 # L& MATHEMATICAL DOUBLE-STRUCK SMALL X
+1D56A ; NFKC_CF; 0079 # L& MATHEMATICAL DOUBLE-STRUCK SMALL Y
+1D56B ; NFKC_CF; 007A # L& MATHEMATICAL DOUBLE-STRUCK SMALL Z
+1D56C ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL A
+1D56D ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL B
+1D56E ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL C
+1D56F ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL D
+1D570 ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL E
+1D571 ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL F
+1D572 ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL G
+1D573 ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL H
+1D574 ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL I
+1D575 ; NFKC_CF; 006A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL J
+1D576 ; NFKC_CF; 006B # L& MATHEMATICAL BOLD FRAKTUR CAPITAL K
+1D577 ; NFKC_CF; 006C # L& MATHEMATICAL BOLD FRAKTUR CAPITAL L
+1D578 ; NFKC_CF; 006D # L& MATHEMATICAL BOLD FRAKTUR CAPITAL M
+1D579 ; NFKC_CF; 006E # L& MATHEMATICAL BOLD FRAKTUR CAPITAL N
+1D57A ; NFKC_CF; 006F # L& MATHEMATICAL BOLD FRAKTUR CAPITAL O
+1D57B ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL P
+1D57C ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Q
+1D57D ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL R
+1D57E ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL S
+1D57F ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL T
+1D580 ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL U
+1D581 ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL V
+1D582 ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL W
+1D583 ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL X
+1D584 ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Y
+1D585 ; NFKC_CF; 007A # L& MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+1D586 ; NFKC_CF; 0061 # L& MATHEMATICAL BOLD FRAKTUR SMALL A
+1D587 ; NFKC_CF; 0062 # L& MATHEMATICAL BOLD FRAKTUR SMALL B
+1D588 ; NFKC_CF; 0063 # L& MATHEMATICAL BOLD FRAKTUR SMALL C
+1D589 ; NFKC_CF; 0064 # L& MATHEMATICAL BOLD FRAKTUR SMALL D
+1D58A ; NFKC_CF; 0065 # L& MATHEMATICAL BOLD FRAKTUR SMALL E
+1D58B ; NFKC_CF; 0066 # L& MATHEMATICAL BOLD FRAKTUR SMALL F
+1D58C ; NFKC_CF; 0067 # L& MATHEMATICAL BOLD FRAKTUR SMALL G
+1D58D ; NFKC_CF; 0068 # L& MATHEMATICAL BOLD FRAKTUR SMALL H
+1D58E ; NFKC_CF; 0069 # L& MATHEMATICAL BOLD FRAKTUR SMALL I
+1D58F ; NFKC_CF; 006A # L& MATHEMATICAL BOLD FRAKTUR SMALL J
+1D590 ; NFKC_CF; 006B # L& MATHEMATICAL BOLD FRAKTUR SMALL K
+1D591 ; NFKC_CF; 006C # L& MATHEMATICAL BOLD FRAKTUR SMALL L
+1D592 ; NFKC_CF; 006D # L& MATHEMATICAL BOLD FRAKTUR SMALL M
+1D593 ; NFKC_CF; 006E # L& MATHEMATICAL BOLD FRAKTUR SMALL N
+1D594 ; NFKC_CF; 006F # L& MATHEMATICAL BOLD FRAKTUR SMALL O
+1D595 ; NFKC_CF; 0070 # L& MATHEMATICAL BOLD FRAKTUR SMALL P
+1D596 ; NFKC_CF; 0071 # L& MATHEMATICAL BOLD FRAKTUR SMALL Q
+1D597 ; NFKC_CF; 0072 # L& MATHEMATICAL BOLD FRAKTUR SMALL R
+1D598 ; NFKC_CF; 0073 # L& MATHEMATICAL BOLD FRAKTUR SMALL S
+1D599 ; NFKC_CF; 0074 # L& MATHEMATICAL BOLD FRAKTUR SMALL T
+1D59A ; NFKC_CF; 0075 # L& MATHEMATICAL BOLD FRAKTUR SMALL U
+1D59B ; NFKC_CF; 0076 # L& MATHEMATICAL BOLD FRAKTUR SMALL V
+1D59C ; NFKC_CF; 0077 # L& MATHEMATICAL BOLD FRAKTUR SMALL W
+1D59D ; NFKC_CF; 0078 # L& MATHEMATICAL BOLD FRAKTUR SMALL X
+1D59E ; NFKC_CF; 0079 # L& MATHEMATICAL BOLD FRAKTUR SMALL Y
+1D59F ; NFKC_CF; 007A # L& MATHEMATICAL BOLD FRAKTUR SMALL Z
+1D5A0 ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF CAPITAL A
+1D5A1 ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF CAPITAL B
+1D5A2 ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF CAPITAL C
+1D5A3 ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF CAPITAL D
+1D5A4 ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF CAPITAL E
+1D5A5 ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF CAPITAL F
+1D5A6 ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF CAPITAL G
+1D5A7 ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF CAPITAL H
+1D5A8 ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF CAPITAL I
+1D5A9 ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF CAPITAL J
+1D5AA ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF CAPITAL K
+1D5AB ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF CAPITAL L
+1D5AC ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF CAPITAL M
+1D5AD ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF CAPITAL N
+1D5AE ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF CAPITAL O
+1D5AF ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF CAPITAL P
+1D5B0 ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF CAPITAL Q
+1D5B1 ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF CAPITAL R
+1D5B2 ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF CAPITAL S
+1D5B3 ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF CAPITAL T
+1D5B4 ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF CAPITAL U
+1D5B5 ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF CAPITAL V
+1D5B6 ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF CAPITAL W
+1D5B7 ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF CAPITAL X
+1D5B8 ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF CAPITAL Y
+1D5B9 ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF CAPITAL Z
+1D5BA ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF SMALL A
+1D5BB ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF SMALL B
+1D5BC ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF SMALL C
+1D5BD ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF SMALL D
+1D5BE ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF SMALL E
+1D5BF ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF SMALL F
+1D5C0 ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF SMALL G
+1D5C1 ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF SMALL H
+1D5C2 ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF SMALL I
+1D5C3 ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF SMALL J
+1D5C4 ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF SMALL K
+1D5C5 ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF SMALL L
+1D5C6 ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF SMALL M
+1D5C7 ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF SMALL N
+1D5C8 ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF SMALL O
+1D5C9 ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF SMALL P
+1D5CA ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF SMALL Q
+1D5CB ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF SMALL R
+1D5CC ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF SMALL S
+1D5CD ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF SMALL T
+1D5CE ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF SMALL U
+1D5CF ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF SMALL V
+1D5D0 ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF SMALL W
+1D5D1 ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF SMALL X
+1D5D2 ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF SMALL Y
+1D5D3 ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF SMALL Z
+1D5D4 ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+1D5D5 ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL B
+1D5D6 ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL C
+1D5D7 ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL D
+1D5D8 ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL E
+1D5D9 ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL F
+1D5DA ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL G
+1D5DB ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL H
+1D5DC ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL I
+1D5DD ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL J
+1D5DE ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL K
+1D5DF ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL L
+1D5E0 ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL M
+1D5E1 ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL N
+1D5E2 ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL O
+1D5E3 ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL P
+1D5E4 ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Q
+1D5E5 ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL R
+1D5E6 ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL S
+1D5E7 ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL T
+1D5E8 ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL U
+1D5E9 ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL V
+1D5EA ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL W
+1D5EB ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL X
+1D5EC ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Y
+1D5ED ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+1D5EE ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD SMALL A
+1D5EF ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD SMALL B
+1D5F0 ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD SMALL C
+1D5F1 ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD SMALL D
+1D5F2 ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD SMALL E
+1D5F3 ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD SMALL F
+1D5F4 ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD SMALL G
+1D5F5 ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD SMALL H
+1D5F6 ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD SMALL I
+1D5F7 ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF BOLD SMALL J
+1D5F8 ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF BOLD SMALL K
+1D5F9 ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF BOLD SMALL L
+1D5FA ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF BOLD SMALL M
+1D5FB ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF BOLD SMALL N
+1D5FC ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF BOLD SMALL O
+1D5FD ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD SMALL P
+1D5FE ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD SMALL Q
+1D5FF ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD SMALL R
+1D600 ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD SMALL S
+1D601 ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD SMALL T
+1D602 ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD SMALL U
+1D603 ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD SMALL V
+1D604 ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD SMALL W
+1D605 ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD SMALL X
+1D606 ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD SMALL Y
+1D607 ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF BOLD SMALL Z
+1D608 ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL A
+1D609 ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL B
+1D60A ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL C
+1D60B ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL D
+1D60C ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL E
+1D60D ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL F
+1D60E ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL G
+1D60F ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL H
+1D610 ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL I
+1D611 ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL J
+1D612 ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL K
+1D613 ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL L
+1D614 ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL M
+1D615 ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL N
+1D616 ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL O
+1D617 ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL P
+1D618 ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q
+1D619 ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL R
+1D61A ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL S
+1D61B ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL T
+1D61C ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL U
+1D61D ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL V
+1D61E ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL W
+1D61F ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL X
+1D620 ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y
+1D621 ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+1D622 ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL A
+1D623 ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL B
+1D624 ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL C
+1D625 ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL D
+1D626 ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL E
+1D627 ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL F
+1D628 ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL G
+1D629 ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL H
+1D62A ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL I
+1D62B ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF ITALIC SMALL J
+1D62C ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF ITALIC SMALL K
+1D62D ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF ITALIC SMALL L
+1D62E ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF ITALIC SMALL M
+1D62F ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF ITALIC SMALL N
+1D630 ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF ITALIC SMALL O
+1D631 ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL P
+1D632 ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL Q
+1D633 ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL R
+1D634 ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL S
+1D635 ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL T
+1D636 ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL U
+1D637 ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL V
+1D638 ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL W
+1D639 ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL X
+1D63A ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF ITALIC SMALL Y
+1D63B ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+1D63C ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A
+1D63D ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B
+1D63E ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C
+1D63F ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D
+1D640 ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E
+1D641 ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F
+1D642 ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G
+1D643 ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H
+1D644 ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I
+1D645 ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J
+1D646 ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K
+1D647 ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L
+1D648 ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M
+1D649 ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N
+1D64A ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O
+1D64B ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P
+1D64C ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q
+1D64D ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R
+1D64E ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S
+1D64F ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T
+1D650 ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U
+1D651 ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V
+1D652 ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W
+1D653 ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X
+1D654 ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y
+1D655 ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+1D656 ; NFKC_CF; 0061 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A
+1D657 ; NFKC_CF; 0062 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B
+1D658 ; NFKC_CF; 0063 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C
+1D659 ; NFKC_CF; 0064 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D
+1D65A ; NFKC_CF; 0065 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E
+1D65B ; NFKC_CF; 0066 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F
+1D65C ; NFKC_CF; 0067 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G
+1D65D ; NFKC_CF; 0068 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H
+1D65E ; NFKC_CF; 0069 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I
+1D65F ; NFKC_CF; 006A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
+1D660 ; NFKC_CF; 006B # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K
+1D661 ; NFKC_CF; 006C # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L
+1D662 ; NFKC_CF; 006D # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M
+1D663 ; NFKC_CF; 006E # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N
+1D664 ; NFKC_CF; 006F # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O
+1D665 ; NFKC_CF; 0070 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P
+1D666 ; NFKC_CF; 0071 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q
+1D667 ; NFKC_CF; 0072 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R
+1D668 ; NFKC_CF; 0073 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S
+1D669 ; NFKC_CF; 0074 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T
+1D66A ; NFKC_CF; 0075 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U
+1D66B ; NFKC_CF; 0076 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V
+1D66C ; NFKC_CF; 0077 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W
+1D66D ; NFKC_CF; 0078 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X
+1D66E ; NFKC_CF; 0079 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y
+1D66F ; NFKC_CF; 007A # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+1D670 ; NFKC_CF; 0061 # L& MATHEMATICAL MONOSPACE CAPITAL A
+1D671 ; NFKC_CF; 0062 # L& MATHEMATICAL MONOSPACE CAPITAL B
+1D672 ; NFKC_CF; 0063 # L& MATHEMATICAL MONOSPACE CAPITAL C
+1D673 ; NFKC_CF; 0064 # L& MATHEMATICAL MONOSPACE CAPITAL D
+1D674 ; NFKC_CF; 0065 # L& MATHEMATICAL MONOSPACE CAPITAL E
+1D675 ; NFKC_CF; 0066 # L& MATHEMATICAL MONOSPACE CAPITAL F
+1D676 ; NFKC_CF; 0067 # L& MATHEMATICAL MONOSPACE CAPITAL G
+1D677 ; NFKC_CF; 0068 # L& MATHEMATICAL MONOSPACE CAPITAL H
+1D678 ; NFKC_CF; 0069 # L& MATHEMATICAL MONOSPACE CAPITAL I
+1D679 ; NFKC_CF; 006A # L& MATHEMATICAL MONOSPACE CAPITAL J
+1D67A ; NFKC_CF; 006B # L& MATHEMATICAL MONOSPACE CAPITAL K
+1D67B ; NFKC_CF; 006C # L& MATHEMATICAL MONOSPACE CAPITAL L
+1D67C ; NFKC_CF; 006D # L& MATHEMATICAL MONOSPACE CAPITAL M
+1D67D ; NFKC_CF; 006E # L& MATHEMATICAL MONOSPACE CAPITAL N
+1D67E ; NFKC_CF; 006F # L& MATHEMATICAL MONOSPACE CAPITAL O
+1D67F ; NFKC_CF; 0070 # L& MATHEMATICAL MONOSPACE CAPITAL P
+1D680 ; NFKC_CF; 0071 # L& MATHEMATICAL MONOSPACE CAPITAL Q
+1D681 ; NFKC_CF; 0072 # L& MATHEMATICAL MONOSPACE CAPITAL R
+1D682 ; NFKC_CF; 0073 # L& MATHEMATICAL MONOSPACE CAPITAL S
+1D683 ; NFKC_CF; 0074 # L& MATHEMATICAL MONOSPACE CAPITAL T
+1D684 ; NFKC_CF; 0075 # L& MATHEMATICAL MONOSPACE CAPITAL U
+1D685 ; NFKC_CF; 0076 # L& MATHEMATICAL MONOSPACE CAPITAL V
+1D686 ; NFKC_CF; 0077 # L& MATHEMATICAL MONOSPACE CAPITAL W
+1D687 ; NFKC_CF; 0078 # L& MATHEMATICAL MONOSPACE CAPITAL X
+1D688 ; NFKC_CF; 0079 # L& MATHEMATICAL MONOSPACE CAPITAL Y
+1D689 ; NFKC_CF; 007A # L& MATHEMATICAL MONOSPACE CAPITAL Z
+1D68A ; NFKC_CF; 0061 # L& MATHEMATICAL MONOSPACE SMALL A
+1D68B ; NFKC_CF; 0062 # L& MATHEMATICAL MONOSPACE SMALL B
+1D68C ; NFKC_CF; 0063 # L& MATHEMATICAL MONOSPACE SMALL C
+1D68D ; NFKC_CF; 0064 # L& MATHEMATICAL MONOSPACE SMALL D
+1D68E ; NFKC_CF; 0065 # L& MATHEMATICAL MONOSPACE SMALL E
+1D68F ; NFKC_CF; 0066 # L& MATHEMATICAL MONOSPACE SMALL F
+1D690 ; NFKC_CF; 0067 # L& MATHEMATICAL MONOSPACE SMALL G
+1D691 ; NFKC_CF; 0068 # L& MATHEMATICAL MONOSPACE SMALL H
+1D692 ; NFKC_CF; 0069 # L& MATHEMATICAL MONOSPACE SMALL I
+1D693 ; NFKC_CF; 006A # L& MATHEMATICAL MONOSPACE SMALL J
+1D694 ; NFKC_CF; 006B # L& MATHEMATICAL MONOSPACE SMALL K
+1D695 ; NFKC_CF; 006C # L& MATHEMATICAL MONOSPACE SMALL L
+1D696 ; NFKC_CF; 006D # L& MATHEMATICAL MONOSPACE SMALL M
+1D697 ; NFKC_CF; 006E # L& MATHEMATICAL MONOSPACE SMALL N
+1D698 ; NFKC_CF; 006F # L& MATHEMATICAL MONOSPACE SMALL O
+1D699 ; NFKC_CF; 0070 # L& MATHEMATICAL MONOSPACE SMALL P
+1D69A ; NFKC_CF; 0071 # L& MATHEMATICAL MONOSPACE SMALL Q
+1D69B ; NFKC_CF; 0072 # L& MATHEMATICAL MONOSPACE SMALL R
+1D69C ; NFKC_CF; 0073 # L& MATHEMATICAL MONOSPACE SMALL S
+1D69D ; NFKC_CF; 0074 # L& MATHEMATICAL MONOSPACE SMALL T
+1D69E ; NFKC_CF; 0075 # L& MATHEMATICAL MONOSPACE SMALL U
+1D69F ; NFKC_CF; 0076 # L& MATHEMATICAL MONOSPACE SMALL V
+1D6A0 ; NFKC_CF; 0077 # L& MATHEMATICAL MONOSPACE SMALL W
+1D6A1 ; NFKC_CF; 0078 # L& MATHEMATICAL MONOSPACE SMALL X
+1D6A2 ; NFKC_CF; 0079 # L& MATHEMATICAL MONOSPACE SMALL Y
+1D6A3 ; NFKC_CF; 007A # L& MATHEMATICAL MONOSPACE SMALL Z
+1D6A4 ; NFKC_CF; 0131 # L& MATHEMATICAL ITALIC SMALL DOTLESS I
+1D6A5 ; NFKC_CF; 0237 # L& MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8 ; NFKC_CF; 03B1 # L& MATHEMATICAL BOLD CAPITAL ALPHA
+1D6A9 ; NFKC_CF; 03B2 # L& MATHEMATICAL BOLD CAPITAL BETA
+1D6AA ; NFKC_CF; 03B3 # L& MATHEMATICAL BOLD CAPITAL GAMMA
+1D6AB ; NFKC_CF; 03B4 # L& MATHEMATICAL BOLD CAPITAL DELTA
+1D6AC ; NFKC_CF; 03B5 # L& MATHEMATICAL BOLD CAPITAL EPSILON
+1D6AD ; NFKC_CF; 03B6 # L& MATHEMATICAL BOLD CAPITAL ZETA
+1D6AE ; NFKC_CF; 03B7 # L& MATHEMATICAL BOLD CAPITAL ETA
+1D6AF ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA
+1D6B0 ; NFKC_CF; 03B9 # L& MATHEMATICAL BOLD CAPITAL IOTA
+1D6B1 ; NFKC_CF; 03BA # L& MATHEMATICAL BOLD CAPITAL KAPPA
+1D6B2 ; NFKC_CF; 03BB # L& MATHEMATICAL BOLD CAPITAL LAMDA
+1D6B3 ; NFKC_CF; 03BC # L& MATHEMATICAL BOLD CAPITAL MU
+1D6B4 ; NFKC_CF; 03BD # L& MATHEMATICAL BOLD CAPITAL NU
+1D6B5 ; NFKC_CF; 03BE # L& MATHEMATICAL BOLD CAPITAL XI
+1D6B6 ; NFKC_CF; 03BF # L& MATHEMATICAL BOLD CAPITAL OMICRON
+1D6B7 ; NFKC_CF; 03C0 # L& MATHEMATICAL BOLD CAPITAL PI
+1D6B8 ; NFKC_CF; 03C1 # L& MATHEMATICAL BOLD CAPITAL RHO
+1D6B9 ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD CAPITAL THETA SYMBOL
+1D6BA ; NFKC_CF; 03C3 # L& MATHEMATICAL BOLD CAPITAL SIGMA
+1D6BB ; NFKC_CF; 03C4 # L& MATHEMATICAL BOLD CAPITAL TAU
+1D6BC ; NFKC_CF; 03C5 # L& MATHEMATICAL BOLD CAPITAL UPSILON
+1D6BD ; NFKC_CF; 03C6 # L& MATHEMATICAL BOLD CAPITAL PHI
+1D6BE ; NFKC_CF; 03C7 # L& MATHEMATICAL BOLD CAPITAL CHI
+1D6BF ; NFKC_CF; 03C8 # L& MATHEMATICAL BOLD CAPITAL PSI
+1D6C0 ; NFKC_CF; 03C9 # L& MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; NFKC_CF; 2207 # Sm MATHEMATICAL BOLD NABLA
+1D6C2 ; NFKC_CF; 03B1 # L& MATHEMATICAL BOLD SMALL ALPHA
+1D6C3 ; NFKC_CF; 03B2 # L& MATHEMATICAL BOLD SMALL BETA
+1D6C4 ; NFKC_CF; 03B3 # L& MATHEMATICAL BOLD SMALL GAMMA
+1D6C5 ; NFKC_CF; 03B4 # L& MATHEMATICAL BOLD SMALL DELTA
+1D6C6 ; NFKC_CF; 03B5 # L& MATHEMATICAL BOLD SMALL EPSILON
+1D6C7 ; NFKC_CF; 03B6 # L& MATHEMATICAL BOLD SMALL ZETA
+1D6C8 ; NFKC_CF; 03B7 # L& MATHEMATICAL BOLD SMALL ETA
+1D6C9 ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD SMALL THETA
+1D6CA ; NFKC_CF; 03B9 # L& MATHEMATICAL BOLD SMALL IOTA
+1D6CB ; NFKC_CF; 03BA # L& MATHEMATICAL BOLD SMALL KAPPA
+1D6CC ; NFKC_CF; 03BB # L& MATHEMATICAL BOLD SMALL LAMDA
+1D6CD ; NFKC_CF; 03BC # L& MATHEMATICAL BOLD SMALL MU
+1D6CE ; NFKC_CF; 03BD # L& MATHEMATICAL BOLD SMALL NU
+1D6CF ; NFKC_CF; 03BE # L& MATHEMATICAL BOLD SMALL XI
+1D6D0 ; NFKC_CF; 03BF # L& MATHEMATICAL BOLD SMALL OMICRON
+1D6D1 ; NFKC_CF; 03C0 # L& MATHEMATICAL BOLD SMALL PI
+1D6D2 ; NFKC_CF; 03C1 # L& MATHEMATICAL BOLD SMALL RHO
+1D6D3..1D6D4 ; NFKC_CF; 03C3 # L& [2] MATHEMATICAL BOLD SMALL FINAL SIGMA..MATHEMATICAL BOLD SMALL SIGMA
+1D6D5 ; NFKC_CF; 03C4 # L& MATHEMATICAL BOLD SMALL TAU
+1D6D6 ; NFKC_CF; 03C5 # L& MATHEMATICAL BOLD SMALL UPSILON
+1D6D7 ; NFKC_CF; 03C6 # L& MATHEMATICAL BOLD SMALL PHI
+1D6D8 ; NFKC_CF; 03C7 # L& MATHEMATICAL BOLD SMALL CHI
+1D6D9 ; NFKC_CF; 03C8 # L& MATHEMATICAL BOLD SMALL PSI
+1D6DA ; NFKC_CF; 03C9 # L& MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; NFKC_CF; 2202 # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC ; NFKC_CF; 03B5 # L& MATHEMATICAL BOLD EPSILON SYMBOL
+1D6DD ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD THETA SYMBOL
+1D6DE ; NFKC_CF; 03BA # L& MATHEMATICAL BOLD KAPPA SYMBOL
+1D6DF ; NFKC_CF; 03C6 # L& MATHEMATICAL BOLD PHI SYMBOL
+1D6E0 ; NFKC_CF; 03C1 # L& MATHEMATICAL BOLD RHO SYMBOL
+1D6E1 ; NFKC_CF; 03C0 # L& MATHEMATICAL BOLD PI SYMBOL
+1D6E2 ; NFKC_CF; 03B1 # L& MATHEMATICAL ITALIC CAPITAL ALPHA
+1D6E3 ; NFKC_CF; 03B2 # L& MATHEMATICAL ITALIC CAPITAL BETA
+1D6E4 ; NFKC_CF; 03B3 # L& MATHEMATICAL ITALIC CAPITAL GAMMA
+1D6E5 ; NFKC_CF; 03B4 # L& MATHEMATICAL ITALIC CAPITAL DELTA
+1D6E6 ; NFKC_CF; 03B5 # L& MATHEMATICAL ITALIC CAPITAL EPSILON
+1D6E7 ; NFKC_CF; 03B6 # L& MATHEMATICAL ITALIC CAPITAL ZETA
+1D6E8 ; NFKC_CF; 03B7 # L& MATHEMATICAL ITALIC CAPITAL ETA
+1D6E9 ; NFKC_CF; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA
+1D6EA ; NFKC_CF; 03B9 # L& MATHEMATICAL ITALIC CAPITAL IOTA
+1D6EB ; NFKC_CF; 03BA # L& MATHEMATICAL ITALIC CAPITAL KAPPA
+1D6EC ; NFKC_CF; 03BB # L& MATHEMATICAL ITALIC CAPITAL LAMDA
+1D6ED ; NFKC_CF; 03BC # L& MATHEMATICAL ITALIC CAPITAL MU
+1D6EE ; NFKC_CF; 03BD # L& MATHEMATICAL ITALIC CAPITAL NU
+1D6EF ; NFKC_CF; 03BE # L& MATHEMATICAL ITALIC CAPITAL XI
+1D6F0 ; NFKC_CF; 03BF # L& MATHEMATICAL ITALIC CAPITAL OMICRON
+1D6F1 ; NFKC_CF; 03C0 # L& MATHEMATICAL ITALIC CAPITAL PI
+1D6F2 ; NFKC_CF; 03C1 # L& MATHEMATICAL ITALIC CAPITAL RHO
+1D6F3 ; NFKC_CF; 03B8 # L& MATHEMATICAL ITALIC CAPITAL THETA SYMBOL
+1D6F4 ; NFKC_CF; 03C3 # L& MATHEMATICAL ITALIC CAPITAL SIGMA
+1D6F5 ; NFKC_CF; 03C4 # L& MATHEMATICAL ITALIC CAPITAL TAU
+1D6F6 ; NFKC_CF; 03C5 # L& MATHEMATICAL ITALIC CAPITAL UPSILON
+1D6F7 ; NFKC_CF; 03C6 # L& MATHEMATICAL ITALIC CAPITAL PHI
+1D6F8 ; NFKC_CF; 03C7 # L& MATHEMATICAL ITALIC CAPITAL CHI
+1D6F9 ; NFKC_CF; 03C8 # L& MATHEMATICAL ITALIC CAPITAL PSI
+1D6FA ; NFKC_CF; 03C9 # L& MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; NFKC_CF; 2207 # Sm MATHEMATICAL ITALIC NABLA
+1D6FC ; NFKC_CF; 03B1 # L& MATHEMATICAL ITALIC SMALL ALPHA
+1D6FD ; NFKC_CF; 03B2 # L& MATHEMATICAL ITALIC SMALL BETA
+1D6FE ; NFKC_CF; 03B3 # L& MATHEMATICAL ITALIC SMALL GAMMA
+1D6FF ; NFKC_CF; 03B4 # L& MATHEMATICAL ITALIC SMALL DELTA
+1D700 ; NFKC_CF; 03B5 # L& MATHEMATICAL ITALIC SMALL EPSILON
+1D701 ; NFKC_CF; 03B6 # L& MATHEMATICAL ITALIC SMALL ZETA
+1D702 ; NFKC_CF; 03B7 # L& MATHEMATICAL ITALIC SMALL ETA
+1D703 ; NFKC_CF; 03B8 # L& MATHEMATICAL ITALIC SMALL THETA
+1D704 ; NFKC_CF; 03B9 # L& MATHEMATICAL ITALIC SMALL IOTA
+1D705 ; NFKC_CF; 03BA # L& MATHEMATICAL ITALIC SMALL KAPPA
+1D706 ; NFKC_CF; 03BB # L& MATHEMATICAL ITALIC SMALL LAMDA
+1D707 ; NFKC_CF; 03BC # L& MATHEMATICAL ITALIC SMALL MU
+1D708 ; NFKC_CF; 03BD # L& MATHEMATICAL ITALIC SMALL NU
+1D709 ; NFKC_CF; 03BE # L& MATHEMATICAL ITALIC SMALL XI
+1D70A ; NFKC_CF; 03BF # L& MATHEMATICAL ITALIC SMALL OMICRON
+1D70B ; NFKC_CF; 03C0 # L& MATHEMATICAL ITALIC SMALL PI
+1D70C ; NFKC_CF; 03C1 # L& MATHEMATICAL ITALIC SMALL RHO
+1D70D..1D70E ; NFKC_CF; 03C3 # L& [2] MATHEMATICAL ITALIC SMALL FINAL SIGMA..MATHEMATICAL ITALIC SMALL SIGMA
+1D70F ; NFKC_CF; 03C4 # L& MATHEMATICAL ITALIC SMALL TAU
+1D710 ; NFKC_CF; 03C5 # L& MATHEMATICAL ITALIC SMALL UPSILON
+1D711 ; NFKC_CF; 03C6 # L& MATHEMATICAL ITALIC SMALL PHI
+1D712 ; NFKC_CF; 03C7 # L& MATHEMATICAL ITALIC SMALL CHI
+1D713 ; NFKC_CF; 03C8 # L& MATHEMATICAL ITALIC SMALL PSI
+1D714 ; NFKC_CF; 03C9 # L& MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; NFKC_CF; 2202 # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716 ; NFKC_CF; 03B5 # L& MATHEMATICAL ITALIC EPSILON SYMBOL
+1D717 ; NFKC_CF; 03B8 # L& MATHEMATICAL ITALIC THETA SYMBOL
+1D718 ; NFKC_CF; 03BA # L& MATHEMATICAL ITALIC KAPPA SYMBOL
+1D719 ; NFKC_CF; 03C6 # L& MATHEMATICAL ITALIC PHI SYMBOL
+1D71A ; NFKC_CF; 03C1 # L& MATHEMATICAL ITALIC RHO SYMBOL
+1D71B ; NFKC_CF; 03C0 # L& MATHEMATICAL ITALIC PI SYMBOL
+1D71C ; NFKC_CF; 03B1 # L& MATHEMATICAL BOLD ITALIC CAPITAL ALPHA
+1D71D ; NFKC_CF; 03B2 # L& MATHEMATICAL BOLD ITALIC CAPITAL BETA
+1D71E ; NFKC_CF; 03B3 # L& MATHEMATICAL BOLD ITALIC CAPITAL GAMMA
+1D71F ; NFKC_CF; 03B4 # L& MATHEMATICAL BOLD ITALIC CAPITAL DELTA
+1D720 ; NFKC_CF; 03B5 # L& MATHEMATICAL BOLD ITALIC CAPITAL EPSILON
+1D721 ; NFKC_CF; 03B6 # L& MATHEMATICAL BOLD ITALIC CAPITAL ZETA
+1D722 ; NFKC_CF; 03B7 # L& MATHEMATICAL BOLD ITALIC CAPITAL ETA
+1D723 ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA
+1D724 ; NFKC_CF; 03B9 # L& MATHEMATICAL BOLD ITALIC CAPITAL IOTA
+1D725 ; NFKC_CF; 03BA # L& MATHEMATICAL BOLD ITALIC CAPITAL KAPPA
+1D726 ; NFKC_CF; 03BB # L& MATHEMATICAL BOLD ITALIC CAPITAL LAMDA
+1D727 ; NFKC_CF; 03BC # L& MATHEMATICAL BOLD ITALIC CAPITAL MU
+1D728 ; NFKC_CF; 03BD # L& MATHEMATICAL BOLD ITALIC CAPITAL NU
+1D729 ; NFKC_CF; 03BE # L& MATHEMATICAL BOLD ITALIC CAPITAL XI
+1D72A ; NFKC_CF; 03BF # L& MATHEMATICAL BOLD ITALIC CAPITAL OMICRON
+1D72B ; NFKC_CF; 03C0 # L& MATHEMATICAL BOLD ITALIC CAPITAL PI
+1D72C ; NFKC_CF; 03C1 # L& MATHEMATICAL BOLD ITALIC CAPITAL RHO
+1D72D ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL
+1D72E ; NFKC_CF; 03C3 # L& MATHEMATICAL BOLD ITALIC CAPITAL SIGMA
+1D72F ; NFKC_CF; 03C4 # L& MATHEMATICAL BOLD ITALIC CAPITAL TAU
+1D730 ; NFKC_CF; 03C5 # L& MATHEMATICAL BOLD ITALIC CAPITAL UPSILON
+1D731 ; NFKC_CF; 03C6 # L& MATHEMATICAL BOLD ITALIC CAPITAL PHI
+1D732 ; NFKC_CF; 03C7 # L& MATHEMATICAL BOLD ITALIC CAPITAL CHI
+1D733 ; NFKC_CF; 03C8 # L& MATHEMATICAL BOLD ITALIC CAPITAL PSI
+1D734 ; NFKC_CF; 03C9 # L& MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; NFKC_CF; 2207 # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736 ; NFKC_CF; 03B1 # L& MATHEMATICAL BOLD ITALIC SMALL ALPHA
+1D737 ; NFKC_CF; 03B2 # L& MATHEMATICAL BOLD ITALIC SMALL BETA
+1D738 ; NFKC_CF; 03B3 # L& MATHEMATICAL BOLD ITALIC SMALL GAMMA
+1D739 ; NFKC_CF; 03B4 # L& MATHEMATICAL BOLD ITALIC SMALL DELTA
+1D73A ; NFKC_CF; 03B5 # L& MATHEMATICAL BOLD ITALIC SMALL EPSILON
+1D73B ; NFKC_CF; 03B6 # L& MATHEMATICAL BOLD ITALIC SMALL ZETA
+1D73C ; NFKC_CF; 03B7 # L& MATHEMATICAL BOLD ITALIC SMALL ETA
+1D73D ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD ITALIC SMALL THETA
+1D73E ; NFKC_CF; 03B9 # L& MATHEMATICAL BOLD ITALIC SMALL IOTA
+1D73F ; NFKC_CF; 03BA # L& MATHEMATICAL BOLD ITALIC SMALL KAPPA
+1D740 ; NFKC_CF; 03BB # L& MATHEMATICAL BOLD ITALIC SMALL LAMDA
+1D741 ; NFKC_CF; 03BC # L& MATHEMATICAL BOLD ITALIC SMALL MU
+1D742 ; NFKC_CF; 03BD # L& MATHEMATICAL BOLD ITALIC SMALL NU
+1D743 ; NFKC_CF; 03BE # L& MATHEMATICAL BOLD ITALIC SMALL XI
+1D744 ; NFKC_CF; 03BF # L& MATHEMATICAL BOLD ITALIC SMALL OMICRON
+1D745 ; NFKC_CF; 03C0 # L& MATHEMATICAL BOLD ITALIC SMALL PI
+1D746 ; NFKC_CF; 03C1 # L& MATHEMATICAL BOLD ITALIC SMALL RHO
+1D747..1D748 ; NFKC_CF; 03C3 # L& [2] MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA..MATHEMATICAL BOLD ITALIC SMALL SIGMA
+1D749 ; NFKC_CF; 03C4 # L& MATHEMATICAL BOLD ITALIC SMALL TAU
+1D74A ; NFKC_CF; 03C5 # L& MATHEMATICAL BOLD ITALIC SMALL UPSILON
+1D74B ; NFKC_CF; 03C6 # L& MATHEMATICAL BOLD ITALIC SMALL PHI
+1D74C ; NFKC_CF; 03C7 # L& MATHEMATICAL BOLD ITALIC SMALL CHI
+1D74D ; NFKC_CF; 03C8 # L& MATHEMATICAL BOLD ITALIC SMALL PSI
+1D74E ; NFKC_CF; 03C9 # L& MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; NFKC_CF; 2202 # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750 ; NFKC_CF; 03B5 # L& MATHEMATICAL BOLD ITALIC EPSILON SYMBOL
+1D751 ; NFKC_CF; 03B8 # L& MATHEMATICAL BOLD ITALIC THETA SYMBOL
+1D752 ; NFKC_CF; 03BA # L& MATHEMATICAL BOLD ITALIC KAPPA SYMBOL
+1D753 ; NFKC_CF; 03C6 # L& MATHEMATICAL BOLD ITALIC PHI SYMBOL
+1D754 ; NFKC_CF; 03C1 # L& MATHEMATICAL BOLD ITALIC RHO SYMBOL
+1D755 ; NFKC_CF; 03C0 # L& MATHEMATICAL BOLD ITALIC PI SYMBOL
+1D756 ; NFKC_CF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA
+1D757 ; NFKC_CF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA
+1D758 ; NFKC_CF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA
+1D759 ; NFKC_CF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA
+1D75A ; NFKC_CF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON
+1D75B ; NFKC_CF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA
+1D75C ; NFKC_CF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA
+1D75D ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA
+1D75E ; NFKC_CF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA
+1D75F ; NFKC_CF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA
+1D760 ; NFKC_CF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA
+1D761 ; NFKC_CF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL MU
+1D762 ; NFKC_CF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL NU
+1D763 ; NFKC_CF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL XI
+1D764 ; NFKC_CF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON
+1D765 ; NFKC_CF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PI
+1D766 ; NFKC_CF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO
+1D767 ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL
+1D768 ; NFKC_CF; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA
+1D769 ; NFKC_CF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU
+1D76A ; NFKC_CF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON
+1D76B ; NFKC_CF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI
+1D76C ; NFKC_CF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI
+1D76D ; NFKC_CF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI
+1D76E ; NFKC_CF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; NFKC_CF; 2207 # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770 ; NFKC_CF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA
+1D771 ; NFKC_CF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD SMALL BETA
+1D772 ; NFKC_CF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA
+1D773 ; NFKC_CF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD SMALL DELTA
+1D774 ; NFKC_CF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON
+1D775 ; NFKC_CF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD SMALL ZETA
+1D776 ; NFKC_CF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD SMALL ETA
+1D777 ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD SMALL THETA
+1D778 ; NFKC_CF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD SMALL IOTA
+1D779 ; NFKC_CF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA
+1D77A ; NFKC_CF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA
+1D77B ; NFKC_CF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD SMALL MU
+1D77C ; NFKC_CF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD SMALL NU
+1D77D ; NFKC_CF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD SMALL XI
+1D77E ; NFKC_CF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON
+1D77F ; NFKC_CF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD SMALL PI
+1D780 ; NFKC_CF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD SMALL RHO
+1D781..1D782 ; NFKC_CF; 03C3 # L& [2] MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA..MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA
+1D783 ; NFKC_CF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD SMALL TAU
+1D784 ; NFKC_CF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON
+1D785 ; NFKC_CF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD SMALL PHI
+1D786 ; NFKC_CF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD SMALL CHI
+1D787 ; NFKC_CF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD SMALL PSI
+1D788 ; NFKC_CF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; NFKC_CF; 2202 # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A ; NFKC_CF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL
+1D78B ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL
+1D78C ; NFKC_CF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL
+1D78D ; NFKC_CF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL
+1D78E ; NFKC_CF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL
+1D78F ; NFKC_CF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+1D790 ; NFKC_CF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA
+1D791 ; NFKC_CF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA
+1D792 ; NFKC_CF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA
+1D793 ; NFKC_CF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA
+1D794 ; NFKC_CF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON
+1D795 ; NFKC_CF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA
+1D796 ; NFKC_CF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA
+1D797 ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA
+1D798 ; NFKC_CF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA
+1D799 ; NFKC_CF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA
+1D79A ; NFKC_CF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA
+1D79B ; NFKC_CF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU
+1D79C ; NFKC_CF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU
+1D79D ; NFKC_CF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI
+1D79E ; NFKC_CF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON
+1D79F ; NFKC_CF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI
+1D7A0 ; NFKC_CF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO
+1D7A1 ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL
+1D7A2 ; NFKC_CF; 03C3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA
+1D7A3 ; NFKC_CF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU
+1D7A4 ; NFKC_CF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON
+1D7A5 ; NFKC_CF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI
+1D7A6 ; NFKC_CF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI
+1D7A7 ; NFKC_CF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI
+1D7A8 ; NFKC_CF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; NFKC_CF; 2207 # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA ; NFKC_CF; 03B1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA
+1D7AB ; NFKC_CF; 03B2 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA
+1D7AC ; NFKC_CF; 03B3 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA
+1D7AD ; NFKC_CF; 03B4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA
+1D7AE ; NFKC_CF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON
+1D7AF ; NFKC_CF; 03B6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA
+1D7B0 ; NFKC_CF; 03B7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA
+1D7B1 ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA
+1D7B2 ; NFKC_CF; 03B9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA
+1D7B3 ; NFKC_CF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA
+1D7B4 ; NFKC_CF; 03BB # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA
+1D7B5 ; NFKC_CF; 03BC # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU
+1D7B6 ; NFKC_CF; 03BD # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU
+1D7B7 ; NFKC_CF; 03BE # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI
+1D7B8 ; NFKC_CF; 03BF # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON
+1D7B9 ; NFKC_CF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI
+1D7BA ; NFKC_CF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO
+1D7BB..1D7BC ; NFKC_CF; 03C3 # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA
+1D7BD ; NFKC_CF; 03C4 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU
+1D7BE ; NFKC_CF; 03C5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON
+1D7BF ; NFKC_CF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI
+1D7C0 ; NFKC_CF; 03C7 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI
+1D7C1 ; NFKC_CF; 03C8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI
+1D7C2 ; NFKC_CF; 03C9 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; NFKC_CF; 2202 # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4 ; NFKC_CF; 03B5 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL
+1D7C5 ; NFKC_CF; 03B8 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL
+1D7C6 ; NFKC_CF; 03BA # L& MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL
+1D7C7 ; NFKC_CF; 03C6 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL
+1D7C8 ; NFKC_CF; 03C1 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL
+1D7C9 ; NFKC_CF; 03C0 # L& MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CA..1D7CB ; NFKC_CF; 03DD # L& [2] MATHEMATICAL BOLD CAPITAL DIGAMMA..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE ; NFKC_CF; 0030 # Nd MATHEMATICAL BOLD DIGIT ZERO
+1D7CF ; NFKC_CF; 0031 # Nd MATHEMATICAL BOLD DIGIT ONE
+1D7D0 ; NFKC_CF; 0032 # Nd MATHEMATICAL BOLD DIGIT TWO
+1D7D1 ; NFKC_CF; 0033 # Nd MATHEMATICAL BOLD DIGIT THREE
+1D7D2 ; NFKC_CF; 0034 # Nd MATHEMATICAL BOLD DIGIT FOUR
+1D7D3 ; NFKC_CF; 0035 # Nd MATHEMATICAL BOLD DIGIT FIVE
+1D7D4 ; NFKC_CF; 0036 # Nd MATHEMATICAL BOLD DIGIT SIX
+1D7D5 ; NFKC_CF; 0037 # Nd MATHEMATICAL BOLD DIGIT SEVEN
+1D7D6 ; NFKC_CF; 0038 # Nd MATHEMATICAL BOLD DIGIT EIGHT
+1D7D7 ; NFKC_CF; 0039 # Nd MATHEMATICAL BOLD DIGIT NINE
+1D7D8 ; NFKC_CF; 0030 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
+1D7D9 ; NFKC_CF; 0031 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT ONE
+1D7DA ; NFKC_CF; 0032 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT TWO
+1D7DB ; NFKC_CF; 0033 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT THREE
+1D7DC ; NFKC_CF; 0034 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR
+1D7DD ; NFKC_CF; 0035 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE
+1D7DE ; NFKC_CF; 0036 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SIX
+1D7DF ; NFKC_CF; 0037 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN
+1D7E0 ; NFKC_CF; 0038 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT
+1D7E1 ; NFKC_CF; 0039 # Nd MATHEMATICAL DOUBLE-STRUCK DIGIT NINE
+1D7E2 ; NFKC_CF; 0030 # Nd MATHEMATICAL SANS-SERIF DIGIT ZERO
+1D7E3 ; NFKC_CF; 0031 # Nd MATHEMATICAL SANS-SERIF DIGIT ONE
+1D7E4 ; NFKC_CF; 0032 # Nd MATHEMATICAL SANS-SERIF DIGIT TWO
+1D7E5 ; NFKC_CF; 0033 # Nd MATHEMATICAL SANS-SERIF DIGIT THREE
+1D7E6 ; NFKC_CF; 0034 # Nd MATHEMATICAL SANS-SERIF DIGIT FOUR
+1D7E7 ; NFKC_CF; 0035 # Nd MATHEMATICAL SANS-SERIF DIGIT FIVE
+1D7E8 ; NFKC_CF; 0036 # Nd MATHEMATICAL SANS-SERIF DIGIT SIX
+1D7E9 ; NFKC_CF; 0037 # Nd MATHEMATICAL SANS-SERIF DIGIT SEVEN
+1D7EA ; NFKC_CF; 0038 # Nd MATHEMATICAL SANS-SERIF DIGIT EIGHT
+1D7EB ; NFKC_CF; 0039 # Nd MATHEMATICAL SANS-SERIF DIGIT NINE
+1D7EC ; NFKC_CF; 0030 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO
+1D7ED ; NFKC_CF; 0031 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT ONE
+1D7EE ; NFKC_CF; 0032 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT TWO
+1D7EF ; NFKC_CF; 0033 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT THREE
+1D7F0 ; NFKC_CF; 0034 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR
+1D7F1 ; NFKC_CF; 0035 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE
+1D7F2 ; NFKC_CF; 0036 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SIX
+1D7F3 ; NFKC_CF; 0037 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN
+1D7F4 ; NFKC_CF; 0038 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT
+1D7F5 ; NFKC_CF; 0039 # Nd MATHEMATICAL SANS-SERIF BOLD DIGIT NINE
+1D7F6 ; NFKC_CF; 0030 # Nd MATHEMATICAL MONOSPACE DIGIT ZERO
+1D7F7 ; NFKC_CF; 0031 # Nd MATHEMATICAL MONOSPACE DIGIT ONE
+1D7F8 ; NFKC_CF; 0032 # Nd MATHEMATICAL MONOSPACE DIGIT TWO
+1D7F9 ; NFKC_CF; 0033 # Nd MATHEMATICAL MONOSPACE DIGIT THREE
+1D7FA ; NFKC_CF; 0034 # Nd MATHEMATICAL MONOSPACE DIGIT FOUR
+1D7FB ; NFKC_CF; 0035 # Nd MATHEMATICAL MONOSPACE DIGIT FIVE
+1D7FC ; NFKC_CF; 0036 # Nd MATHEMATICAL MONOSPACE DIGIT SIX
+1D7FD ; NFKC_CF; 0037 # Nd MATHEMATICAL MONOSPACE DIGIT SEVEN
+1D7FE ; NFKC_CF; 0038 # Nd MATHEMATICAL MONOSPACE DIGIT EIGHT
+1D7FF ; NFKC_CF; 0039 # Nd MATHEMATICAL MONOSPACE DIGIT NINE
+1E900 ; NFKC_CF; 1E922 # L& ADLAM CAPITAL LETTER ALIF
+1E901 ; NFKC_CF; 1E923 # L& ADLAM CAPITAL LETTER DAALI
+1E902 ; NFKC_CF; 1E924 # L& ADLAM CAPITAL LETTER LAAM
+1E903 ; NFKC_CF; 1E925 # L& ADLAM CAPITAL LETTER MIIM
+1E904 ; NFKC_CF; 1E926 # L& ADLAM CAPITAL LETTER BA
+1E905 ; NFKC_CF; 1E927 # L& ADLAM CAPITAL LETTER SINNYIIYHE
+1E906 ; NFKC_CF; 1E928 # L& ADLAM CAPITAL LETTER PE
+1E907 ; NFKC_CF; 1E929 # L& ADLAM CAPITAL LETTER BHE
+1E908 ; NFKC_CF; 1E92A # L& ADLAM CAPITAL LETTER RA
+1E909 ; NFKC_CF; 1E92B # L& ADLAM CAPITAL LETTER E
+1E90A ; NFKC_CF; 1E92C # L& ADLAM CAPITAL LETTER FA
+1E90B ; NFKC_CF; 1E92D # L& ADLAM CAPITAL LETTER I
+1E90C ; NFKC_CF; 1E92E # L& ADLAM CAPITAL LETTER O
+1E90D ; NFKC_CF; 1E92F # L& ADLAM CAPITAL LETTER DHA
+1E90E ; NFKC_CF; 1E930 # L& ADLAM CAPITAL LETTER YHE
+1E90F ; NFKC_CF; 1E931 # L& ADLAM CAPITAL LETTER WAW
+1E910 ; NFKC_CF; 1E932 # L& ADLAM CAPITAL LETTER NUN
+1E911 ; NFKC_CF; 1E933 # L& ADLAM CAPITAL LETTER KAF
+1E912 ; NFKC_CF; 1E934 # L& ADLAM CAPITAL LETTER YA
+1E913 ; NFKC_CF; 1E935 # L& ADLAM CAPITAL LETTER U
+1E914 ; NFKC_CF; 1E936 # L& ADLAM CAPITAL LETTER JIIM
+1E915 ; NFKC_CF; 1E937 # L& ADLAM CAPITAL LETTER CHI
+1E916 ; NFKC_CF; 1E938 # L& ADLAM CAPITAL LETTER HA
+1E917 ; NFKC_CF; 1E939 # L& ADLAM CAPITAL LETTER QAAF
+1E918 ; NFKC_CF; 1E93A # L& ADLAM CAPITAL LETTER GA
+1E919 ; NFKC_CF; 1E93B # L& ADLAM CAPITAL LETTER NYA
+1E91A ; NFKC_CF; 1E93C # L& ADLAM CAPITAL LETTER TU
+1E91B ; NFKC_CF; 1E93D # L& ADLAM CAPITAL LETTER NHA
+1E91C ; NFKC_CF; 1E93E # L& ADLAM CAPITAL LETTER VA
+1E91D ; NFKC_CF; 1E93F # L& ADLAM CAPITAL LETTER KHA
+1E91E ; NFKC_CF; 1E940 # L& ADLAM CAPITAL LETTER GBE
+1E91F ; NFKC_CF; 1E941 # L& ADLAM CAPITAL LETTER ZAL
+1E920 ; NFKC_CF; 1E942 # L& ADLAM CAPITAL LETTER KPO
+1E921 ; NFKC_CF; 1E943 # L& ADLAM CAPITAL LETTER SHA
+1EE00 ; NFKC_CF; 0627 # Lo ARABIC MATHEMATICAL ALEF
+1EE01 ; NFKC_CF; 0628 # Lo ARABIC MATHEMATICAL BEH
+1EE02 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL JEEM
+1EE03 ; NFKC_CF; 062F # Lo ARABIC MATHEMATICAL DAL
+1EE05 ; NFKC_CF; 0648 # Lo ARABIC MATHEMATICAL WAW
+1EE06 ; NFKC_CF; 0632 # Lo ARABIC MATHEMATICAL ZAIN
+1EE07 ; NFKC_CF; 062D # Lo ARABIC MATHEMATICAL HAH
+1EE08 ; NFKC_CF; 0637 # Lo ARABIC MATHEMATICAL TAH
+1EE09 ; NFKC_CF; 064A # Lo ARABIC MATHEMATICAL YEH
+1EE0A ; NFKC_CF; 0643 # Lo ARABIC MATHEMATICAL KAF
+1EE0B ; NFKC_CF; 0644 # Lo ARABIC MATHEMATICAL LAM
+1EE0C ; NFKC_CF; 0645 # Lo ARABIC MATHEMATICAL MEEM
+1EE0D ; NFKC_CF; 0646 # Lo ARABIC MATHEMATICAL NOON
+1EE0E ; NFKC_CF; 0633 # Lo ARABIC MATHEMATICAL SEEN
+1EE0F ; NFKC_CF; 0639 # Lo ARABIC MATHEMATICAL AIN
+1EE10 ; NFKC_CF; 0641 # Lo ARABIC MATHEMATICAL FEH
+1EE11 ; NFKC_CF; 0635 # Lo ARABIC MATHEMATICAL SAD
+1EE12 ; NFKC_CF; 0642 # Lo ARABIC MATHEMATICAL QAF
+1EE13 ; NFKC_CF; 0631 # Lo ARABIC MATHEMATICAL REH
+1EE14 ; NFKC_CF; 0634 # Lo ARABIC MATHEMATICAL SHEEN
+1EE15 ; NFKC_CF; 062A # Lo ARABIC MATHEMATICAL TEH
+1EE16 ; NFKC_CF; 062B # Lo ARABIC MATHEMATICAL THEH
+1EE17 ; NFKC_CF; 062E # Lo ARABIC MATHEMATICAL KHAH
+1EE18 ; NFKC_CF; 0630 # Lo ARABIC MATHEMATICAL THAL
+1EE19 ; NFKC_CF; 0636 # Lo ARABIC MATHEMATICAL DAD
+1EE1A ; NFKC_CF; 0638 # Lo ARABIC MATHEMATICAL ZAH
+1EE1B ; NFKC_CF; 063A # Lo ARABIC MATHEMATICAL GHAIN
+1EE1C ; NFKC_CF; 066E # Lo ARABIC MATHEMATICAL DOTLESS BEH
+1EE1D ; NFKC_CF; 06BA # Lo ARABIC MATHEMATICAL DOTLESS NOON
+1EE1E ; NFKC_CF; 06A1 # Lo ARABIC MATHEMATICAL DOTLESS FEH
+1EE1F ; NFKC_CF; 066F # Lo ARABIC MATHEMATICAL DOTLESS QAF
+1EE21 ; NFKC_CF; 0628 # Lo ARABIC MATHEMATICAL INITIAL BEH
+1EE22 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; NFKC_CF; 0647 # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; NFKC_CF; 062D # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29 ; NFKC_CF; 064A # Lo ARABIC MATHEMATICAL INITIAL YEH
+1EE2A ; NFKC_CF; 0643 # Lo ARABIC MATHEMATICAL INITIAL KAF
+1EE2B ; NFKC_CF; 0644 # Lo ARABIC MATHEMATICAL INITIAL LAM
+1EE2C ; NFKC_CF; 0645 # Lo ARABIC MATHEMATICAL INITIAL MEEM
+1EE2D ; NFKC_CF; 0646 # Lo ARABIC MATHEMATICAL INITIAL NOON
+1EE2E ; NFKC_CF; 0633 # Lo ARABIC MATHEMATICAL INITIAL SEEN
+1EE2F ; NFKC_CF; 0639 # Lo ARABIC MATHEMATICAL INITIAL AIN
+1EE30 ; NFKC_CF; 0641 # Lo ARABIC MATHEMATICAL INITIAL FEH
+1EE31 ; NFKC_CF; 0635 # Lo ARABIC MATHEMATICAL INITIAL SAD
+1EE32 ; NFKC_CF; 0642 # Lo ARABIC MATHEMATICAL INITIAL QAF
+1EE34 ; NFKC_CF; 0634 # Lo ARABIC MATHEMATICAL INITIAL SHEEN
+1EE35 ; NFKC_CF; 062A # Lo ARABIC MATHEMATICAL INITIAL TEH
+1EE36 ; NFKC_CF; 062B # Lo ARABIC MATHEMATICAL INITIAL THEH
+1EE37 ; NFKC_CF; 062E # Lo ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; NFKC_CF; 0636 # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; NFKC_CF; 063A # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; NFKC_CF; 062D # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; NFKC_CF; 064A # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; NFKC_CF; 0644 # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D ; NFKC_CF; 0646 # Lo ARABIC MATHEMATICAL TAILED NOON
+1EE4E ; NFKC_CF; 0633 # Lo ARABIC MATHEMATICAL TAILED SEEN
+1EE4F ; NFKC_CF; 0639 # Lo ARABIC MATHEMATICAL TAILED AIN
+1EE51 ; NFKC_CF; 0635 # Lo ARABIC MATHEMATICAL TAILED SAD
+1EE52 ; NFKC_CF; 0642 # Lo ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; NFKC_CF; 0634 # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; NFKC_CF; 062E # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; NFKC_CF; 0636 # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; NFKC_CF; 063A # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; NFKC_CF; 06BA # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; NFKC_CF; 066F # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61 ; NFKC_CF; 0628 # Lo ARABIC MATHEMATICAL STRETCHED BEH
+1EE62 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; NFKC_CF; 0647 # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67 ; NFKC_CF; 062D # Lo ARABIC MATHEMATICAL STRETCHED HAH
+1EE68 ; NFKC_CF; 0637 # Lo ARABIC MATHEMATICAL STRETCHED TAH
+1EE69 ; NFKC_CF; 064A # Lo ARABIC MATHEMATICAL STRETCHED YEH
+1EE6A ; NFKC_CF; 0643 # Lo ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C ; NFKC_CF; 0645 # Lo ARABIC MATHEMATICAL STRETCHED MEEM
+1EE6D ; NFKC_CF; 0646 # Lo ARABIC MATHEMATICAL STRETCHED NOON
+1EE6E ; NFKC_CF; 0633 # Lo ARABIC MATHEMATICAL STRETCHED SEEN
+1EE6F ; NFKC_CF; 0639 # Lo ARABIC MATHEMATICAL STRETCHED AIN
+1EE70 ; NFKC_CF; 0641 # Lo ARABIC MATHEMATICAL STRETCHED FEH
+1EE71 ; NFKC_CF; 0635 # Lo ARABIC MATHEMATICAL STRETCHED SAD
+1EE72 ; NFKC_CF; 0642 # Lo ARABIC MATHEMATICAL STRETCHED QAF
+1EE74 ; NFKC_CF; 0634 # Lo ARABIC MATHEMATICAL STRETCHED SHEEN
+1EE75 ; NFKC_CF; 062A # Lo ARABIC MATHEMATICAL STRETCHED TEH
+1EE76 ; NFKC_CF; 062B # Lo ARABIC MATHEMATICAL STRETCHED THEH
+1EE77 ; NFKC_CF; 062E # Lo ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79 ; NFKC_CF; 0636 # Lo ARABIC MATHEMATICAL STRETCHED DAD
+1EE7A ; NFKC_CF; 0638 # Lo ARABIC MATHEMATICAL STRETCHED ZAH
+1EE7B ; NFKC_CF; 063A # Lo ARABIC MATHEMATICAL STRETCHED GHAIN
+1EE7C ; NFKC_CF; 066E # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; NFKC_CF; 06A1 # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80 ; NFKC_CF; 0627 # Lo ARABIC MATHEMATICAL LOOPED ALEF
+1EE81 ; NFKC_CF; 0628 # Lo ARABIC MATHEMATICAL LOOPED BEH
+1EE82 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL LOOPED JEEM
+1EE83 ; NFKC_CF; 062F # Lo ARABIC MATHEMATICAL LOOPED DAL
+1EE84 ; NFKC_CF; 0647 # Lo ARABIC MATHEMATICAL LOOPED HEH
+1EE85 ; NFKC_CF; 0648 # Lo ARABIC MATHEMATICAL LOOPED WAW
+1EE86 ; NFKC_CF; 0632 # Lo ARABIC MATHEMATICAL LOOPED ZAIN
+1EE87 ; NFKC_CF; 062D # Lo ARABIC MATHEMATICAL LOOPED HAH
+1EE88 ; NFKC_CF; 0637 # Lo ARABIC MATHEMATICAL LOOPED TAH
+1EE89 ; NFKC_CF; 064A # Lo ARABIC MATHEMATICAL LOOPED YEH
+1EE8B ; NFKC_CF; 0644 # Lo ARABIC MATHEMATICAL LOOPED LAM
+1EE8C ; NFKC_CF; 0645 # Lo ARABIC MATHEMATICAL LOOPED MEEM
+1EE8D ; NFKC_CF; 0646 # Lo ARABIC MATHEMATICAL LOOPED NOON
+1EE8E ; NFKC_CF; 0633 # Lo ARABIC MATHEMATICAL LOOPED SEEN
+1EE8F ; NFKC_CF; 0639 # Lo ARABIC MATHEMATICAL LOOPED AIN
+1EE90 ; NFKC_CF; 0641 # Lo ARABIC MATHEMATICAL LOOPED FEH
+1EE91 ; NFKC_CF; 0635 # Lo ARABIC MATHEMATICAL LOOPED SAD
+1EE92 ; NFKC_CF; 0642 # Lo ARABIC MATHEMATICAL LOOPED QAF
+1EE93 ; NFKC_CF; 0631 # Lo ARABIC MATHEMATICAL LOOPED REH
+1EE94 ; NFKC_CF; 0634 # Lo ARABIC MATHEMATICAL LOOPED SHEEN
+1EE95 ; NFKC_CF; 062A # Lo ARABIC MATHEMATICAL LOOPED TEH
+1EE96 ; NFKC_CF; 062B # Lo ARABIC MATHEMATICAL LOOPED THEH
+1EE97 ; NFKC_CF; 062E # Lo ARABIC MATHEMATICAL LOOPED KHAH
+1EE98 ; NFKC_CF; 0630 # Lo ARABIC MATHEMATICAL LOOPED THAL
+1EE99 ; NFKC_CF; 0636 # Lo ARABIC MATHEMATICAL LOOPED DAD
+1EE9A ; NFKC_CF; 0638 # Lo ARABIC MATHEMATICAL LOOPED ZAH
+1EE9B ; NFKC_CF; 063A # Lo ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1 ; NFKC_CF; 0628 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK BEH
+1EEA2 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM
+1EEA3 ; NFKC_CF; 062F # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5 ; NFKC_CF; 0648 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK WAW
+1EEA6 ; NFKC_CF; 0632 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN
+1EEA7 ; NFKC_CF; 062D # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK HAH
+1EEA8 ; NFKC_CF; 0637 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK TAH
+1EEA9 ; NFKC_CF; 064A # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB ; NFKC_CF; 0644 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK LAM
+1EEAC ; NFKC_CF; 0645 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM
+1EEAD ; NFKC_CF; 0646 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK NOON
+1EEAE ; NFKC_CF; 0633 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN
+1EEAF ; NFKC_CF; 0639 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK AIN
+1EEB0 ; NFKC_CF; 0641 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK FEH
+1EEB1 ; NFKC_CF; 0635 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK SAD
+1EEB2 ; NFKC_CF; 0642 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK QAF
+1EEB3 ; NFKC_CF; 0631 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK REH
+1EEB4 ; NFKC_CF; 0634 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN
+1EEB5 ; NFKC_CF; 062A # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK TEH
+1EEB6 ; NFKC_CF; 062B # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK THEH
+1EEB7 ; NFKC_CF; 062E # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH
+1EEB8 ; NFKC_CF; 0630 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK THAL
+1EEB9 ; NFKC_CF; 0636 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK DAD
+1EEBA ; NFKC_CF; 0638 # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH
+1EEBB ; NFKC_CF; 063A # Lo ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1F100 ; NFKC_CF; 0030 002E # No DIGIT ZERO FULL STOP
+1F101 ; NFKC_CF; 0030 002C # No DIGIT ZERO COMMA
+1F102 ; NFKC_CF; 0031 002C # No DIGIT ONE COMMA
+1F103 ; NFKC_CF; 0032 002C # No DIGIT TWO COMMA
+1F104 ; NFKC_CF; 0033 002C # No DIGIT THREE COMMA
+1F105 ; NFKC_CF; 0034 002C # No DIGIT FOUR COMMA
+1F106 ; NFKC_CF; 0035 002C # No DIGIT FIVE COMMA
+1F107 ; NFKC_CF; 0036 002C # No DIGIT SIX COMMA
+1F108 ; NFKC_CF; 0037 002C # No DIGIT SEVEN COMMA
+1F109 ; NFKC_CF; 0038 002C # No DIGIT EIGHT COMMA
+1F10A ; NFKC_CF; 0039 002C # No DIGIT NINE COMMA
+1F110 ; NFKC_CF; 0028 0061 0029 # So PARENTHESIZED LATIN CAPITAL LETTER A
+1F111 ; NFKC_CF; 0028 0062 0029 # So PARENTHESIZED LATIN CAPITAL LETTER B
+1F112 ; NFKC_CF; 0028 0063 0029 # So PARENTHESIZED LATIN CAPITAL LETTER C
+1F113 ; NFKC_CF; 0028 0064 0029 # So PARENTHESIZED LATIN CAPITAL LETTER D
+1F114 ; NFKC_CF; 0028 0065 0029 # So PARENTHESIZED LATIN CAPITAL LETTER E
+1F115 ; NFKC_CF; 0028 0066 0029 # So PARENTHESIZED LATIN CAPITAL LETTER F
+1F116 ; NFKC_CF; 0028 0067 0029 # So PARENTHESIZED LATIN CAPITAL LETTER G
+1F117 ; NFKC_CF; 0028 0068 0029 # So PARENTHESIZED LATIN CAPITAL LETTER H
+1F118 ; NFKC_CF; 0028 0069 0029 # So PARENTHESIZED LATIN CAPITAL LETTER I
+1F119 ; NFKC_CF; 0028 006A 0029 # So PARENTHESIZED LATIN CAPITAL LETTER J
+1F11A ; NFKC_CF; 0028 006B 0029 # So PARENTHESIZED LATIN CAPITAL LETTER K
+1F11B ; NFKC_CF; 0028 006C 0029 # So PARENTHESIZED LATIN CAPITAL LETTER L
+1F11C ; NFKC_CF; 0028 006D 0029 # So PARENTHESIZED LATIN CAPITAL LETTER M
+1F11D ; NFKC_CF; 0028 006E 0029 # So PARENTHESIZED LATIN CAPITAL LETTER N
+1F11E ; NFKC_CF; 0028 006F 0029 # So PARENTHESIZED LATIN CAPITAL LETTER O
+1F11F ; NFKC_CF; 0028 0070 0029 # So PARENTHESIZED LATIN CAPITAL LETTER P
+1F120 ; NFKC_CF; 0028 0071 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Q
+1F121 ; NFKC_CF; 0028 0072 0029 # So PARENTHESIZED LATIN CAPITAL LETTER R
+1F122 ; NFKC_CF; 0028 0073 0029 # So PARENTHESIZED LATIN CAPITAL LETTER S
+1F123 ; NFKC_CF; 0028 0074 0029 # So PARENTHESIZED LATIN CAPITAL LETTER T
+1F124 ; NFKC_CF; 0028 0075 0029 # So PARENTHESIZED LATIN CAPITAL LETTER U
+1F125 ; NFKC_CF; 0028 0076 0029 # So PARENTHESIZED LATIN CAPITAL LETTER V
+1F126 ; NFKC_CF; 0028 0077 0029 # So PARENTHESIZED LATIN CAPITAL LETTER W
+1F127 ; NFKC_CF; 0028 0078 0029 # So PARENTHESIZED LATIN CAPITAL LETTER X
+1F128 ; NFKC_CF; 0028 0079 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Y
+1F129 ; NFKC_CF; 0028 007A 0029 # So PARENTHESIZED LATIN CAPITAL LETTER Z
+1F12A ; NFKC_CF; 3014 0073 3015 # So TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
+1F12B ; NFKC_CF; 0063 # So CIRCLED ITALIC LATIN CAPITAL LETTER C
+1F12C ; NFKC_CF; 0072 # So CIRCLED ITALIC LATIN CAPITAL LETTER R
+1F12D ; NFKC_CF; 0063 0064 # So CIRCLED CD
+1F12E ; NFKC_CF; 0077 007A # So CIRCLED WZ
+1F130 ; NFKC_CF; 0061 # So SQUARED LATIN CAPITAL LETTER A
+1F131 ; NFKC_CF; 0062 # So SQUARED LATIN CAPITAL LETTER B
+1F132 ; NFKC_CF; 0063 # So SQUARED LATIN CAPITAL LETTER C
+1F133 ; NFKC_CF; 0064 # So SQUARED LATIN CAPITAL LETTER D
+1F134 ; NFKC_CF; 0065 # So SQUARED LATIN CAPITAL LETTER E
+1F135 ; NFKC_CF; 0066 # So SQUARED LATIN CAPITAL LETTER F
+1F136 ; NFKC_CF; 0067 # So SQUARED LATIN CAPITAL LETTER G
+1F137 ; NFKC_CF; 0068 # So SQUARED LATIN CAPITAL LETTER H
+1F138 ; NFKC_CF; 0069 # So SQUARED LATIN CAPITAL LETTER I
+1F139 ; NFKC_CF; 006A # So SQUARED LATIN CAPITAL LETTER J
+1F13A ; NFKC_CF; 006B # So SQUARED LATIN CAPITAL LETTER K
+1F13B ; NFKC_CF; 006C # So SQUARED LATIN CAPITAL LETTER L
+1F13C ; NFKC_CF; 006D # So SQUARED LATIN CAPITAL LETTER M
+1F13D ; NFKC_CF; 006E # So SQUARED LATIN CAPITAL LETTER N
+1F13E ; NFKC_CF; 006F # So SQUARED LATIN CAPITAL LETTER O
+1F13F ; NFKC_CF; 0070 # So SQUARED LATIN CAPITAL LETTER P
+1F140 ; NFKC_CF; 0071 # So SQUARED LATIN CAPITAL LETTER Q
+1F141 ; NFKC_CF; 0072 # So SQUARED LATIN CAPITAL LETTER R
+1F142 ; NFKC_CF; 0073 # So SQUARED LATIN CAPITAL LETTER S
+1F143 ; NFKC_CF; 0074 # So SQUARED LATIN CAPITAL LETTER T
+1F144 ; NFKC_CF; 0075 # So SQUARED LATIN CAPITAL LETTER U
+1F145 ; NFKC_CF; 0076 # So SQUARED LATIN CAPITAL LETTER V
+1F146 ; NFKC_CF; 0077 # So SQUARED LATIN CAPITAL LETTER W
+1F147 ; NFKC_CF; 0078 # So SQUARED LATIN CAPITAL LETTER X
+1F148 ; NFKC_CF; 0079 # So SQUARED LATIN CAPITAL LETTER Y
+1F149 ; NFKC_CF; 007A # So SQUARED LATIN CAPITAL LETTER Z
+1F14A ; NFKC_CF; 0068 0076 # So SQUARED HV
+1F14B ; NFKC_CF; 006D 0076 # So SQUARED MV
+1F14C ; NFKC_CF; 0073 0064 # So SQUARED SD
+1F14D ; NFKC_CF; 0073 0073 # So SQUARED SS
+1F14E ; NFKC_CF; 0070 0070 0076 # So SQUARED PPV
+1F14F ; NFKC_CF; 0077 0063 # So SQUARED WC
+1F16A ; NFKC_CF; 006D 0063 # So RAISED MC SIGN
+1F16B ; NFKC_CF; 006D 0064 # So RAISED MD SIGN
+1F16C ; NFKC_CF; 006D 0072 # So RAISED MR SIGN
+1F190 ; NFKC_CF; 0064 006A # So SQUARE DJ
+1F200 ; NFKC_CF; 307B 304B # So SQUARE HIRAGANA HOKA
+1F201 ; NFKC_CF; 30B3 30B3 # So SQUARED KATAKANA KOKO
+1F202 ; NFKC_CF; 30B5 # So SQUARED KATAKANA SA
+1F210 ; NFKC_CF; 624B # So SQUARED CJK UNIFIED IDEOGRAPH-624B
+1F211 ; NFKC_CF; 5B57 # So SQUARED CJK UNIFIED IDEOGRAPH-5B57
+1F212 ; NFKC_CF; 53CC # So SQUARED CJK UNIFIED IDEOGRAPH-53CC
+1F213 ; NFKC_CF; 30C7 # So SQUARED KATAKANA DE
+1F214 ; NFKC_CF; 4E8C # So SQUARED CJK UNIFIED IDEOGRAPH-4E8C
+1F215 ; NFKC_CF; 591A # So SQUARED CJK UNIFIED IDEOGRAPH-591A
+1F216 ; NFKC_CF; 89E3 # So SQUARED CJK UNIFIED IDEOGRAPH-89E3
+1F217 ; NFKC_CF; 5929 # So SQUARED CJK UNIFIED IDEOGRAPH-5929
+1F218 ; NFKC_CF; 4EA4 # So SQUARED CJK UNIFIED IDEOGRAPH-4EA4
+1F219 ; NFKC_CF; 6620 # So SQUARED CJK UNIFIED IDEOGRAPH-6620
+1F21A ; NFKC_CF; 7121 # So SQUARED CJK UNIFIED IDEOGRAPH-7121
+1F21B ; NFKC_CF; 6599 # So SQUARED CJK UNIFIED IDEOGRAPH-6599
+1F21C ; NFKC_CF; 524D # So SQUARED CJK UNIFIED IDEOGRAPH-524D
+1F21D ; NFKC_CF; 5F8C # So SQUARED CJK UNIFIED IDEOGRAPH-5F8C
+1F21E ; NFKC_CF; 518D # So SQUARED CJK UNIFIED IDEOGRAPH-518D
+1F21F ; NFKC_CF; 65B0 # So SQUARED CJK UNIFIED IDEOGRAPH-65B0
+1F220 ; NFKC_CF; 521D # So SQUARED CJK UNIFIED IDEOGRAPH-521D
+1F221 ; NFKC_CF; 7D42 # So SQUARED CJK UNIFIED IDEOGRAPH-7D42
+1F222 ; NFKC_CF; 751F # So SQUARED CJK UNIFIED IDEOGRAPH-751F
+1F223 ; NFKC_CF; 8CA9 # So SQUARED CJK UNIFIED IDEOGRAPH-8CA9
+1F224 ; NFKC_CF; 58F0 # So SQUARED CJK UNIFIED IDEOGRAPH-58F0
+1F225 ; NFKC_CF; 5439 # So SQUARED CJK UNIFIED IDEOGRAPH-5439
+1F226 ; NFKC_CF; 6F14 # So SQUARED CJK UNIFIED IDEOGRAPH-6F14
+1F227 ; NFKC_CF; 6295 # So SQUARED CJK UNIFIED IDEOGRAPH-6295
+1F228 ; NFKC_CF; 6355 # So SQUARED CJK UNIFIED IDEOGRAPH-6355
+1F229 ; NFKC_CF; 4E00 # So SQUARED CJK UNIFIED IDEOGRAPH-4E00
+1F22A ; NFKC_CF; 4E09 # So SQUARED CJK UNIFIED IDEOGRAPH-4E09
+1F22B ; NFKC_CF; 904A # So SQUARED CJK UNIFIED IDEOGRAPH-904A
+1F22C ; NFKC_CF; 5DE6 # So SQUARED CJK UNIFIED IDEOGRAPH-5DE6
+1F22D ; NFKC_CF; 4E2D # So SQUARED CJK UNIFIED IDEOGRAPH-4E2D
+1F22E ; NFKC_CF; 53F3 # So SQUARED CJK UNIFIED IDEOGRAPH-53F3
+1F22F ; NFKC_CF; 6307 # So SQUARED CJK UNIFIED IDEOGRAPH-6307
+1F230 ; NFKC_CF; 8D70 # So SQUARED CJK UNIFIED IDEOGRAPH-8D70
+1F231 ; NFKC_CF; 6253 # So SQUARED CJK UNIFIED IDEOGRAPH-6253
+1F232 ; NFKC_CF; 7981 # So SQUARED CJK UNIFIED IDEOGRAPH-7981
+1F233 ; NFKC_CF; 7A7A # So SQUARED CJK UNIFIED IDEOGRAPH-7A7A
+1F234 ; NFKC_CF; 5408 # So SQUARED CJK UNIFIED IDEOGRAPH-5408
+1F235 ; NFKC_CF; 6E80 # So SQUARED CJK UNIFIED IDEOGRAPH-6E80
+1F236 ; NFKC_CF; 6709 # So SQUARED CJK UNIFIED IDEOGRAPH-6709
+1F237 ; NFKC_CF; 6708 # So SQUARED CJK UNIFIED IDEOGRAPH-6708
+1F238 ; NFKC_CF; 7533 # So SQUARED CJK UNIFIED IDEOGRAPH-7533
+1F239 ; NFKC_CF; 5272 # So SQUARED CJK UNIFIED IDEOGRAPH-5272
+1F23A ; NFKC_CF; 55B6 # So SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F23B ; NFKC_CF; 914D # So SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240 ; NFKC_CF; 3014 672C 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
+1F241 ; NFKC_CF; 3014 4E09 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
+1F242 ; NFKC_CF; 3014 4E8C 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
+1F243 ; NFKC_CF; 3014 5B89 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
+1F244 ; NFKC_CF; 3014 70B9 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
+1F245 ; NFKC_CF; 3014 6253 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
+1F246 ; NFKC_CF; 3014 76D7 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
+1F247 ; NFKC_CF; 3014 52DD 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
+1F248 ; NFKC_CF; 3014 6557 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250 ; NFKC_CF; 5F97 # So CIRCLED IDEOGRAPH ADVANTAGE
+1F251 ; NFKC_CF; 53EF # So CIRCLED IDEOGRAPH ACCEPT
+1FBF0 ; NFKC_CF; 0030 # Nd SEGMENTED DIGIT ZERO
+1FBF1 ; NFKC_CF; 0031 # Nd SEGMENTED DIGIT ONE
+1FBF2 ; NFKC_CF; 0032 # Nd SEGMENTED DIGIT TWO
+1FBF3 ; NFKC_CF; 0033 # Nd SEGMENTED DIGIT THREE
+1FBF4 ; NFKC_CF; 0034 # Nd SEGMENTED DIGIT FOUR
+1FBF5 ; NFKC_CF; 0035 # Nd SEGMENTED DIGIT FIVE
+1FBF6 ; NFKC_CF; 0036 # Nd SEGMENTED DIGIT SIX
+1FBF7 ; NFKC_CF; 0037 # Nd SEGMENTED DIGIT SEVEN
+1FBF8 ; NFKC_CF; 0038 # Nd SEGMENTED DIGIT EIGHT
+1FBF9 ; NFKC_CF; 0039 # Nd SEGMENTED DIGIT NINE
+2F800 ; NFKC_CF; 4E3D # Lo CJK COMPATIBILITY IDEOGRAPH-2F800
+2F801 ; NFKC_CF; 4E38 # Lo CJK COMPATIBILITY IDEOGRAPH-2F801
+2F802 ; NFKC_CF; 4E41 # Lo CJK COMPATIBILITY IDEOGRAPH-2F802
+2F803 ; NFKC_CF; 20122 # Lo CJK COMPATIBILITY IDEOGRAPH-2F803
+2F804 ; NFKC_CF; 4F60 # Lo CJK COMPATIBILITY IDEOGRAPH-2F804
+2F805 ; NFKC_CF; 4FAE # Lo CJK COMPATIBILITY IDEOGRAPH-2F805
+2F806 ; NFKC_CF; 4FBB # Lo CJK COMPATIBILITY IDEOGRAPH-2F806
+2F807 ; NFKC_CF; 5002 # Lo CJK COMPATIBILITY IDEOGRAPH-2F807
+2F808 ; NFKC_CF; 507A # Lo CJK COMPATIBILITY IDEOGRAPH-2F808
+2F809 ; NFKC_CF; 5099 # Lo CJK COMPATIBILITY IDEOGRAPH-2F809
+2F80A ; NFKC_CF; 50E7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F80A
+2F80B ; NFKC_CF; 50CF # Lo CJK COMPATIBILITY IDEOGRAPH-2F80B
+2F80C ; NFKC_CF; 349E # Lo CJK COMPATIBILITY IDEOGRAPH-2F80C
+2F80D ; NFKC_CF; 2063A # Lo CJK COMPATIBILITY IDEOGRAPH-2F80D
+2F80E ; NFKC_CF; 514D # Lo CJK COMPATIBILITY IDEOGRAPH-2F80E
+2F80F ; NFKC_CF; 5154 # Lo CJK COMPATIBILITY IDEOGRAPH-2F80F
+2F810 ; NFKC_CF; 5164 # Lo CJK COMPATIBILITY IDEOGRAPH-2F810
+2F811 ; NFKC_CF; 5177 # Lo CJK COMPATIBILITY IDEOGRAPH-2F811
+2F812 ; NFKC_CF; 2051C # Lo CJK COMPATIBILITY IDEOGRAPH-2F812
+2F813 ; NFKC_CF; 34B9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F813
+2F814 ; NFKC_CF; 5167 # Lo CJK COMPATIBILITY IDEOGRAPH-2F814
+2F815 ; NFKC_CF; 518D # Lo CJK COMPATIBILITY IDEOGRAPH-2F815
+2F816 ; NFKC_CF; 2054B # Lo CJK COMPATIBILITY IDEOGRAPH-2F816
+2F817 ; NFKC_CF; 5197 # Lo CJK COMPATIBILITY IDEOGRAPH-2F817
+2F818 ; NFKC_CF; 51A4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F818
+2F819 ; NFKC_CF; 4ECC # Lo CJK COMPATIBILITY IDEOGRAPH-2F819
+2F81A ; NFKC_CF; 51AC # Lo CJK COMPATIBILITY IDEOGRAPH-2F81A
+2F81B ; NFKC_CF; 51B5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F81B
+2F81C ; NFKC_CF; 291DF # Lo CJK COMPATIBILITY IDEOGRAPH-2F81C
+2F81D ; NFKC_CF; 51F5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F81D
+2F81E ; NFKC_CF; 5203 # Lo CJK COMPATIBILITY IDEOGRAPH-2F81E
+2F81F ; NFKC_CF; 34DF # Lo CJK COMPATIBILITY IDEOGRAPH-2F81F
+2F820 ; NFKC_CF; 523B # Lo CJK COMPATIBILITY IDEOGRAPH-2F820
+2F821 ; NFKC_CF; 5246 # Lo CJK COMPATIBILITY IDEOGRAPH-2F821
+2F822 ; NFKC_CF; 5272 # Lo CJK COMPATIBILITY IDEOGRAPH-2F822
+2F823 ; NFKC_CF; 5277 # Lo CJK COMPATIBILITY IDEOGRAPH-2F823
+2F824 ; NFKC_CF; 3515 # Lo CJK COMPATIBILITY IDEOGRAPH-2F824
+2F825 ; NFKC_CF; 52C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F825
+2F826 ; NFKC_CF; 52C9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F826
+2F827 ; NFKC_CF; 52E4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F827
+2F828 ; NFKC_CF; 52FA # Lo CJK COMPATIBILITY IDEOGRAPH-2F828
+2F829 ; NFKC_CF; 5305 # Lo CJK COMPATIBILITY IDEOGRAPH-2F829
+2F82A ; NFKC_CF; 5306 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82A
+2F82B ; NFKC_CF; 5317 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82B
+2F82C ; NFKC_CF; 5349 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82C
+2F82D ; NFKC_CF; 5351 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82D
+2F82E ; NFKC_CF; 535A # Lo CJK COMPATIBILITY IDEOGRAPH-2F82E
+2F82F ; NFKC_CF; 5373 # Lo CJK COMPATIBILITY IDEOGRAPH-2F82F
+2F830 ; NFKC_CF; 537D # Lo CJK COMPATIBILITY IDEOGRAPH-2F830
+2F831..2F833 ; NFKC_CF; 537F # Lo [3] CJK COMPATIBILITY IDEOGRAPH-2F831..CJK COMPATIBILITY IDEOGRAPH-2F833
+2F834 ; NFKC_CF; 20A2C # Lo CJK COMPATIBILITY IDEOGRAPH-2F834
+2F835 ; NFKC_CF; 7070 # Lo CJK COMPATIBILITY IDEOGRAPH-2F835
+2F836 ; NFKC_CF; 53CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F836
+2F837 ; NFKC_CF; 53DF # Lo CJK COMPATIBILITY IDEOGRAPH-2F837
+2F838 ; NFKC_CF; 20B63 # Lo CJK COMPATIBILITY IDEOGRAPH-2F838
+2F839 ; NFKC_CF; 53EB # Lo CJK COMPATIBILITY IDEOGRAPH-2F839
+2F83A ; NFKC_CF; 53F1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83A
+2F83B ; NFKC_CF; 5406 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83B
+2F83C ; NFKC_CF; 549E # Lo CJK COMPATIBILITY IDEOGRAPH-2F83C
+2F83D ; NFKC_CF; 5438 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83D
+2F83E ; NFKC_CF; 5448 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83E
+2F83F ; NFKC_CF; 5468 # Lo CJK COMPATIBILITY IDEOGRAPH-2F83F
+2F840 ; NFKC_CF; 54A2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F840
+2F841 ; NFKC_CF; 54F6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F841
+2F842 ; NFKC_CF; 5510 # Lo CJK COMPATIBILITY IDEOGRAPH-2F842
+2F843 ; NFKC_CF; 5553 # Lo CJK COMPATIBILITY IDEOGRAPH-2F843
+2F844 ; NFKC_CF; 5563 # Lo CJK COMPATIBILITY IDEOGRAPH-2F844
+2F845..2F846 ; NFKC_CF; 5584 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F845..CJK COMPATIBILITY IDEOGRAPH-2F846
+2F847 ; NFKC_CF; 5599 # Lo CJK COMPATIBILITY IDEOGRAPH-2F847
+2F848 ; NFKC_CF; 55AB # Lo CJK COMPATIBILITY IDEOGRAPH-2F848
+2F849 ; NFKC_CF; 55B3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F849
+2F84A ; NFKC_CF; 55C2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84A
+2F84B ; NFKC_CF; 5716 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84B
+2F84C ; NFKC_CF; 5606 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84C
+2F84D ; NFKC_CF; 5717 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84D
+2F84E ; NFKC_CF; 5651 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84E
+2F84F ; NFKC_CF; 5674 # Lo CJK COMPATIBILITY IDEOGRAPH-2F84F
+2F850 ; NFKC_CF; 5207 # Lo CJK COMPATIBILITY IDEOGRAPH-2F850
+2F851 ; NFKC_CF; 58EE # Lo CJK COMPATIBILITY IDEOGRAPH-2F851
+2F852 ; NFKC_CF; 57CE # Lo CJK COMPATIBILITY IDEOGRAPH-2F852
+2F853 ; NFKC_CF; 57F4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F853
+2F854 ; NFKC_CF; 580D # Lo CJK COMPATIBILITY IDEOGRAPH-2F854
+2F855 ; NFKC_CF; 578B # Lo CJK COMPATIBILITY IDEOGRAPH-2F855
+2F856 ; NFKC_CF; 5832 # Lo CJK COMPATIBILITY IDEOGRAPH-2F856
+2F857 ; NFKC_CF; 5831 # Lo CJK COMPATIBILITY IDEOGRAPH-2F857
+2F858 ; NFKC_CF; 58AC # Lo CJK COMPATIBILITY IDEOGRAPH-2F858
+2F859 ; NFKC_CF; 214E4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F859
+2F85A ; NFKC_CF; 58F2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85A
+2F85B ; NFKC_CF; 58F7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85B
+2F85C ; NFKC_CF; 5906 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85C
+2F85D ; NFKC_CF; 591A # Lo CJK COMPATIBILITY IDEOGRAPH-2F85D
+2F85E ; NFKC_CF; 5922 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85E
+2F85F ; NFKC_CF; 5962 # Lo CJK COMPATIBILITY IDEOGRAPH-2F85F
+2F860 ; NFKC_CF; 216A8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F860
+2F861 ; NFKC_CF; 216EA # Lo CJK COMPATIBILITY IDEOGRAPH-2F861
+2F862 ; NFKC_CF; 59EC # Lo CJK COMPATIBILITY IDEOGRAPH-2F862
+2F863 ; NFKC_CF; 5A1B # Lo CJK COMPATIBILITY IDEOGRAPH-2F863
+2F864 ; NFKC_CF; 5A27 # Lo CJK COMPATIBILITY IDEOGRAPH-2F864
+2F865 ; NFKC_CF; 59D8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F865
+2F866 ; NFKC_CF; 5A66 # Lo CJK COMPATIBILITY IDEOGRAPH-2F866
+2F867 ; NFKC_CF; 36EE # Lo CJK COMPATIBILITY IDEOGRAPH-2F867
+2F868 ; NFKC_CF; 36FC # Lo CJK COMPATIBILITY IDEOGRAPH-2F868
+2F869 ; NFKC_CF; 5B08 # Lo CJK COMPATIBILITY IDEOGRAPH-2F869
+2F86A..2F86B ; NFKC_CF; 5B3E # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F86A..CJK COMPATIBILITY IDEOGRAPH-2F86B
+2F86C ; NFKC_CF; 219C8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86C
+2F86D ; NFKC_CF; 5BC3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86D
+2F86E ; NFKC_CF; 5BD8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86E
+2F86F ; NFKC_CF; 5BE7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F86F
+2F870 ; NFKC_CF; 5BF3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F870
+2F871 ; NFKC_CF; 21B18 # Lo CJK COMPATIBILITY IDEOGRAPH-2F871
+2F872 ; NFKC_CF; 5BFF # Lo CJK COMPATIBILITY IDEOGRAPH-2F872
+2F873 ; NFKC_CF; 5C06 # Lo CJK COMPATIBILITY IDEOGRAPH-2F873
+2F874 ; NFKC_CF; 5F53 # Lo CJK COMPATIBILITY IDEOGRAPH-2F874
+2F875 ; NFKC_CF; 5C22 # Lo CJK COMPATIBILITY IDEOGRAPH-2F875
+2F876 ; NFKC_CF; 3781 # Lo CJK COMPATIBILITY IDEOGRAPH-2F876
+2F877 ; NFKC_CF; 5C60 # Lo CJK COMPATIBILITY IDEOGRAPH-2F877
+2F878 ; NFKC_CF; 5C6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F878
+2F879 ; NFKC_CF; 5CC0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F879
+2F87A ; NFKC_CF; 5C8D # Lo CJK COMPATIBILITY IDEOGRAPH-2F87A
+2F87B ; NFKC_CF; 21DE4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F87B
+2F87C ; NFKC_CF; 5D43 # Lo CJK COMPATIBILITY IDEOGRAPH-2F87C
+2F87D ; NFKC_CF; 21DE6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F87D
+2F87E ; NFKC_CF; 5D6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F87E
+2F87F ; NFKC_CF; 5D6B # Lo CJK COMPATIBILITY IDEOGRAPH-2F87F
+2F880 ; NFKC_CF; 5D7C # Lo CJK COMPATIBILITY IDEOGRAPH-2F880
+2F881 ; NFKC_CF; 5DE1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F881
+2F882 ; NFKC_CF; 5DE2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F882
+2F883 ; NFKC_CF; 382F # Lo CJK COMPATIBILITY IDEOGRAPH-2F883
+2F884 ; NFKC_CF; 5DFD # Lo CJK COMPATIBILITY IDEOGRAPH-2F884
+2F885 ; NFKC_CF; 5E28 # Lo CJK COMPATIBILITY IDEOGRAPH-2F885
+2F886 ; NFKC_CF; 5E3D # Lo CJK COMPATIBILITY IDEOGRAPH-2F886
+2F887 ; NFKC_CF; 5E69 # Lo CJK COMPATIBILITY IDEOGRAPH-2F887
+2F888 ; NFKC_CF; 3862 # Lo CJK COMPATIBILITY IDEOGRAPH-2F888
+2F889 ; NFKC_CF; 22183 # Lo CJK COMPATIBILITY IDEOGRAPH-2F889
+2F88A ; NFKC_CF; 387C # Lo CJK COMPATIBILITY IDEOGRAPH-2F88A
+2F88B ; NFKC_CF; 5EB0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88B
+2F88C ; NFKC_CF; 5EB3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88C
+2F88D ; NFKC_CF; 5EB6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88D
+2F88E ; NFKC_CF; 5ECA # Lo CJK COMPATIBILITY IDEOGRAPH-2F88E
+2F88F ; NFKC_CF; 2A392 # Lo CJK COMPATIBILITY IDEOGRAPH-2F88F
+2F890 ; NFKC_CF; 5EFE # Lo CJK COMPATIBILITY IDEOGRAPH-2F890
+2F891..2F892 ; NFKC_CF; 22331 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F891..CJK COMPATIBILITY IDEOGRAPH-2F892
+2F893 ; NFKC_CF; 8201 # Lo CJK COMPATIBILITY IDEOGRAPH-2F893
+2F894..2F895 ; NFKC_CF; 5F22 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F894..CJK COMPATIBILITY IDEOGRAPH-2F895
+2F896 ; NFKC_CF; 38C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F896
+2F897 ; NFKC_CF; 232B8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F897
+2F898 ; NFKC_CF; 261DA # Lo CJK COMPATIBILITY IDEOGRAPH-2F898
+2F899 ; NFKC_CF; 5F62 # Lo CJK COMPATIBILITY IDEOGRAPH-2F899
+2F89A ; NFKC_CF; 5F6B # Lo CJK COMPATIBILITY IDEOGRAPH-2F89A
+2F89B ; NFKC_CF; 38E3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F89B
+2F89C ; NFKC_CF; 5F9A # Lo CJK COMPATIBILITY IDEOGRAPH-2F89C
+2F89D ; NFKC_CF; 5FCD # Lo CJK COMPATIBILITY IDEOGRAPH-2F89D
+2F89E ; NFKC_CF; 5FD7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F89E
+2F89F ; NFKC_CF; 5FF9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F89F
+2F8A0 ; NFKC_CF; 6081 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A0
+2F8A1 ; NFKC_CF; 393A # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A1
+2F8A2 ; NFKC_CF; 391C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A2
+2F8A3 ; NFKC_CF; 6094 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A3
+2F8A4 ; NFKC_CF; 226D4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A4
+2F8A5 ; NFKC_CF; 60C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A5
+2F8A6 ; NFKC_CF; 6148 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A6
+2F8A7 ; NFKC_CF; 614C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A7
+2F8A8 ; NFKC_CF; 614E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A8
+2F8A9 ; NFKC_CF; 614C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8A9
+2F8AA ; NFKC_CF; 617A # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AA
+2F8AB ; NFKC_CF; 618E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AB
+2F8AC ; NFKC_CF; 61B2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AC
+2F8AD ; NFKC_CF; 61A4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AD
+2F8AE ; NFKC_CF; 61AF # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AE
+2F8AF ; NFKC_CF; 61DE # Lo CJK COMPATIBILITY IDEOGRAPH-2F8AF
+2F8B0 ; NFKC_CF; 61F2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B0
+2F8B1 ; NFKC_CF; 61F6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B1
+2F8B2 ; NFKC_CF; 6210 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B2
+2F8B3 ; NFKC_CF; 621B # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B3
+2F8B4 ; NFKC_CF; 625D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B4
+2F8B5 ; NFKC_CF; 62B1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B5
+2F8B6 ; NFKC_CF; 62D4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B6
+2F8B7 ; NFKC_CF; 6350 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B7
+2F8B8 ; NFKC_CF; 22B0C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B8
+2F8B9 ; NFKC_CF; 633D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8B9
+2F8BA ; NFKC_CF; 62FC # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BA
+2F8BB ; NFKC_CF; 6368 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BB
+2F8BC ; NFKC_CF; 6383 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BC
+2F8BD ; NFKC_CF; 63E4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BD
+2F8BE ; NFKC_CF; 22BF1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BE
+2F8BF ; NFKC_CF; 6422 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8BF
+2F8C0 ; NFKC_CF; 63C5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C0
+2F8C1 ; NFKC_CF; 63A9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C1
+2F8C2 ; NFKC_CF; 3A2E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C2
+2F8C3 ; NFKC_CF; 6469 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C3
+2F8C4 ; NFKC_CF; 647E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C4
+2F8C5 ; NFKC_CF; 649D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C5
+2F8C6 ; NFKC_CF; 6477 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C6
+2F8C7 ; NFKC_CF; 3A6C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C7
+2F8C8 ; NFKC_CF; 654F # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C8
+2F8C9 ; NFKC_CF; 656C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8C9
+2F8CA ; NFKC_CF; 2300A # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CA
+2F8CB ; NFKC_CF; 65E3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CB
+2F8CC ; NFKC_CF; 66F8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CC
+2F8CD ; NFKC_CF; 6649 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CD
+2F8CE ; NFKC_CF; 3B19 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CE
+2F8CF ; NFKC_CF; 6691 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8CF
+2F8D0 ; NFKC_CF; 3B08 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D0
+2F8D1 ; NFKC_CF; 3AE4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D1
+2F8D2 ; NFKC_CF; 5192 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D2
+2F8D3 ; NFKC_CF; 5195 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D3
+2F8D4 ; NFKC_CF; 6700 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D4
+2F8D5 ; NFKC_CF; 669C # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D5
+2F8D6 ; NFKC_CF; 80AD # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D6
+2F8D7 ; NFKC_CF; 43D9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D7
+2F8D8 ; NFKC_CF; 6717 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D8
+2F8D9 ; NFKC_CF; 671B # Lo CJK COMPATIBILITY IDEOGRAPH-2F8D9
+2F8DA ; NFKC_CF; 6721 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DA
+2F8DB ; NFKC_CF; 675E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DB
+2F8DC ; NFKC_CF; 6753 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DC
+2F8DD ; NFKC_CF; 233C3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DD
+2F8DE ; NFKC_CF; 3B49 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DE
+2F8DF ; NFKC_CF; 67FA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8DF
+2F8E0 ; NFKC_CF; 6785 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E0
+2F8E1 ; NFKC_CF; 6852 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E1
+2F8E2 ; NFKC_CF; 6885 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E2
+2F8E3 ; NFKC_CF; 2346D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E3
+2F8E4 ; NFKC_CF; 688E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E4
+2F8E5 ; NFKC_CF; 681F # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E5
+2F8E6 ; NFKC_CF; 6914 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E6
+2F8E7 ; NFKC_CF; 3B9D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E7
+2F8E8 ; NFKC_CF; 6942 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E8
+2F8E9 ; NFKC_CF; 69A3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8E9
+2F8EA ; NFKC_CF; 69EA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EA
+2F8EB ; NFKC_CF; 6AA8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EB
+2F8EC ; NFKC_CF; 236A3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EC
+2F8ED ; NFKC_CF; 6ADB # Lo CJK COMPATIBILITY IDEOGRAPH-2F8ED
+2F8EE ; NFKC_CF; 3C18 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EE
+2F8EF ; NFKC_CF; 6B21 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8EF
+2F8F0 ; NFKC_CF; 238A7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F0
+2F8F1 ; NFKC_CF; 6B54 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F1
+2F8F2 ; NFKC_CF; 3C4E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F2
+2F8F3 ; NFKC_CF; 6B72 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F3
+2F8F4 ; NFKC_CF; 6B9F # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F4
+2F8F5 ; NFKC_CF; 6BBA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F5
+2F8F6 ; NFKC_CF; 6BBB # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F6
+2F8F7 ; NFKC_CF; 23A8D # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F7
+2F8F8 ; NFKC_CF; 21D0B # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F8
+2F8F9 ; NFKC_CF; 23AFA # Lo CJK COMPATIBILITY IDEOGRAPH-2F8F9
+2F8FA ; NFKC_CF; 6C4E # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FA
+2F8FB ; NFKC_CF; 23CBC # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FB
+2F8FC ; NFKC_CF; 6CBF # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FC
+2F8FD ; NFKC_CF; 6CCD # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FD
+2F8FE ; NFKC_CF; 6C67 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FE
+2F8FF ; NFKC_CF; 6D16 # Lo CJK COMPATIBILITY IDEOGRAPH-2F8FF
+2F900 ; NFKC_CF; 6D3E # Lo CJK COMPATIBILITY IDEOGRAPH-2F900
+2F901 ; NFKC_CF; 6D77 # Lo CJK COMPATIBILITY IDEOGRAPH-2F901
+2F902 ; NFKC_CF; 6D41 # Lo CJK COMPATIBILITY IDEOGRAPH-2F902
+2F903 ; NFKC_CF; 6D69 # Lo CJK COMPATIBILITY IDEOGRAPH-2F903
+2F904 ; NFKC_CF; 6D78 # Lo CJK COMPATIBILITY IDEOGRAPH-2F904
+2F905 ; NFKC_CF; 6D85 # Lo CJK COMPATIBILITY IDEOGRAPH-2F905
+2F906 ; NFKC_CF; 23D1E # Lo CJK COMPATIBILITY IDEOGRAPH-2F906
+2F907 ; NFKC_CF; 6D34 # Lo CJK COMPATIBILITY IDEOGRAPH-2F907
+2F908 ; NFKC_CF; 6E2F # Lo CJK COMPATIBILITY IDEOGRAPH-2F908
+2F909 ; NFKC_CF; 6E6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F909
+2F90A ; NFKC_CF; 3D33 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90A
+2F90B ; NFKC_CF; 6ECB # Lo CJK COMPATIBILITY IDEOGRAPH-2F90B
+2F90C ; NFKC_CF; 6EC7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90C
+2F90D ; NFKC_CF; 23ED1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90D
+2F90E ; NFKC_CF; 6DF9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F90E
+2F90F ; NFKC_CF; 6F6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F90F
+2F910 ; NFKC_CF; 23F5E # Lo CJK COMPATIBILITY IDEOGRAPH-2F910
+2F911 ; NFKC_CF; 23F8E # Lo CJK COMPATIBILITY IDEOGRAPH-2F911
+2F912 ; NFKC_CF; 6FC6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F912
+2F913 ; NFKC_CF; 7039 # Lo CJK COMPATIBILITY IDEOGRAPH-2F913
+2F914 ; NFKC_CF; 701E # Lo CJK COMPATIBILITY IDEOGRAPH-2F914
+2F915 ; NFKC_CF; 701B # Lo CJK COMPATIBILITY IDEOGRAPH-2F915
+2F916 ; NFKC_CF; 3D96 # Lo CJK COMPATIBILITY IDEOGRAPH-2F916
+2F917 ; NFKC_CF; 704A # Lo CJK COMPATIBILITY IDEOGRAPH-2F917
+2F918 ; NFKC_CF; 707D # Lo CJK COMPATIBILITY IDEOGRAPH-2F918
+2F919 ; NFKC_CF; 7077 # Lo CJK COMPATIBILITY IDEOGRAPH-2F919
+2F91A ; NFKC_CF; 70AD # Lo CJK COMPATIBILITY IDEOGRAPH-2F91A
+2F91B ; NFKC_CF; 20525 # Lo CJK COMPATIBILITY IDEOGRAPH-2F91B
+2F91C ; NFKC_CF; 7145 # Lo CJK COMPATIBILITY IDEOGRAPH-2F91C
+2F91D ; NFKC_CF; 24263 # Lo CJK COMPATIBILITY IDEOGRAPH-2F91D
+2F91E ; NFKC_CF; 719C # Lo CJK COMPATIBILITY IDEOGRAPH-2F91E
+2F91F ; NFKC_CF; 243AB # Lo CJK COMPATIBILITY IDEOGRAPH-2F91F
+2F920 ; NFKC_CF; 7228 # Lo CJK COMPATIBILITY IDEOGRAPH-2F920
+2F921 ; NFKC_CF; 7235 # Lo CJK COMPATIBILITY IDEOGRAPH-2F921
+2F922 ; NFKC_CF; 7250 # Lo CJK COMPATIBILITY IDEOGRAPH-2F922
+2F923 ; NFKC_CF; 24608 # Lo CJK COMPATIBILITY IDEOGRAPH-2F923
+2F924 ; NFKC_CF; 7280 # Lo CJK COMPATIBILITY IDEOGRAPH-2F924
+2F925 ; NFKC_CF; 7295 # Lo CJK COMPATIBILITY IDEOGRAPH-2F925
+2F926 ; NFKC_CF; 24735 # Lo CJK COMPATIBILITY IDEOGRAPH-2F926
+2F927 ; NFKC_CF; 24814 # Lo CJK COMPATIBILITY IDEOGRAPH-2F927
+2F928 ; NFKC_CF; 737A # Lo CJK COMPATIBILITY IDEOGRAPH-2F928
+2F929 ; NFKC_CF; 738B # Lo CJK COMPATIBILITY IDEOGRAPH-2F929
+2F92A ; NFKC_CF; 3EAC # Lo CJK COMPATIBILITY IDEOGRAPH-2F92A
+2F92B ; NFKC_CF; 73A5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F92B
+2F92C..2F92D ; NFKC_CF; 3EB8 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F92C..CJK COMPATIBILITY IDEOGRAPH-2F92D
+2F92E ; NFKC_CF; 7447 # Lo CJK COMPATIBILITY IDEOGRAPH-2F92E
+2F92F ; NFKC_CF; 745C # Lo CJK COMPATIBILITY IDEOGRAPH-2F92F
+2F930 ; NFKC_CF; 7471 # Lo CJK COMPATIBILITY IDEOGRAPH-2F930
+2F931 ; NFKC_CF; 7485 # Lo CJK COMPATIBILITY IDEOGRAPH-2F931
+2F932 ; NFKC_CF; 74CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F932
+2F933 ; NFKC_CF; 3F1B # Lo CJK COMPATIBILITY IDEOGRAPH-2F933
+2F934 ; NFKC_CF; 7524 # Lo CJK COMPATIBILITY IDEOGRAPH-2F934
+2F935 ; NFKC_CF; 24C36 # Lo CJK COMPATIBILITY IDEOGRAPH-2F935
+2F936 ; NFKC_CF; 753E # Lo CJK COMPATIBILITY IDEOGRAPH-2F936
+2F937 ; NFKC_CF; 24C92 # Lo CJK COMPATIBILITY IDEOGRAPH-2F937
+2F938 ; NFKC_CF; 7570 # Lo CJK COMPATIBILITY IDEOGRAPH-2F938
+2F939 ; NFKC_CF; 2219F # Lo CJK COMPATIBILITY IDEOGRAPH-2F939
+2F93A ; NFKC_CF; 7610 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93A
+2F93B ; NFKC_CF; 24FA1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93B
+2F93C ; NFKC_CF; 24FB8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93C
+2F93D ; NFKC_CF; 25044 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93D
+2F93E ; NFKC_CF; 3FFC # Lo CJK COMPATIBILITY IDEOGRAPH-2F93E
+2F93F ; NFKC_CF; 4008 # Lo CJK COMPATIBILITY IDEOGRAPH-2F93F
+2F940 ; NFKC_CF; 76F4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F940
+2F941 ; NFKC_CF; 250F3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F941
+2F942 ; NFKC_CF; 250F2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F942
+2F943 ; NFKC_CF; 25119 # Lo CJK COMPATIBILITY IDEOGRAPH-2F943
+2F944 ; NFKC_CF; 25133 # Lo CJK COMPATIBILITY IDEOGRAPH-2F944
+2F945 ; NFKC_CF; 771E # Lo CJK COMPATIBILITY IDEOGRAPH-2F945
+2F946..2F947 ; NFKC_CF; 771F # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F946..CJK COMPATIBILITY IDEOGRAPH-2F947
+2F948 ; NFKC_CF; 774A # Lo CJK COMPATIBILITY IDEOGRAPH-2F948
+2F949 ; NFKC_CF; 4039 # Lo CJK COMPATIBILITY IDEOGRAPH-2F949
+2F94A ; NFKC_CF; 778B # Lo CJK COMPATIBILITY IDEOGRAPH-2F94A
+2F94B ; NFKC_CF; 4046 # Lo CJK COMPATIBILITY IDEOGRAPH-2F94B
+2F94C ; NFKC_CF; 4096 # Lo CJK COMPATIBILITY IDEOGRAPH-2F94C
+2F94D ; NFKC_CF; 2541D # Lo CJK COMPATIBILITY IDEOGRAPH-2F94D
+2F94E ; NFKC_CF; 784E # Lo CJK COMPATIBILITY IDEOGRAPH-2F94E
+2F94F ; NFKC_CF; 788C # Lo CJK COMPATIBILITY IDEOGRAPH-2F94F
+2F950 ; NFKC_CF; 78CC # Lo CJK COMPATIBILITY IDEOGRAPH-2F950
+2F951 ; NFKC_CF; 40E3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F951
+2F952 ; NFKC_CF; 25626 # Lo CJK COMPATIBILITY IDEOGRAPH-2F952
+2F953 ; NFKC_CF; 7956 # Lo CJK COMPATIBILITY IDEOGRAPH-2F953
+2F954 ; NFKC_CF; 2569A # Lo CJK COMPATIBILITY IDEOGRAPH-2F954
+2F955 ; NFKC_CF; 256C5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F955
+2F956 ; NFKC_CF; 798F # Lo CJK COMPATIBILITY IDEOGRAPH-2F956
+2F957 ; NFKC_CF; 79EB # Lo CJK COMPATIBILITY IDEOGRAPH-2F957
+2F958 ; NFKC_CF; 412F # Lo CJK COMPATIBILITY IDEOGRAPH-2F958
+2F959 ; NFKC_CF; 7A40 # Lo CJK COMPATIBILITY IDEOGRAPH-2F959
+2F95A ; NFKC_CF; 7A4A # Lo CJK COMPATIBILITY IDEOGRAPH-2F95A
+2F95B ; NFKC_CF; 7A4F # Lo CJK COMPATIBILITY IDEOGRAPH-2F95B
+2F95C ; NFKC_CF; 2597C # Lo CJK COMPATIBILITY IDEOGRAPH-2F95C
+2F95D..2F95E ; NFKC_CF; 25AA7 # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F95D..CJK COMPATIBILITY IDEOGRAPH-2F95E
+2F95F ; NFKC_CF; 7AEE # Lo CJK COMPATIBILITY IDEOGRAPH-2F95F
+2F960 ; NFKC_CF; 4202 # Lo CJK COMPATIBILITY IDEOGRAPH-2F960
+2F961 ; NFKC_CF; 25BAB # Lo CJK COMPATIBILITY IDEOGRAPH-2F961
+2F962 ; NFKC_CF; 7BC6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F962
+2F963 ; NFKC_CF; 7BC9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F963
+2F964 ; NFKC_CF; 4227 # Lo CJK COMPATIBILITY IDEOGRAPH-2F964
+2F965 ; NFKC_CF; 25C80 # Lo CJK COMPATIBILITY IDEOGRAPH-2F965
+2F966 ; NFKC_CF; 7CD2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F966
+2F967 ; NFKC_CF; 42A0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F967
+2F968 ; NFKC_CF; 7CE8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F968
+2F969 ; NFKC_CF; 7CE3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F969
+2F96A ; NFKC_CF; 7D00 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96A
+2F96B ; NFKC_CF; 25F86 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96B
+2F96C ; NFKC_CF; 7D63 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96C
+2F96D ; NFKC_CF; 4301 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96D
+2F96E ; NFKC_CF; 7DC7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96E
+2F96F ; NFKC_CF; 7E02 # Lo CJK COMPATIBILITY IDEOGRAPH-2F96F
+2F970 ; NFKC_CF; 7E45 # Lo CJK COMPATIBILITY IDEOGRAPH-2F970
+2F971 ; NFKC_CF; 4334 # Lo CJK COMPATIBILITY IDEOGRAPH-2F971
+2F972 ; NFKC_CF; 26228 # Lo CJK COMPATIBILITY IDEOGRAPH-2F972
+2F973 ; NFKC_CF; 26247 # Lo CJK COMPATIBILITY IDEOGRAPH-2F973
+2F974 ; NFKC_CF; 4359 # Lo CJK COMPATIBILITY IDEOGRAPH-2F974
+2F975 ; NFKC_CF; 262D9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F975
+2F976 ; NFKC_CF; 7F7A # Lo CJK COMPATIBILITY IDEOGRAPH-2F976
+2F977 ; NFKC_CF; 2633E # Lo CJK COMPATIBILITY IDEOGRAPH-2F977
+2F978 ; NFKC_CF; 7F95 # Lo CJK COMPATIBILITY IDEOGRAPH-2F978
+2F979 ; NFKC_CF; 7FFA # Lo CJK COMPATIBILITY IDEOGRAPH-2F979
+2F97A ; NFKC_CF; 8005 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97A
+2F97B ; NFKC_CF; 264DA # Lo CJK COMPATIBILITY IDEOGRAPH-2F97B
+2F97C ; NFKC_CF; 26523 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97C
+2F97D ; NFKC_CF; 8060 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97D
+2F97E ; NFKC_CF; 265A8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97E
+2F97F ; NFKC_CF; 8070 # Lo CJK COMPATIBILITY IDEOGRAPH-2F97F
+2F980 ; NFKC_CF; 2335F # Lo CJK COMPATIBILITY IDEOGRAPH-2F980
+2F981 ; NFKC_CF; 43D5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F981
+2F982 ; NFKC_CF; 80B2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F982
+2F983 ; NFKC_CF; 8103 # Lo CJK COMPATIBILITY IDEOGRAPH-2F983
+2F984 ; NFKC_CF; 440B # Lo CJK COMPATIBILITY IDEOGRAPH-2F984
+2F985 ; NFKC_CF; 813E # Lo CJK COMPATIBILITY IDEOGRAPH-2F985
+2F986 ; NFKC_CF; 5AB5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F986
+2F987 ; NFKC_CF; 267A7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F987
+2F988 ; NFKC_CF; 267B5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F988
+2F989 ; NFKC_CF; 23393 # Lo CJK COMPATIBILITY IDEOGRAPH-2F989
+2F98A ; NFKC_CF; 2339C # Lo CJK COMPATIBILITY IDEOGRAPH-2F98A
+2F98B ; NFKC_CF; 8201 # Lo CJK COMPATIBILITY IDEOGRAPH-2F98B
+2F98C ; NFKC_CF; 8204 # Lo CJK COMPATIBILITY IDEOGRAPH-2F98C
+2F98D ; NFKC_CF; 8F9E # Lo CJK COMPATIBILITY IDEOGRAPH-2F98D
+2F98E ; NFKC_CF; 446B # Lo CJK COMPATIBILITY IDEOGRAPH-2F98E
+2F98F ; NFKC_CF; 8291 # Lo CJK COMPATIBILITY IDEOGRAPH-2F98F
+2F990 ; NFKC_CF; 828B # Lo CJK COMPATIBILITY IDEOGRAPH-2F990
+2F991 ; NFKC_CF; 829D # Lo CJK COMPATIBILITY IDEOGRAPH-2F991
+2F992 ; NFKC_CF; 52B3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F992
+2F993 ; NFKC_CF; 82B1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F993
+2F994 ; NFKC_CF; 82B3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F994
+2F995 ; NFKC_CF; 82BD # Lo CJK COMPATIBILITY IDEOGRAPH-2F995
+2F996 ; NFKC_CF; 82E6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F996
+2F997 ; NFKC_CF; 26B3C # Lo CJK COMPATIBILITY IDEOGRAPH-2F997
+2F998 ; NFKC_CF; 82E5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F998
+2F999 ; NFKC_CF; 831D # Lo CJK COMPATIBILITY IDEOGRAPH-2F999
+2F99A ; NFKC_CF; 8363 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99A
+2F99B ; NFKC_CF; 83AD # Lo CJK COMPATIBILITY IDEOGRAPH-2F99B
+2F99C ; NFKC_CF; 8323 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99C
+2F99D ; NFKC_CF; 83BD # Lo CJK COMPATIBILITY IDEOGRAPH-2F99D
+2F99E ; NFKC_CF; 83E7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99E
+2F99F ; NFKC_CF; 8457 # Lo CJK COMPATIBILITY IDEOGRAPH-2F99F
+2F9A0 ; NFKC_CF; 8353 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A0
+2F9A1 ; NFKC_CF; 83CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A1
+2F9A2 ; NFKC_CF; 83CC # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A2
+2F9A3 ; NFKC_CF; 83DC # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A3
+2F9A4 ; NFKC_CF; 26C36 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A4
+2F9A5 ; NFKC_CF; 26D6B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A5
+2F9A6 ; NFKC_CF; 26CD5 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A6
+2F9A7 ; NFKC_CF; 452B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A7
+2F9A8 ; NFKC_CF; 84F1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A8
+2F9A9 ; NFKC_CF; 84F3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9A9
+2F9AA ; NFKC_CF; 8516 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AA
+2F9AB ; NFKC_CF; 273CA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AB
+2F9AC ; NFKC_CF; 8564 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AC
+2F9AD ; NFKC_CF; 26F2C # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AD
+2F9AE ; NFKC_CF; 455D # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AE
+2F9AF ; NFKC_CF; 4561 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9AF
+2F9B0 ; NFKC_CF; 26FB1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B0
+2F9B1 ; NFKC_CF; 270D2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B1
+2F9B2 ; NFKC_CF; 456B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B2
+2F9B3 ; NFKC_CF; 8650 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B3
+2F9B4 ; NFKC_CF; 865C # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B4
+2F9B5 ; NFKC_CF; 8667 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B5
+2F9B6 ; NFKC_CF; 8669 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B6
+2F9B7 ; NFKC_CF; 86A9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B7
+2F9B8 ; NFKC_CF; 8688 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B8
+2F9B9 ; NFKC_CF; 870E # Lo CJK COMPATIBILITY IDEOGRAPH-2F9B9
+2F9BA ; NFKC_CF; 86E2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BA
+2F9BB ; NFKC_CF; 8779 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BB
+2F9BC ; NFKC_CF; 8728 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BC
+2F9BD ; NFKC_CF; 876B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BD
+2F9BE ; NFKC_CF; 8786 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BE
+2F9BF ; NFKC_CF; 45D7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9BF
+2F9C0 ; NFKC_CF; 87E1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C0
+2F9C1 ; NFKC_CF; 8801 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C1
+2F9C2 ; NFKC_CF; 45F9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C2
+2F9C3 ; NFKC_CF; 8860 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C3
+2F9C4 ; NFKC_CF; 8863 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C4
+2F9C5 ; NFKC_CF; 27667 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C5
+2F9C6 ; NFKC_CF; 88D7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C6
+2F9C7 ; NFKC_CF; 88DE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C7
+2F9C8 ; NFKC_CF; 4635 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C8
+2F9C9 ; NFKC_CF; 88FA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9C9
+2F9CA ; NFKC_CF; 34BB # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CA
+2F9CB ; NFKC_CF; 278AE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CB
+2F9CC ; NFKC_CF; 27966 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CC
+2F9CD ; NFKC_CF; 46BE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CD
+2F9CE ; NFKC_CF; 46C7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CE
+2F9CF ; NFKC_CF; 8AA0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9CF
+2F9D0 ; NFKC_CF; 8AED # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D0
+2F9D1 ; NFKC_CF; 8B8A # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D1
+2F9D2 ; NFKC_CF; 8C55 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D2
+2F9D3 ; NFKC_CF; 27CA8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D3
+2F9D4 ; NFKC_CF; 8CAB # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D4
+2F9D5 ; NFKC_CF; 8CC1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D5
+2F9D6 ; NFKC_CF; 8D1B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D6
+2F9D7 ; NFKC_CF; 8D77 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D7
+2F9D8 ; NFKC_CF; 27F2F # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D8
+2F9D9 ; NFKC_CF; 20804 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9D9
+2F9DA ; NFKC_CF; 8DCB # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DA
+2F9DB ; NFKC_CF; 8DBC # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DB
+2F9DC ; NFKC_CF; 8DF0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DC
+2F9DD ; NFKC_CF; 208DE # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DD
+2F9DE ; NFKC_CF; 8ED4 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DE
+2F9DF ; NFKC_CF; 8F38 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9DF
+2F9E0 ; NFKC_CF; 285D2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E0
+2F9E1 ; NFKC_CF; 285ED # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E1
+2F9E2 ; NFKC_CF; 9094 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E2
+2F9E3 ; NFKC_CF; 90F1 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E3
+2F9E4 ; NFKC_CF; 9111 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E4
+2F9E5 ; NFKC_CF; 2872E # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E5
+2F9E6 ; NFKC_CF; 911B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E6
+2F9E7 ; NFKC_CF; 9238 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E7
+2F9E8 ; NFKC_CF; 92D7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E8
+2F9E9 ; NFKC_CF; 92D8 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9E9
+2F9EA ; NFKC_CF; 927C # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EA
+2F9EB ; NFKC_CF; 93F9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EB
+2F9EC ; NFKC_CF; 9415 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EC
+2F9ED ; NFKC_CF; 28BFA # Lo CJK COMPATIBILITY IDEOGRAPH-2F9ED
+2F9EE ; NFKC_CF; 958B # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EE
+2F9EF ; NFKC_CF; 4995 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9EF
+2F9F0 ; NFKC_CF; 95B7 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F0
+2F9F1 ; NFKC_CF; 28D77 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F1
+2F9F2 ; NFKC_CF; 49E6 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F2
+2F9F3 ; NFKC_CF; 96C3 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F3
+2F9F4 ; NFKC_CF; 5DB2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F4
+2F9F5 ; NFKC_CF; 9723 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F5
+2F9F6 ; NFKC_CF; 29145 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F6
+2F9F7 ; NFKC_CF; 2921A # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F7
+2F9F8 ; NFKC_CF; 4A6E # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F8
+2F9F9 ; NFKC_CF; 4A76 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9F9
+2F9FA ; NFKC_CF; 97E0 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FA
+2F9FB ; NFKC_CF; 2940A # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FB
+2F9FC ; NFKC_CF; 4AB2 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FC
+2F9FD ; NFKC_CF; 29496 # Lo CJK COMPATIBILITY IDEOGRAPH-2F9FD
+2F9FE..2F9FF ; NFKC_CF; 980B # Lo [2] CJK COMPATIBILITY IDEOGRAPH-2F9FE..CJK COMPATIBILITY IDEOGRAPH-2F9FF
+2FA00 ; NFKC_CF; 9829 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA00
+2FA01 ; NFKC_CF; 295B6 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA01
+2FA02 ; NFKC_CF; 98E2 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA02
+2FA03 ; NFKC_CF; 4B33 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA03
+2FA04 ; NFKC_CF; 9929 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA04
+2FA05 ; NFKC_CF; 99A7 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA05
+2FA06 ; NFKC_CF; 99C2 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA06
+2FA07 ; NFKC_CF; 99FE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA07
+2FA08 ; NFKC_CF; 4BCE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA08
+2FA09 ; NFKC_CF; 29B30 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA09
+2FA0A ; NFKC_CF; 9B12 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0A
+2FA0B ; NFKC_CF; 9C40 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0B
+2FA0C ; NFKC_CF; 9CFD # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0C
+2FA0D ; NFKC_CF; 4CCE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0D
+2FA0E ; NFKC_CF; 4CED # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0E
+2FA0F ; NFKC_CF; 9D67 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA0F
+2FA10 ; NFKC_CF; 2A0CE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA10
+2FA11 ; NFKC_CF; 4CF8 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA11
+2FA12 ; NFKC_CF; 2A105 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA12
+2FA13 ; NFKC_CF; 2A20E # Lo CJK COMPATIBILITY IDEOGRAPH-2FA13
+2FA14 ; NFKC_CF; 2A291 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA14
+2FA15 ; NFKC_CF; 9EBB # Lo CJK COMPATIBILITY IDEOGRAPH-2FA15
+2FA16 ; NFKC_CF; 4D56 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA16
+2FA17 ; NFKC_CF; 9EF9 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA17
+2FA18 ; NFKC_CF; 9EFE # Lo CJK COMPATIBILITY IDEOGRAPH-2FA18
+2FA19 ; NFKC_CF; 9F05 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA19
+2FA1A ; NFKC_CF; 9F0F # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1A
+2FA1B ; NFKC_CF; 9F16 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1B
+2FA1C ; NFKC_CF; 9F3B # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1C
+2FA1D ; NFKC_CF; 2A600 # Lo CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0000 ; NFKC_CF; # Cn <reserved-E0000>
+E0001 ; NFKC_CF; # Cf LANGUAGE TAG
+E0002..E001F ; NFKC_CF; # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0020..E007F ; NFKC_CF; # Cf [96] TAG SPACE..CANCEL TAG
+E0080..E00FF ; NFKC_CF; # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E0100..E01EF ; NFKC_CF; # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+E01F0..E0FFF ; NFKC_CF; # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 10429
+
+# ================================================
+
+# Derived Property: Changes_When_NFKC_Casefolded (CWKCF)
+# Characters that are not stable under an NFKC_Casefold mapping.
+# As defined by cp != NFKC_Casefold(cp)
+
+0041..005A ; Changes_When_NFKC_Casefolded # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+00A0 ; Changes_When_NFKC_Casefolded # Zs NO-BREAK SPACE
+00A8 ; Changes_When_NFKC_Casefolded # Sk DIAERESIS
+00AA ; Changes_When_NFKC_Casefolded # Lo FEMININE ORDINAL INDICATOR
+00AD ; Changes_When_NFKC_Casefolded # Cf SOFT HYPHEN
+00AF ; Changes_When_NFKC_Casefolded # Sk MACRON
+00B2..00B3 ; Changes_When_NFKC_Casefolded # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+00B4 ; Changes_When_NFKC_Casefolded # Sk ACUTE ACCENT
+00B5 ; Changes_When_NFKC_Casefolded # L& MICRO SIGN
+00B8 ; Changes_When_NFKC_Casefolded # Sk CEDILLA
+00B9 ; Changes_When_NFKC_Casefolded # No SUPERSCRIPT ONE
+00BA ; Changes_When_NFKC_Casefolded # Lo MASCULINE ORDINAL INDICATOR
+00BC..00BE ; Changes_When_NFKC_Casefolded # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+00C0..00D6 ; Changes_When_NFKC_Casefolded # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00DF ; Changes_When_NFKC_Casefolded # L& [8] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER SHARP S
+0100 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH MACRON
+0102 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE
+0104 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH OGONEK
+0106 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER C WITH ACUTE
+0108 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+010A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER C WITH DOT ABOVE
+010C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER C WITH CARON
+010E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH CARON
+0110 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH STROKE
+0112 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON
+0114 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH BREVE
+0116 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH DOT ABOVE
+0118 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH OGONEK
+011A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CARON
+011C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+011E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH BREVE
+0120 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH DOT ABOVE
+0122 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH CEDILLA
+0124 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+0126 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH STROKE
+0128 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH TILDE
+012A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH MACRON
+012C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH BREVE
+012E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH OGONEK
+0130 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH DOT ABOVE
+0132..0134 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LIGATURE IJ..LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+0136 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH CEDILLA
+0139 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH ACUTE
+013B ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH CEDILLA
+013D ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH CARON
+013F..0141 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN CAPITAL LETTER L WITH STROKE
+0143 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH ACUTE
+0145 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH CEDILLA
+0147 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH CARON
+0149..014A ; Changes_When_NFKC_Casefolded # L& [2] LATIN SMALL LETTER N PRECEDED BY APOSTROPHE..LATIN CAPITAL LETTER ENG
+014C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON
+014E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH BREVE
+0150 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0152 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LIGATURE OE
+0154 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH ACUTE
+0156 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH CEDILLA
+0158 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH CARON
+015A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH ACUTE
+015C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+015E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH CEDILLA
+0160 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH CARON
+0162 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH CEDILLA
+0164 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH CARON
+0166 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH STROKE
+0168 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE
+016A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH MACRON
+016C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH BREVE
+016E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH RING ABOVE
+0170 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0172 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH OGONEK
+0174 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+0176 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+0178..0179 ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+017B ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE
+017D ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH CARON
+017F ; Changes_When_NFKC_Casefolded # L& LATIN SMALL LETTER LONG S
+0181..0182 ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+0184 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER TONE SIX
+0186..0187 ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+0189..018B ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+018E..0191 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+0193..0194 ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+0196..0198 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+019C..019D ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+019F..01A0 ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+01A2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER OI
+01A4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER P WITH HOOK
+01A6..01A7 ; Changes_When_NFKC_Casefolded # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+01A9 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER ESH
+01AC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH HOOK
+01AE..01AF ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+01B1..01B3 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+01B5 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH STROKE
+01B7..01B8 ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+01BC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER TONE FIVE
+01C4..01CD ; Changes_When_NFKC_Casefolded # L& [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON
+01CF ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH CARON
+01D1 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH CARON
+01D3 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH CARON
+01D5 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+01D7 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+01D9 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+01DB ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+01DE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+01E0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+01E2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AE WITH MACRON
+01E4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH STROKE
+01E6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH CARON
+01E8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH CARON
+01EA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH OGONEK
+01EC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+01EE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER EZH WITH CARON
+01F1..01F4 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER G WITH ACUTE
+01F6..01F8 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+01FA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+01FC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AE WITH ACUTE
+01FE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+0200 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+0202 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE
+0204 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+0206 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE
+0208 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+020A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE
+020C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+020E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE
+0210 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+0212 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE
+0214 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+0216 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE
+0218 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH COMMA BELOW
+021A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH COMMA BELOW
+021C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER YOGH
+021E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH CARON
+0220 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0222 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER OU
+0224 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH HOOK
+0226 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT ABOVE
+0228 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CEDILLA
+022A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+022C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+022E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT ABOVE
+0230 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+0232 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH MACRON
+023A..023B ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+023D..023E ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+0241 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL STOP
+0243..0246 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+0248 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER J WITH STROKE
+024A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+024C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH STROKE
+024E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH STROKE
+02B0..02B8 ; Changes_When_NFKC_Casefolded # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02D8..02DD ; Changes_When_NFKC_Casefolded # Sk [6] BREVE..DOUBLE ACUTE ACCENT
+02E0..02E4 ; Changes_When_NFKC_Casefolded # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0340..0341 ; Changes_When_NFKC_Casefolded # Mn [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0345 ; Changes_When_NFKC_Casefolded # Mn [3] COMBINING GREEK KORONIS..COMBINING GREEK YPOGEGRAMMENI
+034F ; Changes_When_NFKC_Casefolded # Mn COMBINING GRAPHEME JOINER
+0370 ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER HETA
+0372 ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER ARCHAIC SAMPI
+0374 ; Changes_When_NFKC_Casefolded # Lm GREEK NUMERAL SIGN
+0376 ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+037A ; Changes_When_NFKC_Casefolded # Lm GREEK YPOGEGRAMMENI
+037E ; Changes_When_NFKC_Casefolded # Po GREEK QUESTION MARK
+037F ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER YOT
+0384..0385 ; Changes_When_NFKC_Casefolded # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0386 ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER ALPHA WITH TONOS
+0387 ; Changes_When_NFKC_Casefolded # Po GREEK ANO TELEIA
+0388..038A ; Changes_When_NFKC_Casefolded # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..038F ; Changes_When_NFKC_Casefolded # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+0391..03A1 ; Changes_When_NFKC_Casefolded # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+03A3..03AB ; Changes_When_NFKC_Casefolded # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+03C2 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER FINAL SIGMA
+03CF..03D6 ; Changes_When_NFKC_Casefolded # L& [8] GREEK CAPITAL KAI SYMBOL..GREEK PI SYMBOL
+03D8 ; Changes_When_NFKC_Casefolded # L& GREEK LETTER ARCHAIC KOPPA
+03DA ; Changes_When_NFKC_Casefolded # L& GREEK LETTER STIGMA
+03DC ; Changes_When_NFKC_Casefolded # L& GREEK LETTER DIGAMMA
+03DE ; Changes_When_NFKC_Casefolded # L& GREEK LETTER KOPPA
+03E0 ; Changes_When_NFKC_Casefolded # L& GREEK LETTER SAMPI
+03E2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER SHEI
+03E4 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER FEI
+03E6 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER KHEI
+03E8 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER HORI
+03EA ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER GANGIA
+03EC ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER SHIMA
+03EE ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER DEI
+03F0..03F2 ; Changes_When_NFKC_Casefolded # L& [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL
+03F4..03F5 ; Changes_When_NFKC_Casefolded # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F7 ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER SHO
+03F9..03FA ; Changes_When_NFKC_Casefolded # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+03FD..042F ; Changes_When_NFKC_Casefolded # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+0460 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER OMEGA
+0462 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER YAT
+0464 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED E
+0466 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER LITTLE YUS
+0468 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+046A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BIG YUS
+046C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+046E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KSI
+0470 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER PSI
+0472 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER FITA
+0474 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IZHITSA
+0476 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+0478 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER UK
+047A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ROUND OMEGA
+047C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+047E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER OT
+0480 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOPPA
+048A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+048C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+048E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ER WITH TICK
+0490 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+0492 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE
+0494 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+0496 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+0498 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+049A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+049C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+049E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH STROKE
+04A0 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BASHKIR KA
+04A2 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+04A4 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LIGATURE EN GHE
+04A6 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+04A8 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA
+04AA ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+04AC ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+04AE ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER STRAIGHT U
+04B0 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+04B2 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+04B4 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LIGATURE TE TSE
+04B6 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+04B8 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+04BA ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SHHA
+04BC ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+04BE ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+04C0..04C1 ; Changes_When_NFKC_Casefolded # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+04C3 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH HOOK
+04C5 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH TAIL
+04C7 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH HOOK
+04C9 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH TAIL
+04CB ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+04CD ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EM WITH TAIL
+04D0 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER A WITH BREVE
+04D2 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+04D4 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LIGATURE A IE
+04D6 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IE WITH BREVE
+04D8 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SCHWA
+04DA ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+04DC ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+04DE ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+04E0 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+04E2 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER I WITH MACRON
+04E4 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+04E6 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+04E8 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BARRED O
+04EA ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+04EC ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+04EE ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH MACRON
+04F0 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+04F2 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+04F4 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+04F6 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+04F8 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+04FA ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+04FC ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH HOOK
+04FE ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH STROKE
+0500 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DE
+0502 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DJE
+0504 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI ZJE
+0506 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DZJE
+0508 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI LJE
+050A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI NJE
+050C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI SJE
+050E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI TJE
+0510 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED ZE
+0512 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH HOOK
+0514 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER LHA
+0516 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER RHA
+0518 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER YAE
+051A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER QA
+051C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER WE
+051E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ALEUT KA
+0520 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+0522 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+0524 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+0526 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+0528 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+052A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DZZHE
+052C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DCHE
+052E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+0531..0556 ; Changes_When_NFKC_Casefolded # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0587 ; Changes_When_NFKC_Casefolded # L& ARMENIAN SMALL LIGATURE ECH YIWN
+061C ; Changes_When_NFKC_Casefolded # Cf ARABIC LETTER MARK
+0675..0678 ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+0958..095F ; Changes_When_NFKC_Casefolded # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD ; Changes_When_NFKC_Casefolded # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF ; Changes_When_NFKC_Casefolded # Lo BENGALI LETTER YYA
+0A33 ; Changes_When_NFKC_Casefolded # Lo GURMUKHI LETTER LLA
+0A36 ; Changes_When_NFKC_Casefolded # Lo GURMUKHI LETTER SHA
+0A59..0A5B ; Changes_When_NFKC_Casefolded # Lo [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E ; Changes_When_NFKC_Casefolded # Lo GURMUKHI LETTER FA
+0B5C..0B5D ; Changes_When_NFKC_Casefolded # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0E33 ; Changes_When_NFKC_Casefolded # Lo THAI CHARACTER SARA AM
+0EB3 ; Changes_When_NFKC_Casefolded # Lo LAO VOWEL SIGN AM
+0EDC..0EDD ; Changes_When_NFKC_Casefolded # Lo [2] LAO HO NO..LAO HO MO
+0F0C ; Changes_When_NFKC_Casefolded # Po TIBETAN MARK DELIMITER TSHEG BSTAR
+0F43 ; Changes_When_NFKC_Casefolded # Lo TIBETAN LETTER GHA
+0F4D ; Changes_When_NFKC_Casefolded # Lo TIBETAN LETTER DDHA
+0F52 ; Changes_When_NFKC_Casefolded # Lo TIBETAN LETTER DHA
+0F57 ; Changes_When_NFKC_Casefolded # Lo TIBETAN LETTER BHA
+0F5C ; Changes_When_NFKC_Casefolded # Lo TIBETAN LETTER DZHA
+0F69 ; Changes_When_NFKC_Casefolded # Lo TIBETAN LETTER KSSA
+0F73 ; Changes_When_NFKC_Casefolded # Mn TIBETAN VOWEL SIGN II
+0F75..0F79 ; Changes_When_NFKC_Casefolded # Mn [5] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC LL
+0F81 ; Changes_When_NFKC_Casefolded # Mn TIBETAN VOWEL SIGN REVERSED II
+0F93 ; Changes_When_NFKC_Casefolded # Mn TIBETAN SUBJOINED LETTER GHA
+0F9D ; Changes_When_NFKC_Casefolded # Mn TIBETAN SUBJOINED LETTER DDHA
+0FA2 ; Changes_When_NFKC_Casefolded # Mn TIBETAN SUBJOINED LETTER DHA
+0FA7 ; Changes_When_NFKC_Casefolded # Mn TIBETAN SUBJOINED LETTER BHA
+0FAC ; Changes_When_NFKC_Casefolded # Mn TIBETAN SUBJOINED LETTER DZHA
+0FB9 ; Changes_When_NFKC_Casefolded # Mn TIBETAN SUBJOINED LETTER KSSA
+10A0..10C5 ; Changes_When_NFKC_Casefolded # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Changes_When_NFKC_Casefolded # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Changes_When_NFKC_Casefolded # L& GEORGIAN CAPITAL LETTER AEN
+10FC ; Changes_When_NFKC_Casefolded # Lm MODIFIER LETTER GEORGIAN NAR
+115F..1160 ; Changes_When_NFKC_Casefolded # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+13F8..13FD ; Changes_When_NFKC_Casefolded # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+17B4..17B5 ; Changes_When_NFKC_Casefolded # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+180B..180D ; Changes_When_NFKC_Casefolded # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E ; Changes_When_NFKC_Casefolded # Cf MONGOLIAN VOWEL SEPARATOR
+180F ; Changes_When_NFKC_Casefolded # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
+1C80..1C88 ; Changes_When_NFKC_Casefolded # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1C90..1CBA ; Changes_When_NFKC_Casefolded # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF ; Changes_When_NFKC_Casefolded # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1D2C..1D2E ; Changes_When_NFKC_Casefolded # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B
+1D30..1D3A ; Changes_When_NFKC_Casefolded # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N
+1D3C..1D4D ; Changes_When_NFKC_Casefolded # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G
+1D4F..1D6A ; Changes_When_NFKC_Casefolded # Lm [28] MODIFIER LETTER SMALL K..GREEK SUBSCRIPT SMALL LETTER CHI
+1D78 ; Changes_When_NFKC_Casefolded # Lm MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF ; Changes_When_NFKC_Casefolded # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E00 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH RING BELOW
+1E02 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER B WITH DOT ABOVE
+1E04 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER B WITH DOT BELOW
+1E06 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER B WITH LINE BELOW
+1E08 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+1E0A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH DOT ABOVE
+1E0C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH DOT BELOW
+1E0E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH LINE BELOW
+1E10 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH CEDILLA
+1E12 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+1E14 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+1E16 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+1E18 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+1E1A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH TILDE BELOW
+1E1C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+1E1E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER F WITH DOT ABOVE
+1E20 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH MACRON
+1E22 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH DOT ABOVE
+1E24 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH DOT BELOW
+1E26 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH DIAERESIS
+1E28 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH CEDILLA
+1E2A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH BREVE BELOW
+1E2C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH TILDE BELOW
+1E2E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+1E30 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH ACUTE
+1E32 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH DOT BELOW
+1E34 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH LINE BELOW
+1E36 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH DOT BELOW
+1E38 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+1E3A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH LINE BELOW
+1E3C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+1E3E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER M WITH ACUTE
+1E40 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER M WITH DOT ABOVE
+1E42 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER M WITH DOT BELOW
+1E44 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH DOT ABOVE
+1E46 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH DOT BELOW
+1E48 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH LINE BELOW
+1E4A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+1E4C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+1E4E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+1E50 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+1E52 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+1E54 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER P WITH ACUTE
+1E56 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER P WITH DOT ABOVE
+1E58 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT ABOVE
+1E5A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT BELOW
+1E5C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+1E5E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH LINE BELOW
+1E60 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT ABOVE
+1E62 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT BELOW
+1E64 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+1E66 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+1E68 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+1E6A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH DOT ABOVE
+1E6C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH DOT BELOW
+1E6E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH LINE BELOW
+1E70 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+1E72 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+1E74 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE BELOW
+1E76 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+1E78 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+1E7A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+1E7C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER V WITH TILDE
+1E7E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER V WITH DOT BELOW
+1E80 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH GRAVE
+1E82 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH ACUTE
+1E84 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH DIAERESIS
+1E86 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH DOT ABOVE
+1E88 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH DOT BELOW
+1E8A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER X WITH DOT ABOVE
+1E8C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER X WITH DIAERESIS
+1E8E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE
+1E90 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+1E92 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH DOT BELOW
+1E94 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH LINE BELOW
+1E9A..1E9B ; Changes_When_NFKC_Casefolded # L& [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1E9E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER SHARP S
+1EA0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT BELOW
+1EA2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE
+1EA4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+1EA6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+1EA8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+1EAA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+1EAC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+1EAE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+1EB0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+1EB2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+1EB4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+1EB6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+1EB8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH DOT BELOW
+1EBA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE
+1EBC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH TILDE
+1EBE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+1EC0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+1EC2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+1EC4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+1EC6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+1EC8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE
+1ECA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER I WITH DOT BELOW
+1ECC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT BELOW
+1ECE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE
+1ED0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+1ED2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+1ED4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+1ED6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+1ED8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+1EDA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+1EDC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+1EDE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+1EE0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE
+1EE2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+1EE4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH DOT BELOW
+1EE6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE
+1EE8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+1EEA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+1EEC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+1EEE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE
+1EF0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+1EF2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH GRAVE
+1EF4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH DOT BELOW
+1EF6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+1EF8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH TILDE
+1EFA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL
+1EFC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER MIDDLE-WELSH V
+1EFE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Y WITH LOOP
+1F08..1F0F ; Changes_When_NFKC_Casefolded # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+1F18..1F1D ; Changes_When_NFKC_Casefolded # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F28..1F2F ; Changes_When_NFKC_Casefolded # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+1F38..1F3F ; Changes_When_NFKC_Casefolded # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+1F48..1F4D ; Changes_When_NFKC_Casefolded # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F59 ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F ; Changes_When_NFKC_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F68..1F6F ; Changes_When_NFKC_Casefolded # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+1F71 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER ALPHA WITH OXIA
+1F73 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER EPSILON WITH OXIA
+1F75 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER ETA WITH OXIA
+1F77 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER IOTA WITH OXIA
+1F79 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER OMICRON WITH OXIA
+1F7B ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER UPSILON WITH OXIA
+1F7D ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER OMEGA WITH OXIA
+1F80..1FAF ; Changes_When_NFKC_Casefolded # L& [48] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+1FB2..1FB4 ; Changes_When_NFKC_Casefolded # L& [3] GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB7..1FBC ; Changes_When_NFKC_Casefolded # L& [6] GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FBD ; Changes_When_NFKC_Casefolded # Sk GREEK KORONIS
+1FBE ; Changes_When_NFKC_Casefolded # L& GREEK PROSGEGRAMMENI
+1FBF..1FC1 ; Changes_When_NFKC_Casefolded # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+1FC2..1FC4 ; Changes_When_NFKC_Casefolded # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC7..1FCC ; Changes_When_NFKC_Casefolded # L& [6] GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FCD..1FCF ; Changes_When_NFKC_Casefolded # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD3 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FD8..1FDB ; Changes_When_NFKC_Casefolded # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF ; Changes_When_NFKC_Casefolded # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE3 ; Changes_When_NFKC_Casefolded # L& GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FE8..1FEC ; Changes_When_NFKC_Casefolded # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+1FED..1FEF ; Changes_When_NFKC_Casefolded # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF2..1FF4 ; Changes_When_NFKC_Casefolded # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF7..1FFC ; Changes_When_NFKC_Casefolded # L& [6] GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+1FFD..1FFE ; Changes_When_NFKC_Casefolded # Sk [2] GREEK OXIA..GREEK DASIA
+2000..200A ; Changes_When_NFKC_Casefolded # Zs [11] EN QUAD..HAIR SPACE
+200B..200F ; Changes_When_NFKC_Casefolded # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+2011 ; Changes_When_NFKC_Casefolded # Pd NON-BREAKING HYPHEN
+2017 ; Changes_When_NFKC_Casefolded # Po DOUBLE LOW LINE
+2024..2026 ; Changes_When_NFKC_Casefolded # Po [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
+202A..202E ; Changes_When_NFKC_Casefolded # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+202F ; Changes_When_NFKC_Casefolded # Zs NARROW NO-BREAK SPACE
+2033..2034 ; Changes_When_NFKC_Casefolded # Po [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037 ; Changes_When_NFKC_Casefolded # Po [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C ; Changes_When_NFKC_Casefolded # Po DOUBLE EXCLAMATION MARK
+203E ; Changes_When_NFKC_Casefolded # Po OVERLINE
+2047..2049 ; Changes_When_NFKC_Casefolded # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
+2057 ; Changes_When_NFKC_Casefolded # Po QUADRUPLE PRIME
+205F ; Changes_When_NFKC_Casefolded # Zs MEDIUM MATHEMATICAL SPACE
+2060..2064 ; Changes_When_NFKC_Casefolded # Cf [5] WORD JOINER..INVISIBLE PLUS
+2065 ; Changes_When_NFKC_Casefolded # Cn <reserved-2065>
+2066..206F ; Changes_When_NFKC_Casefolded # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+2070 ; Changes_When_NFKC_Casefolded # No SUPERSCRIPT ZERO
+2071 ; Changes_When_NFKC_Casefolded # Lm SUPERSCRIPT LATIN SMALL LETTER I
+2074..2079 ; Changes_When_NFKC_Casefolded # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+207A..207C ; Changes_When_NFKC_Casefolded # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D ; Changes_When_NFKC_Casefolded # Ps SUPERSCRIPT LEFT PARENTHESIS
+207E ; Changes_When_NFKC_Casefolded # Pe SUPERSCRIPT RIGHT PARENTHESIS
+207F ; Changes_When_NFKC_Casefolded # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2080..2089 ; Changes_When_NFKC_Casefolded # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+208A..208C ; Changes_When_NFKC_Casefolded # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D ; Changes_When_NFKC_Casefolded # Ps SUBSCRIPT LEFT PARENTHESIS
+208E ; Changes_When_NFKC_Casefolded # Pe SUBSCRIPT RIGHT PARENTHESIS
+2090..209C ; Changes_When_NFKC_Casefolded # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+20A8 ; Changes_When_NFKC_Casefolded # Sc RUPEE SIGN
+2100..2101 ; Changes_When_NFKC_Casefolded # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+2102 ; Changes_When_NFKC_Casefolded # L& DOUBLE-STRUCK CAPITAL C
+2103 ; Changes_When_NFKC_Casefolded # So DEGREE CELSIUS
+2105..2106 ; Changes_When_NFKC_Casefolded # So [2] CARE OF..CADA UNA
+2107 ; Changes_When_NFKC_Casefolded # L& EULER CONSTANT
+2109 ; Changes_When_NFKC_Casefolded # So DEGREE FAHRENHEIT
+210A..2113 ; Changes_When_NFKC_Casefolded # L& [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115 ; Changes_When_NFKC_Casefolded # L& DOUBLE-STRUCK CAPITAL N
+2116 ; Changes_When_NFKC_Casefolded # So NUMERO SIGN
+2119..211D ; Changes_When_NFKC_Casefolded # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2120..2122 ; Changes_When_NFKC_Casefolded # So [3] SERVICE MARK..TRADE MARK SIGN
+2124 ; Changes_When_NFKC_Casefolded # L& DOUBLE-STRUCK CAPITAL Z
+2126 ; Changes_When_NFKC_Casefolded # L& OHM SIGN
+2128 ; Changes_When_NFKC_Casefolded # L& BLACK-LETTER CAPITAL Z
+212A..212D ; Changes_When_NFKC_Casefolded # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2134 ; Changes_When_NFKC_Casefolded # L& [6] SCRIPT SMALL E..SCRIPT SMALL O
+2135..2138 ; Changes_When_NFKC_Casefolded # Lo [4] ALEF SYMBOL..DALET SYMBOL
+2139 ; Changes_When_NFKC_Casefolded # L& INFORMATION SOURCE
+213B ; Changes_When_NFKC_Casefolded # So FACSIMILE SIGN
+213C..213F ; Changes_When_NFKC_Casefolded # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140 ; Changes_When_NFKC_Casefolded # Sm DOUBLE-STRUCK N-ARY SUMMATION
+2145..2149 ; Changes_When_NFKC_Casefolded # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2150..215F ; Changes_When_NFKC_Casefolded # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+2160..217F ; Changes_When_NFKC_Casefolded # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
+2183 ; Changes_When_NFKC_Casefolded # L& ROMAN NUMERAL REVERSED ONE HUNDRED
+2189 ; Changes_When_NFKC_Casefolded # No VULGAR FRACTION ZERO THIRDS
+222C..222D ; Changes_When_NFKC_Casefolded # Sm [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230 ; Changes_When_NFKC_Casefolded # Sm [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2329 ; Changes_When_NFKC_Casefolded # Ps LEFT-POINTING ANGLE BRACKET
+232A ; Changes_When_NFKC_Casefolded # Pe RIGHT-POINTING ANGLE BRACKET
+2460..249B ; Changes_When_NFKC_Casefolded # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+249C..24E9 ; Changes_When_NFKC_Casefolded # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+24EA ; Changes_When_NFKC_Casefolded # No CIRCLED DIGIT ZERO
+2A0C ; Changes_When_NFKC_Casefolded # Sm QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76 ; Changes_When_NFKC_Casefolded # Sm [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2ADC ; Changes_When_NFKC_Casefolded # Sm FORKING
+2C00..2C2F ; Changes_When_NFKC_Casefolded # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
+2C60 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR
+2C62..2C64 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+2C67 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER H WITH DESCENDER
+2C69 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH DESCENDER
+2C6B ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Z WITH DESCENDER
+2C6D..2C70 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+2C72 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER W WITH HOOK
+2C75 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER HALF H
+2C7C..2C7D ; Changes_When_NFKC_Casefolded # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2C7E..2C80 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+2C82 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER VIDA
+2C84 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER GAMMA
+2C86 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER DALDA
+2C88 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER EIE
+2C8A ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER SOU
+2C8C ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER ZATA
+2C8E ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER HATE
+2C90 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER THETHE
+2C92 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER IAUDA
+2C94 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER KAPA
+2C96 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER LAULA
+2C98 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER MI
+2C9A ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER NI
+2C9C ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER KSI
+2C9E ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER O
+2CA0 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER PI
+2CA2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER RO
+2CA4 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER SIMA
+2CA6 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER TAU
+2CA8 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER UA
+2CAA ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER FI
+2CAC ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER KHI
+2CAE ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER PSI
+2CB0 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OOU
+2CB2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P ALEF
+2CB4 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC AIN
+2CB6 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+2CB8 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P KAPA
+2CBA ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P NI
+2CBC ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+2CBE ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC OOU
+2CC0 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER SAMPI
+2CC2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER CROSSED SHEI
+2CC4 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI
+2CC6 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC ESH
+2CC8 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI
+2CCA ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P HORI
+2CCC ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HORI
+2CCE ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HA
+2CD0 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER L-SHAPED HA
+2CD2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HEI
+2CD4 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HAT
+2CD6 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+2CD8 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC DJA
+2CDA ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+2CDC ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+2CDE ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI
+2CE0 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI
+2CE2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU
+2CEB ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+2CED ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+2CF2 ; Changes_When_NFKC_Casefolded # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI
+2D6F ; Changes_When_NFKC_Casefolded # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2E9F ; Changes_When_NFKC_Casefolded # So CJK RADICAL MOTHER
+2EF3 ; Changes_When_NFKC_Casefolded # So CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5 ; Changes_When_NFKC_Casefolded # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3000 ; Changes_When_NFKC_Casefolded # Zs IDEOGRAPHIC SPACE
+3036 ; Changes_When_NFKC_Casefolded # So CIRCLED POSTAL MARK
+3038..303A ; Changes_When_NFKC_Casefolded # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+309B..309C ; Changes_When_NFKC_Casefolded # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309F ; Changes_When_NFKC_Casefolded # Lo HIRAGANA DIGRAPH YORI
+30FF ; Changes_When_NFKC_Casefolded # Lo KATAKANA DIGRAPH KOTO
+3131..318E ; Changes_When_NFKC_Casefolded # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+3192..3195 ; Changes_When_NFKC_Casefolded # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+3196..319F ; Changes_When_NFKC_Casefolded # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+3200..321E ; Changes_When_NFKC_Casefolded # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3229 ; Changes_When_NFKC_Casefolded # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+322A..3247 ; Changes_When_NFKC_Casefolded # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3250 ; Changes_When_NFKC_Casefolded # So PARTNERSHIP SIGN
+3251..325F ; Changes_When_NFKC_Casefolded # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327E ; Changes_When_NFKC_Casefolded # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
+3280..3289 ; Changes_When_NFKC_Casefolded # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+328A..32B0 ; Changes_When_NFKC_Casefolded # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF ; Changes_When_NFKC_Casefolded # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..33FF ; Changes_When_NFKC_Casefolded # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
+A640 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ZEMLYA
+A642 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DZELO
+A644 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED DZE
+A646 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTA
+A648 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DJERV
+A64A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK
+A64C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BROAD OMEGA
+A64E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER NEUTRAL YER
+A650 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+A652 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT
+A654 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED YU
+A656 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED A
+A658 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+A65A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BLENDED YUS
+A65C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+A65E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER YN
+A660 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED TSE
+A662 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT DE
+A664 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT EL
+A666 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT EM
+A668 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER MONOCULAR O
+A66A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER BINOCULAR O
+A66C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+A680 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DWE
+A682 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DZWE
+A684 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER ZHWE
+A686 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER CCHE
+A688 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DZZE
+A68A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+A68C ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER TWE
+A68E ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER TSWE
+A690 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER TSSE
+A692 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER TCHE
+A694 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER HWE
+A696 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER SHWE
+A698 ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER DOUBLE O
+A69A ; Changes_When_NFKC_Casefolded # L& CYRILLIC CAPITAL LETTER CROSSED O
+A69C..A69D ; Changes_When_NFKC_Casefolded # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A722 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+A724 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+A726 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER HENG
+A728 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER TZ
+A72A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER TRESILLO
+A72C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER CUATRILLO
+A72E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+A732 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AA
+A734 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AO
+A736 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AU
+A738 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AV
+A73A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+A73C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER AY
+A73E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER REVERSED C WITH DOT
+A740 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH STROKE
+A742 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+A744 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+A746 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER BROKEN L
+A748 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER L WITH HIGH STROKE
+A74A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+A74C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER O WITH LOOP
+A74E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER OO
+A750 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+A752 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER P WITH FLOURISH
+A754 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+A756 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+A758 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+A75A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R ROTUNDA
+A75C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER RUM ROTUNDA
+A75E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+A760 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER VY
+A762 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER VISIGOTHIC Z
+A764 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER THORN WITH STROKE
+A766 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+A768 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER VEND
+A76A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER ET
+A76C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER IS
+A76E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER CON
+A770 ; Changes_When_NFKC_Casefolded # Lm MODIFIER LETTER US
+A779 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER INSULAR D
+A77B ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER INSULAR F
+A77D..A77E ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+A780 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER TURNED L
+A782 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER INSULAR R
+A784 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER INSULAR S
+A786 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER INSULAR T
+A78B ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER SALTILLO
+A78D ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER TURNED H
+A790 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH DESCENDER
+A792 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER C WITH BAR
+A796 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER B WITH FLOURISH
+A798 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER F WITH STROKE
+A79A ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK AE
+A79C ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK OE
+A79E ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK UE
+A7A0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+A7A2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+A7A4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+A7A6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+A7A8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+A7AA..A7AE ; Changes_When_NFKC_Casefolded # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B0..A7B4 ; Changes_When_NFKC_Casefolded # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
+A7B6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER OMEGA
+A7B8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER U WITH STROKE
+A7BA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL A
+A7BC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL I
+A7BE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL U
+A7C0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER OLD POLISH O
+A7C2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W
+A7C4..A7C7 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7D0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G
+A7D6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S
+A7D8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S
+A7F2..A7F4 ; Changes_When_NFKC_Casefolded # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+A7F5 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H
+A7F8..A7F9 ; Changes_When_NFKC_Casefolded # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+AB5C..AB5F ; Changes_When_NFKC_Casefolded # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Changes_When_NFKC_Casefolded # Lm MODIFIER LETTER SMALL TURNED W
+AB70..ABBF ; Changes_When_NFKC_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+F900..FA0D ; Changes_When_NFKC_Casefolded # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10 ; Changes_When_NFKC_Casefolded # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12 ; Changes_When_NFKC_Casefolded # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E ; Changes_When_NFKC_Casefolded # Lo [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20 ; Changes_When_NFKC_Casefolded # Lo CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22 ; Changes_When_NFKC_Casefolded # Lo CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26 ; Changes_When_NFKC_Casefolded # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA6D ; Changes_When_NFKC_Casefolded # Lo [68] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9 ; Changes_When_NFKC_Casefolded # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06 ; Changes_When_NFKC_Casefolded # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17 ; Changes_When_NFKC_Casefolded # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D ; Changes_When_NFKC_Casefolded # Lo HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB28 ; Changes_When_NFKC_Casefolded # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+FB29 ; Changes_When_NFKC_Casefolded # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
+FB2A..FB36 ; Changes_When_NFKC_Casefolded # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C ; Changes_When_NFKC_Casefolded # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E ; Changes_When_NFKC_Casefolded # Lo HEBREW LETTER MEM WITH DAGESH
+FB40..FB41 ; Changes_When_NFKC_Casefolded # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44 ; Changes_When_NFKC_Casefolded # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1 ; Changes_When_NFKC_Casefolded # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D ; Changes_When_NFKC_Casefolded # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F ; Changes_When_NFKC_Casefolded # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7 ; Changes_When_NFKC_Casefolded # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB ; Changes_When_NFKC_Casefolded # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC ; Changes_When_NFKC_Casefolded # Sc RIAL SIGN
+FE00..FE0F ; Changes_When_NFKC_Casefolded # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FE10..FE16 ; Changes_When_NFKC_Casefolded # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+FE17 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+FE18 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+FE19 ; Changes_When_NFKC_Casefolded # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30 ; Changes_When_NFKC_Casefolded # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+FE31..FE32 ; Changes_When_NFKC_Casefolded # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+FE33..FE34 ; Changes_When_NFKC_Casefolded # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+FE35 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+FE36 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+FE37 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+FE38 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+FE39 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+FE3A ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+FE3B ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+FE3C ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+FE3D ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+FE3E ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+FE3F ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+FE40 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+FE41 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+FE42 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+FE43 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+FE44 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE47 ; Changes_When_NFKC_Casefolded # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+FE48 ; Changes_When_NFKC_Casefolded # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE4C ; Changes_When_NFKC_Casefolded # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+FE4D..FE4F ; Changes_When_NFKC_Casefolded # Pc [3] DASHED LOW LINE..WAVY LOW LINE
+FE50..FE52 ; Changes_When_NFKC_Casefolded # Po [3] SMALL COMMA..SMALL FULL STOP
+FE54..FE57 ; Changes_When_NFKC_Casefolded # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+FE58 ; Changes_When_NFKC_Casefolded # Pd SMALL EM DASH
+FE59 ; Changes_When_NFKC_Casefolded # Ps SMALL LEFT PARENTHESIS
+FE5A ; Changes_When_NFKC_Casefolded # Pe SMALL RIGHT PARENTHESIS
+FE5B ; Changes_When_NFKC_Casefolded # Ps SMALL LEFT CURLY BRACKET
+FE5C ; Changes_When_NFKC_Casefolded # Pe SMALL RIGHT CURLY BRACKET
+FE5D ; Changes_When_NFKC_Casefolded # Ps SMALL LEFT TORTOISE SHELL BRACKET
+FE5E ; Changes_When_NFKC_Casefolded # Pe SMALL RIGHT TORTOISE SHELL BRACKET
+FE5F..FE61 ; Changes_When_NFKC_Casefolded # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK
+FE62 ; Changes_When_NFKC_Casefolded # Sm SMALL PLUS SIGN
+FE63 ; Changes_When_NFKC_Casefolded # Pd SMALL HYPHEN-MINUS
+FE64..FE66 ; Changes_When_NFKC_Casefolded # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68 ; Changes_When_NFKC_Casefolded # Po SMALL REVERSE SOLIDUS
+FE69 ; Changes_When_NFKC_Casefolded # Sc SMALL DOLLAR SIGN
+FE6A..FE6B ; Changes_When_NFKC_Casefolded # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+FE70..FE72 ; Changes_When_NFKC_Casefolded # Lo [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
+FE74 ; Changes_When_NFKC_Casefolded # Lo ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC ; Changes_When_NFKC_Casefolded # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FEFF ; Changes_When_NFKC_Casefolded # Cf ZERO WIDTH NO-BREAK SPACE
+FF01..FF03 ; Changes_When_NFKC_Casefolded # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+FF04 ; Changes_When_NFKC_Casefolded # Sc FULLWIDTH DOLLAR SIGN
+FF05..FF07 ; Changes_When_NFKC_Casefolded # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+FF08 ; Changes_When_NFKC_Casefolded # Ps FULLWIDTH LEFT PARENTHESIS
+FF09 ; Changes_When_NFKC_Casefolded # Pe FULLWIDTH RIGHT PARENTHESIS
+FF0A ; Changes_When_NFKC_Casefolded # Po FULLWIDTH ASTERISK
+FF0B ; Changes_When_NFKC_Casefolded # Sm FULLWIDTH PLUS SIGN
+FF0C ; Changes_When_NFKC_Casefolded # Po FULLWIDTH COMMA
+FF0D ; Changes_When_NFKC_Casefolded # Pd FULLWIDTH HYPHEN-MINUS
+FF0E..FF0F ; Changes_When_NFKC_Casefolded # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+FF10..FF19 ; Changes_When_NFKC_Casefolded # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+FF1A..FF1B ; Changes_When_NFKC_Casefolded # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+FF1C..FF1E ; Changes_When_NFKC_Casefolded # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF1F..FF20 ; Changes_When_NFKC_Casefolded # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+FF21..FF3A ; Changes_When_NFKC_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+FF3B ; Changes_When_NFKC_Casefolded # Ps FULLWIDTH LEFT SQUARE BRACKET
+FF3C ; Changes_When_NFKC_Casefolded # Po FULLWIDTH REVERSE SOLIDUS
+FF3D ; Changes_When_NFKC_Casefolded # Pe FULLWIDTH RIGHT SQUARE BRACKET
+FF3E ; Changes_When_NFKC_Casefolded # Sk FULLWIDTH CIRCUMFLEX ACCENT
+FF3F ; Changes_When_NFKC_Casefolded # Pc FULLWIDTH LOW LINE
+FF40 ; Changes_When_NFKC_Casefolded # Sk FULLWIDTH GRAVE ACCENT
+FF41..FF5A ; Changes_When_NFKC_Casefolded # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+FF5B ; Changes_When_NFKC_Casefolded # Ps FULLWIDTH LEFT CURLY BRACKET
+FF5C ; Changes_When_NFKC_Casefolded # Sm FULLWIDTH VERTICAL LINE
+FF5D ; Changes_When_NFKC_Casefolded # Pe FULLWIDTH RIGHT CURLY BRACKET
+FF5E ; Changes_When_NFKC_Casefolded # Sm FULLWIDTH TILDE
+FF5F ; Changes_When_NFKC_Casefolded # Ps FULLWIDTH LEFT WHITE PARENTHESIS
+FF60 ; Changes_When_NFKC_Casefolded # Pe FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61 ; Changes_When_NFKC_Casefolded # Po HALFWIDTH IDEOGRAPHIC FULL STOP
+FF62 ; Changes_When_NFKC_Casefolded # Ps HALFWIDTH LEFT CORNER BRACKET
+FF63 ; Changes_When_NFKC_Casefolded # Pe HALFWIDTH RIGHT CORNER BRACKET
+FF64..FF65 ; Changes_When_NFKC_Casefolded # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+FF66..FF6F ; Changes_When_NFKC_Casefolded # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+FF70 ; Changes_When_NFKC_Casefolded # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+FF71..FF9D ; Changes_When_NFKC_Casefolded # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF9E..FF9F ; Changes_When_NFKC_Casefolded # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA0..FFBE ; Changes_When_NFKC_Casefolded # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7 ; Changes_When_NFKC_Casefolded # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF ; Changes_When_NFKC_Casefolded # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7 ; Changes_When_NFKC_Casefolded # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC ; Changes_When_NFKC_Casefolded # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE1 ; Changes_When_NFKC_Casefolded # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+FFE2 ; Changes_When_NFKC_Casefolded # Sm FULLWIDTH NOT SIGN
+FFE3 ; Changes_When_NFKC_Casefolded # Sk FULLWIDTH MACRON
+FFE4 ; Changes_When_NFKC_Casefolded # So FULLWIDTH BROKEN BAR
+FFE5..FFE6 ; Changes_When_NFKC_Casefolded # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+FFE8 ; Changes_When_NFKC_Casefolded # So HALFWIDTH FORMS LIGHT VERTICAL
+FFE9..FFEC ; Changes_When_NFKC_Casefolded # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+FFED..FFEE ; Changes_When_NFKC_Casefolded # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] <reserved-FFF0>..<reserved-FFF8>
+10400..10427 ; Changes_When_NFKC_Casefolded # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+104B0..104D3 ; Changes_When_NFKC_Casefolded # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+10570..1057A ; Changes_When_NFKC_Casefolded # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A ; Changes_When_NFKC_Casefolded # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592 ; Changes_When_NFKC_Casefolded # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595 ; Changes_When_NFKC_Casefolded # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10781..10785 ; Changes_When_NFKC_Casefolded # Lm [5] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Changes_When_NFKC_Casefolded # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Changes_When_NFKC_Casefolded # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+10C80..10CB2 ; Changes_When_NFKC_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+118A0..118BF ; Changes_When_NFKC_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
+16E40..16E5F ; Changes_When_NFKC_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
+1BCA0..1BCA3 ; Changes_When_NFKC_Casefolded # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D15E..1D164 ; Changes_When_NFKC_Casefolded # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D173..1D17A ; Changes_When_NFKC_Casefolded # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+1D1BB..1D1C0 ; Changes_When_NFKC_Casefolded # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+1D400..1D454 ; Changes_When_NFKC_Casefolded # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C ; Changes_When_NFKC_Casefolded # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F ; Changes_When_NFKC_Casefolded # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2 ; Changes_When_NFKC_Casefolded # L& MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6 ; Changes_When_NFKC_Casefolded # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC ; Changes_When_NFKC_Casefolded # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9 ; Changes_When_NFKC_Casefolded # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB ; Changes_When_NFKC_Casefolded # L& MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3 ; Changes_When_NFKC_Casefolded # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505 ; Changes_When_NFKC_Casefolded # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A ; Changes_When_NFKC_Casefolded # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514 ; Changes_When_NFKC_Casefolded # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C ; Changes_When_NFKC_Casefolded # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539 ; Changes_When_NFKC_Casefolded # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E ; Changes_When_NFKC_Casefolded # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544 ; Changes_When_NFKC_Casefolded # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546 ; Changes_When_NFKC_Casefolded # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550 ; Changes_When_NFKC_Casefolded # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5 ; Changes_When_NFKC_Casefolded # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0 ; Changes_When_NFKC_Casefolded # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA ; Changes_When_NFKC_Casefolded # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA ; Changes_When_NFKC_Casefolded # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL ITALIC NABLA
+1D6FC..1D714 ; Changes_When_NFKC_Casefolded # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734 ; Changes_When_NFKC_Casefolded # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E ; Changes_When_NFKC_Casefolded # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E ; Changes_When_NFKC_Casefolded # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788 ; Changes_When_NFKC_Casefolded # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8 ; Changes_When_NFKC_Casefolded # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2 ; Changes_When_NFKC_Casefolded # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB ; Changes_When_NFKC_Casefolded # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF ; Changes_When_NFKC_Casefolded # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1E900..1E921 ; Changes_When_NFKC_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
+1EE00..1EE03 ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Changes_When_NFKC_Casefolded # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Changes_When_NFKC_Casefolded # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Changes_When_NFKC_Casefolded # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Changes_When_NFKC_Casefolded # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Changes_When_NFKC_Casefolded # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Changes_When_NFKC_Casefolded # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Changes_When_NFKC_Casefolded # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Changes_When_NFKC_Casefolded # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Changes_When_NFKC_Casefolded # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Changes_When_NFKC_Casefolded # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Changes_When_NFKC_Casefolded # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Changes_When_NFKC_Casefolded # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Changes_When_NFKC_Casefolded # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1F100..1F10A ; Changes_When_NFKC_Casefolded # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12E ; Changes_When_NFKC_Casefolded # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
+1F130..1F14F ; Changes_When_NFKC_Casefolded # So [32] SQUARED LATIN CAPITAL LETTER A..SQUARED WC
+1F16A..1F16C ; Changes_When_NFKC_Casefolded # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F190 ; Changes_When_NFKC_Casefolded # So SQUARE DJ
+1F200..1F202 ; Changes_When_NFKC_Casefolded # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
+1F210..1F23B ; Changes_When_NFKC_Casefolded # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248 ; Changes_When_NFKC_Casefolded # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251 ; Changes_When_NFKC_Casefolded # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9 ; Changes_When_NFKC_Casefolded # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+2F800..2FA1D ; Changes_When_NFKC_Casefolded # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+E0000 ; Changes_When_NFKC_Casefolded # Cn <reserved-E0000>
+E0001 ; Changes_When_NFKC_Casefolded # Cf LANGUAGE TAG
+E0002..E001F ; Changes_When_NFKC_Casefolded # Cn [30] <reserved-E0002>..<reserved-E001F>
+E0020..E007F ; Changes_When_NFKC_Casefolded # Cf [96] TAG SPACE..CANCEL TAG
+E0080..E00FF ; Changes_When_NFKC_Casefolded # Cn [128] <reserved-E0080>..<reserved-E00FF>
+E0100..E01EF ; Changes_When_NFKC_Casefolded # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+E01F0..E0FFF ; Changes_When_NFKC_Casefolded # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
+
+# Total code points: 10429
+
+# EOF
diff --git a/contrib/unicode/EastAsianWidth.txt b/contrib/unicode/EastAsianWidth.txt
index b43aec9..e04f705 100644
--- a/contrib/unicode/EastAsianWidth.txt
+++ b/contrib/unicode/EastAsianWidth.txt
@@ -1,11 +1,11 @@
-# EastAsianWidth-13.0.0.txt
-# Date: 2029-01-21, 18:14:00 GMT [KW, LI]
-# © 2020 Unicode®, Inc.
+# EastAsianWidth-14.0.0.txt
+# Date: 2021-07-06, 09:58:53 GMT [KW, LI]
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
#
# East_Asian_Width Property
#
@@ -37,7 +37,7 @@
# with ranges of code points, the code point count in square brackets.
#
# For more information, see UAX #11: East Asian Width,
-# at http://www.unicode.org/reports/tr11/
+# at https://www.unicode.org/reports/tr11/
#
# @missing: 0000..10FFFF; N
0000..001F;N # Cc [32] <control-0000>..<control-001F>
@@ -273,7 +273,7 @@
0610..061A;N # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
061B;N # Po ARABIC SEMICOLON
061C;N # Cf ARABIC LETTER MARK
-061E..061F;N # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+061D..061F;N # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
0620..063F;N # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0640;N # Lm ARABIC TATWEEL
0641..064A;N # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
@@ -331,9 +331,14 @@
0859..085B;N # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
085E;N # Po MANDAIC PUNCTUATION
0860..086A;N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-08A0..08B4;N # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08C7;N # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
-08D3..08E1;N # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
+0870..0887;N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+0888;N # Sk ARABIC RAISED ROUND DOT
+0889..088E;N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+0890..0891;N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
+0898..089F;N # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+08A0..08C8;N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+08C9;N # Lm ARABIC SMALL FARSI YEH
+08CA..08E1;N # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
08E2;N # Cf ARABIC DISPUTED END OF AYAH
08E3..08FF;N # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
0900..0902;N # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
@@ -490,6 +495,7 @@
0C0E..0C10;N # Lo [3] TELUGU LETTER E..TELUGU LETTER AI
0C12..0C28;N # Lo [23] TELUGU LETTER O..TELUGU LETTER NA
0C2A..0C39;N # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA
+0C3C;N # Mn TELUGU SIGN NUKTA
0C3D;N # Lo TELUGU SIGN AVAGRAHA
0C3E..0C40;N # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
0C41..0C44;N # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
@@ -497,6 +503,7 @@
0C4A..0C4D;N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
0C55..0C56;N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
0C58..0C5A;N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+0C5D;N # Lo TELUGU LETTER NAKAARA POLLU
0C60..0C61;N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
0C62..0C63;N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
0C66..0C6F;N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
@@ -522,7 +529,7 @@
0CCA..0CCB;N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
0CCC..0CCD;N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
0CD5..0CD6;N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-0CDE;N # Lo KANNADA LETTER FA
+0CDD..0CDE;N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
0CE0..0CE1;N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CE2..0CE3;N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
0CE6..0CEF;N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
@@ -709,11 +716,13 @@
16EB..16ED;N # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
16EE..16F0;N # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
16F1..16F8;N # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
-1700..170C;N # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA
-170E..1711;N # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+1700..1711;N # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA
1712..1714;N # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+1715;N # Mc TAGALOG SIGN PAMUDPOD
+171F;N # Lo TAGALOG LETTER ARCHAIC RA
1720..1731;N # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA
-1732..1734;N # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+1732..1733;N # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+1734;N # Mc HANUNOO SIGN PAMUDPOD
1735..1736;N # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
1740..1751;N # Lo [18] BUHID LETTER A..BUHID LETTER HA
1752..1753;N # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
@@ -741,6 +750,7 @@
1807..180A;N # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
180B..180D;N # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
180E;N # Cf MONGOLIAN VOWEL SEPARATOR
+180F;N # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
1810..1819;N # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
1820..1842;N # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843;N # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
@@ -796,7 +806,7 @@
1AA8..1AAD;N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
1AB0..1ABD;N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE;N # Me COMBINING PARENTHESES OVERLAY
-1ABF..1AC0;N # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+1ABF..1ACE;N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
1B00..1B03;N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04;N # Mc BALINESE SIGN BISAH
1B05..1B33;N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -808,12 +818,13 @@
1B3D..1B41;N # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
1B42;N # Mn BALINESE VOWEL SIGN PEPET
1B43..1B44;N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
-1B45..1B4B;N # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+1B45..1B4C;N # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
1B50..1B59;N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
1B5A..1B60;N # Po [7] BALINESE PANTI..BALINESE PAMENENG
1B61..1B6A;N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
1B6B..1B73;N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
1B74..1B7C;N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1B7D..1B7E;N # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
1B80..1B81;N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
1B82;N # Mc SUNDANESE SIGN PANGWISAD
1B83..1BA0;N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
@@ -872,8 +883,7 @@
1D79..1D7F;N # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
1D80..1D9A;N # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
1D9B..1DBF;N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-1DC0..1DF9;N # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
-1DFB..1DFF;N # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1DC0..1DFF;N # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
1E00..1EFF;N # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
1F00..1F15;N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
1F18..1F1D;N # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
@@ -965,7 +975,7 @@
20A9;H # Sc WON SIGN
20AA..20AB;N # Sc [2] NEW SHEQEL SIGN..DONG SIGN
20AC;A # Sc EURO SIGN
-20AD..20BF;N # Sc [19] KIP SIGN..BITCOIN SIGN
+20AD..20C0;N # Sc [20] KIP SIGN..SOM SIGN
20D0..20DC;N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0;N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
20E1;N # Mn COMBINING LEFT RIGHT ARROW ABOVE
@@ -1338,8 +1348,7 @@
2B5A..2B73;N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95;N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
2B97..2BFF;N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
-2C00..2C2E;N # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
-2C30..2C5E;N # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C00..2C5F;N # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
2C60..2C7B;N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
2C7C..2C7D;N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
2C7E..2C7F;N # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
@@ -1407,7 +1416,16 @@
2E42;N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F;N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
2E50..2E51;N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
-2E52;N # Po TIRONIAN SIGN CAPITAL ET
+2E52..2E54;N # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK
+2E55;N # Ps LEFT SQUARE BRACKET WITH STROKE
+2E56;N # Pe RIGHT SQUARE BRACKET WITH STROKE
+2E57;N # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE
+2E58;N # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+2E59;N # Ps TOP HALF LEFT PARENTHESIS
+2E5A;N # Pe TOP HALF RIGHT PARENTHESIS
+2E5B;N # Ps BOTTOM HALF LEFT PARENTHESIS
+2E5C;N # Pe BOTTOM HALF RIGHT PARENTHESIS
+2E5D;N # Pd OBLIQUE HYPHEN
2E80..2E99;W # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3;W # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5;W # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -1485,8 +1503,7 @@
3300..33FF;W # So [256] SQUARE APAATO..SQUARE GAL
3400..4DBF;W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
4DC0..4DFF;N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FFC;W # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
-9FFD..9FFF;W # Cn [3] <reserved-9FFD>..<reserved-9FFF>
+4E00..9FFF;W # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
A000..A014;W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015;W # Lm YI SYLLABLE WU
A016..A48C;W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -1525,8 +1542,11 @@ A788;N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A789..A78A;N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
A78B..A78E;N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F;N # Lo LATIN LETTER SINOLOGICAL DOT
-A790..A7BF;N # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7CA;N # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A790..A7CA;N # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7D0..A7D1;N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+A7D3;N # Ll LATIN SMALL LETTER DOUBLE THORN
+A7D5..A7D9;N # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+A7F2..A7F4;N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
A7F5..A7F6;N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7;N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9;N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
@@ -1682,15 +1702,17 @@ FB40..FB41;N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEK
FB43..FB44;N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
FB46..FB4F;N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
FB50..FBB1;N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
-FBB2..FBC1;N # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
+FBB2..FBC2;N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE
FBD3..FD3D;N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
FD3E;N # Pe ORNATE LEFT PARENTHESIS
FD3F;N # Ps ORNATE RIGHT PARENTHESIS
+FD40..FD4F;N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH
FD50..FD8F;N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
FD92..FDC7;N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDCF;N # So ARABIC LIGATURE SALAAMUHU ALAYNAA
FDF0..FDFB;N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
FDFC;N # Sc RIAL SIGN
-FDFD;N # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FDFD..FDFF;N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL
FE00..FE0F;A # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
FE10..FE16;W # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
FE17;W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
@@ -1839,9 +1861,20 @@ FFFD;A # So REPLACEMENT CHARACTER
10500..10527;N # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
10530..10563;N # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
1056F;N # Po CAUCASIAN ALBANIAN CITATION MARK
+10570..1057A;N # Lu [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+1057C..1058A;N # Lu [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+1058C..10592;N # Lu [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+10594..10595;N # Lu [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+10597..105A1;N # Ll [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A3..105B1;N # Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B3..105B9;N # Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BB..105BC;N # Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
10600..10736;N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
10740..10755;N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
10760..10767;N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10780..10785;N # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0;N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA;N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
10800..10805;N # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
10808;N # Lo CYPRIOT SYLLABLE JO
1080A..10835;N # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
@@ -1920,6 +1953,9 @@ FFFD;A # So REPLACEMENT CHARACTER
10F46..10F50;N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
10F51..10F54;N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59;N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10F70..10F81;N # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+10F82..10F85;N # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+10F86..10F89;N # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
10FB0..10FC4;N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FC5..10FCB;N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6;N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
@@ -1931,6 +1967,10 @@ FFFD;A # So REPLACEMENT CHARACTER
11047..1104D;N # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
11052..11065;N # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
11066..1106F;N # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+11070;N # Mn BRAHMI SIGN OLD TAMIL VIRAMA
+11071..11072;N # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+11073..11074;N # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+11075;N # Lo BRAHMI LETTER OLD TAMIL LLA
1107F;N # Mn BRAHMI NUMBER JOINER
11080..11081;N # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
11082;N # Mc KAITHI SIGN VISARGA
@@ -1942,6 +1982,7 @@ FFFD;A # So REPLACEMENT CHARACTER
110BB..110BC;N # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
110BD;N # Cf KAITHI NUMBER SIGN
110BE..110C1;N # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+110C2;N # Mn KAITHI VOWEL SIGN VOCALIC R
110CD;N # Cf KAITHI NUMBER SIGN ABOVE
110D0..110E8;N # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
110F0..110F9;N # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
@@ -2076,6 +2117,7 @@ FFFD;A # So REPLACEMENT CHARACTER
116B6;N # Mc TAKRI SIGN VIRAMA
116B7;N # Mn TAKRI SIGN NUKTA
116B8;N # Lo TAKRI LETTER ARCHAIC KHA
+116B9;N # Po TAKRI ABBREVIATION SIGN
116C0..116C9;N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11700..1171A;N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
1171D..1171F;N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
@@ -2087,6 +2129,7 @@ FFFD;A # So REPLACEMENT CHARACTER
1173A..1173B;N # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
1173C..1173E;N # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
1173F;N # So AHOM SYMBOL VI
+11740..11746;N # Lo [7] AHOM LETTER CA..AHOM LETTER LLA
11800..1182B;N # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
1182C..1182E;N # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
1182F..11837;N # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
@@ -2145,6 +2188,7 @@ FFFD;A # So REPLACEMENT CHARACTER
11A9A..11A9C;N # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
11A9D;N # Lo SOYOMBO MARK PLUTA
11A9E..11AA2;N # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+11AB0..11ABF;N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA
11AC0..11AF8;N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
11C00..11C08;N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
11C0A..11C2E;N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
@@ -2201,6 +2245,8 @@ FFFD;A # So REPLACEMENT CHARACTER
12400..1246E;N # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12470..12474;N # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
12480..12543;N # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+12F90..12FF0;N # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+12FF1..12FF2;N # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302
13000..1342E;N # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
13430..13438;N # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
14400..14646;N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
@@ -2208,6 +2254,8 @@ FFFD;A # So REPLACEMENT CHARACTER
16A40..16A5E;N # Lo [31] MRO LETTER TA..MRO LETTER TEK
16A60..16A69;N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
16A6E..16A6F;N # Po [2] MRO DANDA..MRO DOUBLE DANDA
+16A70..16ABE;N # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+16AC0..16AC9;N # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
16AD0..16AED;N # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
16AF0..16AF4;N # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16AF5;N # Po BASSA VAH FULL STOP
@@ -2240,8 +2288,11 @@ FFFD;A # So REPLACEMENT CHARACTER
18800..18AFF;W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
18B00..18CD5;W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
18D00..18D08;W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1AFF0..1AFF3;W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB;W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE;W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
1B000..1B0FF;W # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
-1B100..1B11E;W # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
+1B100..1B122;W # Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU
1B150..1B152;W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167;W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
1B170..1B2FB;W # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
@@ -2253,6 +2304,9 @@ FFFD;A # So REPLACEMENT CHARACTER
1BC9D..1BC9E;N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1BC9F;N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1BCA0..1BCA3;N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1CF00..1CF2D;N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30..1CF46;N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+1CF50..1CFC3;N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK
1D000..1D0F5;N # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
1D100..1D126;N # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
1D129..1D164;N # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
@@ -2266,7 +2320,7 @@ FFFD;A # So REPLACEMENT CHARACTER
1D185..1D18B;N # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1D18C..1D1A9;N # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
1D1AA..1D1AD;N # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-1D1AE..1D1E8;N # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+1D1AE..1D1EA;N # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON
1D200..1D241;N # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
1D242..1D244;N # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
1D245;N # So GREEK MUSICAL LEIMMA
@@ -2326,6 +2380,9 @@ FFFD;A # So REPLACEMENT CHARACTER
1DA87..1DA8B;N # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
1DA9B..1DA9F;N # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
1DAA1..1DAAF;N # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1DF00..1DF09;N # Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+1DF0A;N # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+1DF0B..1DF1E;N # Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
1E000..1E006;N # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
1E008..1E018;N # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
1E01B..1E021;N # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
@@ -2337,10 +2394,16 @@ FFFD;A # So REPLACEMENT CHARACTER
1E140..1E149;N # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
1E14E;N # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
1E14F;N # So NYIAKENG PUACHUE HMONG CIRCLED CA
+1E290..1E2AD;N # Lo [30] TOTO LETTER PA..TOTO LETTER A
+1E2AE;N # Mn TOTO SIGN RISING TONE
1E2C0..1E2EB;N # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH
1E2EC..1E2EF;N # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
1E2F0..1E2F9;N # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
1E2FF;N # Sc WANCHO NGUN SIGN
+1E7E0..1E7E6;N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E8..1E7EB;N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7ED..1E7EE;N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7F0..1E7FE;N # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
1E800..1E8C4;N # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
1E8C7..1E8CF;N # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
1E8D0..1E8D6;N # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
@@ -2465,6 +2528,7 @@ FFFD;A # So REPLACEMENT CHARACTER
1F6D0..1F6D2;W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY
1F6D3..1F6D4;N # So [2] STUPA..PAGODA
1F6D5..1F6D7;W # So [3] HINDU TEMPLE..ELEVATOR
+1F6DD..1F6DF;W # So [3] PLAYGROUND SLIDE..RING BUOY
1F6E0..1F6EA;N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE
1F6EB..1F6EC;W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
1F6F0..1F6F3;N # So [4] SATELLITE..PASSENGER SHIP
@@ -2472,6 +2536,7 @@ FFFD;A # So REPLACEMENT CHARACTER
1F700..1F773;N # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8;N # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB;W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+1F7F0;W # So HEAVY EQUALS SIGN
1F800..1F80B;N # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F810..1F847;N # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
1F850..1F859;N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
@@ -2483,25 +2548,25 @@ FFFD;A # So REPLACEMENT CHARACTER
1F93B;N # So MODERN PENTATHLON
1F93C..1F945;W # So [10] WRESTLERS..GOAL NET
1F946;N # So RIFLE
-1F947..1F978;W # So [50] FIRST PLACE MEDAL..DISGUISED FACE
-1F97A..1F9CB;W # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
-1F9CD..1F9FF;W # So [51] STANDING PERSON..NAZAR AMULET
+1F947..1F9FF;W # So [185] FIRST PLACE MEDAL..NAZAR AMULET
1FA00..1FA53;N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D;N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
1FA70..1FA74;W # So [5] BALLET SHOES..THONG SANDAL
-1FA78..1FA7A;W # So [3] DROP OF BLOOD..STETHOSCOPE
+1FA78..1FA7C;W # So [5] DROP OF BLOOD..CRUTCH
1FA80..1FA86;W # So [7] YO-YO..NESTING DOLLS
-1FA90..1FAA8;W # So [25] RINGED PLANET..ROCK
-1FAB0..1FAB6;W # So [7] FLY..FEATHER
-1FAC0..1FAC2;W # So [3] ANATOMICAL HEART..PEOPLE HUGGING
-1FAD0..1FAD6;W # So [7] BLUEBERRIES..TEAPOT
+1FA90..1FAAC;W # So [29] RINGED PLANET..HAMSA
+1FAB0..1FABA;W # So [11] FLY..NEST WITH EGGS
+1FAC0..1FAC5;W # So [6] ANATOMICAL HEART..PERSON WITH CROWN
+1FAD0..1FAD9;W # So [10] BLUEBERRIES..JAR
+1FAE0..1FAE7;W # So [8] MELTING FACE..BUBBLES
+1FAF0..1FAF6;W # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS
1FB00..1FB92;N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
1FB94..1FBCA;N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
1FBF0..1FBF9;N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-20000..2A6DD;W # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
-2A6DE..2A6FF;W # Cn [34] <reserved-2A6DE>..<reserved-2A6FF>
-2A700..2B734;W # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
-2B735..2B73F;W # Cn [11] <reserved-2B735>..<reserved-2B73F>
+20000..2A6DF;W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A6E0..2A6FF;W # Cn [32] <reserved-2A6E0>..<reserved-2A6FF>
+2A700..2B738;W # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+2B739..2B73F;W # Cn [7] <reserved-2B739>..<reserved-2B73F>
2B740..2B81D;W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B81E..2B81F;W # Cn [2] <reserved-2B81E>..<reserved-2B81F>
2B820..2CEA1;W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
diff --git a/contrib/unicode/PropList.txt b/contrib/unicode/PropList.txt
index 7d2f44c..0a5a934 100644
--- a/contrib/unicode/PropList.txt
+++ b/contrib/unicode/PropList.txt
@@ -1,6 +1,6 @@
-# PropList-13.0.0.txt
-# Date: 2019-11-27, 03:13:28 GMT
-# © 2019 Unicode®, Inc.
+# PropList-14.0.0.txt
+# Date: 2021-08-12, 23:13:05 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -54,6 +54,7 @@
2E1A ; Dash # Pd HYPHEN WITH DIAERESIS
2E3A..2E3B ; Dash # Pd [2] TWO-EM DASH..THREE-EM DASH
2E40 ; Dash # Pd DOUBLE HYPHEN
+2E5D ; Dash # Pd OBLIQUE HYPHEN
301C ; Dash # Pd WAVE DASH
3030 ; Dash # Pd WAVY DASH
30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
@@ -63,7 +64,7 @@ FE63 ; Dash # Pd SMALL HYPHEN-MINUS
FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
10EAD ; Dash # Pd YEZIDI HYPHENATION MARK
-# Total code points: 29
+# Total code points: 30
# ================================================
@@ -126,7 +127,7 @@ FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET
05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ
060C ; Terminal_Punctuation # Po ARABIC COMMA
061B ; Terminal_Punctuation # Po ARABIC SEMICOLON
-061E..061F ; Terminal_Punctuation # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+061D..061F ; Terminal_Punctuation # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP
0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION
070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS
@@ -150,6 +151,7 @@ FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET
1AA8..1AAB ; Terminal_Punctuation # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU
1B5A..1B5B ; Terminal_Punctuation # Po [2] BALINESE PANTI..BALINESE PAMADA
1B5D..1B5F ; Terminal_Punctuation # Po [3] BALINESE CARIK PAMUNGKAH..BALINESE CARIK PAREREN
+1B7D..1B7E ; Terminal_Punctuation # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
1C3B..1C3F ; Terminal_Punctuation # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
1C7E..1C7F ; Terminal_Punctuation # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
203C..203D ; Terminal_Punctuation # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
@@ -159,6 +161,7 @@ FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET
2E41 ; Terminal_Punctuation # Po REVERSED COMMA
2E4C ; Terminal_Punctuation # Po MEDIEVAL COMMA
2E4E..2E4F ; Terminal_Punctuation # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER
+2E53..2E54 ; Terminal_Punctuation # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK
3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP
A4FE..A4FF ; Terminal_Punctuation # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
A60D..A60F ; Terminal_Punctuation # Po [3] VAI COMMA..VAI QUESTION MARK
@@ -189,6 +192,7 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION
10B99..10B9C ; Terminal_Punctuation # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
10F55..10F59 ; Terminal_Punctuation # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10F86..10F89 ; Terminal_Punctuation # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
@@ -220,7 +224,7 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 267
+# Total code points: 276
# ================================================
@@ -600,6 +604,7 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1A6D..1A72 ; Other_Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
1A73..1A74 ; Other_Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
1ABF..1AC0 ; Other_Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+1ACC..1ACE ; Other_Alphabetic # Mn [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T
1B00..1B03 ; Other_Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; Other_Alphabetic # Mc BALINESE SIGN BISAH
1B35 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG
@@ -686,10 +691,12 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA
11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA
11038..11045 ; Other_Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU
+11073..11074 ; Other_Alphabetic # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
11082 ; Other_Alphabetic # Mc KAITHI SIGN VISARGA
110B0..110B2 ; Other_Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
110B3..110B6 ; Other_Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
110B7..110B8 ; Other_Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+110C2 ; Other_Alphabetic # Mn KAITHI VOWEL SIGN VOCALIC R
11100..11102 ; Other_Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E
@@ -815,7 +822,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1398
+# Total code points: 1404
# ================================================
@@ -824,7 +831,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
3400..4DBF ; Ideographic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
-4E00..9FFC ; Ideographic # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+4E00..9FFF ; Ideographic # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
16FE4 ; Ideographic # Mn KHITAN SMALL SCRIPT FILLER
@@ -832,15 +839,15 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
18800..18CD5 ; Ideographic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
18D00..18D08 ; Ideographic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
-20000..2A6DD ; Ideographic # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
-2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+20000..2A6DF ; Ideographic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; Ideographic # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
30000..3134A ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 101652
+# Total code points: 101661
# ================================================
@@ -885,6 +892,9 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH
+0898..089F ; Diacritic # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+08C9 ; Diacritic # Lm ARABIC SMALL FARSI YEH
+08CA..08D2 ; Diacritic # Mn [9] ARABIC SMALL HIGH FARSI YEH..ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW
08E3..08FE ; Diacritic # Mn [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT
093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA
094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA
@@ -901,6 +911,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA
0B55 ; Diacritic # Mn ORIYA SIGN OVERLINE
0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA
+0C3C ; Diacritic # Mn TELUGU SIGN NUKTA
0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA
0CBC ; Diacritic # Mn KANNADA SIGN NUKTA
0CCD ; Diacritic # Mn KANNADA SIGN VIRAMA
@@ -928,12 +939,16 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
108F ; Diacritic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5
109A..109B ; Diacritic # Mc [2] MYANMAR SIGN KHAMTI TONE-1..MYANMAR SIGN KHAMTI TONE-3
135D..135F ; Diacritic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+1714 ; Diacritic # Mn TAGALOG SIGN VIRAMA
+1715 ; Diacritic # Mc TAGALOG SIGN PAMUDPOD
17C9..17D3 ; Diacritic # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
17DD ; Diacritic # Mn KHMER SIGN ATTHACAN
1939..193B ; Diacritic # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
1A75..1A7C ; Diacritic # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN
1A7F ; Diacritic # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; Diacritic # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABE ; Diacritic # Me COMBINING PARENTHESES OVERLAY
+1AC1..1ACB ; Diacritic # Mn [11] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING TRIPLE ACUTE ACCENT
1B34 ; Diacritic # Mn BALINESE SIGN REREKAN
1B44 ; Diacritic # Mc BALINESE ADEG ADEG
1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
@@ -952,8 +967,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
1CF8..1CF9 ; Diacritic # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW
-1DF5..1DF9 ; Diacritic # Mn [5] COMBINING UP TACK ABOVE..COMBINING WIDE INVERTED BRIDGE BELOW
-1DFD..1DFF ; Diacritic # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1DF5..1DFF ; Diacritic # Mn [11] COMBINING UP TACK ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
1FBD ; Diacritic # Sk GREEK KORONIS
1FBF..1FC1 ; Diacritic # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
1FCD..1FCF ; Diacritic # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
@@ -1008,10 +1022,16 @@ FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND
FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
FFE3 ; Diacritic # Sk FULLWIDTH MACRON
102E0 ; Diacritic # Mn COPTIC EPACT THOUSANDS MARK
+10780..10785 ; Diacritic # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Diacritic # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Diacritic # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
10AE5..10AE6 ; Diacritic # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D22..10D23 ; Diacritic # Lo [2] HANIFI ROHINGYA MARK SAKIN..HANIFI ROHINGYA MARK NA KHONNA
10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10F82..10F85 ; Diacritic # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+11046 ; Diacritic # Mn BRAHMI VIRAMA
+11070 ; Diacritic # Mn BRAHMI SIGN OLD TAMIL VIRAMA
110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA
@@ -1049,18 +1069,24 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
16FF0..16FF1 ; Diacritic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+1AFF0..1AFF3 ; Diacritic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF5..1AFFB ; Diacritic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFD..1AFFE ; Diacritic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1CF00..1CF2D ; Diacritic # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF30..1CF46 ; Diacritic # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
1E130..1E136 ; Diacritic # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+1E2AE ; Diacritic # Mn TOTO SIGN RISING TONE
1E2EC..1E2EF ; Diacritic # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
1E8D0..1E8D6 ; Diacritic # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA
-# Total code points: 882
+# Total code points: 1064
# ================================================
@@ -1088,6 +1114,7 @@ AA70 ; Extender # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
AADD ; Extender # Lm TAI VIET SYMBOL SAM
AAF3..AAF4 ; Extender # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+10781..10782 ; Extender # Lm [2] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON
1135D ; Extender # Lo GRANTHA SIGN PLUTA
115C6..115C8 ; Extender # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3
11A98 ; Extender # Mn SOYOMBO GEMINATION MARK
@@ -1097,7 +1124,7 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND
1E13C..1E13D ; Extender # Lm [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
-# Total code points: 48
+# Total code points: 50
# ================================================
@@ -1121,8 +1148,12 @@ A69C..A69D ; Other_Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..M
A770 ; Other_Lowercase # Lm MODIFIER LETTER US
A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
AB5C..AB5F ; Other_Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+10780 ; Other_Lowercase # Lm MODIFIER LETTER SMALL CAPITAL AA
+10783..10785 ; Other_Lowercase # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK
+10787..107B0 ; Other_Lowercase # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B2..107BA ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
-# Total code points: 189
+# Total code points: 244
# ================================================
@@ -1211,7 +1242,7 @@ E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG
# ================================================
3400..4DBF ; Unified_Ideograph # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
-4E00..9FFC ; Unified_Ideograph # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+4E00..9FFF ; Unified_Ideograph # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
@@ -1219,14 +1250,14 @@ FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F
FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21
FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
-20000..2A6DD ; Unified_Ideograph # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
-2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+20000..2A6DF ; Unified_Ideograph # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+2A700..2B738 ; Unified_Ideograph # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 92856
+# Total code points: 92865
# ================================================
@@ -1291,8 +1322,9 @@ E0001 ; Deprecated # Cf LANGUAGE TAG
1D62A..1D62B ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J
1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J
1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J
+1DF1A ; Soft_Dotted # L& LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK
-# Total code points: 46
+# Total code points: 47
# ================================================
@@ -1330,7 +1362,7 @@ AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET
002E ; Sentence_Terminal # Po FULL STOP
003F ; Sentence_Terminal # Po QUESTION MARK
0589 ; Sentence_Terminal # Po ARMENIAN FULL STOP
-061E..061F ; Sentence_Terminal # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+061D..061F ; Sentence_Terminal # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
06D4 ; Sentence_Terminal # Po ARABIC FULL STOP
0700..0702 ; Sentence_Terminal # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP
07F9 ; Sentence_Terminal # Po NKO EXCLAMATION MARK
@@ -1349,12 +1381,14 @@ AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET
1AA8..1AAB ; Sentence_Terminal # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU
1B5A..1B5B ; Sentence_Terminal # Po [2] BALINESE PANTI..BALINESE PAMADA
1B5E..1B5F ; Sentence_Terminal # Po [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN
+1B7D..1B7E ; Sentence_Terminal # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
1C3B..1C3C ; Sentence_Terminal # Po [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL
1C7E..1C7F ; Sentence_Terminal # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
203C..203D ; Sentence_Terminal # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG
2047..2049 ; Sentence_Terminal # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK
2E2E ; Sentence_Terminal # Po REVERSED QUESTION MARK
2E3C ; Sentence_Terminal # Po STENOGRAPHIC FULL STOP
+2E53..2E54 ; Sentence_Terminal # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK
3002 ; Sentence_Terminal # Po IDEOGRAPHIC FULL STOP
A4FF ; Sentence_Terminal # Po LISU PUNCTUATION FULL STOP
A60E..A60F ; Sentence_Terminal # Po [2] VAI FULL STOP..VAI QUESTION MARK
@@ -1375,6 +1409,7 @@ FF1F ; Sentence_Terminal # Po FULLWIDTH QUESTION MARK
FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
10A56..10A57 ; Sentence_Terminal # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
10F55..10F59 ; Sentence_Terminal # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10F86..10F89 ; Sentence_Terminal # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
11047..11048 ; Sentence_Terminal # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
110BE..110C1 ; Sentence_Terminal # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11141..11143 ; Sentence_Terminal # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
@@ -1403,15 +1438,16 @@ FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP
-# Total code points: 143
+# Total code points: 152
# ================================================
180B..180D ; Variation_Selector # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180F ; Variation_Selector # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR
FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 259
+# Total code points: 260
# ================================================
@@ -1644,8 +1680,17 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S
2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; Pattern_Syntax # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
2E50..2E51 ; Pattern_Syntax # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
-2E52 ; Pattern_Syntax # Po TIRONIAN SIGN CAPITAL ET
-2E53..2E7F ; Pattern_Syntax # Cn [45] <reserved-2E53>..<reserved-2E7F>
+2E52..2E54 ; Pattern_Syntax # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK
+2E55 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH STROKE
+2E56 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH STROKE
+2E57 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE
+2E58 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+2E59 ; Pattern_Syntax # Ps TOP HALF LEFT PARENTHESIS
+2E5A ; Pattern_Syntax # Pe TOP HALF RIGHT PARENTHESIS
+2E5B ; Pattern_Syntax # Ps BOTTOM HALF LEFT PARENTHESIS
+2E5C ; Pattern_Syntax # Pe BOTTOM HALF RIGHT PARENTHESIS
+2E5D ; Pattern_Syntax # Pd OBLIQUE HYPHEN
+2E5E..2E7F ; Pattern_Syntax # Cn [34] <reserved-2E5E>..<reserved-2E7F>
3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
@@ -1682,11 +1727,12 @@ FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT
0600..0605 ; Prepended_Concatenation_Mark # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
06DD ; Prepended_Concatenation_Mark # Cf ARABIC END OF AYAH
070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK
+0890..0891 ; Prepended_Concatenation_Mark # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH
110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN
110CD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN ABOVE
-# Total code points: 11
+# Total code points: 13
# ================================================
diff --git a/contrib/unicode/README b/contrib/unicode/README
index f5d2a1f..fae4f76 100644
--- a/contrib/unicode/README
+++ b/contrib/unicode/README
@@ -1,15 +1,19 @@
This directory contains a mechanism for GCC to have its own internal
-implementation of wcwidth functionality. (cpp_wcwidth () in libcpp/charset.c).
+implementation of wcwidth functionality (cpp_wcwidth () in libcpp/charset.c),
+as well as a mechanism to update the information about codepoints permitted in
+identifiers, which is encoded in libcpp/ucnid.h.
-The idea is to produce the necessary lookup table
-(../../libcpp/generated_cpp_wcwidth.h) in a reproducible way, starting from the
-following files that are distributed by the Unicode Consortium:
+The idea is to produce the necessary lookup tables
+(../../libcpp/{ucnid.h,generated_cpp_wcwidth.h}) in a reproducible way, starting
+from the following files that are distributed by the Unicode Consortium:
ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
ftp://ftp.unicode.org/Public/UNIDATA/EastAsianWidth.txt
ftp://ftp.unicode.org/Public/UNIDATA/PropList.txt
+ftp://ftp.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt
+ftp://ftp.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
-These three files have been added to source control in this directory;
+These files have been added to source control in this directory;
please see unicode-license.txt for the relevant copyright information.
In order to keep in sync with glibc's wcwidth as much as possible, it is
@@ -25,20 +29,27 @@ localedata/unicode-gen/utf8_gen.py
And the most recent versions added to GCC are from glibc git commit:
f6032247061fb37d59565f2e9667e242c8a98e76
-Finally, the script gen_wcwidth.py found here contains the GCC-specific code to
+The script gen_wcwidth.py found here contains the GCC-specific code to
map glibc's output to the lookup tables we require. This script should not need
to change, unless there are structural changes to the Unicode data files or to
-the glibc code.
+the glibc code. Similarly, makeucnid.cc in ../../libcpp contains the logic to
+produce ucnid.h.
-The procedure to update GCC's wcwidth tables is the following:
+The procedure to update GCC's Unicode support is the following:
-1. Update the three Unicode data files from the above URLs.
+1. Update the five Unicode data files from the above URLs.
2. Update the two glibc files in from_glibc/ from glibc's git. Update
the commit number above in this README.
3. Run ./gen_wcwidth.py X.Y > ../../libcpp/generated_cpp_wcwidth.h
(where X.Y is the version of the Unicode standard corresponding to the
- Unicode data files being used, most recently, 13.0.0).
+ Unicode data files being used, most recently, 14.0.0).
-After that, GCC's wcwidth will match the most recent glibc.
+4. Compile makeucnid, e.g. with:
+ gcc -O2 ../../libcpp/makeucnid.cc -o ../../libcpp/makeucnid
+
+5. Generate ucnid.h as follows:
+ ../../libcpp/makeucnid ../../libcpp/ucnid.tab UnicodeData.txt \
+ DerivedNormalizationProps.txt DerivedCoreProperties.txt \
+ > ../../libcpp/ucnid.h
diff --git a/contrib/unicode/UnicodeData.txt b/contrib/unicode/UnicodeData.txt
index e22f967..b5abef7 100644
--- a/contrib/unicode/UnicodeData.txt
+++ b/contrib/unicode/UnicodeData.txt
@@ -1525,6 +1525,7 @@
061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;;
+061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;;
061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;;
@@ -2089,6 +2090,47 @@
0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;;
0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;;
086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;;
+0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;;
+0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;;
+0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;
+0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;
+0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;;
+0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;;
+0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;;
+087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;;
+087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;;
+0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;;
+0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;;
+0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;;
+0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;;
+0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;;
+0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;;
+0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;;
+0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;;
+088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;
+088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;;
+0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;;
+0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;;
+089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;;
+089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;;
+089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;;
+089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;;
+089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;;
+089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;;
08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2110,6 +2152,7 @@
08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;
08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2128,6 +2171,17 @@
08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
+08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;;
+08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;;
+08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;;
+08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;;
+08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;;
+08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;;
+08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;;
+08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;
+08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;
08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
@@ -2786,6 +2840,7 @@
0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
@@ -2806,6 +2861,7 @@
0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;;
+0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;
0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
@@ -2901,6 +2957,7 @@
0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;
0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
@@ -5258,6 +5315,7 @@
170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;;
170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
@@ -5265,6 +5323,8 @@
1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;
+171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;;
1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
@@ -5285,7 +5345,7 @@
1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;
1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
@@ -5455,6 +5515,7 @@
180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;;
1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -6059,6 +6120,20 @@
1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;;
1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;;
+1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;;
+1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;;
+1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;;
+1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;;
+1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;;
+1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;;
+1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;;
1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
@@ -6135,6 +6210,7 @@
1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;;
1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -6180,6 +6256,8 @@
1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;;
+1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;;
1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
@@ -6778,6 +6856,7 @@
1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;;
1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;;
1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;
@@ -7457,6 +7536,7 @@
20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;
20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;
20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;;
+20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;;
20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
@@ -10300,6 +10380,7 @@
2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F;
2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
@@ -10347,6 +10428,7 @@
2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F
2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
@@ -10795,6 +10877,17 @@
2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;
2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;
2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;;
+2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;;
+2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;;
+2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;;
+2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;;
+2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -12204,7 +12297,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FFC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FFF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -14149,6 +14242,8 @@ A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD;
A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC
A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF;
A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE
+A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1;
+A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0
A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3;
A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2
A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;
@@ -14158,6 +14253,17 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8;
A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7
A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA;
A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9
+A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1;
+A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0
+A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;;
+A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;;
+A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7;
+A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6
+A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9;
+A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8
+A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L;<super> 0043;;;;N;;;;;
+A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L;<super> 0046;;;;N;;;;;
+A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L;<super> 0051;;;;N;;;;;
A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6;
A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
@@ -15794,6 +15900,7 @@ FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;;
FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;;
FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;;
FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;;
+FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;;
FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
@@ -16159,6 +16266,22 @@ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;
FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;;
+FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;;
+FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;;
+FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;;
+FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;;
+FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;;
+FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;;
+FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;;
+FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;;
+FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;;
+FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;;
FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
@@ -16277,6 +16400,7 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639
FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;;
FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
@@ -16291,6 +16415,8 @@ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 06
FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;;
+FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;;
FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
@@ -17798,6 +17924,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;;
10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;;
1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;;
+10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597;
+10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598;
+10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599;
+10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A;
+10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B;
+10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C;
+10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D;
+10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E;
+10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F;
+10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0;
+1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1;
+1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3;
+1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4;
+1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5;
+1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6;
+10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7;
+10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8;
+10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9;
+10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA;
+10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB;
+10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC;
+10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD;
+10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE;
+10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF;
+10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0;
+1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1;
+1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3;
+1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4;
+1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5;
+1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6;
+10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7;
+10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8;
+10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9;
+10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB;
+10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC;
+10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570
+10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571
+10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572
+1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573
+1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574
+1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575
+1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576
+1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577
+1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578
+105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579
+105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A
+105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C
+105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D
+105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E
+105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F
+105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580
+105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581
+105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582
+105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583
+105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584
+105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585
+105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586
+105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587
+105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588
+105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589
+105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A
+105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C
+105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D
+105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E
+105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F
+105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590
+105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591
+105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592
+105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594
+105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595
10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;;
10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;;
10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;;
@@ -18139,6 +18335,63 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;;
10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;;
10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;;
+10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;;
+10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L;<super> 02D0;;;;N;;;;;
+10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L;<super> 02D1;;;;N;;;;;
+10783;MODIFIER LETTER SMALL AE;Lm;0;L;<super> 00E6;;;;N;;;;;
+10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L;<super> 0299;;;;N;;;;;
+10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L;<super> 0253;;;;N;;;;;
+10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L;<super> 02A3;;;;N;;;;;
+10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> AB66;;;;N;;;;;
+10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L;<super> 02A5;;;;N;;;;;
+1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L;<super> 02A4;;;;N;;;;;
+1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L;<super> 0256;;;;N;;;;;
+1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L;<super> 0257;;;;N;;;;;
+1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L;<super> 1D91;;;;N;;;;;
+1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L;<super> 0258;;;;N;;;;;
+1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L;<super> 025E;;;;N;;;;;
+10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L;<super> 02A9;;;;N;;;;;
+10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L;<super> 0264;;;;N;;;;;
+10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L;<super> 0262;;;;N;;;;;
+10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L;<super> 0260;;;;N;;;;;
+10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L;<super> 029B;;;;N;;;;;
+10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L;<super> 0127;;;;N;;;;;
+10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L;<super> 029C;;;;N;;;;;
+10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L;<super> 0267;;;;N;;;;;
+10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L;<super> 0284;;;;N;;;;;
+10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L;<super> 02AA;;;;N;;;;;
+1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L;<super> 02AB;;;;N;;;;;
+1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L;<super> 026C;;;;N;;;;;
+1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L;<super> 1DF04;;;;N;;;;;
+1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L;<super> A78E;;;;N;;;;;
+1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L;<super> 026E;;;;N;;;;;
+1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L;<super> 1DF05;;;;N;;;;;
+107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L;<super> 028E;;;;N;;;;;
+107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L;<super> 1DF06;;;;N;;;;;
+107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L;<super> 00F8;;;;N;;;;;
+107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L;<super> 0276;;;;N;;;;;
+107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L;<super> 0277;;;;N;;;;;
+107A5;MODIFIER LETTER SMALL Q;Lm;0;L;<super> 0071;;;;N;;;;;
+107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L;<super> 027A;;;;N;;;;;
+107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L;<super> 1DF08;;;;N;;;;;
+107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L;<super> 027D;;;;N;;;;;
+107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L;<super> 027E;;;;N;;;;;
+107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L;<super> 0280;;;;N;;;;;
+107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L;<super> 02A8;;;;N;;;;;
+107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L;<super> 02A6;;;;N;;;;;
+107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> AB67;;;;N;;;;;
+107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L;<super> 02A7;;;;N;;;;;
+107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L;<super> 0288;;;;N;;;;;
+107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L;<super> 2C71;;;;N;;;;;
+107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L;<super> 028F;;;;N;;;;;
+107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A1;;;;N;;;;;
+107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A2;;;;N;;;;;
+107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L;<super> 0298;;;;N;;;;;
+107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L;<super> 01C0;;;;N;;;;;
+107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L;<super> 01C1;;;;N;;;;;
+107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L;<super> 01C2;;;;N;;;;;
+107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L;<super> 1DF0A;;;;N;;;;;
+107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L;<super> 1DF1E;;;;N;;;;;
10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
@@ -19222,6 +19475,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;;
+10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;;
+10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;;
+10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;;
+10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;;
+10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;;
+10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;;
+10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;;
+10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;;
+10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;;
+10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;;
+10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;;
+10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;;
+10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;;
+10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;;
10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;;
10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
@@ -19381,6 +19660,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;;
+11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;;
+11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;;
+11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;;
+11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;;
1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;;
11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
@@ -19448,6 +19733,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;
110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
@@ -20385,6 +20671,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;;
+116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -20453,6 +20740,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
+11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;;
+11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;;
+11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;;
+11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;;
+11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;;
11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;
11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;
11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;
@@ -20889,6 +21183,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;;
11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;;
+11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;;
+11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;;
+11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;;
+11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;;
+11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;;
+11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;;
+11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;;
+11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;;
+11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;;
+11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;;
+11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;;
+11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;;
+11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;;
+11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;;
+11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;;
+11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;;
11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;;
11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;;
11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;;
@@ -22560,6 +22870,105 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;;
12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;;
12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;;
+12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;;
+12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;;
+12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;;
+12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;;
+12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;;
+12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;;
+12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;;
+12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;;
+12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;;
+12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;;
+12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;;
+12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;;
+12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;;
+12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;;
+12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;;
+12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;;
+12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;;
+12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;;
+12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;;
+12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;;
+12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;;
+12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;;
+12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;;
+12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;;
+12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;;
+12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;;
+12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;;
+12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;;
+12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;;
+12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;;
+12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;;
+12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;;
+12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;;
+12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;;
+12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;;
+12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;;
+12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;;
+12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;;
+12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;;
+12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;;
+12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;;
+12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;;
+12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;;
+12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;;
+12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;;
+12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;;
+12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;;
+12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;;
+12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;;
+12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;;
+12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;;
+12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;;
+12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;;
+12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;;
+12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;;
+12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;;
+12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;;
+12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;;
+12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;;
+12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;;
+12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;;
+12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;;
+12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;;
+12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;;
+12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;;
+12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;;
+12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;;
+12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;;
+12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;;
+12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;;
+12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;;
+12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;;
+12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;;
+12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;;
+12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;;
+12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;;
+12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;;
+12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;;
+12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;;
+12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;;
+12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;;
+12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;;
+12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;;
+12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;;
+12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;;
+12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;;
+12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;;
+12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;;
+12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;;
+12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;;
+12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;;
+12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;;
+12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;;
+12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;;
+12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;;
+12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;;
+12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;;
+12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;;
+12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;;
13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
@@ -24835,6 +25244,95 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
16A6E;MRO DANDA;Po;0;L;;;;;N;;;;;
16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;;
+16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;;
+16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;;
+16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;;
+16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;;
+16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;;
+16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;;
+16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;;
+16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;;
+16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;;
+16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;;
+16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;;
+16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;;
+16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;;
+16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;;
+16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;;
+16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;;
+16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;;
+16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;;
+16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;;
+16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;;
+16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;;
+16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;;
+16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;;
+16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;;
+16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;;
+16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;;
+16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;;
+16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;;
+16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;;
+16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;;
+16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;;
+16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;;
+16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;;
+16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;;
+16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;;
+16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;;
+16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;;
+16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;;
+16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;;
+16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;;
+16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;;
+16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;;
+16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;;
+16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;;
+16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;;
+16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;;
+16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;;
+16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;;
+16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;;
+16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;;
+16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;;
+16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;;
+16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;;
+16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;;
+16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;;
+16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;;
+16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;;
+16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;;
+16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;;
+16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;;
+16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;;
+16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;;
+16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;;
+16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;;
+16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;;
+16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;;
+16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;;
+16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;;
+16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;;
+16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;;
+16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;;
+16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;;
+16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;;
+16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;;
+16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;;
+16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;;
+16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;;
+16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;;
16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;;
16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;;
@@ -26487,6 +26985,19 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;;
18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;;
18D08;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;;
+1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;;
+1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;;
+1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;;
+1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;;
+1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;;
+1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;;
+1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;;
+1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;;
+1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;;
+1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;;
+1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;;
+1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;;
+1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;;
1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
@@ -26774,6 +27285,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;;
1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;;
1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;;
+1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
+1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;;
+1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
+1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
@@ -27324,6 +27839,191 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;;
1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;;
1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;;
+1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;;
+1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;
+1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;
+1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;;
+1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;;
+1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;;
+1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;;
+1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;;
+1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;;
+1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;;
+1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;;
+1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;;
+1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;;
+1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;;
+1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;;
+1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;;
+1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;;
+1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;;
+1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;;
+1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;;
+1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;;
+1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;;
+1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;;
+1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;;
+1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;;
+1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;;
+1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;;
+1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;;
+1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;;
+1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;;
+1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;;
+1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;;
+1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;;
+1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;;
+1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;;
+1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;;
+1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;;
+1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;;
+1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;;
+1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;;
+1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;;
+1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;;
+1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;;
+1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;;
+1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;;
+1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;;
+1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;;
+1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;;
+1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;;
+1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;;
+1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;;
+1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;;
+1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;;
+1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;;
+1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;;
+1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;;
+1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;;
+1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;;
+1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;;
+1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;;
+1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;;
+1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;;
+1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;;
+1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;;
+1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;;
+1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;;
+1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;;
+1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;;
+1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;;
+1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;;
+1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;;
+1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;;
+1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;;
+1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;;
+1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;;
+1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;;
+1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;;
+1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;;
+1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;;
+1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;;
+1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;;
+1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;;
+1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;;
+1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;;
+1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;;
+1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;;
+1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;;
+1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;;
+1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;;
+1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;;
+1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;;
+1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;;
+1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;;
+1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;;
+1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;;
+1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;;
+1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;;
+1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;;
+1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;;
1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
@@ -27801,6 +28501,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;;
1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;;
1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;;
+1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;;
+1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;;
1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
@@ -29671,6 +30373,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;
1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;
1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;
+1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;;
+1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;;
+1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;;
+1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;;
+1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;;
+1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;;
+1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;;
+1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;;
+1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;;
+1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;;
+1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;;
+1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;;
1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;
1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;
1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;
@@ -29780,6 +30513,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;;
1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;;
+1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;;
+1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;;
+1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;;
+1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;;
+1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;;
+1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;;
+1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;;
+1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;;
+1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;;
+1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;;
+1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;;
+1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;;
+1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;;
+1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;;
+1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;;
+1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;;
+1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;;
+1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;;
+1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;;
+1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;;
+1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;;
+1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;;
+1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;;
+1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;;
+1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;;
+1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;;
+1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;;
+1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;;
+1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;;
+1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;;
1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;;
1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;;
1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;;
@@ -29839,6 +30603,34 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;;
+1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;;
+1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;;
+1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;;
+1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;;
+1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;;
+1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;;
+1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;;
+1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;;
+1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;;
+1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;;
+1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;;
+1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;;
+1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;;
+1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;;
+1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;;
+1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;;
+1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;;
+1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;;
+1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;;
+1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;;
+1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;;
+1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;;
+1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;;
+1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;;
+1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;;
+1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;;
+1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;;
+1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;;
1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;
1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;
1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;
@@ -31886,6 +32678,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
1F6D6;HUT;So;0;ON;;;;;N;;;;;
1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
+1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;;
+1F6DE;WHEEL;So;0;ON;;;;;N;;;;;
+1F6DF;RING BUOY;So;0;ON;;;;;N;;;;;
1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -32129,6 +32924,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;;
1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;;
1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;;
+1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;;
1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -32400,6 +33196,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
1F977;NINJA;So;0;ON;;;;;N;;;;;
1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;
+1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;;
1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
1F97B;SARI;So;0;ON;;;;;N;;;;;
1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
@@ -32482,6 +33279,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;
1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;
+1F9CC;TROLL;So;0;ON;;;;;N;;;;;
1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
@@ -32639,6 +33437,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
+1FA7B;X-RAY;So;0;ON;;;;;N;;;;;
+1FA7C;CRUTCH;So;0;ON;;;;;N;;;;;
1FA80;YO-YO;So;0;ON;;;;;N;;;;;
1FA81;KITE;So;0;ON;;;;;N;;;;;
1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
@@ -32671,6 +33471,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;
1FAA7;PLACARD;So;0;ON;;;;;N;;;;;
1FAA8;ROCK;So;0;ON;;;;;N;;;;;
+1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;;
+1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;;
+1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;;
+1FAAC;HAMSA;So;0;ON;;;;;N;;;;;
1FAB0;FLY;So;0;ON;;;;;N;;;;;
1FAB1;WORM;So;0;ON;;;;;N;;;;;
1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
@@ -32678,9 +33482,16 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;
1FAB5;WOOD;So;0;ON;;;;;N;;;;;
1FAB6;FEATHER;So;0;ON;;;;;N;;;;;
+1FAB7;LOTUS;So;0;ON;;;;;N;;;;;
+1FAB8;CORAL;So;0;ON;;;;;N;;;;;
+1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;;
+1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;;
1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
+1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;;
+1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;;
+1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;;
1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
@@ -32688,6 +33499,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAD4;TAMALE;So;0;ON;;;;;N;;;;;
1FAD5;FONDUE;So;0;ON;;;;;N;;;;;
1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;
+1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;;
+1FAD8;BEANS;So;0;ON;;;;;N;;;;;
+1FAD9;JAR;So;0;ON;;;;;N;;;;;
+1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;;
+1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;;
+1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;;
+1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;;
+1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;;
+1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;;
+1FAE6;BITING LIP;So;0;ON;;;;;N;;;;;
+1FAE7;BUBBLES;So;0;ON;;;;;N;;;;;
+1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;;
+1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;;
+1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;;
+1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;;
+1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;;
+1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;;
+1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;;
1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;
1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;
1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;
@@ -32901,9 +33730,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
-2A6DD;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A6DF;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
-2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
+2B738;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0154e46..fa3578e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,1617 @@
+2022-07-09 Aldy Hernandez <aldyh@redhat.com>
+
+ * value-range.cc (irange::irange_single_pair_union): Set
+ VR_VARYING when appropriate.
+
+2022-07-09 Vit Kabele <vit.kabele@sysgo.com>
+
+ * stor-layout.cc (finalize_record_size): Extend warning message.
+
+2022-07-09 Sam Feifer <sfeifer@redhat.com>
+
+ PR tree-optimization/98304
+ * match.pd (n - (((n > C1) ? n : C1) & -C2)): New simplification.
+
+2022-07-09 Jeff Law <jeffreyalaw@gmail.com>
+
+ * expr.cc (store_expr): Identify trailing NULs in a STRING_CST
+ initializer and use clear_storage rather than copying the
+ NULs to the destination array.
+
+2022-07-09 Roger Sayle <roger@nextmovesoftware.com>
+
+ * config/i386/i386.md (define_peephole2): Use match_operand of
+ flags_reg_operand to capture and preserve the mode of FLAGS_REG.
+ (define_peephole2): Likewise.
+ (define_peephole2): Likewise...
+
+2022-07-09 Roger Sayle <roger@nextmovesoftware.com>
+
+ * config/i386/i386-features.cc (convert_compare): Add support
+ for *testdi_not_doubleword pattern, "(compare (and (not ...)))"
+ by generating a pandn followed by ptest.
+ (convertible_comparison_p): Recognize both *cmpdi_doubleword and
+ recent *testdi_not_doubleword comparison patterns.
+
+2022-07-09 Tamar Christina <tamar.christina@arm.com>
+
+ * config/s390/s390.cc (s390_expand_atomic): Pass false to store_bit_field to
+ indicate that the value is not undefined.
+
+2022-07-09 Andrew Pinski <apinski@marvell.com>
+
+ PR tree-optimization/106087
+ * tree-ssa-dce.cc (simple_dce_from_worklist): Check
+ to make sure the statement is only defining one operand.
+
+2022-07-08 Lewis Hyatt <lhyatt@gmail.com>
+
+ PR preprocessor/91733
+ * input.cc (find_end_of_line): New helper function.
+ (file_cache_slot::get_next_line): Recognize \r as a line ending.
+ * diagnostic-show-locus.cc (test_escaping_bytes_1): Adapt selftest
+ since \r will now be interpreted as a line-ending.
+
+2022-07-08 Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/106132
+ * opts.cc (finish_options): Use 2 calls to
+ report_conflicting_sanitizer_options.
+
+2022-07-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106226
+ * tree-vect-loop-manip.cc (vect_do_peeling): Assert that
+ no SSA update is needed. Move virtual SSA update ...
+ * tree-vectorizer.cc (pass_vectorize::execute): ... here,
+ via forced virtual renaming when TODO_update_ssa_only_virtuals
+ is queued.
+ (vect_transform_loops): Return TODO_update_ssa_only_virtuals
+ when virtual SSA update is required.
+ (try_vectorize_loop_1): Adjust.
+ * tree-vect-stmts.cc (vectorizable_simd_clone_call): Allow
+ virtual renaming if the ABI forces an aggregate return
+ but the original call did not have a virtual definition.
+
+2022-07-08 Martin Liska <mliska@suse.cz>
+
+ * toplev.cc (init_asm_output): Do not init asm_out_file.
+
+2022-07-08 Tamar Christina <tamar.christina@arm.com>
+
+ PR tree-optimization/106063
+ * match.pd: Do not apply pattern after veclower is not supported.
+
+2022-07-08 Thomas Schwinge <thomas@codesourcery.com>
+
+ * lto-cgraph.cc (input_offload_tables) <LTO_symtab_edge>: Correct
+ 'fn2' computation.
+
+2022-07-08 Tamar Christina <tamar.christina@arm.com>
+
+ * expmed.cc (store_bit_field_1): Add parameter that indicates if value is
+ still undefined and if so emit a subreg move instead.
+ (store_integral_bit_field): Likewise.
+ (store_bit_field): Likewise.
+ * expr.h (write_complex_part): Likewise.
+ * expmed.h (store_bit_field): Add new parameter.
+ * builtins.cc (expand_ifn_atomic_compare_exchange_into_call): Use new
+ parameter.
+ (expand_ifn_atomic_compare_exchange): Likewise.
+ * calls.cc (store_unaligned_arguments_into_pseudos): Likewise.
+ * emit-rtl.cc (validate_subreg): Likewise.
+ * expr.cc (emit_group_store): Likewise.
+ (copy_blkmode_from_reg): Likewise.
+ (copy_blkmode_to_reg): Likewise.
+ (clear_storage_hints): Likewise.
+ (write_complex_part): Likewise.
+ (emit_move_complex_parts): Likewise.
+ (expand_assignment): Likewise.
+ (store_expr): Likewise.
+ (store_field): Likewise.
+ (expand_expr_real_2): Likewise.
+ * ifcvt.cc (noce_emit_move_insn): Likewise.
+ * internal-fn.cc (expand_arith_set_overflow): Likewise.
+ (expand_arith_overflow_result_store): Likewise.
+ (expand_addsub_overflow): Likewise.
+ (expand_neg_overflow): Likewise.
+ (expand_mul_overflow): Likewise.
+ (expand_arith_overflow): Likewise.
+
+2022-07-08 Haochen Jiang <haochen.jiang@intel.com>
+
+ PR target/106180
+ * config/i386/sse.md (sse2_cvtps2pd<mask_name>_1):
+ Rename from *sse2_cvtps2pd<mask_name>_1.
+ (vec_unpacks_lo_v4sf): Add handler for memory operand.
+
+2022-07-08 Lulu Cheng <chenglulu@loongson.cn>
+
+ * config/loongarch/loongarch.cc (loongarch_compute_frame_info):
+ Modify fp_sp_offset and gp_sp_offset's calculation method,
+ when frame->mask or frame->fmask is zero, don't minus UNITS_PER_WORD
+ or UNITS_PER_FP_REG.
+
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ * diagnostic-format-json.cc (json_from_location_range): Update for
+ removal of label_text::maybe_free in favor of automatic memory
+ management.
+ * diagnostic-format-sarif.cc
+ (sarif_builder::make_location_object): Likewise.
+ * diagnostic-show-locus.cc (struct pod_label_text): New.
+ (class line_label): Convert m_text from label_text to pod_label_text.
+ (layout::print_any_labels): Move "text" to the line_label.
+ * tree-diagnostic-path.cc (path_label::get_text): Update for
+ removal of label_text::maybe_free in favor of automatic memory
+ management.
+ (event_range::print): Likewise.
+ (default_tree_diagnostic_path_printer): Likewise.
+ (default_tree_make_json_for_path): Likewise.
+
+2022-07-07 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ * statistics.cc (get_function_name): Add check to see if fn is not NULL.
+
+2022-07-07 Richard Biener <rguenther@suse.de>
+
+ * tree-into-ssa.cc (iterating_old_ssa_names): New.
+ (add_new_name_mapping): Grow {new,old}_ssa_names separately
+ and only when actually needed. Assert we are not growing
+ the old_ssa_names set when iterating over it.
+ (update_ssa): Remove old_ssa_names copying and empty_p
+ query, note we are iterating over it and expect no set changes.
+
+2022-07-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * config/i386/intelmic-mkoffload.cc (generate_host_descr_file)
+ (prepare_target_image, main): Handle OpenMP 'requires'.
+ (generate_host_descr_file): Switch to 'GOMP_offload_register_ver',
+ 'GOMP_offload_unregister_ver'.
+
+2022-07-07 Richard Biener <rguenther@suse.de>
+
+ PR target/106219
+ * config/i386/i386-builtins.cc (ix86_add_new_builtins): Properly
+ set DECL_PURE_P.
+
+2022-07-07 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-loop-manip.cc (add_exit_phis_var): Return the
+ number of LC PHIs inserted.
+ (add_exit_phis): Return whether any variable required
+ multiple LC PHI nodes.
+ (rewrite_into_loop_closed_ssa_1): Use TODO_update_ssa_no_phi
+ when possible.
+
+2022-07-07 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-loop-manip.cc (compute_live_loop_exits): Take
+ the def loop exit block bitmap as argument instead of
+ re-computing it here.
+ (add_exit_phis_var): Adjust.
+ (loop_name_cmp): New function.
+ (add_exit_phis): Sort variables to insert LC PHI nodes
+ after definition loop, for each definition loop compute
+ the exit block bitmap once.
+ (get_loops_exit): Remove.
+ (rewrite_into_loop_closed_ssa_1): Do not pre-record
+ all loop exit blocks into bitmaps. Record loop exits
+ if required.
+
+2022-07-07 Dimitrije Milosevic <Dimitrije.Milosevic@Syrmia.com>
+
+ * config/mips/mips.cc (mips_asan_shadow_offset): Reformat
+ to handle the N32 ABI.
+ * config/mips/mips.h (SUBTARGET_SHADOW_OFFSET): Remove
+ the macro, as it is not needed anymore.
+
+2022-07-06 Thomas Schwinge <thomas@codesourcery.com>
+
+ * config/gcn/mkoffload.cc (process_obj): Clarify 'target_data' ->
+ '[...]_data'.
+ * config/nvptx/mkoffload.cc (process): Likewise.
+
+2022-07-06 Thomas Schwinge <thomas@codesourcery.com>
+
+ * omp-general.h (enum omp_requires): Use 'GOMP_REQUIRES_[...]'.
+
+2022-07-05 Andrew MacLeod <amacleod@redhat.com>
+
+ * value-relation.cc (relation_to_code): New vector.
+ (relation_oracle::validate_relation): New.
+ (set_relation): Allow ssa1 == ssa2 to be registered.
+ * value-relation.h (validate_relation): New prototype.
+ (query_relation): Make internal variant protected.
+
+2022-07-05 Roger Sayle <roger@nextmovesoftware.com>
+
+ * config/i386/i386.cc (ix86_rtx_costs) <COMPARE>: Provide costs
+ for double word comparisons and tests (comparisons against zero).
+ * config/i386/i386.md (*test<mode>_not_doubleword): Split DWI
+ and;cmp into andn;cmp $0 as a pre-reload splitter.
+ (*andn<dwi>3_doubleword_bmi): Use <dwi> instead of <mode> in name.
+ (*<any_or><dwi>3_doubleword): Likewise.
+
+2022-07-05 Roger Sayle <roger@nextmovesoftware.com>
+ Hongtao Liu <hongtao.liu@intel.com>
+
+ * config/i386/i386-builtin.def (__builtin_ia32_palignr128): Change
+ CODE_FOR_ssse3_palignrti to CODE_FOR_ssse3_palignrv1ti.
+ * config/i386/i386-expand.cc (expand_vec_perm_palignr): Use V1TImode
+ and gen_ssse3_palignv1ti instead of TImode.
+ * config/i386/sse.md (SSESCALARMODE): Delete.
+ (define_mode_attr ssse3_avx2): Handle V1TImode instead of TImode.
+ (<ssse3_avx2>_palignr<mode>): Use VIMAX_AVX2_AVX512BW as a mode
+ iterator instead of SSESCALARMODE.
+ (ssse3_palignrdi): Optimize cases where operands[3] is 0 or 64,
+ using a single move instruction (if required).
+
+2022-07-05 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ PR rtl-optimization/96692
+ * config/i386/i386.md (define_split): Split ((A | B) ^ C) ^ D
+ as (X & ~Y) ^ Z on target BMI when either C or D is A or B.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106198
+ * tree-cfgcleanup.cc (repair_loop_structures): Always do a
+ full LC SSA rewrite but only if any blocks changed loop
+ depth.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-loop-manip.cc (find_uses_to_rename_def): Remove.
+ (find_uses_to_rename_in_loop): Likewise.
+ (rewrite_into_loop_closed_ssa_1): Remove loop parameter and
+ uses.
+ (rewrite_into_loop_closed_ssa): Adjust.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106186
+ * tree-ssa-propagate.cc (clean_up_loop_closed_phi):
+ Properly handle virtual PHI nodes.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106196
+ * tree-vect-stmts.cc (vect_finish_stmt_generation): Properly
+ handle aggregate returns of calls for VDEF updates.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ * tree-vect-loop-manip.cc (vect_set_loop_condition_normal):
+ Maintain LC SSA.
+
+2022-07-05 Richard Sandiford <richard.sandiford@arm.com>
+
+ * tree-vect-patterns.cc (vect_convert_input): Expect the input
+ type to be signed for optab_vector_mixed_sign. Update the vectype
+ at the same time as type.
+ (vect_recog_dot_prod_pattern): Update accordingly. If usdot isn't
+ available, try sdot instead.
+ * tree-vect-loop.cc (vect_is_emulated_mixed_dot_prod): New function.
+ (vect_model_reduction_cost): Model the cost of implementing usdot
+ using sdot.
+ (vectorizable_reduction): Likewise. Skip target support test
+ for lane reductions.
+ (vect_emulate_mixed_dot_prod): New function.
+ (vect_transform_reduction): Use it to emulate usdot via sdot.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106182
+ * loop-init.cc (fix_loop_structure): Return the number
+ of newly discovered plus the number of deleted loops.
+ * tree-cfgcleanup.cc (repair_loop_structures): Adjust
+ variable name.
+
+2022-07-04 Aldy Hernandez <aldyh@redhat.com>
+
+ * gimple-range-fold.cc
+ (fold_using_range::range_of_ssa_name_with_loop_info): Restrict the
+ call to SCEV for irange supported types.
+ (fold_using_range::range_of_builtin_int_call): Convert to vrange.
+ * gimple-range.cc (gimple_ranger::prefill_stmt_dependencies): Same.
+ * tree-ssa-dom.cc (cprop_operand): Same.
+
+2022-07-04 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR target/104489
+ * calls.cc (precompute_register_parameters): Allow promotion
+ of floating point values to be passed in wider integer modes
+ by calling new convert_float_to_wider_int.
+ (expand_call): Allow floating point results to be returned in
+ wider integer modes by calling new convert wider_int_to_float.
+ * cfgexpand.cc (expand_value_return): Allow backends to promote
+ a scalar floating point return value to a wider integer mode
+ by calling new convert_float_to_wider_int.
+ * expr.cc (convert_float_to_wider_int): New function.
+ (convert_wider_int_to_float): Likewise.
+ (expand_expr_real_1) <expand_decl_rtl>: Allow backends to promote
+ scalar FP PARM_DECLs to wider integer modes, by calling new
+ convert_wider_int_to_float.
+ * expr.h (convert_modes): Name arguments for improved documentation.
+ (convert_float_to_wider_int): Prototype new function here.
+ (convert_wider_int_to_float): Likewise.
+ * function.cc (assign_parm_setup_stack): Allow floating point
+ values to be passed on the stack as wider integer modes by
+ calling new convert_wider_int_to_float.
+
+2022-07-04 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/105860
+ * tree-sra.cc (build_reconstructed_reference): Start expr
+ traversal only just below the outermost union.
+
+2022-07-04 Richard Biener <rguenther@suse.de>
+
+ * tree-vect-loop-manip.cc (vect_do_peeling): Revert assert
+ and update virtual SSA form again. Assert we do so for
+ a known set of transforms only.
+ * tree-vectorizer.h (vec_info::any_known_not_updated_vssa): New.
+ * tree-vect-stmts.cc (vectorizable_load): When vectorizing
+ using load-lanes allow virtual SSA update.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * config/gcn/mkoffload.cc (process_asm): Write '#include <stdint.h>'.
+ (process_obj): Pass omp_requires_mask to GOMP_offload_register_ver.
+ (main): Ask lto1 to obtain omp_requires_mask and pass it on.
+ * config/nvptx/mkoffload.cc (process, main): Likewise.
+ * lto-cgraph.cc (omp_requires_to_name): New.
+ (input_offload_tables): Save omp_requires_mask.
+ (output_offload_tables): Read it, check for consistency,
+ save value for mkoffload.
+ * omp-low.cc (lower_omp_target): Force output_offloadtables
+ call for OMP_REQUIRES_TARGET_USED.
+
+2022-07-04 Richard Biener <rguenther@suse.de>
+
+ * tree-vect-loop-manip.cc (vect_do_peeling): Assert that
+ no SSA update is needed instead of updating virtual SSA
+ form.
+ * tree-vect-stmts.cc (vectorizable_load): For hoisted
+ invariant load use the loop entry virtual use.
+ For emulated gather loads use the virtual use of the
+ original stmt like vect_finish_stmt_generation would do.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree-pretty-print.cc (dump_generic_node) <ARRAY_TYPE>: Add guard
+ for direct circularity.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * dwarf2out.cc (gen_array_type_die): Use the default lower bound of
+ the language for vector types.
+
+2022-07-04 Aldy Hernandez <aldyh@redhat.com>
+
+ * value-range-storage.cc (irange_storage_slot::set_irange): Set
+ nonzero bits in irange.
+ (irange_storage_slot::get_irange): Get nonzero bits from irange.
+ * value-range.cc (irange::operator=): Set nonzero bits.
+ (irange::irange_set): Same.
+ (irange::irange_set_anti_range): Same.
+ (irange::set): Same.
+ (irange::verify_range): Same.
+ (irange::legacy_equal_p): Check nonzero bits.
+ (irange::equal_p): Same.
+ (irange::contains_p): Handle nonzero bits.
+ (irange::irange_union): Same.
+ (irange::irange_intersect): Same.
+ (irange::dump): Same.
+ (irange::set_nonzero_bits): New.
+ (irange::get_nonzero_bits): New.
+ (irange::intersect_nonzero_bits): New.
+ (irange::union_nonzero_bits): New.
+ (irange::dump_bitmasks): New.
+ * value-range.h (class irange): Add m_nonzero_mask.
+ (gt_ggc_mx): Handle nonzero bits.
+ (gt_pch_nx): Same.
+ (irange::set_undefined): Set nonzero bits.
+ (irange::set_varying): Same.
+ (irange::normalize_kind): Call set_undefined.
+
+2022-07-04 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-loop-manip.h
+ (rewrite_virtuals_into_loop_closed_ssa): Remove.
+ (rewrite_into_loop_closed_ssa_1): Likewise.
+ * tree-ssa-loop-manip.cc (rewrite_into_loop_closed_ssa_1):
+ Make static.
+ (rewrite_into_loop_closed_ssa): Remove loop overload,
+ always rewrite virtuals into LC SSA.
+ (check_loop_closed_ssa_bb): Also check virtuals.
+ * tree-ssa-dce.cc (remove_dead_phis): Preserve virtual
+ LC PHIs when in LC SSA.
+ * gimple-loop-jam.cc (fuse_loops): Do not rewrite into
+ loop-closed SSA here, but ...
+ (tree_loop_unroll_and_jam): ... here once.
+ * tree-if-conv.cc (version_loop_for_if_conversion): Use
+ the cheaper TODO_update_ssa_no_phi.
+ * tree-loop-distribution.cc (version_loop_by_alias_check):
+ Likewise.
+ * tree-ssa-loop-unswitch.cc (tree_unswitch_single_loop):
+ Likewise.
+ * tree-vect-loop-manip.cc (vect_loop_versioning): Likewise.
+ (tree_unswitch_outer_loop): Do not rewrite virtuals into
+ LC ssa.
+ * tree-parloops.cc (transform_to_exit_first_loop_alt):
+ Likewise.
+ (pass_parallelize_loops::execute): After finishing rewrite
+ into LC SSA again because we do not maintain it properly.
+
+2022-07-04 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106055
+ * graphite.cc (canonicalize_loop_closed_ssa): Check whether
+ we can propagate.
+
+2022-07-04 Haochen Jiang <haochen.jiang@intel.com>
+
+ PR target/43618
+ * config/i386/sse.md (extendv2sfv2df2): New define_expand.
+ (sse2_cvtps2pd_<mask_name>): Change constraint of operands[1].
+ (*sse2_cvtps2pd_<mask_name>_1): Rename from extendvsdfv2df2.
+
+2022-07-04 Aldy Hernandez <aldyh@redhat.com>
+
+ * ipa-cp.cc (ipcp_vr_lattice::meet_with_1): Use operator!=.
+ * ipa-prop.cc (struct ipa_vr_ggc_hash_traits): Same.
+ * tree-ssa-loop-unswitch.cc (struct unswitch_predicate): Use set
+ with two arguments.
+ (find_unswitching_predicates_for_bb): Same.
+ * tree-vrp.cc (range_fold_unary_symbolics_p): Same.
+ * value-range-equiv.cc (value_range_equiv::equal_p): Use operator==.
+ * value-range.cc (irange::equal_p): Rename to...
+ (irange::operator==): ...this.
+ * value-range.h (irange::set): Remove.
+ (irange::operator==): Remove.
+ (irange::set_zero): Use set with two arguments.
+ * vr-values.cc (vr_values::extract_range_from_binary_expr): Same.
+ (vr_values::extract_range_from_unary_expr): Same.
+ (check_for_binary_op_overflow): Same.
+ (bounds_of_var_in_loop): Same.
+
+2022-07-03 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/106022
+ * config/i386/i386-protos.h (ix86_convert_const_vector_to_integer):
+ New.
+ * config/i386/i386.cc (ix86_convert_const_vector_to_integer):
+ New.
+ * config/i386/mmx.md (V_16_32_64): New.
+ (*mov<mode>_imm): New patterns for stores with 16-bit, 32-bit
+ and 64-bit constant vector.
+ * config/i386/predicates.md (x86_64_const_vector_operand): New.
+
+2022-07-03 Aldy Hernandez <aldyh@redhat.com>
+
+ * gimple-range-cache.cc: Include value-range-storage.h.
+ * gimple-range-cache.h (class block_range_cache): Add "class" to
+ m_range_allocator.
+ * gimple-range-edge.cc
+ (gimple_outgoing_range::gimple_outgoing_range): Allocate allocator.
+ (gimple_outgoing_range::~gimple_outgoing_range): Free allocator.
+ (gimple_outgoing_range::calc_switch_ranges): Dereference allocator.
+ * gimple-range-edge.h: Add "class" to m_range_allocator.
+ * gimple-range-infer.cc
+ (infer_range_manager::infer_range_manager): Allocate allocator.
+ (infer_range_manager::~infer_range_manager): Free allocator.
+ (infer_range_manager::get_nonzero): Dereference allocator.
+ (infer_range_manager::add_range): Same.
+ * gimple-range-infer.h (class vrange_allocator): Add "class" to
+ m_range_allocator.
+ * value-range-storage.h (class vrange_allocator): Move from
+ value-range.h.
+ (class obstack_vrange_allocator): Same.
+ (class ggc_vrange_allocator): Same.
+ (vrange_allocator::alloc_vrange): Same.
+ (vrange_allocator::alloc_irange): Same.
+ * value-range.h (class vrange_allocator): Move to value-range-storage.h.
+ (class obstack_vrange_allocator): Same.
+ (class ggc_vrange_allocator): Same.
+
+2022-07-03 Aldy Hernandez <aldyh@redhat.com>
+
+ * Makefile.in (OBJS): Add value-range-storage.o.
+ (GTFILES): Add value-range-storage.h.
+ * gengtype.cc (open_base_files): Add value-range-storage.h.
+ * value-range-storage.cc: New file.
+ * value-range-storage.h: New file.
+
+2022-07-03 Xi Ruoyao <xry111@xry111.site>
+ Lulu Cheng <chenglulu@loongson.cn>
+
+ * config/loongarch/loongarch.cc (loongarch_check_zero_div_p):
+ New static function.
+ (loongarch_idiv_insns): Use loongarch_check_zero_div_p instead
+ of TARGET_CHECK_ZERO_DIV.
+ (loongarch_output_division): Likewise.
+ * common/config/loongarch/loongarch-common.cc
+ (TARGET_DEFAULT_TARGET_FLAGS): Remove unneeded hook.
+ * doc/invoke.texi: Update to match the new behavior.
+
+2022-07-03 Ian Lance Taylor <iant@golang.org>
+
+ * tree-ssa-dse.cc (dse_optimize_stmt): Only delete a trapping
+ statement if -fdelete-dead-exceptions.
+
+2022-07-02 Tim Lange <mail@tim-lange.me>
+
+ PR analyzer/105900
+ * doc/invoke.texi: Added Wanalyzer-allocation-size.
+
+2022-07-02 Immad Mir <mirimmad17@gmail.com>
+
+ PR analyzer/106003
+ * Makefile.in (ANALYZER_OBJS): Add sm-fd.o.
+ * doc/invoke.texi: Add -Wanalyzer-fd-double-close, -Wanalyzer-fd-leak,
+ -Wanalyzer-fd-access-mode-mismatch, -Wanalyzer-fd-use-without-check,
+ -Wanalyzer-fd-use-after-close.
+
+2022-07-01 Aldy Hernandez <aldyh@redhat.com>
+
+ * wide-int.h (struct trailing_wide_ints): Add m_num_elements.
+ (trailing_wide_ints::set_precision): Add num_elements argument.
+ (trailing_wide_ints::extra_size): Same.
+
+2022-07-01 Uroš Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (*andn<mode>3_doubleword_bmi):
+ Use "r" constraint for operand 1.
+
+2022-07-01 Richard Biener <rguenther@suse.de>
+
+ * tree-into-ssa.cc (rewrite_update_dom_walker::before_dom_children):
+ Do not look at interesting_blocks which is a copy of
+ blocks_to_update.
+ (update_ssa): Do not initialize it.
+ (pass_build_ssa::execute): Set interesting_blocks to NULL
+ after releasing it.
+
+2022-07-01 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-sccvn.cc (vn_reference_lookup_3): Revert
+ back to using maybe_ne (off, -1).
+
+2022-07-01 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-sccvn.cc (vn_nary_op_insert_into): Make
+ checking dominance check conditional on flag_checking.
+
+2022-07-01 Tobias Burnus <tobias@codesourcery.com>
+
+ * config/gcn/gcn-protos.h (print_operand_address): Remove register
+ keyword on 'rtx addr' argument.
+
+2022-07-01 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (*andn<mode>3_doubleword_bmi): Add constraints
+ to post-reload define_insn_and_split.
+
+2022-07-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/106144
+ * wide-int.cc (wi::shifted_mask): If end >= prec, return right after
+ emitting element for shift or if shift is 0 first element after start.
+ (wide_int_cc_tests): Add tests for equivalency of wi::mask and
+ wi::shifted_mask with 0 start.
+
+2022-07-01 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR target/106122
+ * config/i386/i386.md (peephole2): Avoid generating pop %esp
+ when optimizing for size.
+
+2022-07-01 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (general_szext_operand): Add TImode
+ support using x86_64_hilo_general_operand predicate.
+ (*cmp<dwi>_doubleword): Use x86_64_hilo_general_operand predicate.
+ (*add<dwi>3_doubleword): Improved optimization of zero addition.
+ (and<mode>3): Use SDWIM mode iterator to add support for double
+ word bit-wise AND in TImode. Use force_reg when double word
+ immediate operand isn't x86_64_hilo_general_operand.
+ (and<dwi>3_doubleword): Generalized from anddi3_doubleword and
+ converted into a post-reload splitter.
+ (*andndi3_doubleword): Previous define_insn deleted.
+ (*andn<mode>3_doubleword_bmi): New define_insn_and_split for
+ TARGET_BMI that splits post-reload.
+ (*andn<mode>3_doubleword): New define_insn_and_split for
+ !TARGET_BMI, that lowers/splits before reload.
+ (<any_or><mode>3): Use SDWIM mode iterator to add suppport for
+ double word bit-wise XOR and bit-wise IOR in TImode. Use
+ force_reg when double word immediate operand isn't
+ x86_64_hilo_general_operand.
+ (*<any_or>di3_doubleword): Generalized from <any_or>di3_doubleword.
+ (one_cmpl<mode>2): Use SDWIM mode iterator to add support for
+ double word bit-wise NOT in TImode.
+ (one_cmpl<dwi>2_doubleword): Generalize from one_cmpldi2_doubleword
+ and converted into a post-reload splitter.
+
+2022-07-01 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR middle-end/105874
+ * expr.cc (expand_expr_real_1) <normal_inner_ref>: Force
+ EXPAND_MEMORY for the expansion of the inner reference only
+ in the usual cases where a memory reference is required.
+
+2022-07-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106131
+ * tree-ssa-sccvn.cc (vn_reference_lookup_3): Force alias-set
+ zero when offsetting the read looking through an aggregate
+ copy.
+
+2022-07-01 Martin Liska <mliska@suse.cz>
+
+ PR tree-optimization/106126
+ * gimple-if-to-switch.cc (struct condition_info): Save
+ has_side_effect.
+ (find_conditions): Parse all BBs.
+ (pass_if_to_switch::execute): Allow only side effects for first
+ BB.
+
+2022-07-01 Haochen Jiang <haochen.jiang@intel.com>
+
+ * common/config/i386/i386-common.cc (OPTION_MASK_ISA2_AVX512F_UNSET):
+ Add OPTION_MASK_ISA2_AVX512BW_UNSET, remove
+ OPTION_MASK_ISA2_AVX512BF16_UNSET and
+ OPTION_MASK_ISA2_AVX512FP16_UNSET.
+
+2022-06-30 Joseph Myers <joseph@codesourcery.com>
+
+ PR lto/106129
+ * lto-wrapper.cc (find_option): Add argument start.
+ (merge_and_complain): Loop over existing_opt_index and
+ existing_opt2_index for Xassembler check. Update calls to
+ find_option.
+ (find_and_merge_options): Add argument first to determine whether
+ to merge options with those passed in *opts.
+ (run_gcc): Update calls to find_and_merge_options.
+
+2022-06-30 Aldy Hernandez <aldyh@redhat.com>
+
+ * gimple-range-cache.cc (block_range_cache::block_range_cache):
+ Rename vrange_allocator to obstack_vrange_allocator.
+ (ssa_global_cache::ssa_global_cache): Same.
+ * gimple-range-edge.h (class gimple_outgoing_range): Same.
+ * gimple-range-infer.h (class infer_range_manager): Same.
+ * value-range.h (class vrange_allocator): Make abstract.
+ (class obstack_vrange_allocator): Inherit from vrange_allocator.
+ (class ggc_vrange_allocator): New.
+
+2022-06-30 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.md (swap_mode): Rename from *swap<mode> to
+ provide gen_swapsi.
+ (<any_rotate>di3): Handle !TARGET_64BIT rotations by 32 bits
+ via new gen_<insn>32di2_doubleword below.
+ (<anyrotate>32di2_doubleword): New define_insn_and_split
+ that splits after reload as either a pair of move instructions
+ or an xchgl (using gen_swapsi).
+
+2022-06-30 Richard Biener <rguenther@suse.de>
+
+ * domwalk.h (dom_walker::dom_walker): Update comment to
+ reflect reality and new special argument value for
+ bb_index_to_rpo.
+ * domwalk.cc (dom_walker::dom_walker): Recognize -1
+ bb_index_to_rpo.
+ * tree-into-ssa.cc
+ (rewrite_update_dom_walker::rewrite_update_dom_walker): Tell
+ dom_walker to not use RPO.
+
+2022-06-30 Martin Liska <mliska@suse.cz>
+
+ * tree-ssa-dom.cc (pass_dominator::execute): Remove m_ranger as
+ it is unused.
+
+2022-06-30 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/106114
+ * gimple-range-fold.cc (fold_using_range::relation_fold_and_or): Check
+ statement operands instead of GORI cache.
+
+2022-06-30 Antoni Boucher <bouanto@zoho.com>
+
+ PR target/106095
+ * config/i386/sse.md: Fix asm generation.
+
+2022-06-29 Sergei Trofimovich <siarheit@google.com>
+
+ PR c++/106102
+ * system.h: Introduce INCLUDE_PTHREAD_H macros to include <pthread.h>.
+
+2022-06-29 Joseph Myers <joseph@codesourcery.com>
+
+ * config/nios2/nios2.cc (nios2_load_pic_address): Use gen_rtx_MEM
+ not gen_const_mem for UNSPEC_PIC_CALL_SYM.
+
+2022-06-29 Richard Biener <rguenther@suse.de>
+
+ PR rtl-optimization/106082
+ * combine.cc (distribute_notes): Preserve notes when
+ they indicate a call doesn't perform a non-local goto.
+
+2022-06-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106112
+ * tree-ssa-sccvn.cc (valueized_wider_op): Properly extend
+ a constant operand according to its type.
+
+2022-06-29 Martin Liska <mliska@suse.cz>
+
+ * doc/invoke.texi: Remove removed evrp-mode.
+
+2022-06-29 Lulu Cheng <chenglulu@loongson.cn>
+
+ PR target/106097
+ * config/loongarch/loongarch.cc (loongarch_build_integer):
+ Remove undefined behavior from code.
+
+2022-06-28 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * doc/sourcebuild.texi: Document new no_alignment_constraints
+ effective target check.
+
+2022-06-28 Aldy Hernandez <aldyh@redhat.com>
+
+ * Makefile.in: Remove gimple-ssa-evrp.o and gimple-ssa-evrp-analyze.o.
+ * flag-types.h (enum evrp_mode): Remove.
+ * params.opt: Remove --param=evrp-mode.
+ * tree-vrp.cc (make_pass_early_vrp): New.
+ (pass_vrp::execute): Call early VRP instance.
+ * gimple-ssa-evrp-analyze.cc: Removed.
+ * gimple-ssa-evrp-analyze.h: Removed.
+ * gimple-ssa-evrp.cc: Removed.
+
+2022-06-28 Alexandre Oliva <oliva@adacore.com>
+
+ * Makefile.in (TFLAGS): New.
+ (GCC_FOR_TARGET): Add TFLAGS.
+ (FLAGS_TO_PASS): Pass TFLAGS down.
+
+2022-06-28 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-loop-split.cc (fix_loop_bb_probability): Do not
+ call update_ssa.
+
+2022-06-28 Richard Biener <rguenther@suse.de>
+
+ * tree-into-ssa.cc (insert_updated_phi_nodes_for): Use
+ mark_block_for_update.
+ (update_ssa): Adjust.
+
+2022-06-28 Xi Ruoyao <xry111@xry111.site>
+
+ PR target/106096
+ * config/loongarch/loongarch.h (REG_CLASS_CONTENTS): Exclude
+ $r13 from SIBCALL_REGS.
+ * config/loongarch/loongarch.cc (loongarch_regno_to_class):
+ Change $r13 to JIRL_REGS.
+
+2022-06-28 Aldy Hernandez <aldyh@redhat.com>
+
+ * tree-ssa-loop-ch.cc (entry_loop_condition_is_static): Remove
+ irange::supports_p.
+
+2022-06-28 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/106053
+ * match.pd ((T)a == (T)b): Avoid folding away sign
+ changes in a comparison if we'd truncate to a boolean.
+
+2022-06-28 Kewen Lin <linkw@linux.ibm.com>
+
+ * config/rs6000/rs6000.md (*rotl<mode>3_insert_4): Replace mode
+ iterator GPR with SImode, adjust the condition and output template,
+ rename to ...
+ (*rotlsi3_insert_4): ... this.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * genmatch.cc: Add "final" and "override" to various vfunc
+ implementations, removing redundant "virtual" as appropriate.
+ * gensupport.cc: Likewise.
+ * gimple-range-cache.h: Likewise.
+ * ipa-icf-gimple.h: Likewise.
+ * ipa-icf.h: Likewise.
+ * read-md.h: Likewise.
+ * read-rtl-function.cc: Likewise.
+ * tree-ssa-loop-ch.cc: Likewise.
+ * tree-ssa-sccvn.cc: Likewise.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * config/i386/i386-features.h: Add "final" and "override" to
+ scalar_chain vfunc implementations as appropriate.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * tree-switch-conversion.h: Add "final" and "override" to cluster
+ vfunc implementations as appropriate.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * expr.cc: Add "final" and "override" to op_by_pieces_d vfunc
+ implementations as appropriate.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * compare-elim.cc: Add "final" and "override" to dom_walker vfunc
+ implementations, removing redundant "virtual" as appropriate.
+ * gimple-ssa-strength-reduction.cc: Likewise.
+ * ipa-prop.cc: Likewise.
+ * rtl-ssa/blocks.cc: Likewise.
+ * tree-into-ssa.cc: Likewise.
+ * tree-ssa-dom.cc: Likewise.
+ * tree-ssa-math-opts.cc: Likewise.
+ * tree-ssa-phiopt.cc: Likewise.
+ * tree-ssa-propagate.cc: Likewise.
+ * tree-ssa-sccvn.cc: Likewise.
+ * tree-ssa-strlen.cc: Likewise.
+ * tree-ssa-uncprop.cc: Likewise.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * adjust-alignment.cc: Add "final" and "override" to opt_pass
+ vfunc implementations, removing redundant "virtual" as
+ appropriate.
+ * asan.cc: Likewise.
+ * auto-inc-dec.cc: Likewise.
+ * auto-profile.cc: Likewise.
+ * bb-reorder.cc: Likewise.
+ * cfgcleanup.cc: Likewise.
+ * cfgexpand.cc: Likewise.
+ * cfgrtl.cc: Likewise.
+ * cgraphbuild.cc: Likewise.
+ * combine-stack-adj.cc: Likewise.
+ * combine.cc: Likewise.
+ * compare-elim.cc: Likewise.
+ * config/i386/i386-features.cc: Likewise.
+ * coroutine-passes.cc: Likewise.
+ * cprop.cc: Likewise.
+ * cse.cc: Likewise.
+ * dce.cc: Likewise.
+ * df-core.cc: Likewise.
+ * dse.cc: Likewise.
+ * dwarf2cfi.cc: Likewise.
+ * early-remat.cc: Likewise.
+ * except.cc: Likewise.
+ * final.cc: Likewise.
+ * function.cc: Likewise.
+ * fwprop.cc: Likewise.
+ * gcse.cc: Likewise.
+ * gimple-harden-conditionals.cc: Likewise.
+ * gimple-if-to-switch.cc: Likewise.
+ * gimple-isel.cc: Likewise.
+ * gimple-laddress.cc: Likewise.
+ * gimple-loop-interchange.cc: Likewise.
+ * gimple-loop-jam.cc: Likewise.
+ * gimple-loop-versioning.cc: Likewise.
+ * gimple-low.cc: Likewise.
+ * gimple-ssa-backprop.cc: Likewise.
+ * gimple-ssa-evrp.cc: Likewise.
+ * gimple-ssa-isolate-paths.cc: Likewise.
+ * gimple-ssa-nonnull-compare.cc: Likewise.
+ * gimple-ssa-split-paths.cc: Likewise.
+ * gimple-ssa-store-merging.cc: Likewise.
+ * gimple-ssa-strength-reduction.cc: Likewise.
+ * gimple-ssa-warn-access.cc: Likewise.
+ * gimple-ssa-warn-alloca.cc: Likewise.
+ * gimple-ssa-warn-restrict.cc: Likewise.
+ * gimple-warn-recursion.cc: Likewise.
+ * graphite.cc: Likewise.
+ * ifcvt.cc: Likewise.
+ * init-regs.cc: Likewise.
+ * ipa-comdats.cc: Likewise.
+ * ipa-cp.cc: Likewise.
+ * ipa-devirt.cc: Likewise.
+ * ipa-fnsummary.cc: Likewise.
+ * ipa-free-lang-data.cc: Likewise.
+ * ipa-icf.cc: Likewise.
+ * ipa-inline.cc: Likewise.
+ * ipa-modref.cc: Likewise.
+ * ipa-profile.cc: Likewise.
+ * ipa-pure-const.cc: Likewise.
+ * ipa-reference.cc: Likewise.
+ * ipa-split.cc: Likewise.
+ * ipa-sra.cc: Likewise.
+ * ipa-visibility.cc: Likewise.
+ * ipa.cc: Likewise.
+ * ira.cc: Likewise.
+ * jump.cc: Likewise.
+ * loop-init.cc: Likewise.
+ * lower-subreg.cc: Likewise.
+ * mode-switching.cc: Likewise.
+ * modulo-sched.cc: Likewise.
+ * multiple_target.cc: Likewise.
+ * omp-expand.cc: Likewise.
+ * omp-low.cc: Likewise.
+ * omp-oacc-kernels-decompose.cc: Likewise.
+ * omp-oacc-neuter-broadcast.cc: Likewise.
+ * omp-offload.cc: Likewise.
+ * omp-simd-clone.cc: Likewise.
+ * passes.cc: Likewise.
+ * postreload-gcse.cc: Likewise.
+ * postreload.cc: Likewise.
+ * predict.cc: Likewise.
+ * recog.cc: Likewise.
+ * ree.cc: Likewise.
+ * reg-stack.cc: Likewise.
+ * regcprop.cc: Likewise.
+ * reginfo.cc: Likewise.
+ * regrename.cc: Likewise.
+ * reorg.cc: Likewise.
+ * sancov.cc: Likewise.
+ * sanopt.cc: Likewise.
+ * sched-rgn.cc: Likewise.
+ * stack-ptr-mod.cc: Likewise.
+ * store-motion.cc: Likewise.
+ * tracer.cc: Likewise.
+ * trans-mem.cc: Likewise.
+ * tree-call-cdce.cc: Likewise.
+ * tree-cfg.cc: Likewise.
+ * tree-cfgcleanup.cc: Likewise.
+ * tree-complex.cc: Likewise.
+ * tree-eh.cc: Likewise.
+ * tree-emutls.cc: Likewise.
+ * tree-if-conv.cc: Likewise.
+ * tree-into-ssa.cc: Likewise.
+ * tree-loop-distribution.cc: Likewise.
+ * tree-nrv.cc: Likewise.
+ * tree-object-size.cc: Likewise.
+ * tree-parloops.cc: Likewise.
+ * tree-predcom.cc: Likewise.
+ * tree-profile.cc: Likewise.
+ * tree-sra.cc: Likewise.
+ * tree-ssa-ccp.cc: Likewise.
+ * tree-ssa-copy.cc: Likewise.
+ * tree-ssa-dce.cc: Likewise.
+ * tree-ssa-dom.cc: Likewise.
+ * tree-ssa-dse.cc: Likewise.
+ * tree-ssa-forwprop.cc: Likewise.
+ * tree-ssa-ifcombine.cc: Likewise.
+ * tree-ssa-loop-ch.cc: Likewise.
+ * tree-ssa-loop-im.cc: Likewise.
+ * tree-ssa-loop-ivcanon.cc: Likewise.
+ * tree-ssa-loop-prefetch.cc: Likewise.
+ * tree-ssa-loop-split.cc: Likewise.
+ * tree-ssa-loop-unswitch.cc: Likewise.
+ * tree-ssa-loop.cc: Likewise.
+ * tree-ssa-math-opts.cc: Likewise.
+ * tree-ssa-phiopt.cc: Likewise.
+ * tree-ssa-phiprop.cc: Likewise.
+ * tree-ssa-pre.cc: Likewise.
+ * tree-ssa-reassoc.cc: Likewise.
+ * tree-ssa-sccvn.cc: Likewise.
+ * tree-ssa-sink.cc: Likewise.
+ * tree-ssa-strlen.cc: Likewise.
+ * tree-ssa-structalias.cc: Likewise.
+ * tree-ssa-uncprop.cc: Likewise.
+ * tree-ssa-uninit.cc: Likewise.
+ * tree-ssanames.cc: Likewise.
+ * tree-stdarg.cc: Likewise.
+ * tree-switch-conversion.cc: Likewise.
+ * tree-tailcall.cc: Likewise.
+ * tree-vect-generic.cc: Likewise.
+ * tree-vectorizer.cc: Likewise.
+ * tree-vrp.cc: Likewise.
+ * tsan.cc: Likewise.
+ * ubsan.cc: Likewise.
+ * var-tracking.cc: Likewise.
+ * vtable-verify.cc: Likewise.
+ * web.cc: Likewise.
+
+2022-06-27 Andrew Stubbs <ams@codesourcery.com>
+
+ * config/gcn/gcn.md (*movbi): Remove assembler bug workarounds.
+ (jump): Likewise.
+ (movdi_symbol_save_scc): Likewise.
+
+2022-06-27 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR rtl-optimization/7061
+ * config/i386/i386.md (*highpartdisi2): New define_insn_and_split.
+
+2022-06-27 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR tree-optimization/94026
+ * match.pd (((X << C1) & C2) eq/ne C3): New simplification.
+ (((X >> C1) & C2) eq/ne C3): Likewise.
+
+2022-06-27 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ * statistics.cc: Include tree.h.
+ (get_function_name): New function.
+ (statistics_fini_pass_2): Call get_function_name instead of
+ current_function_name.
+ (statistics_counter_event): Call get_function_name instead of
+ function_name.
+ (statistics_histogram_event): Likewise.
+
+2022-06-27 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
+
+ * config/xtensa/xtensa.md:
+ Suppress unnecessary emitting nop insn in the split patterns for
+ integer/FP constant synthesis, and add new peephole2 pattern that
+ folds such synthesized additions.
+
+2022-06-25 Aldy Hernandez <aldyh@redhat.com>
+
+ * tree-ssa-dom.cc (dom_jt_state): Pass ranger to constructor
+ instead of evrp.
+ (dom_jt_state::push): Remove m_evrp.
+ (dom_jt_state::pop): Same.
+ (dom_jt_state::record_ranges_from_stmt): Remove.
+ (dom_jt_state::register_equiv): Remove updating of evrp ranges.
+ (class dom_jt_simplifier): Pass ranger to constructor.
+ Inherit from hybrid_jt_simplifier.
+ (dom_jt_simplifier::simplify): Convert to ranger.
+ (pass_dominator::execute): Same.
+ (all_uses_feed_or_dominated_by_stmt): New.
+ (dom_opt_dom_walker::set_global_ranges_from_unreachable_edges): New.
+ (dom_opt_dom_walker::before_dom_children): Call
+ set_global_ranges_from_unreachable_edges.
+ Do not call record_ranges_from_stmt.
+ (dom_opt_dom_walker::after_dom_children): Remove evrp use.
+ (cprop_operand): Use int_range<> instead of value_range.
+ (dom_opt_dom_walker::fold_cond): New.
+ (dom_opt_dom_walker::optimize_stmt): Pass ranger to
+ cprop_into_stmt.
+ Use fold_cond() instead of vrp_visit_cond_stmt().
+ * tree-ssa-threadedge.cc (jt_state::register_equivs_stmt): Do not
+ pass state to simplifier.
+ * vr-values.h (class vr_values): Make fold_cond public.
+
+2022-06-25 Jeff Law <jeffreyalaw@gmail.com>
+
+ * common/config/tilegx/tilegx-common.cc: Removed.
+ * common/config/tilepro/tilepro-common.cc: Removed.
+ * config.gcc: Remove tilegx and tilepro entries.
+ * config/tilegx/constraints.md: Removed.
+ * config/tilegx/feedback.h: Removed.
+ * config/tilegx/linux.h: Removed.
+ * config/tilegx/mul-tables.cc: Removed.
+ * config/tilegx/predicates.md: Removed.
+ * config/tilegx/sync.md: Removed.
+ * config/tilegx/t-tilegx: Removed.
+ * config/tilegx/tilegx-builtins.h: Removed.
+ * config/tilegx/tilegx-c.cc: Removed.
+ * config/tilegx/tilegx-generic.md: Removed.
+ * config/tilegx/tilegx-modes.def: Removed.
+ * config/tilegx/tilegx-multiply.h: Removed.
+ * config/tilegx/tilegx-opts.h: Removed.
+ * config/tilegx/tilegx-protos.h: Removed.
+ * config/tilegx/tilegx.cc: Removed.
+ * config/tilegx/tilegx.h: Removed.
+ * config/tilegx/tilegx.md: Removed.
+ * config/tilegx/tilegx.opt: Removed.
+ * config/tilepro/constraints.md: Removed.
+ * config/tilepro/feedback.h: Removed.
+ * config/tilepro/gen-mul-tables.cc: Removed.
+ * config/tilepro/linux.h: Removed.
+ * config/tilepro/mul-tables.cc: Removed.
+ * config/tilepro/predicates.md: Removed.
+ * config/tilepro/t-tilepro: Removed.
+ * config/tilepro/tilepro-builtins.h: Removed.
+ * config/tilepro/tilepro-c.cc: Removed.
+ * config/tilepro/tilepro-generic.md: Removed.
+ * config/tilepro/tilepro-modes.def: Removed.
+ * config/tilepro/tilepro-multiply.h: Removed.
+ * config/tilepro/tilepro-protos.h: Removed.
+ * config/tilepro/tilepro.cc: Removed.
+ * config/tilepro/tilepro.h: Removed.
+ * config/tilepro/tilepro.md: Removed.
+ * config/tilepro/tilepro.opt: Removed.
+ * configure.ac: Remove tilegx and tilepro entries.
+ * configure: Rebuilt.
+ * doc/extend.texi: Remove tilegx and tilepro entries.
+ * doc/install.texi: Remove tilegx and tilepro entries.
+ * doc/invoke.texi: Remove tilegx and tilepro entries.
+ * doc/md.texi: Remove tilegx and tilepro entries.
+
+2022-06-25 Roger Sayle <roger@nextmovesoftware.com>
+ Richard Biener <rguenther@suse.de>
+
+ * regcprop.cc (pass_cprop_hardreg::execute): Perform a third
+ iteration over each basic block that was updated by the second
+ iteration.
+
+2022-06-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/87729
+ PR c++/20423
+ * doc/invoke.texi: Document changes.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * config/tilepro/gen-mul-tables.cc (tilegx_emit): Adjust loop
+ condition to avoid overflow.
+
+2022-06-24 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/aix71.h (MASK_PPC_GPOPT, MASK_PPC_GFXOPT): Replace with
+ OPTION_MASK_PPC_GPOPT, OPTION_MASK_PPC_GFXOPT.
+ * config/rs6000/darwin.h (MASK_PPC_GFXOPT): Replace with
+ OPTION_MASK_PPC_GFXOPT.
+ * config/rs6000/darwin64-biarch.h (MASK_PPC_GFXOPT): Same.
+ * config/rs6000/default64.h (MASK_PPC_GPOPT, MASK_PPC_GFXOPT): Replace with
+ OPTION_MASK_PPC_GPOPT, OPTION_MASK_PPC_GFXOPT.
+ * config/rs6000/rs6000-c.cc: Update comment.
+ * config/rs6000/rs6000-cpus.def: Update RS6000_CPU macro calls.
+ * config/rs6000/rs6000.cc (rs6000_darwin_file_start): Replace
+ MASK_PPC_GPOPT with OPTION_MASK_PPC_GPOPT.
+ (rs6000_builtin_mask_names): Replace MASK_PPC_GFXOPT, MASK_POPCNTB
+ with OPTION_MASK_PPC_GFXOPT, OPTION_MASK_POPCNTB.
+ * config/rs6000/rs6000.h: (MASK_P8_VECTOR, MASK_P9_VECTOR,
+ MASK_P9_MISC, MASK_POPCNTB, MASK_POPCNTD, MASK_PPC_GFXOPT,
+ MASK_PPC_GPOPT, MASK_RECIP_PRECISION, MASK_SOFT_FLOAT,
+ MASK_VSX, MASK_POWER10, MASK_P10_FUSION): Delete.
+
+2022-06-24 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/aix71.h (TARGET_DEFAULT): Replace MASK_MFCRF with
+ OPTION_MASK_MFCRF.
+ * config/rs6000/darwin.h (TARGET_DEFAULT): Replace MASK_MULTIPLE with
+ OPTION_MASK_MULTIPLE.
+ * config/rs6000/darwin64-biarch.h (TARGET_DEFAULT): Same.
+ * config/rs6000/default64.h (TARGET_DEFAULT): Replace MASK_MFCRF with
+ OPTION_MASK_MFCRF.
+ * config/rs6000/eabi.h (TARGET_DEFAULT): Replace MASK_EABI with
+ OPTION_MASK_EABI.
+ * config/rs6000/eabialtivec.h (TARGET_DEFAULT): Same.
+ * config/rs6000/linuxaltivec.h (TARGET_DEFAULT): Replace
+ MASK_ALTIVEC with OPTION_MASK_ALTIVEC.
+ * config/rs6000/rs6000-cpus.def (MASK_ALTIVEC, MASK_CMPB,
+ MASK_CRYPTO, MASK_DFP, MASK_DIRECT_MOVE, MASK_DLMZB, MASK_EABI,
+ MASK_FLOAT128_KEYWORD, MASK_FLOAT128_HW, MASK_FPRND,
+ MASK_P8_FUSION, MASK_HARD_FLOAT, MASK_HTM, MASK_ISEL, MASK_MFCRF,
+ MASK_MMA, MASK_MULHW, MASK_MULTIPLE, MASK_NO_UPDATE):
+ Replace with
+ OPTION_MASK_ALTIVEC, OPTION_MASK_CMPB, OPTION_MASK_CRYPTO,
+ OPTION_MASK_DFP, OPTION_MASK_DIRECT_MOVE, OPTION_MASK_DLMZB,
+ OPTION_MASK_EABI, OPTION_MASK_FLOAT128_KEYWORD,
+ OPTION_MASK_FLOAT128_HW, OPTION_MASK_FPRND, OPTION_MASK_P8_FUSION,
+ OPTION_MASK_HARD_FLOAT, OPTION_MASK_HTM, OPTION_MASK_ISEL,
+ OPTION_MASK_MFCRF, OPTION_MASK_MMA, OPTION_MASK_MULHW,
+ OPTION_MASK_MULTIPLE, OPTION_MASK_NO_UPDATE.
+ * config/rs6000/rs6000.cc (rs6000_darwin_file_start): Replace
+ MASK_MFCRF, MASK_ALTIVEC with OPTION_MASK_MFCRF, OPTION_MASK_ALTIVEC.
+ * config/rs6000/rs6000.h (TARGET_DEFAULT): Replace MASK_MULTIPLE
+ with OPTION_MASK_MULTIPLE.
+ (MASK_ALTIVEC, MASK_CMPB, MASK_CRYPTO, MASK_DFP,
+ MASK_DIRECT_MOVE, MASK_DLMZB, MASK_EABI, MASK_FLOAT128_KEYWORD,
+ MASK_FLOAT128_HW, MASK_FPRND, MASK_P8_FUSION, MASK_HARD_FLOAT,
+ MASK_HTM, MASK_ISEL, MASK_MFCRF, MASK_MMA, MASK_MULHW,
+ MASK_MULTIPLE, MASK_NO_UPDATE): Delete.
+ * config/rs6000/vxworks.h (TARGET_DEFAULT): Replace MASK_EABI
+ with OPTION_MASK_EABI.
+
+2022-06-24 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/rs6000.cc (RS6000_BTM_ALTIVEC, RS6000_BTM_CMPB,
+ RS6000_BTM_VSX, RS6000_BTM_FRE, RS6000_BTM_P8_VECTOR,
+ RS6000_BTM_P9_VECTOR, RS6000_BTM_P9_MISC, RS6000_BTM_MODULO,
+ RS6000_BTM_CRYPTO, RS6000_BTM_HTM): Replace with OPTION_MASK_ALTIVEC,
+ OPTION_MASK_CMPB, OPTION_MASK_VSX, OPTION_MASK_POPCNTB,
+ OPTION_MASK_P8_VECTOR, OPTION_MASK_P9_VECTOR, OPTION_MASK_P9_MISC,
+ OPTION_MASK_MODULO, OPTION_MASK_CRYPTO, OPTION_MASK_HTM.
+ * config/rs6000/rs6000.h (RS6000_BTM_MODULO, RS6000_BTM_ALTIVEC,
+ RS6000_BTM_CMPB, RS6000_BTM_VSX, RS6000_BTM_P8_VECTOR,
+ RS6000_BTM_P9_VECTOR, RS6000_BTM_P9_MISC, RS6000_BTM_CRYPTO,
+ RS6000_BTM_HTM, RS6000_BTM_FRE): Remove.
+
+2022-06-24 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/rs6000-c.cc: Update comments.
+ * config/rs6000/rs6000.cc (RS6000_BTM_FRES, RS6000_BTM_FRSQRTE,
+ RS6000_BTM_FRSQRTES, RS6000_BTM_POPCNTD, RS6000_BTM_CELL,
+ RS6000_BTM_64BIT, RS6000_BTM_POWERPC64, RS6000_BTM_DFP,
+ RS6000_BTM_HARD_FLOAT,RS6000_BTM_LDBL128, RS6000_BTM_FLOAT128,
+ RS6000_BTM_FLOAT128_HW, RS6000_BTM_MMA, RS6000_BTM_P10): Replace
+ with OPTION_MASK_PPC_GFXOPT, OPTION_MASK_PPC_GFXOPT,
+ OPTION_MASK_POPCNTB, OPTION_MASK_POPCNTD,
+ OPTION_MASK_FPRND, MASK_64BIT, MASK_POWERPC64,
+ OPTION_MASK_DFP, OPTION_MASK_SOFT_FLOAT, OPTION_MASK_MULTIPLE,
+ OPTION_MASK_FLOAT128_KEYWORD, OPTION_MASK_FLOAT128_HW,
+ OPTION_MASK_MMA, OPTION_MASK_POWER10.
+ * config/rs6000/rs6000.h (RS6000_BTM_FRES, RS6000_BTM_FRSQRTE,
+ RS6000_BTM_FRSQRTES, RS6000_BTM_POPCNTD, RS6000_BTM_CELL,
+ RS6000_BTM_DFP, RS6000_BTM_HARD_FLOAT, RS6000_BTM_LDBL128,
+ RS6000_BTM_64BIT, RS6000_BTM_POWERPC64, RS6000_BTM_FLOAT128,
+ RS6000_BTM_FLOAT128_HW, RS6000_BTM_MMA, RS6000_BTM_P10): Delete.
+
+2022-06-24 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/rs6000.h (RS6000_BTM_COMMON, RS6000_BTM_ALWAYS,
+ MASK_REGNAMES, OPTION_MASK_REGNAMES, MASK_PROTOTYPE,
+ OPTION_MASK_PROTOTYPE, MASK_UPDATE, OPTION_MASK_UPDATE): Remove.
+
+2022-06-24 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/106070
+ * match.pd (a != b ? a : b): Fix translation of
+ operand_equal_for_comparison_p.
+
+2022-06-24 Jan Hubicka <jh@suse.cz>
+
+ PR ipa/106057
+ * tree-ssa-alias.cc (stmt_kills_ref_p): Check for external throw.
+
+2022-06-24 Martin Liska <mliska@suse.cz>
+
+ PR middle-end/106059
+ * profile-count.h: *= and /= operators need to modify this
+ object.
+
+2022-06-24 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105930
+ * config/i386/i386.md (*<any_or>di3_doubleword): Split after
+ reload. Use rtx_equal_p to avoid creating memory-to-memory moves,
+ and emit NOTE_INSN_DELETED if operand[2] is zero (i.e. with -O0).
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * common.opt (nostdlib++): New.
+ * doc/invoke.texi (-nostdlib++): Document it.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * doc/sourcebuild.texi (Environment attributes): Document
+ two_plus_gigs.
+
+2022-06-23 David Malcolm <dmalcolm@redhat.com>
+
+ * common.opt (fdiagnostics-show-rules): New option.
+ * diagnostic-format-json.cc (diagnostic_output_format_init_json):
+ Fix up context->show_rules.
+ * diagnostic-format-sarif.cc
+ (diagnostic_output_format_init_sarif): Likewise.
+ * diagnostic-metadata.h (diagnostic_metadata::rule): New class.
+ (diagnostic_metadata::precanned_rule): New class.
+ (diagnostic_metadata::add_rule): New.
+ (diagnostic_metadata::get_num_rules): New.
+ (diagnostic_metadata::get_rule): New.
+ (diagnostic_metadata::m_rules): New field.
+ * diagnostic.cc (diagnostic_initialize): Initialize show_rules.
+ (print_any_rules): New.
+ (diagnostic_report_diagnostic): Call it.
+ * diagnostic.h (diagnostic_context::show_rules): New field.
+ * doc/invoke.texi (-fno-diagnostics-show-rules): New option.
+ * opts.cc (common_handle_option): Handle
+ OPT_fdiagnostics_show_rules.
+ * toplev.cc (general_init): Set up global_dc->show_rules.
+
+2022-06-23 Martin Liska <mliska@suse.cz>
+
+ PR c++/106062
+ * ubsan.cc (sanitize_unreachable_fn): Change order of calls
+ in order to initialize UBSAN built-ins.
+
+2022-06-23 Martin Liska <mliska@suse.cz>
+
+ PR ipa/105600
+ * ipa-icf.cc (sem_item_optimizer::filter_removed_items):
+ Skip variables with body_removed.
+
+2022-06-23 liuhongt <hongtao.liu@intel.com>
+
+ * config/i386/sse.md:(sse4_2_pcmpestr): Replace REGNO with
+ reg_or_subregno.
+ (sse4_2_pcmpistr): Ditto.
+
+2022-06-23 Xionghu Luo <xionghuluo@tencent.com>
+
+ * cgraph.cc (cgraph_edge::redirect_call_stmt_to_callee): Fix
+ typo.
+ * tree-ssa-loop-ivopts.cc (struct iv_cand): Likewise.
+ * tree-switch-conversion.h: Likewise.
+
+2022-06-22 Jason Merrill <jason@redhat.com>
+
+ PR c++/104642
+ * common.opt: Add -funreachable-traps.
+ * doc/invoke.texi (-funreachable-traps): Document it.
+ * opts.cc (finish_options): Enable at -O0 or -Og.
+ * tree.cc (build_common_builtin_nodes): Add __builtin_trap.
+ (builtin_decl_unreachable, build_builtin_unreachable): New.
+ * tree.h: Declare them.
+ * ubsan.cc (sanitize_unreachable_fn): Factor out.
+ (ubsan_instrument_unreachable): Use
+ gimple_build_builtin_unreachable.
+ * ubsan.h (sanitize_unreachable_fn): Declare.
+ * gimple.cc (gimple_build_builtin_unreachable): New.
+ * gimple.h: Declare it.
+ * builtins.cc (expand_builtin_unreachable): Add assert.
+ (fold_builtin_0): Call build_builtin_unreachable.
+ * sanopt.cc: Don't run for just SANITIZE_RETURN
+ or SANITIZE_UNREACHABLE when trapping.
+ * cgraphunit.cc (walk_polymorphic_call_targets): Use new
+ unreachable functions.
+ * gimple-fold.cc (gimple_fold_call)
+ (gimple_get_virt_method_for_vtable)
+ * ipa-fnsummary.cc (redirect_to_unreachable)
+ * ipa-prop.cc (ipa_make_edge_direct_to_target)
+ (ipa_impossible_devirt_target)
+ * ipa.cc (walk_polymorphic_call_targets)
+ * tree-cfg.cc (pass_warn_function_return::execute)
+ (execute_fixup_cfg)
+ * tree-ssa-loop-ivcanon.cc (remove_exits_and_undefined_stmts)
+ (unloop_loops)
+ * tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt):
+ Likewise.
+
+2022-06-22 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/106019
+ * tree-data-ref.cc (dr_may_alias_p): Try using the
+ innermost_loop_behavior to disambiguate non-loop queries.
+
+2022-06-22 Palmer Dabbelt <palmer@rivosinc.com>
+
+ * doc/invoke.texi (RISC-V): Document -mtune=thead-c906.
+
+2022-06-22 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
+
+ * config/xtensa/xtensa.md (bswapsi2_internal):
+ Enlarge the buffer that is obviously smaller than the template
+ string given to sprintf().
+
+2022-06-21 Roger Sayle <roger@nextmovesoftware.com>
+ Marek Polacek <polacek@redhat.com>
+ Segher Boessenkool <segher@kernel.crashing.org>
+ Kewen Lin <linkw@linux.ibm.com>
+
+ PR target/105991
+ * config/rs6000/rs6000.md (rotl<mode>3_insert_3): Check that
+ exact_log2 doesn't return -1 (or zero).
+ (plus_xor): New code iterator.
+ (*rotl<mode>3_insert_3_<code>): New define_insn_and_split.
+
+2022-06-21 Nathan Sidwell <nathan@acm.org>
+
+ * doc/invoke.texi (C++ Modules): Remove language-linkage
+ as missing feature.
+
+2022-06-21 Arjun Shankar <arjun@redhat.com>
+
+ PR tree-optimization/94899
+ * match.pd (X + C < Y + C -> (signed) X < (signed) Y, if C is
+ 0x80000000): New simplification.
+
+2022-06-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/106032
+ * ifcvt.cc (noce_try_sign_mask): Punt if !t_unconditional, and
+ t may_trap_or_fault_p, even if it is cheap.
+
+2022-06-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/106030
+ * expr.cc (expand_cond_expr_using_cmove): Pass NULL_RTX instead of
+ temp to expand_operands if mode has been promoted.
+
+2022-06-21 Xionghu Luo <xionghuluo@tencent.com>
+
+ PR target/105740
+ * gimple-if-to-switch.cc (find_conditions): Don't skip the first
+ condition bb.
+
+2022-06-21 Siddhesh Poyarekar <siddhesh@gotplt.org>
+
+ PR tree-optimization/105736
+ * tree-object-size.cc (addr_object_size): Return size_unknown
+ when object offset computation returns an error.
+
+2022-06-20 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/105960
+ * config/i386/i386.cc (ix86_function_ok_for_sibcall): Return
+ false if PIC register is used when calling ifunc functions.
+
+2022-06-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/106027
+ * fold-const.cc (fold_to_nonsharp_ineq_using_bound): Use the
+ type of the prevailing comparison for the new comparison type.
+ (fold_binary_loc): Use proper types for the A < X && A + 1 > Y
+ to A < X && A >= Y folding.
+
+2022-06-20 Kewen Lin <linkw@linux.ibm.com>
+
+ PR tree-optimization/105940
+ * tree-vect-loop.cc (vect_analyze_loop_2): Add new parameter
+ slp_done_for_suggested_uf and adjust with it accordingly.
+ (vect_analyze_loop_1): Add new variable slp_done_for_suggested_uf,
+ pass it down to vect_analyze_loop_2 for the initial analysis and
+ applying suggested unroll factor.
+ (vect_is_simple_reduction): Add parameter slp and adjust with it.
+ (vect_analyze_scalar_cycles_1): Add parameter slp and pass down.
+ (vect_analyze_scalar_cycles): Likewise.
+
+2022-06-20 Martin Liska <mliska@suse.cz>
+
+ * bb-reorder.cc (find_traces_1_round): Add operators / and * and
+ use them.
+ (better_edge_p): Likewise.
+ * cfgloop.cc (find_subloop_latch_edge_by_profile): Likewise.
+ * cfgloopmanip.cc (scale_loop_profile): Likewise.
+ * cfgrtl.cc (force_nonfallthru_and_redirect): Likewise.
+ * cgraph.cc (cgraph_edge::maybe_hot_p): Likewise.
+ * config/sh/sh.cc (expand_cbranchdi4): Likewise.
+ * dojump.cc (do_compare_rtx_and_jump): Likewise.
+ * final.cc (compute_alignments): Likewise.
+ * ipa-cp.cc (update_counts_for_self_gen_clones): Likewise.
+ (decide_about_value): Likewise.
+ * ipa-inline-analysis.cc (do_estimate_edge_time): Likewise.
+ * loop-unroll.cc (unroll_loop_runtime_iterations): Likewise.
+ * modulo-sched.cc (sms_schedule): Likewise.
+ * omp-expand.cc (extract_omp_for_update_vars): Likewise.
+ (expand_omp_ordered_sink): Likewise.
+ (expand_omp_for_ordered_loops): Likewise.
+ (expand_omp_for_static_nochunk): Likewise.
+ * predict.cc (maybe_hot_count_p): Likewise.
+ (probably_never_executed): Likewise.
+ (set_even_probabilities): Likewise.
+ (handle_missing_profiles): Likewise.
+ (expensive_function_p): Likewise.
+ * profile-count.h: Likewise.
+ * profile.cc (compute_branch_probabilities): Likewise.
+ * stmt.cc (emit_case_dispatch_table): Likewise.
+ * symtab-thunks.cc (expand_thunk): Likewise.
+ * tree-ssa-loop-manip.cc (tree_transform_and_unroll_loop): Likewise.
+ * tree-ssa-sink.cc (select_best_block): Likewise.
+ * tree-switch-conversion.cc (switch_decision_tree::analyze_switch_statement): Likewise.
+ (switch_decision_tree::balance_case_nodes): Likewise.
+ (switch_decision_tree::emit_case_nodes): Likewise.
+ * tree-vect-loop.cc (scale_profile_for_vect_loop): Likewise.
+
+2022-06-20 yulong <shiyulong@iscas.ac.cn>
+
+ * config/riscv/riscv-builtins.cc (RISCV_ATYPE_VOID_PTR): New.
+ * config/riscv/riscv-cmo.def (RISCV_BUILTIN): Changed the FUNCTION_TYPE
+ of RISCV_BUILTIN.
+ * config/riscv/riscv-ftypes.def (0): Remove unused.
+ (1): New.
+
+2022-06-19 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
+
+ * config/xtensa/xtensa.cc (xtensa_is_insn_L32R_p):
+ Consider relaxed MOVI instructions as L32R.
+
+2022-06-19 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
+
+ * config/xtensa/xtensa.cc (xtensa_emit_move_sequence):
+ Use can_create_pseudo_p(), instead of using individual
+ reload_in_progress and reload_completed.
+ (xtensa_expand_block_set_small_loop): Use xtensa_simm8x256(),
+ the existing predicate function.
+ (xtensa_is_insn_L32R_p, gen_int_relational, xtensa_emit_sibcall):
+ Use the standard RTX code predicate macros such as MEM_P,
+ SYMBOL_REF_P and/or CONST_INT_P.
+ * config/xtensa/xtensa.md: Avoid using numeric literals to determine
+ if callee-saved register, at the split patterns for indirect sibcall
+ fixups.
+
+2022-06-18 Jakub Jelinek <jakub@redhat.com>
+
+ * common.opt (flag_sanitize_trap): New variable.
+ (fsanitize-trap=, fsanitize-trap): New options.
+ (fsanitize-undefined-trap-on-error): Change into deprecated alias
+ for -fsanitize-trap=all.
+ * opts.h (struct sanitizer_opts_s): Add can_trap member.
+ * opts.cc (finish_options): Complain about unsupported
+ -fsanitize-trap= options.
+ (sanitizer_opts): Add can_trap values to all entries.
+ (get_closest_sanitizer_option): Ignore -fsanitize-trap=
+ options which have can_trap false.
+ (parse_sanitizer_options): Add support for -fsanitize-trap=.
+ For -fsanitize-trap=all, enable
+ SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT. Disallow
+ -fsanitize-trap=vptr here.
+ (common_handle_option): Handle OPT_fsanitize_trap_ and
+ OPT_fsanitize_trap.
+ * sanopt.cc (maybe_optimize_ubsan_null_ifn): Check
+ flag_sanitize_trap & SANITIZE_{NULL,ALIGNMENT} instead of
+ flag_sanitize_undefined_trap_on_error.
+ * gcc.cc (sanitize_spec_function): Use
+ flag_sanitize & ~flag_sanitize_trap instead of flag_sanitize
+ and drop use of flag_sanitize_undefined_trap_on_error in
+ "undefined" handling.
+ * ubsan.cc (ubsan_instrument_unreachable): Use
+ flag_sanitize_trap & SANITIZE_??? instead of
+ flag_sanitize_undefined_trap_on_error.
+ (ubsan_expand_bounds_ifn, ubsan_expand_null_ifn,
+ ubsan_expand_objsize_ifn, ubsan_expand_ptr_ifn,
+ ubsan_build_overflow_builtin, instrument_bool_enum_load,
+ ubsan_instrument_float_cast, instrument_nonnull_arg,
+ instrument_nonnull_return, instrument_builtin): Likewise.
+ * doc/invoke.texi (-fsanitize-trap=, -fsanitize-trap): Document.
+ (-fsanitize-undefined-trap-on-error): Document as deprecated
+ alias of -fsanitize-trap.
+
+2022-06-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/105998
+ * varasm.cc (narrowing_initializer_constant_valid_p): Check
+ SCALAR_INT_MODE_P instead of INTEGRAL_MODE_P, also break on
+ ! INTEGRAL_TYPE_P and do the same check also on op{0,1}'s type.
+
+2022-06-18 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR tree-optimization/105835
+ * match.pd (convert (mult zero_one_valued_p@1 INTEGER_CST@2)):
+ Narrow integer multiplication by a zero_one_valued_p operand.
+ (convert (cond @1 INTEGER_CST@2 INTEGER_CST@3)): Push integer
+ conversions inside COND_EXPR where both data operands are
+ integer constants.
+
+2022-06-18 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
+
+ * config/xtensa/constraints.md (Y):
+ Change to include integer constants until reload begins.
+ * config/xtensa/predicates.md (move_operand): Ditto.
+ * config/xtensa/xtensa.cc (xtensa_emit_move_sequence):
+ Change to allow storing integer constants into litpool only after
+ reload begins.
+
+2022-06-17 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105209
+ * config/alpha/alpha-protos.h (alpha_store_data_bypass_p): New.
+ * config/alpha/alpha.cc (alpha_store_data_bypass_p): New function.
+ (alpha_store_data_bypass_p_1): Ditto.
+ * config/alpha/ev4.md: Use alpha_store_data_bypass_p instead
+ of generic store_data_bypass_p.
+ (ev4_ist_c): Remove insn reservation.
+
+2022-06-17 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105970
+ * config/i386/i386.cc (ix86_function_arg): Assert that
+ the mode of pointer argumet is equal to ptr_mode, not Pmode.
+
+2022-06-17 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105993
+ * config/i386/sse.md (vpmov splitter): Use (match_dup ...)
+ instead of REGNO comparisons in combine splitter.
+
+2022-06-17 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/rs6000.cc (rs6000_invalid_conversion): Correct some
+ types.
+
+2022-06-17 Kito Cheng <kito.cheng@sifive.com>
+
+ * config/riscv/bitmanip.md: Supress warning.
+
+2022-06-17 Richard Earnshaw <rearnsha@arm.com>
+
+ PR target/106004
+ * config/arm/arm.cc (arm_print_operand, case 'V'): Use UINTVAL.
+ Clear bits in the mask above bit 31.
+
+2022-06-17 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/arm/mve.md (*mve_mov<mode>): Re-order constraints
+ to avoid spilling trivial literals to the constant pool.
+
2022-06-16 David Malcolm <dmalcolm@redhat.com>
* gimple-ssa-warn-access.cc (warn_string_no_nul): Add
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 0ebec28..6de1e01 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20220617
+20220710
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index b6dcc45..3ae2370 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -146,8 +146,11 @@ endif
# CFLAGS is for the user to override to, e.g., do a cross build with -O2.
# TCFLAGS is used for compilations with the GCC just built.
# T_CFLAGS is used for all compilations and is overridden by t-* files.
+# TFLAGS is also for the user to override, passed down from the top-level
+# Makefile. It is used for all compilations.
T_CFLAGS =
TCFLAGS =
+TFLAGS =
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
LDFLAGS = @LDFLAGS@
@@ -457,7 +460,7 @@ T_STDINT_GCC_H = $(srcdir)/ginclude/stdint-gcc.h
# The GCC to use for compiling crt*.o.
# Usually the one we just built.
# Don't use this as a dependency--use $(GCC_PASSES).
-GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld
+GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld $(TFLAGS)
# Set if the compiler was configured with --with-build-sysroot.
SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
@@ -1193,6 +1196,7 @@ FLAGS_TO_PASS = \
"MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
"MAKEOVERRIDES=" \
"SHELL=$(SHELL)" \
+ "TFLAGS=$(TFLAGS)" \
"exeext=$(exeext)" \
"build_exeext=$(build_exeext)" \
"objext=$(objext)" \
@@ -1269,6 +1273,7 @@ ANALYZER_OBJS = \
analyzer/region-model-reachability.o \
analyzer/sm.o \
analyzer/sm-file.o \
+ analyzer/sm-fd.o \
analyzer/sm-malloc.o \
analyzer/sm-pattern-test.o \
analyzer/sm-sensitive.o \
@@ -1413,8 +1418,6 @@ OBJS = \
gimple-range-infer.o \
gimple-range-trace.o \
gimple-ssa-backprop.o \
- gimple-ssa-evrp.o \
- gimple-ssa-evrp-analyze.o \
gimple-ssa-isolate-paths.o \
gimple-ssa-nonnull-compare.o \
gimple-ssa-split-paths.o \
@@ -1708,6 +1711,7 @@ OBJS = \
value-query.o \
value-range.o \
value-range-equiv.o \
+ value-range-storage.o \
value-relation.o \
value-prof.o \
var-tracking.o \
@@ -2716,6 +2720,7 @@ GTFILES = $(CPPLIB_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/tree-ssanames.h \
$(srcdir)/tree-vrp.h \
$(srcdir)/value-range.h \
+ $(srcdir)/value-range-storage.h \
$(srcdir)/ipa-prop.h \
$(srcdir)/trans-mem.cc \
$(srcdir)/lto-streamer.h \
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 1434ebe..02490f0 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,664 @@
+2022-07-06 Piotr Trojanek <trojanek@adacore.com>
+
+ * gcc-interface/Make-lang.in (ada/generated/gnatvsn.ads):
+ Simplify regular expression. The "interval expression",
+ i.e. \{8\} is part of the POSIX regular expressions, so it
+ should not be a problem for modern implementations of sed.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.cc (gnat_to_gnu): Update comment.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/gigi.h (simple_constant_p): Declare.
+ * gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Variable>: Strip
+ the qualifiers from the type of a simple constant.
+ (simple_constant_p): New predicate.
+ * gcc-interface/trans.cc (node_is_atomic): Return true for objects
+ with atomic type except for simple constants.
+ (node_is_volatile_full_access): Return false for simple constants
+ with VFA type.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Variable>: Create a
+ local constant holding the underlying GNAT type of the object. Do
+ not fiddle with the object size for an unconstrained array.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/decl.cc (gnat_to_gnu_subprog_type): Constify a
+ local variable and move a couple of others around.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.cc (gnat_gimplify_expr) <SAVE_EXPR>: New case.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch6.adb (Function return mechanisms): New paragraph.
+
+2022-07-06 Yannick Moy <moy@adacore.com>
+
+ * sem_util.adb (Is_Non_Preelaborable_Construct): Fix for
+ deferred constants.
+
+2022-07-06 Justin Squirek <squirek@adacore.com>
+
+ * libgnat/s-regpat.adb, libgnat/s-regpat.ads (Compile): Add a
+ new defaulted parameter Error_When_Too_Small to trigger an
+ error, if specified true, when Matcher is too small to hold the
+ compiled regex program.
+
+2022-07-06 Justin Squirek <squirek@adacore.com>
+
+ * sem_ch4.adb (Analyze_Selected_Component): Add condition to
+ avoid interpreting derived type components as candidates for
+ selected components in preanalysis of inherited class
+ conditions.
+
+2022-07-06 Yannick Moy <moy@adacore.com>
+
+ * ghost.adb (Check_Ghost_Context): Delay checking for generic
+ associations.
+ (Check_Ghost_Context_In_Generic_Association): Perform ghost
+ checking in analyzed generic associations.
+ (Check_Ghost_Formal_Procedure_Or_Package): Check SPARK RM
+ 6.9(13-14) for formal procedures and packages.
+ (Check_Ghost_Formal_Variable): Check SPARK RM 6.9(13-14) for
+ variables.
+ * ghost.ads: Declarations for the above.
+ * sem_ch12.adb (Analyze_Associations): Apply delayed checking
+ for generic associations.
+ (Analyze_Formal_Object_Declaration): Same.
+ (Analyze_Formal_Subprogram_Declaration): Same.
+ (Instantiate_Formal_Package): Same.
+ (Instantiate_Formal_Subprogram): Same.
+ (Instantiate_Object): Same. Copy ghost aspect to newly declared
+ object for actual for IN formal object. Use new function
+ Get_Enclosing_Deep_Object to retrieve root object.
+ (Instantiate_Type): Copy ghost aspect to declared subtype for
+ actual for formal type.
+ * sem_prag.adb (Analyze_Pragma): Recognize new allowed
+ declarations.
+ * sem_util.adb (Copy_Ghost_Aspect): Copy the ghost aspect
+ between nodes.
+ (Get_Enclosing_Deep_Object): New function to return enclosing
+ deep object (or root for reachable part).
+ * sem_util.ads (Copy_Ghost_Aspect): Same.
+ (Get_Enclosing_Deep_Object): Same.
+ * libgnat/s-imageu.ads: Declare formal subprograms as ghost.
+ * libgnat/s-valuei.ads: Same.
+ * libgnat/s-valuti.ads: Same.
+
+2022-07-06 Javier Miranda <miranda@adacore.com>
+
+ * sem_res.adb (Resolve_Type_Conversion): Code cleanup since the
+ previous static check has been moved to Valid_Tagged_Conversion.
+ (Valid_Tagged_Conversion): Fix the code checking conversion
+ to/from interface types since incorrectly returns True when the
+ parent type of the operand type (or the target type) is an
+ interface type; add missing static checks on interface type
+ conversions.
+
+2022-07-06 Marc Poulhiès <poulhies@adacore.com>
+
+ * libgnat/s-secsta.ads (SS_Allocate): Add new Alignment
+ parameter.
+ (Memory_Alignment): Remove.
+ * libgnat/s-secsta.adb (Align_Addr): New.
+ (SS_Allocate): Add new Alignment parameter. Realign pointer if
+ needed. Don't allocate anything for 0-sized allocations.
+ * gcc-interface/utils2.cc (build_call_alloc_dealloc_proc): Add
+ allocated object's alignment as last parameter to allocation
+ invocation.
+
+2022-07-06 Piotr Trojanek <trojanek@adacore.com>
+
+ * libgnat/g-socket.adb (Get_Address_Info): Reduce scope of the
+ Found variable; avoid repeated assignment inside the loop.
+
+2022-07-06 Doug Rupp <rupp@adacore.com>
+
+ * Makefile.rtl [arm,aarch64 vxworks7]: Remove rtp and kernel
+ build macros and set an error variable if needed.
+ [x86,x86_vxworks7]: Likewise.
+ [ppc,ppc64]: Set an error variable if needed.
+ (rts-err): New phony Makefile target.
+ (setup-rts): Depend on rts-err.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch3.adb (Make_Allocator_For_BIP_Return): New local function.
+ (Expand_N_Object_Declaration): Use it to build the three allocators
+ for a Build-In-Place return with an unconstrained type. Update the
+ head comment after other recent changes.
+
+2022-07-06 Doug Rupp <rupp@adacore.com>
+
+ * libgnat/system-vxworks7-e500-kernel.ads: Remove.
+ * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise.
+ * libgnat/system-vxworks7-e500-rtp.ads: Likewise.
+
+2022-07-06 Justin Squirek <squirek@adacore.com>
+
+ * gnat_cuda.adb (Empty_CUDA_Global_Subprogram): Set
+ Specification and Corresponding_Spec to match the original
+ Kernel_Body.
+
+2022-07-06 Piotr Trojanek <trojanek@adacore.com>
+
+ * exp_ch6.adb (Build_Static_Check_Helper_Call): Replace explicit
+ call to Make_Unchecked_Type_Conversion with a call to
+ Unchecked_Convert_To.
+ * tbuild.adb (Unchecked_Convert_To): Fix whitespace.
+
+2022-07-06 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_res.adb (Resolve_Actuals): Restore first sentence of a
+ comment.
+
+2022-07-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_aggr.adb (Expand_Record_Aggregate): Do not call
+ Is_Full_Access_Aggregate here.
+ * freeze.ads (Is_Full_Access_Aggregate): Delete.
+ * freeze.adb (Is_Full_Access_Aggregate): Move to...
+ (Freeze_Entity): Do not call Is_Full_Access_Aggregate here.
+ * sem_aggr.adb (Is_Full_Access_Aggregate): ...here
+ (Resolve_Aggregate): Call Is_Full_Access_Aggregate here.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * doc/gnat_ugn/building_executable_programs_with_gnat.rst
+ (Warning Message Control): Update description of switch -gnatwj.
+ * gnat_ugn.texi: Regenerate.
+ * sem_ch10.adb (Analyze_With_Clause): Warn on WITH clauses for
+ obsolete renamed units; in Ada 83 mode do not consider
+ predefined renamings to be obsolete.
+
+2022-07-05 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_util.adb (Make_Subtype_From_Expr): Do not set field to Empty.
+ * sem_util.adb (Visit_Itype): Remove ??? comment.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_attr.adb (Note_Possible_Modification): Revert a
+ special-case for validity checks on Long_Float type.
+ * snames.ads-tmpl (Name_Attr_Long_Float): Remove name added
+ exclusively for the mentioned fix.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch6.adb (Set_Formal_Mode): Remove unnecessary setting of
+ Never_Set_In_Source.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch6.adb (Process_Formals): Avoid repeated calls to
+ Expression.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * exp_code.adb (Setup_Asm_IO_Args): Remove guard against No_List.
+ * par_sco.adb (Process_Decisions): Likewise.
+ * sem_ch13.adb (Check_Component_List): Likewise.
+ * sem_ch6.adb (FCL): Likewise.
+
+2022-07-05 Doug Rupp <rupp@adacore.com>
+
+ * cstreams.c (__gnat_full_name) [QNX]: Remove block.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * osint.adb (Locate_File): Use Name_Find with a parameter and
+ not with a global buffer.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * exp_ch3.adb (Build_Init_Statements): Reuse Get_Pragma_Arg.
+ * exp_prag.adb (Arg_N): Likewise.
+
+2022-07-05 Yannick Moy <moy@adacore.com>
+
+ * ghost.adb (Is_OK_Ghost_Context): Detect ghost type inside object
+ renaming.
+
+2022-07-05 Bob Duff <duff@adacore.com>
+
+ * exp_ch7.adb: Change two constants Is_Protected_Body and
+ Is_Prot_Body to be Is_Protected_Subp_Body; these are not true
+ for protected bodies, but for protected subprogram bodies.
+ (Expand_Cleanup_Actions): No need to search for
+ Activation_Chain_Entity; just use Activation_Chain_Entity.
+ * sem_ch8.adb (Find_Direct_Name): Use Entyp constant.
+ * atree.adb, atree.ads, atree.h, nlists.adb, nlists.ads
+ (Parent): Provide nonoverloaded versions of Parent, so that they
+ can be easily found in the debugger.
+ * debug_a.adb, debug_a.ads: Clarify that we're talking about the
+ -gnatda switch; switches are case sensitive. Print out the
+ Chars field if appropriate, which makes it easier to find things
+ in the output.
+ (Debug_Output_Astring): Simplify. Also fix an off-by-one
+ bug ("for I in Vbars'Length .." should have been "for I in
+ Vbars'Length + 1 .."). Before, it was printing Debug_A_Depth +
+ 1 '|' characters if Debug_A_Depth > Vbars'Length.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_prag.adb (Analyze_Pragma): Remove unnecessary call to
+ Analyze.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * libgnat/g-socket.adb (Raise_Host_Error): Add No_Return aspect.
+ (Raise_GAI_Error): Likewise.
+ * libgnat/g-socket.ads (Raise_Socket_Error): Likewise.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_util.adb (Aggregate_Constraint_Checks): Fix whitespace;
+ refactor repeated code; replace a ??? comment with an
+ explanation based on the comment for the routine spec.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_util.ads (Note_Possible_Modification): Fix occurrence of
+ May_Be_Modified in comment.
+ * sem_warn.ads (Check_Unset_Reference): Fix occurrence of
+ Not_Assigned in comment.
+
+2022-07-05 Yannick Moy <moy@adacore.com>
+
+ * sem_attr.adb (Analyze_Attribute): Take into account the
+ possibility of homonyms.
+
+2022-07-05 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch3.adb (Expand_N_Object_Declaration): Rewrite as a renaming
+ for any nonaliased local object with nominal unconstrained subtype
+ originally initialized with the result of a function call that has
+ been rewritten as the dereference of a reference to the result.
+ * sem_ch3.adb (Analyze_Object_Declaration): Do not do it here
+
+2022-07-05 Arnaud Charlet <charlet@adacore.com>
+
+ * exp_imgv.adb (Build_Enumeration_Image_Tables): Also disable
+ perfect hash in GNAT_Mode.
+ * raise-gcc.c (__gnat_Unwind_RaiseException): Add support for
+ disabling exception propagation.
+ * sem_eval.adb (Compile_Time_Known_Value): Update comment and
+ remove wrong call to Check_Error_Detected.
+ * sem_prag.adb (Check_Loop_Pragma_Grouping, Analyze_Pragma):
+ Remove exception propagation during bootstrap.
+
+2022-07-05 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_aggr.adb (Expand_Array_Aggregate): Remove obsolete code.
+ Delay the expansion of aggregates initializing return objects of
+ build-in-place functions.
+ * exp_ch3.ads (Ensure_Activation_Chain_And_Master): Delete.
+ * exp_ch3.adb (Ensure_Activation_Chain_And_Master): Fold back to...
+ (Expand_N_Object_Declaration): ...here.
+ Perform the expansion of return objects of build-in-place functions
+ here instead of...
+ * exp_ch6.ads (Is_Build_In_Place_Return_Object): Declare.
+ * exp_ch6.adb (Expand_N_Extended_Return_Statement): ...here.
+ (Is_Build_In_Place_Result_Type): Alphabetize.
+ (Is_Build_In_Place_Return_Object): New predicate.
+ * exp_ch7.adb (Enclosing_Function): Delete.
+ (Process_Object_Declaration): Tidy up handling of return objects.
+ * sem_ch3.adb (Analyze_Object_Declaration): Do not decorate and
+ freeze the actual type if it is the same as the nominal type.
+ * sem_ch6.adb: Remove use and with clauses for Exp_Ch3.
+ (Analyze_Function_Return): Analyze again all return objects.
+ (Create_Extra_Formals): Do not force the definition of an Itype
+ if the subprogram is a compilation unit.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * gnatls.adb (Corresponding_Sdep_Entry): Remove dead return
+ statement in defensive path; there is another return statement
+ for a normal execution of this routine, so rule Ada RM 6.5(5),
+ which requires function to have at least one return statement is
+ still satisfied.
+ (Gnatls): Remove dead, call to nonreturning Exit_Program after
+ Output_License_Information which itself does not return.
+ * libgnat/a-exstat.adb (Bad_EO): Remove raise statement that was
+ meant to please some ancient version of GNAT.
+ * libgnat/g-awk.adb (Raise_With_Info): Likewise.
+ * sem_attr.adb (Check_Reference): Remove dead return statement;
+ rule Ada RM 6.5(5), which requires function to have at least one
+ return statement is still satisfied.
+ (Analyze_Attribute): Remove dead exit statement.
+ (Check_Reference): Same as above.
+ * sem_ch12.adb (Instantiate_Formal_Package): Remove dead raise
+ statement; it was inconsistent with other calls to
+ Abandon_Instantiation, which are not followed by a raise
+ statement.
+ * sem_prag.adb (Process_Convention): Remove dead defensive
+ assignment.
+ (Interrupt_State): Remove dead defensive exit statement.
+ (Do_SPARK_Mode): Likewise.
+ * sfn_scan.adb (Scan_String): Remove dead defensive assignment.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_attr.adb, sem_prag.adb: Remove dead return statements
+ after calls to Error_Attr, Error_Pragma, Error_Pragma_Arg and
+ Placement_Error. All these calls raise exceptions that are
+ handled to gently recover from errors.
+
+2022-07-05 Doug Rupp <rupp@adacore.com>
+
+ * libgnat/system-vxworks-ppc-kernel.ads (Word_Size): Compute
+ based on Standard'Word_Size.
+ (Memory_Size): Compute based on Word_Size.
+ * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise.
+ * libgnat/system-vxworks-ppc-rtp.ads: Likewise.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_attr.adb (Analyze_Attribute): Move call to
+ Set_Address_Taken so that it is executed when the prefix
+ attribute is legal.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch5.adb (Check_Unreachable_Code): Avoid explicit use of
+ Sloc; this should also help when we finally use Source_Span for
+ prettier error messages.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch5.adb (Check_Unreachable_Code): Remove redundant guard;
+ the call to Present wasn't needed either.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch5.adb (Analyze_Block_Statement): Call to List_Length with
+ No_List is safe and will return zero.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch6.adb (Check_Missing_Return): Add reference to an RM rule.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch6.adb (Check_Missing_Return): Remove outdated comment.
+
+2022-07-05 Dmitriy Anisimkov <anisimko@adacore.com>
+
+ * adaint.h (convert_addresses): Remove function declaration.
+
+2022-07-05 Doug Rupp <rupp@adacore.com>
+
+ * Makefile.rtl (*vxworks*): Remove most pre-vxworks7 code.
+ * vxworks-arm-link.spec: Remove.
+ * vxworks-e500-link.spec: Likewise.
+ * vxworks-smp-arm-link.spec: Likewise.
+ * vxworks-smp-e500-link.spec: Likewise.
+ * vxworks-smp-x86-link.spec: Likewise.
+ * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise.
+ * libgnat/system-vxworks-arm-rtp.ads: Likewise.
+ * libgnat/system-vxworks-arm.ads: Likewise.
+ * libgnat/system-vxworks-e500-kernel.ads: Likewise.
+ * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise.
+ * libgnat/system-vxworks-e500-rtp.ads: Likewise.
+ * libgnat/system-vxworks-x86-kernel.ads: Likewise.
+ * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise.
+ * libgnat/system-vxworks-x86-rtp.ads: Likewise.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * sem_disp.adb (Check_Dispatching_Call): Merge the two special cases
+ where there are no controlling actuals but tag-indeternminate ones.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_disp.adb (Expand_Dispatching_Call): Fix detection of calls
+ that are dispatching on tagged result.
+
+2022-07-04 Doug Rupp <rupp@adacore.com>
+
+ * Makefile.rtl (ADA_EXCLUDE_SRCS): Add s-qnx.ads.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch3.adb (Expand_N_Object_Declaration) <OK_To_Rename_Ref>: New
+ local function.
+ <Rewrite_As_Renaming>: Change to a local variable whose value is
+ computed once and generate a call to Finalize after this is done.
+ Simplify the code creating the renaming at the end.
+
+2022-07-04 Doug Rupp <rupp@adacore.com>
+
+ * Makefile.rtl (GCC_SPEC_FILES): Remove vxworks cert files.
+
+2022-07-04 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_attr.adb (Resolve_Attribute): Refactor duplicated code for
+ Count and Index attributes.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * checks.adb (Apply_Length_Check_On_Assignment): Return early if
+ the Suppress_Assignment_Checks flag is set.
+ (Selected_Range_Checks): Deal with conditional expressions.
+ * exp_ch4.adb (Too_Large_Length_For_Array): New constant.
+ (Expand_Concatenate): Use it in lieu of Too_Large_Max_Length.
+ (Expand_N_If_Expression): If the result has a unidimensional array
+ type but the dependent expressions have constrained subtypes with
+ known bounds, create a static temporary on the stack with a subtype
+ covering the result.
+ (Get_First_Index_Bounds): Deal with string literals.
+ * uintp.ads (Uint_256): New deferred constant.
+ * sinfo.ads (Suppress_Assignment_Checks): Document new usage.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch3.adb (Expand_N_Object_Declaration.Rewrite_As_Renaming):
+ Do not rewrite if the declaration has got constraints.
+ * sinfo.ads (Case Expression Alternative): Fix typo.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch3.adb (Expand_N_Object_Declaration.Rewrite_As_Renaming):
+ Be prepared for slices.
+ * exp_ch4.adb (Get_First_Index_Bounds): New procedure.
+ (Expand_Array_Comparison.Length_Less_Than_4): Call it.
+ (Expand_Concatenate): Try to compute a maximum length for
+ operands with variable length and a maximum total length at the
+ end. If the concatenation is dynamic, but a sensible maximum
+ total length has been computed, use this length to create a
+ static array subtype for the temporary and return a slice of it.
+
+2022-07-04 Steve Baird <baird@adacore.com>
+
+ * sem_ch3.adb (Check_Possible_Deferred_Completion): Delete
+ Prev_Obj_Def formal parameter. Reorganize code so that
+ statically matching check is also performed in the case where
+ the subtype given in the initial declaration is constrained and
+ the subtype given in the completion is not.
+
+2022-07-04 Bob Duff <duff@adacore.com>
+
+ * einfo-utils.ads, einfo-utils.adb: Add predicates on subtypes E
+ and N. Change some parameters to use the unpredicated subtypes,
+ because they sometimes return e.g. Empty. Note that N_Entity_Id
+ has a predicate; Entity_Id does not.
+ * exp_tss.adb (Base_Init_Proc): Use Entity_Id instead of E,
+ because otherwise we fail the predicate. We shouldn't be
+ referring to single-letter names from far away anyway.
+ * sem_aux.adb (Is_Derived_Type): Likewise.
+ * sem_res.adb (Is_Definite_Access_Type): Use N_Entity_Id for
+ predicate.
+ * types.ads (Entity_Id): Add comment explaining the difference
+ between Entity_Id and N_Entity_Id.
+
+2022-07-04 Justin Squirek <squirek@adacore.com>
+
+ * exp_util.adb (Remove_Side_Effects): Combine identical
+ branches.
+ * sem_attr.adb (Analyze_Attribute): Combine identical cases
+ Attribute_Has_Same_Storage and Attribute_Overlaps_Storage.
+ * sem_prag.adb (Check_Role): Combine E_Out_Parameter case with
+ general case for parameters.
+ * sem_util.adb (Accessibility_Level): Combine identical
+ branches.
+ * sprint.adb (Sprint_Node_Actual): Combine cases for
+ N_Real_Range_Specification and N_Signed_Integer_Type_Definition.
+
+2022-07-04 Justin Squirek <squirek@adacore.com>
+
+ * libgnat/s-os_lib.adb (Quote_Argument): Modify the result
+ buffer size calculation to handle the case where Arg'Length is
+ 1.
+
+2022-07-04 Bob Duff <duff@adacore.com>
+
+ * exp_util.adb (Expand_Subtype_From_Expr): Generate a new
+ subtype when Is_Constr_Subt_For_UN_Aliased is True, so the
+ Is_Constr_Subt_For_U_Nominal flag will not be set on the
+ preexisting subtype.
+ * sem_attr.adb, sem_ch3.adb: Minor.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * debug.adb (d.9): Remove usage.
+ * exp_ch6.adb (Expand_Simple_Function_Return): Remove redundant
+ test on Debug_Flag_Dot_L.
+ (Is_Build_In_Place_Result_Type): Return false for nonlimited types.
+ (Is_Build_In_Place_Function): Tidy up and remove redundant test on
+ Debug_Flag_Dot_L.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch3.adb (Expand_N_Object_Declaration): Don't adjust the object
+ if the expression is a function call.
+ <Rewrite_As_Renaming>: Return true if the object needs finalization
+ and is initialized with the result of a function call returned on
+ the secondary stack.
+ * exp_ch6.adb (Expand_Ctrl_Function_Call): Add Use_Sec_Stack boolean
+ parameter. Early return if the parent is an object declaration and
+ Use_Sec_Stack is false.
+ (Expand_Call_Helper): Adjust call to Expand_Ctrl_Function_Call.
+ * exp_ch7.adb (Find_Last_Init): Be prepared for initialization still
+ present in the object declaration.
+ * sem_ch3.adb (Analyze_Object_Declaration): Call the predicates
+ Needs_Secondary_Stack and Needs_Finalization to guard the renaming
+ optimization.
+
+2022-07-04 Bob Duff <duff@adacore.com>
+
+ * libgnat/a-cbhase.ads, libgnat/a-cborse.ads,
+ libgnat/a-cihase.ads, libgnat/a-ciorse.ads,
+ libgnat/a-cohase.ads, libgnat/a-coorse.ads (Key): New function
+ that takes a Container parameter, implemented as an expression
+ function, so it is self explanatory (doesn't need a comment).
+
+2022-07-04 Vasiliy Fofanov <fofanov@adacore.com>
+
+ * doc/gnat_rm/the_gnat_library.rst: Fix length of title
+ underlines.
+
+2022-07-04 Steve Baird <baird@adacore.com>
+
+ * sem_ch4.adb (Analyze_Allocator): After calling Insert_Action
+ to insert a subtype declaration associated with an allocator,
+ the subtype declaration will usually be analyzed. But not
+ always. Add an explicit call to Preanalyze to cope with the
+ unusual case. The subtype declaration must be at least
+ preanalyzed before the call to Sem_Ch3.Process_Subtype a little
+ while later, during which we analyze an identifier that refers
+ to the subtype.
+
+2022-07-04 Steve Baird <baird@adacore.com>
+
+ * sem_warn.adb (Warn_On_Constant_Valid_Condition): Do not
+ generate a warning if the expression in question is an assertion
+ expression, or a subexpression thereof. But do call
+ Test_Comparison so that it can generate warnings for the cases
+ that it generates warnings for.
+ * sem_prag.ads: Modify Assertion_Expression_Pragma constant so
+ that the predicate Sem_Util.In_Assertion_Expression_Pragma
+ returns True for the expression of a Compile_Time_Error pragma.
+
+2022-07-04 Julien Bortolussi <bortolussi@adacore.com>
+
+ * doc/gnat_rm/the_gnat_library.rst: Add the new entry.
+ * gnat_rm.texi: Regenerate.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * sem_res.adb (Resolve_Comparison_Op): Deal with ambiguous operands
+ in all cases.
+ (Resolve_Equality_Op): Likewise, except for the case of the implicit
+ inequality operator created for a user-defined operator that is not
+ an intrinsic subprogram.
+
+2022-07-04 Bob Duff <duff@adacore.com>
+
+ * libgnat/a-cbhase.adb, libgnat/a-cbhase.ads,
+ libgnat/a-cborse.adb, libgnat/a-cborse.ads,
+ libgnat/a-cihase.adb, libgnat/a-cihase.ads,
+ libgnat/a-ciorse.adb, libgnat/a-ciorse.ads,
+ libgnat/a-cohase.adb, libgnat/a-cohase.ads,
+ libgnat/a-conhel.adb, libgnat/a-conhel.ads,
+ libgnat/a-coorse.adb, libgnat/a-coorse.ads: Add Has_Element,
+ Element, Query_Element, and Next subprograms that take a Set
+ parameter. Add Tampering_With_Cursors_Prohibited function. These
+ are all new in Ada 2022.
+
+2022-07-04 Claire Dross <dross@adacore.com>
+
+ * doc/gnat_rm/the_gnat_library.rst: Functional vectors, sets,
+ and maps are now controlled.
+ * gnat_rm.texi: Regenerate.
+
+2022-07-04 Claire Dross <dross@adacore.com>
+
+ * doc/gnat_ugn/building_executable_programs_with_gnat.rst
+ (Debugging and Assertion Control): Add GNAT specific assertion
+ pragmas to the equivalent Assertion_Policy for the -gnata
+ option.
+ * gnat_ugn.texi: Regenerate.
+
+2022-07-04 Justin Squirek <squirek@adacore.com>
+
+ * sem_disp.adb (Most_Descendant_Use_Clause): Remove call to
+ deprecated Is_Internal.
+ * sem_util.adb (Innermost_Master_Scope_Depth): Use
+ Find_Enclosing_Scope instead of Nearest_Dynamic_Scope to avoid
+ cases where relevant scopes get skipped leading to an incorrect
+ scope depth calculation.
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * exp_ch6.adb (Build_In_Place_Formal): Also compute Returns_By_Ref
+ for the function if the extra formals were not built initially.
+
+2022-07-04 Piotr Trojanek <trojanek@adacore.com>
+
+ * sem_ch13.adb (Resolve_Iterable_Operation): Add guard to
+ prevent crash when the examined function has no formal
+ parameters and Etype is called on Empty entity.
+
+2022-07-04 Julien Bortolussi <bortolussi@adacore.com>
+
+ * libgnat/a-cfinse.adb, libgnat/a-cfinse.ads: Implementation
+ files of the sequence.
+ * Makefile.rtl, impunit.adb: Take into account the add of the
+ new files
+
+2022-07-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * doc/gnat_rm/implementation_defined_pragmas.rst (Pure_Function):
+ Fix ambiguous wording about context dependence.
+ * gnat_rm.texi: Regenerate.
+
2022-06-02 David Malcolm <dmalcolm@redhat.com>
* gcc-interface/misc.cc (gnat_get_sarif_source_language): New.
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
index 43d54f1..3ae4e23 100644
--- a/gcc/ada/Makefile.rtl
+++ b/gcc/ada/Makefile.rtl
@@ -114,6 +114,7 @@ GNATRTL_NONTASKING_OBJS= \
a-cfhama$(objext) \
a-cfhase$(objext) \
a-cfinve$(objext) \
+ a-cfinse$(objext) \
a-cforma$(objext) \
a-cforse$(objext) \
a-cgaaso$(objext) \
@@ -1077,21 +1078,13 @@ GCC_SPEC_FILES=
# $(strip STRING) removes leading and trailing spaces from STRING.
# If what's left is null then it's a match.
-# PowerPC and e500v2 VxWorks
-ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe,$(target_cpu) $(target_vendor) $(target_os))),)
+# PowerPC VxWorks6 and VxWorks7
+ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworks7%, $(target_cpu) $(target_vendor) $(target_os))),)
- ifeq ($(strip $(filter-out e500%, $(target_alias))),)
- ARCH_STR=e500
- # gcc config translates the target e500v2-wrs-vxworks to
- # powerpc-wrs-vxworksspe. Let's keep the original alias here when
- # generating s-oscons.ads.
- target=$(target_alias)
+ ifeq ($(strip $(filter-out powerpc64, $(target_cpu))),)
+ ARCH_STR=ppc64
else
- ifeq ($(strip $(filter-out powerpc64, $(target_cpu))),)
- ARCH_STR=ppc64
- else
- ARCH_STR=ppc
- endif
+ ARCH_STR=ppc
endif
VX=$(strip $(if $(filter vxworks7%, $(target_os)), vxworks7, vxworks))
@@ -1122,20 +1115,6 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe
$(ATOMICS_TARGET_PAIRS) \
$(ATOMICS_BUILTINS_TARGET_PAIRS)
- # VxWorks 5 and 6 both use the same target triplet making them
- # indistinguishable in the context of this make file. Package
- # System.Stack_Checking.Operations is not needed on VxWorks 6 as it leads to
- # an undefined symbol when building a dynamic shared library. To alleviate
- # this problem and distinguish this case, we use the THREAD_KIND and include
- # the package only in default mode.
-
- ifeq ($(strip $(filter-out default,$(THREAD_KIND))),)
- LIBGNAT_TARGET_PAIRS += \
- s-stchop.ads<libgnat/s-stchop__limit.ads \
- s-stchop.adb<libgnat/s-stchop__vxworks.adb
- EXTRA_GNATRTL_NONTASKING_OBJS+=s-stchop.o
- endif
-
ifeq ($(strip $(filter-out powerpc64, $(target_cpu))),)
LIBGNAT_TARGET_PAIRS += $(GNATRTL_128BIT_PAIRS)
EXTRA_GNATRTL_NONTASKING_OBJS += $(GNATRTL_128BIT_OBJS)
@@ -1143,6 +1122,9 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe
TOOLS_TARGET_PAIRS=indepsw.adb<indepsw-gnu.adb
+ EH_MECHANISM=-gcc
+
+ # The rtp and kernel sections must be retained for the sake of ppc-vx6
ifeq ($(strip $(filter-out rtp,$(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
s-vxwext.ads<libgnarl/s-vxwext__rtp.ads \
@@ -1150,7 +1132,6 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe
s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-rtp.adb \
system.ads<libgnat/$(SVX)-$(ARCH_STR)-rtp.ads
- EH_MECHANISM=-gcc
else
ifeq ($(strip $(filter-out rtp-smp,$(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
@@ -1160,7 +1141,6 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe
s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-tls.adb \
system.ads<libgnat/$(SVX)-$(ARCH_STR)-rtp-smp.ads
- EH_MECHANISM=-gcc
EXTRA_LIBGNAT_OBJS+=affinity.o
else
ifeq ($(strip $(filter-out kernel-smp,$(THREAD_KIND))),)
@@ -1172,19 +1152,17 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe
s-vxwext.adb<libgnarl/s-vxwext__kernel-smp.adb \
system.ads<libgnat/$(SVX)-$(ARCH_STR)-kernel.ads
- EH_MECHANISM=-gcc
EXTRA_LIBGNAT_OBJS+=affinity.o
else
- LIBGNAT_TARGET_PAIRS += \
- s-interr.adb<libgnarl/s-interr__vxworks.adb \
- s-tpopsp.adb<libgnarl/s-tpopsp__vxworks.adb
-
ifeq ($(strip $(filter-out kernel,$(THREAD_KIND))),)
- EH_MECHANISM=-gcc
LIBGNAT_TARGET_PAIRS += \
+ s-interr.adb<libgnarl/s-interr__vxworks.adb \
+ s-tpopsp.adb<libgnarl/s-tpopsp__vxworks.adb \
s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
s-vxwext.adb<libgnarl/s-vxwext__kernel.adb \
system.ads<libgnat/$(SVX)-$(ARCH_STR)-kernel.ads
+ else
+ RTSERR = $(error NO SUCH RUNTIME)
endif
endif
EXTRA_GNATRTL_NONTASKING_OBJS+=i-vxinco.o i-vxwork.o i-vxwoio.o
@@ -1204,16 +1182,14 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks vxworksspe vxworks7% vxworks7spe
else
GCC_SPEC_FILES+=vxworks7-rtp-base-link.spec
endif
- GCC_SPEC_FILES+=vxworks7-cert-rtp-link__ppcXX.spec
else
GCC_SPEC_FILES+=vxworks-$(ARCH_STR)-link.spec
- GCC_SPEC_FILES+=vxworks-cert-$(ARCH_STR)-link.spec
GCC_SPEC_FILES+=vxworks-smp-$(ARCH_STR)-link.spec
endif
endif
-# x86/x86_64 VxWorks
-ifeq ($(strip $(filter-out %86 x86_64 wrs vxworks vxworks7%,$(target_cpu) $(target_vendor) $(target_os))),)
+# x86/x86_64 VxWorks7
+ifeq ($(strip $(filter-out %86 x86_64 wrs vxworks7%, $(target_cpu) $(target_vendor) $(target_os))),)
LIBGNAT_TARGET_PAIRS= \
a-intnam.ads<libgnarl/a-intnam__vxworks.ads \
@@ -1241,9 +1217,6 @@ ifeq ($(strip $(filter-out %86 x86_64 wrs vxworks vxworks7%,$(target_cpu) $(targ
g-stsifd.adb<libgnat/g-stsifd__sockets.adb \
$(ATOMICS_TARGET_PAIRS)
- VX=$(strip $(if $(filter vxworks7%, $(target_os)), vxworks7, vxworks))
- SVX=system-$(VX)
-
ifeq ($(strip $(filter-out x86_64, $(target_cpu))),)
X86CPU=x86_64
LIBGNAT_TARGET_PAIRS += $(X86_64_TARGET_PAIRS)
@@ -1260,82 +1233,56 @@ ifeq ($(strip $(filter-out %86 x86_64 wrs vxworks vxworks7%,$(target_cpu) $(targ
# The CPU setting for VxSim varies with the
# host (Windows or Linux)
- # target (VxWorks6 or VxWorks7)
# runtime (rtp or kernel)
# -------------------------------------------------------------
- # vx6 vx7
+ # vx7
# Windows (host_os = mingw32)
- # kernel SIMNT SIMNT
- # rtp SIMPENTIUM SIMNT
+ # kernel SIMNT
+ # rtp SIMNT
# Linux (host_os = linux-gnu)
- # kernel SIMLINUX SIMLINUX
- # rtp SIMPENTIUM SIMLINUX
+ # kernel SIMLINUX
+ # rtp SIMLINUX
# -------------------------------------------------------------
# It is overridden by VXSIM_CPU only in files init-vxsim.c and
# sigtramp-vxworks-vxsim.c which contain functions determined at
# runtime to be called if a program is running on VxSim vs real hardware
# (due to differences in signal context for unwinding).
- ifneq ($(strip $(filter-out vxworks7, $(target_os))),)
- ifeq ($(strip $(filter-out vxworks rtp rtp-smp,$(target_os) $(THREAD_KIND))),)
- VXSIM_CPU = SIMPENTIUM
- else
- ifeq ($(strip $(filter-out kernel kernel-smp rtp rtp-smp,$(THREAD_KIND))),)
- ifeq ($(strip $(filter-out linux%,$(host_os))),)
- # Linux
- VXSIM_CPU = SIMLINUX
- else
- # Windows
- VXSIM_CPU = SIMNT
- endif
- endif
- endif
-
- GNATLIBCFLAGS_FOR_C := $(GNATLIBCFLAGS_FOR_C) -D__VXSIM_CPU__=$(VXSIM_CPU)
+ ifeq ($(strip $(filter-out linux%,$(host_os))),)
+ # Linux
+ VXSIM_CPU = SIMLINUX
+ else
+ # Windows
+ VXSIM_CPU = SIMNT
endif
- ifeq ($(strip $(filter-out rtp,$(THREAD_KIND))),)
+ GNATLIBCFLAGS_FOR_C := $(GNATLIBCFLAGS_FOR_C) -D__VXSIM_CPU__=$(VXSIM_CPU)
+
+ ifeq ($(strip $(filter-out rtp-smp, $(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
+ s-mudido.adb<libgnarl/s-mudido__affinity.adb \
s-vxwext.ads<libgnarl/s-vxwext__rtp.ads \
- s-vxwext.adb<libgnarl/s-vxwext__rtp.adb \
- s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-rtp.adb \
- system.ads<libgnat/$(SVX)-x86-rtp.ads
+ s-vxwext.adb<libgnarl/s-vxwext__rtp-smp.adb \
+ s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-tls.adb \
+ system.ads<libgnat/system-vxworks7-$(X86CPU)-rtp-smp.ads
+
+ EXTRA_LIBGNAT_OBJS+=affinity.o
else
- ifeq ($(strip $(filter-out rtp-smp, $(THREAD_KIND))),)
+ ifeq ($(strip $(filter-out kernel-smp, $(THREAD_KIND))),)
LIBGNAT_TARGET_PAIRS += \
+ s-interr.adb<libgnarl/s-interr__vxworks.adb \
s-mudido.adb<libgnarl/s-mudido__affinity.adb \
- s-vxwext.ads<libgnarl/s-vxwext__rtp.ads \
- s-vxwext.adb<libgnarl/s-vxwext__rtp-smp.adb \
s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-tls.adb \
- system.ads<libgnat/$(SVX)-$(X86CPU)-rtp-smp.ads
+ s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
+ s-vxwext.adb<libgnarl/s-vxwext__kernel-smp.adb \
+ system.ads<libgnat/system-vxworks7-$(X86CPU)-kernel.ads
EXTRA_LIBGNAT_OBJS+=affinity.o
else
- ifeq ($(strip $(filter-out kernel-smp, $(THREAD_KIND))),)
- LIBGNAT_TARGET_PAIRS += \
- s-interr.adb<libgnarl/s-interr__vxworks.adb \
- s-mudido.adb<libgnarl/s-mudido__affinity.adb \
- s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-tls.adb \
- s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
- s-vxwext.adb<libgnarl/s-vxwext__kernel-smp.adb \
- system.ads<libgnat/$(SVX)-$(X86CPU)-kernel.ads
-
- EXTRA_LIBGNAT_OBJS+=affinity.o
- else
- LIBGNAT_TARGET_PAIRS += \
- s-interr.adb<libgnarl/s-interr__vxworks.adb \
- s-tpopsp.adb<libgnarl/s-tpopsp__vxworks.adb
-
- ifeq ($(strip $(filter-out kernel,$(THREAD_KIND))),)
- LIBGNAT_TARGET_PAIRS += \
- s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
- s-vxwext.adb<libgnarl/s-vxwext__kernel.adb \
- system.ads<libgnat/$(SVX)-x86-kernel.ads
- endif
- endif
-
- EXTRA_GNATRTL_NONTASKING_OBJS += i-vxinco.o i-vxwork.o i-vxwoio.o
+ RTSERR = $(error NO SUCH RUNTIME)
endif
+
+ EXTRA_GNATRTL_NONTASKING_OBJS += i-vxinco.o i-vxwork.o i-vxwoio.o
endif
EXTRA_GNATRTL_NONTASKING_OBJS += s-stchop.o
@@ -1346,18 +1293,11 @@ ifeq ($(strip $(filter-out %86 x86_64 wrs vxworks vxworks7%,$(target_cpu) $(targ
EXTRA_LIBGNAT_OBJS+=sigtramp-vxworks.o
EXTRA_LIBGNAT_SRCS+=$(VX_SIGTRAMP_EXTRA_SRCS)
- ifeq ($(strip $(filter-out vxworks7%, $(target_os))),)
- GCC_SPEC_FILES+=vxworks7-$(X86CPU)-rtp-base-link.spec
- GCC_SPEC_FILES+=vxworks7-cert-rtp-link.spec
- else
- GCC_SPEC_FILES+=vxworks-x86-link.spec
- GCC_SPEC_FILES+=vxworks-cert-x86-link.spec
- GCC_SPEC_FILES+=vxworks-smp-x86-link.spec
- endif
+ GCC_SPEC_FILES+=vxworks7-$(X86CPU)-rtp-base-link.spec
endif
-# ARM and Aarch64 VxWorks
-ifeq ($(strip $(filter-out aarch64 arm% coff wrs vx%,$(target_cpu) $(target_vendor) $(target_os))),)
+# ARM and Aarch64 VxWorks7
+ifeq ($(strip $(filter-out aarch64 arm wrs vxworks7%, $(target_cpu) $(target_vendor) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
a-intnam.ads<libgnarl/a-intnam__vxworks.ads \
@@ -1387,7 +1327,6 @@ ifeq ($(strip $(filter-out aarch64 arm% coff wrs vx%,$(target_cpu) $(target_vend
ifeq ($(strip $(filter-out aarch64, $(target_cpu))),)
ARCH_STR=aarch64
- VX=vxworks7
EH_MECHANISM=-gcc
SIGTRAMP_OBJ=sigtramp-vxworks.o
LIBGNAT_TARGET_PAIRS += $(GNATRTL_128BIT_PAIRS) \
@@ -1395,26 +1334,13 @@ ifeq ($(strip $(filter-out aarch64 arm% coff wrs vx%,$(target_cpu) $(target_vend
s-dorepr.adb<libgnat/s-dorepr__fma.adb
EXTRA_GNATRTL_NONTASKING_OBJS += $(GNATRTL_128BIT_OBJS)
else
- ifeq ($(strip $(filter-out arm%, $(target_cpu))),)
- ARCH_STR=arm
- ifeq ($(strip $(filter-out vxworks7%, $(target_os))),)
- VX=vxworks7
- EH_MECHANISM=-arm
- SIGTRAMP_OBJ=sigtramp-armvxworks.o
- else
- VX=vxworks
- EH_MECHANISM=-gcc
- SIGTRAMP_OBJ=sigtramp-vxworks.o
- endif
- else
- ARCH_STR=coff
- endif
+ ARCH_STR=arm
+ EH_MECHANISM=-arm
+ SIGTRAMP_OBJ=sigtramp-armvxworks.o
endif
LIBGNAT_TARGET_PAIRS += s-vxwork.ads<libgnarl/s-vxwork__$(ARCH_STR).ads
- SVX=system-$(VX)
-
TOOLS_TARGET_PAIRS=indepsw.adb<indepsw-gnu.adb
ifeq ($(strip $(filter-out rtp-smp,$(THREAD_KIND))),)
@@ -1423,7 +1349,7 @@ ifeq ($(strip $(filter-out aarch64 arm% coff wrs vx%,$(target_cpu) $(target_vend
s-vxwext.ads<libgnarl/s-vxwext__rtp.ads \
s-vxwext.adb<libgnarl/s-vxwext__rtp-smp.adb \
s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-tls.adb \
- system.ads<libgnat/$(SVX)-$(ARCH_STR)-rtp-smp.ads
+ system.ads<libgnat/system-vxworks7-$(ARCH_STR)-rtp-smp.ads
EXTRA_LIBGNAT_OBJS+=affinity.o
@@ -1436,25 +1362,14 @@ ifeq ($(strip $(filter-out aarch64 arm% coff wrs vx%,$(target_cpu) $(target_vend
s-tpopsp.adb<libgnarl/s-tpopsp__vxworks-tls.adb \
s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
s-vxwext.adb<libgnarl/s-vxwext__kernel-smp.adb \
- system.ads<libgnat/$(SVX)-$(ARCH_STR).ads
+ system.ads<libgnat/system-vxworks7-$(ARCH_STR).ads
EXTRA_LIBGNAT_OBJS+=affinity.o
EXTRA_LIBGNAT_OBJS+=$(SIGTRAMP_OBJ)
EXTRA_LIBGNAT_SRCS+=$(VX_SIGTRAMP_EXTRA_SRCS)
else
- LIBGNAT_TARGET_PAIRS += \
- s-tpopsp.adb<libgnarl/s-tpopsp__vxworks.adb \
- system.ads<libgnat/$(SVX)-$(ARCH_STR).ads
-
- ifeq ($(strip $(filter-out kernel,$(THREAD_KIND))),)
- LIBGNAT_TARGET_PAIRS += \
- s-vxwext.ads<libgnarl/s-vxwext__kernel.ads \
- s-vxwext.adb<libgnarl/s-vxwext__kernel.adb
-
- EXTRA_LIBGNAT_OBJS+=$(SIGTRAMP_OBJ)
- EXTRA_LIBGNAT_SRCS+=$(VX_SIGTRAMP_EXTRA_SRCS)
- endif
+ RTSERR = $(error NO SUCH RUNTIME)
endif
endif
@@ -1463,21 +1378,7 @@ ifeq ($(strip $(filter-out aarch64 arm% coff wrs vx%,$(target_cpu) $(target_vend
EXTRA_LIBGNAT_OBJS+=vx_stack_info.o
- ifeq ($(strip $(filter-out arm vxworks7%, $(target_cpu) $(target_os))),)
- GCC_SPEC_FILES+=vxworks7-rtp-base-link.spec
- else
- ifeq ($(strip $(filter-out aarch64, $(target_cpu))),)
- GCC_SPEC_FILES+=vxworks7-rtp-base-link.spec
- endif
-
- ifneq ($(strip $(filter-out vxworks7%, $(target_os))),)
- GCC_SPEC_FILES+=vxworks-arm-link.spec
- GCC_SPEC_FILES+=vxworks-smp-arm-link.spec
- endif
- endif
- ifeq ($(strip $(filter-out vxworks7%, $(target_os))),)
- GCC_SPEC_FILES+=vxworks7-cert-rtp-link.spec
- endif
+ GCC_SPEC_FILES+=vxworks7-rtp-base-link.spec
endif
# ARM android
@@ -2943,6 +2844,7 @@ ADA_EXCLUDE_SRCS =\
s-linux.ads s-vxwext.adb s-vxwext.ads s-win32.ads s-winext.ads \
s-stchop.ads s-stchop.adb \
s-strcom.adb s-strcom.ads s-thread.ads \
+ s-qnx.ads \
# ADA_EXCLUDE_SRCS without the sources used by the target
ADA_EXCLUDE_FILES=$(filter-out \
@@ -2950,7 +2852,10 @@ ADA_EXCLUDE_FILES=$(filter-out \
$(patsubst %$(objext),%.adb,$(GNATRTL_OBJS)), \
$(ADA_EXCLUDE_SRCS))
-setup-rts: force
+.PHONY: rts-err
+rts-err: ; $(RTSERR)
+
+setup-rts: rts-err force
$(RMDIR) $(RTSDIR)
$(MKDIR) $(RTSDIR)
$(CHMOD) u+w $(RTSDIR)
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index 2631be5..26daf26 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -254,8 +254,6 @@ extern char *__gnat_to_host_dir_spec (char *, int);
extern char *__gnat_to_host_file_spec (char *);
extern char *__gnat_to_canonical_path_spec (char *);
extern void __gnat_adjust_os_resource_limits (void);
-extern void convert_addresses (const char *, void *, int,
- void *, int *);
extern int __gnat_copy_attribs (char *, char *, int);
extern int __gnat_feof (FILE *);
extern int __gnat_ferror (FILE *);
diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb
index 2d7962c..446c796 100644
--- a/gcc/ada/atree.adb
+++ b/gcc/ada/atree.adb
@@ -1966,7 +1966,7 @@ package body Atree is
end if;
end Paren_Count;
- function Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id is
+ function Node_Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id is
begin
pragma Assert (Present (N));
@@ -1975,7 +1975,7 @@ package body Atree is
else
return Node_Or_Entity_Id (Link (N));
end if;
- end Parent;
+ end Node_Parent;
-------------
-- Present --
@@ -2292,12 +2292,12 @@ package body Atree is
-- Set_Parent --
----------------
- procedure Set_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id) is
+ procedure Set_Node_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id) is
begin
pragma Assert (Present (N));
pragma Assert (not In_List (N));
Set_Link (N, Union_Id (Val));
- end Set_Parent;
+ end Set_Node_Parent;
------------------------
-- Set_Reporting_Proc --
diff --git a/gcc/ada/atree.ads b/gcc/ada/atree.ads
index 9d01cfc..0c809f5 100644
--- a/gcc/ada/atree.ads
+++ b/gcc/ada/atree.ads
@@ -446,10 +446,15 @@ package Atree is
-- Tests given Id for equality with the Empty node. This allows notations
-- like "if No (Variant_Part)" as opposed to "if Variant_Part = Empty".
- function Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id;
+ function Node_Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id;
+ pragma Inline (Node_Parent);
+ function Parent (N : Node_Or_Entity_Id) return Node_Or_Entity_Id
+ renames Node_Parent;
pragma Inline (Parent);
-- Returns the parent of a node if the node is not a list member, or else
-- the parent of the list containing the node if the node is a list member.
+ -- Parent has the same name as the one in Nlists; Node_Parent can be used
+ -- more easily in the debugger.
function Paren_Count (N : Node_Id) return Nat;
pragma Inline (Paren_Count);
@@ -465,7 +470,10 @@ package Atree is
-- Note that this routine is used only in very peculiar cases. In normal
-- cases, the Original_Node link is set by calls to Rewrite.
- procedure Set_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id);
+ procedure Set_Node_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id);
+ pragma Inline (Set_Node_Parent);
+ procedure Set_Parent (N : Node_Or_Entity_Id; Val : Node_Or_Entity_Id)
+ renames Set_Node_Parent;
pragma Inline (Set_Parent);
procedure Set_Paren_Count (N : Node_Id; Val : Nat);
diff --git a/gcc/ada/atree.h b/gcc/ada/atree.h
index 3b736ca..d35f0ad 100644
--- a/gcc/ada/atree.h
+++ b/gcc/ada/atree.h
@@ -35,7 +35,7 @@
extern "C" {
#endif
-#define Parent atree__parent
+#define Parent atree__node_parent
extern Node_Id Parent (Node_Id);
#define Original_Node atree__original_node
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 204d13e..22577c8 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -2297,6 +2297,15 @@ package body Checks is
Assign : constant Node_Id := Parent (Target);
begin
+ -- Do not apply length checks if parent is still an assignment statement
+ -- with Suppress_Assignment_Checks flag set.
+
+ if Nkind (Assign) = N_Assignment_Statement
+ and then Suppress_Assignment_Checks (Assign)
+ then
+ return;
+ end if;
+
-- No check is needed for the initialization of an object whose
-- nominal subtype is unconstrained.
@@ -6462,7 +6471,7 @@ package body Checks is
end if;
-- Do not set range check flag if parent is assignment statement or
- -- object declaration with Suppress_Assignment_Checks flag set
+ -- object declaration with Suppress_Assignment_Checks flag set.
if Nkind (Parent (N)) in N_Assignment_Statement | N_Object_Declaration
and then Suppress_Assignment_Checks (Parent (N))
@@ -10500,6 +10509,11 @@ package body Checks is
-- Returns expression to compute:
-- N'First or N'Last using Duplicate_Subexpr_No_Checks
+ function Is_Cond_Expr_Ge (N : Node_Id; V : Node_Id) return Boolean;
+ function Is_Cond_Expr_Le (N : Node_Id; V : Node_Id) return Boolean;
+ -- Return True if N is a conditional expression whose dependent
+ -- expressions are all known and greater/lower than or equal to V.
+
function Range_E_Cond
(Exptyp : Entity_Id;
Typ : Entity_Id;
@@ -10522,6 +10536,16 @@ package body Checks is
-- Return expression to compute:
-- Exp'First < Typ'First or else Exp'Last > Typ'Last
+ function "<" (Left, Right : Node_Id) return Boolean
+ is (if Is_Floating_Point_Type (S_Typ)
+ then Expr_Value_R (Left) < Expr_Value_R (Right)
+ else Expr_Value (Left) < Expr_Value (Right));
+ function "<=" (Left, Right : Node_Id) return Boolean
+ is (if Is_Floating_Point_Type (S_Typ)
+ then Expr_Value_R (Left) <= Expr_Value_R (Right)
+ else Expr_Value (Left) <= Expr_Value (Right));
+ -- Convenience comparison functions of integer or floating point values
+
---------------
-- Add_Check --
---------------
@@ -10702,6 +10726,60 @@ package body Checks is
Make_Integer_Literal (Loc, Indx)));
end Get_N_Last;
+ ---------------------
+ -- Is_Cond_Expr_Ge --
+ ---------------------
+
+ function Is_Cond_Expr_Ge (N : Node_Id; V : Node_Id) return Boolean is
+ begin
+ -- Only if expressions are relevant for the time being
+
+ if Nkind (N) = N_If_Expression then
+ declare
+ Cond : constant Node_Id := First (Expressions (N));
+ Thenx : constant Node_Id := Next (Cond);
+ Elsex : constant Node_Id := Next (Thenx);
+
+ begin
+ return Compile_Time_Known_Value (Thenx)
+ and then V <= Thenx
+ and then
+ ((Compile_Time_Known_Value (Elsex) and then V <= Elsex)
+ or else Is_Cond_Expr_Ge (Elsex, V));
+ end;
+
+ else
+ return False;
+ end if;
+ end Is_Cond_Expr_Ge;
+
+ ---------------------
+ -- Is_Cond_Expr_Le --
+ ---------------------
+
+ function Is_Cond_Expr_Le (N : Node_Id; V : Node_Id) return Boolean is
+ begin
+ -- Only if expressions are relevant for the time being
+
+ if Nkind (N) = N_If_Expression then
+ declare
+ Cond : constant Node_Id := First (Expressions (N));
+ Thenx : constant Node_Id := Next (Cond);
+ Elsex : constant Node_Id := Next (Thenx);
+
+ begin
+ return Compile_Time_Known_Value (Thenx)
+ and then Thenx <= V
+ and then
+ ((Compile_Time_Known_Value (Elsex) and then Elsex <= V)
+ or else Is_Cond_Expr_Le (Elsex, V));
+ end;
+
+ else
+ return False;
+ end if;
+ end Is_Cond_Expr_Le;
+
------------------
-- Range_E_Cond --
------------------
@@ -10783,13 +10861,6 @@ package body Checks is
Get_E_First_Or_Last (Loc, Typ, Indx, Name_Last)));
end Range_N_Cond;
- function "<" (Left, Right : Node_Id) return Boolean
- is (if Is_Floating_Point_Type (S_Typ)
- then Expr_Value_R (Left) < Expr_Value_R (Right)
- else Expr_Value (Left) < Expr_Value (Right));
- -- Convenience comparison function of integer or floating point
- -- values.
-
-- Start of processing for Selected_Range_Checks
begin
@@ -10885,6 +10956,14 @@ package body Checks is
then
LB := T_LB;
Known_LB := True;
+
+ -- Similarly; deal with the case where the low bound is a
+ -- conditional expression whose result is greater than or
+ -- equal to the target low bound.
+
+ elsif Is_Cond_Expr_Ge (LB, T_LB) then
+ LB := T_LB;
+ Known_LB := True;
end if;
-- Likewise for the high bound
@@ -10897,6 +10976,10 @@ package body Checks is
then
HB := T_HB;
Known_HB := True;
+
+ elsif Is_Cond_Expr_Le (HB, T_HB) then
+ HB := T_HB;
+ Known_HB := True;
end if;
end if;
diff --git a/gcc/ada/cstreams.c b/gcc/ada/cstreams.c
index 48f996d..10cc3a6 100644
--- a/gcc/ada/cstreams.c
+++ b/gcc/ada/cstreams.c
@@ -202,19 +202,6 @@ __gnat_full_name (char *nam, char *buffer)
getcwd approach instead. */
realpath (nam, buffer);
-#elif defined (__QNX__)
-
- int length;
-
- if (__gnat_is_absolute_path (nam, strlen (nam)))
- realpath (nam, buffer);
- else
- {
- length = __gnat_max_path_len;
- __gnat_get_current_dir (buffer, &length);
- strncat (buffer, nam, __gnat_max_path_len - length - 1);
- }
-
#elif defined (__vxworks)
/* On VxWorks systems, an absolute path can be represented (depending on
diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb
index a03c88d..d0bcdb0 100644
--- a/gcc/ada/debug.adb
+++ b/gcc/ada/debug.adb
@@ -211,7 +211,7 @@ package body Debug is
-- d.6 Do not avoid declaring unreferenced types in C code
-- d.7 Disable unsound heuristics in gnat2scil (for CP as SPARK prover)
-- d.8 Disable unconditional inlining of expression functions
- -- d.9 Disable build-in-place for nonlimited types
+ -- d.9
-- d_1
-- d_2
@@ -1125,9 +1125,6 @@ package body Debug is
-- This debug flag turns off this behavior, making them subject
-- to the usual inlining heuristics of the code generator.
- -- d.9 Disable build-in-place for function calls returning nonlimited
- -- types.
-
------------------------------------------
-- Documentation for Binder Debug Flags --
------------------------------------------
diff --git a/gcc/ada/debug_a.adb b/gcc/ada/debug_a.adb
index 9ed1939..bded8ab 100644
--- a/gcc/ada/debug_a.adb
+++ b/gcc/ada/debug_a.adb
@@ -25,6 +25,7 @@
with Atree; use Atree;
with Debug; use Debug;
+with Namet; use Namet;
with Sinfo; use Sinfo;
with Sinfo.Nodes; use Sinfo.Nodes;
with Sinput; use Sinput;
@@ -33,7 +34,7 @@ with Output; use Output;
package body Debug_A is
Debug_A_Depth : Natural := 0;
- -- Output for the debug A flag is preceded by a sequence of vertical bar
+ -- Output for the -gnatda switch is preceded by a sequence of vertical bar
-- characters corresponding to the recursion depth of the actions being
-- recorded (analysis, expansion, resolution and evaluation of nodes)
-- This variable records the depth.
@@ -66,7 +67,7 @@ package body Debug_A is
procedure Debug_A_Entry (S : String; N : Node_Id) is
begin
- -- Output debugging information if -gnatda flag set
+ -- Output debugging information if -gnatda switch set
if Debug_Flag_A then
Debug_Output_Astring;
@@ -77,6 +78,19 @@ package body Debug_A is
Write_Location (Sloc (N));
Write_Str (" ");
Write_Str (Node_Kind'Image (Nkind (N)));
+
+ -- Print the Chars field, if appropriate
+
+ case Nkind (N) is
+ when N_Has_Chars =>
+ Write_Str (" """);
+ if Present (Chars (N)) then
+ Write_Str (Get_Name_String (Chars (N)));
+ end if;
+ Write_Str ("""");
+ when others => null;
+ end case;
+
Write_Eol;
end if;
@@ -115,7 +129,7 @@ package body Debug_A is
end if;
end loop;
- -- Output debugging information if -gnatda flag set
+ -- Output debugging information if -gnatda switch set
if Debug_Flag_A then
Debug_Output_Astring;
@@ -132,18 +146,8 @@ package body Debug_A is
--------------------------
procedure Debug_Output_Astring is
- Vbars : constant String := "|||||||||||||||||||||||||";
begin
- if Debug_A_Depth > Vbars'Length then
- for I in Vbars'Length .. Debug_A_Depth loop
- Write_Char ('|');
- end loop;
-
- Write_Str (Vbars);
-
- else
- Write_Str (Vbars (1 .. Debug_A_Depth));
- end if;
+ Write_Str ((1 .. Debug_A_Depth => '|'));
end Debug_Output_Astring;
end Debug_A;
diff --git a/gcc/ada/debug_a.ads b/gcc/ada/debug_a.ads
index 427d4a3..bcc1212 100644
--- a/gcc/ada/debug_a.ads
+++ b/gcc/ada/debug_a.ads
@@ -23,7 +23,7 @@
-- --
------------------------------------------------------------------------------
--- This package contains data and subprograms to support the A debug switch
+-- This package contains data and subprograms to support the -gnatda switch
-- that is used to generate output showing what node is being analyzed,
-- resolved, evaluated, or expanded.
@@ -44,18 +44,18 @@ package Debug_A is
-- Generates a message prefixed by a sequence of bars showing the nesting
-- depth (depth increases by 1 for a Debug_A_Entry call and is decreased
-- by the corresponding Debug_A_Exit call). Then the string is output
- -- (analyzing, expanding etc), followed by the node number and its kind.
- -- This output is generated only if the debug A flag is set. If the debug
- -- A flag is not set, then no output is generated. This call also sets the
- -- Node_Id value in Atree.Current_Error_Node in case a bomb occurs. This
- -- is done unconditionally, whether or not the debug A flag is set.
+ -- (analyzing, expanding etc), followed by information about the node.
+ -- This output is generated only if the -gnatda switch is set. If that
+ -- switch is not set, then no output is generated. This call also sets the
+ -- Node_Id value in Atree.Current_Error_Node in case a bomb occurs. This is
+ -- done unconditionally, whether or not the switch is set.
procedure Debug_A_Exit (S : String; N : Node_Id; Comment : String);
pragma Inline (Debug_A_Exit);
-- Generates the corresponding termination message. The message is preceded
-- by a sequence of bars, followed by the string S, the node number, and
-- a trailing comment (e.g. " (already evaluated)"). This output is
- -- generated only if the debug A flag is set. If the debug A flag is not
+ -- generated only if the -gnatda switch is set. If that switch is not
-- set, then no output is generated. This call also resets the value in
-- Atree.Current_Error_Node to what it was before the corresponding call
-- to Debug_A_Entry.
diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
index af85600..4318a34 100644
--- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
+++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
@@ -5504,9 +5504,9 @@ overloaded declaration exists, in which case the pragma applies
to all entities). It specifies that the function ``Entity`` is
to be considered pure for the purposes of code generation. This means
that the compiler can assume that there are no side effects, and
-in particular that two calls with identical arguments produce the
-same result. It also means that the function can be used in an
-address clause.
+in particular that two identical calls produce the same result in
+the same context. It also means that the function can be used in
+an address clause.
Note that, quite deliberately, there are no static checks to try
to ensure that this promise is met, so ``Pure_Function`` can be used
diff --git a/gcc/ada/doc/gnat_rm/the_gnat_library.rst b/gcc/ada/doc/gnat_rm/the_gnat_library.rst
index 72ec5e6..524e3e0 100644
--- a/gcc/ada/doc/gnat_rm/the_gnat_library.rst
+++ b/gcc/ada/doc/gnat_rm/the_gnat_library.rst
@@ -253,10 +253,32 @@ in mind, it may well be generally useful in that it is a simplified more
efficient version than the one defined in the standard. In particular it
does not have the complex overhead required to detect cursor tampering.
+.. _`Ada.Containers.Functional_Infinite_Sequences_(a-cfinse.ads)`:
+
+``Ada.Containers.Functional_Infinite_Sequences`` (:file:`a-cfinse.ads`)
+=======================================================================
+
+.. index:: Ada.Containers.Functional_Infinite_Sequences (a-cfinse.ads)
+
+.. index:: Functional Infinite Sequences
+
+This child of ``Ada.Containers`` defines immutable sequences indexed by
+``Big_Integer``. These containers are unbounded and may contain indefinite
+elements. Their API features functions creating new containers from existing
+ones. To remain reasonably efficient, their implementation involves sharing
+between data-structures. As they are functional, that is, no primitives are
+provided which would allow modifying an existing container, these containers
+can still be used safely.
+
+These containers are controlled so that the allocated memory can be reclaimed
+when the container is no longer referenced. Thus, they cannot directly be used
+in contexts where controlled types are not supported.
+The specification of this unit is compatible with SPARK 2014.
+
.. _`Ada.Containers.Functional_Vectors_(a-cofuve.ads)`:
``Ada.Containers.Functional_Vectors`` (:file:`a-cofuve.ads`)
-=================================================================
+============================================================
.. index:: Ada.Containers.Functional_Vectors (a-cofuve.ads)
@@ -278,46 +300,44 @@ specification of this unit is compatible with SPARK 2014.
.. _`Ada.Containers.Functional_Sets_(a-cofuse.ads)`:
``Ada.Containers.Functional_Sets`` (:file:`a-cofuse.ads`)
-=================================================================
+=========================================================
.. index:: Ada.Containers.Functional_Sets (a-cofuse.ads)
.. index:: Functional sets
This child of ``Ada.Containers`` defines immutable sets. These containers are
-unbounded and may contain indefinite elements. Furthermore, to be usable in
-every context, they are neither controlled nor limited. As they are functional,
-that is, no primitives are provided which would allow modifying an existing
-container, these containers can still be used safely.
+unbounded and may contain indefinite elements. Their API features functions
+creating new containers from existing ones. To remain reasonably efficient,
+their implementation involves sharing between data-structures. As they are
+functional, that is, no primitives are provided which would allow modifying an
+existing container, these containers can still be used safely.
-Their API features functions creating new containers from existing ones.
-As a consequence, these containers are highly inefficient. They are also
-memory consuming, as the allocated memory is not reclaimed when the container
-is no longer referenced. Thus, they should in general be used in ghost code
-and annotations, so that they can be removed from the final executable. The
-specification of this unit is compatible with SPARK 2014.
+These containers are controlled so that the allocated memory can be reclaimed
+when the container is no longer referenced. Thus, they cannot directly be used
+in contexts where controlled types are not supported.
+The specification of this unit is compatible with SPARK 2014.
.. _`Ada.Containers.Functional_Maps_(a-cofuma.ads)`:
``Ada.Containers.Functional_Maps`` (:file:`a-cofuma.ads`)
-=================================================================
+=========================================================
.. index:: Ada.Containers.Functional_Maps (a-cofuma.ads)
.. index:: Functional maps
This child of ``Ada.Containers`` defines immutable maps. These containers are
-unbounded and may contain indefinite elements. Furthermore, to be usable in
-every context, they are neither controlled nor limited. As they are functional,
-that is, no primitives are provided which would allow modifying an existing
-container, these containers can still be used safely.
-
-Their API features functions creating new containers from existing ones.
-As a consequence, these containers are highly inefficient. They are also
-memory consuming, as the allocated memory is not reclaimed when the container
-is no longer referenced. Thus, they should in general be used in ghost code
-and annotations, so that they can be removed from the final executable. The
-specification of this unit is compatible with SPARK 2014.
+unbounded and may contain indefinite elements. Their API features functions
+creating new containers from existing ones. To remain reasonably efficient,
+their implementation involves sharing between data-structures. As they are
+functional, that is, no primitives are provided which would allow modifying an
+existing container, these containers can still be used safely.
+
+These containers are controlled so that the allocated memory can be reclaimed
+when the container is no longer referenced. Thus, they cannot directly be used
+in contexts where controlled types are not supported.
+The specification of this unit is compatible with SPARK 2014.
.. _`Ada.Containers.Bounded_Holders_(a-coboho.ads)`:
diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
index 29293e1..c0eeca4 100644
--- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
+++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
@@ -3277,8 +3277,7 @@ of the pragma in the :title:`GNAT_Reference_manual`).
If this warning option is activated, then warnings are generated for
calls to subprograms marked with ``pragma Obsolescent`` and
for use of features in Annex J of the Ada Reference Manual. In the
- case of Annex J, not all features are flagged. In particular use
- of the renamed packages (like ``Text_IO``) and use of package
+ case of Annex J, not all features are flagged. In particular, uses of package
``ASCII`` are not flagged, since these are very common and
would generate many annoying positive warnings. The default is that
such warnings are not generated.
@@ -4331,15 +4330,31 @@ Debugging and Assertion Control
Which is a shorthand for::
pragma Assertion_Policy
- (Assert => Check,
- Static_Predicate => Check,
- Dynamic_Predicate => Check,
- Pre => Check,
- Pre'Class => Check,
- Post => Check,
- Post'Class => Check,
- Type_Invariant => Check,
- Type_Invariant'Class => Check);
+ -- Ada RM assertion pragmas
+ (Assert => Check,
+ Static_Predicate => Check,
+ Dynamic_Predicate => Check,
+ Pre => Check,
+ Pre'Class => Check,
+ Post => Check,
+ Post'Class => Check,
+ Type_Invariant => Check,
+ Type_Invariant'Class => Check,
+ Default_Initial_Condition => Check,
+ -- GNAT specific assertion pragmas
+ Assert_And_Cut => Check,
+ Assume => Check,
+ Contract_Cases => Check,
+ Debug => Check,
+ Ghost => Check,
+ Initial_Condition => Check,
+ Loop_Invariant => Check,
+ Loop_Variant => Check,
+ Postcondition => Check,
+ Precondition => Check,
+ Predicate => Check,
+ Refined_Post => Check,
+ Subprogram_Variant => Check);
The pragmas ``Assert`` and ``Debug`` normally have no effect and
are ignored. This switch, where ``a`` stands for 'assert', causes
diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb
index 5e778b1..27531f4 100644
--- a/gcc/ada/einfo-utils.adb
+++ b/gcc/ada/einfo-utils.adb
@@ -28,7 +28,6 @@ with Elists; use Elists;
with Nlists; use Nlists;
with Output; use Output;
with Sinfo; use Sinfo;
-with Sinfo.Nodes; use Sinfo.Nodes;
with Sinfo.Utils; use Sinfo.Utils;
package body Einfo.Utils is
@@ -307,7 +306,7 @@ package body Einfo.Utils is
return Ekind (Id) in Generic_Unit_Kind;
end Is_Generic_Unit;
- function Is_Ghost_Entity (Id : Entity_Id) return Boolean is
+ function Is_Ghost_Entity (Id : E) return Boolean is
begin
return Is_Checked_Ghost_Entity (Id) or else Is_Ignored_Ghost_Entity (Id);
end Is_Ghost_Entity;
@@ -593,7 +592,7 @@ package body Einfo.Utils is
-- Address_Clause --
--------------------
- function Address_Clause (Id : E) return N is
+ function Address_Clause (Id : E) return Node_Id is
begin
return Get_Attribute_Definition_Clause (Id, Attribute_Address);
end Address_Clause;
@@ -618,7 +617,7 @@ package body Einfo.Utils is
-- Alignment_Clause --
----------------------
- function Alignment_Clause (Id : E) return N is
+ function Alignment_Clause (Id : E) return Node_Id is
begin
return Get_Attribute_Definition_Clause (Id, Attribute_Alignment);
end Alignment_Clause;
@@ -672,7 +671,7 @@ package body Einfo.Utils is
-- Declaration_Node --
----------------------
- function Declaration_Node (Id : E) return N is
+ function Declaration_Node (Id : E) return Node_Id is
P : Node_Id;
begin
@@ -771,7 +770,7 @@ package body Einfo.Utils is
-- First_Component --
---------------------
- function First_Component (Id : E) return E is
+ function First_Component (Id : E) return Entity_Id is
Comp_Id : Entity_Id;
begin
@@ -793,7 +792,7 @@ package body Einfo.Utils is
-- First_Component_Or_Discriminant --
-------------------------------------
- function First_Component_Or_Discriminant (Id : E) return E is
+ function First_Component_Or_Discriminant (Id : E) return Entity_Id is
Comp_Id : Entity_Id;
begin
@@ -816,7 +815,7 @@ package body Einfo.Utils is
-- First_Formal --
------------------
- function First_Formal (Id : E) return E is
+ function First_Formal (Id : E) return Entity_Id is
Formal : Entity_Id;
begin
@@ -857,7 +856,7 @@ package body Einfo.Utils is
-- First_Formal_With_Extras --
------------------------------
- function First_Formal_With_Extras (Id : E) return E is
+ function First_Formal_With_Extras (Id : E) return Entity_Id is
Formal : Entity_Id;
begin
@@ -1383,7 +1382,7 @@ package body Einfo.Utils is
-- Invariant_Procedure --
-------------------------
- function Invariant_Procedure (Id : E) return E is
+ function Invariant_Procedure (Id : E) return Entity_Id is
Subp_Elmt : Elmt_Id;
Subp_Id : Entity_Id;
Subps : Elist_Id;
@@ -1525,7 +1524,7 @@ package body Einfo.Utils is
-- Is_Elaboration_Target --
---------------------------
- function Is_Elaboration_Target (Id : Entity_Id) return Boolean is
+ function Is_Elaboration_Target (Id : E) return Boolean is
begin
return
Ekind (Id) in E_Constant | E_Package | E_Variable
@@ -1768,7 +1767,7 @@ package body Einfo.Utils is
-- Last_Formal --
-----------------
- function Last_Formal (Id : E) return E is
+ function Last_Formal (Id : E) return Entity_Id is
Formal : Entity_Id;
begin
@@ -1911,7 +1910,7 @@ package body Einfo.Utils is
-- Next_Component --
--------------------
- function Next_Component (Id : E) return E is
+ function Next_Component (Id : E) return Entity_Id is
Comp_Id : Entity_Id;
begin
@@ -1928,7 +1927,7 @@ package body Einfo.Utils is
-- Next_Component_Or_Discriminant --
------------------------------------
- function Next_Component_Or_Discriminant (Id : E) return E is
+ function Next_Component_Or_Discriminant (Id : E) return Entity_Id is
Comp_Id : Entity_Id;
begin
@@ -1949,7 +1948,7 @@ package body Einfo.Utils is
-- Next_Stored_Discriminant by making sure that the Discriminant
-- returned is of the same variety as Id.
- function Next_Discriminant (Id : E) return E is
+ function Next_Discriminant (Id : E) return Entity_Id is
-- Derived Tagged types with private extensions look like this...
@@ -1962,7 +1961,7 @@ package body Einfo.Utils is
-- so it is critical not to go past the leading discriminants
- D : E := Id;
+ D : Entity_Id := Id;
begin
pragma Assert (Ekind (Id) = E_Discriminant);
@@ -1987,7 +1986,7 @@ package body Einfo.Utils is
-- Next_Formal --
-----------------
- function Next_Formal (Id : E) return E is
+ function Next_Formal (Id : E) return Entity_Id is
P : Entity_Id;
begin
@@ -2012,7 +2011,7 @@ package body Einfo.Utils is
-- Next_Formal_With_Extras --
-----------------------------
- function Next_Formal_With_Extras (Id : E) return E is
+ function Next_Formal_With_Extras (Id : E) return Entity_Id is
begin
if Present (Extra_Formal (Id)) then
return Extra_Formal (Id);
@@ -2025,7 +2024,7 @@ package body Einfo.Utils is
-- Next_Index --
----------------
- function Next_Index (Id : Node_Id) return Node_Id is
+ function Next_Index (Id : N) return Node_Id is
begin
pragma Assert (Nkind (Id) in N_Is_Index);
pragma Assert (No (Next (Id)) or else Nkind (Next (Id)) in N_Is_Index);
@@ -2036,7 +2035,7 @@ package body Einfo.Utils is
-- Next_Literal --
------------------
- function Next_Literal (Id : E) return E is
+ function Next_Literal (Id : E) return Entity_Id is
begin
pragma Assert (Nkind (Id) in N_Entity);
return Next (Id);
@@ -2046,7 +2045,7 @@ package body Einfo.Utils is
-- Next_Stored_Discriminant --
------------------------------
- function Next_Stored_Discriminant (Id : E) return E is
+ function Next_Stored_Discriminant (Id : E) return Entity_Id is
begin
-- See comment in Next_Discriminant
@@ -2124,7 +2123,7 @@ package body Einfo.Utils is
-- Object_Size_Clause --
------------------------
- function Object_Size_Clause (Id : E) return N is
+ function Object_Size_Clause (Id : E) return Node_Id is
begin
return Get_Attribute_Definition_Clause (Id, Attribute_Object_Size);
end Object_Size_Clause;
@@ -2142,7 +2141,7 @@ package body Einfo.Utils is
-- DIC_Procedure --
-------------------
- function DIC_Procedure (Id : E) return E is
+ function DIC_Procedure (Id : E) return Entity_Id is
Subp_Elmt : Elmt_Id;
Subp_Id : Entity_Id;
Subps : Elist_Id;
@@ -2174,7 +2173,7 @@ package body Einfo.Utils is
return Empty;
end DIC_Procedure;
- function Partial_DIC_Procedure (Id : E) return E is
+ function Partial_DIC_Procedure (Id : E) return Entity_Id is
Subp_Elmt : Elmt_Id;
Subp_Id : Entity_Id;
Subps : Elist_Id;
@@ -2227,7 +2226,7 @@ package body Einfo.Utils is
-- Partial_Invariant_Procedure --
---------------------------------
- function Partial_Invariant_Procedure (Id : E) return E is
+ function Partial_Invariant_Procedure (Id : E) return Entity_Id is
Subp_Elmt : Elmt_Id;
Subp_Id : Entity_Id;
Subps : Elist_Id;
@@ -2340,7 +2339,7 @@ package body Einfo.Utils is
-- Predicate_Function --
------------------------
- function Predicate_Function (Id : E) return E is
+ function Predicate_Function (Id : E) return Entity_Id is
Subp_Elmt : Elmt_Id;
Subp_Id : Entity_Id;
Subps : Elist_Id;
@@ -2835,8 +2834,8 @@ package body Einfo.Utils is
-- Size_Clause --
-----------------
- function Size_Clause (Id : E) return N is
- Result : N := Get_Attribute_Definition_Clause (Id, Attribute_Size);
+ function Size_Clause (Id : E) return Node_Id is
+ Result : Node_Id := Get_Attribute_Definition_Clause (Id, Attribute_Size);
begin
if No (Result) then
Result := Get_Attribute_Definition_Clause (Id, Attribute_Value_Size);
@@ -2938,7 +2937,7 @@ package body Einfo.Utils is
-- Type_High_Bound --
---------------------
- function Type_High_Bound (Id : E) return Node_Id is
+ function Type_High_Bound (Id : E) return N is
Rng : constant Node_Id := Scalar_Range (Id);
begin
if Nkind (Rng) = N_Subtype_Indication then
@@ -2952,7 +2951,7 @@ package body Einfo.Utils is
-- Type_Low_Bound --
--------------------
- function Type_Low_Bound (Id : E) return Node_Id is
+ function Type_Low_Bound (Id : E) return N is
Rng : constant Node_Id := Scalar_Range (Id);
begin
if Nkind (Rng) = N_Subtype_Indication then
@@ -2966,7 +2965,7 @@ package body Einfo.Utils is
-- Underlying_Type --
---------------------
- function Underlying_Type (Id : E) return E is
+ function Underlying_Type (Id : E) return Entity_Id is
begin
-- For record_with_private the underlying type is always the direct full
-- view. Never try to take the full view of the parent it does not make
diff --git a/gcc/ada/einfo-utils.ads b/gcc/ada/einfo-utils.ads
index d830c8d..beaf1bf 100644
--- a/gcc/ada/einfo-utils.ads
+++ b/gcc/ada/einfo-utils.ads
@@ -24,6 +24,7 @@
------------------------------------------------------------------------------
with Einfo.Entities; use Einfo.Entities;
+with Sinfo.Nodes; use Sinfo.Nodes;
package Einfo.Utils is
@@ -73,14 +74,16 @@ package Einfo.Utils is
-------------------
-- The following type synonyms are used to tidy up the function and
- -- procedure declarations that follow.
+ -- procedure declarations that follow. Note that E and N have predicates
+ -- ensuring the correct kind; we use Entity_Id or Node_Id when the
+ -- predicates can't be satisfied.
subtype B is Boolean;
subtype C is Component_Alignment_Kind;
- subtype E is Entity_Id;
+ subtype E is N_Entity_Id;
subtype F is Float_Rep_Kind;
subtype M is Mechanism_Type;
- subtype N is Node_Id;
+ subtype N is Node_Id with Predicate => N /= Empty and then N not in E;
subtype U is Uint;
subtype R is Ureal;
subtype L is Elist_Id;
@@ -199,17 +202,17 @@ package Einfo.Utils is
-- The functions in this section synthesize attributes from the tree,
-- so they do not correspond to defined fields in the entity itself.
- function Address_Clause (Id : E) return N;
+ function Address_Clause (Id : E) return Node_Id;
function Aft_Value (Id : E) return U;
- function Alignment_Clause (Id : E) return N;
+ function Alignment_Clause (Id : E) return Node_Id;
function Base_Type (Id : E) return E;
- function Declaration_Node (Id : E) return N;
+ function Declaration_Node (Id : E) return Node_Id;
function Designated_Type (Id : E) return E;
function Entry_Index_Type (Id : E) return E;
- function First_Component (Id : E) return E;
- function First_Component_Or_Discriminant (Id : E) return E;
- function First_Formal (Id : E) return E;
- function First_Formal_With_Extras (Id : E) return E;
+ function First_Component (Id : E) return Entity_Id;
+ function First_Component_Or_Discriminant (Id : E) return Entity_Id;
+ function First_Formal (Id : E) return Entity_Id;
+ function First_Formal_With_Extras (Id : E) return Entity_Id;
function Float_Rep
(N : Entity_Id) return F with Inline, Pre =>
@@ -260,7 +263,7 @@ package Einfo.Utils is
function Is_Task_Interface (Id : E) return B;
function Is_Task_Record_Type (Id : E) return B;
function Is_Wrapper_Package (Id : E) return B;
- function Last_Formal (Id : E) return E;
+ function Last_Formal (Id : E) return Entity_Id;
function Machine_Emax_Value (Id : E) return U;
function Machine_Emin_Value (Id : E) return U;
function Machine_Mantissa_Value (Id : E) return U;
@@ -269,18 +272,18 @@ package Einfo.Utils is
function Model_Epsilon_Value (Id : E) return R;
function Model_Mantissa_Value (Id : E) return U;
function Model_Small_Value (Id : E) return R;
- function Next_Component (Id : E) return E;
- function Next_Component_Or_Discriminant (Id : E) return E;
- function Next_Discriminant (Id : E) return E;
- function Next_Formal (Id : E) return E;
- function Next_Formal_With_Extras (Id : E) return E;
- function Next_Index (Id : N) return N;
- function Next_Literal (Id : E) return E;
- function Next_Stored_Discriminant (Id : E) return E;
+ function Next_Component (Id : E) return Entity_Id;
+ function Next_Component_Or_Discriminant (Id : E) return Entity_Id;
+ function Next_Discriminant (Id : E) return Entity_Id;
+ function Next_Formal (Id : E) return Entity_Id;
+ function Next_Formal_With_Extras (Id : E) return Entity_Id;
+ function Next_Index (Id : N) return Node_Id;
+ function Next_Literal (Id : E) return Entity_Id;
+ function Next_Stored_Discriminant (Id : E) return Entity_Id;
function Number_Dimensions (Id : E) return Pos;
function Number_Entries (Id : E) return Nat;
function Number_Formals (Id : E) return Pos;
- function Object_Size_Clause (Id : E) return N;
+ function Object_Size_Clause (Id : E) return Node_Id;
function Parameter_Mode (Id : E) return Formal_Kind;
function Partial_Refinement_Constituents (Id : E) return L;
function Primitive_Operations (Id : E) return L;
@@ -288,11 +291,11 @@ package Einfo.Utils is
function Safe_Emax_Value (Id : E) return U;
function Safe_First_Value (Id : E) return R;
function Safe_Last_Value (Id : E) return R;
- function Size_Clause (Id : E) return N;
+ function Size_Clause (Id : E) return Node_Id;
function Stream_Size_Clause (Id : E) return N;
function Type_High_Bound (Id : E) return N;
function Type_Low_Bound (Id : E) return N;
- function Underlying_Type (Id : E) return E;
+ function Underlying_Type (Id : E) return Entity_Id;
function Scope_Depth (Id : E) return U;
function Scope_Depth_Set (Id : E) return B;
@@ -432,11 +435,11 @@ package Einfo.Utils is
function Is_Partial_DIC_Procedure (Id : E) return B;
- function DIC_Procedure (Id : E) return E;
- function Partial_DIC_Procedure (Id : E) return E;
- function Invariant_Procedure (Id : E) return E;
- function Partial_Invariant_Procedure (Id : E) return E;
- function Predicate_Function (Id : E) return E;
+ function DIC_Procedure (Id : E) return Entity_Id;
+ function Partial_DIC_Procedure (Id : E) return Entity_Id;
+ function Invariant_Procedure (Id : E) return Entity_Id;
+ function Partial_Invariant_Procedure (Id : E) return Entity_Id;
+ function Predicate_Function (Id : E) return Entity_Id;
procedure Set_DIC_Procedure (Id : E; V : E);
procedure Set_Partial_DIC_Procedure (Id : E; V : E);
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index 4828406..4493f0f 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -6603,21 +6603,6 @@ package body Exp_Aggr is
then
return;
- -- Do not expand an aggregate for an array type which contains tasks if
- -- the aggregate is associated with an unexpanded return statement of a
- -- build-in-place function. The aggregate is expanded when the related
- -- return statement (rewritten into an extended return) is processed.
- -- This delay ensures that any temporaries and initialization code
- -- generated for the aggregate appear in the proper return block and
- -- use the correct _chain and _master.
-
- elsif Has_Task (Base_Type (Etype (N)))
- and then Nkind (Parent (N)) = N_Simple_Return_Statement
- and then Is_Build_In_Place_Function
- (Return_Applies_To (Return_Statement_Entity (Parent (N))))
- then
- return;
-
elsif Present (Component_Associations (N))
and then Nkind (First (Component_Associations (N))) =
N_Iterated_Component_Association
@@ -6837,7 +6822,9 @@ package body Exp_Aggr is
or else Parent_Kind = N_Extension_Aggregate
or else Parent_Kind = N_Component_Association
or else (Parent_Kind = N_Object_Declaration
- and then Needs_Finalization (Typ))
+ and then (Needs_Finalization (Typ)
+ or else Is_Build_In_Place_Return_Object
+ (Defining_Identifier (Parent_Node))))
or else (Parent_Kind = N_Assignment_Statement
and then Inside_Init_Proc)
then
@@ -8792,19 +8779,10 @@ package body Exp_Aggr is
-- Start of processing for Expand_Record_Aggregate
begin
- -- If the aggregate is to be assigned to a full access variable, we have
- -- to prevent a piecemeal assignment even if the aggregate is to be
- -- expanded. We create a temporary for the aggregate, and assign the
- -- temporary instead, so that the back end can generate an atomic move
- -- for it.
-
- if Is_Full_Access_Aggregate (N) then
- return;
-
-- No special management required for aggregates used to initialize
-- statically allocated dispatch tables
- elsif Is_Static_Dispatch_Table_Aggregate (N) then
+ if Is_Static_Dispatch_Table_Aggregate (N) then
return;
-- Case pattern aggregates need to remain as aggregates
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index d02a863..38552ef 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -3319,11 +3319,9 @@ package body Exp_Ch3 is
-- Pragma case
if Nkind (Ritem) = N_Pragma then
- Exp := First (Pragma_Argument_Associations (Ritem));
-
- if Nkind (Exp) = N_Pragma_Argument_Association then
- Exp := Expression (Exp);
- end if;
+ Exp :=
+ Get_Pragma_Arg
+ (First (Pragma_Argument_Associations (Ritem)));
-- Conversion for Priority expression
@@ -4895,47 +4893,6 @@ package body Exp_Ch3 is
end loop;
end Copy_Discr_Checking_Funcs;
- ----------------------------------------
- -- Ensure_Activation_Chain_And_Master --
- ----------------------------------------
-
- procedure Ensure_Activation_Chain_And_Master (Obj_Decl : Node_Id) is
- Def_Id : constant Entity_Id := Defining_Identifier (Obj_Decl);
- Expr : constant Node_Id := Expression (Obj_Decl);
- Expr_Q : Node_Id;
- Typ : constant Entity_Id := Etype (Def_Id);
-
- begin
- pragma Assert (Nkind (Obj_Decl) = N_Object_Declaration);
-
- if Might_Have_Tasks (Typ) then
- Build_Activation_Chain_Entity (Obj_Decl);
-
- if Has_Task (Typ) then
- Build_Master_Entity (Def_Id);
-
- -- Handle objects initialized with BIP function calls
-
- elsif Present (Expr) then
- if Nkind (Expr) = N_Qualified_Expression then
- Expr_Q := Expression (Expr);
- else
- Expr_Q := Expr;
- end if;
-
- if Is_Build_In_Place_Function_Call (Expr_Q)
- or else Present (Unqual_BIP_Iface_Function_Call (Expr_Q))
- or else
- (Nkind (Expr_Q) = N_Reference
- and then
- Is_Build_In_Place_Function_Call (Prefix (Expr_Q)))
- then
- Build_Master_Entity (Def_Id);
- end if;
- end if;
- end if;
- end Ensure_Activation_Chain_And_Master;
-
------------------------------
-- Expand_Freeze_Array_Type --
------------------------------
@@ -6173,13 +6130,54 @@ package body Exp_Ch3 is
Obj_Def : constant Node_Id := Object_Definition (N);
Typ : constant Entity_Id := Etype (Def_Id);
Base_Typ : constant Entity_Id := Base_Type (Typ);
- Expr_Q : Node_Id;
+ Next_N : constant Node_Id := Next (N);
function Build_Equivalent_Aggregate return Boolean;
-- If the object has a constrained discriminated type and no initial
-- value, it may be possible to build an equivalent aggregate instead,
-- and prevent an actual call to the initialization procedure.
+ function Build_Heap_Or_Pool_Allocator
+ (Temp_Id : Entity_Id;
+ Temp_Typ : Entity_Id;
+ Func_Id : Entity_Id;
+ Ret_Typ : Entity_Id;
+ Alloc_Expr : Node_Id) return Node_Id;
+ -- Create the statements necessary to allocate a return object on the
+ -- heap or user-defined storage pool. The object may need finalization
+ -- actions depending on the return type.
+ --
+ -- * Controlled case
+ --
+ -- if BIPfinalizationmaster = null then
+ -- Temp_Id := <Alloc_Expr>;
+ -- else
+ -- declare
+ -- type Ptr_Typ is access Ret_Typ;
+ -- for Ptr_Typ'Storage_Pool use
+ -- Base_Pool (BIPfinalizationmaster.all).all;
+ -- Local : Ptr_Typ;
+ --
+ -- begin
+ -- procedure Allocate (...) is
+ -- begin
+ -- System.Storage_Pools.Subpools.Allocate_Any (...);
+ -- end Allocate;
+ --
+ -- Local := <Alloc_Expr>;
+ -- Temp_Id := Temp_Typ (Local);
+ -- end;
+ -- end if;
+ --
+ -- * Non-controlled case
+ --
+ -- Temp_Id := <Alloc_Expr>;
+ --
+ -- Temp_Id is the temporary which is used to reference the internally
+ -- created object in all allocation forms. Temp_Typ is the type of the
+ -- temporary. Func_Id is the enclosing function. Ret_Typ is the return
+ -- type of Func_Id. Alloc_Expr is the actual allocator.
+
procedure Count_Default_Sized_Task_Stacks
(Typ : Entity_Id;
Pri_Stacks : out Int;
@@ -6193,9 +6191,8 @@ package body Exp_Ch3 is
-- Generate all default initialization actions for object Def_Id. Any
-- new code is inserted after node After.
- function Rewrite_As_Renaming return Boolean;
- -- Indicate whether to rewrite a declaration with initialization into an
- -- object renaming declaration (see below).
+ function OK_To_Rename_Ref (N : Node_Id) return Boolean;
+ -- Return True if N denotes an entity with OK_To_Rename set
--------------------------------
-- Build_Equivalent_Aggregate --
@@ -6323,6 +6320,157 @@ package body Exp_Ch3 is
end if;
end Build_Equivalent_Aggregate;
+ ----------------------------------
+ -- Build_Heap_Or_Pool_Allocator --
+ ----------------------------------
+
+ function Build_Heap_Or_Pool_Allocator
+ (Temp_Id : Entity_Id;
+ Temp_Typ : Entity_Id;
+ Func_Id : Entity_Id;
+ Ret_Typ : Entity_Id;
+ Alloc_Expr : Node_Id) return Node_Id
+ is
+ begin
+ pragma Assert (Is_Build_In_Place_Function (Func_Id));
+
+ -- Processing for objects that require finalization actions
+
+ if Needs_Finalization (Ret_Typ) then
+ declare
+ Decls : constant List_Id := New_List;
+ Fin_Mas_Id : constant Entity_Id :=
+ Build_In_Place_Formal (Func_Id, BIP_Finalization_Master);
+ Orig_Expr : constant Node_Id := New_Copy_Tree (Alloc_Expr);
+ Stmts : constant List_Id := New_List;
+ Local_Id : Entity_Id;
+ Pool_Id : Entity_Id;
+ Ptr_Typ : Entity_Id;
+
+ begin
+ -- Generate:
+ -- Pool_Id renames Base_Pool (BIPfinalizationmaster.all).all;
+
+ Pool_Id := Make_Temporary (Loc, 'P');
+
+ Append_To (Decls,
+ Make_Object_Renaming_Declaration (Loc,
+ Defining_Identifier => Pool_Id,
+ Subtype_Mark =>
+ New_Occurrence_Of (RTE (RE_Root_Storage_Pool), Loc),
+ Name =>
+ Make_Explicit_Dereference (Loc,
+ Prefix =>
+ Make_Function_Call (Loc,
+ Name =>
+ New_Occurrence_Of (RTE (RE_Base_Pool), Loc),
+ Parameter_Associations => New_List (
+ Make_Explicit_Dereference (Loc,
+ Prefix =>
+ New_Occurrence_Of (Fin_Mas_Id, Loc)))))));
+
+ -- Create an access type which uses the storage pool of the
+ -- caller's master. This additional type is necessary because
+ -- the finalization master cannot be associated with the type
+ -- of the temporary. Otherwise the secondary stack allocation
+ -- will fail.
+
+ -- Generate:
+ -- type Ptr_Typ is access Ret_Typ;
+
+ Ptr_Typ := Make_Temporary (Loc, 'P');
+
+ Append_To (Decls,
+ Make_Full_Type_Declaration (Loc,
+ Defining_Identifier => Ptr_Typ,
+ Type_Definition =>
+ Make_Access_To_Object_Definition (Loc,
+ Subtype_Indication =>
+ New_Occurrence_Of (Ret_Typ, Loc))));
+
+ -- Perform minor decoration in order to set the master and the
+ -- storage pool attributes.
+
+ Mutate_Ekind (Ptr_Typ, E_Access_Type);
+ Set_Finalization_Master (Ptr_Typ, Fin_Mas_Id);
+ Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
+
+ -- Create the temporary, generate:
+ -- Local_Id : Ptr_Typ;
+
+ Local_Id := Make_Temporary (Loc, 'T');
+
+ Append_To (Decls,
+ Make_Object_Declaration (Loc,
+ Defining_Identifier => Local_Id,
+ Object_Definition =>
+ New_Occurrence_Of (Ptr_Typ, Loc)));
+
+ -- Allocate the object, generate:
+ -- Local_Id := <Alloc_Expr>;
+
+ Append_To (Stmts,
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Local_Id, Loc),
+ Expression => Alloc_Expr));
+
+ -- Generate:
+ -- Temp_Id := Temp_Typ (Local_Id);
+
+ Append_To (Stmts,
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Temp_Id, Loc),
+ Expression =>
+ Unchecked_Convert_To (Temp_Typ,
+ New_Occurrence_Of (Local_Id, Loc))));
+
+ -- Wrap the allocation in a block. This is further conditioned
+ -- by checking the caller finalization master at runtime. A
+ -- null value indicates a non-existent master, most likely due
+ -- to a Finalize_Storage_Only allocation.
+
+ -- Generate:
+ -- if BIPfinalizationmaster = null then
+ -- Temp_Id := <Orig_Expr>;
+ -- else
+ -- declare
+ -- <Decls>
+ -- begin
+ -- <Stmts>
+ -- end;
+ -- end if;
+
+ return
+ Make_If_Statement (Loc,
+ Condition =>
+ Make_Op_Eq (Loc,
+ Left_Opnd => New_Occurrence_Of (Fin_Mas_Id, Loc),
+ Right_Opnd => Make_Null (Loc)),
+
+ Then_Statements => New_List (
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Temp_Id, Loc),
+ Expression => Orig_Expr)),
+
+ Else_Statements => New_List (
+ Make_Block_Statement (Loc,
+ Declarations => Decls,
+ Handled_Statement_Sequence =>
+ Make_Handled_Sequence_Of_Statements (Loc,
+ Statements => Stmts))));
+ end;
+
+ -- For all other cases, generate:
+ -- Temp_Id := <Alloc_Expr>;
+
+ else
+ return
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Temp_Id, Loc),
+ Expression => Alloc_Expr);
+ end if;
+ end Build_Heap_Or_Pool_Allocator;
+
-------------------------------------
-- Count_Default_Sized_Task_Stacks --
-------------------------------------
@@ -6801,72 +6949,21 @@ package body Exp_Ch3 is
end if;
end Default_Initialize_Object;
- -------------------------
- -- Rewrite_As_Renaming --
- -------------------------
-
- function Rewrite_As_Renaming return Boolean is
- Result : constant Boolean :=
-
- -- If the object declaration appears in the form
-
- -- Obj : Ctrl_Typ := Func (...);
-
- -- where Ctrl_Typ is controlled but not immutably limited type, then
- -- the expansion of the function call should use a dereference of the
- -- result to reference the value on the secondary stack.
-
- -- Obj : Ctrl_Typ renames Func (...).all;
-
- -- As a result, the call avoids an extra copy. This an optimization,
- -- but it is required for passing ACATS tests in some cases where it
- -- would otherwise make two copies. The RM allows removing redunant
- -- Adjust/Finalize calls, but does not allow insertion of extra ones.
-
- -- This part is disabled for now, because it breaks GNAT Studio
- -- builds
-
- (False -- ???
- and then Nkind (Expr_Q) = N_Explicit_Dereference
- and then not Comes_From_Source (Expr_Q)
- and then Nkind (Original_Node (Expr_Q)) = N_Function_Call
- and then Nkind (Object_Definition (N)) in N_Has_Entity
- and then (Needs_Finalization (Entity (Object_Definition (N)))))
-
- -- If the initializing expression is for a variable with attribute
- -- OK_To_Rename set, then transform:
-
- -- Obj : Typ := Expr;
-
- -- into
-
- -- Obj : Typ renames Expr;
-
- -- provided that Obj is not aliased. The aliased case has to be
- -- excluded in general because Expr will not be aliased in
- -- general.
+ ----------------------
+ -- OK_To_Rename_Ref --
+ ----------------------
- or else
- (not Aliased_Present (N)
- and then Is_Entity_Name (Expr_Q)
- and then Ekind (Entity (Expr_Q)) = E_Variable
- and then OK_To_Rename (Entity (Expr_Q))
- and then Is_Entity_Name (Obj_Def));
+ function OK_To_Rename_Ref (N : Node_Id) return Boolean is
begin
- -- Return False if there are any aspect specifications, because
- -- otherwise we duplicate that corresponding implicit attribute
- -- definition, and call Insert_Action, which has no place to insert
- -- the attribute definition. The attribute definition is stored in
- -- Aspect_Rep_Item, which is not a list.
-
- return Result and then No (Aspect_Specifications (N));
- end Rewrite_As_Renaming;
+ return Is_Entity_Name (N)
+ and then Ekind (Entity (N)) = E_Variable
+ and then OK_To_Rename (Entity (N));
+ end OK_To_Rename_Ref;
-- Local variables
- Next_N : constant Node_Id := Next (N);
-
Adj_Call : Node_Id;
+ Expr_Q : Node_Id;
Id_Ref : Node_Id;
Tag_Assign : Node_Id;
@@ -6876,6 +6973,9 @@ package body Exp_Ch3 is
-- which case the init proc call must be inserted only after the bodies
-- of the shared variable procedures have been seen.
+ Rewrite_As_Renaming : Boolean := False;
+ -- Whether to turn the declaration into a renaming at the end
+
-- Start of processing for Expand_N_Object_Declaration
begin
@@ -6918,7 +7018,27 @@ package body Exp_Ch3 is
-- also that a Master variable is established (and that the appropriate
-- enclosing construct is established as a task master).
- Ensure_Activation_Chain_And_Master (N);
+ if Has_Task (Typ) or else Might_Have_Tasks (Typ) then
+ Build_Activation_Chain_Entity (N);
+
+ if Has_Task (Typ) then
+ Build_Master_Entity (Def_Id);
+
+ -- Handle objects initialized with BIP function calls
+
+ elsif Present (Expr) then
+ Expr_Q := Unqualify (Expr);
+
+ if Is_Build_In_Place_Function_Call (Expr_Q)
+ or else Present (Unqual_BIP_Iface_Function_Call (Expr_Q))
+ or else (Nkind (Expr_Q) = N_Reference
+ and then
+ Is_Build_In_Place_Function_Call (Prefix (Expr_Q)))
+ then
+ Build_Master_Entity (Def_Id);
+ end if;
+ end if;
+ end if;
-- If No_Implicit_Heap_Allocations or No_Implicit_Task_Allocations
-- restrictions are active then default-sized secondary stacks are
@@ -6954,6 +7074,7 @@ package body Exp_Ch3 is
-- Default initialization required, and no expression present
if No (Expr) then
+ Expr_Q := Expr;
-- If we have a type with a variant part, the initialization proc
-- will contain implicit tests of the discriminant values, which
@@ -7013,7 +7134,9 @@ package body Exp_Ch3 is
end if;
end if;
- Default_Initialize_Object (Init_After);
+ if not Is_Build_In_Place_Return_Object (Def_Id) then
+ Default_Initialize_Object (Init_After);
+ end if;
-- Generate attribute for Persistent_BSS if needed
@@ -7071,7 +7194,9 @@ package body Exp_Ch3 is
Expander_Mode_Restore;
end if;
- Convert_Aggr_In_Object_Decl (N);
+ if not Is_Build_In_Place_Return_Object (Def_Id) then
+ Convert_Aggr_In_Object_Decl (N);
+ end if;
-- Ada 2005 (AI-318-02): If the initialization expression is a call
-- to a build-in-place function, then access to the declared object
@@ -7140,13 +7265,12 @@ package body Exp_Ch3 is
then
pragma Assert (Is_Class_Wide_Type (Typ));
- -- If the object is a return object of an inherently limited type,
- -- which implies build-in-place treatment, bypass the special
+ -- If the object is a built-in-place return object, bypass special
-- treatment of class-wide interface initialization below. In this
-- case, the expansion of the return statement will take care of
-- creating the object (via allocator) and initializing it.
- if Is_Return_Object (Def_Id) and then Is_Limited_View (Typ) then
+ if Is_Build_In_Place_Return_Object (Def_Id) then
null;
elsif Tagged_Type_Expansion then
@@ -7372,9 +7496,12 @@ package body Exp_Ch3 is
Set_SPARK_Pragma_Inherited (Def_Id, Save_SPI);
end;
end;
- end if;
- return;
+ return;
+
+ else
+ return;
+ end if;
-- Common case of explicit object initialization
@@ -7423,31 +7550,6 @@ package body Exp_Ch3 is
end if;
end if;
- -- If the type is controlled and not inherently limited, then
- -- the target is adjusted after the copy and attached to the
- -- finalization list. However, no adjustment is done in the case
- -- where the object was initialized by a call to a function whose
- -- result is built in place, since no copy occurred. Similarly, no
- -- adjustment is required if we are going to rewrite the object
- -- declaration into a renaming declaration.
-
- if Needs_Finalization (Typ)
- and then not Is_Limited_View (Typ)
- and then not Rewrite_As_Renaming
- then
- Adj_Call :=
- Make_Adjust_Call (
- Obj_Ref => New_Occurrence_Of (Def_Id, Loc),
- Typ => Base_Typ);
-
- -- Guard against a missing [Deep_]Adjust when the base type
- -- was not properly frozen.
-
- if Present (Adj_Call) then
- Insert_Action_After (Init_After, Adj_Call);
- end if;
- end if;
-
-- For tagged types, when an init value is given, the tag has to
-- be re-initialized separately in order to avoid the propagation
-- of a wrong tag coming from a view conversion unless the type
@@ -7566,6 +7668,86 @@ package body Exp_Ch3 is
Set_Is_Known_Valid (Def_Id);
end if;
end if;
+
+ -- Now determine whether we will use a renaming
+
+ Rewrite_As_Renaming :=
+
+ -- The declaration cannot be rewritten if it has got constraints
+ -- in other words the nominal subtype must be unconstrained.
+
+ Is_Entity_Name (Original_Node (Obj_Def))
+
+ -- The aliased case has to be excluded because the expression
+ -- will not be aliased in the general case.
+
+ and then not Aliased_Present (N)
+
+ -- If the object declaration originally appears in the form
+
+ -- Obj : Typ := Func (...);
+
+ -- and has been rewritten as the dereference of a reference
+ -- to the function result built either on the primary or the
+ -- secondary stack, then the declaration can be rewritten as
+ -- the renaming of this dereference:
+
+ -- type Axx is access all Typ;
+ -- Rxx : constant Axx := Func (...)'reference;
+ -- Obj : Typ renames Rxx.all;
+
+ -- This avoids an extra copy and, in the case where Typ needs
+ -- finalization, a pair of Adjust/Finalize calls (see below).
+
+ and then
+ ((not Is_Library_Level_Entity (Def_Id)
+ and then Nkind (Expr_Q) = N_Explicit_Dereference
+ and then not Comes_From_Source (Expr_Q)
+ and then Nkind (Original_Node (Expr_Q)) = N_Function_Call
+ and then not Is_Class_Wide_Type (Typ))
+
+ -- If the initializing expression is a variable with the
+ -- flag OK_To_Rename set, then transform:
+
+ -- Obj : Typ := Expr;
+
+ -- into
+
+ -- Obj : Typ renames Expr;
+
+ or else OK_To_Rename_Ref (Expr_Q)
+
+ -- Likewise if it is a slice of such a variable
+
+ or else (Nkind (Expr_Q) = N_Slice
+ and then OK_To_Rename_Ref (Prefix (Expr_Q))));
+
+ -- If the type needs finalization and is not inherently limited,
+ -- then the target is adjusted after the copy and attached to the
+ -- finalization list. However, no adjustment is needed in the case
+ -- where the object has been initialized by a call to a function
+ -- returning on the primary stack (see Expand_Ctrl_Function_Call)
+ -- since no copy occurred, given that the type is by-reference.
+ -- Similarly, no adjustment is needed if we are going to rewrite
+ -- the object declaration into a renaming declaration.
+
+ if Needs_Finalization (Typ)
+ and then not Is_Limited_View (Typ)
+ and then Nkind (Expr_Q) /= N_Function_Call
+ and then not Rewrite_As_Renaming
+ then
+ Adj_Call :=
+ Make_Adjust_Call (
+ Obj_Ref => New_Occurrence_Of (Def_Id, Loc),
+ Typ => Base_Typ);
+
+ -- Guard against a missing [Deep_]Adjust when the base type
+ -- was not properly frozen.
+
+ if Present (Adj_Call) then
+ Insert_Action_After (Init_After, Adj_Call);
+ end if;
+ end if;
end if;
-- Cases where the back end cannot handle the initialization
@@ -7587,11 +7769,11 @@ package body Exp_Ch3 is
Name => New_Occurrence_Of (Def_Id, Loc),
Expression => Relocate_Node (Expr));
begin
- Set_Expression (N, Empty);
- Set_No_Initialization (N);
Set_Assignment_OK (Name (Stat));
Set_No_Ctrl_Actions (Stat);
- Insert_After_And_Analyze (Init_After, Stat);
+ Insert_Action_After (Init_After, Stat);
+ Set_Expression (N, Empty);
+ Set_No_Initialization (N);
end;
end if;
end if;
@@ -7688,45 +7870,589 @@ package body Exp_Ch3 is
end;
end if;
+ -- If this is the return object of a build-in-place function, locate the
+ -- implicit BIPaccess parameter designating the caller-supplied return
+ -- object and convert the declaration to a renaming of a dereference of
+ -- this parameter. If the declaration includes an expression, add an
+ -- assignment statement to ensure the return object gets initialized.
+
+ -- Result : T [:= <expression>];
+
+ -- is converted to
+
+ -- Result : T renames BIPaccess.all;
+ -- [Result := <expression>;]
+
+ -- in the constrained case, or to
+
+ -- type Txx is access all ...;
+ -- Rxx : Txx := null;
+
+ -- if BIPalloc = 1 then
+ -- Rxx := BIPaccess;
+ -- elsif BIPalloc = 2 then
+ -- Rxx := new <expression-type>[storage_pool =
+ -- system__secondary_stack__ss_pool][procedure_to_call =
+ -- system__secondary_stack__ss_allocate];
+ -- elsif BIPalloc = 3 then
+ -- Rxx := new <expression-type>
+ -- elsif BIPalloc = 4 then
+ -- Pxx : system__storage_pools__root_storage_pool renames
+ -- BIPstoragepool.all;
+ -- Rxx := new <expression-type>[storage_pool =
+ -- Pxx][procedure_to_call =
+ -- system__storage_pools__allocate_any];
+ -- else
+ -- [program_error "build in place mismatch"]
+ -- end if;
+
+ -- Result : T renames Rxx.all;
+ -- Result := <expression>;
+
+ -- in the unconstrained case.
+
+ if Is_Build_In_Place_Return_Object (Def_Id) then
+ declare
+ Func_Id : constant Entity_Id :=
+ Return_Applies_To (Scope (Def_Id));
+ Ret_Obj_Typ : constant Entity_Id := Etype (Def_Id);
+
+ Init_Stmt : Node_Id;
+ Obj_Acc_Formal : Entity_Id;
+
+ begin
+ -- Retrieve the implicit access parameter passed by the caller
+
+ Obj_Acc_Formal :=
+ Build_In_Place_Formal (Func_Id, BIP_Object_Access);
+
+ -- If the return object's declaration includes an expression
+ -- and the declaration isn't marked as No_Initialization, then
+ -- we need to generate an assignment to the object and insert
+ -- it after the declaration before rewriting it as a renaming
+ -- (otherwise we'll lose the initialization). The case where
+ -- the result type is an interface (or class-wide interface)
+ -- is also excluded because the context of the function call
+ -- must be unconstrained, so the initialization will always
+ -- be done as part of an allocator evaluation (storage pool
+ -- or secondary stack), never to a constrained target object
+ -- passed in by the caller. Besides the assignment being
+ -- unneeded in this case, it avoids problems with trying to
+ -- generate a dispatching assignment when the return expression
+ -- is a nonlimited descendant of a limited interface (the
+ -- interface has no assignment operation).
+
+ if Present (Expr_Q)
+ and then not Is_Delayed_Aggregate (Expr_Q)
+ and then not No_Initialization (N)
+ and then not Is_Interface (Etype (Def_Id))
+ then
+ if Is_Class_Wide_Type (Etype (Def_Id))
+ and then not Is_Class_Wide_Type (Etype (Expr_Q))
+ then
+ Init_Stmt :=
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Def_Id, Loc),
+ Expression =>
+ Make_Type_Conversion (Loc,
+ Subtype_Mark =>
+ New_Occurrence_Of (Etype (Def_Id), Loc),
+ Expression => New_Copy_Tree (Expr_Q)));
+
+ else
+ Init_Stmt :=
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (Def_Id, Loc),
+ Expression => New_Copy_Tree (Expr_Q));
+ end if;
+
+ Set_Assignment_OK (Name (Init_Stmt));
+ Set_No_Ctrl_Actions (Init_Stmt);
+
+ else
+ Init_Stmt := Empty;
+ end if;
+
+ -- When the function's subtype is unconstrained, a run-time
+ -- test may be needed to decide the form of allocation to use
+ -- for the return object. The function has an implicit formal
+ -- parameter indicating this. If the BIP_Alloc_Form formal has
+ -- the value one, then the caller has passed access to an
+ -- existing object for use as the return object. If the value
+ -- is two, then the return object must be allocated on the
+ -- secondary stack. If the value is three, then the return
+ -- object must be allocated on the heap. Otherwise, the object
+ -- must be allocated in a storage pool. We generate an if
+ -- statement to test the BIP_Alloc_Form formal and initialize
+ -- a local access value appropriately.
+
+ if Needs_BIP_Alloc_Form (Func_Id) then
+ declare
+ Desig_Typ : constant Entity_Id :=
+ (if Ekind (Ret_Obj_Typ) = E_Array_Subtype
+ then Etype (Func_Id) else Ret_Obj_Typ);
+ -- Ensure that the we use a fat pointer when allocating
+ -- an unconstrained array on the heap. In this case the
+ -- result object type is a constrained array type even
+ -- though the function type is unconstrained.
+ Obj_Alloc_Formal : constant Entity_Id :=
+ Build_In_Place_Formal (Func_Id, BIP_Alloc_Form);
+ Pool_Id : constant Entity_Id :=
+ Make_Temporary (Loc, 'P');
+
+ function Make_Allocator_For_BIP_Return return Node_Id;
+ -- Make an allocator for the BIP return being processed
+
+ -----------------------------------
+ -- Make_Allocator_For_BIP_Return --
+ -----------------------------------
+
+ function Make_Allocator_For_BIP_Return return Node_Id is
+ Alloc : Node_Id;
+
+ begin
+ if Present (Expr_Q)
+ and then not Is_Delayed_Aggregate (Expr_Q)
+ and then not No_Initialization (N)
+ then
+ -- Always use the type of the expression for the
+ -- qualified expression, rather than the result type.
+ -- In general we cannot always use the result type
+ -- for the allocator, because the expression might be
+ -- of a specific type, such as in the case of an
+ -- aggregate or even a nonlimited object when the
+ -- result type is a limited class-wide interface type.
+
+ Alloc :=
+ Make_Allocator (Loc,
+ Expression =>
+ Make_Qualified_Expression (Loc,
+ Subtype_Mark =>
+ New_Occurrence_Of (Etype (Expr_Q), Loc),
+ Expression => New_Copy_Tree (Expr_Q)));
+
+ else
+ -- If the function returns a class-wide type we cannot
+ -- use the return type for the allocator. Instead we
+ -- use the type of the expression, which must be an
+ -- aggregate of a definite type.
+
+ if Is_Class_Wide_Type (Ret_Obj_Typ) then
+ Alloc :=
+ Make_Allocator (Loc,
+ Expression =>
+ New_Occurrence_Of (Etype (Expr_Q), Loc));
+
+ else
+ Alloc :=
+ Make_Allocator (Loc,
+ Expression =>
+ New_Occurrence_Of (Ret_Obj_Typ, Loc));
+ end if;
+
+ -- If the object requires default initialization then
+ -- that will happen later following the elaboration of
+ -- the object renaming. If we don't turn it off here
+ -- then the object will be default initialized twice.
+
+ Set_No_Initialization (Alloc);
+ end if;
+
+ -- Set the flag indicating that the allocator came from
+ -- a build-in-place return statement, so we can avoid
+ -- adjusting the allocated object.
+
+ Set_Alloc_For_BIP_Return (Alloc);
+
+ return Alloc;
+ end Make_Allocator_For_BIP_Return;
+
+ Alloc_Obj_Id : Entity_Id;
+ Alloc_Obj_Decl : Node_Id;
+ Alloc_Stmt : Node_Id;
+ Guard_Except : Node_Id;
+ Heap_Allocator : Node_Id;
+ Pool_Decl : Node_Id;
+ Pool_Allocator : Node_Id;
+ Ptr_Type_Decl : Node_Id;
+ Ref_Type : Entity_Id;
+ SS_Allocator : Node_Id;
+
+ begin
+ -- Create an access type designating the function's
+ -- result subtype.
+
+ Ref_Type := Make_Temporary (Loc, 'A');
+
+ Ptr_Type_Decl :=
+ Make_Full_Type_Declaration (Loc,
+ Defining_Identifier => Ref_Type,
+ Type_Definition =>
+ Make_Access_To_Object_Definition (Loc,
+ All_Present => True,
+ Subtype_Indication =>
+ New_Occurrence_Of (Desig_Typ, Loc)));
+
+ Insert_Action (N, Ptr_Type_Decl);
+
+ -- Create an access object that will be initialized to an
+ -- access value denoting the return object, either coming
+ -- from an implicit access value passed in by the caller
+ -- or from the result of an allocator.
+
+ Alloc_Obj_Id := Make_Temporary (Loc, 'R');
+ Set_Etype (Alloc_Obj_Id, Ref_Type);
+
+ Alloc_Obj_Decl :=
+ Make_Object_Declaration (Loc,
+ Defining_Identifier => Alloc_Obj_Id,
+ Object_Definition =>
+ New_Occurrence_Of (Ref_Type, Loc));
+
+ Insert_Action (N, Alloc_Obj_Decl);
+
+ -- First create the Heap_Allocator
+
+ Heap_Allocator := Make_Allocator_For_BIP_Return;
+
+ -- The Pool_Allocator is just like the Heap_Allocator,
+ -- except we set Storage_Pool and Procedure_To_Call so
+ -- it will use the user-defined storage pool.
+
+ Pool_Allocator := Make_Allocator_For_BIP_Return;
+
+ -- Do not generate the renaming of the build-in-place
+ -- pool parameter on ZFP because the parameter is not
+ -- created in the first place.
+
+ if RTE_Available (RE_Root_Storage_Pool_Ptr) then
+ Pool_Decl :=
+ Make_Object_Renaming_Declaration (Loc,
+ Defining_Identifier => Pool_Id,
+ Subtype_Mark =>
+ New_Occurrence_Of
+ (RTE (RE_Root_Storage_Pool), Loc),
+ Name =>
+ Make_Explicit_Dereference (Loc,
+ New_Occurrence_Of
+ (Build_In_Place_Formal
+ (Func_Id, BIP_Storage_Pool), Loc)));
+ Set_Storage_Pool (Pool_Allocator, Pool_Id);
+ Set_Procedure_To_Call
+ (Pool_Allocator, RTE (RE_Allocate_Any));
+ else
+ Pool_Decl := Make_Null_Statement (Loc);
+ end if;
+
+ -- If the No_Allocators restriction is active, then only
+ -- an allocator for secondary stack allocation is needed.
+ -- It's OK for such allocators to have Comes_From_Source
+ -- set to False, because gigi knows not to flag them as
+ -- being a violation of No_Implicit_Heap_Allocations.
+
+ if Restriction_Active (No_Allocators) then
+ SS_Allocator := Heap_Allocator;
+ Heap_Allocator := Make_Null (Loc);
+ Pool_Allocator := Make_Null (Loc);
+
+ -- Otherwise the heap and pool allocators may be needed,
+ -- so we make another allocator for secondary stack
+ -- allocation.
+
+ else
+ SS_Allocator := Make_Allocator_For_BIP_Return;
+
+ -- The heap and pool allocators are marked as
+ -- Comes_From_Source since they correspond to an
+ -- explicit user-written allocator (that is, it will
+ -- only be executed on behalf of callers that call the
+ -- function as initialization for such an allocator).
+ -- Prevents errors when No_Implicit_Heap_Allocations
+ -- is in force.
+
+ Set_Comes_From_Source (Heap_Allocator, True);
+ Set_Comes_From_Source (Pool_Allocator, True);
+ end if;
+
+ -- The allocator is returned on the secondary stack
+
+ Check_Restriction (No_Secondary_Stack, N);
+ Set_Storage_Pool (SS_Allocator, RTE (RE_SS_Pool));
+ Set_Procedure_To_Call
+ (SS_Allocator, RTE (RE_SS_Allocate));
+
+ -- The allocator is returned on the secondary stack,
+ -- so indicate that the function return, as well as
+ -- all blocks that encloses the allocator, must not
+ -- release it. The flags must be set now because
+ -- the decision to use the secondary stack is done
+ -- very late in the course of expanding the return
+ -- statement, past the point where these flags are
+ -- normally set.
+
+ Set_Uses_Sec_Stack (Func_Id);
+ Set_Uses_Sec_Stack (Scope (Def_Id));
+ Set_Sec_Stack_Needed_For_Return (Scope (Def_Id));
+
+ -- Guard against poor expansion on the caller side by
+ -- using a raise statement to catch out-of-range values
+ -- of formal parameter BIP_Alloc_Form.
+
+ if Exceptions_OK then
+ Guard_Except :=
+ Make_Raise_Program_Error (Loc,
+ Reason => PE_Build_In_Place_Mismatch);
+ else
+ Guard_Except := Make_Null_Statement (Loc);
+ end if;
+
+ -- Create an if statement to test the BIP_Alloc_Form
+ -- formal and initialize the access object to either the
+ -- BIP_Object_Access formal (BIP_Alloc_Form =
+ -- Caller_Allocation), the result of allocating the
+ -- object in the secondary stack (BIP_Alloc_Form =
+ -- Secondary_Stack), or else an allocator to create the
+ -- return object in the heap or user-defined pool
+ -- (BIP_Alloc_Form = Global_Heap or User_Storage_Pool).
+
+ -- ??? An unchecked type conversion must be made in the
+ -- case of assigning the access object formal to the
+ -- local access object, because a normal conversion would
+ -- be illegal in some cases (such as converting access-
+ -- to-unconstrained to access-to-constrained), but the
+ -- the unchecked conversion will presumably fail to work
+ -- right in just such cases. It's not clear at all how to
+ -- handle this. ???
+
+ Alloc_Stmt :=
+ Make_If_Statement (Loc,
+ Condition =>
+ Make_Op_Eq (Loc,
+ Left_Opnd =>
+ New_Occurrence_Of (Obj_Alloc_Formal, Loc),
+ Right_Opnd =>
+ Make_Integer_Literal (Loc,
+ UI_From_Int (BIP_Allocation_Form'Pos
+ (Caller_Allocation)))),
+
+ Then_Statements => New_List (
+ Make_Assignment_Statement (Loc,
+ Name =>
+ New_Occurrence_Of (Alloc_Obj_Id, Loc),
+ Expression =>
+ Unchecked_Convert_To
+ (Ref_Type,
+ New_Occurrence_Of (Obj_Acc_Formal, Loc)))),
+
+ Elsif_Parts => New_List (
+ Make_Elsif_Part (Loc,
+ Condition =>
+ Make_Op_Eq (Loc,
+ Left_Opnd =>
+ New_Occurrence_Of (Obj_Alloc_Formal, Loc),
+ Right_Opnd =>
+ Make_Integer_Literal (Loc,
+ UI_From_Int (BIP_Allocation_Form'Pos
+ (Secondary_Stack)))),
+
+ Then_Statements => New_List (
+ Make_Assignment_Statement (Loc,
+ Name =>
+ New_Occurrence_Of (Alloc_Obj_Id, Loc),
+ Expression => SS_Allocator))),
+
+ Make_Elsif_Part (Loc,
+ Condition =>
+ Make_Op_Eq (Loc,
+ Left_Opnd =>
+ New_Occurrence_Of (Obj_Alloc_Formal, Loc),
+ Right_Opnd =>
+ Make_Integer_Literal (Loc,
+ UI_From_Int (BIP_Allocation_Form'Pos
+ (Global_Heap)))),
+
+ Then_Statements => New_List (
+ Build_Heap_Or_Pool_Allocator
+ (Temp_Id => Alloc_Obj_Id,
+ Temp_Typ => Ref_Type,
+ Func_Id => Func_Id,
+ Ret_Typ => Desig_Typ,
+ Alloc_Expr => Heap_Allocator))),
+
+ -- ???If all is well, we can put the following
+ -- 'elsif' in the 'else', but this is a useful
+ -- self-check in case caller and callee don't agree
+ -- on whether BIPAlloc and so on should be passed.
+
+ Make_Elsif_Part (Loc,
+ Condition =>
+ Make_Op_Eq (Loc,
+ Left_Opnd =>
+ New_Occurrence_Of (Obj_Alloc_Formal, Loc),
+ Right_Opnd =>
+ Make_Integer_Literal (Loc,
+ UI_From_Int (BIP_Allocation_Form'Pos
+ (User_Storage_Pool)))),
+
+ Then_Statements => New_List (
+ Pool_Decl,
+ Build_Heap_Or_Pool_Allocator
+ (Temp_Id => Alloc_Obj_Id,
+ Temp_Typ => Ref_Type,
+ Func_Id => Func_Id,
+ Ret_Typ => Desig_Typ,
+ Alloc_Expr => Pool_Allocator)))),
+
+ -- Raise Program_Error if it's none of the above;
+ -- this is a compiler bug.
+
+ Else_Statements => New_List (Guard_Except));
+
+ -- If a separate initialization assignment was created
+ -- earlier, append that following the assignment of the
+ -- implicit access formal to the access object, to ensure
+ -- that the return object is initialized in that case. In
+ -- this situation, the target of the assignment must be
+ -- rewritten to denote a dereference of the access to the
+ -- return object passed in by the caller.
+
+ if Present (Init_Stmt) then
+ Set_Name (Init_Stmt,
+ Make_Explicit_Dereference (Loc,
+ Prefix => New_Occurrence_Of (Alloc_Obj_Id, Loc)));
+ Set_Assignment_OK (Name (Init_Stmt));
+
+ Append_To (Then_Statements (Alloc_Stmt), Init_Stmt);
+ Init_Stmt := Empty;
+ end if;
+
+ Insert_Action (N, Alloc_Stmt, Suppress => All_Checks);
+
+ -- From now on, the type of the return object is the
+ -- designated type.
+
+ Set_Etype (Def_Id, Desig_Typ);
+
+ -- Remember the local access object for use in the
+ -- dereference of the renaming created below.
+
+ Obj_Acc_Formal := Alloc_Obj_Id;
+ end;
+
+ -- When the function's subtype is unconstrained and a run-time
+ -- test is not needed, we nevertheless need to build the return
+ -- using the function's result subtype.
+
+ elsif not Is_Constrained (Underlying_Type (Etype (Func_Id))) then
+ declare
+ Alloc_Obj_Id : Entity_Id;
+ Alloc_Obj_Decl : Node_Id;
+ Ptr_Type_Decl : Node_Id;
+ Ref_Type : Entity_Id;
+
+ begin
+ -- Create an access type designating the function's
+ -- result subtype.
+
+ Ref_Type := Make_Temporary (Loc, 'A');
+
+ Ptr_Type_Decl :=
+ Make_Full_Type_Declaration (Loc,
+ Defining_Identifier => Ref_Type,
+ Type_Definition =>
+ Make_Access_To_Object_Definition (Loc,
+ All_Present => True,
+ Subtype_Indication =>
+ New_Occurrence_Of (Ret_Obj_Typ, Loc)));
+
+ Insert_Action (N, Ptr_Type_Decl);
+
+ -- Create an access object initialized to the conversion
+ -- of the implicit access value passed in by the caller.
+
+ Alloc_Obj_Id := Make_Temporary (Loc, 'R');
+
+ -- See the ??? comment a few lines above about the use of
+ -- an unchecked conversion here.
+
+ Alloc_Obj_Decl :=
+ Make_Object_Declaration (Loc,
+ Defining_Identifier => Alloc_Obj_Id,
+ Object_Definition =>
+ New_Occurrence_Of (Ref_Type, Loc),
+ Expression =>
+ Unchecked_Convert_To
+ (Ref_Type,
+ New_Occurrence_Of (Obj_Acc_Formal, Loc)));
+
+ Insert_Action (N, Alloc_Obj_Decl, Suppress => All_Checks);
+
+ -- Remember the local access object for use in the
+ -- dereference of the renaming created below.
+
+ Obj_Acc_Formal := Alloc_Obj_Id;
+ end;
+ end if;
+
+ -- Initialize the object now that it has got its final subtype,
+ -- but before rewriting it as a renaming.
+
+ if No (Expr_Q) then
+ Default_Initialize_Object (Init_After);
+
+ elsif Is_Delayed_Aggregate (Expr_Q)
+ and then not No_Initialization (N)
+ then
+ Convert_Aggr_In_Object_Decl (N);
+
+ elsif Present (Init_Stmt) then
+ Insert_Action_After (Init_After, Init_Stmt);
+ Set_Expression (N, Empty);
+ end if;
+
+ -- Replace the return object declaration with a renaming of a
+ -- dereference of the access value designating the return object.
+
+ Expr_Q :=
+ Make_Explicit_Dereference (Loc,
+ Prefix => New_Occurrence_Of (Obj_Acc_Formal, Loc));
+ Set_Etype (Expr_Q, Etype (Def_Id));
+
+ Rewrite_As_Renaming := True;
+ end;
+ end if;
+
-- Final transformation - turn the object declaration into a renaming
-- if appropriate. If this is the completion of a deferred constant
-- declaration, then this transformation generates what would be
-- illegal code if written by hand, but that's OK.
- if Present (Expr) then
- if Rewrite_As_Renaming then
- Rewrite (N,
- Make_Object_Renaming_Declaration (Loc,
- Defining_Identifier => Defining_Identifier (N),
- Subtype_Mark => Obj_Def,
- Name => Expr_Q));
+ if Rewrite_As_Renaming then
+ Rewrite (N,
+ Make_Object_Renaming_Declaration (Loc,
+ Defining_Identifier => Def_Id,
+ Subtype_Mark => New_Occurrence_Of (Etype (Def_Id), Loc),
+ Name => Expr_Q));
- -- We do not analyze this renaming declaration, because all its
- -- components have already been analyzed, and if we were to go
- -- ahead and analyze it, we would in effect be trying to generate
- -- another declaration of X, which won't do.
+ -- We do not analyze this renaming declaration, because all its
+ -- components have already been analyzed, and if we were to go
+ -- ahead and analyze it, we would in effect be trying to generate
+ -- another declaration of X, which won't do.
- Set_Renamed_Object (Defining_Identifier (N), Expr_Q);
- Set_Analyzed (N);
+ Set_Renamed_Object (Def_Id, Expr_Q);
+ Set_Analyzed (N);
- -- We do need to deal with debug issues for this renaming
+ -- We do need to deal with debug issues for this renaming
- -- First, if entity comes from source, then mark it as needing
- -- debug information, even though it is defined by a generated
- -- renaming that does not come from source.
+ -- First, if entity comes from source, then mark it as needing
+ -- debug information, even though it is defined by a generated
+ -- renaming that does not come from source.
- Set_Debug_Info_Defining_Id (N);
+ Set_Debug_Info_Defining_Id (N);
- -- Now call the routine to generate debug info for the renaming
+ -- Now call the routine to generate debug info for the renaming
- declare
- Decl : constant Node_Id := Debug_Renaming_Declaration (N);
- begin
- if Present (Decl) then
- Insert_Action (N, Decl);
- end if;
- end;
- end if;
+ Insert_Action (N, Debug_Renaming_Declaration (N));
end if;
-- Exception on library entity not available
diff --git a/gcc/ada/exp_ch3.ads b/gcc/ada/exp_ch3.ads
index ca8a550..f7d43c4 100644
--- a/gcc/ada/exp_ch3.ads
+++ b/gcc/ada/exp_ch3.ads
@@ -113,13 +113,6 @@ package Exp_Ch3 is
-- Build the body of the equality function Body_Id for the untagged variant
-- record Typ with the given parameters specification list.
- procedure Ensure_Activation_Chain_And_Master (Obj_Decl : Node_Id);
- -- If tasks are being declared (or might be declared) by the given object
- -- declaration then ensure to have an activation chain defined for the
- -- tasks (has no effect if we already have one), and also that a Master
- -- variable is established (and that the appropriate enclosing construct
- -- is established as a task master).
-
function Freeze_Type (N : Node_Id) return Boolean;
-- This function executes the freezing actions associated with the given
-- freeze type node N and returns True if the node is to be deleted. We
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 140789a..288ce9a9 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -81,6 +81,10 @@ with Warnsw; use Warnsw;
package body Exp_Ch4 is
+ Too_Large_Length_For_Array : constant Unat := Uint_256;
+ -- Threshold from which we do not try to create static array temporaries in
+ -- order to eliminate dynamic stack allocations.
+
-----------------------
-- Local Subprograms --
-----------------------
@@ -174,6 +178,10 @@ package body Exp_Ch4 is
-- routine is to find the real type by looking up the tree. We also
-- determine if the operation must be rounded.
+ procedure Get_First_Index_Bounds (T : Entity_Id; Lo, Hi : out Uint);
+ -- T is an array whose index bounds are all known at compile time. Return
+ -- the value of the low and high bounds of the first index of T.
+
function Get_Size_For_Range (Lo, Hi : Uint) return Uint;
-- Return the size of a small signed integer type covering Lo .. Hi, the
-- main goal being to return a size lower than that of standard types.
@@ -1328,29 +1336,17 @@ package body Exp_Ch4 is
if Ekind (Otyp) = E_String_Literal_Subtype then
return String_Literal_Length (Otyp) < 4;
- else
+ elsif Compile_Time_Known_Bounds (Otyp) then
declare
- Ityp : constant Entity_Id := Etype (First_Index (Otyp));
- Lo : constant Node_Id := Type_Low_Bound (Ityp);
- Hi : constant Node_Id := Type_High_Bound (Ityp);
- Lov : Uint;
- Hiv : Uint;
+ Lo, Hi : Uint;
begin
- if Compile_Time_Known_Value (Lo) then
- Lov := Expr_Value (Lo);
- else
- return False;
- end if;
-
- if Compile_Time_Known_Value (Hi) then
- Hiv := Expr_Value (Hi);
- else
- return False;
- end if;
-
- return Hiv < Lov + 3;
+ Get_First_Index_Bounds (Otyp, Lo, Hi);
+ return Hi < Lo + 3;
end;
+
+ else
+ return False;
end if;
end Length_Less_Than_4;
@@ -2711,10 +2707,15 @@ package body Exp_Ch4 is
-- Set to the corresponding entry in the Opnds list (but note that null
-- operands are excluded, so not all entries in the list are stored).
- Fixed_Length : array (1 .. N) of Uint;
+ Fixed_Length : array (1 .. N) of Unat;
-- Set to length of operand. Entries in this array are set only if the
-- corresponding entry in Is_Fixed_Length is True.
+ Max_Length : array (1 .. N) of Unat;
+ -- Set to the maximum length of operand, or Too_Large_Length_For_Array
+ -- if it is not known. Entries in this array are set only if the
+ -- corresponding entry in Is_Fixed_Length is False;
+
Opnd_Low_Bound : array (1 .. N) of Node_Id;
-- Set to lower bound of operand. Either an integer literal in the case
-- where the bound is known at compile time, else actual lower bound.
@@ -2727,17 +2728,24 @@ package body Exp_Ch4 is
-- is False. The entity is of type Artyp.
Aggr_Length : array (0 .. N) of Node_Id;
- -- The J'th entry in an expression node that represents the total length
+ -- The J'th entry is an expression node that represents the total length
-- of operands 1 through J. It is either an integer literal node, or a
-- reference to a constant entity with the right value, so it is fine
-- to just do a Copy_Node to get an appropriate copy. The extra zeroth
-- entry always is set to zero. The length is of type Artyp.
+ Max_Aggr_Length : Unat := Too_Large_Length_For_Array;
+ -- Set to the maximum total length, or Too_Large_Length_For_Array at
+ -- least if it is not known.
+
Low_Bound : Node_Id := Empty;
-- A tree node representing the low bound of the result (of type Ityp).
-- This is either an integer literal node, or an identifier reference to
-- a constant entity initialized to the appropriate value.
+ High_Bound : Node_Id := Empty;
+ -- A tree node representing the high bound of the result (of type Ityp)
+
Last_Opnd_Low_Bound : Node_Id := Empty;
-- A tree node representing the low bound of the last operand. This
-- need only be set if the result could be null. It is used for the
@@ -2750,9 +2758,6 @@ package body Exp_Ch4 is
-- special case of setting the right high bound for a null result.
-- This is of type Ityp.
- High_Bound : Node_Id := Empty;
- -- A tree node representing the high bound of the result (of type Ityp)
-
Result : Node_Id := Empty;
-- Result of the concatenation (of type Ityp)
@@ -2767,7 +2772,7 @@ package body Exp_Ch4 is
-- Return True if the concatenation is within the expression of the
-- declaration of a library-level object.
- function Make_Artyp_Literal (Val : Nat) return Node_Id;
+ function Make_Artyp_Literal (Val : Uint) return Node_Id;
-- This function makes an N_Integer_Literal node that is returned in
-- analyzed form with the type set to Artyp. Importantly this literal
-- is not flagged as static, so that if we do computations with it that
@@ -2810,7 +2815,7 @@ package body Exp_Ch4 is
-- Make_Artyp_Literal --
------------------------
- function Make_Artyp_Literal (Val : Nat) return Node_Id is
+ function Make_Artyp_Literal (Val : Uint) return Node_Id is
Result : constant Node_Id := Make_Integer_Literal (Loc, Val);
begin
Set_Etype (Result, Artyp);
@@ -2867,9 +2872,10 @@ package body Exp_Ch4 is
-- Local Declarations
Opnd_Typ : Entity_Id;
+ Slice_Rng : Entity_Id;
Subtyp_Ind : Entity_Id;
Ent : Entity_Id;
- Len : Uint;
+ Len : Unat;
J : Nat;
Clen : Node_Id;
Set : Boolean;
@@ -2925,7 +2931,7 @@ package body Exp_Ch4 is
-- Supply dummy entry at start of length array
- Aggr_Length (0) := Make_Artyp_Literal (0);
+ Aggr_Length (0) := Make_Artyp_Literal (Uint_0);
-- Go through operands setting up the above arrays
@@ -2969,7 +2975,7 @@ package body Exp_Ch4 is
elsif Nkind (Opnd) = N_String_Literal then
Len := String_Literal_Length (Opnd_Typ);
- if Len /= 0 then
+ if Len > 0 then
Result_May_Be_Null := False;
end if;
@@ -3010,61 +3016,47 @@ package body Exp_Ch4 is
else
-- Check constrained case with known bounds
- if Is_Constrained (Opnd_Typ) then
+ if Is_Constrained (Opnd_Typ)
+ and then Compile_Time_Known_Bounds (Opnd_Typ)
+ then
declare
- Index : constant Node_Id := First_Index (Opnd_Typ);
- Indx_Typ : constant Entity_Id := Etype (Index);
- Lo : constant Node_Id := Type_Low_Bound (Indx_Typ);
- Hi : constant Node_Id := Type_High_Bound (Indx_Typ);
+ Lo, Hi : Uint;
begin
-- Fixed length constrained array type with known at compile
-- time bounds is last case of fixed length operand.
- if Compile_Time_Known_Value (Lo)
- and then
- Compile_Time_Known_Value (Hi)
- then
- declare
- Loval : constant Uint := Expr_Value (Lo);
- Hival : constant Uint := Expr_Value (Hi);
- Len : constant Uint :=
- UI_Max (Hival - Loval + 1, Uint_0);
+ Get_First_Index_Bounds (Opnd_Typ, Lo, Hi);
+ Len := UI_Max (Hi - Lo + 1, Uint_0);
- begin
- if Len > 0 then
- Result_May_Be_Null := False;
- end if;
+ if Len > 0 then
+ Result_May_Be_Null := False;
+ end if;
- -- Capture last operand bounds if result could be null
+ -- Capture last operand bounds if result could be null
- if J = N and then Result_May_Be_Null then
- Last_Opnd_Low_Bound :=
- Convert_To (Ityp,
- Make_Integer_Literal (Loc, Expr_Value (Lo)));
+ if J = N and then Result_May_Be_Null then
+ Last_Opnd_Low_Bound :=
+ To_Ityp (Make_Integer_Literal (Loc, Lo));
- Last_Opnd_High_Bound :=
- Convert_To (Ityp,
- Make_Integer_Literal (Loc, Expr_Value (Hi)));
- end if;
+ Last_Opnd_High_Bound :=
+ To_Ityp (Make_Integer_Literal (Loc, Hi));
+ end if;
- -- Exclude null length case unless last operand
+ -- Exclude null length case unless last operand
- if J < N and then Len = 0 then
- goto Continue;
- end if;
+ if J < N and then Len = 0 then
+ goto Continue;
+ end if;
- NN := NN + 1;
- Operands (NN) := Opnd;
- Is_Fixed_Length (NN) := True;
- Fixed_Length (NN) := Len;
+ NN := NN + 1;
+ Operands (NN) := Opnd;
+ Is_Fixed_Length (NN) := True;
+ Fixed_Length (NN) := Len;
- Opnd_Low_Bound (NN) :=
- To_Ityp
- (Make_Integer_Literal (Loc, Expr_Value (Lo)));
- Set := True;
- end;
- end if;
+ Opnd_Low_Bound (NN) :=
+ To_Ityp (Make_Integer_Literal (Loc, Lo));
+ Set := True;
end;
end if;
@@ -3108,6 +3100,25 @@ package body Exp_Ch4 is
Var_Length (NN) := Make_Temporary (Loc, 'L');
+ -- If the operand is a slice, try to compute an upper bound for
+ -- its length.
+
+ if Nkind (Opnd) = N_Slice
+ and then Is_Constrained (Etype (Prefix (Opnd)))
+ and then Compile_Time_Known_Bounds (Etype (Prefix (Opnd)))
+ then
+ declare
+ Lo, Hi : Uint;
+
+ begin
+ Get_First_Index_Bounds (Etype (Prefix (Opnd)), Lo, Hi);
+ Max_Length (NN) := UI_Max (Hi - Lo + 1, Uint_0);
+ end;
+
+ else
+ Max_Length (NN) := Too_Large_Length_For_Array;
+ end if;
+
Append_To (Actions,
Make_Object_Declaration (Loc,
Defining_Identifier => Var_Length (NN),
@@ -3129,8 +3140,10 @@ package body Exp_Ch4 is
if NN = 1 then
if Is_Fixed_Length (1) then
Aggr_Length (1) := Make_Integer_Literal (Loc, Fixed_Length (1));
+ Max_Aggr_Length := Fixed_Length (1);
else
Aggr_Length (1) := New_Occurrence_Of (Var_Length (1), Loc);
+ Max_Aggr_Length := Max_Length (1);
end if;
-- If entry is fixed length and only fixed lengths so far, make
@@ -3142,6 +3155,7 @@ package body Exp_Ch4 is
Aggr_Length (NN) :=
Make_Integer_Literal (Loc,
Intval => Fixed_Length (NN) + Intval (Aggr_Length (NN - 1)));
+ Max_Aggr_Length := Intval (Aggr_Length (NN));
-- All other cases, construct an addition node for the length and
-- create an entity initialized to this length.
@@ -3151,8 +3165,11 @@ package body Exp_Ch4 is
if Is_Fixed_Length (NN) then
Clen := Make_Integer_Literal (Loc, Fixed_Length (NN));
+ Max_Aggr_Length := Max_Aggr_Length + Fixed_Length (NN);
+
else
Clen := New_Occurrence_Of (Var_Length (NN), Loc);
+ Max_Aggr_Length := Max_Aggr_Length + Max_Length (NN);
end if;
Append_To (Actions,
@@ -3277,29 +3294,38 @@ package body Exp_Ch4 is
pragma Assert (Present (Low_Bound));
- -- Now we can safely compute the upper bound, normally
- -- Low_Bound + Length - 1.
+ -- Now we can compute the high bound as Low_Bound + Length - 1
- High_Bound :=
- To_Ityp
- (Make_Op_Add (Loc,
- Left_Opnd => To_Artyp (New_Copy_Tree (Low_Bound)),
- Right_Opnd =>
- Make_Op_Subtract (Loc,
- Left_Opnd => New_Copy_Tree (Aggr_Length (NN)),
- Right_Opnd => Make_Artyp_Literal (1))));
-
- -- Note that calculation of the high bound may cause overflow in some
- -- very weird cases, so in the general case we need an overflow check on
- -- the high bound. We can avoid this for the common case of string types
- -- and other types whose index is Positive, since we chose a wider range
- -- for the arithmetic type. If checks are suppressed we do not set the
- -- flag, and possibly superfluous warnings will be omitted.
-
- if Istyp /= Standard_Positive
- and then not Overflow_Checks_Suppressed (Istyp)
+ if Compile_Time_Known_Value (Low_Bound)
+ and then Nkind (Aggr_Length (NN)) = N_Integer_Literal
then
- Activate_Overflow_Check (High_Bound);
+ High_Bound :=
+ To_Ityp
+ (Make_Artyp_Literal
+ (Expr_Value (Low_Bound) + Intval (Aggr_Length (NN)) - 1));
+
+ else
+ High_Bound :=
+ To_Ityp
+ (Make_Op_Add (Loc,
+ Left_Opnd => To_Artyp (New_Copy_Tree (Low_Bound)),
+ Right_Opnd =>
+ Make_Op_Subtract (Loc,
+ Left_Opnd => New_Copy_Tree (Aggr_Length (NN)),
+ Right_Opnd => Make_Artyp_Literal (Uint_1))));
+
+ -- Note that calculation of the high bound may cause overflow in some
+ -- very weird cases, so in the general case we need an overflow check
+ -- on the high bound. We can avoid this for the common case of string
+ -- types and other types whose index is Positive, since we chose a
+ -- wider range for the arithmetic type. If checks are suppressed, we
+ -- do not set the flag so superfluous warnings may be omitted.
+
+ if Istyp /= Standard_Positive
+ and then not Overflow_Checks_Suppressed (Istyp)
+ then
+ Activate_Overflow_Check (High_Bound);
+ end if;
end if;
-- Handle the exceptional case where the result is null, in which case
@@ -3312,7 +3338,7 @@ package body Exp_Ch4 is
Expressions => New_List (
Make_Op_Eq (Loc,
Left_Opnd => New_Copy_Tree (Aggr_Length (NN)),
- Right_Opnd => Make_Artyp_Literal (0)),
+ Right_Opnd => Make_Artyp_Literal (Uint_0)),
Last_Opnd_Low_Bound,
Low_Bound));
@@ -3321,7 +3347,7 @@ package body Exp_Ch4 is
Expressions => New_List (
Make_Op_Eq (Loc,
Left_Opnd => New_Copy_Tree (Aggr_Length (NN)),
- Right_Opnd => Make_Artyp_Literal (0)),
+ Right_Opnd => Make_Artyp_Literal (Uint_0)),
Last_Opnd_High_Bound,
High_Bound));
end if;
@@ -3330,6 +3356,35 @@ package body Exp_Ch4 is
Insert_Actions (Cnode, Actions, Suppress => All_Checks);
+ -- If the low bound is known at compile time and not the high bound, but
+ -- we have computed a sensible upper bound for the length, then adjust
+ -- the high bound for the subtype of the array. This will change it into
+ -- a static subtype and thus help the code generator.
+
+ if Compile_Time_Known_Value (Low_Bound)
+ and then not Compile_Time_Known_Value (High_Bound)
+ and then Max_Aggr_Length < Too_Large_Length_For_Array
+ then
+ declare
+ Known_High_Bound : constant Node_Id :=
+ To_Ityp
+ (Make_Artyp_Literal
+ (Expr_Value (Low_Bound) + Max_Aggr_Length - 1));
+
+ begin
+ if not Is_Out_Of_Range (Known_High_Bound, Ityp) then
+ Slice_Rng := Make_Range (Loc, Low_Bound, High_Bound);
+ High_Bound := Known_High_Bound;
+
+ else
+ Slice_Rng := Empty;
+ end if;
+ end;
+
+ else
+ Slice_Rng := Empty;
+ end if;
+
-- Now we construct an array object with appropriate bounds. We mark
-- the target as internal to prevent useless initialization when
-- Initialize_Scalars is enabled. Also since this is the actual result
@@ -3443,16 +3498,26 @@ package body Exp_Ch4 is
-- Catch the static out of range case now
- if Raises_Constraint_Error (High_Bound) then
+ if Raises_Constraint_Error (High_Bound)
+ or else Is_Out_Of_Range (High_Bound, Ityp)
+ then
-- Kill warning generated for the declaration of the static out of
-- range high bound, and instead generate a Constraint_Error with
-- an appropriate specific message.
- Kill_Dead_Code (Declaration_Node (Entity (High_Bound)));
+ if Nkind (High_Bound) = N_Integer_Literal then
+ Kill_Dead_Code (High_Bound);
+ Rewrite (High_Bound, New_Copy_Tree (Low_Bound));
+
+ else
+ Kill_Dead_Code (Declaration_Node (Entity (High_Bound)));
+ end if;
+
Apply_Compile_Time_Constraint_Error
(N => Cnode,
Msg => "concatenation result upper bound out of range??",
Reason => CE_Range_Check_Failed);
+
return;
end if;
@@ -3529,8 +3594,9 @@ package body Exp_Ch4 is
Name => New_Occurrence_Of (RTE (RR (NN)), Loc),
Parameter_Associations => Opnds));
- Result := New_Occurrence_Of (Ent, Loc);
- goto Done;
+ -- No assignments left to do below
+
+ NN := 0;
end;
end if;
end;
@@ -3553,7 +3619,7 @@ package body Exp_Ch4 is
Right_Opnd =>
Make_Op_Subtract (Loc,
Left_Opnd => Aggr_Length (J),
- Right_Opnd => Make_Artyp_Literal (1)));
+ Right_Opnd => Make_Artyp_Literal (Uint_1)));
begin
-- Singleton case, simple assignment
@@ -3614,10 +3680,15 @@ package body Exp_Ch4 is
end;
end loop;
- -- Finally we build the result, which is a reference to the array object
+ -- Finally we build the result, which is either a direct reference to
+ -- the array object or a slice of it.
Result := New_Occurrence_Of (Ent, Loc);
+ if Present (Slice_Rng) then
+ Result := Make_Slice (Loc, Result, Slice_Rng);
+ end if;
+
<<Done>>
pragma Assert (Present (Result));
Rewrite (Cnode, Result);
@@ -5790,19 +5861,43 @@ package body Exp_Ch4 is
Elsex : constant Node_Id := Next (Thenx);
Typ : constant Entity_Id := Etype (N);
- Actions : List_Id;
- Decl : Node_Id;
- Expr : Node_Id;
- New_If : Node_Id;
- New_N : Node_Id;
-
+ Force_Expand : constant Boolean := Is_Anonymous_Access_Actual (N);
-- Determine if we are dealing with a special case of a conditional
-- expression used as an actual for an anonymous access type which
-- forces us to transform the if expression into an expression with
-- actions in order to create a temporary to capture the level of the
-- expression in each branch.
- Force_Expand : constant Boolean := Is_Anonymous_Access_Actual (N);
+ function OK_For_Single_Subtype (T1, T2 : Entity_Id) return Boolean;
+ -- Return true if it is acceptable to use a single subtype for two
+ -- dependent expressions of subtype T1 and T2 respectively, which are
+ -- unidimensional arrays whose index bounds are known at compile time.
+
+ ---------------------------
+ -- OK_For_Single_Subtype --
+ ---------------------------
+
+ function OK_For_Single_Subtype (T1, T2 : Entity_Id) return Boolean is
+ Lo1, Hi1 : Uint;
+ Lo2, Hi2 : Uint;
+
+ begin
+ Get_First_Index_Bounds (T1, Lo1, Hi1);
+ Get_First_Index_Bounds (T2, Lo2, Hi2);
+
+ -- Return true if the length of the covering subtype is not too large
+
+ return
+ UI_Max (Hi1, Hi2) - UI_Min (Lo1, Lo2) < Too_Large_Length_For_Array;
+ end OK_For_Single_Subtype;
+
+ -- Local variables
+
+ Actions : List_Id;
+ Decl : Node_Id;
+ Expr : Node_Id;
+ New_If : Node_Id;
+ New_N : Node_Id;
-- Start of processing for Expand_N_If_Expression
@@ -5979,6 +6074,223 @@ package body Exp_Ch4 is
Prefix => New_Occurrence_Of (Cnn, Loc));
end;
+ -- If the result is a unidimensional unconstrained array but the two
+ -- dependent expressions have constrained subtypes with known bounds,
+ -- then we expand as follows:
+
+ -- subtype Txx is Typ (<static low-bound> .. <static high-bound>);
+ -- Cnn : Txx;
+ -- if cond then
+ -- <<then actions>>
+ -- Cnn (<then low-bound .. then high-bound>) := then-expr;
+ -- else
+ -- <<else actions>>
+ -- Cnn (<else low bound .. else high-bound>) := else-expr;
+ -- end if;
+
+ -- and replace the if expression by a slice of Cnn, provided that Txx
+ -- is not too large. This will create a static temporary instead of the
+ -- dynamic one of the next case and thus help the code generator.
+
+ -- Note that we need to deal with the case where the else expression is
+ -- itself such a slice, in order to catch if expressions with more than
+ -- two dependent expressions in the source code.
+
+ elsif Is_Array_Type (Typ)
+ and then Number_Dimensions (Typ) = 1
+ and then not Is_Constrained (Typ)
+ and then Is_Constrained (Etype (Thenx))
+ and then Compile_Time_Known_Bounds (Etype (Thenx))
+ and then
+ ((Is_Constrained (Etype (Elsex))
+ and then Compile_Time_Known_Bounds (Etype (Elsex))
+ and then OK_For_Single_Subtype (Etype (Thenx), Etype (Elsex)))
+ or else
+ (Nkind (Elsex) = N_Slice
+ and then Is_Constrained (Etype (Prefix (Elsex)))
+ and then Compile_Time_Known_Bounds (Etype (Prefix (Elsex)))
+ and then
+ OK_For_Single_Subtype (Etype (Thenx), Etype (Prefix (Elsex)))))
+ and then not Generate_C_Code
+ then
+ declare
+ Ityp : constant Entity_Id := Base_Type (Etype (First_Index (Typ)));
+
+ function Build_New_Bound
+ (Then_Bnd : Uint;
+ Else_Bnd : Uint;
+ Slice_Bnd : Node_Id) return Node_Id;
+ -- Build a new bound from the bounds of the if expression
+
+ function To_Ityp (V : Uint) return Node_Id;
+ -- Convert V to an index value in Ityp
+
+ ---------------------
+ -- Build_New_Bound --
+ ---------------------
+
+ function Build_New_Bound
+ (Then_Bnd : Uint;
+ Else_Bnd : Uint;
+ Slice_Bnd : Node_Id) return Node_Id is
+
+ begin
+ if Nkind (Elsex) = N_Slice then
+ if Compile_Time_Known_Value (Slice_Bnd)
+ and then Expr_Value (Slice_Bnd) = Then_Bnd
+ then
+ return To_Ityp (Then_Bnd);
+
+ else
+ return Make_If_Expression (Loc,
+ Expressions => New_List (
+ Duplicate_Subexpr (Cond),
+ To_Ityp (Then_Bnd),
+ New_Copy_Tree (Slice_Bnd)));
+ end if;
+
+ elsif Then_Bnd = Else_Bnd then
+ return To_Ityp (Then_Bnd);
+
+ else
+ return Make_If_Expression (Loc,
+ Expressions => New_List (
+ Duplicate_Subexpr (Cond),
+ To_Ityp (Then_Bnd),
+ To_Ityp (Else_Bnd)));
+ end if;
+ end Build_New_Bound;
+
+ -------------
+ -- To_Ityp --
+ -------------
+
+ function To_Ityp (V : Uint) return Node_Id is
+ Result : constant Node_Id := Make_Integer_Literal (Loc, V);
+
+ begin
+ if Is_Enumeration_Type (Ityp) then
+ return
+ Make_Attribute_Reference (Loc,
+ Prefix => New_Occurrence_Of (Ityp, Loc),
+ Attribute_Name => Name_Val,
+ Expressions => New_List (Result));
+ else
+ return Result;
+ end if;
+ end To_Ityp;
+
+ Ent : Node_Id;
+ Slice_Lo, Slice_Hi : Node_Id;
+ Subtyp_Ind : Node_Id;
+ Else_Lo, Else_Hi : Uint;
+ Min_Lo, Max_Hi : Uint;
+ Then_Lo, Then_Hi : Uint;
+ Then_List, Else_List : List_Id;
+
+ begin
+ Get_First_Index_Bounds (Etype (Thenx), Then_Lo, Then_Hi);
+
+ if Nkind (Elsex) = N_Slice then
+ Slice_Lo := Low_Bound (Discrete_Range (Elsex));
+ Slice_Hi := High_Bound (Discrete_Range (Elsex));
+ Get_First_Index_Bounds
+ (Etype (Prefix (Elsex)), Else_Lo, Else_Hi);
+
+ else
+ Slice_Lo := Empty;
+ Slice_Hi := Empty;
+ Get_First_Index_Bounds (Etype (Elsex), Else_Lo, Else_Hi);
+ end if;
+
+ Min_Lo := UI_Min (Then_Lo, Else_Lo);
+ Max_Hi := UI_Max (Then_Hi, Else_Hi);
+
+ -- Now we construct an array object with appropriate bounds and
+ -- mark it as internal to prevent useless initialization when
+ -- Initialize_Scalars is enabled. Also since this is the actual
+ -- result entity, we make sure we have debug information for it.
+
+ Subtyp_Ind :=
+ Make_Subtype_Indication (Loc,
+ Subtype_Mark => New_Occurrence_Of (Typ, Loc),
+ Constraint =>
+ Make_Index_Or_Discriminant_Constraint (Loc,
+ Constraints => New_List (
+ Make_Range (Loc,
+ Low_Bound => To_Ityp (Min_Lo),
+ High_Bound => To_Ityp (Max_Hi)))));
+
+ Ent := Make_Temporary (Loc, 'C');
+ Set_Is_Internal (Ent);
+ Set_Debug_Info_Needed (Ent);
+
+ Decl :=
+ Make_Object_Declaration (Loc,
+ Defining_Identifier => Ent,
+ Object_Definition => Subtyp_Ind);
+
+ -- If the result of the expression appears as the initializing
+ -- expression of an object declaration, we can just rename the
+ -- result, rather than copying it.
+
+ Mutate_Ekind (Ent, E_Variable);
+ Set_OK_To_Rename (Ent);
+
+ Then_List := New_List (
+ Make_Assignment_Statement (Loc,
+ Name =>
+ Make_Slice (Loc,
+ Prefix => New_Occurrence_Of (Ent, Loc),
+ Discrete_Range =>
+ Make_Range (Loc,
+ Low_Bound => To_Ityp (Then_Lo),
+ High_Bound => To_Ityp (Then_Hi))),
+ Expression => Relocate_Node (Thenx)));
+
+ Set_Suppress_Assignment_Checks (Last (Then_List));
+
+ if Nkind (Elsex) = N_Slice then
+ Else_List := New_List (
+ Make_Assignment_Statement (Loc,
+ Name =>
+ Make_Slice (Loc,
+ Prefix => New_Occurrence_Of (Ent, Loc),
+ Discrete_Range =>
+ Make_Range (Loc,
+ Low_Bound => New_Copy_Tree (Slice_Lo),
+ High_Bound => New_Copy_Tree (Slice_Hi))),
+ Expression => Relocate_Node (Elsex)));
+
+ else
+ Else_List := New_List (
+ Make_Assignment_Statement (Loc,
+ Name =>
+ Make_Slice (Loc,
+ Prefix => New_Occurrence_Of (Ent, Loc),
+ Discrete_Range =>
+ Make_Range (Loc,
+ Low_Bound => To_Ityp (Else_Lo),
+ High_Bound => To_Ityp (Else_Hi))),
+ Expression => Relocate_Node (Elsex)));
+ end if;
+
+ Set_Suppress_Assignment_Checks (Last (Else_List));
+
+ New_If :=
+ Make_Implicit_If_Statement (N,
+ Condition => Duplicate_Subexpr (Cond),
+ Then_Statements => Then_List,
+ Else_Statements => Else_List);
+
+ New_N :=
+ Make_Slice (Loc,
+ Prefix => New_Occurrence_Of (Ent, Loc),
+ Discrete_Range => Make_Range (Loc,
+ Low_Bound => Build_New_Bound (Then_Lo, Else_Lo, Slice_Lo),
+ High_Bound => Build_New_Bound (Then_Hi, Else_Hi, Slice_Hi)));
+ end;
+
-- If the result is an unconstrained array and the if expression is in a
-- context other than the initializing expression of the declaration of
-- an object, then we pull out the if expression as follows:
@@ -6153,7 +6465,7 @@ package body Exp_Ch4 is
end if;
-- For the sake of GNATcoverage, generate an intermediate temporary in
- -- the case where the if-expression is a condition in an outer decision,
+ -- the case where the if expression is a condition in an outer decision,
-- in order to make sure that no branch is shared between the decisions.
elsif Opt.Suppress_Control_Flow_Optimizations
@@ -13318,6 +13630,30 @@ package body Exp_Ch4 is
end if;
end Fixup_Universal_Fixed_Operation;
+ ----------------------------
+ -- Get_First_Index_Bounds --
+ ----------------------------
+
+ procedure Get_First_Index_Bounds (T : Entity_Id; Lo, Hi : out Uint) is
+ Typ : Entity_Id;
+
+ begin
+ pragma Assert (Is_Array_Type (T));
+
+ -- This follows Sem_Eval.Compile_Time_Known_Bounds
+
+ if Ekind (T) = E_String_Literal_Subtype then
+ Lo := Expr_Value (String_Literal_Low_Bound (T));
+ Hi := Lo + String_Literal_Length (T) - 1;
+
+ else
+ Typ := Underlying_Type (Etype (First_Index (T)));
+
+ Lo := Expr_Value (Type_Low_Bound (Typ));
+ Hi := Expr_Value (Type_High_Bound (Typ));
+ end if;
+ end Get_First_Index_Bounds;
+
------------------------
-- Get_Size_For_Range --
------------------------
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 15a2039..bf51e64 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -83,7 +83,48 @@ with Validsw; use Validsw;
package body Exp_Ch6 is
- -- Suffix for BIP formals
+ --------------------------------
+ -- Function return mechanisms --
+ --------------------------------
+
+ -- This is a summary of the various function return mechanisms implemented
+ -- in GNAT for Ada 2005 and later versions of the language. In the below
+ -- table, the first column must be read as an if expression: if the result
+ -- type of the function is limited, then the return mechanism is and ...;
+ -- elsif the result type is indefinite or large definite, then ...; elsif
+ -- ...; else ... The different mechanisms are implemented either in the
+ -- front end, or in the back end, or partly in both ends, depending on the
+ -- result type.
+
+ -- Result type | Return mechanism | Front end | Back end
+ -- --------------------------------------------------------------------
+
+ -- Limited Build In Place All
+
+ -- Indefinite/ Secondary Stack Needs Fin. Others
+ -- Large definite
+
+ -- Needs Fin. Secondary Stack All
+ -- (BERS False)
+
+ -- Needs Fin. Invisible Parameter All All
+ -- (BERS True) (return) (call)
+
+ -- By Reference Invisible Parameter All
+
+ -- Others Primary stack/ All
+ -- Registers
+
+ -- Needs Fin.: type needs finalization [RM 7.6(9.1/2-9.6/2)]
+ -- BERS: Opt.Back_End_Return_Slot setting
+
+ -- The table is valid for all calls except for those dispatching on result;
+ -- the latter calls are considered as returning a class-wide type and thus
+ -- always return on the secondary stack, with the help of a small wrapper
+ -- function (thunk) if the original result type is not itself returned on
+ -- the secondary stack as per the above table.
+
+ -- Suffixes for Build-In-Place extra formals
BIP_Alloc_Suffix : constant String := "BIPalloc";
BIP_Storage_Pool_Suffix : constant String := "BIPstoragepool";
@@ -247,10 +288,10 @@ package body Exp_Ch6 is
procedure Expand_Call_Helper (N : Node_Id; Post_Call : out List_Id);
-- Does the main work of Expand_Call. Post_Call is as for Expand_Actuals.
- procedure Expand_Ctrl_Function_Call (N : Node_Id);
+ procedure Expand_Ctrl_Function_Call (N : Node_Id; Use_Sec_Stack : Boolean);
-- N is a function call which returns a controlled object. Transform the
-- call into a temporary which retrieves the returned object from the
- -- secondary stack using 'reference.
+ -- primary or secondary stack (Use_Sec_Stack says which) using 'reference.
procedure Expand_Non_Function_Return (N : Node_Id);
-- Expand a simple return statement found in a procedure body, entry body,
@@ -850,11 +891,12 @@ package body Exp_Ch6 is
-- The return type in the function declaration may have been a limited
-- view, and the extra formals for the function were not generated at
-- that point. At the point of call the full view must be available and
- -- the extra formals can be created.
+ -- the extra formals can be created and Returns_By_Ref computed.
if No (Extra_Formal) then
Create_Extra_Formals (Func);
Extra_Formal := Extra_Formals (Func);
+ Compute_Returns_By_Ref (Func);
end if;
-- We search for a formal with a matching suffix. We can't search
@@ -4915,7 +4957,7 @@ package body Exp_Ch6 is
-- different processing applies. If the call is to a protected function,
-- the expansion above will call Expand_Call recursively. Otherwise the
-- function call is transformed into a reference to the result that has
- -- been built either on the return or the secondary stack.
+ -- been built either on the primary or the secondary stack.
if Needs_Finalization (Etype (Subp)) then
if not Is_Build_In_Place_Function_Call (Call_Node)
@@ -4924,7 +4966,8 @@ package body Exp_Ch6 is
or else
not Is_Concurrent_Record_Type (Etype (First_Formal (Subp))))
then
- Expand_Ctrl_Function_Call (Call_Node);
+ Expand_Ctrl_Function_Call
+ (Call_Node, Needs_Secondary_Stack (Etype (Subp)));
-- Build-in-place function calls which appear in anonymous contexts
-- need a transient scope to ensure the proper finalization of the
@@ -4955,7 +4998,10 @@ package body Exp_Ch6 is
-- Expand_Ctrl_Function_Call --
-------------------------------
- procedure Expand_Ctrl_Function_Call (N : Node_Id) is
+ procedure Expand_Ctrl_Function_Call (N : Node_Id; Use_Sec_Stack : Boolean)
+ is
+ Par : constant Node_Id := Parent (N);
+
function Is_Element_Reference (N : Node_Id) return Boolean;
-- Determine whether node N denotes a reference to an Ada 2012 container
-- element.
@@ -4980,12 +5026,19 @@ package body Exp_Ch6 is
-- Start of processing for Expand_Ctrl_Function_Call
begin
- -- Optimization, if the returned value (which is on the sec-stack) is
- -- returned again, no need to copy/readjust/finalize, we can just pass
- -- the value thru (see Expand_N_Simple_Return_Statement), and thus no
- -- attachment is needed.
+ -- Optimization: if the returned value is returned again, then no need
+ -- to copy/readjust/finalize, we can just pass the value through (see
+ -- Expand_N_Simple_Return_Statement), and thus no attachment is needed.
+
+ if Nkind (Par) = N_Simple_Return_Statement then
+ return;
+ end if;
- if Nkind (Parent (N)) = N_Simple_Return_Statement then
+ -- Another optimization: if the returned value is used to initialize an
+ -- object, and the secondary stack is not involved in the call, then no
+ -- need to copy/readjust/finalize, we can just initialize it in place.
+
+ if Nkind (Par) = N_Object_Declaration and then not Use_Sec_Stack then
return;
end if;
@@ -5067,48 +5120,15 @@ package body Exp_Ch6 is
-- (in which case default initial values might need to be set)).
procedure Expand_N_Extended_Return_Statement (N : Node_Id) is
- Loc : constant Source_Ptr := Sloc (N);
-
- function Build_Heap_Or_Pool_Allocator
- (Temp_Id : Entity_Id;
- Temp_Typ : Entity_Id;
- Func_Id : Entity_Id;
- Ret_Typ : Entity_Id;
- Alloc_Expr : Node_Id) return Node_Id;
- -- Create the statements necessary to allocate a return object on the
- -- heap or user-defined storage pool. The object may need finalization
- -- actions depending on the return type.
- --
- -- * Controlled case
- --
- -- if BIPfinalizationmaster = null then
- -- Temp_Id := <Alloc_Expr>;
- -- else
- -- declare
- -- type Ptr_Typ is access Ret_Typ;
- -- for Ptr_Typ'Storage_Pool use
- -- Base_Pool (BIPfinalizationmaster.all).all;
- -- Local : Ptr_Typ;
- --
- -- begin
- -- procedure Allocate (...) is
- -- begin
- -- System.Storage_Pools.Subpools.Allocate_Any (...);
- -- end Allocate;
- --
- -- Local := <Alloc_Expr>;
- -- Temp_Id := Temp_Typ (Local);
- -- end;
- -- end if;
- --
- -- * Non-controlled case
- --
- -- Temp_Id := <Alloc_Expr>;
- --
- -- Temp_Id is the temporary which is used to reference the internally
- -- created object in all allocation forms. Temp_Typ is the type of the
- -- temporary. Func_Id is the enclosing function. Ret_Typ is the return
- -- type of Func_Id. Alloc_Expr is the actual allocator.
+ Loc : constant Source_Ptr := Sloc (N);
+ Func_Id : constant Entity_Id :=
+ Return_Applies_To (Return_Statement_Entity (N));
+ Is_BIP_Func : constant Boolean :=
+ Is_Build_In_Place_Function (Func_Id);
+ Ret_Obj_Id : constant Entity_Id :=
+ First_Entity (Return_Statement_Entity (N));
+ Ret_Obj_Decl : constant Node_Id := Parent (Ret_Obj_Id);
+ Ret_Typ : constant Entity_Id := Etype (Func_Id);
function Move_Activation_Chain (Func_Id : Entity_Id) return Node_Id;
-- Construct a call to System.Tasking.Stages.Move_Activation_Chain
@@ -5120,173 +5140,6 @@ package body Exp_Ch6 is
-- Func_Id is the entity of the function where the extended return
-- statement appears.
- ----------------------------------
- -- Build_Heap_Or_Pool_Allocator --
- ----------------------------------
-
- function Build_Heap_Or_Pool_Allocator
- (Temp_Id : Entity_Id;
- Temp_Typ : Entity_Id;
- Func_Id : Entity_Id;
- Ret_Typ : Entity_Id;
- Alloc_Expr : Node_Id) return Node_Id
- is
- begin
- pragma Assert (Is_Build_In_Place_Function (Func_Id));
-
- -- Processing for objects that require finalization actions
-
- if Needs_Finalization (Ret_Typ) then
- declare
- Decls : constant List_Id := New_List;
- Fin_Mas_Id : constant Entity_Id :=
- Build_In_Place_Formal
- (Func_Id, BIP_Finalization_Master);
- Orig_Expr : constant Node_Id :=
- New_Copy_Tree
- (Source => Alloc_Expr,
- Scopes_In_EWA_OK => True);
- Stmts : constant List_Id := New_List;
- Desig_Typ : Entity_Id;
- Local_Id : Entity_Id;
- Pool_Id : Entity_Id;
- Ptr_Typ : Entity_Id;
-
- begin
- -- Generate:
- -- Pool_Id renames Base_Pool (BIPfinalizationmaster.all).all;
-
- Pool_Id := Make_Temporary (Loc, 'P');
-
- Append_To (Decls,
- Make_Object_Renaming_Declaration (Loc,
- Defining_Identifier => Pool_Id,
- Subtype_Mark =>
- New_Occurrence_Of (RTE (RE_Root_Storage_Pool), Loc),
- Name =>
- Make_Explicit_Dereference (Loc,
- Prefix =>
- Make_Function_Call (Loc,
- Name =>
- New_Occurrence_Of (RTE (RE_Base_Pool), Loc),
- Parameter_Associations => New_List (
- Make_Explicit_Dereference (Loc,
- Prefix =>
- New_Occurrence_Of (Fin_Mas_Id, Loc)))))));
-
- -- Create an access type which uses the storage pool of the
- -- caller's master. This additional type is necessary because
- -- the finalization master cannot be associated with the type
- -- of the temporary. Otherwise the secondary stack allocation
- -- will fail.
-
- Desig_Typ := Ret_Typ;
-
- -- Ensure that the build-in-place machinery uses a fat pointer
- -- when allocating an unconstrained array on the heap. In this
- -- case the result object type is a constrained array type even
- -- though the function type is unconstrained.
-
- if Ekind (Desig_Typ) = E_Array_Subtype then
- Desig_Typ := Base_Type (Desig_Typ);
- end if;
-
- -- Generate:
- -- type Ptr_Typ is access Desig_Typ;
-
- Ptr_Typ := Make_Temporary (Loc, 'P');
-
- Append_To (Decls,
- Make_Full_Type_Declaration (Loc,
- Defining_Identifier => Ptr_Typ,
- Type_Definition =>
- Make_Access_To_Object_Definition (Loc,
- Subtype_Indication =>
- New_Occurrence_Of (Desig_Typ, Loc))));
-
- -- Perform minor decoration in order to set the master and the
- -- storage pool attributes.
-
- Mutate_Ekind (Ptr_Typ, E_Access_Type);
- Set_Finalization_Master (Ptr_Typ, Fin_Mas_Id);
- Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
-
- -- Create the temporary, generate:
- -- Local_Id : Ptr_Typ;
-
- Local_Id := Make_Temporary (Loc, 'T');
-
- Append_To (Decls,
- Make_Object_Declaration (Loc,
- Defining_Identifier => Local_Id,
- Object_Definition =>
- New_Occurrence_Of (Ptr_Typ, Loc)));
-
- -- Allocate the object, generate:
- -- Local_Id := <Alloc_Expr>;
-
- Append_To (Stmts,
- Make_Assignment_Statement (Loc,
- Name => New_Occurrence_Of (Local_Id, Loc),
- Expression => Alloc_Expr));
-
- -- Generate:
- -- Temp_Id := Temp_Typ (Local_Id);
-
- Append_To (Stmts,
- Make_Assignment_Statement (Loc,
- Name => New_Occurrence_Of (Temp_Id, Loc),
- Expression =>
- Unchecked_Convert_To (Temp_Typ,
- New_Occurrence_Of (Local_Id, Loc))));
-
- -- Wrap the allocation in a block. This is further conditioned
- -- by checking the caller finalization master at runtime. A
- -- null value indicates a non-existent master, most likely due
- -- to a Finalize_Storage_Only allocation.
-
- -- Generate:
- -- if BIPfinalizationmaster = null then
- -- Temp_Id := <Orig_Expr>;
- -- else
- -- declare
- -- <Decls>
- -- begin
- -- <Stmts>
- -- end;
- -- end if;
-
- return
- Make_If_Statement (Loc,
- Condition =>
- Make_Op_Eq (Loc,
- Left_Opnd => New_Occurrence_Of (Fin_Mas_Id, Loc),
- Right_Opnd => Make_Null (Loc)),
-
- Then_Statements => New_List (
- Make_Assignment_Statement (Loc,
- Name => New_Occurrence_Of (Temp_Id, Loc),
- Expression => Orig_Expr)),
-
- Else_Statements => New_List (
- Make_Block_Statement (Loc,
- Declarations => Decls,
- Handled_Statement_Sequence =>
- Make_Handled_Sequence_Of_Statements (Loc,
- Statements => Stmts))));
- end;
-
- -- For all other cases, generate:
- -- Temp_Id := <Alloc_Expr>;
-
- else
- return
- Make_Assignment_Statement (Loc,
- Name => New_Occurrence_Of (Temp_Id, Loc),
- Expression => Alloc_Expr);
- end if;
- end Build_Heap_Or_Pool_Allocator;
-
---------------------------
-- Move_Activation_Chain --
---------------------------
@@ -5319,15 +5172,6 @@ package body Exp_Ch6 is
-- Local variables
- Func_Id : constant Entity_Id :=
- Return_Applies_To (Return_Statement_Entity (N));
- Is_BIP_Func : constant Boolean :=
- Is_Build_In_Place_Function (Func_Id);
- Ret_Obj_Id : constant Entity_Id :=
- First_Entity (Return_Statement_Entity (N));
- Ret_Obj_Decl : constant Node_Id := Parent (Ret_Obj_Id);
- Ret_Typ : constant Entity_Id := Etype (Func_Id);
-
Exp : Node_Id;
HSS : Node_Id;
Result : Node_Id;
@@ -5496,13 +5340,6 @@ package body Exp_Ch6 is
end;
end if;
- -- Build a simple_return_statement that returns the return object
-
- Return_Stmt :=
- Make_Simple_Return_Statement (Loc,
- Expression => New_Occurrence_Of (Ret_Obj_Id, Loc));
- Append_To (Stmts, Return_Stmt);
-
HSS := Make_Handled_Sequence_Of_Statements (Loc, Stmts);
end if;
@@ -5523,571 +5360,12 @@ package body Exp_Ch6 is
Set_Identifier
(Result, New_Occurrence_Of (Return_Statement_Entity (N), Loc));
- -- If the object decl was already rewritten as a renaming, then we
- -- don't want to do the object allocation and transformation of
- -- the return object declaration to a renaming. This case occurs
- -- when the return object is initialized by a call to another
- -- build-in-place function, and that function is responsible for
- -- the allocation of the return object.
-
- if Is_BIP_Func
- and then Nkind (Ret_Obj_Decl) = N_Object_Renaming_Declaration
- then
- pragma Assert
- (Nkind (Original_Node (Ret_Obj_Decl)) = N_Object_Declaration
- and then
-
- -- It is a regular BIP object declaration
-
- (Is_Build_In_Place_Function_Call
- (Expression (Original_Node (Ret_Obj_Decl)))
-
- -- It is a BIP object declaration that displaces the pointer
- -- to the object to reference a converted interface type.
-
- or else
- Present (Unqual_BIP_Iface_Function_Call
- (Expression (Original_Node (Ret_Obj_Decl))))));
-
- elsif Is_BIP_Func then
-
- -- Locate the implicit access parameter associated with the
- -- caller-supplied return object and convert the return
- -- statement's return object declaration to a renaming of a
- -- dereference of the access parameter. If the return object's
- -- declaration includes an expression that has not already been
- -- expanded as separate assignments, then add an assignment
- -- statement to ensure the return object gets initialized.
-
- -- declare
- -- Result : T [:= <expression>];
- -- begin
- -- ...
-
- -- is converted to
-
- -- declare
- -- Result : T renames FuncRA.all;
- -- [Result := <expression;]
- -- begin
- -- ...
-
- declare
- Ret_Obj_Expr : constant Node_Id := Expression (Ret_Obj_Decl);
- Ret_Obj_Typ : constant Entity_Id := Etype (Ret_Obj_Id);
-
- Init_Assignment : Node_Id := Empty;
- Obj_Acc_Formal : Entity_Id;
- Obj_Acc_Deref : Node_Id;
- Obj_Alloc_Formal : Entity_Id;
-
- begin
- -- Retrieve the implicit access parameter passed by the caller
-
- Obj_Acc_Formal :=
- Build_In_Place_Formal (Func_Id, BIP_Object_Access);
-
- -- If the return object's declaration includes an expression
- -- and the declaration isn't marked as No_Initialization, then
- -- we need to generate an assignment to the object and insert
- -- it after the declaration before rewriting it as a renaming
- -- (otherwise we'll lose the initialization). The case where
- -- the result type is an interface (or class-wide interface)
- -- is also excluded because the context of the function call
- -- must be unconstrained, so the initialization will always
- -- be done as part of an allocator evaluation (storage pool
- -- or secondary stack), never to a constrained target object
- -- passed in by the caller. Besides the assignment being
- -- unneeded in this case, it avoids problems with trying to
- -- generate a dispatching assignment when the return expression
- -- is a nonlimited descendant of a limited interface (the
- -- interface has no assignment operation).
-
- if Present (Ret_Obj_Expr)
- and then not No_Initialization (Ret_Obj_Decl)
- and then not Is_Interface (Ret_Obj_Typ)
- then
- Init_Assignment :=
- Make_Assignment_Statement (Loc,
- Name => New_Occurrence_Of (Ret_Obj_Id, Loc),
- Expression =>
- New_Copy_Tree
- (Source => Ret_Obj_Expr,
- Scopes_In_EWA_OK => True));
-
- Set_Etype (Name (Init_Assignment), Etype (Ret_Obj_Id));
- Set_Assignment_OK (Name (Init_Assignment));
- Set_No_Ctrl_Actions (Init_Assignment);
-
- Set_Parent (Name (Init_Assignment), Init_Assignment);
- Set_Parent (Expression (Init_Assignment), Init_Assignment);
-
- Set_Expression (Ret_Obj_Decl, Empty);
-
- if Is_Class_Wide_Type (Etype (Ret_Obj_Id))
- and then not Is_Class_Wide_Type
- (Etype (Expression (Init_Assignment)))
- then
- Rewrite (Expression (Init_Assignment),
- Make_Type_Conversion (Loc,
- Subtype_Mark =>
- New_Occurrence_Of (Etype (Ret_Obj_Id), Loc),
- Expression =>
- Relocate_Node (Expression (Init_Assignment))));
- end if;
-
- -- In the case of functions where the calling context can
- -- determine the form of allocation needed, initialization
- -- is done with each part of the if statement that handles
- -- the different forms of allocation (this is true for
- -- unconstrained, tagged, and controlled result subtypes).
-
- if not Needs_BIP_Alloc_Form (Func_Id) then
- Insert_After (Ret_Obj_Decl, Init_Assignment);
- end if;
- end if;
-
- -- When the function's subtype is unconstrained, a run-time
- -- test may be needed to decide the form of allocation to use
- -- for the return object. The function has an implicit formal
- -- parameter indicating this. If the BIP_Alloc_Form formal has
- -- the value one, then the caller has passed access to an
- -- existing object for use as the return object. If the value
- -- is two, then the return object must be allocated on the
- -- secondary stack. Otherwise, the object must be allocated in
- -- a storage pool. We generate an if statement to test the
- -- implicit allocation formal and initialize a local access
- -- value appropriately, creating allocators in the secondary
- -- stack and global heap cases. The special formal also exists
- -- and must be tested when the function has a tagged result,
- -- even when the result subtype is constrained, because in
- -- general such functions can be called in dispatching contexts
- -- and must be handled similarly to functions with a class-wide
- -- result.
-
- if Needs_BIP_Alloc_Form (Func_Id) then
- Obj_Alloc_Formal :=
- Build_In_Place_Formal (Func_Id, BIP_Alloc_Form);
-
- declare
- Pool_Id : constant Entity_Id :=
- Make_Temporary (Loc, 'P');
- Alloc_Obj_Id : Entity_Id;
- Alloc_Obj_Decl : Node_Id;
- Alloc_If_Stmt : Node_Id;
- Guard_Except : Node_Id;
- Heap_Allocator : Node_Id;
- Pool_Decl : Node_Id;
- Pool_Allocator : Node_Id;
- Ptr_Type_Decl : Node_Id;
- Ref_Type : Entity_Id;
- SS_Allocator : Node_Id;
-
- begin
- -- Create an access type designating the function's
- -- result subtype.
-
- Ref_Type := Make_Temporary (Loc, 'A');
-
- Ptr_Type_Decl :=
- Make_Full_Type_Declaration (Loc,
- Defining_Identifier => Ref_Type,
- Type_Definition =>
- Make_Access_To_Object_Definition (Loc,
- All_Present => True,
- Subtype_Indication =>
- New_Occurrence_Of (Ret_Obj_Typ, Loc)));
-
- Insert_Before (Ret_Obj_Decl, Ptr_Type_Decl);
-
- -- Create an access object that will be initialized to an
- -- access value denoting the return object, either coming
- -- from an implicit access value passed in by the caller
- -- or from the result of an allocator.
-
- Alloc_Obj_Id := Make_Temporary (Loc, 'R');
- Set_Etype (Alloc_Obj_Id, Ref_Type);
-
- Alloc_Obj_Decl :=
- Make_Object_Declaration (Loc,
- Defining_Identifier => Alloc_Obj_Id,
- Object_Definition =>
- New_Occurrence_Of (Ref_Type, Loc));
-
- Insert_Before (Ret_Obj_Decl, Alloc_Obj_Decl);
-
- -- Create allocators for both the secondary stack and
- -- global heap. If there's an initialization expression,
- -- then create these as initialized allocators.
-
- if Present (Ret_Obj_Expr)
- and then not No_Initialization (Ret_Obj_Decl)
- then
- -- Always use the type of the expression for the
- -- qualified expression, rather than the result type.
- -- In general we cannot always use the result type
- -- for the allocator, because the expression might be
- -- of a specific type, such as in the case of an
- -- aggregate or even a nonlimited object when the
- -- result type is a limited class-wide interface type.
-
- Heap_Allocator :=
- Make_Allocator (Loc,
- Expression =>
- Make_Qualified_Expression (Loc,
- Subtype_Mark =>
- New_Occurrence_Of
- (Etype (Ret_Obj_Expr), Loc),
- Expression =>
- New_Copy_Tree
- (Source => Ret_Obj_Expr,
- Scopes_In_EWA_OK => True)));
-
- else
- -- If the function returns a class-wide type we cannot
- -- use the return type for the allocator. Instead we
- -- use the type of the expression, which must be an
- -- aggregate of a definite type.
-
- if Is_Class_Wide_Type (Ret_Obj_Typ) then
- Heap_Allocator :=
- Make_Allocator (Loc,
- Expression =>
- New_Occurrence_Of
- (Etype (Ret_Obj_Expr), Loc));
- else
- Heap_Allocator :=
- Make_Allocator (Loc,
- Expression =>
- New_Occurrence_Of (Ret_Obj_Typ, Loc));
- end if;
-
- -- If the object requires default initialization then
- -- that will happen later following the elaboration of
- -- the object renaming. If we don't turn it off here
- -- then the object will be default initialized twice.
-
- Set_No_Initialization (Heap_Allocator);
- end if;
-
- -- Set the flag indicating that the allocator came from
- -- a build-in-place return statement, so we can avoid
- -- adjusting the allocated object. Note that this flag
- -- will be inherited by the copies made below.
-
- Set_Alloc_For_BIP_Return (Heap_Allocator);
-
- -- The Pool_Allocator is just like the Heap_Allocator,
- -- except we set Storage_Pool and Procedure_To_Call so
- -- it will use the user-defined storage pool.
-
- Pool_Allocator :=
- New_Copy_Tree
- (Source => Heap_Allocator,
- Scopes_In_EWA_OK => True);
-
- pragma Assert (Alloc_For_BIP_Return (Pool_Allocator));
-
- -- Do not generate the renaming of the build-in-place
- -- pool parameter on ZFP because the parameter is not
- -- created in the first place.
-
- if RTE_Available (RE_Root_Storage_Pool_Ptr) then
- Pool_Decl :=
- Make_Object_Renaming_Declaration (Loc,
- Defining_Identifier => Pool_Id,
- Subtype_Mark =>
- New_Occurrence_Of
- (RTE (RE_Root_Storage_Pool), Loc),
- Name =>
- Make_Explicit_Dereference (Loc,
- New_Occurrence_Of
- (Build_In_Place_Formal
- (Func_Id, BIP_Storage_Pool), Loc)));
- Set_Storage_Pool (Pool_Allocator, Pool_Id);
- Set_Procedure_To_Call
- (Pool_Allocator, RTE (RE_Allocate_Any));
- else
- Pool_Decl := Make_Null_Statement (Loc);
- end if;
-
- -- If the No_Allocators restriction is active, then only
- -- an allocator for secondary stack allocation is needed.
- -- It's OK for such allocators to have Comes_From_Source
- -- set to False, because gigi knows not to flag them as
- -- being a violation of No_Implicit_Heap_Allocations.
-
- if Restriction_Active (No_Allocators) then
- SS_Allocator := Heap_Allocator;
- Heap_Allocator := Make_Null (Loc);
- Pool_Allocator := Make_Null (Loc);
-
- -- Otherwise the heap and pool allocators may be needed,
- -- so we make another allocator for secondary stack
- -- allocation.
-
- else
- SS_Allocator :=
- New_Copy_Tree
- (Source => Heap_Allocator,
- Scopes_In_EWA_OK => True);
-
- pragma Assert (Alloc_For_BIP_Return (SS_Allocator));
-
- -- The heap and pool allocators are marked as
- -- Comes_From_Source since they correspond to an
- -- explicit user-written allocator (that is, it will
- -- only be executed on behalf of callers that call the
- -- function as initialization for such an allocator).
- -- Prevents errors when No_Implicit_Heap_Allocations
- -- is in force.
-
- Set_Comes_From_Source (Heap_Allocator, True);
- Set_Comes_From_Source (Pool_Allocator, True);
- end if;
-
- -- The allocator is returned on the secondary stack
-
- Check_Restriction (No_Secondary_Stack, N);
- Set_Storage_Pool (SS_Allocator, RTE (RE_SS_Pool));
- Set_Procedure_To_Call
- (SS_Allocator, RTE (RE_SS_Allocate));
-
- -- The allocator is returned on the secondary stack,
- -- so indicate that the function return, as well as
- -- all blocks that encloses the allocator, must not
- -- release it. The flags must be set now because
- -- the decision to use the secondary stack is done
- -- very late in the course of expanding the return
- -- statement, past the point where these flags are
- -- normally set.
-
- Set_Uses_Sec_Stack (Func_Id);
- Set_Uses_Sec_Stack (Return_Statement_Entity (N));
- Set_Sec_Stack_Needed_For_Return
- (Return_Statement_Entity (N));
- Set_Enclosing_Sec_Stack_Return (N);
-
- -- Guard against poor expansion on the caller side by
- -- using a raise statement to catch out-of-range values
- -- of formal parameter BIP_Alloc_Form.
-
- if Exceptions_OK then
- Guard_Except :=
- Make_Raise_Program_Error (Loc,
- Reason => PE_Build_In_Place_Mismatch);
- else
- Guard_Except := Make_Null_Statement (Loc);
- end if;
-
- -- Create an if statement to test the BIP_Alloc_Form
- -- formal and initialize the access object to either the
- -- BIP_Object_Access formal (BIP_Alloc_Form =
- -- Caller_Allocation), the result of allocating the
- -- object in the secondary stack (BIP_Alloc_Form =
- -- Secondary_Stack), or else an allocator to create the
- -- return object in the heap or user-defined pool
- -- (BIP_Alloc_Form = Global_Heap or User_Storage_Pool).
-
- -- ??? An unchecked type conversion must be made in the
- -- case of assigning the access object formal to the
- -- local access object, because a normal conversion would
- -- be illegal in some cases (such as converting access-
- -- to-unconstrained to access-to-constrained), but the
- -- the unchecked conversion will presumably fail to work
- -- right in just such cases. It's not clear at all how to
- -- handle this. ???
-
- Alloc_If_Stmt :=
- Make_If_Statement (Loc,
- Condition =>
- Make_Op_Eq (Loc,
- Left_Opnd =>
- New_Occurrence_Of (Obj_Alloc_Formal, Loc),
- Right_Opnd =>
- Make_Integer_Literal (Loc,
- UI_From_Int (BIP_Allocation_Form'Pos
- (Caller_Allocation)))),
-
- Then_Statements => New_List (
- Make_Assignment_Statement (Loc,
- Name =>
- New_Occurrence_Of (Alloc_Obj_Id, Loc),
- Expression =>
- Unchecked_Convert_To
- (Ref_Type,
- New_Occurrence_Of (Obj_Acc_Formal, Loc)))),
-
- Elsif_Parts => New_List (
- Make_Elsif_Part (Loc,
- Condition =>
- Make_Op_Eq (Loc,
- Left_Opnd =>
- New_Occurrence_Of (Obj_Alloc_Formal, Loc),
- Right_Opnd =>
- Make_Integer_Literal (Loc,
- UI_From_Int (BIP_Allocation_Form'Pos
- (Secondary_Stack)))),
-
- Then_Statements => New_List (
- Make_Assignment_Statement (Loc,
- Name =>
- New_Occurrence_Of (Alloc_Obj_Id, Loc),
- Expression => SS_Allocator))),
-
- Make_Elsif_Part (Loc,
- Condition =>
- Make_Op_Eq (Loc,
- Left_Opnd =>
- New_Occurrence_Of (Obj_Alloc_Formal, Loc),
- Right_Opnd =>
- Make_Integer_Literal (Loc,
- UI_From_Int (BIP_Allocation_Form'Pos
- (Global_Heap)))),
-
- Then_Statements => New_List (
- Build_Heap_Or_Pool_Allocator
- (Temp_Id => Alloc_Obj_Id,
- Temp_Typ => Ref_Type,
- Func_Id => Func_Id,
- Ret_Typ => Ret_Obj_Typ,
- Alloc_Expr => Heap_Allocator))),
-
- -- ???If all is well, we can put the following
- -- 'elsif' in the 'else', but this is a useful
- -- self-check in case caller and callee don't agree
- -- on whether BIPAlloc and so on should be passed.
-
- Make_Elsif_Part (Loc,
- Condition =>
- Make_Op_Eq (Loc,
- Left_Opnd =>
- New_Occurrence_Of (Obj_Alloc_Formal, Loc),
- Right_Opnd =>
- Make_Integer_Literal (Loc,
- UI_From_Int (BIP_Allocation_Form'Pos
- (User_Storage_Pool)))),
-
- Then_Statements => New_List (
- Pool_Decl,
- Build_Heap_Or_Pool_Allocator
- (Temp_Id => Alloc_Obj_Id,
- Temp_Typ => Ref_Type,
- Func_Id => Func_Id,
- Ret_Typ => Ret_Obj_Typ,
- Alloc_Expr => Pool_Allocator)))),
-
- -- Raise Program_Error if it's none of the above;
- -- this is a compiler bug.
-
- Else_Statements => New_List (Guard_Except));
-
- -- If a separate initialization assignment was created
- -- earlier, append that following the assignment of the
- -- implicit access formal to the access object, to ensure
- -- that the return object is initialized in that case. In
- -- this situation, the target of the assignment must be
- -- rewritten to denote a dereference of the access to the
- -- return object passed in by the caller.
-
- if Present (Init_Assignment) then
- Rewrite (Name (Init_Assignment),
- Make_Explicit_Dereference (Loc,
- Prefix => New_Occurrence_Of (Alloc_Obj_Id, Loc)));
- pragma Assert
- (Assignment_OK
- (Original_Node (Name (Init_Assignment))));
- Set_Assignment_OK (Name (Init_Assignment));
-
- Set_Etype (Name (Init_Assignment), Etype (Ret_Obj_Id));
-
- Append_To
- (Then_Statements (Alloc_If_Stmt), Init_Assignment);
- end if;
-
- Insert_Before (Ret_Obj_Decl, Alloc_If_Stmt);
-
- -- Remember the local access object for use in the
- -- dereference of the renaming created below.
-
- Obj_Acc_Formal := Alloc_Obj_Id;
- end;
-
- -- When the function's subtype is unconstrained and a run-time
- -- test is not needed, we nevertheless need to build the return
- -- using the function's result subtype.
-
- elsif not Is_Constrained (Underlying_Type (Etype (Func_Id)))
- then
- declare
- Alloc_Obj_Id : Entity_Id;
- Alloc_Obj_Decl : Node_Id;
- Ptr_Type_Decl : Node_Id;
- Ref_Type : Entity_Id;
-
- begin
- -- Create an access type designating the function's
- -- result subtype.
-
- Ref_Type := Make_Temporary (Loc, 'A');
-
- Ptr_Type_Decl :=
- Make_Full_Type_Declaration (Loc,
- Defining_Identifier => Ref_Type,
- Type_Definition =>
- Make_Access_To_Object_Definition (Loc,
- All_Present => True,
- Subtype_Indication =>
- New_Occurrence_Of (Ret_Obj_Typ, Loc)));
-
- Insert_Before (Ret_Obj_Decl, Ptr_Type_Decl);
-
- -- Create an access object initialized to the conversion
- -- of the implicit access value passed in by the caller.
-
- Alloc_Obj_Id := Make_Temporary (Loc, 'R');
- Set_Etype (Alloc_Obj_Id, Ref_Type);
-
- -- See the ??? comment a few lines above about the use of
- -- an unchecked conversion here.
-
- Alloc_Obj_Decl :=
- Make_Object_Declaration (Loc,
- Defining_Identifier => Alloc_Obj_Id,
- Object_Definition =>
- New_Occurrence_Of (Ref_Type, Loc),
- Expression =>
- Unchecked_Convert_To
- (Ref_Type,
- New_Occurrence_Of (Obj_Acc_Formal, Loc)));
-
- Insert_Before (Ret_Obj_Decl, Alloc_Obj_Decl);
-
- -- Remember the local access object for use in the
- -- dereference of the renaming created below.
-
- Obj_Acc_Formal := Alloc_Obj_Id;
- end;
- end if;
-
- -- Replace the return object declaration with a renaming of a
- -- dereference of the access value designating the return
- -- object.
-
- Obj_Acc_Deref :=
- Make_Explicit_Dereference (Loc,
- Prefix => New_Occurrence_Of (Obj_Acc_Formal, Loc));
-
- Rewrite (Ret_Obj_Decl,
- Make_Object_Renaming_Declaration (Loc,
- Defining_Identifier => Ret_Obj_Id,
- Access_Definition => Empty,
- Subtype_Mark => New_Occurrence_Of (Ret_Obj_Typ, Loc),
- Name => Obj_Acc_Deref));
+ -- Build a simple_return_statement that returns the return object
- Set_Renamed_Object (Ret_Obj_Id, Obj_Acc_Deref);
- end;
- end if;
+ Return_Stmt :=
+ Make_Simple_Return_Statement (Loc,
+ Expression => New_Occurrence_Of (Ret_Obj_Id, Loc));
+ Append_To (Stmts, Return_Stmt);
-- Case where we do not need to build a block. But we're about to drop
-- Return_Object_Declarations on the floor, so assert that it contains
@@ -6112,9 +5390,7 @@ package body Exp_Ch6 is
-- before an object is returned. A predicate that applies to the return
-- subtype is checked immediately before an object is returned.
- -- Suppress access checks to avoid generating extra checks for b-i-p.
-
- Analyze (N, Suppress => Access_Check);
+ Analyze (N);
end Expand_N_Extended_Return_Statement;
----------------------------
@@ -7240,7 +6516,6 @@ package body Exp_Ch6 is
if not Comes_From_Extended_Return_Statement (N)
and then Is_Build_In_Place_Function (Scope_Id)
- and then not Debug_Flag_Dot_L
-- The functionality of interface thunks is simple and it is always
-- handled by means of simple return statements. This leaves their
@@ -8344,9 +7619,7 @@ package body Exp_Ch6 is
and then Etype (F) /= Etype (A)
then
Append_To (Actuals,
- Make_Unchecked_Type_Conversion (Loc,
- New_Occurrence_Of (Etype (F), Loc),
- New_Copy_Tree (A)));
+ Unchecked_Convert_To (Etype (F), New_Copy_Tree (A)));
else
Append_To (Actuals, New_Copy_Tree (A));
end if;
@@ -8507,89 +7780,6 @@ package body Exp_Ch6 is
end if;
end Install_Class_Preconditions_Check;
- -----------------------------------
- -- Is_Build_In_Place_Result_Type --
- -----------------------------------
-
- function Is_Build_In_Place_Result_Type (Typ : Entity_Id) return Boolean is
- begin
- if not Expander_Active then
- return False;
- end if;
-
- -- In Ada 2005 all functions with an inherently limited return type
- -- must be handled using a build-in-place profile, including the case
- -- of a function with a limited interface result, where the function
- -- may return objects of nonlimited descendants.
-
- if Is_Limited_View (Typ) then
- return Ada_Version >= Ada_2005 and then not Debug_Flag_Dot_L;
-
- else
- if Debug_Flag_Dot_9 then
- return False;
- end if;
-
- if Has_Interfaces (Typ) then
- return False;
- end if;
-
- declare
- T : Entity_Id := Typ;
- begin
- -- For T'Class, return True if it's True for T. This is necessary
- -- because a class-wide function might say "return F (...)", where
- -- F returns the corresponding specific type. We need a loop in
- -- case T is a subtype of a class-wide type.
-
- while Is_Class_Wide_Type (T) loop
- T := Etype (T);
- end loop;
-
- -- If this is a generic formal type in an instance, return True if
- -- it's True for the generic actual type.
-
- if Nkind (Parent (T)) = N_Subtype_Declaration
- and then Present (Generic_Parent_Type (Parent (T)))
- then
- T := Entity (Subtype_Indication (Parent (T)));
-
- if Present (Full_View (T)) then
- T := Full_View (T);
- end if;
- end if;
-
- if Present (Underlying_Type (T)) then
- T := Underlying_Type (T);
- end if;
-
- declare
- Result : Boolean;
- -- So we can stop here in the debugger
- begin
- -- ???For now, enable build-in-place for a very narrow set of
- -- controlled types. Change "if True" to "if False" to
- -- experiment with more controlled types. Eventually, we might
- -- like to enable build-in-place for all tagged types, all
- -- types that need finalization, and all caller-unknown-size
- -- types.
-
- if True then
- Result := Is_Controlled (T)
- and then not Is_Generic_Actual_Type (T)
- and then Present (Enclosing_Subprogram (T))
- and then not Is_Compilation_Unit (Enclosing_Subprogram (T))
- and then Ekind (Enclosing_Subprogram (T)) = E_Procedure;
- else
- Result := Is_Controlled (T);
- end if;
-
- return Result;
- end;
- end;
- end if;
- end Is_Build_In_Place_Result_Type;
-
------------------------------
-- Is_Build_In_Place_Entity --
------------------------------
@@ -8623,6 +7813,9 @@ package body Exp_Ch6 is
--------------------------------
function Is_Build_In_Place_Function (E : Entity_Id) return Boolean is
+ Kind : constant Entity_Kind := Ekind (E);
+ Typ : constant Entity_Id := Etype (E);
+
begin
-- This function is called from Expand_Subtype_From_Expr during
-- semantic analysis, even when expansion is off. In those cases
@@ -8632,22 +7825,16 @@ package body Exp_Ch6 is
return False;
end if;
- if Ekind (E) in E_Function | E_Generic_Function
- or else (Ekind (E) = E_Subprogram_Type
- and then Etype (E) /= Standard_Void_Type)
- then
- -- If the function is imported from a foreign language, we don't do
- -- build-in-place. Note that Import (Ada) functions can do
- -- build-in-place. Note that it is OK for a build-in-place function
- -- to return a type with a foreign convention; the build-in-place
- -- machinery will ensure there is no copying.
-
- return Is_Build_In_Place_Result_Type (Etype (E))
- and then not (Has_Foreign_Convention (E) and then Is_Imported (E))
- and then not Debug_Flag_Dot_L;
- else
- return False;
- end if;
+ -- If the function is imported from a foreign language, we don't do
+ -- build-in-place, whereas Import (Ada) functions can do it. Note also
+ -- that it is OK for a build-in-place function to return a type with a
+ -- foreign convention because the machinery ensures there is no copying.
+
+ return (Kind in E_Function | E_Generic_Function
+ or else
+ (Kind = E_Subprogram_Type and then Typ /= Standard_Void_Type))
+ and then Is_Build_In_Place_Result_Type (Typ)
+ and then not (Is_Imported (E) and then Has_Foreign_Convention (E));
end Is_Build_In_Place_Function;
-------------------------------------
@@ -8710,6 +7897,36 @@ package body Exp_Ch6 is
end;
end Is_Build_In_Place_Function_Call;
+ -----------------------------------
+ -- Is_Build_In_Place_Result_Type --
+ -----------------------------------
+
+ function Is_Build_In_Place_Result_Type (Typ : Entity_Id) return Boolean is
+ begin
+ if not Expander_Active then
+ return False;
+ end if;
+
+ -- In Ada 2005 all functions with an inherently limited return type
+ -- must be handled using a build-in-place profile, including the case
+ -- of a function with a limited interface result, where the function
+ -- may return objects of nonlimited descendants.
+
+ return Is_Limited_View (Typ)
+ and then Ada_Version >= Ada_2005
+ and then not Debug_Flag_Dot_L;
+ end Is_Build_In_Place_Result_Type;
+
+ -------------------------------------
+ -- Is_Build_In_Place_Return_Object --
+ -------------------------------------
+
+ function Is_Build_In_Place_Return_Object (E : Entity_Id) return Boolean is
+ begin
+ return Is_Return_Object (E)
+ and then Is_Build_In_Place_Function (Return_Applies_To (Scope (E)));
+ end Is_Build_In_Place_Return_Object;
+
-----------------------
-- Is_Null_Procedure --
-----------------------
diff --git a/gcc/ada/exp_ch6.ads b/gcc/ada/exp_ch6.ads
index f886eda..19d0bc3 100644
--- a/gcc/ada/exp_ch6.ads
+++ b/gcc/ada/exp_ch6.ads
@@ -127,22 +127,6 @@ package Exp_Ch6 is
function Is_Build_In_Place_Entity (E : Entity_Id) return Boolean;
-- Ada 2005 (AI-318-02): Returns True if E is a BIP entity.
- function Is_Build_In_Place_Result_Type (Typ : Entity_Id) return Boolean;
- -- Ada 2005 (AI-318-02): Returns True if functions returning the type use
- -- build-in-place protocols. For inherently limited types, this must be
- -- True in >= Ada 2005, and must be False in Ada 95. For other types, it
- -- can be True or False, and the decision should be based on efficiency,
- -- and should be the same for all language versions, so that mixed-dialect
- -- programs will work.
- --
- -- For inherently limited types in Ada 2005, True means that calls will
- -- actually be build-in-place in all cases. For other types, build-in-place
- -- will be used when possible, but we need to make a copy in some
- -- cases. For example, for "X := F(...);" if F can see X, or if F can
- -- propagate exceptions, we need to store its result in a temp in general,
- -- and copy the temp into X. Also, for "return Global_Var;" Global_Var
- -- needs to be copied into the function result object.
-
function Is_Build_In_Place_Function (E : Entity_Id) return Boolean;
-- Ada 2005 (AI-318-02): Returns True if E denotes a function, generic
-- function, or access-to-function type for which
@@ -155,6 +139,15 @@ package Exp_Ch6 is
-- that requires handling as a build-in-place call (possibly qualified or
-- converted).
+ function Is_Build_In_Place_Result_Type (Typ : Entity_Id) return Boolean;
+ -- Ada 2005 (AI-318-02): Returns True if functions returning the type use
+ -- build-in-place protocols. For inherently limited types, this must be
+ -- True in >= Ada 2005 and must be False in Ada 95.
+
+ function Is_Build_In_Place_Return_Object (E : Entity_Id) return Boolean;
+ -- Ada 2005 (AI-318-02): Return True is E is a return object of a function
+ -- that uses build-in-place protocols.
+
function Is_Null_Procedure (Subp : Entity_Id) return Boolean;
-- Predicate to recognize stubbed procedures and null procedures, which
-- can be inlined unconditionally in all cases.
@@ -272,4 +265,7 @@ package Exp_Ch6 is
-- to reference the secondary dispatch table of an interface; otherwise
-- return Empty.
+private
+ pragma Inline (Is_Build_In_Place_Return_Object);
+
end Exp_Ch6;
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index 5f1c357..7ce39f4 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -441,10 +441,6 @@ package body Exp_Ch7 is
-- of the formal of Proc, or force a conversion to the class-wide type in
-- the case where the operation is abstract.
- function Enclosing_Function (E : Entity_Id) return Entity_Id;
- -- Given an arbitrary entity, traverse the scope chain looking for the
- -- first enclosing function. Return Empty if no function was found.
-
function Make_Call
(Loc : Source_Ptr;
Proc_Id : Entity_Id;
@@ -871,19 +867,16 @@ package body Exp_Ch7 is
Additional_Cleanup : List_Id) return List_Id
is
Is_Asynchronous_Call : constant Boolean :=
- Nkind (N) = N_Block_Statement
- and then Is_Asynchronous_Call_Block (N);
- Is_Master : constant Boolean :=
- Nkind (N) /= N_Entry_Body
- and then Is_Task_Master (N);
- Is_Protected_Body : constant Boolean :=
- Nkind (N) = N_Subprogram_Body
- and then Is_Protected_Subprogram_Body (N);
- Is_Task_Allocation : constant Boolean :=
- Nkind (N) = N_Block_Statement
- and then Is_Task_Allocation_Block (N);
- Is_Task_Body : constant Boolean :=
- Nkind (Original_Node (N)) = N_Task_Body;
+ Nkind (N) = N_Block_Statement and then Is_Asynchronous_Call_Block (N);
+ Is_Master : constant Boolean :=
+ Nkind (N) /= N_Entry_Body and then Is_Task_Master (N);
+ Is_Protected_Subp_Body : constant Boolean :=
+ Nkind (N) = N_Subprogram_Body
+ and then Is_Protected_Subprogram_Body (N);
+ Is_Task_Allocation : constant Boolean :=
+ Nkind (N) = N_Block_Statement and then Is_Task_Allocation_Block (N);
+ Is_Task_Body : constant Boolean :=
+ Nkind (Original_Node (N)) = N_Task_Body;
Loc : constant Source_Ptr := Sloc (N);
Stmts : constant List_Id := New_List;
@@ -909,7 +902,7 @@ package body Exp_Ch7 is
-- NOTE: The generated code references _object, a parameter to the
-- procedure.
- elsif Is_Protected_Body then
+ elsif Is_Protected_Subp_Body then
declare
Spec : constant Node_Id := Parent (Corresponding_Spec (N));
Conc_Typ : Entity_Id := Empty;
@@ -3063,6 +3056,13 @@ package body Exp_Ch7 is
return;
+ -- If the initialization is in the declaration, we're done, so
+ -- early return if we have no more statements or they have been
+ -- rewritten, which means that they were in the source code.
+
+ elsif No (Stmt) or else Original_Node (Stmt) /= Stmt then
+ return;
+
-- In all other cases the initialization calls follow the related
-- object. The general structure of object initialization built by
-- routine Default_Initialize_Object is as follows:
@@ -3091,8 +3091,6 @@ package body Exp_Ch7 is
-- Otherwise the initialization calls follow the related object
else
- pragma Assert (Present (Stmt));
-
Stmt_2 := Next_Suitable_Statement (Stmt);
-- Check for an optional call to Deep_Initialize which may
@@ -3426,7 +3424,9 @@ package body Exp_Ch7 is
if Is_Return_Object (Obj_Id) then
declare
- Func_Id : constant Entity_Id := Enclosing_Function (Obj_Id);
+ Func_Id : constant Entity_Id :=
+ Return_Applies_To (Scope (Obj_Id));
+
begin
if Is_Build_In_Place_Function (Func_Id)
and then Needs_BIP_Finalization_Master (Func_Id)
@@ -3692,9 +3692,9 @@ package body Exp_Ch7 is
--------------------------
procedure Build_Finalizer_Call (N : Node_Id; Fin_Id : Entity_Id) is
- Is_Prot_Body : constant Boolean :=
- Nkind (N) = N_Subprogram_Body
- and then Is_Protected_Subprogram_Body (N);
+ Is_Protected_Subp_Body : constant Boolean :=
+ Nkind (N) = N_Subprogram_Body
+ and then Is_Protected_Subprogram_Body (N);
-- Determine whether N denotes the protected version of a subprogram
-- which belongs to a protected type.
@@ -3730,7 +3730,7 @@ package body Exp_Ch7 is
-- end;
-- end Prot_SubpP;
- if Is_Prot_Body then
+ if Is_Protected_Subp_Body then
HSS := Handled_Statement_Sequence (Last (Statements (HSS)));
end if;
@@ -5079,26 +5079,6 @@ package body Exp_Ch7 is
end if;
end Convert_View;
- ------------------------
- -- Enclosing_Function --
- ------------------------
-
- function Enclosing_Function (E : Entity_Id) return Entity_Id is
- Func_Id : Entity_Id;
-
- begin
- Func_Id := E;
- while Present (Func_Id) and then Func_Id /= Standard_Standard loop
- if Ekind (Func_Id) = E_Function then
- return Func_Id;
- end if;
-
- Func_Id := Scope (Func_Id);
- end loop;
-
- return Empty;
- end Enclosing_Function;
-
-------------------------------
-- Establish_Transient_Scope --
-------------------------------
@@ -5762,24 +5742,12 @@ package body Exp_Ch7 is
if Is_Task_Allocation then
declare
- Chain : constant Entity_Id := Activation_Chain_Entity (N);
- Decl : Node_Id;
-
+ Chain_Decl : constant N_Object_Declaration_Id :=
+ Parent (Activation_Chain_Entity (N));
+ pragma Assert (List_Containing (Chain_Decl) = Decls);
begin
- Decl := First (Decls);
- while Nkind (Decl) /= N_Object_Declaration
- or else Defining_Identifier (Decl) /= Chain
- loop
- Next (Decl);
-
- -- A task allocation block should always include a _chain
- -- declaration.
-
- pragma Assert (Present (Decl));
- end loop;
-
- Remove (Decl);
- Prepend_To (New_Decls, Decl);
+ Remove (Chain_Decl);
+ Prepend_To (New_Decls, Chain_Decl);
end;
end if;
diff --git a/gcc/ada/exp_code.adb b/gcc/ada/exp_code.adb
index 11fbc5f..d144b48 100644
--- a/gcc/ada/exp_code.adb
+++ b/gcc/ada/exp_code.adb
@@ -471,11 +471,7 @@ package body Exp_Code is
-- Case of list of arguments
elsif Nkind (Arg) = N_Aggregate then
- if Expressions (Arg) = No_List then
- Operand_Var := Empty;
- else
- Operand_Var := First (Expressions (Arg));
- end if;
+ Operand_Var := First (Expressions (Arg));
-- Otherwise must be default (no operands) case
diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb
index 17043d1..3ac4b3b 100644
--- a/gcc/ada/exp_disp.adb
+++ b/gcc/ada/exp_disp.adb
@@ -896,8 +896,14 @@ package body Exp_Disp is
Copy_Strub_Mode (Subp_Typ, Subp);
Set_Convention (Subp_Typ, Convention (Subp));
- if Etype (Subp) = Typ then
- Set_Etype (Subp_Typ, CW_Typ);
+ -- If this is a function and it has a controlling tagged result, then
+ -- the call is dispatching on result and returns the class-wide type.
+
+ if Ekind (Subp) = E_Function
+ and then Has_Controlling_Result (Subp)
+ and then Is_Tagged_Type (Etype (Subp))
+ then
+ Set_Etype (Subp_Typ, Class_Wide_Type (Etype (Subp)));
Set_Returns_By_Ref (Subp_Typ, True);
else
Set_Etype (Subp_Typ, Etype (Subp));
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb
index 6ab717c..51f1195 100644
--- a/gcc/ada/exp_imgv.adb
+++ b/gcc/ada/exp_imgv.adb
@@ -289,12 +289,14 @@ package body Exp_Imgv is
-- If the unit where the type is declared is the main unit, and the
-- number of literals is greater than Threshold_For_Size when we are
-- optimizing for size, and the restriction No_Implicit_Loops is not
- -- active, and -gnatd_h is not specified, generate the hash function.
+ -- active, and -gnatd_h is not specified, and not GNAT_Mode, generate
+ -- the hash function.
if In_Main_Unit
and then (Optimize_Size = 0 or else Nlit > Threshold_For_Size)
and then not Restriction_Active (No_Implicit_Loops)
and then not Debug_Flag_Underscore_H
+ and then not GNAT_Mode
then
declare
LB : constant Positive := 2 * Positive (Nlit) + 1;
diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb
index 5f13087..0631172 100644
--- a/gcc/ada/exp_prag.adb
+++ b/gcc/ada/exp_prag.adb
@@ -105,12 +105,10 @@ package body Exp_Prag is
end if;
end loop;
- if Present (Arg)
- and then Nkind (Arg) = N_Pragma_Argument_Association
- then
- return Expression (Arg);
+ if Present (Arg) then
+ return Get_Pragma_Arg (Arg);
else
- return Arg;
+ return Empty;
end if;
end Arg_N;
diff --git a/gcc/ada/exp_tss.adb b/gcc/ada/exp_tss.adb
index a5d9460..09bb133 100644
--- a/gcc/ada/exp_tss.adb
+++ b/gcc/ada/exp_tss.adb
@@ -49,7 +49,7 @@ package body Exp_Tss is
(Typ : Entity_Id;
Ref : Entity_Id := Empty) return Entity_Id
is
- Full_Type : E;
+ Full_Type : Entity_Id;
Proc : Entity_Id;
begin
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 0f19318..8557e4b 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -113,7 +113,7 @@ package body Exp_Util is
(Header_Num => Type_Map_Header,
Key => Entity_Id,
Element => Node_Or_Entity_Id,
- No_element => Empty,
+ No_Element => Empty,
Hash => Type_Map_Hash,
Equal => "=");
@@ -5730,8 +5730,17 @@ package body Exp_Util is
or else not Is_Array_Type (Exp_Typ)
or else not Aliased_Present (N))
then
- if Is_Itype (Exp_Typ) then
+ if Is_Itype (Exp_Typ)
+ -- If Exp_Typ was created for a previous declaration whose nominal
+ -- subtype is unconstrained, and that declaration is aliased,
+ -- we need to generate a new subtype, because otherwise the
+ -- Is_Constr_Subt_For_U_Nominal flag will be set on the wrong
+ -- subtype, causing failure to detect non-statically-matching
+ -- subtypes on 'Access of the previously-declared object.
+
+ and then not Is_Constr_Subt_For_UN_Aliased (Exp_Typ)
+ then
-- Within an initialization procedure, a selected component
-- denotes a component of the enclosing record, and it appears as
-- an actual in a call to its own initialization procedure. If
@@ -5770,7 +5779,7 @@ package body Exp_Util is
-- This type is marked as an itype even though it has an explicit
-- declaration since otherwise Is_Generic_Actual_Type can get
-- set, resulting in the generation of spurious errors. (See
- -- sem_ch8.Analyze_Package_Renaming and sem_type.covers)
+ -- sem_ch8.Analyze_Package_Renaming and Sem_Type.Covers.)
Set_Is_Itype (T);
Set_Associated_Node_For_Itype (T, Exp);
@@ -10204,8 +10213,8 @@ package body Exp_Util is
elsif Is_Class_Wide_Type (Unc_Typ) then
declare
- CW_Subtype : Entity_Id;
- EQ_Typ : Entity_Id := Empty;
+ CW_Subtype : constant Entity_Id :=
+ New_Class_Wide_Subtype (Unc_Typ, E);
begin
-- A class-wide equivalent type is not needed on VM targets
@@ -10228,11 +10237,10 @@ package body Exp_Util is
Set_Etype (Unc_Typ, Base_Type (Full_View (Etype (Unc_Typ))));
end if;
- EQ_Typ := Make_CW_Equivalent_Type (Unc_Typ, E);
+ Set_Equivalent_Type
+ (CW_Subtype, Make_CW_Equivalent_Type (Unc_Typ, E));
end if;
- CW_Subtype := New_Class_Wide_Subtype (Unc_Typ, E);
- Set_Equivalent_Type (CW_Subtype, EQ_Typ);
Set_Cloned_Subtype (CW_Subtype, Base_Type (Unc_Typ));
return New_Occurrence_Of (CW_Subtype, Loc);
@@ -12008,31 +12016,23 @@ package body Exp_Util is
-- renaming is handled by the front end, as the back end may balk at
-- the nonstandard representation (see Evaluation_Required in Exp_Ch8).
- elsif Nkind (Exp) in N_Indexed_Component | N_Selected_Component
- and then Has_Non_Standard_Rep (Etype (Prefix (Exp)))
- then
- Def_Id := Build_Temporary (Loc, 'R', Exp);
- Res := New_Occurrence_Of (Def_Id, Loc);
-
- Insert_Action (Exp,
- Make_Object_Renaming_Declaration (Loc,
- Defining_Identifier => Def_Id,
- Subtype_Mark => New_Occurrence_Of (Exp_Type, Loc),
- Name => Relocate_Node (Exp)));
+ elsif (Nkind (Exp) in N_Indexed_Component | N_Selected_Component
+ and then Has_Non_Standard_Rep (Etype (Prefix (Exp))))
- -- For an expression that denotes a name, we can use a renaming scheme.
- -- This is needed for correctness in the case of a volatile object of
- -- a nonvolatile type because the Make_Reference call of the "default"
- -- approach would generate an illegal access value (an access value
- -- cannot designate such an object - see Analyze_Reference).
+ -- For an expression that denotes a name, we can use a renaming
+ -- scheme. This is needed for correctness in the case of a volatile
+ -- object of a nonvolatile type because the Make_Reference call of the
+ -- "default" approach would generate an illegal access value (an
+ -- access value cannot designate such an object - see
+ -- Analyze_Reference).
- elsif Is_Name_Reference (Exp)
+ or else (Is_Name_Reference (Exp)
- -- We skip using this scheme if we have an object of a volatile
- -- type and we do not have Name_Req set true (see comments for
- -- Side_Effect_Free).
+ -- We skip using this scheme if we have an object of a volatile
+ -- type and we do not have Name_Req set true (see comments for
+ -- Side_Effect_Free).
- and then (Name_Req or else not Treat_As_Volatile (Exp_Type))
+ and then (Name_Req or else not Treat_As_Volatile (Exp_Type)))
then
Def_Id := Build_Temporary (Loc, 'R', Exp);
Res := New_Occurrence_Of (Def_Id, Loc);
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index b7310a4..3a33373 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -2309,67 +2309,6 @@ package body Freeze is
end loop;
end Check_Unsigned_Type;
- ------------------------------
- -- Is_Full_Access_Aggregate --
- ------------------------------
-
- function Is_Full_Access_Aggregate (N : Node_Id) return Boolean is
- Loc : constant Source_Ptr := Sloc (N);
- New_N : Node_Id;
- Par : Node_Id;
- Temp : Entity_Id;
- Typ : Entity_Id;
-
- begin
- Par := Parent (N);
-
- -- Array may be qualified, so find outer context
-
- if Nkind (Par) = N_Qualified_Expression then
- Par := Parent (Par);
- end if;
-
- if not Comes_From_Source (Par) then
- return False;
- end if;
-
- case Nkind (Par) is
- when N_Assignment_Statement =>
- Typ := Etype (Name (Par));
-
- if not Is_Full_Access (Typ)
- and then not Is_Full_Access_Object (Name (Par))
- then
- return False;
- end if;
-
- when N_Object_Declaration =>
- Typ := Etype (Defining_Identifier (Par));
-
- if not Is_Full_Access (Typ)
- and then not Is_Full_Access (Defining_Identifier (Par))
- then
- return False;
- end if;
-
- when others =>
- return False;
- end case;
-
- Temp := Make_Temporary (Loc, 'T', N);
- New_N :=
- Make_Object_Declaration (Loc,
- Defining_Identifier => Temp,
- Constant_Present => True,
- Object_Definition => New_Occurrence_Of (Typ, Loc),
- Expression => Relocate_Node (N));
- Insert_Before (Par, New_N);
- Analyze (New_N);
-
- Set_Expression (Par, New_Occurrence_Of (Temp, Loc));
- return True;
- end Is_Full_Access_Aggregate;
-
-----------------------------------------------
-- Explode_Initialization_Compound_Statement --
-----------------------------------------------
@@ -6447,20 +6386,6 @@ package body Freeze is
then
Set_Encoded_Interface_Name
(E, Get_Default_External_Name (E));
-
- -- If entity is an atomic object appearing in a declaration and
- -- the expression is an aggregate, assign it to a temporary to
- -- ensure that the actual assignment is done atomically rather
- -- than component-wise (the assignment to the temp may be done
- -- component-wise, but that is harmless).
-
- elsif Is_Full_Access (E)
- and then Nkind (Parent (E)) = N_Object_Declaration
- and then Present (Expression (Parent (E)))
- and then Nkind (Expression (Parent (E))) = N_Aggregate
- and then Is_Full_Access_Aggregate (Expression (Parent (E)))
- then
- null;
end if;
-- Subprogram case
diff --git a/gcc/ada/freeze.ads b/gcc/ada/freeze.ads
index bef4e14..bf941c6 100644
--- a/gcc/ada/freeze.ads
+++ b/gcc/ada/freeze.ads
@@ -177,15 +177,6 @@ package Freeze is
-- True when we are processing the body of a primitive with no previous
-- spec defined after R is frozen (see Check_Dispatching_Operation).
- function Is_Full_Access_Aggregate (N : Node_Id) return Boolean;
- -- If a full access object is initialized with an aggregate or is assigned
- -- an aggregate, we have to prevent a piecemeal access or assignment to the
- -- object, even if the aggregate is to be expanded. We create a temporary
- -- for the aggregate, and assign the temporary instead, so that the back
- -- end can generate an atomic move for it. This is only done in the context
- -- of an object declaration or an assignment. Function is a noop and
- -- returns false in other contexts.
-
procedure Explode_Initialization_Compound_Statement (E : Entity_Id);
-- If Initialization_Statements (E) is an N_Compound_Statement, insert its
-- actions in the enclosing list and reset the attribute.
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
index 1e245ed..02b2d1c 100644
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -1158,7 +1158,7 @@ ada/generated/gnatvsn.ads: ada/gnatvsn.ads BASE-VER ada/GNAT_DATE
s=`cat $(srcdir)/BASE-VER | sed -e "s/\([0-9]*\)\.\([0-9]*\)\..*/-\1\2/g"`; \
d=`if test -f $(srcdir)/ada/GNAT_DATE; then \
cat $(srcdir)/ada/GNAT_DATE; else date +%Y%m%d; fi`; \
- cat $< | sed -e "/Version/s/(\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*)/($$d$$s)/g" >$@
+ cat $< | sed -e "/Version/s/(\([0-9]\{8\}\).*)/($$d$$s)/g" >$@
ada/gnatvsn.o : ada/gnatvsn.adb ada/generated/gnatvsn.ads
$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(ADA_OUTPUT_OPTION)
diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc
index 6e22feb..99277f0 100644
--- a/gcc/ada/gcc-interface/decl.cc
+++ b/gcc/ada/gcc-interface/decl.cc
@@ -660,8 +660,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
like variables. */
if (definition
&& !gnu_expr
- && No (Address_Clause (gnat_entity))
&& !No_Initialization (gnat_decl)
+ && No (Address_Clause (gnat_entity))
&& No (gnat_renamed_obj))
{
gnu_decl = error_mark_node;
@@ -711,6 +711,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
case E_Variable:
{
const Entity_Id gnat_type = Etype (gnat_entity);
+ const Entity_Id gnat_und_type = Underlying_Type (gnat_type);
/* Always create a variable for volatile objects and variables seen
constant but with a Linker_Section pragma. */
bool const_flag
@@ -749,7 +750,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
}
/* Get the type after elaborating the renamed object. */
- if (foreign && Is_Descendant_Of_Address (Underlying_Type (gnat_type)))
+ if (foreign && Is_Descendant_Of_Address (gnat_und_type))
gnu_type = ptr_type_node;
else
gnu_type = gnat_to_gnu_type (gnat_type);
@@ -780,6 +781,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
if (kind == E_Loop_Parameter)
gnu_type = get_base_type (gnu_type);
+ /* If this is a simple constant, strip the qualifiers from its type,
+ since the constant represents only its value. */
+ else if (simple_constant_p (gnat_entity))
+ gnu_type = TYPE_MAIN_VARIANT (gnu_type);
+
/* Reject non-renamed objects whose type is an unconstrained array or
any object whose type is a dummy type or void. */
if ((TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE
@@ -947,7 +953,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
subtype, make a type that includes the template. We will either
allocate or create a variable of that type, see below. */
if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
- && Is_Array_Type (Underlying_Type (gnat_type))
+ && Is_Array_Type (gnat_und_type)
&& !type_annotate_only)
{
tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_type));
@@ -996,8 +1002,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
/* If the object is aliased, of a constrained nominal subtype and its
size might be zero at run time, we force at least the unit size. */
if (Is_Aliased (gnat_entity)
+ && Is_Constrained (gnat_type)
&& !Is_Constr_Subt_For_UN_Aliased (gnat_type)
- && Is_Array_Type (Underlying_Type (gnat_type))
+ && Is_Array_Type (gnat_und_type)
&& !TREE_CONSTANT (gnu_object_size))
gnu_size = size_binop (MAX_EXPR, gnu_object_size, bitsize_unit_node);
@@ -1246,7 +1253,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
subtype, then it can overlay only another aliased object with an
unconstrained array nominal subtype and compatible template. */
if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
- && Is_Array_Type (Underlying_Type (gnat_type))
+ && Is_Array_Type (gnat_und_type)
&& !type_annotate_only)
{
tree rec_type = TREE_TYPE (gnu_type);
@@ -1487,7 +1494,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
object. Note that we have to do it this late because of the
couple of allocation adjustments that might be made above. */
if (Is_Constr_Subt_For_UN_Aliased (gnat_type)
- && Is_Array_Type (Underlying_Type (gnat_type))
+ && Is_Array_Type (gnat_und_type)
&& !type_annotate_only)
{
/* In case the object with the template has already been allocated
@@ -5777,10 +5784,9 @@ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
bool debug_info_p, tree *param_list)
{
const Entity_Kind kind = Ekind (gnat_subprog);
+ const Entity_Id gnat_return_type = Etype (gnat_subprog);
const bool method_p = is_cplusplus_method (gnat_subprog);
const bool variadic = IN (Convention (gnat_subprog), Convention_C_Variadic);
- Entity_Id gnat_return_type = Etype (gnat_subprog);
- Entity_Id gnat_param;
tree gnu_type = present_gnu_tree (gnat_subprog)
? TREE_TYPE (get_gnu_tree (gnat_subprog)) : NULL_TREE;
tree gnu_return_type;
@@ -5810,7 +5816,6 @@ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
bool return_by_direct_ref_p = false;
bool return_by_invisi_ref_p = false;
bool incomplete_profile_p = false;
- int num;
/* Look into the return type and get its associated GCC tree if it is not
void, and then compute various flags for the subprogram type. But make
@@ -5944,6 +5949,8 @@ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
/* Loop over the parameters and get their associated GCC tree. While doing
this, build a copy-in copy-out structure if we need one. */
+ Entity_Id gnat_param;
+ int num;
for (gnat_param = First_Formal_With_Extras (gnat_subprog), num = 0;
Present (gnat_param);
gnat_param = Next_Formal_With_Extras (gnat_param), num++)
@@ -9539,6 +9546,19 @@ promote_object_alignment (tree gnu_type, tree gnu_size, Entity_Id gnat_entity)
return align;
}
+/* Return whether GNAT_ENTITY is a simple constant, i.e. it represents only
+ its value and reading it has no side effects. */
+
+bool
+simple_constant_p (Entity_Id gnat_entity)
+{
+ return Ekind (gnat_entity) == E_Constant
+ && Present (Constant_Value (gnat_entity))
+ && !No_Initialization (gnat_entity)
+ && No (Address_Clause (gnat_entity))
+ && No (Renamed_Object (gnat_entity));
+}
+
/* Verify that TYPE is something we can implement atomically. If not, issue
an error for GNAT_ENTITY. COMPONENT_P is true if we are being called to
process a component type. */
diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h
index b88dfc1..1c1397a 100644
--- a/gcc/ada/gcc-interface/gigi.h
+++ b/gcc/ada/gcc-interface/gigi.h
@@ -998,6 +998,10 @@ extern Entity_Id get_debug_scope (Node_Id gnat_node, bool *is_subprogram);
should be synchronized with Exp_Dbug.Debug_Renaming_Declaration. */
extern bool can_materialize_object_renaming_p (Node_Id expr);
+/* Return whether GNAT_ENTITY is a simple constant, i.e. it represents only
+ its value and reading it has no side effects. */
+extern bool simple_constant_p (Entity_Id gnat_entity);
+
/* Return the size of TYPE, which must be a positive power of 2. */
extern unsigned int resolve_atomic_size (tree type);
diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index f0602b8..8164801 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -4111,9 +4111,11 @@ node_is_atomic (Node_Id gnat_node)
case N_Identifier:
case N_Expanded_Name:
gnat_entity = Entity (gnat_node);
- if (Ekind (gnat_entity) != E_Variable)
+ if (!Is_Object (gnat_entity))
break;
- return Is_Atomic (gnat_entity) || Is_Atomic (Etype (gnat_entity));
+ return Is_Atomic (gnat_entity)
+ || (Is_Atomic (Etype (gnat_entity))
+ && !simple_constant_p (gnat_entity));
case N_Selected_Component:
return Is_Atomic (Etype (gnat_node))
@@ -4152,7 +4154,8 @@ node_is_volatile_full_access (Node_Id gnat_node)
if (!Is_Object (gnat_entity))
break;
return Is_Volatile_Full_Access (gnat_entity)
- || Is_Volatile_Full_Access (Etype (gnat_entity));
+ || (Is_Volatile_Full_Access (Etype (gnat_entity))
+ && !simple_constant_p (gnat_entity));
case N_Selected_Component:
return Is_Volatile_Full_Access (Etype (gnat_node))
@@ -7384,9 +7387,7 @@ gnat_to_gnu (Node_Id gnat_node)
gnu_ret_val = maybe_unconstrained_array (gnu_ret_val);
/* And find out whether it is a candidate for Named Return
- Value. If so, record it. Note that we disable this NRV
- optimization when we're preserving the control flow as
- it entails hoisting the allocation done below. */
+ Value. If so, record it. */
if (optimize
&& !optimize_debug
&& !TYPE_CI_CO_LIST (gnu_subprog_type))
@@ -8731,6 +8732,17 @@ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
gimplify_and_add (TREE_OPERAND (expr, 0), pre_p);
return GS_OK;
+ case SAVE_EXPR:
+ op = TREE_OPERAND (expr, 0);
+
+ /* Propagate TREE_NO_WARNING from expression to temporary by using the
+ SAVE_EXPR itself as an intermediate step. See gimplify_save_expr. */
+ if (SAVE_EXPR_RESOLVED_P (expr))
+ TREE_NO_WARNING (op) = TREE_NO_WARNING (expr);
+ else
+ TREE_NO_WARNING (expr) = TREE_NO_WARNING (op);
+ break;
+
case UNCONSTRAINED_ARRAY_REF:
/* We should only do this if we are just elaborating for side effects,
but we can't know that yet. */
diff --git a/gcc/ada/gcc-interface/utils2.cc b/gcc/ada/gcc-interface/utils2.cc
index ae81a0d..0dcc9ff 100644
--- a/gcc/ada/gcc-interface/utils2.cc
+++ b/gcc/ada/gcc-interface/utils2.cc
@@ -2139,6 +2139,8 @@ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
Entity_Id gnat_proc, Entity_Id gnat_pool)
{
tree gnu_proc = gnat_to_gnu (gnat_proc);
+ tree gnu_align = size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT);
+
tree gnu_call;
/* A storage pool's underlying type is a record type for both predefined
@@ -2154,7 +2156,6 @@ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
tree gnu_pool = gnat_to_gnu (gnat_pool);
tree gnu_pool_addr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_pool);
- tree gnu_align = size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT);
gnu_size = convert (gnu_size_type, gnu_size);
gnu_align = convert (gnu_size_type, gnu_align);
@@ -2178,6 +2179,7 @@ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
tree gnu_size_type = gnat_to_gnu_type (gnat_size_type);
gnu_size = convert (gnu_size_type, gnu_size);
+ gnu_align = convert (gnu_size_type, gnu_align);
if (DECL_BUILT_IN_CLASS (gnu_proc) == BUILT_IN_FRONTEND
&& DECL_FE_FUNCTION_CODE (gnu_proc) == BUILT_IN_RETURN_SLOT)
@@ -2191,7 +2193,7 @@ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
gnu_call = DECL_RESULT (current_function_decl);
- /* The allocation has alreay been done by the caller so we check that
+ /* The allocation has already been done by the caller so we check that
we are not going to overflow the return slot. */
if (TYPE_CI_CO_LIST (TREE_TYPE (current_function_decl)))
gnu_ret_size
@@ -2216,7 +2218,7 @@ build_call_alloc_dealloc_proc (tree gnu_obj, tree gnu_size, tree gnu_type,
gnu_call = build_call_n_expr (gnu_proc, 2, gnu_obj, gnu_size);
else
- gnu_call = build_call_n_expr (gnu_proc, 1, gnu_size);
+ gnu_call = build_call_n_expr (gnu_proc, 2, gnu_size, gnu_align);
}
return gnu_call;
@@ -2334,7 +2336,7 @@ maybe_wrap_free (tree data_ptr, tree data_type)
/* Build a GCC tree to call an allocation or deallocation function.
If GNU_OBJ is nonzero, it is an object to deallocate. Otherwise,
- generate an allocator.
+ generate an allocation.
GNU_SIZE is the number of bytes to allocate and GNU_TYPE is the contained
object type, used to determine the to-be-honored address alignment.
diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb
index 25b9a28..1ce1d6a 100644
--- a/gcc/ada/ghost.adb
+++ b/gcc/ada/ghost.adb
@@ -472,6 +472,13 @@ package body Ghost is
if Is_Ignored_Ghost_Node (Par) then
return True;
+ -- It is not possible to check correct use of Ghost entities
+ -- in generic instantiations until after the generic has been
+ -- resolved. Postpone that verification to after resolution.
+
+ elsif Nkind (Par) = N_Generic_Association then
+ return True;
+
-- A reference to a Ghost entity can appear within an aspect
-- specification (SPARK RM 6.9(10)). The precise checking will
-- occur when analyzing the corresponding pragma. We make an
@@ -508,20 +515,16 @@ package body Ghost is
elsif Nkind (Parent (Par)) in N_Generic_Instantiation
| N_Renaming_Declaration
| N_Generic_Renaming_Declaration
- and then Par = Name (Parent (Par))
+ and then Par = Name (Parent (Par))
then
return True;
- -- In the context of an instantiation, accept currently Ghost
- -- arguments for formal subprograms, as SPARK does not provide
- -- a way to distinguish Ghost formal parameters from non-Ghost
- -- ones. Illegal use of such arguments in a non-Ghost context
- -- will lead to errors inside the instantiation.
+ -- In the case of the renaming of a ghost object, the type
+ -- itself may be ghost.
- elsif Nkind (Parent (Par)) = N_Generic_Association
- and then (Nkind (Par) in N_Has_Entity
- and then Present (Entity (Par))
- and then Is_Subprogram (Entity (Par)))
+ elsif Nkind (Parent (Par)) = N_Object_Renaming_Declaration
+ and then (Par = Subtype_Mark (Parent (Par))
+ or else Par = Access_Definition (Parent (Par)))
then
return True;
@@ -671,6 +674,128 @@ package body Ghost is
end if;
end Check_Ghost_Context;
+ ------------------------------------------------
+ -- Check_Ghost_Context_In_Generic_Association --
+ ------------------------------------------------
+
+ procedure Check_Ghost_Context_In_Generic_Association
+ (Actual : Node_Id;
+ Formal : Entity_Id)
+ is
+ function Emit_Error_On_Ghost_Reference
+ (N : Node_Id)
+ return Traverse_Result;
+ -- Determine wether N denotes a reference to a ghost entity, and if so
+ -- issue an error.
+
+ -----------------------------------
+ -- Emit_Error_On_Ghost_Reference --
+ -----------------------------------
+
+ function Emit_Error_On_Ghost_Reference
+ (N : Node_Id)
+ return Traverse_Result
+ is
+ begin
+ if Is_Entity_Name (N)
+ and then Present (Entity (N))
+ and then Is_Ghost_Entity (Entity (N))
+ then
+ Error_Msg_N ("ghost entity cannot appear in this context", N);
+ Error_Msg_Sloc := Sloc (Formal);
+ Error_Msg_NE ("\formal & was not declared as ghost #", N, Formal);
+ return Abandon;
+ end if;
+
+ return OK;
+ end Emit_Error_On_Ghost_Reference;
+
+ procedure Check_Ghost_References is
+ new Traverse_Proc (Emit_Error_On_Ghost_Reference);
+
+ -- Start of processing for Check_Ghost_Context_In_Generic_Association
+
+ begin
+ -- The context is ghost when it appears within a Ghost package or
+ -- subprogram.
+
+ if Ghost_Mode > None then
+ return;
+
+ -- The context is ghost if Formal is explicitly marked as ghost
+
+ elsif Is_Ghost_Entity (Formal) then
+ return;
+
+ else
+ Check_Ghost_References (Actual);
+ end if;
+ end Check_Ghost_Context_In_Generic_Association;
+
+ ---------------------------------------------
+ -- Check_Ghost_Formal_Procedure_Or_Package --
+ ---------------------------------------------
+
+ procedure Check_Ghost_Formal_Procedure_Or_Package
+ (N : Node_Id;
+ Actual : Entity_Id;
+ Formal : Entity_Id;
+ Is_Default : Boolean := False)
+ is
+ begin
+ if not Is_Ghost_Entity (Formal) then
+ return;
+ end if;
+
+ if Present (Actual) and then Is_Ghost_Entity (Actual) then
+ return;
+ end if;
+
+ if Is_Default then
+ Error_Msg_N ("ghost procedure expected as default", N);
+ Error_Msg_NE ("\formal & is declared as ghost", N, Formal);
+
+ else
+ if Ekind (Formal) = E_Procedure then
+ Error_Msg_N ("ghost procedure expected for actual", N);
+ else
+ Error_Msg_N ("ghost package expected for actual", N);
+ end if;
+
+ Error_Msg_Sloc := Sloc (Formal);
+ Error_Msg_NE ("\formal & was declared as ghost #", N, Formal);
+ end if;
+ end Check_Ghost_Formal_Procedure_Or_Package;
+
+ ---------------------------------
+ -- Check_Ghost_Formal_Variable --
+ ---------------------------------
+
+ procedure Check_Ghost_Formal_Variable
+ (Actual : Node_Id;
+ Formal : Entity_Id;
+ Is_Default : Boolean := False)
+ is
+ Actual_Obj : constant Entity_Id := Get_Enclosing_Deep_Object (Actual);
+ begin
+ if not Is_Ghost_Entity (Formal) then
+ return;
+ end if;
+
+ if No (Actual_Obj)
+ or else not Is_Ghost_Entity (Actual_Obj)
+ then
+ if Is_Default then
+ Error_Msg_N ("ghost object expected as default", Actual);
+ Error_Msg_NE ("\formal & is declared as ghost", Actual, Formal);
+ else
+ Error_Msg_N ("ghost object expected for mutable actual", Actual);
+ Error_Msg_Sloc := Sloc (Formal);
+ Error_Msg_NE ("\formal & was declared as ghost #", Actual, Formal);
+ end if;
+ end if;
+ end Check_Ghost_Formal_Variable;
+
----------------------------
-- Check_Ghost_Overriding --
----------------------------
diff --git a/gcc/ada/ghost.ads b/gcc/ada/ghost.ads
index 21126a7..ca311bf 100644
--- a/gcc/ada/ghost.ads
+++ b/gcc/ada/ghost.ads
@@ -44,6 +44,33 @@ package Ghost is
-- Determine whether node Ghost_Ref appears within a Ghost-friendly context
-- where Ghost entity Ghost_Id can safely reside.
+ procedure Check_Ghost_Context_In_Generic_Association
+ (Actual : Node_Id;
+ Formal : Entity_Id);
+ -- Check that if Actual contains references to ghost entities, generic
+ -- formal parameter Formal is ghost (SPARK RM 6.9(10)).
+
+ procedure Check_Ghost_Formal_Procedure_Or_Package
+ (N : Node_Id;
+ Actual : Entity_Id;
+ Formal : Entity_Id;
+ Is_Default : Boolean := False);
+ -- Verify that if generic formal procedure (resp. package) Formal is ghost,
+ -- then Actual is not Empty and also a ghost procedure (resp. package)
+ -- (SPARK RM 6.9(13-14)). The error if any is located on N. If
+ -- Is_Default is False, N and Actual represent the actual parameter in an
+ -- instantiation. Otherwise, they represent the default subprogram of a
+ -- formal subprogram declaration.
+
+ procedure Check_Ghost_Formal_Variable
+ (Actual : Node_Id;
+ Formal : Entity_Id;
+ Is_Default : Boolean := False);
+ -- Verify that if Formal (either an IN OUT generic formal parameter, or an
+ -- IN generic formal parameter of access-to-variable type) is ghost, then
+ -- Actual is a ghost object (SPARK RM 6.9(13-14)). Is_Default is True when
+ -- Actual is the default expression of the formal object declaration.
+
procedure Check_Ghost_Overriding
(Subp : Entity_Id;
Overridden_Subp : Entity_Id);
diff --git a/gcc/ada/gnat_cuda.adb b/gcc/ada/gnat_cuda.adb
index 44394b7..3391263 100644
--- a/gcc/ada/gnat_cuda.adb
+++ b/gcc/ada/gnat_cuda.adb
@@ -165,17 +165,20 @@ package body GNAT_CUDA is
Kernel_Elm := First_Elmt (Kernels);
while Present (Kernel_Elm) loop
- Kernel := Node (Kernel_Elm);
+ Kernel := Node (Kernel_Elm);
Kernel_Body := Subprogram_Body (Kernel);
- Loc := Sloc (Kernel_Body);
+ Loc := Sloc (Kernel_Body);
Null_Body := Make_Subprogram_Body (Loc,
- Specification => Subprogram_Specification (Kernel),
+ Specification => Specification (Kernel_Body),
Declarations => New_List,
Handled_Statement_Sequence =>
Make_Handled_Sequence_Of_Statements (Loc,
Statements => New_List (Make_Null_Statement (Loc))));
+ Set_Corresponding_Spec (Null_Body,
+ Corresponding_Spec (Kernel_Body));
+
Rewrite (Kernel_Body, Null_Body);
Next_Elmt (Kernel_Elm);
diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi
index a7077e0..b264a45 100644
--- a/gcc/ada/gnat_rm.texi
+++ b/gcc/ada/gnat_rm.texi
@@ -21,7 +21,7 @@
@copying
@quotation
-GNAT Reference Manual , May 24, 2022
+GNAT Reference Manual , Jun 24, 2022
AdaCore
@@ -703,6 +703,7 @@ The GNAT Library
* Ada.Containers.Formal_Ordered_Sets (a-cforse.ads): Ada Containers Formal_Ordered_Sets a-cforse ads.
* Ada.Containers.Formal_Vectors (a-cofove.ads): Ada Containers Formal_Vectors a-cofove ads.
* Ada.Containers.Formal_Indefinite_Vectors (a-cfinve.ads): Ada Containers Formal_Indefinite_Vectors a-cfinve ads.
+* Ada.Containers.Functional_Infinite_Sequences (a-cfinse.ads): Ada Containers Functional_Infinite_Sequences a-cfinse ads.
* Ada.Containers.Functional_Vectors (a-cofuve.ads): Ada Containers Functional_Vectors a-cofuve ads.
* Ada.Containers.Functional_Sets (a-cofuse.ads): Ada Containers Functional_Sets a-cofuse ads.
* Ada.Containers.Functional_Maps (a-cofuma.ads): Ada Containers Functional_Maps a-cofuma ads.
@@ -7088,9 +7089,9 @@ overloaded declaration exists, in which case the pragma applies
to all entities). It specifies that the function @code{Entity} is
to be considered pure for the purposes of code generation. This means
that the compiler can assume that there are no side effects, and
-in particular that two calls with identical arguments produce the
-same result. It also means that the function can be used in an
-address clause.
+in particular that two identical calls produce the same result in
+the same context. It also means that the function can be used in
+an address clause.
Note that, quite deliberately, there are no static checks to try
to ensure that this promise is met, so @code{Pure_Function} can be used
@@ -23121,6 +23122,7 @@ of GNAT, and will generate a warning message.
* Ada.Containers.Formal_Ordered_Sets (a-cforse.ads): Ada Containers Formal_Ordered_Sets a-cforse ads.
* Ada.Containers.Formal_Vectors (a-cofove.ads): Ada Containers Formal_Vectors a-cofove ads.
* Ada.Containers.Formal_Indefinite_Vectors (a-cfinve.ads): Ada Containers Formal_Indefinite_Vectors a-cfinve ads.
+* Ada.Containers.Functional_Infinite_Sequences (a-cfinse.ads): Ada Containers Functional_Infinite_Sequences a-cfinse ads.
* Ada.Containers.Functional_Vectors (a-cofuve.ads): Ada Containers Functional_Vectors a-cofuve ads.
* Ada.Containers.Functional_Sets (a-cofuse.ads): Ada Containers Functional_Sets a-cofuse ads.
* Ada.Containers.Functional_Maps (a-cofuma.ads): Ada Containers Functional_Maps a-cofuma ads.
@@ -23469,7 +23471,7 @@ in mind, it may well be generally useful in that it is a simplified more
efficient version than the one defined in the standard. In particular it
does not have the complex overhead required to detect cursor tampering.
-@node Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Formal_Vectors a-cofove ads,The GNAT Library
+@node Ada Containers Formal_Indefinite_Vectors a-cfinve ads,Ada Containers Functional_Infinite_Sequences a-cfinse ads,Ada Containers Formal_Vectors a-cofove ads,The GNAT Library
@anchor{gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads}@anchor{2ee}@anchor{gnat_rm/the_gnat_library id13}@anchor{2ef}
@section @code{Ada.Containers.Formal_Indefinite_Vectors} (@code{a-cfinve.ads})
@@ -23488,8 +23490,30 @@ in mind, it may well be generally useful in that it is a simplified more
efficient version than the one defined in the standard. In particular it
does not have the complex overhead required to detect cursor tampering.
-@node Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Functional_Sets a-cofuse ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id14}@anchor{2f1}
+@node Ada Containers Functional_Infinite_Sequences a-cfinse ads,Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Formal_Indefinite_Vectors a-cfinve ads,The GNAT Library
+@anchor{gnat_rm/the_gnat_library ada-containers-functional-infinite-sequences-a-cfinse-ads}@anchor{2f0}@anchor{gnat_rm/the_gnat_library id14}@anchor{2f1}
+@section @code{Ada.Containers.Functional_Infinite_Sequences} (@code{a-cfinse.ads})
+
+
+@geindex Ada.Containers.Functional_Infinite_Sequences (a-cfinse.ads)
+
+@geindex Functional Infinite Sequences
+
+This child of @code{Ada.Containers} defines immutable sequences indexed by
+@code{Big_Integer}. These containers are unbounded and may contain indefinite
+elements. Their API features functions creating new containers from existing
+ones. To remain reasonably efficient, their implementation involves sharing
+between data-structures. As they are functional, that is, no primitives are
+provided which would allow modifying an existing container, these containers
+can still be used safely.
+
+These containers are controlled so that the allocated memory can be reclaimed
+when the container is no longer referenced. Thus, they cannot directly be used
+in contexts where controlled types are not supported.
+The specification of this unit is compatible with SPARK 2014.
+
+@node Ada Containers Functional_Vectors a-cofuve ads,Ada Containers Functional_Sets a-cofuse ads,Ada Containers Functional_Infinite_Sequences a-cfinse ads,The GNAT Library
+@anchor{gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id15}@anchor{2f3}
@section @code{Ada.Containers.Functional_Vectors} (@code{a-cofuve.ads})
@@ -23511,7 +23535,7 @@ and annotations, so that they can be removed from the final executable. The
specification of this unit is compatible with SPARK 2014.
@node Ada Containers Functional_Sets a-cofuse ads,Ada Containers Functional_Maps a-cofuma ads,Ada Containers Functional_Vectors a-cofuve ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-functional-sets-a-cofuse-ads}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id15}@anchor{2f3}
+@anchor{gnat_rm/the_gnat_library ada-containers-functional-sets-a-cofuse-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id16}@anchor{2f5}
@section @code{Ada.Containers.Functional_Sets} (@code{a-cofuse.ads})
@@ -23520,20 +23544,19 @@ specification of this unit is compatible with SPARK 2014.
@geindex Functional sets
This child of @code{Ada.Containers} defines immutable sets. These containers are
-unbounded and may contain indefinite elements. Furthermore, to be usable in
-every context, they are neither controlled nor limited. As they are functional,
-that is, no primitives are provided which would allow modifying an existing
-container, these containers can still be used safely.
+unbounded and may contain indefinite elements. Their API features functions
+creating new containers from existing ones. To remain reasonably efficient,
+their implementation involves sharing between data-structures. As they are
+functional, that is, no primitives are provided which would allow modifying an
+existing container, these containers can still be used safely.
-Their API features functions creating new containers from existing ones.
-As a consequence, these containers are highly inefficient. They are also
-memory consuming, as the allocated memory is not reclaimed when the container
-is no longer referenced. Thus, they should in general be used in ghost code
-and annotations, so that they can be removed from the final executable. The
-specification of this unit is compatible with SPARK 2014.
+These containers are controlled so that the allocated memory can be reclaimed
+when the container is no longer referenced. Thus, they cannot directly be used
+in contexts where controlled types are not supported.
+The specification of this unit is compatible with SPARK 2014.
@node Ada Containers Functional_Maps a-cofuma ads,Ada Containers Bounded_Holders a-coboho ads,Ada Containers Functional_Sets a-cofuse ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id16}@anchor{2f5}
+@anchor{gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id17}@anchor{2f7}
@section @code{Ada.Containers.Functional_Maps} (@code{a-cofuma.ads})
@@ -23542,20 +23565,19 @@ specification of this unit is compatible with SPARK 2014.
@geindex Functional maps
This child of @code{Ada.Containers} defines immutable maps. These containers are
-unbounded and may contain indefinite elements. Furthermore, to be usable in
-every context, they are neither controlled nor limited. As they are functional,
-that is, no primitives are provided which would allow modifying an existing
-container, these containers can still be used safely.
+unbounded and may contain indefinite elements. Their API features functions
+creating new containers from existing ones. To remain reasonably efficient,
+their implementation involves sharing between data-structures. As they are
+functional, that is, no primitives are provided which would allow modifying an
+existing container, these containers can still be used safely.
-Their API features functions creating new containers from existing ones.
-As a consequence, these containers are highly inefficient. They are also
-memory consuming, as the allocated memory is not reclaimed when the container
-is no longer referenced. Thus, they should in general be used in ghost code
-and annotations, so that they can be removed from the final executable. The
-specification of this unit is compatible with SPARK 2014.
+These containers are controlled so that the allocated memory can be reclaimed
+when the container is no longer referenced. Thus, they cannot directly be used
+in contexts where controlled types are not supported.
+The specification of this unit is compatible with SPARK 2014.
@node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Containers Functional_Maps a-cofuma ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id17}@anchor{2f7}
+@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id18}@anchor{2f9}
@section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads})
@@ -23567,7 +23589,7 @@ This child of @code{Ada.Containers} defines a modified version of
Indefinite_Holders that avoids heap allocation.
@node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id18}@anchor{2f9}
+@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id19}@anchor{2fb}
@section @code{Ada.Command_Line.Environment} (@code{a-colien.ads})
@@ -23580,7 +23602,7 @@ provides a mechanism for obtaining environment values on systems
where this concept makes sense.
@node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id19}@anchor{2fb}
+@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id20}@anchor{2fd}
@section @code{Ada.Command_Line.Remove} (@code{a-colire.ads})
@@ -23598,7 +23620,7 @@ to further calls on the subprograms in @code{Ada.Command_Line} will not
see the removed argument.
@node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id20}@anchor{2fd}
+@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id21}@anchor{2ff}
@section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads})
@@ -23618,7 +23640,7 @@ Using a response file allow passing a set of arguments to an executable longer
than the maximum allowed by the system on the command line.
@node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id21}@anchor{2ff}
+@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id22}@anchor{301}
@section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads})
@@ -23633,7 +23655,7 @@ extracted from a file opened on the Ada side, and an Ada file
can be constructed from a stream opened on the C side.
@node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id22}@anchor{301}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id23}@anchor{303}
@section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads})
@@ -23647,7 +23669,7 @@ exception occurrence (@code{Null_Occurrence}) without raising
an exception.
@node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id23}@anchor{303}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id24}@anchor{305}
@section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads})
@@ -23661,7 +23683,7 @@ exceptions (hence the name last chance), and perform clean ups before
terminating the program. Note that this subprogram never returns.
@node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id24}@anchor{305}
+@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id25}@anchor{307}
@section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads})
@@ -23674,7 +23696,7 @@ give a traceback array of addresses based on an exception
occurrence.
@node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id25}@anchor{307}
+@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id26}@anchor{309}
@section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads})
@@ -23689,7 +23711,7 @@ extracted from a file opened on the Ada side, and an Ada file
can be constructed from a stream opened on the C side.
@node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id26}@anchor{309}
+@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id27}@anchor{30b}
@section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads})
@@ -23704,7 +23726,7 @@ extracted from a file opened on the Ada side, and an Ada file
can be constructed from a stream opened on the C side.
@node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id27}@anchor{30b}
+@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id28}@anchor{30d}
@section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads})
@@ -23721,7 +23743,7 @@ strings, avoiding the necessity for an intermediate operation
with ordinary strings.
@node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id28}@anchor{30d}
+@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id29}@anchor{30f}
@section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads})
@@ -23738,7 +23760,7 @@ wide strings, avoiding the necessity for an intermediate operation
with ordinary wide strings.
@node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id29}@anchor{30f}
+@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id30}@anchor{311}
@section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads})
@@ -23755,7 +23777,7 @@ wide wide strings, avoiding the necessity for an intermediate operation
with ordinary wide wide strings.
@node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id30}@anchor{311}
+@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id31}@anchor{313}
@section @code{Ada.Task_Initialization} (@code{a-tasini.ads})
@@ -23767,7 +23789,7 @@ parameterless procedures. Note that such a handler is only invoked for
those tasks activated after the handler is set.
@node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id31}@anchor{313}
+@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id32}@anchor{315}
@section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads})
@@ -23782,7 +23804,7 @@ extracted from a file opened on the Ada side, and an Ada file
can be constructed from a stream opened on the C side.
@node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id32}@anchor{315}
+@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id33}@anchor{317}
@section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads})
@@ -23797,7 +23819,7 @@ execution (for example a standard input file may be redefined to be
interactive).
@node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id33}@anchor{317}
+@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id34}@anchor{319}
@section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads})
@@ -23810,7 +23832,7 @@ This package provides subprograms that allow categorization of
Wide_Character values according to Unicode categories.
@node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id34}@anchor{319}
+@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id35}@anchor{31b}
@section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads})
@@ -23825,7 +23847,7 @@ extracted from a file opened on the Ada side, and an Ada file
can be constructed from a stream opened on the C side.
@node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id35}@anchor{31b}
+@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id36}@anchor{31d}
@section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads})
@@ -23840,7 +23862,7 @@ execution (for example a standard input file may be redefined to be
interactive).
@node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id36}@anchor{31d}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id37}@anchor{31f}
@section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads})
@@ -23853,7 +23875,7 @@ This package provides subprograms that allow categorization of
Wide_Wide_Character values according to Unicode categories.
@node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id37}@anchor{31f}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id38}@anchor{321}
@section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads})
@@ -23868,7 +23890,7 @@ extracted from a file opened on the Ada side, and an Ada file
can be constructed from a stream opened on the C side.
@node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id38}@anchor{321}
+@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id39}@anchor{323}
@section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads})
@@ -23883,7 +23905,7 @@ change during execution (for example a standard input file may be
redefined to be interactive).
@node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id39}@anchor{323}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id40}@anchor{325}
@section @code{GNAT.Altivec} (@code{g-altive.ads})
@@ -23896,7 +23918,7 @@ definitions of constants and types common to all the versions of the
binding.
@node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id40}@anchor{325}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id41}@anchor{327}
@section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads})
@@ -23907,7 +23929,7 @@ binding.
This package provides the Vector/View conversion routines.
@node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id41}@anchor{327}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id42}@anchor{329}
@section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads})
@@ -23921,7 +23943,7 @@ library. The hard binding is provided as a separate package. This unit
is common to both bindings.
@node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id42}@anchor{329}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id43}@anchor{32b}
@section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads})
@@ -23933,7 +23955,7 @@ This package exposes the various vector types part of the Ada binding
to AltiVec facilities.
@node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id43}@anchor{32b}
+@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id44}@anchor{32d}
@section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads})
@@ -23948,7 +23970,7 @@ vector elements and provides a simple way to initialize vector
objects.
@node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id44}@anchor{32d}
+@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id45}@anchor{32f}
@section @code{GNAT.Array_Split} (@code{g-arrspl.ads})
@@ -23961,7 +23983,7 @@ an array wherever the separators appear, and provide direct access
to the resulting slices.
@node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id45}@anchor{32f}
+@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id46}@anchor{331}
@section @code{GNAT.AWK} (@code{g-awk.ads})
@@ -23976,7 +23998,7 @@ or more files containing formatted data. The file is viewed as a database
where each record is a line and a field is a data element in this line.
@node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id46}@anchor{331}
+@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id47}@anchor{333}
@section @code{GNAT.Binary_Search} (@code{g-binsea.ads})
@@ -23988,7 +24010,7 @@ Allow binary search of a sorted array (or of an array-like container;
the generic does not reference the array directly).
@node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id47}@anchor{333}
+@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id48}@anchor{335}
@section @code{GNAT.Bind_Environment} (@code{g-binenv.ads})
@@ -24001,7 +24023,7 @@ These associations can be specified using the @code{-V} binder command
line switch.
@node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id48}@anchor{335}
+@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id49}@anchor{337}
@section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads})
@@ -24012,7 +24034,7 @@ line switch.
Provides routines giving hints to the branch predictor of the code generator.
@node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id49}@anchor{337}
+@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id50}@anchor{339}
@section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads})
@@ -24027,7 +24049,7 @@ useful directly or as parts of the implementations of other abstractions,
such as mailboxes.
@node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id50}@anchor{339}
+@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id51}@anchor{33b}
@section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads})
@@ -24040,7 +24062,7 @@ such as mailboxes.
Provides a thread-safe asynchronous intertask mailbox communication facility.
@node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id51}@anchor{33b}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id52}@anchor{33d}
@section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads})
@@ -24055,7 +24077,7 @@ data items. Exchange and comparison procedures are provided by passing
access-to-procedure values.
@node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id52}@anchor{33d}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id53}@anchor{33f}
@section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads})
@@ -24071,7 +24093,7 @@ access-to-procedure values. This is an older version, retained for
compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable.
@node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id53}@anchor{33f}
+@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id54}@anchor{341}
@section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads})
@@ -24087,7 +24109,7 @@ if the procedures can be inlined, at the expense of duplicating code for
multiple instantiations.
@node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id54}@anchor{341}
+@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id55}@anchor{343}
@section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads})
@@ -24103,7 +24125,7 @@ the encoding of the string. The routine includes detection of special XML
sequences for various UCS input formats.
@node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id55}@anchor{343}
+@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id56}@anchor{345}
@section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads})
@@ -24117,7 +24139,7 @@ General routines for swapping the bytes in 2-, 4-, and 8-byte quantities.
Machine-specific implementations are available in some cases.
@node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id56}@anchor{345}
+@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id57}@anchor{347}
@section @code{GNAT.Calendar} (@code{g-calend.ads})
@@ -24131,7 +24153,7 @@ Also provides conversion of @code{Ada.Calendar.Time} values to and from the
C @code{timeval} format.
@node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id57}@anchor{347}
+@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id58}@anchor{349}
@section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads})
@@ -24142,7 +24164,7 @@ C @code{timeval} format.
@geindex GNAT.Calendar.Time_IO (g-catiio.ads)
@node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id58}@anchor{349}
+@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id59}@anchor{34b}
@section @code{GNAT.CRC32} (@code{g-crc32.ads})
@@ -24159,7 +24181,7 @@ of this algorithm see
Aug. 1988. Sarwate, D.V.
@node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id59}@anchor{34b}
+@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id60}@anchor{34d}
@section @code{GNAT.Case_Util} (@code{g-casuti.ads})
@@ -24174,7 +24196,7 @@ without the overhead of the full casing tables
in @code{Ada.Characters.Handling}.
@node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id60}@anchor{34d}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id61}@anchor{34f}
@section @code{GNAT.CGI} (@code{g-cgi.ads})
@@ -24189,7 +24211,7 @@ builds a table whose index is the key and provides some services to deal
with this table.
@node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id61}@anchor{34f}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id62}@anchor{351}
@section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads})
@@ -24204,7 +24226,7 @@ Common Gateway Interface (CGI). It exports services to deal with Web
cookies (piece of information kept in the Web client software).
@node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id62}@anchor{351}
+@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id63}@anchor{353}
@section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads})
@@ -24216,7 +24238,7 @@ This is a package to help debugging CGI (Common Gateway Interface)
programs written in Ada.
@node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id63}@anchor{353}
+@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id64}@anchor{355}
@section @code{GNAT.Command_Line} (@code{g-comlin.ads})
@@ -24229,7 +24251,7 @@ including the ability to scan for named switches with optional parameters
and expand file names using wildcard notations.
@node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id64}@anchor{355}
+@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id65}@anchor{357}
@section @code{GNAT.Compiler_Version} (@code{g-comver.ads})
@@ -24247,7 +24269,7 @@ of the compiler if a consistent tool set is used to compile all units
of a partition).
@node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id65}@anchor{357}
+@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id66}@anchor{359}
@section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads})
@@ -24258,7 +24280,7 @@ of a partition).
Provides a simple interface to handle Ctrl-C keyboard events.
@node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id66}@anchor{359}
+@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id67}@anchor{35b}
@section @code{GNAT.Current_Exception} (@code{g-curexc.ads})
@@ -24275,7 +24297,7 @@ This is particularly useful in simulating typical facilities for
obtaining information about exceptions provided by Ada 83 compilers.
@node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id67}@anchor{35b}
+@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id68}@anchor{35d}
@section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads})
@@ -24292,7 +24314,7 @@ problems.
See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}.
@node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id68}@anchor{35d}
+@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id69}@anchor{35f}
@section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads})
@@ -24305,7 +24327,7 @@ to and from string images of address values. Supports both C and Ada formats
for hexadecimal literals.
@node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id69}@anchor{35f}
+@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id70}@anchor{361}
@section @code{GNAT.Decode_String} (@code{g-decstr.ads})
@@ -24329,7 +24351,7 @@ Useful in conjunction with Unicode character coding. Note there is a
preinstantiation for UTF-8. See next entry.
@node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id70}@anchor{361}
+@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id71}@anchor{363}
@section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads})
@@ -24350,7 +24372,7 @@ preinstantiation for UTF-8. See next entry.
A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding.
@node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id71}@anchor{363}
+@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id72}@anchor{365}
@section @code{GNAT.Directory_Operations} (@code{g-dirope.ads})
@@ -24363,7 +24385,7 @@ the current directory, making new directories, and scanning the files in a
directory.
@node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id72}@anchor{365}
+@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id73}@anchor{367}
@section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads})
@@ -24375,7 +24397,7 @@ A child unit of GNAT.Directory_Operations providing additional operations
for iterating through directories.
@node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id73}@anchor{367}
+@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id74}@anchor{369}
@section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads})
@@ -24393,7 +24415,7 @@ dynamic instances of the hash table, while an instantiation of
@code{GNAT.HTable} creates a single instance of the hash table.
@node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id74}@anchor{369}
+@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id75}@anchor{36b}
@section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads})
@@ -24413,7 +24435,7 @@ dynamic instances of the table, while an instantiation of
@code{GNAT.Table} creates a single instance of the table type.
@node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id75}@anchor{36b}
+@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id76}@anchor{36d}
@section @code{GNAT.Encode_String} (@code{g-encstr.ads})
@@ -24435,7 +24457,7 @@ encoding method. Useful in conjunction with Unicode character coding.
Note there is a preinstantiation for UTF-8. See next entry.
@node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id76}@anchor{36d}
+@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id77}@anchor{36f}
@section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads})
@@ -24456,7 +24478,7 @@ Note there is a preinstantiation for UTF-8. See next entry.
A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding.
@node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id77}@anchor{36f}
+@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id78}@anchor{371}
@section @code{GNAT.Exception_Actions} (@code{g-excact.ads})
@@ -24469,7 +24491,7 @@ for specific exceptions, or when any exception is raised. This
can be used for instance to force a core dump to ease debugging.
@node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id78}@anchor{371}
+@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id79}@anchor{373}
@section @code{GNAT.Exception_Traces} (@code{g-exctra.ads})
@@ -24483,7 +24505,7 @@ Provides an interface allowing to control automatic output upon exception
occurrences.
@node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id79}@anchor{373}
+@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id80}@anchor{375}
@section @code{GNAT.Exceptions} (@code{g-except.ads})
@@ -24504,7 +24526,7 @@ predefined exceptions, and for example allow raising
@code{Constraint_Error} with a message from a pure subprogram.
@node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id80}@anchor{375}
+@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id81}@anchor{377}
@section @code{GNAT.Expect} (@code{g-expect.ads})
@@ -24520,7 +24542,7 @@ It is not implemented for cross ports, and in particular is not
implemented for VxWorks or LynxOS.
@node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id81}@anchor{377}
+@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id82}@anchor{379}
@section @code{GNAT.Expect.TTY} (@code{g-exptty.ads})
@@ -24532,7 +24554,7 @@ ports. It is not implemented for cross ports, and
in particular is not implemented for VxWorks or LynxOS.
@node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id82}@anchor{379}
+@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id83}@anchor{37b}
@section @code{GNAT.Float_Control} (@code{g-flocon.ads})
@@ -24546,7 +24568,7 @@ library calls may cause this mode to be modified, and the Reset procedure
in this package can be used to reestablish the required mode.
@node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id83}@anchor{37b}
+@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id84}@anchor{37d}
@section @code{GNAT.Formatted_String} (@code{g-forstr.ads})
@@ -24561,7 +24583,7 @@ derived from Integer, Float or enumerations as values for the
formatted string.
@node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id84}@anchor{37d}
+@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id85}@anchor{37f}
@section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads})
@@ -24579,7 +24601,7 @@ have a vector implementation that can be automatically used by the
compiler when auto-vectorization is enabled.
@node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id85}@anchor{37f}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id86}@anchor{381}
@section @code{GNAT.Heap_Sort} (@code{g-heasor.ads})
@@ -24593,7 +24615,7 @@ access-to-procedure values. The algorithm used is a modified heap sort
that performs approximately N*log(N) comparisons in the worst case.
@node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id86}@anchor{381}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id87}@anchor{383}
@section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads})
@@ -24609,7 +24631,7 @@ This differs from @code{GNAT.Heap_Sort} in having a less convenient
interface, but may be slightly more efficient.
@node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id87}@anchor{383}
+@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id88}@anchor{385}
@section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads})
@@ -24623,7 +24645,7 @@ if the procedures can be inlined, at the expense of duplicating code for
multiple instantiations.
@node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id88}@anchor{385}
+@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id89}@anchor{387}
@section @code{GNAT.HTable} (@code{g-htable.ads})
@@ -24636,7 +24658,7 @@ data. Provides two approaches, one a simple static approach, and the other
allowing arbitrary dynamic hash tables.
@node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id89}@anchor{387}
+@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id90}@anchor{389}
@section @code{GNAT.IO} (@code{g-io.ads})
@@ -24652,7 +24674,7 @@ Standard_Input, and writing characters, strings and integers to either
Standard_Output or Standard_Error.
@node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id90}@anchor{389}
+@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id91}@anchor{38b}
@section @code{GNAT.IO_Aux} (@code{g-io_aux.ads})
@@ -24666,7 +24688,7 @@ Provides some auxiliary functions for use with Text_IO, including a test
for whether a file exists, and functions for reading a line of text.
@node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id91}@anchor{38b}
+@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id92}@anchor{38d}
@section @code{GNAT.Lock_Files} (@code{g-locfil.ads})
@@ -24680,7 +24702,7 @@ Provides a general interface for using files as locks. Can be used for
providing program level synchronization.
@node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id92}@anchor{38d}
+@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id93}@anchor{38f}
@section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads})
@@ -24692,7 +24714,7 @@ The original implementation of @code{Ada.Numerics.Discrete_Random}. Uses
a modified version of the Blum-Blum-Shub generator.
@node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id93}@anchor{38f}
+@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id94}@anchor{391}
@section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads})
@@ -24704,7 +24726,7 @@ The original implementation of @code{Ada.Numerics.Float_Random}. Uses
a modified version of the Blum-Blum-Shub generator.
@node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id94}@anchor{391}
+@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id95}@anchor{393}
@section @code{GNAT.MD5} (@code{g-md5.ads})
@@ -24717,7 +24739,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and
FIPS PUB 198.
@node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id95}@anchor{393}
+@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id96}@anchor{395}
@section @code{GNAT.Memory_Dump} (@code{g-memdum.ads})
@@ -24730,7 +24752,7 @@ standard output or standard error files. Uses GNAT.IO for actual
output.
@node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id96}@anchor{395}
+@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id97}@anchor{397}
@section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads})
@@ -24744,7 +24766,7 @@ various logging purposes, including duplicating functionality of some
Ada 83 implementation dependent extensions.
@node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id97}@anchor{397}
+@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{398}@anchor{gnat_rm/the_gnat_library id98}@anchor{399}
@section @code{GNAT.OS_Lib} (@code{g-os_lib.ads})
@@ -24760,7 +24782,7 @@ including a portable spawn procedure, and access to environment variables
and error return codes.
@node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{398}@anchor{gnat_rm/the_gnat_library id98}@anchor{399}
+@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{39a}@anchor{gnat_rm/the_gnat_library id99}@anchor{39b}
@section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads})
@@ -24778,7 +24800,7 @@ hashcode are in the same order. These hashing functions are very
convenient for use with realtime applications.
@node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{39a}@anchor{gnat_rm/the_gnat_library id99}@anchor{39b}
+@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{39c}@anchor{gnat_rm/the_gnat_library id100}@anchor{39d}
@section @code{GNAT.Random_Numbers} (@code{g-rannum.ads})
@@ -24790,7 +24812,7 @@ Provides random number capabilities which extend those available in the
standard Ada library and are more convenient to use.
@node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{25d}@anchor{gnat_rm/the_gnat_library id100}@anchor{39c}
+@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{25d}@anchor{gnat_rm/the_gnat_library id101}@anchor{39e}
@section @code{GNAT.Regexp} (@code{g-regexp.ads})
@@ -24806,7 +24828,7 @@ simplest of the three pattern matching packages provided, and is particularly
suitable for ‘file globbing’ applications.
@node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id101}@anchor{39e}
+@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id102}@anchor{3a0}
@section @code{GNAT.Registry} (@code{g-regist.ads})
@@ -24820,7 +24842,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg
package provided with the Win32Ada binding
@node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id102}@anchor{3a0}
+@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id103}@anchor{3a2}
@section @code{GNAT.Regpat} (@code{g-regpat.ads})
@@ -24835,7 +24857,7 @@ from the original V7 style regular expression library written in C by
Henry Spencer (and binary compatible with this C library).
@node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id103}@anchor{3a2}
+@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id104}@anchor{3a4}
@section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads})
@@ -24849,7 +24871,7 @@ full content to be processed is not loaded into memory all at once. This makes
this interface usable for large files or socket streams.
@node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id104}@anchor{3a4}
+@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id105}@anchor{3a6}
@section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads})
@@ -24861,7 +24883,7 @@ Provide the capability to query the high water mark of the current task’s
secondary stack.
@node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id105}@anchor{3a6}
+@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id106}@anchor{3a8}
@section @code{GNAT.Semaphores} (@code{g-semaph.ads})
@@ -24872,7 +24894,7 @@ secondary stack.
Provides classic counting and binary semaphores using protected types.
@node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id106}@anchor{3a8}
+@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id107}@anchor{3aa}
@section @code{GNAT.Serial_Communications} (@code{g-sercom.ads})
@@ -24884,7 +24906,7 @@ Provides a simple interface to send and receive data over a serial
port. This is only supported on GNU/Linux and Windows.
@node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id107}@anchor{3aa}
+@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id108}@anchor{3ac}
@section @code{GNAT.SHA1} (@code{g-sha1.ads})
@@ -24897,7 +24919,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described
in RFC 2104 and FIPS PUB 198.
@node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id108}@anchor{3ac}
+@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id109}@anchor{3ae}
@section @code{GNAT.SHA224} (@code{g-sha224.ads})
@@ -24910,7 +24932,7 @@ and the HMAC-SHA224 message authentication function as described
in RFC 2104 and FIPS PUB 198.
@node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id109}@anchor{3ae}
+@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id110}@anchor{3b0}
@section @code{GNAT.SHA256} (@code{g-sha256.ads})
@@ -24923,7 +24945,7 @@ and the HMAC-SHA256 message authentication function as described
in RFC 2104 and FIPS PUB 198.
@node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id110}@anchor{3b0}
+@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id111}@anchor{3b2}
@section @code{GNAT.SHA384} (@code{g-sha384.ads})
@@ -24936,7 +24958,7 @@ and the HMAC-SHA384 message authentication function as described
in RFC 2104 and FIPS PUB 198.
@node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id111}@anchor{3b2}
+@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id112}@anchor{3b4}
@section @code{GNAT.SHA512} (@code{g-sha512.ads})
@@ -24949,7 +24971,7 @@ and the HMAC-SHA512 message authentication function as described
in RFC 2104 and FIPS PUB 198.
@node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id112}@anchor{3b4}
+@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id113}@anchor{3b6}
@section @code{GNAT.Signals} (@code{g-signal.ads})
@@ -24961,7 +24983,7 @@ Provides the ability to manipulate the blocked status of signals on supported
targets.
@node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id113}@anchor{3b6}
+@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id114}@anchor{3b8}
@section @code{GNAT.Sockets} (@code{g-socket.ads})
@@ -24976,7 +24998,7 @@ on all native GNAT ports and on VxWorks cross prots. It is not implemented for
the LynxOS cross port.
@node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id114}@anchor{3b8}
+@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id115}@anchor{3ba}
@section @code{GNAT.Source_Info} (@code{g-souinf.ads})
@@ -24990,7 +25012,7 @@ subprograms yielding the date and time of the current compilation (like the
C macros @code{__DATE__} and @code{__TIME__})
@node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id115}@anchor{3ba}
+@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id116}@anchor{3bc}
@section @code{GNAT.Spelling_Checker} (@code{g-speche.ads})
@@ -25002,7 +25024,7 @@ Provides a function for determining whether one string is a plausible
near misspelling of another string.
@node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id116}@anchor{3bc}
+@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id117}@anchor{3be}
@section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads})
@@ -25015,7 +25037,7 @@ determining whether one string is a plausible near misspelling of another
string.
@node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id117}@anchor{3be}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id118}@anchor{3c0}
@section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads})
@@ -25031,7 +25053,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the
efficient algorithm developed by Robert Dewar for the SPITBOL system.
@node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id118}@anchor{3c0}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id119}@anchor{3c2}
@section @code{GNAT.Spitbol} (@code{g-spitbo.ads})
@@ -25046,7 +25068,7 @@ useful for constructing arbitrary mappings from strings in the style of
the SNOBOL4 TABLE function.
@node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id119}@anchor{3c2}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id120}@anchor{3c4}
@section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads})
@@ -25061,7 +25083,7 @@ for type @code{Standard.Boolean}, giving an implementation of sets of
string values.
@node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id120}@anchor{3c4}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id121}@anchor{3c6}
@section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads})
@@ -25078,7 +25100,7 @@ for type @code{Standard.Integer}, giving an implementation of maps
from string to integer values.
@node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id121}@anchor{3c6}
+@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id122}@anchor{3c8}
@section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads})
@@ -25095,7 +25117,7 @@ a variable length string type, giving an implementation of general
maps from strings to strings.
@node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id122}@anchor{3c8}
+@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id123}@anchor{3ca}
@section @code{GNAT.SSE} (@code{g-sse.ads})
@@ -25107,7 +25129,7 @@ targets. It exposes vector component types together with a general
introduction to the binding contents and use.
@node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id123}@anchor{3ca}
+@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id124}@anchor{3cc}
@section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads})
@@ -25116,7 +25138,7 @@ introduction to the binding contents and use.
SSE vector types for use with SSE related intrinsics.
@node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id124}@anchor{3cc}
+@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id125}@anchor{3ce}
@section @code{GNAT.String_Hash} (@code{g-strhas.ads})
@@ -25128,7 +25150,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar
type and the hash result type are parameters.
@node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id125}@anchor{3ce}
+@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id126}@anchor{3d0}
@section @code{GNAT.Strings} (@code{g-string.ads})
@@ -25138,7 +25160,7 @@ Common String access types and related subprograms. Basically it
defines a string access and an array of string access types.
@node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id126}@anchor{3d0}
+@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id127}@anchor{3d2}
@section @code{GNAT.String_Split} (@code{g-strspl.ads})
@@ -25152,7 +25174,7 @@ to the resulting slices. This package is instantiated from
@code{GNAT.Array_Split}.
@node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id127}@anchor{3d2}
+@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id128}@anchor{3d4}
@section @code{GNAT.Table} (@code{g-table.ads})
@@ -25172,7 +25194,7 @@ while an instantiation of @code{GNAT.Dynamic_Tables} creates a type that can be
used to define dynamic instances of the table.
@node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id128}@anchor{3d4}
+@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id129}@anchor{3d6}
@section @code{GNAT.Task_Lock} (@code{g-tasloc.ads})
@@ -25189,7 +25211,7 @@ single global task lock. Appropriate for use in situations where contention
between tasks is very rarely expected.
@node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id129}@anchor{3d6}
+@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id130}@anchor{3d8}
@section @code{GNAT.Time_Stamp} (@code{g-timsta.ads})
@@ -25204,7 +25226,7 @@ represents the current date and time in ISO 8601 format. This is a very simple
routine with minimal code and there are no dependencies on any other unit.
@node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id130}@anchor{3d8}
+@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id131}@anchor{3da}
@section @code{GNAT.Threads} (@code{g-thread.ads})
@@ -25221,7 +25243,7 @@ further details if your program has threads that are created by a non-Ada
environment which then accesses Ada code.
@node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id131}@anchor{3da}
+@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id132}@anchor{3dc}
@section @code{GNAT.Traceback} (@code{g-traceb.ads})
@@ -25233,7 +25255,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful
in various debugging situations.
@node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-table ads,GNAT Traceback g-traceb ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id132}@anchor{3dc}
+@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id133}@anchor{3de}
@section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads})
@@ -25242,7 +25264,7 @@ in various debugging situations.
@geindex Trace back facilities
@node GNAT UTF_32 g-table ads,GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id133}@anchor{3de}
+@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-table-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id134}@anchor{3e0}
@section @code{GNAT.UTF_32} (@code{g-table.ads})
@@ -25261,7 +25283,7 @@ lower case to upper case fold routine corresponding to
the Ada 2005 rules for identifier equivalence.
@node GNAT Wide_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-table ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id134}@anchor{3e0}
+@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id135}@anchor{3e2}
@section @code{GNAT.Wide_Spelling_Checker} (@code{g-u3spch.ads})
@@ -25274,7 +25296,7 @@ near misspelling of another wide wide string, where the strings are represented
using the UTF_32_String type defined in System.Wch_Cnv.
@node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Spelling_Checker g-u3spch ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id135}@anchor{3e2}
+@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id136}@anchor{3e4}
@section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads})
@@ -25286,7 +25308,7 @@ Provides a function for determining whether one wide string is a plausible
near misspelling of another wide string.
@node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id136}@anchor{3e4}
+@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id137}@anchor{3e6}
@section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads})
@@ -25300,7 +25322,7 @@ to the resulting slices. This package is instantiated from
@code{GNAT.Array_Split}.
@node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id137}@anchor{3e6}
+@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id138}@anchor{3e8}
@section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads})
@@ -25312,7 +25334,7 @@ Provides a function for determining whether one wide wide string is a plausible
near misspelling of another wide wide string.
@node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id138}@anchor{3e8}
+@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id139}@anchor{3ea}
@section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads})
@@ -25326,7 +25348,7 @@ to the resulting slices. This package is instantiated from
@code{GNAT.Array_Split}.
@node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id139}@anchor{3e9}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3ea}
+@anchor{gnat_rm/the_gnat_library id140}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3ec}
@section @code{Interfaces.C.Extensions} (@code{i-cexten.ads})
@@ -25337,7 +25359,7 @@ for use with either manually or automatically generated bindings
to C libraries.
@node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id140}@anchor{3eb}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3ec}
+@anchor{gnat_rm/the_gnat_library id141}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3ee}
@section @code{Interfaces.C.Streams} (@code{i-cstrea.ads})
@@ -25350,7 +25372,7 @@ This package is a binding for the most commonly used operations
on C streams.
@node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id141}@anchor{3ed}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3ee}
+@anchor{gnat_rm/the_gnat_library id142}@anchor{3ef}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3f0}
@section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads})
@@ -25365,7 +25387,7 @@ from a packed decimal format compatible with that used on IBM
mainframes.
@node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id142}@anchor{3ef}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f0}
+@anchor{gnat_rm/the_gnat_library id143}@anchor{3f1}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f2}
@section @code{Interfaces.VxWorks} (@code{i-vxwork.ads})
@@ -25381,7 +25403,7 @@ In particular, it interfaces with the
VxWorks hardware interrupt facilities.
@node Interfaces VxWorks Int_Connection i-vxinco ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces VxWorks i-vxwork ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id143}@anchor{3f1}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads}@anchor{3f2}
+@anchor{gnat_rm/the_gnat_library id144}@anchor{3f3}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads}@anchor{3f4}
@section @code{Interfaces.VxWorks.Int_Connection} (@code{i-vxinco.ads})
@@ -25397,7 +25419,7 @@ intConnect() with a custom routine for installing interrupt
handlers.
@node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks Int_Connection i-vxinco ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id144}@anchor{3f3}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f4}
+@anchor{gnat_rm/the_gnat_library id145}@anchor{3f5}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3f6}
@section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads})
@@ -25420,7 +25442,7 @@ function codes. A particular use of this package is
to enable the use of Get_Immediate under VxWorks.
@node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id145}@anchor{3f5}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f6}
+@anchor{gnat_rm/the_gnat_library id146}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3f8}
@section @code{System.Address_Image} (@code{s-addima.ads})
@@ -25436,7 +25458,7 @@ function that gives an (implementation dependent)
string which identifies an address.
@node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id146}@anchor{3f7}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3f8}
+@anchor{gnat_rm/the_gnat_library id147}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3fa}
@section @code{System.Assertions} (@code{s-assert.ads})
@@ -25452,7 +25474,7 @@ by an run-time assertion failure, as well as the routine that
is used internally to raise this assertion.
@node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id147}@anchor{3f9}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3fa}
+@anchor{gnat_rm/the_gnat_library id148}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{3fc}
@section @code{System.Atomic_Counters} (@code{s-atocou.ads})
@@ -25466,7 +25488,7 @@ on most targets, including all Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9,
x86, and x86_64 platforms.
@node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id148}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3fc}
+@anchor{gnat_rm/the_gnat_library id149}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{3fe}
@section @code{System.Memory} (@code{s-memory.ads})
@@ -25484,7 +25506,7 @@ calls to this unit may be made for low level allocation uses (for
example see the body of @code{GNAT.Tables}).
@node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id149}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{3fe}
+@anchor{gnat_rm/the_gnat_library id150}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{400}
@section @code{System.Multiprocessors} (@code{s-multip.ads})
@@ -25497,7 +25519,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is
technically an implementation-defined addition).
@node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id150}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{400}
+@anchor{gnat_rm/the_gnat_library id151}@anchor{401}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{402}
@section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads})
@@ -25510,7 +25532,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is
technically an implementation-defined addition).
@node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id151}@anchor{401}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{402}
+@anchor{gnat_rm/the_gnat_library id152}@anchor{403}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{404}
@section @code{System.Partition_Interface} (@code{s-parint.ads})
@@ -25523,7 +25545,7 @@ is used primarily in a distribution context when using Annex E
with @code{GLADE}.
@node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id152}@anchor{403}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{404}
+@anchor{gnat_rm/the_gnat_library id153}@anchor{405}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{406}
@section @code{System.Pool_Global} (@code{s-pooglo.ads})
@@ -25540,7 +25562,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to
do any automatic reclamation.
@node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id153}@anchor{405}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{406}
+@anchor{gnat_rm/the_gnat_library id154}@anchor{407}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{408}
@section @code{System.Pool_Local} (@code{s-pooloc.ads})
@@ -25557,7 +25579,7 @@ a list of allocated blocks, so that all storage allocated for the pool can
be freed automatically when the pool is finalized.
@node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id154}@anchor{407}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{408}
+@anchor{gnat_rm/the_gnat_library id155}@anchor{409}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{40a}
@section @code{System.Restrictions} (@code{s-restri.ads})
@@ -25573,7 +25595,7 @@ compiler determined information on which restrictions
are violated by one or more packages in the partition.
@node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id155}@anchor{409}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{40a}
+@anchor{gnat_rm/the_gnat_library id156}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{40c}
@section @code{System.Rident} (@code{s-rident.ads})
@@ -25589,7 +25611,7 @@ since the necessary instantiation is included in
package System.Restrictions.
@node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id156}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{40c}
+@anchor{gnat_rm/the_gnat_library id157}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{40e}
@section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads})
@@ -25605,7 +25627,7 @@ stream attributes are applied to string types, but the subprograms in this
package can be used directly by application programs.
@node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id157}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{40e}
+@anchor{gnat_rm/the_gnat_library id158}@anchor{40f}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{410}
@section @code{System.Unsigned_Types} (@code{s-unstyp.ads})
@@ -25618,7 +25640,7 @@ also contains some related definitions for other specialized types
used by the compiler in connection with packed array types.
@node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id158}@anchor{40f}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{410}
+@anchor{gnat_rm/the_gnat_library id159}@anchor{411}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{412}
@section @code{System.Wch_Cnv} (@code{s-wchcnv.ads})
@@ -25639,7 +25661,7 @@ encoding method. It uses definitions in
package @code{System.Wch_Con}.
@node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library
-@anchor{gnat_rm/the_gnat_library id159}@anchor{411}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{412}
+@anchor{gnat_rm/the_gnat_library id160}@anchor{413}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{414}
@section @code{System.Wch_Con} (@code{s-wchcon.ads})
@@ -25651,7 +25673,7 @@ in ordinary strings. These definitions are used by
the package @code{System.Wch_Cnv}.
@node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top
-@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{413}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{414}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
+@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{415}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{416}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11}
@chapter Interfacing to Other Languages
@@ -25669,7 +25691,7 @@ provided.
@end menu
@node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{415}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{416}
+@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{417}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{418}
@section Interfacing to C
@@ -25809,7 +25831,7 @@ of the length corresponding to the @code{type'Size} value in Ada.
@end itemize
@node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{47}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{417}
+@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{47}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{419}
@section Interfacing to C++
@@ -25866,7 +25888,7 @@ The @code{External_Name} is the name of the C++ RTTI symbol. You can then
cover a specific C++ exception in an exception handler.
@node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{418}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{419}
+@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{41b}
@section Interfacing to COBOL
@@ -25874,7 +25896,7 @@ Interfacing to COBOL is achieved as described in section B.4 of
the Ada Reference Manual.
@node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{41b}
+@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{41c}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{41d}
@section Interfacing to Fortran
@@ -25884,7 +25906,7 @@ multi-dimensional array causes the array to be stored in column-major
order as required for convenient interface to Fortran.
@node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages
-@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{41c}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{41d}
+@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{41e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{41f}
@section Interfacing to non-GNAT Ada code
@@ -25908,7 +25930,7 @@ values or simple record types without variants, or simple array
types with fixed bounds.
@node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top
-@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{41e}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{41f}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
+@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{420}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{421}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12}
@chapter Specialized Needs Annexes
@@ -25949,7 +25971,7 @@ in Ada 2005) is fully implemented.
@end table
@node Implementation of Specific Ada Features,Implementation of Ada 2012 Features,Specialized Needs Annexes,Top
-@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{420}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{421}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}
+@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{422}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{423}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13}
@chapter Implementation of Specific Ada Features
@@ -25968,7 +25990,7 @@ facilities.
@end menu
@node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{422}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{166}
+@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{424}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{166}
@section Machine Code Insertions
@@ -26136,7 +26158,7 @@ according to normal visibility rules. In particular if there is no
qualification is required.
@node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{423}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{424}
+@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{425}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{426}
@section GNAT Implementation of Tasking
@@ -26152,7 +26174,7 @@ to compliance with the Real-Time Systems Annex.
@end menu
@node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking
-@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{425}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{426}
+@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{428}
@subsection Mapping Ada Tasks onto the Underlying Kernel Threads
@@ -26221,7 +26243,7 @@ support this functionality when the parent contains more than one task.
@geindex Forking a new process
@node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking
-@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{428}
+@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{429}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{42a}
@subsection Ensuring Compliance with the Real-Time Annex
@@ -26272,7 +26294,7 @@ placed at the end.
@c Support_for_Locking_Policies
@node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking
-@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{429}
+@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{42b}
@subsection Support for Locking Policies
@@ -26306,7 +26328,7 @@ then ceiling locking is used.
Otherwise, the @code{Ceiling_Locking} policy is ignored.
@node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{42a}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{42b}
+@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{42d}
@section GNAT Implementation of Shared Passive Packages
@@ -26404,7 +26426,7 @@ This is used to provide the required locking
semantics for proper protected object synchronization.
@node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{42d}
+@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{42f}
@section Code Generation for Array Aggregates
@@ -26435,7 +26457,7 @@ component values and static subtypes also lead to simpler code.
@end menu
@node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{42f}
+@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{431}
@subsection Static constant aggregates with static bounds
@@ -26482,7 +26504,7 @@ Zero2: constant two_dim := (others => (others => 0));
@end example
@node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{431}
+@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{433}
@subsection Constant aggregates with unconstrained nominal types
@@ -26497,7 +26519,7 @@ Cr_Unc : constant One_Unc := (12,24,36);
@end example
@node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{433}
+@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{435}
@subsection Aggregates with static bounds
@@ -26525,7 +26547,7 @@ end loop;
@end example
@node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{435}
+@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{437}
@subsection Aggregates with nonstatic bounds
@@ -26536,7 +26558,7 @@ have to be applied to sub-arrays individually, if they do not have statically
compatible subtypes.
@node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates
-@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{437}
+@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{439}
@subsection Aggregates in assignment statements
@@ -26578,7 +26600,7 @@ a temporary (created either by the front-end or the code generator) and then
that temporary will be copied onto the target.
@node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{439}
+@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{43a}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{43b}
@section The Size of Discriminated Records with Default Discriminants
@@ -26658,7 +26680,7 @@ say) must be consistent, so it is imperative that the object, once created,
remain invariant.
@node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{43a}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{43b}
+@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{43c}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{43d}
@section Image Values For Nonscalar Types
@@ -26678,7 +26700,7 @@ control of image text is required for some type T, then T’Put_Image should be
explicitly specified.
@node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features
-@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{43c}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{43d}
+@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{43e}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{43f}
@section Strict Conformance to the Ada Reference Manual
@@ -26705,7 +26727,7 @@ behavior (although at the cost of a significant performance penalty), so
infinite and NaN values are properly generated.
@node Implementation of Ada 2012 Features,Security Hardening Features,Implementation of Specific Ada Features,Top
-@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{43e}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{43f}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}
+@anchor{gnat_rm/implementation_of_ada_2012_features doc}@anchor{440}@anchor{gnat_rm/implementation_of_ada_2012_features id1}@anchor{441}@anchor{gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features}@anchor{14}
@chapter Implementation of Ada 2012 Features
@@ -28871,7 +28893,7 @@ RM References: H.04 (8/1)
@end itemize
@node Security Hardening Features,Obsolescent Features,Implementation of Ada 2012 Features,Top
-@anchor{gnat_rm/security_hardening_features doc}@anchor{440}@anchor{gnat_rm/security_hardening_features id1}@anchor{441}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
+@anchor{gnat_rm/security_hardening_features doc}@anchor{442}@anchor{gnat_rm/security_hardening_features id1}@anchor{443}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15}
@chapter Security Hardening Features
@@ -28893,7 +28915,7 @@ change.
@end menu
@node Register Scrubbing,Stack Scrubbing,,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{442}
+@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{444}
@section Register Scrubbing
@@ -28922,7 +28944,7 @@ programming languages, see @cite{Using the GNU Compiler Collection (GCC)}.
@c Stack Scrubbing:
@node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{443}
+@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{445}
@section Stack Scrubbing
@@ -29017,7 +29039,7 @@ Bar_Callable_Ptr.
@c Hardened Conditionals:
@node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{444}
+@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{446}
@section Hardened Conditionals
@@ -29064,7 +29086,7 @@ be used with other programming languages supported by GCC.
@c Hardened Booleans:
@node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{445}
+@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{447}
@section Hardened Booleans
@@ -29105,7 +29127,7 @@ For usage and more details on that attribute, see @cite{Using the GNU Compiler C
@c Control Flow Redundancy:
@node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features
-@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{446}
+@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{448}
@section Control Flow Redundancy
@@ -29154,7 +29176,7 @@ see @cite{Using the GNU Compiler Collection (GCC)}. These options
can be used with other programming languages supported by GCC.
@node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top
-@anchor{gnat_rm/obsolescent_features doc}@anchor{447}@anchor{gnat_rm/obsolescent_features id1}@anchor{448}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
+@anchor{gnat_rm/obsolescent_features doc}@anchor{449}@anchor{gnat_rm/obsolescent_features id1}@anchor{44a}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16}
@chapter Obsolescent Features
@@ -29173,7 +29195,7 @@ compatibility purposes.
@end menu
@node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id2}@anchor{449}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{44a}
+@anchor{gnat_rm/obsolescent_features id2}@anchor{44b}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{44c}
@section pragma No_Run_Time
@@ -29186,7 +29208,7 @@ preferred usage is to use an appropriately configured run-time that
includes just those features that are to be made accessible.
@node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id3}@anchor{44b}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{44c}
+@anchor{gnat_rm/obsolescent_features id3}@anchor{44d}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{44e}
@section pragma Ravenscar
@@ -29195,7 +29217,7 @@ The pragma @code{Ravenscar} has exactly the same effect as pragma
is part of the new Ada 2005 standard.
@node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id4}@anchor{44d}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{44e}
+@anchor{gnat_rm/obsolescent_features id4}@anchor{44f}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{450}
@section pragma Restricted_Run_Time
@@ -29205,7 +29227,7 @@ preferred since the Ada 2005 pragma @code{Profile} is intended for
this kind of implementation dependent addition.
@node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features id5}@anchor{44f}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{450}
+@anchor{gnat_rm/obsolescent_features id5}@anchor{451}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{452}
@section pragma Task_Info
@@ -29231,7 +29253,7 @@ in the spec of package System.Task_Info in the runtime
library.
@node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features
-@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{451}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{452}
+@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{453}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{454}
@section package System.Task_Info (@code{s-tasinf.ads})
@@ -29241,7 +29263,7 @@ to support the @code{Task_Info} pragma. The predefined Ada package
standard replacement for GNAT’s @code{Task_Info} functionality.
@node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top
-@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{453}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{454}
+@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{455}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{456}
@chapter Compatibility and Porting Guide
@@ -29263,7 +29285,7 @@ applications developed in other Ada environments.
@end menu
@node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{455}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{456}
+@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{457}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{458}
@section Writing Portable Fixed-Point Declarations
@@ -29385,7 +29407,7 @@ If you follow this scheme you will be guaranteed that your fixed-point
types will be portable.
@node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{457}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{458}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{459}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{45a}
@section Compatibility with Ada 83
@@ -29413,7 +29435,7 @@ following subsections treat the most likely issues to be encountered.
@end menu
@node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{459}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{45a}
+@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{45b}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{45c}
@subsection Legal Ada 83 programs that are illegal in Ada 95
@@ -29513,7 +29535,7 @@ the fix is usually simply to add the @code{(<>)} to the generic declaration.
@end itemize
@node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{45b}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{45c}
+@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{45d}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{45e}
@subsection More deterministic semantics
@@ -29541,7 +29563,7 @@ which open select branches are executed.
@end itemize
@node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{45d}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{45e}
+@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{45f}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{460}
@subsection Changed semantics
@@ -29583,7 +29605,7 @@ covers only the restricted range.
@end itemize
@node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83
-@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{45f}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{460}
+@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{461}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{462}
@subsection Other language compatibility issues
@@ -29616,7 +29638,7 @@ include @code{pragma Interface} and the floating point type attributes
@end itemize
@node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{461}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{462}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{463}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{464}
@section Compatibility between Ada 95 and Ada 2005
@@ -29688,7 +29710,7 @@ can declare a function returning a value from an anonymous access type.
@end itemize
@node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{463}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{464}
+@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{465}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{466}
@section Implementation-dependent characteristics
@@ -29711,7 +29733,7 @@ transition from certain Ada 83 compilers.
@end menu
@node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{465}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{466}
+@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{467}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{468}
@subsection Implementation-defined pragmas
@@ -29733,7 +29755,7 @@ avoiding compiler rejection of units that contain such pragmas; they are not
relevant in a GNAT context and hence are not otherwise implemented.
@node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{467}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{468}
+@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{469}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{46a}
@subsection Implementation-defined attributes
@@ -29747,7 +29769,7 @@ Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and
@code{Type_Class}.
@node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{469}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{46a}
+@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{46b}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{46c}
@subsection Libraries
@@ -29776,7 +29798,7 @@ be preferable to retrofit the application using modular types.
@end itemize
@node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{46b}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{46c}
+@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{46d}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{46e}
@subsection Elaboration order
@@ -29812,7 +29834,7 @@ pragmas either globally (as an effect of the @emph{-gnatE} switch) or locally
@end itemize
@node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics
-@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{46d}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{46e}
+@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{46f}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{470}
@subsection Target-specific aspects
@@ -29825,10 +29847,10 @@ on the robustness of the original design. Moreover, Ada 95 (and thus
Ada 2005 and Ada 2012) are sometimes
incompatible with typical Ada 83 compiler practices regarding implicit
packing, the meaning of the Size attribute, and the size of access values.
-GNAT’s approach to these issues is described in @ref{46f,,Representation Clauses}.
+GNAT’s approach to these issues is described in @ref{471,,Representation Clauses}.
@node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{470}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{471}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{472}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{473}
@section Compatibility with Other Ada Systems
@@ -29871,7 +29893,7 @@ far beyond this minimal set, as described in the next section.
@end itemize
@node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{472}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{46f}
+@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{474}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{471}
@section Representation Clauses
@@ -29964,7 +29986,7 @@ with thin pointers.
@end itemize
@node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide
-@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{473}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{474}
+@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{475}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{476}
@section Compatibility with HP Ada 83
@@ -29994,7 +30016,7 @@ extension of package System.
@end itemize
@node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top
-@anchor{share/gnu_free_documentation_license doc}@anchor{475}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{476}
+@anchor{share/gnu_free_documentation_license doc}@anchor{477}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{478}
@chapter GNU Free Documentation License
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index a2a2990..cfd9a87 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -21,7 +21,7 @@
@copying
@quotation
-GNAT User's Guide for Native Platforms , May 24, 2022
+GNAT User's Guide for Native Platforms , Jun 24, 2022
AdaCore
@@ -11383,8 +11383,7 @@ This switch disables warnings on overlapping actuals in a call.
If this warning option is activated, then warnings are generated for
calls to subprograms marked with @code{pragma Obsolescent} and
for use of features in Annex J of the Ada Reference Manual. In the
-case of Annex J, not all features are flagged. In particular use
-of the renamed packages (like @code{Text_IO}) and use of package
+case of Annex J, not all features are flagged. In particular, uses of package
@code{ASCII} are not flagged, since these are very common and
would generate many annoying positive warnings. The default is that
such warnings are not generated.
@@ -12853,15 +12852,31 @@ Which is a shorthand for:
@example
pragma Assertion_Policy
- (Assert => Check,
- Static_Predicate => Check,
- Dynamic_Predicate => Check,
- Pre => Check,
- Pre'Class => Check,
- Post => Check,
- Post'Class => Check,
- Type_Invariant => Check,
- Type_Invariant'Class => Check);
+-- Ada RM assertion pragmas
+ (Assert => Check,
+ Static_Predicate => Check,
+ Dynamic_Predicate => Check,
+ Pre => Check,
+ Pre'Class => Check,
+ Post => Check,
+ Post'Class => Check,
+ Type_Invariant => Check,
+ Type_Invariant'Class => Check,
+ Default_Initial_Condition => Check,
+-- GNAT specific assertion pragmas
+ Assert_And_Cut => Check,
+ Assume => Check,
+ Contract_Cases => Check,
+ Debug => Check,
+ Ghost => Check,
+ Initial_Condition => Check,
+ Loop_Invariant => Check,
+ Loop_Variant => Check,
+ Postcondition => Check,
+ Precondition => Check,
+ Predicate => Check,
+ Refined_Post => Check,
+ Subprogram_Variant => Check);
@end example
The pragmas @code{Assert} and @code{Debug} normally have no effect and
@@ -29249,8 +29264,8 @@ to permit their use in free software.
@printindex ge
-@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ }
@anchor{cf}@w{ }
+@anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ }
@c %**end of body
@bye
diff --git a/gcc/ada/gnatls.adb b/gcc/ada/gnatls.adb
index 9b62f71..7244526 100644
--- a/gcc/ada/gnatls.adb
+++ b/gcc/ada/gnatls.adb
@@ -319,7 +319,6 @@ procedure Gnatls is
Write_Eol;
Error_Msg ("wrong ALI format, can't find dependency line for $ in {");
Exit_Program (E_Fatal);
- return No_Sdep_Id;
end Corresponding_Sdep_Entry;
-------------------------
@@ -2051,7 +2050,6 @@ begin
if License then
if Arg_Count = 2 then
Output_License_Information;
- Exit_Program (E_Success);
else
Set_Standard_Error;
diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb
index 0b1b13b..b6a7bde 100644
--- a/gcc/ada/impunit.adb
+++ b/gcc/ada/impunit.adb
@@ -605,6 +605,7 @@ package body Impunit is
-- GNAT Defined Additions to Ada 2012 --
----------------------------------------
+ ("a-cfinse", F), -- Ada.Containers.Functional_Infinite_Sequences
("a-cfinve", F), -- Ada.Containers.Formal_Indefinite_Vectors
("a-coboho", F), -- Ada.Containers.Bounded_Holders
("a-cofove", F), -- Ada.Containers.Formal_Vectors
diff --git a/gcc/ada/libgnat/a-cbhase.adb b/gcc/ada/libgnat/a-cbhase.adb
index 9076d8e..b83ab80 100644
--- a/gcc/ada/libgnat/a-cbhase.adb
+++ b/gcc/ada/libgnat/a-cbhase.adb
@@ -1599,6 +1599,64 @@ is
raise Program_Error with "attempt to stream reference";
end Write;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean is
+ begin
+ pragma Assert (Vet (Position), "bad cursor in Has_Element");
+ pragma Assert ((Position.Container = null) = (Position.Node = 0),
+ "bad nullity in Has_Element");
+ return Position.Container = Container'Unrestricted_Access;
+ end Has_Element;
+
+ function Tampering_With_Cursors_Prohibited
+ (Container : Set) return Boolean
+ is
+ begin
+ return Is_Busy (Container.TC);
+ end Tampering_With_Cursors_Prohibited;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Element (Position);
+ end Element;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type)) is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ Query_Element (Position, Process);
+ end Query_Element;
+
+ function Next (Container : Set; Position : Cursor) return Cursor is
+ begin
+ if Checks and then
+ not (Position = No_Element or else Has_Element (Container, Position))
+ then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Next (Position);
+ end Next;
+
+ procedure Next (Container : Set; Position : in out Cursor) is
+ begin
+ Position := Next (Container, Position);
+ end Next;
+
+ ------------------
+ -- Generic_Keys --
+ ------------------
+
package body Generic_Keys is
-----------------------
diff --git a/gcc/ada/libgnat/a-cbhase.ads b/gcc/ada/libgnat/a-cbhase.ads
index c30a364..351014d 100644
--- a/gcc/ada/libgnat/a-cbhase.ads
+++ b/gcc/ada/libgnat/a-cbhase.ads
@@ -369,6 +369,25 @@ is
(Container : Set)
return Set_Iterator_Interfaces.Forward_Iterator'Class;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean;
+
+ function Tampering_With_Cursors_Prohibited (Container : Set) return Boolean;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type));
+
+ function Next (Container : Set; Position : Cursor) return Cursor;
+
+ procedure Next (Container : Set; Position : in out Cursor);
+
+ ----------------
+
generic
type Key_Type (<>) is private;
@@ -384,6 +403,9 @@ is
-- Applies generic formal operation Key to the element of the node
-- designated by Position.
+ function Key (Container : Set; Position : Cursor) return Key_Type is
+ (Key (Element (Container, Position)));
+
function Element (Container : Set; Key : Key_Type) return Element_Type;
-- Searches (as per the key-based Find) for the node containing Key, and
-- returns the associated element.
diff --git a/gcc/ada/libgnat/a-cborse.adb b/gcc/ada/libgnat/a-cborse.adb
index 55eca40..bc52b45 100644
--- a/gcc/ada/libgnat/a-cborse.adb
+++ b/gcc/ada/libgnat/a-cborse.adb
@@ -688,6 +688,62 @@ is
else Cursor'(Container'Unrestricted_Access, Node));
end Floor;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean is
+ begin
+ pragma Assert
+ (Position.Container = null or else Vet (Container, Position.Node),
+ "bad cursor in Has_Element");
+ pragma Assert ((Position.Container = null) = (Position.Node = 0),
+ "bad nullity in Has_Element");
+ return Position.Container = Container'Unrestricted_Access;
+ end Has_Element;
+
+ function Tampering_With_Cursors_Prohibited
+ (Container : Set) return Boolean
+ is
+ begin
+ return Is_Busy (Container.TC);
+ end Tampering_With_Cursors_Prohibited;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Element (Position);
+ end Element;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type)) is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ Query_Element (Position, Process);
+ end Query_Element;
+
+ function Next (Container : Set; Position : Cursor) return Cursor is
+ begin
+ if Checks and then
+ not (Position = No_Element or else Has_Element (Container, Position))
+ then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Next (Position);
+ end Next;
+
+ procedure Next (Container : Set; Position : in out Cursor) is
+ begin
+ Position := Next (Container, Position);
+ end Next;
+
------------------
-- Generic_Keys --
------------------
diff --git a/gcc/ada/libgnat/a-cborse.ads b/gcc/ada/libgnat/a-cborse.ads
index ceaf885..53acf35 100644
--- a/gcc/ada/libgnat/a-cborse.ads
+++ b/gcc/ada/libgnat/a-cborse.ads
@@ -230,6 +230,25 @@ is
Start : Cursor)
return Set_Iterator_Interfaces.Reversible_Iterator'class;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean;
+
+ function Tampering_With_Cursors_Prohibited (Container : Set) return Boolean;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type));
+
+ function Next (Container : Set; Position : Cursor) return Cursor;
+
+ procedure Next (Container : Set; Position : in out Cursor);
+
+ ----------------
+
generic
type Key_Type (<>) is private;
@@ -243,6 +262,9 @@ is
function Key (Position : Cursor) return Key_Type;
+ function Key (Container : Set; Position : Cursor) return Key_Type is
+ (Key (Element (Container, Position)));
+
function Element (Container : Set; Key : Key_Type) return Element_Type;
procedure Replace
diff --git a/gcc/ada/libgnat/a-cfinse.adb b/gcc/ada/libgnat/a-cfinse.adb
new file mode 100644
index 0000000..7b457f6
--- /dev/null
+++ b/gcc/ada/libgnat/a-cfinse.adb
@@ -0,0 +1,304 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT LIBRARY COMPONENTS --
+-- --
+-- ADA.CONTAINERS.FUNCTIONAL_INFINITE_SEQUENCE --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 2022-2022, Free Software Foundation, Inc. --
+-- --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the contents of the part following the private keyword. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+------------------------------------------------------------------------------
+
+pragma Ada_2012;
+
+package body Ada.Containers.Functional_Infinite_Sequences
+with SPARK_Mode => Off
+is
+ use Containers;
+
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ package Big_From_Count is new Signed_Conversions
+ (Int => Count_Type);
+
+ function Big (C : Count_Type) return Big_Integer renames
+ Big_From_Count.To_Big_Integer;
+
+ -- Store Count_Type'Last as a Big Natural because it is often used
+
+ Count_Type_Big_Last : constant Big_Natural := Big (Count_Type'Last);
+
+ function To_Count (C : Big_Natural) return Count_Type;
+ -- Convert Big_Natural to Count_Type
+
+ ---------
+ -- "<" --
+ ---------
+
+ function "<" (Left : Sequence; Right : Sequence) return Boolean is
+ (Length (Left) < Length (Right)
+ and then (for all N in Left =>
+ Get (Left, N) = Get (Right, N)));
+
+ ----------
+ -- "<=" --
+ ----------
+
+ function "<=" (Left : Sequence; Right : Sequence) return Boolean is
+ (Length (Left) <= Length (Right)
+ and then (for all N in Left =>
+ Get (Left, N) = Get (Right, N)));
+
+ ---------
+ -- "=" --
+ ---------
+
+ function "=" (Left : Sequence; Right : Sequence) return Boolean is
+ (Left.Content = Right.Content);
+
+ ---------
+ -- Add --
+ ---------
+
+ function Add (Container : Sequence; New_Item : Element_Type) return Sequence
+ is
+ (Add (Container, Last (Container) + 1, New_Item));
+
+ function Add
+ (Container : Sequence;
+ Position : Big_Positive;
+ New_Item : Element_Type) return Sequence is
+ (Content => Add (Container.Content, To_Count (Position), New_Item));
+
+ --------------------
+ -- Constant_Range --
+ --------------------
+
+ function Constant_Range
+ (Container : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural;
+ Item : Element_Type) return Boolean
+ is
+ Count_Fst : constant Count_Type := To_Count (Fst);
+ Count_Lst : constant Count_Type := To_Count (Lst);
+
+ begin
+ for J in Count_Fst .. Count_Lst loop
+ if Get (Container.Content, J) /= Item then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Constant_Range;
+
+ --------------
+ -- Contains --
+ --------------
+
+ function Contains
+ (Container : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural;
+ Item : Element_Type) return Boolean
+ is
+ Count_Fst : constant Count_Type := To_Count (Fst);
+ Count_Lst : constant Count_Type := To_Count (Lst);
+
+ begin
+ for J in Count_Fst .. Count_Lst loop
+ if Get (Container.Content, J) = Item then
+ return True;
+ end if;
+ end loop;
+
+ return False;
+ end Contains;
+
+ --------------------
+ -- Empty_Sequence --
+ --------------------
+
+ function Empty_Sequence return Sequence is
+ (Content => <>);
+
+ ------------------
+ -- Equal_Except --
+ ------------------
+
+ function Equal_Except
+ (Left : Sequence;
+ Right : Sequence;
+ Position : Big_Positive) return Boolean
+ is
+ Count_Pos : constant Count_Type := To_Count (Position);
+ Count_Lst : constant Count_Type := To_Count (Last (Left));
+
+ begin
+ if Length (Left) /= Length (Right) then
+ return False;
+ end if;
+
+ for J in 1 .. Count_Lst loop
+ if J /= Count_Pos
+ and then Get (Left.Content, J) /= Get (Right.Content, J)
+ then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Equal_Except;
+
+ function Equal_Except
+ (Left : Sequence;
+ Right : Sequence;
+ X : Big_Positive;
+ Y : Big_Positive) return Boolean
+ is
+ Count_X : constant Count_Type := To_Count (X);
+ Count_Y : constant Count_Type := To_Count (Y);
+ Count_Lst : constant Count_Type := To_Count (Last (Left));
+
+ begin
+ if Length (Left) /= Length (Right) then
+ return False;
+ end if;
+
+ for J in 1 .. Count_Lst loop
+ if J /= Count_X
+ and then J /= Count_Y
+ and then Get (Left.Content, J) /= Get (Right.Content, J)
+ then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Equal_Except;
+
+ ---------
+ -- Get --
+ ---------
+
+ function Get
+ (Container : Sequence;
+ Position : Big_Integer) return Element_Type is
+ (Get (Container.Content, To_Count (Position)));
+
+ ----------
+ -- Last --
+ ----------
+
+ function Last (Container : Sequence) return Big_Natural is
+ (Length (Container));
+
+ ------------
+ -- Length --
+ ------------
+
+ function Length (Container : Sequence) return Big_Natural is
+ (Big (Length (Container.Content)));
+
+ -----------------
+ -- Range_Equal --
+ -----------------
+
+ function Range_Equal
+ (Left : Sequence;
+ Right : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural) return Boolean
+ is
+ Count_Fst : constant Count_Type := To_Count (Fst);
+ Count_Lst : constant Count_Type := To_Count (Lst);
+
+ begin
+ for J in Count_Fst .. Count_Lst loop
+ if Get (Left.Content, J) /= Get (Right.Content, J) then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Range_Equal;
+
+ -------------------
+ -- Range_Shifted --
+ -------------------
+
+ function Range_Shifted
+ (Left : Sequence;
+ Right : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural;
+ Offset : Big_Integer) return Boolean
+ is
+ Count_Fst : constant Count_Type := To_Count (Fst);
+ Count_Lst : constant Count_Type := To_Count (Lst);
+
+ begin
+ for J in Count_Fst .. Count_Lst loop
+ if Get (Left.Content, J) /= Get (Right, Big (J) + Offset) then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Range_Shifted;
+
+ ------------
+ -- Remove --
+ ------------
+
+ function Remove
+ (Container : Sequence;
+ Position : Big_Positive) return Sequence is
+ (Content => Remove (Container.Content, To_Count (Position)));
+
+ ---------
+ -- Set --
+ ---------
+
+ function Set
+ (Container : Sequence;
+ Position : Big_Positive;
+ New_Item : Element_Type) return Sequence is
+ (Content => Set (Container.Content, To_Count (Position), New_Item));
+
+ --------------
+ -- To_Count --
+ --------------
+
+ function To_Count (C : Big_Natural) return Count_Type is
+ begin
+ if C > Count_Type_Big_Last then
+ raise Program_Error with "Big_Integer too large for Count_Type";
+ end if;
+ return Big_From_Count.From_Big_Integer (C);
+ end To_Count;
+
+end Ada.Containers.Functional_Infinite_Sequences;
diff --git a/gcc/ada/libgnat/a-cfinse.ads b/gcc/ada/libgnat/a-cfinse.ads
new file mode 100644
index 0000000..cff2900
--- /dev/null
+++ b/gcc/ada/libgnat/a-cfinse.ads
@@ -0,0 +1,377 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT LIBRARY COMPONENTS --
+-- --
+-- ADA.CONTAINERS.FUNCTIONAL_INFINITE_SEQUENCE --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2022-2022, Free Software Foundation, Inc. --
+-- --
+-- This specification is derived from the Ada Reference Manual for use with --
+-- GNAT. The copyright notice above, and the license provisions that follow --
+-- apply solely to the contents of the part following the private keyword. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+------------------------------------------------------------------------------
+
+pragma Ada_2012;
+private with Ada.Containers.Functional_Base;
+with Ada.Numerics.Big_Numbers.Big_Integers;
+use Ada.Numerics.Big_Numbers.Big_Integers;
+
+generic
+ type Element_Type (<>) is private;
+ with function "=" (Left, Right : Element_Type) return Boolean is <>;
+
+package Ada.Containers.Functional_Infinite_Sequences with SPARK_Mode is
+
+ type Sequence is private
+ with Default_Initial_Condition => Length (Sequence) = 0,
+ Iterable => (First => Iter_First,
+ Has_Element => Iter_Has_Element,
+ Next => Iter_Next,
+ Element => Get);
+ -- Sequences are empty when default initialized.
+ -- Quantification over sequences can be done using the regular
+ -- quantification over its range or directly on its elements with "for of".
+
+ -----------------------
+ -- Basic operations --
+ -----------------------
+
+ -- Sequences are axiomatized using Length and Get, providing respectively
+ -- the length of a sequence and an accessor to its Nth element:
+
+ function Length (Container : Sequence) return Big_Natural with
+ -- Length of a sequence
+
+ Global => null;
+
+ function Get
+ (Container : Sequence;
+ Position : Big_Integer) return Element_Type
+ -- Access the Element at position Position in Container
+
+ with
+ Global => null,
+ Pre => Iter_Has_Element (Container, Position);
+
+ function Last (Container : Sequence) return Big_Natural with
+ -- Last index of a sequence
+
+ Global => null,
+ Post =>
+ Last'Result = Length (Container);
+ pragma Annotate (GNATprove, Inline_For_Proof, Last);
+
+ function First return Big_Positive is (1) with
+ -- First index of a sequence
+
+ Global => null;
+
+ ------------------------
+ -- Property Functions --
+ ------------------------
+
+ function "=" (Left : Sequence; Right : Sequence) return Boolean with
+ -- Extensional equality over sequences
+
+ Global => null,
+ Post =>
+ "="'Result =
+ (Length (Left) = Length (Right)
+ and then (for all N in Left => Get (Left, N) = Get (Right, N)));
+ pragma Annotate (GNATprove, Inline_For_Proof, "=");
+
+ function "<" (Left : Sequence; Right : Sequence) return Boolean with
+ -- Left is a strict subsequence of Right
+
+ Global => null,
+ Post =>
+ "<"'Result =
+ (Length (Left) < Length (Right)
+ and then (for all N in Left => Get (Left, N) = Get (Right, N)));
+ pragma Annotate (GNATprove, Inline_For_Proof, "<");
+
+ function "<=" (Left : Sequence; Right : Sequence) return Boolean with
+ -- Left is a subsequence of Right
+
+ Global => null,
+ Post =>
+ "<="'Result =
+ (Length (Left) <= Length (Right)
+ and then (for all N in Left => Get (Left, N) = Get (Right, N)));
+ pragma Annotate (GNATprove, Inline_For_Proof, "<=");
+
+ function Contains
+ (Container : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural;
+ Item : Element_Type) return Boolean
+ -- Returns True if Item occurs in the range from Fst to Lst of Container
+
+ with
+ Global => null,
+ Pre => Lst <= Last (Container),
+ Post =>
+ Contains'Result =
+ (for some J in Container =>
+ Fst <= J and J <= Lst and Get (Container, J) = Item);
+ pragma Annotate (GNATprove, Inline_For_Proof, Contains);
+
+ function Constant_Range
+ (Container : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural;
+ Item : Element_Type) return Boolean
+ -- Returns True if every element of the range from Fst to Lst of Container
+ -- is equal to Item.
+
+ with
+ Global => null,
+ Pre => Lst <= Last (Container),
+ Post =>
+ Constant_Range'Result =
+ (for all J in Container =>
+ (if Fst <= J and J <= Lst then Get (Container, J) = Item));
+ pragma Annotate (GNATprove, Inline_For_Proof, Constant_Range);
+
+ function Equal_Except
+ (Left : Sequence;
+ Right : Sequence;
+ Position : Big_Positive) return Boolean
+ -- Returns True is Left and Right are the same except at position Position
+
+ with
+ Global => null,
+ Pre => Position <= Last (Left),
+ Post =>
+ Equal_Except'Result =
+ (Length (Left) = Length (Right)
+ and then (for all J in Left =>
+ (if J /= Position then
+ Get (Left, J) = Get (Right, J))));
+ pragma Annotate (GNATprove, Inline_For_Proof, Equal_Except);
+
+ function Equal_Except
+ (Left : Sequence;
+ Right : Sequence;
+ X : Big_Positive;
+ Y : Big_Positive) return Boolean
+ -- Returns True is Left and Right are the same except at positions X and Y
+
+ with
+ Global => null,
+ Pre => X <= Last (Left) and Y <= Last (Left),
+ Post =>
+ Equal_Except'Result =
+ (Length (Left) = Length (Right)
+ and then (for all J in Left =>
+ (if J /= X and J /= Y then
+ Get (Left, J) = Get (Right, J))));
+ pragma Annotate (GNATprove, Inline_For_Proof, Equal_Except);
+
+ function Range_Equal
+ (Left : Sequence;
+ Right : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural) return Boolean
+ -- Returns True if the ranges from Fst to Lst contain the same elements in
+ -- Left and Right.
+
+ with
+ Global => null,
+ Pre => Lst <= Last (Left) and Lst <= Last (Right),
+ Post =>
+ Range_Equal'Result =
+ (for all J in Left =>
+ (if Fst <= J and J <= Lst then Get (Left, J) = Get (Right, J)));
+ pragma Annotate (GNATprove, Inline_For_Proof, Range_Equal);
+
+ function Range_Shifted
+ (Left : Sequence;
+ Right : Sequence;
+ Fst : Big_Positive;
+ Lst : Big_Natural;
+ Offset : Big_Integer) return Boolean
+ -- Returns True if the range from Fst to Lst in Left contains the same
+ -- elements as the range from Fst + Offset to Lst + Offset in Right.
+
+ with
+ Global => null,
+ Pre =>
+ Lst <= Last (Left)
+ and then
+ (if Fst <= Lst then
+ Offset + Fst >= 1 and Offset + Lst <= Length (Right)),
+ Post =>
+ Range_Shifted'Result =
+ ((for all J in Left =>
+ (if Fst <= J and J <= Lst then
+ Get (Left, J) = Get (Right, J + Offset)))
+ and
+ (for all J in Right =>
+ (if Fst + Offset <= J and J <= Lst + Offset then
+ Get (Left, J - Offset) = Get (Right, J))));
+ pragma Annotate (GNATprove, Inline_For_Proof, Range_Shifted);
+
+ ----------------------------
+ -- Construction Functions --
+ ----------------------------
+
+ -- For better efficiency of both proofs and execution, avoid using
+ -- construction functions in annotations and rather use property functions.
+
+ function Set
+ (Container : Sequence;
+ Position : Big_Positive;
+ New_Item : Element_Type) return Sequence
+ -- Returns a new sequence which contains the same elements as Container
+ -- except for the one at position Position which is replaced by New_Item.
+
+ with
+ Global => null,
+ Pre => Position <= Last (Container),
+ Post =>
+ Get (Set'Result, Position) = New_Item
+ and then Equal_Except (Container, Set'Result, Position);
+
+ function Add (Container : Sequence; New_Item : Element_Type) return Sequence
+ -- Returns a new sequence which contains the same elements as Container
+ -- plus New_Item at the end.
+
+ with
+ Global => null,
+ Post =>
+ Length (Add'Result) = Length (Container) + 1
+ and then Get (Add'Result, Last (Add'Result)) = New_Item
+ and then Container <= Add'Result;
+
+ function Add
+ (Container : Sequence;
+ Position : Big_Positive;
+ New_Item : Element_Type) return Sequence
+ with
+ -- Returns a new sequence which contains the same elements as Container
+ -- except that New_Item has been inserted at position Position.
+
+ Global => null,
+ Pre => Position <= Last (Container) + 1,
+ Post =>
+ Length (Add'Result) = Length (Container) + 1
+ and then Get (Add'Result, Position) = New_Item
+ and then Range_Equal
+ (Left => Container,
+ Right => Add'Result,
+ Fst => 1,
+ Lst => Position - 1)
+ and then Range_Shifted
+ (Left => Container,
+ Right => Add'Result,
+ Fst => Position,
+ Lst => Last (Container),
+ Offset => 1);
+
+ function Remove
+ (Container : Sequence;
+ Position : Big_Positive) return Sequence
+ -- Returns a new sequence which contains the same elements as Container
+ -- except that the element at position Position has been removed.
+
+ with
+ Global => null,
+ Pre => Position <= Last (Container),
+ Post =>
+ Length (Remove'Result) = Length (Container) - 1
+ and then Range_Equal
+ (Left => Container,
+ Right => Remove'Result,
+ Fst => 1,
+ Lst => Position - 1)
+ and then Range_Shifted
+ (Left => Remove'Result,
+ Right => Container,
+ Fst => Position,
+ Lst => Last (Remove'Result),
+ Offset => 1);
+
+ function Copy_Element (Item : Element_Type) return Element_Type is (Item);
+ -- Elements of containers are copied by numerous primitives in this
+ -- package. This function causes GNATprove to verify that such a copy is
+ -- valid (in particular, it does not break the ownership policy of SPARK,
+ -- i.e. it does not contain pointers that could be used to alias mutable
+ -- data).
+
+ function Empty_Sequence return Sequence with
+ -- Return an empty Sequence
+
+ Global => null,
+ Post => Length (Empty_Sequence'Result) = 0;
+
+ ---------------------------
+ -- Iteration Primitives --
+ ---------------------------
+
+ function Iter_First (Container : Sequence) return Big_Integer with
+ Global => null,
+ Post => Iter_First'Result = 1;
+
+ function Iter_Has_Element
+ (Container : Sequence;
+ Position : Big_Integer) return Boolean
+ with
+ Global => null,
+ Post => Iter_Has_Element'Result =
+ In_Range (Position, 1, Length (Container));
+ pragma Annotate (GNATprove, Inline_For_Proof, Iter_Has_Element);
+
+ function Iter_Next
+ (Container : Sequence;
+ Position : Big_Integer) return Big_Integer
+ with
+ Global => null,
+ Pre => Iter_Has_Element (Container, Position),
+ Post => Iter_Next'Result = Position + 1;
+
+private
+ pragma SPARK_Mode (Off);
+
+ subtype Positive_Count_Type is Count_Type range 1 .. Count_Type'Last;
+
+ package Containers is new Ada.Containers.Functional_Base
+ (Index_Type => Positive_Count_Type,
+ Element_Type => Element_Type);
+
+ type Sequence is record
+ Content : Containers.Container;
+ end record;
+
+ function Iter_First (Container : Sequence) return Big_Integer is (1);
+
+ function Iter_Next
+ (Container : Sequence;
+ Position : Big_Integer) return Big_Integer
+ is
+ (Position + 1);
+
+ function Iter_Has_Element
+ (Container : Sequence;
+ Position : Big_Integer) return Boolean
+ is
+ (In_Range (Position, 1, Length (Container)));
+end Ada.Containers.Functional_Infinite_Sequences;
diff --git a/gcc/ada/libgnat/a-cihase.adb b/gcc/ada/libgnat/a-cihase.adb
index 090d01c..0a9aabd 100644
--- a/gcc/ada/libgnat/a-cihase.adb
+++ b/gcc/ada/libgnat/a-cihase.adb
@@ -2031,6 +2031,64 @@ is
Element_Type'Output (Stream, Node.Element.all);
end Write_Node;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean is
+ begin
+ pragma Assert (Vet (Position), "bad cursor in Has_Element");
+ pragma Assert ((Position.Container = null) = (Position.Node = null),
+ "bad nullity in Has_Element");
+ return Position.Container = Container'Unrestricted_Access;
+ end Has_Element;
+
+ function Tampering_With_Cursors_Prohibited
+ (Container : Set) return Boolean
+ is
+ begin
+ return Is_Busy (Container.HT.TC);
+ end Tampering_With_Cursors_Prohibited;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Element (Position);
+ end Element;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type)) is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ Query_Element (Position, Process);
+ end Query_Element;
+
+ function Next (Container : Set; Position : Cursor) return Cursor is
+ begin
+ if Checks and then
+ not (Position = No_Element or else Has_Element (Container, Position))
+ then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Next (Position);
+ end Next;
+
+ procedure Next (Container : Set; Position : in out Cursor) is
+ begin
+ Position := Next (Container, Position);
+ end Next;
+
+ ------------------
+ -- Generic_Keys --
+ ------------------
+
package body Generic_Keys is
-----------------------
diff --git a/gcc/ada/libgnat/a-cihase.ads b/gcc/ada/libgnat/a-cihase.ads
index cff713d..2bb4527 100644
--- a/gcc/ada/libgnat/a-cihase.ads
+++ b/gcc/ada/libgnat/a-cihase.ads
@@ -355,6 +355,25 @@ is
function Iterate (Container : Set)
return Set_Iterator_Interfaces.Forward_Iterator'Class;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean;
+
+ function Tampering_With_Cursors_Prohibited (Container : Set) return Boolean;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type));
+
+ function Next (Container : Set; Position : Cursor) return Cursor;
+
+ procedure Next (Container : Set; Position : in out Cursor);
+
+ ----------------
+
generic
type Key_Type (<>) is private;
@@ -370,6 +389,9 @@ is
-- Applies generic formal operation Key to the element of the node
-- designated by Position.
+ function Key (Container : Set; Position : Cursor) return Key_Type is
+ (Key (Element (Container, Position)));
+
function Element (Container : Set; Key : Key_Type) return Element_Type;
-- Searches (as per the key-based Find) for the node containing Key, and
-- returns the associated element.
diff --git a/gcc/ada/libgnat/a-ciorse.adb b/gcc/ada/libgnat/a-ciorse.adb
index b23b252..d5502ea 100644
--- a/gcc/ada/libgnat/a-ciorse.adb
+++ b/gcc/ada/libgnat/a-ciorse.adb
@@ -721,6 +721,61 @@ is
Deallocate (X);
end Free;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean is
+ begin
+ pragma Assert
+ (Vet (Container.Tree, Position.Node), "bad cursor in Has_Element");
+ pragma Assert ((Position.Container = null) = (Position.Node = null),
+ "bad nullity in Has_Element");
+ return Position.Container = Container'Unrestricted_Access;
+ end Has_Element;
+
+ function Tampering_With_Cursors_Prohibited
+ (Container : Set) return Boolean
+ is
+ begin
+ return Is_Busy (Container.Tree.TC);
+ end Tampering_With_Cursors_Prohibited;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Element (Position);
+ end Element;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type)) is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ Query_Element (Position, Process);
+ end Query_Element;
+
+ function Next (Container : Set; Position : Cursor) return Cursor is
+ begin
+ if Checks and then
+ not (Position = No_Element or else Has_Element (Container, Position))
+ then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Next (Position);
+ end Next;
+
+ procedure Next (Container : Set; Position : in out Cursor) is
+ begin
+ Position := Next (Container, Position);
+ end Next;
+
------------------
-- Generic_Keys --
------------------
diff --git a/gcc/ada/libgnat/a-ciorse.ads b/gcc/ada/libgnat/a-ciorse.ads
index 13272e2..51545d6 100644
--- a/gcc/ada/libgnat/a-ciorse.ads
+++ b/gcc/ada/libgnat/a-ciorse.ads
@@ -238,6 +238,25 @@ is
Start : Cursor)
return Set_Iterator_Interfaces.Reversible_Iterator'class;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean;
+
+ function Tampering_With_Cursors_Prohibited (Container : Set) return Boolean;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type));
+
+ function Next (Container : Set; Position : Cursor) return Cursor;
+
+ procedure Next (Container : Set; Position : in out Cursor);
+
+ ----------------
+
generic
type Key_Type (<>) is private;
@@ -251,6 +270,9 @@ is
function Key (Position : Cursor) return Key_Type;
+ function Key (Container : Set; Position : Cursor) return Key_Type is
+ (Key (Element (Container, Position)));
+
function Element (Container : Set; Key : Key_Type) return Element_Type;
procedure Replace
diff --git a/gcc/ada/libgnat/a-cohase.adb b/gcc/ada/libgnat/a-cohase.adb
index 986b354..4656868 100644
--- a/gcc/ada/libgnat/a-cohase.adb
+++ b/gcc/ada/libgnat/a-cohase.adb
@@ -1844,6 +1844,64 @@ is
Element_Type'Write (Stream, Node.Element);
end Write_Node;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean is
+ begin
+ pragma Assert (Vet (Position), "bad cursor in Has_Element");
+ pragma Assert ((Position.Container = null) = (Position.Node = null),
+ "bad nullity in Has_Element");
+ return Position.Container = Container'Unrestricted_Access;
+ end Has_Element;
+
+ function Tampering_With_Cursors_Prohibited
+ (Container : Set) return Boolean
+ is
+ begin
+ return Is_Busy (Container.HT.TC);
+ end Tampering_With_Cursors_Prohibited;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Element (Position);
+ end Element;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type)) is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ Query_Element (Position, Process);
+ end Query_Element;
+
+ function Next (Container : Set; Position : Cursor) return Cursor is
+ begin
+ if Checks and then
+ not (Position = No_Element or else Has_Element (Container, Position))
+ then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Next (Position);
+ end Next;
+
+ procedure Next (Container : Set; Position : in out Cursor) is
+ begin
+ Position := Next (Container, Position);
+ end Next;
+
+ ------------------
+ -- Generic_Keys --
+ ------------------
+
package body Generic_Keys is
-----------------------
diff --git a/gcc/ada/libgnat/a-cohase.ads b/gcc/ada/libgnat/a-cohase.ads
index ada212c..fb7dcca 100644
--- a/gcc/ada/libgnat/a-cohase.ads
+++ b/gcc/ada/libgnat/a-cohase.ads
@@ -367,6 +367,25 @@ is
function Iterate
(Container : Set) return Set_Iterator_Interfaces.Forward_Iterator'Class;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean;
+
+ function Tampering_With_Cursors_Prohibited (Container : Set) return Boolean;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type));
+
+ function Next (Container : Set; Position : Cursor) return Cursor;
+
+ procedure Next (Container : Set; Position : in out Cursor);
+
+ ----------------
+
generic
type Key_Type (<>) is private;
@@ -382,6 +401,9 @@ is
-- Applies generic formal operation Key to the element of the node
-- designated by Position.
+ function Key (Container : Set; Position : Cursor) return Key_Type is
+ (Key (Element (Container, Position)));
+
function Element (Container : Set; Key : Key_Type) return Element_Type;
-- Searches (as per the key-based Find) for the node containing Key, and
-- returns the associated element.
diff --git a/gcc/ada/libgnat/a-conhel.adb b/gcc/ada/libgnat/a-conhel.adb
index b24be67..46f1bcc 100644
--- a/gcc/ada/libgnat/a-conhel.adb
+++ b/gcc/ada/libgnat/a-conhel.adb
@@ -36,8 +36,6 @@ package body Ada.Containers.Helpers is
package body Generic_Implementation is
- use type SAC.Atomic_Unsigned;
-
------------
-- Adjust --
------------
@@ -133,7 +131,7 @@ package body Ada.Containers.Helpers is
procedure TC_Check (T_Counts : Tamper_Counts) is
begin
if T_Check then
- if T_Counts.Busy > 0 then
+ if Is_Busy (T_Counts) then
raise Program_Error with
"attempt to tamper with cursors";
end if;
@@ -144,7 +142,7 @@ package body Ada.Containers.Helpers is
-- Thus if the busy count is zero, then the lock count
-- must also be zero.
- pragma Assert (T_Counts.Lock = 0);
+ pragma Assert (not Is_Locked (T_Counts));
end if;
end TC_Check;
@@ -154,7 +152,7 @@ package body Ada.Containers.Helpers is
procedure TE_Check (T_Counts : Tamper_Counts) is
begin
- if T_Check and then T_Counts.Lock > 0 then
+ if T_Check and then Is_Locked (T_Counts) then
raise Program_Error with
"attempt to tamper with elements";
end if;
diff --git a/gcc/ada/libgnat/a-conhel.ads b/gcc/ada/libgnat/a-conhel.ads
index 47811f5..92e23d0 100644
--- a/gcc/ada/libgnat/a-conhel.ads
+++ b/gcc/ada/libgnat/a-conhel.ads
@@ -121,9 +121,31 @@ package Ada.Containers.Helpers is
pragma Inline (TE_Check);
-- Tampering-with-elements check
- -----------------
- -- RAII Types --
- -----------------
+ ---------------------------------------
+ -- Queries of busy and locked status --
+ ---------------------------------------
+
+ -- These are never called when tampering checks are suppressed.
+
+ use type SAC.Atomic_Unsigned;
+
+ pragma Warnings (Off);
+ -- Otherwise, the -gnatw.n switch triggers unwanted warnings on the
+ -- references to atomic variables below.
+
+ function Is_Busy (T_Counts : Tamper_Counts) return Boolean is
+ (if T_Check then T_Counts.Busy > 0 else raise Program_Error);
+ pragma Inline (Is_Busy);
+
+ function Is_Locked (T_Counts : Tamper_Counts) return Boolean is
+ (if T_Check then T_Counts.Lock > 0 else raise Program_Error);
+ pragma Inline (Is_Locked);
+
+ pragma Warnings (On);
+
+ ----------------
+ -- RAII Types --
+ ----------------
-- Initialize of With_Busy increments the Busy count, and Finalize
-- decrements it. Thus, to prohibit tampering with elements within a
diff --git a/gcc/ada/libgnat/a-coorse.adb b/gcc/ada/libgnat/a-coorse.adb
index 7998ee8..848022e 100644
--- a/gcc/ada/libgnat/a-coorse.adb
+++ b/gcc/ada/libgnat/a-coorse.adb
@@ -643,6 +643,61 @@ is
end if;
end Free;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean is
+ begin
+ pragma Assert
+ (Vet (Container.Tree, Position.Node), "bad cursor in Has_Element");
+ pragma Assert ((Position.Container = null) = (Position.Node = null),
+ "bad nullity in Has_Element");
+ return Position.Container = Container'Unrestricted_Access;
+ end Has_Element;
+
+ function Tampering_With_Cursors_Prohibited
+ (Container : Set) return Boolean
+ is
+ begin
+ return Is_Busy (Container.Tree.TC);
+ end Tampering_With_Cursors_Prohibited;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Element (Position);
+ end Element;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type)) is
+ begin
+ if Checks and then not Has_Element (Container, Position) then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ Query_Element (Position, Process);
+ end Query_Element;
+
+ function Next (Container : Set; Position : Cursor) return Cursor is
+ begin
+ if Checks and then
+ not (Position = No_Element or else Has_Element (Container, Position))
+ then
+ raise Program_Error with "Position for wrong Container";
+ end if;
+
+ return Next (Position);
+ end Next;
+
+ procedure Next (Container : Set; Position : in out Cursor) is
+ begin
+ Position := Next (Container, Position);
+ end Next;
+
------------------
-- Generic_Keys --
------------------
diff --git a/gcc/ada/libgnat/a-coorse.ads b/gcc/ada/libgnat/a-coorse.ads
index 1833336..7596ed6 100644
--- a/gcc/ada/libgnat/a-coorse.ads
+++ b/gcc/ada/libgnat/a-coorse.ads
@@ -231,6 +231,25 @@ is
Start : Cursor)
return Set_Iterator_Interfaces.Reversible_Iterator'class;
+ -- Ada 2022 features:
+
+ function Has_Element (Container : Set; Position : Cursor) return Boolean;
+
+ function Tampering_With_Cursors_Prohibited (Container : Set) return Boolean;
+
+ function Element (Container : Set; Position : Cursor) return Element_Type;
+
+ procedure Query_Element
+ (Container : Set;
+ Position : Cursor;
+ Process : not null access procedure (Element : Element_Type));
+
+ function Next (Container : Set; Position : Cursor) return Cursor;
+
+ procedure Next (Container : Set; Position : in out Cursor);
+
+ ----------------
+
generic
type Key_Type (<>) is private;
@@ -244,6 +263,9 @@ is
function Key (Position : Cursor) return Key_Type;
+ function Key (Container : Set; Position : Cursor) return Key_Type is
+ (Key (Element (Container, Position)));
+
function Element (Container : Set; Key : Key_Type) return Element_Type;
procedure Replace
diff --git a/gcc/ada/libgnat/a-exstat.adb b/gcc/ada/libgnat/a-exstat.adb
index a3f808e..acc2516 100644
--- a/gcc/ada/libgnat/a-exstat.adb
+++ b/gcc/ada/libgnat/a-exstat.adb
@@ -109,13 +109,6 @@ package body Stream_Attributes is
Raise_Exception
(Program_Error'Identity,
"bad exception occurrence in stream input");
-
- -- The following junk raise of Program_Error is required because
- -- this is a No_Return procedure, and unfortunately Raise_Exception
- -- can return (this particular call can't, but the back end is not
- -- clever enough to know that).
-
- raise Program_Error;
end Bad_EO;
procedure Next_String is
diff --git a/gcc/ada/libgnat/g-awk.adb b/gcc/ada/libgnat/g-awk.adb
index 1c88785..9b2e127 100644
--- a/gcc/ada/libgnat/g-awk.adb
+++ b/gcc/ada/libgnat/g-awk.adb
@@ -1211,7 +1211,6 @@ package body GNAT.AWK is
Exceptions.Raise_Exception
(E,
'[' & Filename & ':' & Line & "] " & Message);
- raise Constraint_Error; -- to please GNAT as this is a No_Return proc
end Raise_With_Info;
---------------
diff --git a/gcc/ada/libgnat/g-socket.adb b/gcc/ada/libgnat/g-socket.adb
index 12abb68..86ce3b8 100644
--- a/gcc/ada/libgnat/g-socket.adb
+++ b/gcc/ada/libgnat/g-socket.adb
@@ -191,12 +191,14 @@ package body GNAT.Sockets is
else Value);
-- Removes dot at the end of error message
- procedure Raise_Host_Error (H_Error : Integer; Name : String);
+ procedure Raise_Host_Error (H_Error : Integer; Name : String)
+ with No_Return;
-- Raise Host_Error exception with message describing error code (note
-- hstrerror seems to be obsolete) from h_errno. Name is the name
-- or address that was being looked up.
- procedure Raise_GAI_Error (RC : C.int; Name : String);
+ procedure Raise_GAI_Error (RC : C.int; Name : String)
+ with No_Return;
-- Raise Host_Error with exception message in case of errors in
-- getaddrinfo and getnameinfo.
@@ -1034,7 +1036,6 @@ package body GNAT.Sockets is
R : C.int;
Iter : Addrinfo_Access;
- Found : Boolean;
function To_Array return Address_Info_Array;
-- Convert taken from OS addrinfo list A into Address_Info_Array
@@ -1044,8 +1045,6 @@ package body GNAT.Sockets is
--------------
function To_Array return Address_Info_Array is
- Result : Address_Info_Array (1 .. 8);
-
procedure Unsupported;
-- Calls Unknown callback if defiend
@@ -1064,6 +1063,9 @@ package body GNAT.Sockets is
end if;
end Unsupported;
+ Found : Boolean;
+ Result : Address_Info_Array (1 .. 8);
+
-- Start of processing for To_Array
begin
@@ -1085,8 +1087,8 @@ package body GNAT.Sockets is
if Result (J).Addr.Family = Family_Unspec then
Unsupported;
else
+ Found := False;
for M in Modes'Range loop
- Found := False;
if Modes (M) = Iter.ai_socktype then
Result (J).Mode := M;
Found := True;
diff --git a/gcc/ada/libgnat/g-socket.ads b/gcc/ada/libgnat/g-socket.ads
index 41ede44..cfc47be 100644
--- a/gcc/ada/libgnat/g-socket.ads
+++ b/gcc/ada/libgnat/g-socket.ads
@@ -1593,7 +1593,7 @@ private
Wait_For_A_Full_Reception : constant Request_Flag_Type := 4;
Send_End_Of_Record : constant Request_Flag_Type := 8;
- procedure Raise_Socket_Error (Error : Integer);
+ procedure Raise_Socket_Error (Error : Integer) with No_Return;
-- Raise Socket_Error with an exception message describing the error code
-- from errno.
diff --git a/gcc/ada/libgnat/s-imageu.ads b/gcc/ada/libgnat/s-imageu.ads
index d3f2981..789cf65 100644
--- a/gcc/ada/libgnat/s-imageu.ads
+++ b/gcc/ada/libgnat/s-imageu.ads
@@ -54,27 +54,34 @@ generic
Unsigned_Width_Ghost : Natural;
- with function Wrap_Option (Value : Uns) return Uns_Option;
+ with function Wrap_Option (Value : Uns) return Uns_Option
+ with Ghost;
with function Only_Decimal_Ghost
(Str : String;
From, To : Integer)
- return Boolean;
- with function Hexa_To_Unsigned_Ghost (X : Character) return Uns;
+ return Boolean
+ with Ghost;
+ with function Hexa_To_Unsigned_Ghost (X : Character) return Uns
+ with Ghost;
with function Scan_Based_Number_Ghost
(Str : String;
From, To : Integer;
Base : Uns := 10;
- Acc : Uns := 0) return Uns_Option;
- with function Is_Unsigned_Ghost (Str : String) return Boolean;
+ Acc : Uns := 0) return Uns_Option
+ with Ghost;
+ with function Is_Unsigned_Ghost (Str : String) return Boolean
+ with Ghost;
with function Value_Unsigned (Str : String) return Uns;
with procedure Prove_Iter_Scan_Based_Number_Ghost
(Str1, Str2 : String;
From, To : Integer;
Base : Uns := 10;
- Acc : Uns := 0);
+ Acc : Uns := 0)
+ with Ghost;
with procedure Prove_Scan_Only_Decimal_Ghost
(Str : String;
- Val : Uns);
+ Val : Uns)
+ with Ghost;
package System.Image_U is
diff --git a/gcc/ada/libgnat/s-os_lib.adb b/gcc/ada/libgnat/s-os_lib.adb
index 5af6586..53dfbf9 100644
--- a/gcc/ada/libgnat/s-os_lib.adb
+++ b/gcc/ada/libgnat/s-os_lib.adb
@@ -1940,7 +1940,7 @@ package body System.OS_Lib is
procedure Quote_Argument (Arg : in out String_Access) is
J : Positive := 1;
Quote_Needed : Boolean := False;
- Res : String (1 .. Arg'Length * 2);
+ Res : String (1 .. Arg'Length * 2 + 2);
begin
if Arg (Arg'First) /= '"' or else Arg (Arg'Last) /= '"' then
diff --git a/gcc/ada/libgnat/s-regpat.adb b/gcc/ada/libgnat/s-regpat.adb
index 4f758f9..3290f90 100644
--- a/gcc/ada/libgnat/s-regpat.adb
+++ b/gcc/ada/libgnat/s-regpat.adb
@@ -359,10 +359,11 @@ package body System.Regpat is
-------------
procedure Compile
- (Matcher : out Pattern_Matcher;
- Expression : String;
- Final_Code_Size : out Program_Size;
- Flags : Regexp_Flags := No_Flags)
+ (Matcher : out Pattern_Matcher;
+ Expression : String;
+ Final_Code_Size : out Program_Size;
+ Flags : Regexp_Flags := No_Flags;
+ Error_When_Too_Small : Boolean := True)
is
-- We can't allocate space until we know how big the compiled form
-- will be, but we can't compile it (and thus know how big it is)
@@ -1994,6 +1995,12 @@ package body System.Regpat is
end if;
PM.Flags := Flags;
+
+ -- Raise the appropriate error when Matcher does not have enough space
+
+ if Error_When_Too_Small and then Matcher.Size < Final_Code_Size then
+ raise Expression_Error with "Pattern_Matcher is too small";
+ end if;
end Compile;
function Compile
@@ -2009,7 +2016,7 @@ package body System.Regpat is
Size : Program_Size;
begin
- Compile (Dummy, Expression, Size, Flags);
+ Compile (Dummy, Expression, Size, Flags, Error_When_Too_Small => False);
if Size <= Dummy.Size then
return Pattern_Matcher'
@@ -2023,17 +2030,13 @@ package body System.Regpat is
Program =>
Dummy.Program
(Dummy.Program'First .. Dummy.Program'First + Size - 1));
- else
- -- We have to recompile now that we know the size
- -- ??? Can we use Ada 2005's return construct ?
-
- declare
- Result : Pattern_Matcher (Size);
- begin
- Compile (Result, Expression, Size, Flags);
- return Result;
- end;
end if;
+
+ return
+ Result : Pattern_Matcher (Size)
+ do
+ Compile (Result, Expression, Size, Flags);
+ end return;
end Compile;
procedure Compile
diff --git a/gcc/ada/libgnat/s-regpat.ads b/gcc/ada/libgnat/s-regpat.ads
index baa91be..6d0cbf4 100644
--- a/gcc/ada/libgnat/s-regpat.ads
+++ b/gcc/ada/libgnat/s-regpat.ads
@@ -403,10 +403,11 @@ package System.Regpat is
-- (e.g. case sensitivity,...).
procedure Compile
- (Matcher : out Pattern_Matcher;
- Expression : String;
- Final_Code_Size : out Program_Size;
- Flags : Regexp_Flags := No_Flags);
+ (Matcher : out Pattern_Matcher;
+ Expression : String;
+ Final_Code_Size : out Program_Size;
+ Flags : Regexp_Flags := No_Flags;
+ Error_When_Too_Small : Boolean := True);
-- Compile a regular expression into internal code
-- This procedure is significantly faster than the Compile function since
@@ -426,7 +427,25 @@ package System.Regpat is
-- expression.
--
-- This function raises Storage_Error if Matcher is too small to hold
- -- the resulting code (i.e. Matcher.Size has too small a value).
+ -- the resulting code (i.e. Matcher.Size has too small a value) only when
+ -- the paramter Error_When_Too_Small is set to True. Otherwise, no error
+ -- will be raised and the required size will be placed in the
+ -- Final_Code_Size parameter.
+ --
+ -- Thus when Error_When_Too_Small is specified as false a check will need
+ -- to be made to ensure successful compilation - as in:
+ --
+ -- ...
+ -- Compile
+ -- (Matcher, Expr, Code_Size, Flags, Error_When_Too_Small => False);
+ --
+ -- if Matcher.Size < Code_Size then
+ -- declare
+ -- New_Matcher : Pattern_Matcher (1..Code_Size);
+ -- begin
+ -- Compile (New_Matcher, Expr, Code_Size, Flags);
+ -- end;
+ -- end if;
--
-- Expression_Error is raised if the string Expression does not contain
-- a valid regular expression.
diff --git a/gcc/ada/libgnat/s-secsta.adb b/gcc/ada/libgnat/s-secsta.adb
index ac929c0..24b7601 100644
--- a/gcc/ada/libgnat/s-secsta.adb
+++ b/gcc/ada/libgnat/s-secsta.adb
@@ -550,22 +550,52 @@ package body System.Secondary_Stack is
procedure SS_Allocate
(Addr : out Address;
- Storage_Size : Storage_Count)
+ Storage_Size : Storage_Count;
+ Alignment : SSE.Storage_Count := Standard'Maximum_Alignment)
is
+
function Round_Up (Size : Storage_Count) return Memory_Size;
pragma Inline (Round_Up);
-- Round Size up to the nearest multiple of the maximum alignment
+ function Align_Addr (Addr : Address) return Address;
+ pragma Inline (Align_Addr);
+ -- Align Addr to the next multiple of Alignment
+
+ ----------------
+ -- Align_Addr --
+ ----------------
+
+ function Align_Addr (Addr : Address) return Address is
+ Int_Algn : constant Integer_Address := Integer_Address (Alignment);
+ Int_Addr : constant Integer_Address := To_Integer (Addr);
+ begin
+
+ -- L : Alignment
+ -- A : Standard'Maximum_Alignment
+
+ -- Addr
+ -- L | L L
+ -- A--A--A--A--A--A--A--A--A--A--A
+ -- | |
+ -- \----/ | |
+ -- Addr mod L | Addr + L
+ -- |
+ -- Addr + L - (Addr mod L)
+
+ return To_Address (Int_Addr + Int_Algn - (Int_Addr mod Int_Algn));
+ end Align_Addr;
+
--------------
-- Round_Up --
--------------
function Round_Up (Size : Storage_Count) return Memory_Size is
- Algn_MS : constant Memory_Size := Memory_Alignment;
+ Algn_MS : constant Memory_Size := Standard'Maximum_Alignment;
Size_MS : constant Memory_Size := Memory_Size (Size);
begin
- -- Detect a case where the Storage_Size is very large and may yield
+ -- Detect a case where the Size is very large and may yield
-- a rounded result which is outside the range of Chunk_Memory_Size.
-- Treat this case as secondary-stack depletion.
@@ -581,27 +611,46 @@ package body System.Secondary_Stack is
Stack : constant SS_Stack_Ptr := Get_Sec_Stack.all;
Mem_Size : Memory_Size;
+ Over_Aligning : constant Boolean :=
+ Alignment > Standard'Maximum_Alignment;
+
+ Padding : SSE.Storage_Count := 0;
+
-- Start of processing for SS_Allocate
begin
- -- Round the requested size up to the nearest multiple of the maximum
- -- alignment to ensure efficient access.
+ -- Alignment must be a power of two and can be:
- if Storage_Size = 0 then
- Mem_Size := Memory_Alignment;
- else
- -- It should not be possible to request an allocation of negative
- -- size.
+ -- - lower than or equal to Maximum_Alignment, in which case the result
+ -- will be aligned on Maximum_Alignment;
+ -- - higher than Maximum_Alignment, in which case the result will be
+ -- dynamically realigned.
- pragma Assert (Storage_Size >= 0);
- Mem_Size := Round_Up (Storage_Size);
+ if Over_Aligning then
+ Padding := Alignment;
end if;
+ -- Round the requested size (plus the needed padding in case of
+ -- over-alignment) up to the nearest multiple of the default
+ -- alignment to ensure efficient access and that the next available
+ -- Byte is always aligned on the default alignement value.
+
+ -- It should not be possible to request an allocation of negative
+ -- size.
+
+ pragma Assert (Storage_Size >= 0);
+ Mem_Size := Round_Up (Storage_Size + Padding);
+
if Sec_Stack_Dynamic then
Allocate_Dynamic (Stack, Mem_Size, Addr);
else
Allocate_Static (Stack, Mem_Size, Addr);
end if;
+
+ if Over_Aligning then
+ Addr := Align_Addr (Addr);
+ end if;
+
end SS_Allocate;
-------------
diff --git a/gcc/ada/libgnat/s-secsta.ads b/gcc/ada/libgnat/s-secsta.ads
index b75f1a3..9399fa3 100644
--- a/gcc/ada/libgnat/s-secsta.ads
+++ b/gcc/ada/libgnat/s-secsta.ads
@@ -69,11 +69,13 @@ package System.Secondary_Stack is
procedure SS_Allocate
(Addr : out Address;
- Storage_Size : SSE.Storage_Count);
+ Storage_Size : SSE.Storage_Count;
+ Alignment : SSE.Storage_Count := Standard'Maximum_Alignment);
-- Allocate enough space on the secondary stack of the invoking task to
- -- accommodate an alloction of size Storage_Size. Return the address of the
- -- first byte of the allocation in Addr. The routine may carry out one or
- -- more of the following actions:
+ -- accommodate an allocation of size Storage_Size. Return the address of
+ -- the first byte of the allocation in Addr, which is a multiple of
+ -- Alignment. The routine may carry out one or more of the following
+ -- actions:
--
-- * Reuse an existing chunk that is big enough to accommodate the
-- requested Storage_Size.
@@ -259,22 +261,8 @@ private
subtype Memory_Index is Memory_Size;
-- Index into the memory storage of a single chunk
- Memory_Alignment : constant := Standard'Maximum_Alignment * 2;
- -- The memory alignment we will want to honor on every allocation.
- --
- -- At this stage, gigi assumes we can accommodate any alignment requirement
- -- there might be on the data type for which the memory gets allocated (see
- -- build_call_alloc_dealloc).
- --
- -- The multiplication factor is intended to account for requirements
- -- by user code compiled with specific arch/cpu options such as -mavx
- -- on X86[_64] targets, which Standard'Maximum_Alignment doesn't convey
- -- without such compilation options. * 4 would actually be needed to
- -- support -mavx512f on X86, but this would incur more annoying memory
- -- consumption overheads.
-
type Chunk_Memory is array (Memory_Size range <>) of SSE.Storage_Element;
- for Chunk_Memory'Alignment use Memory_Alignment;
+ for Chunk_Memory'Alignment use Standard'Maximum_Alignment;
-- The memory storage of a single chunk
--------------
diff --git a/gcc/ada/libgnat/s-valuei.ads b/gcc/ada/libgnat/s-valuei.ads
index c5b4b8e..5e42773 100644
--- a/gcc/ada/libgnat/s-valuei.ads
+++ b/gcc/ada/libgnat/s-valuei.ads
@@ -55,30 +55,37 @@ generic
-- Additional parameters for ghost subprograms used inside contracts
type Uns_Option is private;
- with function Wrap_Option (Value : Uns) return Uns_Option;
- with function Is_Raw_Unsigned_Format_Ghost (Str : String) return Boolean;
+ with function Wrap_Option (Value : Uns) return Uns_Option
+ with Ghost;
+ with function Is_Raw_Unsigned_Format_Ghost (Str : String) return Boolean
+ with Ghost;
with function Raw_Unsigned_Overflows_Ghost
(Str : String;
From, To : Integer)
- return Boolean;
+ return Boolean
+ with Ghost;
with function Scan_Raw_Unsigned_Ghost
(Str : String;
From, To : Integer)
- return Uns;
+ return Uns
+ with Ghost;
with function Raw_Unsigned_Last_Ghost
(Str : String;
From, To : Integer)
- return Positive;
+ return Positive
+ with Ghost;
with function Only_Decimal_Ghost
(Str : String;
From, To : Integer)
- return Boolean;
+ return Boolean
+ with Ghost;
with function Scan_Based_Number_Ghost
(Str : String;
From, To : Integer;
Base : Uns := 10;
Acc : Uns := 0)
- return Uns_Option;
+ return Uns_Option
+ with Ghost;
package System.Value_I is
pragma Preelaborate;
diff --git a/gcc/ada/libgnat/s-valuti.ads b/gcc/ada/libgnat/s-valuti.ads
index 45a0b66..2b89b12 100644
--- a/gcc/ada/libgnat/s-valuti.ads
+++ b/gcc/ada/libgnat/s-valuti.ads
@@ -384,27 +384,36 @@ is
Unsigned_Width_Ghost : Natural;
- with function Wrap_Option (Value : Uns) return Uns_Option;
+ with function Wrap_Option (Value : Uns) return Uns_Option
+ with Ghost;
with function Only_Decimal_Ghost
(Str : String;
From, To : Integer)
- return Boolean;
- with function Hexa_To_Unsigned_Ghost (X : Character) return Uns;
+ return Boolean
+ with Ghost;
+ with function Hexa_To_Unsigned_Ghost (X : Character) return Uns
+ with Ghost;
with function Scan_Based_Number_Ghost
(Str : String;
From, To : Integer;
Base : Uns := 10;
Acc : Uns := 0)
- return Uns_Option;
- with function Is_Integer_Ghost (Str : String) return Boolean;
+ return Uns_Option
+ with Ghost;
+ with function Is_Integer_Ghost (Str : String) return Boolean
+ with Ghost;
with procedure Prove_Iter_Scan_Based_Number_Ghost
(Str1, Str2 : String;
From, To : Integer;
Base : Uns := 10;
- Acc : Uns := 0);
- with procedure Prove_Scan_Only_Decimal_Ghost (Str : String; Val : Int);
- with function Abs_Uns_Of_Int (Val : Int) return Uns;
- with function Value_Integer (Str : String) return Int;
+ Acc : Uns := 0)
+ with Ghost;
+ with procedure Prove_Scan_Only_Decimal_Ghost (Str : String; Val : Int)
+ with Ghost;
+ with function Abs_Uns_Of_Int (Val : Int) return Uns
+ with Ghost;
+ with function Value_Integer (Str : String) return Int
+ with Ghost;
package Int_Params is
end Int_Params;
diff --git a/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads
deleted file mode 100644
index 42d14c4..0000000
--- a/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads
+++ /dev/null
@@ -1,165 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 6.x ARM RTP) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- In particular, you can freely distribute your programs built with the --
--- GNAT Pro compiler, including any required library run-time units, using --
--- any licensing terms of your choosing. See the AdaCore Software License --
--- for full details. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is the VxWorks version of this package for RTPs
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := Low_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-smp-arm-link.spec");
- pragma Linker_Options ("--specs=vxworks-arm-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-arm-rtp.ads b/gcc/ada/libgnat/system-vxworks-arm-rtp.ads
deleted file mode 100644
index aa8515a..0000000
--- a/gcc/ada/libgnat/system-vxworks-arm-rtp.ads
+++ /dev/null
@@ -1,164 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 6.x ARM RTP) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- In particular, you can freely distribute your programs built with the --
--- GNAT Pro compiler, including any required library run-time units, using --
--- any licensing terms of your choosing. See the AdaCore Software License --
--- for full details. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is the VxWorks version of this package for RTPs
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := Low_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-arm-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-arm.ads b/gcc/ada/libgnat/system-vxworks-arm.ads
deleted file mode 100644
index ae09b78..0000000
--- a/gcc/ada/libgnat/system-vxworks-arm.ads
+++ /dev/null
@@ -1,159 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks Version ARM) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := Low_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := False;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := True;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".out";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-e500-kernel.ads b/gcc/ada/libgnat/system-vxworks-e500-kernel.ads
deleted file mode 100644
index 4b091ae..0000000
--- a/gcc/ada/libgnat/system-vxworks-e500-kernel.ads
+++ /dev/null
@@ -1,160 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 6 Kernel Version E500) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := False;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- -- MPC8548ECE Chip Errata Rev 8: signed zero not reliable
- Signed_Zeros : constant Boolean := False;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := True;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".out";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads
deleted file mode 100644
index a5d4d87..0000000
--- a/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads
+++ /dev/null
@@ -1,166 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 6.x SMP E500 RTP) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is the VxWorks SMP version of this package for RTPs
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-smp-e500-link.spec");
- pragma Linker_Options ("--specs=vxworks-e500-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- -- MPC8548ECE Chip Errata Rev 8: signed zero not reliable
- Signed_Zeros : constant Boolean := False;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-e500-rtp.ads b/gcc/ada/libgnat/system-vxworks-e500-rtp.ads
deleted file mode 100644
index 4f96385..0000000
--- a/gcc/ada/libgnat/system-vxworks-e500-rtp.ads
+++ /dev/null
@@ -1,164 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 6.x E500 RTP) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is the VxWorks version of this package for RTPs
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-e500-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads b/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads
index b8a0ba1..640150a 100644
--- a/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads
+++ b/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads
@@ -69,8 +69,8 @@ package System is
Null_Address : constant Address;
Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
+ Word_Size : constant := Standard'Word_Size;
+ Memory_Size : constant := 2 ** Word_Size;
-- Address comparison
diff --git a/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads
index ecfd7e6..0855721 100644
--- a/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads
+++ b/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads
@@ -71,8 +71,8 @@ package System is
Null_Address : constant Address;
Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
+ Word_Size : constant := Standard'Word_Size;
+ Memory_Size : constant := 2 ** Word_Size;
-- Address comparison
diff --git a/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads b/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads
index 72fb963..f72177f 100644
--- a/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads
+++ b/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads
@@ -71,8 +71,8 @@ package System is
Null_Address : constant Address;
Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
+ Word_Size : constant := Standard'Word_Size;
+ Memory_Size : constant := 2 ** Word_Size;
-- Address comparison
diff --git a/gcc/ada/libgnat/system-vxworks-x86-kernel.ads b/gcc/ada/libgnat/system-vxworks-x86-kernel.ads
deleted file mode 100644
index 4c912b8..0000000
--- a/gcc/ada/libgnat/system-vxworks-x86-kernel.ads
+++ /dev/null
@@ -1,163 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 6 Kernel Version x86) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := Low_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-x86-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := False;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Atomic_Primitives : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := True;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".out";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads
deleted file mode 100644
index f8115a5..0000000
--- a/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads
+++ /dev/null
@@ -1,164 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks Version x86 for SMP RTPs) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := Low_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-smp-x86-link.spec");
- pragma Linker_Options ("--specs=vxworks-x86-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Atomic_Primitives : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks-x86-rtp.ads b/gcc/ada/libgnat/system-vxworks-x86-rtp.ads
deleted file mode 100644
index 8894abb..0000000
--- a/gcc/ada/libgnat/system-vxworks-x86-rtp.ads
+++ /dev/null
@@ -1,163 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks Version x86 for RTPs) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := 32;
- Memory_Size : constant := 2 ** 32;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := Low_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-x86-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Atomic_Primitives : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads b/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads
deleted file mode 100644
index fb271c3..0000000
--- a/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads
+++ /dev/null
@@ -1,160 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 7 Kernel Version E500) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := Standard'Word_Size;
- Memory_Size : constant := 2 ** Word_Size;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := False;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- -- MPC8548ECE Chip Errata Rev 8: signed zero not reliable
- Signed_Zeros : constant Boolean := False;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := True;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".out";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
deleted file mode 100644
index b132f91..0000000
--- a/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads
+++ /dev/null
@@ -1,165 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 7.x E500 RTP) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is the VxWorks version of this package for RTPs
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := Standard'Word_Size;
- Memory_Size : constant := 2 ** Word_Size;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks7-rtp-base-link.spec");
- -- Define the symbol wrs_rtp_base
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- -- MPC8548ECE Chip Errata Rev 8: signed zero not reliable
- Signed_Zeros : constant Boolean := False;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads b/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads
deleted file mode 100644
index 9ca14b5..0000000
--- a/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads
+++ /dev/null
@@ -1,164 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME COMPONENTS --
--- --
--- S Y S T E M --
--- --
--- S p e c --
--- (VxWorks 7.x E500 RTP) --
--- --
--- Copyright (C) 1992-2022, Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is the VxWorks version of this package for RTPs
-
-package System is
- pragma Pure;
- -- Note that we take advantage of the implementation permission to make
- -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
- -- 2005, this is Pure in any case (AI-362).
-
- pragma No_Elaboration_Code_All;
- -- Allow the use of that restriction in units that WITH this unit
-
- type Name is (SYSTEM_NAME_GNAT);
- System_Name : constant Name := SYSTEM_NAME_GNAT;
-
- -- System-Dependent Named Numbers
-
- Min_Int : constant := -2 ** (Standard'Max_Integer_Size - 1);
- Max_Int : constant := 2 ** (Standard'Max_Integer_Size - 1) - 1;
-
- Max_Binary_Modulus : constant := 2 ** Standard'Max_Integer_Size;
- Max_Nonbinary_Modulus : constant := 2 ** Integer'Size - 1;
-
- Max_Base_Digits : constant := Long_Long_Float'Digits;
- Max_Digits : constant := Long_Long_Float'Digits;
-
- Max_Mantissa : constant := Standard'Max_Integer_Size - 1;
- Fine_Delta : constant := 2.0 ** (-Max_Mantissa);
-
- Tick : constant := 1.0 / 60.0;
-
- -- Storage-related Declarations
-
- type Address is private;
- pragma Preelaborable_Initialization (Address);
- Null_Address : constant Address;
-
- Storage_Unit : constant := 8;
- Word_Size : constant := Standard'Word_Size;
- Memory_Size : constant := 2 ** Word_Size;
-
- -- Address comparison
-
- function "<" (Left, Right : Address) return Boolean;
- function "<=" (Left, Right : Address) return Boolean;
- function ">" (Left, Right : Address) return Boolean;
- function ">=" (Left, Right : Address) return Boolean;
- function "=" (Left, Right : Address) return Boolean;
-
- pragma Import (Intrinsic, "<");
- pragma Import (Intrinsic, "<=");
- pragma Import (Intrinsic, ">");
- pragma Import (Intrinsic, ">=");
- pragma Import (Intrinsic, "=");
-
- -- Other System-Dependent Declarations
-
- type Bit_Order is (High_Order_First, Low_Order_First);
- Default_Bit_Order : constant Bit_Order := High_Order_First;
- pragma Warnings (Off, Default_Bit_Order); -- kill constant condition warning
-
- -- Priority-related Declarations (RM D.1)
-
- -- Ada priorities are mapped to VxWorks priorities using the following
- -- transformation: 255 - Ada Priority
-
- -- Ada priorities are used as follows:
-
- -- 256 is reserved for the VxWorks kernel
- -- 248 - 255 correspond to hardware interrupt levels 0 .. 7
- -- 247 is a catchall default "interrupt" priority for signals,
- -- allowing higher priority than normal tasks, but lower than
- -- hardware priority levels. Protected Object ceilings can
- -- override these values.
- -- 246 is used by the Interrupt_Manager task
-
- Max_Priority : constant Positive := 245;
- Max_Interrupt_Priority : constant Positive := 255;
-
- subtype Any_Priority is Integer range 0 .. 255;
- subtype Priority is Any_Priority range 0 .. 245;
- subtype Interrupt_Priority is Any_Priority range 246 .. 255;
-
- Default_Priority : constant Priority := 122;
-
-private
-
- pragma Linker_Options ("--specs=vxworks-e500-link.spec");
- -- Setup proper set of -L's for this configuration
-
- type Address is mod Memory_Size;
- Null_Address : constant Address := 0;
-
- --------------------------------------
- -- System Implementation Parameters --
- --------------------------------------
-
- -- These parameters provide information about the target that is used
- -- by the compiler. They are in the private part of System, where they
- -- can be accessed using the special circuitry in the Targparm unit
- -- whose source should be consulted for more detailed descriptions
- -- of the individual switch values.
-
- Backend_Divide_Checks : constant Boolean := False;
- Backend_Overflow_Checks : constant Boolean := True;
- Command_Line_Args : constant Boolean := True;
- Configurable_Run_Time : constant Boolean := False;
- Denorm : constant Boolean := True;
- Duration_32_Bits : constant Boolean := False;
- Exit_Status_Supported : constant Boolean := True;
- Machine_Overflows : constant Boolean := False;
- Machine_Rounds : constant Boolean := True;
- Preallocated_Stacks : constant Boolean := False;
- Signed_Zeros : constant Boolean := True;
- Stack_Check_Default : constant Boolean := False;
- Stack_Check_Probes : constant Boolean := True;
- Stack_Check_Limits : constant Boolean := False;
- Support_Aggregates : constant Boolean := True;
- Support_Composite_Assign : constant Boolean := True;
- Support_Composite_Compare : constant Boolean := True;
- Support_Long_Shifts : constant Boolean := True;
- Always_Compatible_Rep : constant Boolean := False;
- Suppress_Standard_Library : constant Boolean := False;
- Use_Ada_Main_Program_Name : constant Boolean := False;
- ZCX_By_Default : constant Boolean := True;
-
- Executable_Extension : constant String := ".vxe";
-
-end System;
diff --git a/gcc/ada/nlists.adb b/gcc/ada/nlists.adb
index 18702f3..a3bd95b 100644
--- a/gcc/ada/nlists.adb
+++ b/gcc/ada/nlists.adb
@@ -1013,12 +1013,12 @@ package body Nlists is
-- Parent --
------------
- function Parent (List : List_Id) return Node_Or_Entity_Id is
+ function List_Parent (List : List_Id) return Node_Or_Entity_Id is
begin
pragma Assert (Present (List));
pragma Assert (List <= Lists.Last);
return Lists.Table (List).Parent;
- end Parent;
+ end List_Parent;
----------
-- Pick --
@@ -1442,12 +1442,12 @@ package body Nlists is
-- Set_Parent --
----------------
- procedure Set_Parent (List : List_Id; Node : Node_Or_Entity_Id) is
+ procedure Set_List_Parent (List : List_Id; Node : Node_Or_Entity_Id) is
begin
pragma Assert (not Locked);
pragma Assert (List <= Lists.Last);
Lists.Table (List).Parent := Node;
- end Set_Parent;
+ end Set_List_Parent;
--------------
-- Set_Prev --
diff --git a/gcc/ada/nlists.ads b/gcc/ada/nlists.ads
index 2f0585a..3c3d600 100644
--- a/gcc/ada/nlists.ads
+++ b/gcc/ada/nlists.ads
@@ -348,13 +348,21 @@ package Nlists is
-- Called to unlock list contents when assertions are enabled; if
-- assertions are not enabled calling this subprogram has no effect.
- function Parent (List : List_Id) return Node_Or_Entity_Id;
+ function List_Parent (List : List_Id) return Node_Or_Entity_Id;
+ pragma Inline (List_Parent);
+ function Parent (List : List_Id) return Node_Or_Entity_Id
+ renames List_Parent;
pragma Inline (Parent);
-- Node lists may have a parent in the same way as a node. The function
-- accesses the Parent value, which is either Empty when a list header
-- is first created, or the value that has been set by Set_Parent.
+ -- Parent has the same name as the one in Atree; List_Parent can be used
+ -- more easily in the debugger.
- procedure Set_Parent (List : List_Id; Node : Node_Or_Entity_Id);
+ procedure Set_List_Parent (List : List_Id; Node : Node_Or_Entity_Id);
+ pragma Inline (Set_List_Parent);
+ procedure Set_Parent (List : List_Id; Node : Node_Or_Entity_Id)
+ renames Set_List_Parent;
pragma Inline (Set_Parent);
-- Sets the parent field of the given list to reference the given node
diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb
index eeedfcb..86fbf2d 100644
--- a/gcc/ada/osint.adb
+++ b/gcc/ada/osint.adb
@@ -1904,10 +1904,8 @@ package body Osint is
if Dir_Name'Length = 0 then
Found := N;
else
- Name_Len := Full_Name'Length - 1;
- Name_Buffer (1 .. Name_Len) :=
- Full_Name (1 .. Full_Name'Last - 1);
- Found := Name_Find;
+ Found :=
+ Name_Find (Full_Name (Full_Name'First .. Full_Name'Last - 1));
end if;
end if;
end;
diff --git a/gcc/ada/par_sco.adb b/gcc/ada/par_sco.adb
index aba863d..e8875cf 100644
--- a/gcc/ada/par_sco.adb
+++ b/gcc/ada/par_sco.adb
@@ -480,13 +480,11 @@ package body Par_SCO is
N : Node_Id;
begin
- if L /= No_List then
- N := First (L);
- while Present (N) loop
- Process_Decisions (N, T, Pragma_Sloc);
- Next (N);
- end loop;
- end if;
+ N := First (L);
+ while Present (N) loop
+ Process_Decisions (N, T, Pragma_Sloc);
+ Next (N);
+ end loop;
end Process_Decisions;
-- Version taking a node
diff --git a/gcc/ada/raise-gcc.c b/gcc/ada/raise-gcc.c
index f4c42c0..b03964c 100644
--- a/gcc/ada/raise-gcc.c
+++ b/gcc/ada/raise-gcc.c
@@ -1377,6 +1377,10 @@ __gnat_cleanupunwind_handler (int version ATTRIBUTE_UNUSED,
_Unwind_Reason_Code
__gnat_Unwind_RaiseException (_Unwind_Exception *e)
{
+#ifdef NO_EXCEPTION_PROPAGATION
+ abort();
+#endif
+
#ifdef __USING_SJLJ_EXCEPTIONS__
return _Unwind_SjLj_RaiseException (e);
#else
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
index b85f766..2cd8807 100644
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -849,9 +849,81 @@ package body Sem_Aggr is
-- Set to True if N represents a simple aggregate with only
-- (others => <>), not nested as part of another aggregate.
+ function Is_Full_Access_Aggregate (N : Node_Id) return Boolean;
+ -- If a full access object is initialized with an aggregate or is
+ -- assigned an aggregate, we have to prevent a piecemeal access or
+ -- assignment to the object, even if the aggregate is to be expanded.
+ -- We create a temporary for the aggregate, and assign the temporary
+ -- instead, so that the back end can generate an atomic move for it.
+ -- This is only done in the context of an object declaration or an
+ -- assignment. Function is a noop and returns false in other contexts.
+
function Within_Aggregate (N : Node_Id) return Boolean;
-- Return True if N is part of an N_Aggregate
+ ------------------------------
+ -- Is_Full_Access_Aggregate --
+ ------------------------------
+
+ function Is_Full_Access_Aggregate (N : Node_Id) return Boolean is
+ Loc : constant Source_Ptr := Sloc (N);
+
+ New_N : Node_Id;
+ Par : Node_Id;
+ Temp : Entity_Id;
+ Typ : Entity_Id;
+
+ begin
+ Par := Parent (N);
+
+ -- Aggregate may be qualified, so find outer context
+
+ if Nkind (Par) = N_Qualified_Expression then
+ Par := Parent (Par);
+ end if;
+
+ if not Comes_From_Source (Par) then
+ return False;
+ end if;
+
+ case Nkind (Par) is
+ when N_Assignment_Statement =>
+ Typ := Etype (Name (Par));
+
+ if not Is_Full_Access (Typ)
+ and then not Is_Full_Access_Object (Name (Par))
+ then
+ return False;
+ end if;
+
+ when N_Object_Declaration =>
+ Typ := Etype (Defining_Identifier (Par));
+
+ if not Is_Full_Access (Typ)
+ and then not Is_Full_Access (Defining_Identifier (Par))
+ then
+ return False;
+ end if;
+
+ when others =>
+ return False;
+ end case;
+
+ Temp := Make_Temporary (Loc, 'T', N);
+ New_N :=
+ Make_Object_Declaration (Loc,
+ Defining_Identifier => Temp,
+ Constant_Present => True,
+ Object_Definition => New_Occurrence_Of (Typ, Loc),
+ Expression => Relocate_Node (N));
+ Insert_Action (Par, New_N);
+
+ Rewrite (N, New_Occurrence_Of (Temp, Loc));
+ Analyze_And_Resolve (N, Typ);
+
+ return True;
+ end Is_Full_Access_Aggregate;
+
----------------------
-- Within_Aggregate --
----------------------
@@ -880,6 +952,16 @@ package body Sem_Aggr is
and then not Null_Record_Present (N)
then
return;
+
+ -- If the aggregate is assigned to a full access variable, we have
+ -- to prevent a piecemeal assignment even if the aggregate is to be
+ -- expanded. We create a temporary for the aggregate, and assign the
+ -- temporary instead, so that the back end can generate an atomic move
+ -- for it. This is properly an expansion activity but it must be done
+ -- before resolution because aggregate resolution cannot be done twice.
+
+ elsif Expander_Active and then Is_Full_Access_Aggregate (N) then
+ return;
end if;
-- If the aggregate has box-initialized components, its type must be
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index e6e06f6..cab2461 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -1090,7 +1090,6 @@ package body Sem_Attr is
else
Error_Attr ("% attribute cannot be applied to type", P);
- return;
end if;
end if;
end if;
@@ -1429,7 +1428,6 @@ package body Sem_Attr is
else
Placement_Error;
- return;
end if;
-- 'Old attribute reference ok in a _Postconditions procedure
@@ -1445,7 +1443,6 @@ package body Sem_Attr is
else
Placement_Error;
- return;
end if;
-- Find the related subprogram subject to the aspect or pragma
@@ -1715,14 +1712,12 @@ package body Sem_Attr is
else
Placement_Error;
- return;
end if;
-- Otherwise the placement of the attribute is illegal
else
Placement_Error;
- return;
end if;
-- Find the related subprogram subject to the aspect or pragma
@@ -3666,7 +3661,6 @@ package body Sem_Attr is
else
Error_Attr ("invalid entry name", N);
- return;
end if;
for J in reverse 0 .. Scope_Stack.Last loop
@@ -3746,11 +3740,11 @@ package body Sem_Attr is
Ekind (Entity (P)) /= E_Procedure)
then
Error_Attr ("invalid prefix for % attribute", P);
- Set_Address_Taken (Entity (P));
-- Issue an error if the prefix denotes an eliminated subprogram
else
+ Set_Address_Taken (Entity (P));
Check_For_Eliminated_Subprogram (P, Entity (P));
end if;
@@ -3945,7 +3939,6 @@ package body Sem_Attr is
else
Error_Attr ("invalid entry family name", P);
end if;
- return;
else
Ent := Entity (Prefix (P));
@@ -3960,7 +3953,6 @@ package body Sem_Attr is
else
Error_Attr ("invalid entry name", N);
- return;
end if;
for J in reverse 0 .. Scope_Stack.Last loop
@@ -4451,7 +4443,9 @@ package body Sem_Attr is
-- Has_Same_Storage --
----------------------
- when Attribute_Has_Same_Storage =>
+ when Attribute_Has_Same_Storage
+ | Attribute_Overlaps_Storage
+ =>
Check_E1;
-- The arguments must be objects of any type
@@ -4477,7 +4471,6 @@ package body Sem_Attr is
if not Legal or else No (Spec_Id) then
Error_Attr ("attribute % must apply to entry family", P);
- return;
end if;
-- Legality checks
@@ -4754,7 +4747,6 @@ package body Sem_Attr is
Error_Attr
("prefix of attribute % cannot reference local entities",
Nod);
- return Abandon;
else
return OK;
end if;
@@ -4996,7 +4988,6 @@ package body Sem_Attr is
else
Error_Attr
("attribute % cannot appear in body or accept statement", N);
- exit;
end if;
end loop;
@@ -5390,7 +5381,6 @@ package body Sem_Attr is
Error_Attr
("prefix of attribute % cannot reference local entities",
Nod);
- return Abandon;
-- Otherwise keep inspecting the prefix
@@ -5563,21 +5553,6 @@ package body Sem_Attr is
end if;
end Old;
- ----------------------
- -- Overlaps_Storage --
- ----------------------
-
- when Attribute_Overlaps_Storage =>
- Check_E1;
-
- -- Both arguments must be objects of any type
-
- Analyze_And_Resolve (P);
- Analyze_And_Resolve (E1);
- Check_Object_Reference (P);
- Check_Object_Reference (E1);
- Set_Etype (N, Standard_Boolean);
-
------------
-- Output --
------------
@@ -5860,6 +5835,12 @@ package body Sem_Attr is
elsif Present (Over_Id) and then Pref_Id = Over_Id then
return True;
+
+ -- When a qualified name is used for the prefix, homonyms may come
+ -- before the current function in the homonym chain.
+
+ elsif Has_Homonym (Pref_Id) then
+ return Denote_Same_Function (Homonym (Pref_Id), Spec_Id);
end if;
-- Otherwise the prefix does not denote the related subprogram
@@ -5911,7 +5892,6 @@ package body Sem_Attr is
elsif not Legal then
Error_Attr ("prefix of % attribute must be a function", P);
- return;
end if;
-- Attribute 'Result is part of a _Postconditions procedure. There is
@@ -11165,43 +11145,10 @@ package body Sem_Attr is
=>
-- Note possible modification if we have a variable
- if Is_Variable (P) then
- declare
- PN : constant Node_Id := Parent (N);
- Nm : Node_Id;
-
- Note : Boolean := True;
- -- Skip this for the case of Unrestricted_Access occurring
- -- in the context of a Valid check, since this otherwise
- -- leads to a missed warning (the Valid check does not
- -- really modify!) If this case, Note will be reset to
- -- False.
-
- -- Skip it as well if the type is an Access_To_Constant,
- -- given that no use of the value can modify the prefix.
-
- begin
- if Attr_Id = Attribute_Unrestricted_Access
- and then Nkind (PN) = N_Function_Call
- then
- Nm := Name (PN);
-
- if Nkind (Nm) = N_Expanded_Name
- and then Chars (Nm) = Name_Valid
- and then Nkind (Prefix (Nm)) = N_Identifier
- and then Chars (Prefix (Nm)) = Name_Attr_Long_Float
- then
- Note := False;
- end if;
-
- elsif Is_Access_Constant (Typ) then
- Note := False;
- end if;
-
- if Note then
- Note_Possible_Modification (P, Sure => False);
- end if;
- end;
+ if Is_Variable (P)
+ and then not Is_Access_Constant (Typ)
+ then
+ Note_Possible_Modification (P, Sure => False);
end if;
-- Case where prefix is an entity name
@@ -11632,9 +11579,7 @@ package body Sem_Attr is
end if;
end if;
- if (Attr_Id = Attribute_Access
- or else
- Attr_Id = Attribute_Unchecked_Access)
+ if Attr_Id in Attribute_Access | Attribute_Unchecked_Access
and then (Ekind (Btyp) = E_General_Access_Type
or else Ekind (Btyp) = E_Anonymous_Access_Type)
then
@@ -12315,7 +12260,9 @@ package body Sem_Attr is
-- if it is an element of an entry family, the index itself may
-- have to be resolved because it can be a general expression.
- when Attribute_Count =>
+ when Attribute_Count
+ | Attribute_Index
+ =>
if Nkind (P) = N_Indexed_Component
and then Is_Entity_Name (Prefix (P))
then
@@ -12353,19 +12300,7 @@ package body Sem_Attr is
-- Index --
-----------
- when Attribute_Index =>
- if Nkind (P) = N_Indexed_Component
- and then Is_Entity_Name (Prefix (P))
- then
- declare
- Indx : constant Node_Id := First (Expressions (P));
- Fam : constant Entity_Id := Entity (Prefix (P));
-
- begin
- Resolve (Indx, Entry_Index_Type (Fam));
- Apply_Scalar_Range_Check (Indx, Entry_Index_Type (Fam));
- end;
- end if;
+ -- Processing is shared with Count
----------------
-- Loop_Entry --
diff --git a/gcc/ada/sem_aux.adb b/gcc/ada/sem_aux.adb
index 43c33b4..ca74d74 100644
--- a/gcc/ada/sem_aux.adb
+++ b/gcc/ada/sem_aux.adb
@@ -964,7 +964,7 @@ package body Sem_Aux is
-- Is_Derived_Type --
---------------------
- function Is_Derived_Type (Ent : E) return B is
+ function Is_Derived_Type (Ent : Entity_Id) return B is
Par : Node_Id;
begin
@@ -1130,10 +1130,8 @@ package body Sem_Aux is
else
declare
- C : E;
-
+ C : Entity_Id := First_Component (Btype);
begin
- C := First_Component (Btype);
while Present (C) loop
if Is_Limited_Type (Etype (C)) then
return True;
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 9b9a9f1..8c1c00c 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -2597,11 +2597,19 @@ package body Sem_Ch10 is
-- Note: this is not quite right if the user defines one of these units
-- himself, but that's a marginal case, and fixing it is hard ???
- if Restriction_Check_Required (No_Obsolescent_Features) then
- if In_Predefined_Renaming (U) then
+ if Ada_Version >= Ada_95
+ and then In_Predefined_Renaming (U)
+ then
+ if Restriction_Check_Required (No_Obsolescent_Features) then
Check_Restriction (No_Obsolescent_Features, N);
Restriction_Violation := True;
end if;
+
+ if Warn_On_Obsolescent_Feature then
+ Error_Msg_N
+ ("renamed predefined unit is an obsolescent feature "
+ & "(RM J.1)?j?", N);
+ end if;
end if;
-- Check No_Implementation_Units violation
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index c5f2eed..af8bbbe 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -2204,6 +2204,19 @@ package body Sem_Ch12 is
raise Program_Error;
end case;
+ -- Check here the correct use of Ghost entities in generic
+ -- instantiations, as now the generic has been resolved and
+ -- we know which formal generic parameters are ghost (SPARK
+ -- RM 6.9(10)).
+
+ if Nkind (Formal) not in N_Use_Package_Clause
+ | N_Use_Type_Clause
+ then
+ Check_Ghost_Context_In_Generic_Association
+ (Actual => Match,
+ Formal => Defining_Entity (Analyzed_Formal));
+ end if;
+
Formal := Saved_Formal;
Next_Non_Pragma (Analyzed_Formal);
end loop;
@@ -2715,6 +2728,17 @@ package body Sem_Ch12 is
if Present (E) then
Preanalyze_Spec_Expression (E, T);
+ -- The default for a ghost generic formal IN parameter of
+ -- access-to-variable type should be a ghost object (SPARK
+ -- RM 6.9(13)).
+
+ if Is_Access_Variable (T) then
+ Check_Ghost_Formal_Variable
+ (Actual => E,
+ Formal => Id,
+ Is_Default => True);
+ end if;
+
if Is_Limited_Type (T) and then not OK_For_Limited_Init (T, E) then
Error_Msg_N
("initialization not allowed for limited types", E);
@@ -3398,6 +3422,25 @@ package body Sem_Ch12 is
goto Leave;
end if;
+ -- The default for a ghost generic formal procedure should be a ghost
+ -- procedure (SPARK RM 6.9(13)).
+
+ if Ekind (Nam) = E_Procedure then
+ declare
+ Def_E : Entity_Id := Empty;
+ begin
+ if Nkind (Def) in N_Has_Entity then
+ Def_E := Entity (Def);
+ end if;
+
+ Check_Ghost_Formal_Procedure_Or_Package
+ (N => Def,
+ Actual => Def_E,
+ Formal => Nam,
+ Is_Default => True);
+ end;
+ end if;
+
-- Default name may be overloaded, in which case the interpretation
-- with the correct profile must be selected, as for a renaming.
-- If the definition is an indexed component, it must denote a
@@ -10572,7 +10615,6 @@ package body Sem_Ch12 is
Error_Msg_N
("expect package instance to instantiate formal", Actual);
Abandon_Instantiation (Actual);
- raise Program_Error;
else
Actual_Pack := Entity (Actual);
@@ -10595,6 +10637,14 @@ package body Sem_Ch12 is
Gen_Parent := Generic_Parent (Specification (Analyzed_Formal));
Formal_Pack := Defining_Unit_Name (Specification (Analyzed_Formal));
+ -- The actual for a ghost generic formal package should be a ghost
+ -- package (SPARK RM 6.9(14)).
+
+ Check_Ghost_Formal_Procedure_Or_Package
+ (N => Actual,
+ Actual => Actual_Pack,
+ Formal => Formal_Pack);
+
if Nkind (Parent (Actual_Pack)) = N_Defining_Program_Unit_Name then
Parent_Spec := Package_Specification (Actual_Pack);
else
@@ -10882,6 +10932,18 @@ package body Sem_Ch12 is
Act_E := Empty;
end if;
+ -- The actual for a ghost generic formal procedure should be a ghost
+ -- procedure (SPARK RM 6.9(14)).
+
+ if Present (Act_E)
+ and then Ekind (Act_E) = E_Procedure
+ then
+ Check_Ghost_Formal_Procedure_Or_Package
+ (N => Act,
+ Actual => Act_E,
+ Formal => Analyzed_S);
+ end if;
+
if (Present (Act_E) and then Is_Overloadable (Act_E))
or else Nkind (Act) in N_Attribute_Reference
| N_Indexed_Component
@@ -11401,40 +11463,22 @@ package body Sem_Ch12 is
-- volatility refinement aspects.
declare
- Actual_Obj : Entity_Id;
- N : Node_Id := Actual;
+ Actual_Obj : constant Entity_Id :=
+ Get_Enclosing_Deep_Object (Actual);
begin
- -- Similar to Sem_Util.Get_Enclosing_Object, but treat
- -- pointer dereference like component selection.
- loop
- if Is_Entity_Name (N) then
- Actual_Obj := Entity (N);
- exit;
- end if;
-
- case Nkind (N) is
- when N_Indexed_Component
- | N_Selected_Component
- | N_Slice
- | N_Explicit_Dereference
- =>
- N := Prefix (N);
-
- when N_Type_Conversion =>
- N := Expression (N);
-
- when others =>
- Actual_Obj := Etype (N);
- exit;
- end case;
- end loop;
-
Check_Volatility_Compatibility
(Actual_Obj, A_Gen_Obj, "actual object",
"its corresponding formal object of mode in out",
Srcpos_Bearer => Actual);
end;
+ -- The actual for a ghost generic formal IN OUT parameter should be a
+ -- ghost object (SPARK RM 6.9(14)).
+
+ Check_Ghost_Formal_Variable
+ (Actual => Actual,
+ Formal => A_Gen_Obj);
+
-- Formal in-parameter
else
@@ -11460,6 +11504,7 @@ package body Sem_Ch12 is
Object_Definition => Def,
Expression => Actual);
+ Copy_Ghost_Aspect (Formal, To => Decl_Node);
Set_Corresponding_Generic_Association (Decl_Node, Act_Assoc);
-- A generic formal object of a tagged type is defined to be
@@ -11471,6 +11516,16 @@ package body Sem_Ch12 is
Append (Decl_Node, List);
+ -- The actual for a ghost generic formal IN parameter of
+ -- access-to-variable type should be a ghost object (SPARK
+ -- RM 6.9(14)).
+
+ if Is_Access_Variable (Etype (A_Gen_Obj)) then
+ Check_Ghost_Formal_Variable
+ (Actual => Actual,
+ Formal => A_Gen_Obj);
+ end if;
+
-- No need to repeat (pre-)analysis of some expression nodes
-- already handled in Preanalyze_Actuals.
@@ -11544,6 +11599,7 @@ package body Sem_Ch12 is
Expression => New_Copy_Tree
(Default_Expression (Formal)));
+ Copy_Ghost_Aspect (Formal, To => Decl_Node);
Set_Corresponding_Generic_Association
(Decl_Node, Expression (Decl_Node));
@@ -14200,6 +14256,8 @@ package body Sem_Ch12 is
Defining_Identifier => Subt,
Subtype_Indication => New_Occurrence_Of (Act_T, Loc));
+ Copy_Ghost_Aspect (Formal, To => Decl_Node);
+
-- Record whether the actual is private at this point, so that
-- Check_Generic_Actuals can restore its proper view before the
-- semantic analysis of the instance.
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 0b8911b..bb654ab 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -12135,24 +12135,22 @@ package body Sem_Ch13 is
begin
-- Gather discriminants into Comp
- if DS /= No_List then
- Citem := First (DS);
- while Present (Citem) loop
- if Nkind (Citem) = N_Discriminant_Specification then
- declare
- Ent : constant Entity_Id :=
- Defining_Identifier (Citem);
- begin
- if Ekind (Ent) = E_Discriminant then
- Ncomps := Ncomps + 1;
- Comps (Ncomps) := Ent;
- end if;
- end;
- end if;
+ Citem := First (DS);
+ while Present (Citem) loop
+ if Nkind (Citem) = N_Discriminant_Specification then
+ declare
+ Ent : constant Entity_Id :=
+ Defining_Identifier (Citem);
+ begin
+ if Ekind (Ent) = E_Discriminant then
+ Ncomps := Ncomps + 1;
+ Comps (Ncomps) := Ent;
+ end if;
+ end;
+ end if;
- Next (Citem);
- end loop;
- end if;
+ Next (Citem);
+ end loop;
-- Gather component entities into Comp
@@ -15943,6 +15941,7 @@ package body Sem_Ch13 is
while Present (It.Typ) loop
if Ekind (It.Nam) = E_Function
and then Scope (It.Nam) = Scope (Typ)
+ and then Present (First_Formal (It.Nam))
and then Etype (First_Formal (It.Nam)) = Typ
then
F1 := First_Formal (It.Nam);
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 2dbba15..790d1d1 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -4043,7 +4043,6 @@ package body Sem_Ch3 is
Prev_Entity : Entity_Id := Empty;
Related_Id : Entity_Id;
- Full_View_Present : Boolean := False;
-- Start of processing for Analyze_Object_Declaration
@@ -4732,28 +4731,32 @@ package body Sem_Ch3 is
Act_T := Find_Type_Of_Object (Object_Definition (N), N);
end if;
- -- Propagate attributes to full view when needed
+ if Act_T /= T then
+ declare
+ Full_View_Present : constant Boolean :=
+ Is_Private_Type (Act_T)
+ and then Present (Full_View (Act_T));
+ -- Propagate attributes to full view when needed
- Set_Is_Constr_Subt_For_U_Nominal (Act_T);
+ begin
+ Set_Is_Constr_Subt_For_U_Nominal (Act_T);
- if Is_Private_Type (Act_T) and then Present (Full_View (Act_T))
- then
- Full_View_Present := True;
- end if;
+ if Full_View_Present then
+ Set_Is_Constr_Subt_For_U_Nominal (Full_View (Act_T));
+ end if;
- if Full_View_Present then
- Set_Is_Constr_Subt_For_U_Nominal (Full_View (Act_T));
- end if;
+ if Aliased_Present (N) then
+ Set_Is_Constr_Subt_For_UN_Aliased (Act_T);
- if Aliased_Present (N) then
- Set_Is_Constr_Subt_For_UN_Aliased (Act_T);
+ if Full_View_Present then
+ Set_Is_Constr_Subt_For_UN_Aliased (Full_View (Act_T));
+ end if;
+ end if;
- if Full_View_Present then
- Set_Is_Constr_Subt_For_UN_Aliased (Full_View (Act_T));
- end if;
+ Freeze_Before (N, Act_T);
+ end;
end if;
- Freeze_Before (N, Act_T);
Freeze_Before (N, T);
end if;
@@ -5045,41 +5048,6 @@ package body Sem_Ch3 is
end;
end if;
- -- Another optimization: if the nominal subtype is unconstrained and
- -- the expression is a function call that returns an unconstrained
- -- type, rewrite the declaration as a renaming of the result of the
- -- call. The exceptions below are cases where the copy is expected,
- -- either by the back end (Aliased case) or by the semantics, as for
- -- initializing controlled types or copying tags for class-wide types.
-
- if Present (E)
- and then Nkind (E) = N_Explicit_Dereference
- and then Nkind (Original_Node (E)) = N_Function_Call
- and then not Is_Library_Level_Entity (Id)
- and then not Is_Constrained (Underlying_Type (T))
- and then not Is_Aliased (Id)
- and then not Is_Class_Wide_Type (T)
- and then not Is_Controlled (T)
- and then not Has_Controlled_Component (Base_Type (T))
- and then Expander_Active
- then
- Rewrite (N,
- Make_Object_Renaming_Declaration (Loc,
- Defining_Identifier => Id,
- Access_Definition => Empty,
- Subtype_Mark => New_Occurrence_Of
- (Base_Type (Etype (Id)), Loc),
- Name => E));
-
- Set_Renamed_Object (Id, E);
-
- -- Force generation of debugging information for the constant and for
- -- the renamed function call.
-
- Set_Debug_Info_Needed (Id);
- Set_Debug_Info_Needed (Entity (Prefix (E)));
- end if;
-
if Present (Prev_Entity)
and then Is_Frozen (Prev_Entity)
and then not Error_Posted (Id)
@@ -13126,7 +13094,6 @@ package body Sem_Ch3 is
procedure Check_Possible_Deferred_Completion
(Prev_Id : Entity_Id;
- Prev_Obj_Def : Node_Id;
Curr_Obj_Def : Node_Id);
-- Determine whether the two object definitions describe the partial
-- and the full view of a constrained deferred constant. Generate
@@ -13146,15 +13113,16 @@ package body Sem_Ch3 is
procedure Check_Possible_Deferred_Completion
(Prev_Id : Entity_Id;
- Prev_Obj_Def : Node_Id;
Curr_Obj_Def : Node_Id)
is
+ Curr_Typ : Entity_Id;
+ Prev_Typ : constant Entity_Id := Etype (Prev_Id);
+ Anon_Acc : constant Boolean := Is_Anonymous_Access_Type (Prev_Typ);
+ Mismatch : Boolean := False;
begin
- if Nkind (Prev_Obj_Def) = N_Subtype_Indication
- and then Present (Constraint (Prev_Obj_Def))
- and then Nkind (Curr_Obj_Def) = N_Subtype_Indication
- and then Present (Constraint (Curr_Obj_Def))
- then
+ if Anon_Acc then
+ null;
+ elsif Nkind (Curr_Obj_Def) = N_Subtype_Indication then
declare
Loc : constant Source_Ptr := Sloc (N);
Def_Id : constant Entity_Id := Make_Temporary (Loc, 'S');
@@ -13167,13 +13135,32 @@ package body Sem_Ch3 is
begin
Insert_Before_And_Analyze (N, Decl);
Set_Etype (Id, Def_Id);
-
- if not Subtypes_Statically_Match (Etype (Prev_Id), Def_Id) then
- Error_Msg_Sloc := Sloc (Prev_Id);
- Error_Msg_N ("subtype does not statically match deferred "
- & "declaration #", N);
- end if;
+ Curr_Typ := Def_Id;
end;
+ else
+ Curr_Typ := Etype (Curr_Obj_Def);
+ end if;
+
+ if Anon_Acc then
+ if Nkind (Curr_Obj_Def) /= N_Access_Definition then
+ Mismatch := True;
+ elsif Has_Null_Exclusion (Prev_Typ)
+ and then not Null_Exclusion_Present (Curr_Obj_Def)
+ then
+ Mismatch := True;
+ end if;
+ -- ??? Another check needed: mismatch if disagreement
+ -- between designated types/profiles .
+ else
+ Mismatch :=
+ Is_Constrained (Prev_Typ)
+ and then not Subtypes_Statically_Match (Prev_Typ, Curr_Typ);
+ end if;
+
+ if Mismatch then
+ Error_Msg_Sloc := Sloc (Prev_Id);
+ Error_Msg_N ("subtype does not statically match deferred "
+ & "declaration #", N);
end if;
end Check_Possible_Deferred_Completion;
@@ -13316,7 +13303,6 @@ package body Sem_Ch3 is
Check_Possible_Deferred_Completion
(Prev_Id => Prev,
- Prev_Obj_Def => Object_Definition (Parent (Prev)),
Curr_Obj_Def => Obj_Def);
Set_Full_View (Prev, Id);
@@ -18276,7 +18262,7 @@ package body Sem_Ch3 is
begin
-- If the parent is a component_definition node we climb to the
- -- component_declaration node
+ -- component_declaration node.
if Nkind (P) = N_Component_Definition then
P := Parent (P);
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index 8fe2077..5497483 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -670,10 +670,19 @@ package body Sem_Ch4 is
then
Def_Id := Make_Temporary (Loc, 'S');
- Insert_Action (E,
- Make_Subtype_Declaration (Loc,
- Defining_Identifier => Def_Id,
- Subtype_Indication => Relocate_Node (E)));
+ declare
+ Subtype_Decl : constant Node_Id :=
+ Make_Subtype_Declaration (Loc,
+ Defining_Identifier => Def_Id,
+ Subtype_Indication => Relocate_Node (E));
+ begin
+ Insert_Action (E, Subtype_Decl);
+
+ -- Handle unusual case where Insert_Action does not
+ -- analyze the declaration. Subtype_Decl must be
+ -- preanalyzed before call to Process_Subtype below.
+ Preanalyze (Subtype_Decl);
+ end;
if Sav_Errs /= Serious_Errors_Detected
and then Nkind (Constraint (E)) =
@@ -5149,11 +5158,26 @@ package body Sem_Ch4 is
elsif Is_Record_Type (Prefix_Type) then
- -- Find component with given name. In an instance, if the node is
- -- known as a prefixed call, do not examine components whose
- -- visibility may be accidental.
+ -- Find a component with the given name. If the node is a prefixed
+ -- call, do not examine components whose visibility may be
+ -- accidental.
- while Present (Comp) and then not Is_Prefixed_Call (N) loop
+ while Present (Comp)
+ and then not Is_Prefixed_Call (N)
+
+ -- When the selector has been resolved to a function then we may be
+ -- looking at a prefixed call which has been preanalyzed already as
+ -- part of a class condition. In such cases it is possible for a
+ -- derived type to declare a component which has the same name as
+ -- a primitive used in a parent's class condition.
+
+ -- Avoid seeing components as possible interpretations of the
+ -- selected component when this is true.
+
+ and then not (Inside_Class_Condition_Preanalysis
+ and then Present (Entity (Sel))
+ and then Ekind (Entity (Sel)) = E_Function)
+ loop
if Chars (Comp) = Chars (Sel)
and then Is_Visible_Component (Comp, N)
then
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index c5c8a7c..891c57a 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -1376,11 +1376,7 @@ package body Sem_Ch5 is
-- Initialize unblocked exit count for statements of begin block
-- plus one for each exception handler that is present.
- Unblocked_Exit_Count := 1;
-
- if Present (EH) then
- Unblocked_Exit_Count := Unblocked_Exit_Count + List_Length (EH);
- end if;
+ Unblocked_Exit_Count := 1 + List_Length (EH);
-- If a label is present analyze it and mark it as referenced
@@ -4402,7 +4398,7 @@ package body Sem_Ch5 is
P : Node_Id;
begin
- if Is_List_Member (N) and then Comes_From_Source (N) then
+ if Comes_From_Source (N) then
Nxt := Original_Node (Next (N));
-- Skip past pragmas
@@ -4419,8 +4415,7 @@ package body Sem_Ch5 is
-- Otherwise see if we have a real statement following us
- elsif Present (Nxt)
- and then Comes_From_Source (Nxt)
+ elsif Comes_From_Source (Nxt)
and then Is_Statement (Nxt)
then
-- Special very annoying exception. If we have a return that
@@ -4473,8 +4468,7 @@ package body Sem_Ch5 is
end loop;
end if;
- Error_Msg
- ("??unreachable code!", Sloc (Error_Node), Error_Node);
+ Error_Msg_N ("??unreachable code!", Error_Node);
end if;
-- If the unconditional transfer of control instruction is the
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 848c2349..8334647 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -34,7 +34,6 @@ with Einfo.Utils; use Einfo.Utils;
with Elists; use Elists;
with Errout; use Errout;
with Expander; use Expander;
-with Exp_Ch3; use Exp_Ch3;
with Exp_Ch6; use Exp_Ch6;
with Exp_Ch9; use Exp_Ch9;
with Exp_Dbug; use Exp_Dbug;
@@ -1520,33 +1519,7 @@ package body Sem_Ch6 is
-- object declaration.
Set_Is_Return_Object (Defining_Identifier (Obj_Decl));
-
- -- Returning a build-in-place unconstrained array type we defer
- -- the full analysis of the returned object to avoid generating
- -- the corresponding constrained subtype; otherwise the bounds
- -- would be created in the stack and a dangling reference would
- -- be returned pointing to the bounds. We perform its preanalysis
- -- to report errors on the initializing aggregate now (if any);
- -- we also ensure its activation chain and Master variable are
- -- defined (if tasks are being declared) since they are generated
- -- as part of the analysis and expansion of the object declaration
- -- at this stage.
-
- if Is_Array_Type (R_Type)
- and then not Is_Constrained (R_Type)
- and then Is_Build_In_Place_Function (Scope_Id)
- and then Needs_BIP_Alloc_Form (Scope_Id)
- and then Nkind (Expr) in N_Aggregate | N_Extension_Aggregate
- then
- Preanalyze (Obj_Decl);
-
- if Expander_Active then
- Ensure_Activation_Chain_And_Master (Obj_Decl);
- end if;
-
- else
- Analyze (Obj_Decl);
- end if;
+ Analyze (Obj_Decl);
Check_Return_Subtype_Indication (Obj_Decl);
@@ -2987,9 +2960,7 @@ package body Sem_Ch6 is
procedure Check_Missing_Return;
-- Checks for a function with a no return statements, and also performs
- -- the warning checks implemented by Check_Returns. In formal mode, also
- -- verify that a function ends with a RETURN and that a procedure does
- -- not contain any RETURN.
+ -- the warning checks implemented by Check_Returns.
function Disambiguate_Spec return Entity_Id;
-- When a primitive is declared between the private view and the full
@@ -3570,6 +3541,10 @@ package body Sem_Ch6 is
Id := Body_Id;
end if;
+ -- A function body shall contain at least one return statement
+ -- that applies to the function body, unless the function contains
+ -- code_statements; RM 6.5(5).
+
if Return_Present (Id) then
Check_Returns (HSS, 'F', Missing_Ret);
@@ -9272,7 +9247,9 @@ package body Sem_Ch6 is
-- Force the definition of the Itype in case of internal function
-- calls within the same or nested scope.
- if Is_Subprogram_Or_Generic_Subprogram (E) then
+ if Is_Subprogram_Or_Generic_Subprogram (E)
+ and then not Is_Compilation_Unit (E)
+ then
Subp_Decl := Parent (E);
-- The insertion point for an Itype reference should be after
@@ -10011,17 +9988,8 @@ package body Sem_Ch6 is
N2 : Node_Id;
begin
- if L1 = No_List then
- N1 := Empty;
- else
- N1 := First (L1);
- end if;
-
- if L2 = No_List then
- N2 := Empty;
- else
- N2 := First (L2);
- end if;
+ N1 := First (L1);
+ N2 := First (L2);
-- Compare two lists, skipping rewrite insertions (we want to compare
-- the original trees, not the expanded versions).
@@ -13017,10 +12985,10 @@ package body Sem_Ch6 is
Set_Formal_Mode (Formal);
if Ekind (Formal) = E_In_Parameter then
- Set_Default_Value (Formal, Expression (Param_Spec));
+ Default := Expression (Param_Spec);
- if Present (Expression (Param_Spec)) then
- Default := Expression (Param_Spec);
+ if Present (Default) then
+ Set_Default_Value (Formal, Default);
if Is_Scalar_Type (Etype (Default)) then
if Nkind (Parameter_Type (Param_Spec)) /=
@@ -13330,10 +13298,9 @@ package body Sem_Ch6 is
Mutate_Ekind (Formal_Id, E_In_Out_Parameter);
else
- Mutate_Ekind (Formal_Id, E_Out_Parameter);
- Set_Never_Set_In_Source (Formal_Id, True);
- Set_Is_True_Constant (Formal_Id, False);
- Set_Current_Value (Formal_Id, Empty);
+ Mutate_Ekind (Formal_Id, E_Out_Parameter);
+ Set_Is_True_Constant (Formal_Id, False);
+ Set_Current_Value (Formal_Id, Empty);
end if;
else
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index 0e75bb4..cda7870 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -6082,7 +6082,7 @@ package body Sem_Ch8 is
-- If not that special case, then just reset the Etype
else
- Set_Etype (N, Etype (Entity (N)));
+ Set_Etype (N, Entyp);
end if;
end;
end if;
diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb
index 7bead6b..ee1d96e 100644
--- a/gcc/ada/sem_disp.adb
+++ b/gcc/ada/sem_disp.adb
@@ -508,12 +508,11 @@ package body Sem_Disp is
return Empty;
-- The dispatching type and the primitive operation must be defined in
- -- the same scope, except in the case of internal operations and formal
- -- abstract subprograms.
+ -- the same scope, except in the case of abstract formal subprograms.
- elsif ((Scope (Subp) = Scope (Tagged_Type) or else Is_Internal (Subp))
- and then (not Is_Generic_Type (Tagged_Type)
- or else not Comes_From_Source (Subp)))
+ elsif (Scope (Subp) = Scope (Tagged_Type)
+ and then (not Is_Generic_Type (Tagged_Type)
+ or else not Comes_From_Source (Subp)))
or else
(Is_Formal_Subprogram (Subp) and then Is_Abstract_Subprogram (Subp))
or else
@@ -541,8 +540,10 @@ package body Sem_Disp is
Control : Node_Id := Empty;
Func : Entity_Id;
Subp_Entity : Entity_Id;
- Indeterm_Ancestor_Call : Boolean := False;
- Indeterm_Ctrl_Type : Entity_Id := Empty; -- init to avoid warning
+
+ Indeterm_Ctrl_Type : Entity_Id := Empty;
+ -- Type of a controlling formal whose actual is a tag-indeterminate call
+ -- whose result type is different from, but is an ancestor of, the type.
Static_Tag : Node_Id := Empty;
-- If a controlling formal has a statically tagged actual, the tag of
@@ -936,8 +937,7 @@ package body Sem_Disp is
and then Base_Type (Etype (Actual)) /= Base_Type (Etype (Formal))
and then Is_Ancestor (Etype (Actual), Etype (Formal))
then
- Indeterm_Ancestor_Call := True;
- Indeterm_Ctrl_Type := Etype (Formal);
+ Indeterm_Ctrl_Type := Etype (Formal);
-- If the formal is controlling but the actual is not, the type
-- of the actual is statically known, and may be used as the
@@ -947,39 +947,13 @@ package body Sem_Disp is
and then Is_Entity_Name (Actual)
and then Is_Tagged_Type (Etype (Actual))
then
- Static_Tag := Actual;
+ Static_Tag := Etype (Actual);
end if;
Next_Actual (Actual);
Next_Formal (Formal);
end loop;
- -- If the call doesn't have a controlling actual but does have an
- -- indeterminate actual that requires dispatching treatment, then an
- -- object is needed that will serve as the controlling argument for
- -- a dispatching call on the indeterminate actual. This can occur
- -- in the unusual situation of a default actual given by a tag-
- -- indeterminate call and where the type of the call is an ancestor
- -- of the type associated with a containing call to an inherited
- -- operation (see AI-239).
-
- -- Rather than create an object of the tagged type, which would
- -- be problematic for various reasons (default initialization,
- -- discriminants), the tag of the containing call's associated
- -- tagged type is directly used to control the dispatching.
-
- if No (Control)
- and then Indeterm_Ancestor_Call
- and then No (Static_Tag)
- then
- Control :=
- Make_Attribute_Reference (Loc,
- Prefix => New_Occurrence_Of (Indeterm_Ctrl_Type, Loc),
- Attribute_Name => Name_Tag);
-
- Analyze (Control);
- end if;
-
if Present (Control) then
-- Verify that no controlling arguments are statically tagged
@@ -1031,17 +1005,35 @@ package body Sem_Disp is
Check_Direct_Call;
- -- If there is a statically tagged actual and a tag-indeterminate
- -- call to a function of the ancestor (such as that provided by a
- -- default), then treat this as a dispatching call and propagate
- -- the tag to the tag-indeterminate call(s).
-
- elsif Present (Static_Tag) and then Indeterm_Ancestor_Call then
- Control :=
- Make_Attribute_Reference (Loc,
- Prefix =>
- New_Occurrence_Of (Etype (Static_Tag), Loc),
- Attribute_Name => Name_Tag);
+ -- If the call doesn't have a controlling actual but does have an
+ -- indeterminate actual that requires dispatching treatment, then an
+ -- object is needed that will serve as the controlling argument for
+ -- a dispatching call on the indeterminate actual. This can occur
+ -- in the unusual situation of a default actual given by a tag-
+ -- indeterminate call and where the type of the call is an ancestor
+ -- of the type associated with a containing call to an inherited
+ -- operation (see AI-239).
+
+ -- Rather than create an object of the tagged type, which would
+ -- be problematic for various reasons (default initialization,
+ -- discriminants), the tag of the containing call's associated
+ -- tagged type is directly used to control the dispatching.
+
+ elsif Present (Indeterm_Ctrl_Type) then
+ if Present (Static_Tag) then
+ Control :=
+ Make_Attribute_Reference (Loc,
+ Prefix =>
+ New_Occurrence_Of (Static_Tag, Loc),
+ Attribute_Name => Name_Tag);
+
+ else
+ Control :=
+ Make_Attribute_Reference (Loc,
+ Prefix =>
+ New_Occurrence_Of (Indeterm_Ctrl_Type, Loc),
+ Attribute_Name => Name_Tag);
+ end if;
Analyze (Control);
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index 114c904..2ba4608 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -1816,10 +1816,10 @@ package body Sem_Eval is
begin
-- Never known at compile time if bad type or raises Constraint_Error
- -- or empty (latter case occurs only as a result of a previous error).
+ -- or empty (which can occur as a result of a previous error or in the
+ -- case of e.g. an imported constant).
if No (Op) then
- Check_Error_Detected;
return False;
elsif Op = Error
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 4d67841..ad43808 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -1361,36 +1361,15 @@ package body Sem_Prag is
when E_Generic_In_Out_Parameter
| E_In_Out_Parameter
+ | E_Out_Parameter
| E_Variable
=>
- -- When pragma Global is present it determines the mode of
- -- the object.
-
- if Global_Seen then
-
- -- A variable has mode IN when its type is unconstrained
- -- or tagged because array bounds, discriminants or tags
- -- can be read.
-
- Item_Is_Input :=
- Appears_In (Subp_Inputs, Item_Id)
- or else Is_Unconstrained_Or_Tagged_Item (Item_Id);
-
- Item_Is_Output := Appears_In (Subp_Outputs, Item_Id);
-
- -- Otherwise the variable has a default IN OUT mode
-
- else
- Item_Is_Input := True;
- Item_Is_Output := True;
- end if;
-
- when E_Out_Parameter =>
-
-- An OUT parameter of the related subprogram; it cannot
-- appear in Global.
- if Scope (Item_Id) = Spec_Id then
+ if Adjusted_Kind = E_Out_Parameter
+ and then Scope (Item_Id) = Spec_Id
+ then
-- The parameter has mode IN if its type is unconstrained
-- or tagged because array bounds, discriminants or tags
@@ -1401,8 +1380,8 @@ package body Sem_Prag is
Item_Is_Output := True;
- -- An OUT parameter of an enclosing subprogram; it can
- -- appear in Global and behaves as a read-write variable.
+ -- A parameter of an enclosing subprogram; it can appear
+ -- in Global and behaves as a read-write variable.
else
-- When pragma Global is present it determines the mode
@@ -1411,8 +1390,8 @@ package body Sem_Prag is
if Global_Seen then
-- A variable has mode IN when its type is
- -- unconstrained or tagged because array
- -- bounds, discriminants or tags can be read.
+ -- unconstrained or tagged because array bounds,
+ -- discriminants, or tags can be read.
Item_Is_Input :=
Appears_In (Subp_Inputs, Item_Id)
@@ -4606,7 +4585,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
-- If we get here, then the pragma is legal
@@ -4621,7 +4599,6 @@ package body Sem_Prag is
and then Ekind (Scope (Spec_Id)) /= E_Protected_Type
then
Pragma_Misplaced;
- return;
-- When the related context is an anonymous object created for a
-- simple concurrent type, the type must be a task
@@ -4631,7 +4608,6 @@ package body Sem_Prag is
and then Ekind (Etype (Spec_Id)) /= E_Task_Type
then
Pragma_Misplaced;
- return;
end if;
-- A pragma that applies to a Ghost entity becomes Ghost for the
@@ -4947,7 +4923,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
Subp_Id := Defining_Entity (Subp_Decl);
@@ -5012,7 +4987,6 @@ package body Sem_Prag is
N_Task_Body | N_Task_Body_Stub
then
Pragma_Misplaced;
- return;
end if;
Body_Id := Defining_Entity (Body_Decl);
@@ -5023,14 +4997,12 @@ package body Sem_Prag is
if No (Spec_Id) then
Error_Pragma ("pragma % cannot apply to a stand alone body");
- return;
-- Catch the case where the subprogram body is a subunit and acts as
-- the third declaration of the subprogram.
elsif Nkind (Parent (Body_Decl)) = N_Subunit then
Error_Pragma ("pragma % cannot apply to a subunit");
- return;
end if;
-- A refined pragma can only apply to the body [stub] of a subprogram
@@ -5055,7 +5027,6 @@ package body Sem_Prag is
Error_Pragma
(Fix_Msg (Spec_Id, "pragma % must apply to the body of "
& "subprogram declared in a package specification"));
- return;
end if;
-- If we get here, then the pragma is legal
@@ -6181,15 +6152,11 @@ package body Sem_Prag is
--------------------------------
procedure Check_Loop_Pragma_Grouping (Loop_Stmt : Node_Id) is
- Stop_Search : exception;
- -- This exception is used to terminate the recursive descent of
- -- routine Check_Grouping.
-
- procedure Check_Grouping (L : List_Id);
+ function Check_Grouping (L : List_Id) return Boolean;
-- Find the first group of pragmas in list L and if successful,
-- ensure that the current pragma is part of that group. The
- -- routine raises Stop_Search once such a check is performed to
- -- halt the recursive descent.
+ -- routine returns True once such a check is performed to
+ -- stop the analysis.
procedure Grouping_Error (Prag : Node_Id);
pragma No_Return (Grouping_Error);
@@ -6200,7 +6167,7 @@ package body Sem_Prag is
-- Check_Grouping --
--------------------
- procedure Check_Grouping (L : List_Id) is
+ function Check_Grouping (L : List_Id) return Boolean is
HSS : Node_Id;
Stmt : Node_Id;
Prag : Node_Id := Empty; -- init to avoid warning
@@ -6248,7 +6215,7 @@ package body Sem_Prag is
-- Stop the search as the placement is legal.
if Stmt = N then
- raise Stop_Search;
+ return True;
-- Skip group members, but keep track of the
-- last pragma in the group.
@@ -6295,15 +6262,21 @@ package body Sem_Prag is
elsif Nkind (Stmt) = N_Block_Statement then
HSS := Handled_Statement_Sequence (Stmt);
- Check_Grouping (Declarations (Stmt));
+ if Check_Grouping (Declarations (Stmt)) then
+ return True;
+ end if;
if Present (HSS) then
- Check_Grouping (Statements (HSS));
+ if Check_Grouping (Statements (HSS)) then
+ return True;
+ end if;
end if;
end if;
Next (Stmt);
end loop;
+
+ return False;
end Check_Grouping;
--------------------
@@ -6316,6 +6289,8 @@ package body Sem_Prag is
Error_Pragma ("pragma% must appear next to pragma#");
end Grouping_Error;
+ Ignore : Boolean;
+
-- Start of processing for Check_Loop_Pragma_Grouping
begin
@@ -6323,10 +6298,7 @@ package body Sem_Prag is
-- within to determine whether the current pragma is part of the
-- first topmost grouping of Loop_Invariant and Loop_Variant.
- Check_Grouping (Statements (Loop_Stmt));
-
- exception
- when Stop_Search => null;
+ Ignore := Check_Grouping (Statements (Loop_Stmt));
end Check_Loop_Pragma_Grouping;
--------------------
@@ -6397,7 +6369,6 @@ package body Sem_Prag is
Statements (Handled_Statement_Sequence (Stmt))
then
Placement_Error (Prev);
- return;
-- Keep inspecting the parents because we are now within a
-- chain of nested blocks.
@@ -6432,7 +6403,6 @@ package body Sem_Prag is
else
Placement_Error (Prev);
- return;
end if;
end loop;
@@ -7496,7 +7466,6 @@ package body Sem_Prag is
Error_Pragma
("cannot have Full_Access_Only without Volatile/Atomic "
& "(RM C.6(8.2))");
- return;
end if;
-- Check all the subcomponents of the type recursively, if any
@@ -8004,7 +7973,6 @@ package body Sem_Prag is
Error_Msg_Sloc := Sloc (Decl);
Error_Pragma_Arg
("convention differs from that given#", Arg1);
- return;
end if;
end if;
end if;
@@ -8369,7 +8337,6 @@ package body Sem_Prag is
Error_Pragma_Arg
("argument of pragma% must be subprogram or access type",
Arg2);
- Subp := Empty;
end if;
-- ISO C requires a named parameter before the ellipsis, so a
@@ -10009,7 +9976,6 @@ package body Sem_Prag is
then
Error_Pragma_Arg
("argument of% must be entity in current scope", Assoc);
- return;
end if;
-- Processing for procedure, operator or function. If subprogram
@@ -12482,7 +12448,6 @@ package body Sem_Prag is
N_Generic_Package_Declaration | N_Package_Declaration
then
Pragma_Misplaced;
- return;
end if;
Pack_Id := Defining_Entity (Pack_Decl);
@@ -13509,7 +13474,6 @@ package body Sem_Prag is
N_Protected_Type_Declaration
then
Pragma_Misplaced;
- return;
end if;
end if;
@@ -14519,7 +14483,6 @@ package body Sem_Prag is
if Nkind (Obj_Decl) /= N_Object_Declaration then
Pragma_Misplaced;
- return;
end if;
Obj_Id := Defining_Entity (Obj_Decl);
@@ -14532,14 +14495,12 @@ package body Sem_Prag is
if not Is_Library_Level_Entity (Obj_Id) then
Error_Pragma
("pragma % must apply to a library level variable");
- return;
end if;
-- Otherwise the pragma applies to a constant, which is illegal
else
Error_Pragma ("pragma % must apply to a variable declaration");
- return;
end if;
-- A pragma that applies to a Ghost entity becomes Ghost for the
@@ -14662,7 +14623,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
Spec_Id := Unique_Defining_Entity (Subp_Decl);
@@ -15412,7 +15372,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
Stmt := Prev (Stmt);
@@ -15423,7 +15382,6 @@ package body Sem_Prag is
if No (Typ) then
Pragma_Misplaced;
- return;
end if;
-- A pragma that applies to a Ghost entity becomes Ghost for the
@@ -16721,7 +16679,6 @@ package body Sem_Prag is
else
Error_Pragma ("pragma % must apply to a subprogram");
- return;
end if;
-- Mark the pragma as Ghost if the related subprogram is also
@@ -17000,7 +16957,6 @@ package body Sem_Prag is
N_Single_Task_Declaration | N_Task_Type_Declaration
then
Error_Pragma ("pragma % cannot apply to a task type");
- return;
-- Skip internally generated code
@@ -17046,6 +17002,9 @@ package body Sem_Prag is
-- The pragma applies to a legal construct, stop the traversal
elsif Nkind (Stmt) in N_Abstract_Subprogram_Declaration
+ | N_Formal_Object_Declaration
+ | N_Formal_Subprogram_Declaration
+ | N_Formal_Type_Declaration
| N_Full_Type_Declaration
| N_Generic_Subprogram_Declaration
| N_Object_Declaration
@@ -17064,7 +17023,6 @@ package body Sem_Prag is
Error_Pragma
("pragma % must apply to an object, package, subprogram "
& "or type");
- return;
end if;
Stmt := Prev (Stmt);
@@ -17084,11 +17042,9 @@ package body Sem_Prag is
if Nkind (Context) in N_Protected_Body | N_Protected_Definition
then
Error_Pragma ("pragma % cannot apply to a protected type");
- return;
elsif Nkind (Context) in N_Task_Body | N_Task_Definition then
Error_Pragma ("pragma % cannot apply to a task type");
- return;
end if;
if No (Id) then
@@ -17126,7 +17082,6 @@ package body Sem_Prag is
Error_Pragma
("pragma % must apply to an object, package, subprogram or "
& "type");
- return;
end if;
-- Handle completions of types and constants that are subject to
@@ -17174,11 +17129,9 @@ package body Sem_Prag is
elsif Ekind (Id) = E_Variable then
if Is_Protected_Type (Etype (Id)) then
Error_Pragma ("pragma % cannot apply to a protected object");
- return;
elsif Is_Task_Type (Etype (Id)) then
Error_Pragma ("pragma % cannot apply to a task object");
- return;
end if;
end if;
@@ -17200,7 +17153,6 @@ package body Sem_Prag is
Error_Pragma
("pragma % with value False cannot appear in enabled "
& "ghost region");
- return;
end if;
-- Otherwise the expression is not static
@@ -17208,7 +17160,6 @@ package body Sem_Prag is
else
Error_Pragma_Arg
("expression of pragma % must be static", Expr);
- return;
end if;
end if;
@@ -17491,7 +17442,6 @@ package body Sem_Prag is
Error_Pragma_Arg
("controlling formal must be of synchronized tagged type",
Arg1);
- return;
end if;
-- Ada 2012 (AI05-0030): Cannot apply the implementation_kind
@@ -17505,7 +17455,6 @@ package body Sem_Prag is
Error_Pragma_Arg
("implementation kind By_Protected_Procedure cannot be "
& "applied to a task interface primitive", Arg2);
- return;
end if;
-- Procedures declared inside a protected type must be accepted
@@ -17520,7 +17469,6 @@ package body Sem_Prag is
else
Error_Pragma_Arg
("pragma % must be applied to a primitive procedure", Arg1);
- return;
end if;
-- Ada 2012 (AI12-0279): Cannot apply the implementation_kind
@@ -17532,7 +17480,6 @@ package body Sem_Prag is
Error_Pragma_Arg
("implementation kind By_Protected_Procedure cannot be "
& "applied to entities with aspect 'Yield", Arg2);
- return;
end if;
Record_Rep_Item (Proc_Id, N);
@@ -17943,7 +17890,6 @@ package body Sem_Prag is
N_Generic_Package_Declaration | N_Package_Declaration
then
Pragma_Misplaced;
- return;
end if;
Pack_Id := Defining_Entity (Pack_Decl);
@@ -18224,7 +18170,6 @@ package body Sem_Prag is
N_Generic_Package_Declaration | N_Package_Declaration
then
Pragma_Misplaced;
- return;
end if;
Pack_Id := Defining_Entity (Pack_Decl);
@@ -18560,7 +18505,6 @@ package body Sem_Prag is
if Nkind (P) not in N_Task_Definition | N_Protected_Definition then
Pragma_Misplaced;
- return;
else
Ent := Defining_Identifier (Parent (P));
@@ -18700,7 +18644,6 @@ package body Sem_Prag is
Interrupt_States.Table (IST_Num).Pragma_Loc;
Error_Pragma_Arg
("state conflicts with that given #", Arg2);
- exit;
end if;
IST_Num := IST_Num + 1;
@@ -18776,7 +18719,6 @@ package body Sem_Prag is
elsif Class_Present (N) then
Error_Pragma_Arg
("pragma % only allowed for private type", Arg1);
- return;
-- A regular invariant may appear on both views
@@ -18784,7 +18726,6 @@ package body Sem_Prag is
Error_Pragma_Arg
("pragma % only allowed for private type or corresponding "
& "full view", Arg1);
- return;
end if;
-- An invariant associated with an abstract type (this includes
@@ -18793,7 +18734,6 @@ package body Sem_Prag is
if Is_Abstract_Type (Typ) and then not Class_Present (N) then
Error_Pragma_Arg
("pragma % not allowed for abstract type", Arg1);
- return;
end if;
-- A pragma that applies to a Ghost entity becomes Ghost for the
@@ -19706,7 +19646,6 @@ package body Sem_Prag is
if Nkind (Parent (N)) = N_Task_Definition then
Error_Pragma ("pragma % cannot apply to task entries");
- return;
end if;
Entry_Id := Defining_Entity (Entry_Decl);
@@ -19716,7 +19655,6 @@ package body Sem_Prag is
else
Error_Pragma
("pragma % must apply to a protected entry declaration");
- return;
end if;
-- Mark the pragma as Ghost if the related subprogram is also
@@ -21020,7 +20958,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
-- Extract the entity of the related object declaration or package
@@ -22633,7 +22570,6 @@ package body Sem_Prag is
if Nkind (Pack_Decl) /= N_Package_Body then
Pragma_Misplaced;
- return;
end if;
Spec_Id := Corresponding_Spec (Pack_Decl);
@@ -23828,7 +23764,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- exit;
end if;
Prev (Stmt);
@@ -23965,7 +23900,6 @@ package body Sem_Prag is
if Nkind (P) /= N_Task_Definition then
Pragma_Misplaced;
- return;
else
if Has_Storage_Size_Pragma (P) then
@@ -24331,7 +24265,6 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
Spec_Id := Unique_Defining_Entity (Subp_Decl);
@@ -24688,7 +24621,7 @@ package body Sem_Prag is
Check_First_Subtype (Task_Type);
if Rep_Item_Too_Late (Ent, N) then
- raise Pragma_Exit;
+ return;
end if;
end Task_Storage;
@@ -24819,7 +24752,6 @@ package body Sem_Prag is
else
Error_Pragma
("pragma % must be specified within a package declaration");
- return;
end if;
Subp_Decl := Find_Related_Declaration_Or_Body (N);
@@ -24837,11 +24769,9 @@ package body Sem_Prag is
if Nkind (Subp_Decl) = N_Abstract_Subprogram_Declaration then
Error_Pragma
("pragma % cannot be applied to abstract subprogram");
- return;
elsif Nkind (Subp_Decl) = N_Entry_Declaration then
Error_Pragma ("pragma % cannot be applied to entry");
- return;
-- The context is a [generic] subprogram declared at the top level
-- of the [generic] package unit.
@@ -24860,7 +24790,6 @@ package body Sem_Prag is
Error_Pragma
("pragma % must be applied to a library-level subprogram "
& "declaration");
- return;
end if;
Subp_Id := Defining_Entity (Subp_Decl);
@@ -24935,7 +24864,6 @@ package body Sem_Prag is
Check_Arg_Is_Library_Level_Local_Name (Arg1);
Id := Get_Pragma_Arg (Arg1);
- Analyze (Id);
if not Is_Entity_Name (Id)
or else Ekind (Entity (Id)) /= E_Variable
@@ -24954,7 +24882,7 @@ package body Sem_Prag is
or else
Rep_Item_Too_Late (E, N)
then
- raise Pragma_Exit;
+ return;
end if;
Set_Has_Pragma_Thread_Local_Storage (E);
@@ -25551,14 +25479,12 @@ package body Sem_Prag is
else
Pragma_Misplaced;
- return;
end if;
Spec_Id := Unique_Defining_Entity (Subp_Decl);
if Ekind (Spec_Id) not in E_Function | E_Generic_Function then
Pragma_Misplaced;
- return;
end if;
-- A pragma that applies to a Ghost entity becomes Ghost for the
@@ -25719,16 +25645,15 @@ package body Sem_Prag is
if CodePeer_Mode or GNATprove_Mode then
Rewrite (N, Make_Null_Statement (Loc));
Analyze (N);
- raise Pragma_Exit;
+ return;
end if;
elsif Chars (Argx) = Name_Gnatprove then
if not GNATprove_Mode then
Rewrite (N, Make_Null_Statement (Loc));
Analyze (N);
- raise Pragma_Exit;
+ return;
end if;
-
else
raise Program_Error;
end if;
@@ -25756,7 +25681,7 @@ package body Sem_Prag is
Chars => Name_Warnings,
Pragma_Argument_Associations => Shifted_Args));
Analyze (N);
- raise Pragma_Exit;
+ return;
end if;
-- One argument case
diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads
index 0a1ad5b..e8a65ce 100644
--- a/gcc/ada/sem_prag.ads
+++ b/gcc/ada/sem_prag.ads
@@ -135,6 +135,7 @@ package Sem_Prag is
Pragma_Assert_And_Cut => True,
Pragma_Assume => True,
Pragma_Check => True,
+ Pragma_Compile_Time_Error => True,
Pragma_Contract_Cases => True,
Pragma_Default_Initial_Condition => True,
Pragma_Initial_Condition => True,
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 7d595eb..3ff0afd 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -31,6 +31,7 @@ with Debug_A; use Debug_A;
with Einfo; use Einfo;
with Einfo.Entities; use Einfo.Entities;
with Einfo.Utils; use Einfo.Utils;
+with Elists; use Elists;
with Errout; use Errout;
with Expander; use Expander;
with Exp_Ch6; use Exp_Ch6;
@@ -144,7 +145,7 @@ package body Sem_Res is
-- returns true if the prefix denotes an atomic object that has an address
-- clause (the case in which we may want to issue a warning).
- function Is_Definite_Access_Type (E : Entity_Id) return Boolean;
+ function Is_Definite_Access_Type (E : N_Entity_Id) return Boolean;
-- Determine whether E is an access type declared by an access declaration,
-- and not an (anonymous) allocator type.
@@ -1510,7 +1511,7 @@ package body Sem_Res is
-- Is_Definite_Access_Type --
-----------------------------
- function Is_Definite_Access_Type (E : Entity_Id) return Boolean is
+ function Is_Definite_Access_Type (E : N_Entity_Id) return Boolean is
Btyp : constant Entity_Id := Base_Type (E);
begin
return Ekind (Btyp) = E_Access_Type
@@ -1561,7 +1562,7 @@ package body Sem_Res is
Orig_Type : Entity_Id := Empty;
Pack : Entity_Id;
- type Kind_Test is access function (E : Entity_Id) return Boolean;
+ type Kind_Test is access function (E : N_Entity_Id) return Boolean;
function Operand_Type_In_Scope (S : Entity_Id) return Boolean;
-- If the operand is not universal, and the operator is given by an
@@ -4620,6 +4621,7 @@ package body Sem_Res is
("invalid use of untagged formal incomplete type", A);
end if;
+ -- For mode IN, if actual is an entity, and the type of the formal
-- has warnings suppressed, then we reset Never_Set_In_Source for
-- the calling entity. The reason for this is to catch cases like
-- GNAT.Spitbol.Patterns.Vstring_Var where the called subprogram
@@ -7539,9 +7541,7 @@ package body Sem_Res is
if T = Any_Type then
-- Deal with explicit ambiguity of operands
- if Ekind (Entity (N)) = E_Operator
- and then (Is_Overloaded (L) or else Is_Overloaded (R))
- then
+ if Is_Overloaded (L) or else Is_Overloaded (R) then
Ambiguous_Operands (N);
end if;
@@ -8563,6 +8563,16 @@ package body Sem_Res is
L : constant Node_Id := Left_Opnd (N);
R : constant Node_Id := Right_Opnd (N);
+ Implicit_NE_For_User_Defined_Operator : constant Boolean :=
+ Nkind (N) = N_Op_Ne
+ and then Ekind (Entity (N)) = E_Function
+ and then not Comes_From_Source (Entity (N))
+ and then not
+ Is_Intrinsic_Subprogram (Corresponding_Equality (Entity (N)));
+ -- Whether this is a call to the implicit inequality operator created
+ -- for a user-defined operator that is not an intrinsic subprogram, in
+ -- which case we need to skip some processing.
+
T : Entity_Id := Find_Unique_Type (L, R);
procedure Check_Access_Attribute (N : Node_Id);
@@ -8833,9 +8843,12 @@ package body Sem_Res is
Generate_Reference (T, N, ' ');
if T = Any_Type then
- -- Deal with explicit ambiguity of operands
+ -- Deal with explicit ambiguity of operands, unless this is a call
+ -- to the implicit inequality operator created for a user-defined
+ -- operator that is not an intrinsic subprogram, since the common
+ -- resolution of operands done here does not apply to it.
- if Ekind (Entity (N)) = E_Operator
+ if not Implicit_NE_For_User_Defined_Operator
and then (Is_Overloaded (L) or else Is_Overloaded (R))
then
Ambiguous_Operands (N);
@@ -9009,17 +9022,11 @@ package body Sem_Res is
Generate_Operator_Reference (N, T);
Check_Low_Bound_Tested (N);
- -- If this is an inequality, it may be the implicit inequality
- -- created for a user-defined operation, in which case the corres-
- -- ponding equality operation is not intrinsic, and the operation
- -- cannot be constant-folded. Else fold.
+ -- Unless this is a call to the implicit inequality operator created
+ -- for a user-defined operator that is not an intrinsic subprogram,
+ -- try to fold the operation.
- if Nkind (N) = N_Op_Eq
- or else Comes_From_Source (Entity (N))
- or else Ekind (Entity (N)) = E_Operator
- or else
- Is_Intrinsic_Subprogram (Corresponding_Equality (Entity (N)))
- then
+ if not Implicit_NE_For_User_Defined_Operator then
Analyze_Dimension (N);
Eval_Relational_Op (N);
@@ -12302,26 +12309,7 @@ package body Sem_Res is
-- Conversion to interface type
elsif Is_Interface (Target) then
-
- -- Handle subtypes
-
- if Ekind (Opnd) in E_Protected_Subtype | E_Task_Subtype then
- Opnd := Etype (Opnd);
- end if;
-
- if Is_Class_Wide_Type (Opnd)
- or else Interface_Present_In_Ancestor
- (Typ => Opnd,
- Iface => Target)
- then
- Expand_Interface_Conversion (N);
- else
- Error_Msg_Name_1 := Chars (Etype (Target));
- Error_Msg_Name_2 := Chars (Opnd);
- Error_Msg_N
- ("wrong interface conversion (% is not a progenitor "
- & "of %)", N);
- end if;
+ Expand_Interface_Conversion (N);
end if;
end;
end if;
@@ -13615,29 +13603,115 @@ package body Sem_Res is
Conversion_Check (False,
"downward conversion of tagged objects not allowed");
- -- Ada 2005 (AI-251): The conversion to/from interface types is
- -- always valid. The types involved may be class-wide (sub)types.
+ -- Ada 2005 (AI-251): A conversion is valid if the operand and target
+ -- types are both class-wide types and the specific type associated
+ -- with at least one of them is an interface type (RM 4.6 (23.1/2));
+ -- at run-time a check will verify the validity of this interface
+ -- type conversion.
- elsif Is_Interface (Etype (Base_Type (Target_Type)))
- or else Is_Interface (Etype (Base_Type (Opnd_Type)))
+ elsif Is_Class_Wide_Type (Target_Type)
+ and then Is_Class_Wide_Type (Opnd_Type)
+ and then (Is_Interface (Target_Type)
+ or else Is_Interface (Opnd_Type))
then
return True;
- -- If the operand is a class-wide type obtained through a limited_
- -- with clause, and the context includes the nonlimited view, use
- -- it to determine whether the conversion is legal.
+ -- Report errors
+
+ elsif Is_Class_Wide_Type (Target_Type)
+ and then Is_Interface (Target_Type)
+ and then not Is_Interface (Opnd_Type)
+ and then not Interface_Present_In_Ancestor
+ (Typ => Opnd_Type,
+ Iface => Target_Type)
+ then
+ Error_Msg_Name_1 := Chars (Etype (Target_Type));
+ Error_Msg_Name_2 := Chars (Opnd_Type);
+ Conversion_Error_N
+ ("wrong interface conversion (% is not a progenitor "
+ & "of %)", N);
+ return False;
elsif Is_Class_Wide_Type (Opnd_Type)
- and then From_Limited_With (Opnd_Type)
- and then Present (Non_Limited_View (Etype (Opnd_Type)))
- and then Is_Interface (Non_Limited_View (Etype (Opnd_Type)))
+ and then Is_Interface (Opnd_Type)
+ and then not Is_Interface (Target_Type)
+ and then not Interface_Present_In_Ancestor
+ (Typ => Target_Type,
+ Iface => Opnd_Type)
then
- return True;
+ Error_Msg_Name_1 := Chars (Etype (Opnd_Type));
+ Error_Msg_Name_2 := Chars (Target_Type);
+ Conversion_Error_N
+ ("wrong interface conversion (% is not a progenitor "
+ & "of %)", N);
- elsif Is_Access_Type (Opnd_Type)
- and then Is_Interface (Directly_Designated_Type (Opnd_Type))
+ -- Search for interface types shared between the target type and
+ -- the operand interface type to complete the text of the error
+ -- since the source of this error is a missing type conversion
+ -- to such interface type.
+
+ if Has_Interfaces (Target_Type) then
+ declare
+ Operand_Ifaces_List : Elist_Id;
+ Operand_Iface_Elmt : Elmt_Id;
+ Target_Ifaces_List : Elist_Id;
+ Target_Iface_Elmt : Elmt_Id;
+ First_Candidate : Boolean := True;
+
+ begin
+ Collect_Interfaces (Base_Type (Target_Type),
+ Target_Ifaces_List);
+ Collect_Interfaces (Root_Type (Base_Type (Opnd_Type)),
+ Operand_Ifaces_List);
+
+ Operand_Iface_Elmt := First_Elmt (Operand_Ifaces_List);
+ while Present (Operand_Iface_Elmt) loop
+ Target_Iface_Elmt := First_Elmt (Target_Ifaces_List);
+ while Present (Target_Iface_Elmt) loop
+ if Node (Operand_Iface_Elmt)
+ = Node (Target_Iface_Elmt)
+ then
+ Error_Msg_Name_1 :=
+ Chars (Node (Target_Iface_Elmt));
+
+ if First_Candidate then
+ First_Candidate := False;
+ Conversion_Error_N
+ ("\must convert to `%''Class` before downward "
+ & "conversion", Operand);
+ else
+ Conversion_Error_N
+ ("\or must convert to `%''Class` before "
+ & "downward conversion", Operand);
+ end if;
+ end if;
+
+ Next_Elmt (Target_Iface_Elmt);
+ end loop;
+
+ Next_Elmt (Operand_Iface_Elmt);
+ end loop;
+ end;
+ end if;
+
+ return False;
+
+ elsif not Is_Class_Wide_Type (Target_Type)
+ and then Is_Interface (Target_Type)
then
- return True;
+ Conversion_Error_N
+ ("wrong use of interface type in tagged conversion", N);
+ Conversion_Error_N
+ ("\add ''Class to the target interface type", N);
+ return False;
+
+ elsif not Is_Class_Wide_Type (Opnd_Type)
+ and then Is_Interface (Opnd_Type)
+ then
+ Conversion_Error_N
+ ("must convert to class-wide interface type before downward "
+ & "conversion", Operand);
+ return False;
else
Conversion_Error_NE
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 9f861a2..7b7566d 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -275,9 +275,9 @@ package body Sem_Util is
-- with its type set to Natural.
function Innermost_Master_Scope_Depth (N : Node_Id) return Uint;
- -- Returns the scope depth of the given node's innermost
- -- enclosing dynamic scope (effectively the accessibility
- -- level of the innermost enclosing master).
+ -- Returns the scope depth of the given node's innermost enclosing
+ -- scope (effectively the accessibility level of the innermost
+ -- enclosing master).
function Function_Call_Or_Allocator_Level (N : Node_Id) return Node_Id;
-- Centralized processing of subprogram calls which may appear in
@@ -301,7 +301,7 @@ package body Sem_Util is
begin
-- Locate the nearest enclosing node (by traversing Parents)
-- that Defining_Entity can be applied to, and return the
- -- depth of that entity's nearest enclosing dynamic scope.
+ -- depth of that entity's nearest enclosing scope.
-- The rules that define what a master are defined in
-- RM 7.6.1 (3), and include statements and conditions for loops
@@ -311,13 +311,13 @@ package body Sem_Util is
Ent := Defining_Entity_Or_Empty (Node_Par);
if Present (Ent) then
- Encl_Scop := Nearest_Dynamic_Scope (Ent);
+ Encl_Scop := Find_Enclosing_Scope (Ent);
-- Ignore transient scopes made during expansion
if Comes_From_Source (Node_Par) then
return
- Scope_Depth_Default_0 (Encl_Scop) + Master_Lvl_Modifier;
+ Scope_Depth (Encl_Scop) + Master_Lvl_Modifier;
end if;
-- For a return statement within a function, return
@@ -798,44 +798,30 @@ package body Sem_Util is
-- in effect we treat discriminant components as regular
-- components.
- elsif Nkind (E) = N_Selected_Component
- and then Ekind (Etype (E)) = E_Anonymous_Access_Type
- and then Ekind (Etype (Pre)) /= E_Anonymous_Access_Type
- and then (not (Nkind (Selector_Name (E)) in N_Has_Entity
- and then Ekind (Entity (Selector_Name (E)))
- = E_Discriminant)
-
- -- The alternative accessibility models both treat
- -- discriminants as regular components.
-
- or else (No_Dynamic_Accessibility_Checks_Enabled (E)
- and then Allow_Alt_Model))
- then
- -- When restriction No_Dynamic_Accessibility_Checks is active
- -- and -gnatd_b set, the level is that of the designated type.
-
- if Allow_Alt_Model
- and then No_Dynamic_Accessibility_Checks_Enabled (E)
- and then Debug_Flag_Underscore_B
- then
- return Make_Level_Literal
- (Typ_Access_Level (Etype (E)));
- end if;
+ elsif
+ (Nkind (E) = N_Selected_Component
+ and then Ekind (Etype (E)) = E_Anonymous_Access_Type
+ and then Ekind (Etype (Pre)) /= E_Anonymous_Access_Type
+ and then (not (Nkind (Selector_Name (E)) in N_Has_Entity
+ and then Ekind (Entity (Selector_Name (E)))
+ = E_Discriminant)
- -- Otherwise proceed normally
+ -- The alternative accessibility models both treat
+ -- discriminants as regular components.
- return Make_Level_Literal
- (Typ_Access_Level (Etype (Prefix (E))));
+ or else (No_Dynamic_Accessibility_Checks_Enabled (E)
+ and then Allow_Alt_Model)))
- -- Similar to the previous case - arrays featuring components of
- -- anonymous access components get their corresponding level from
- -- their containing type's declaration.
+ -- Arrays featuring components of anonymous access components
+ -- get their corresponding level from their containing type's
+ -- declaration.
- elsif Nkind (E) = N_Indexed_Component
- and then Ekind (Etype (E)) = E_Anonymous_Access_Type
- and then Ekind (Etype (Pre)) in Array_Kind
- and then Ekind (Component_Type (Base_Type (Etype (Pre))))
- = E_Anonymous_Access_Type
+ or else
+ (Nkind (E) = N_Indexed_Component
+ and then Ekind (Etype (E)) = E_Anonymous_Access_Type
+ and then Ekind (Etype (Pre)) in Array_Kind
+ and then Ekind (Component_Type (Base_Type (Etype (Pre))))
+ = E_Anonymous_Access_Type)
then
-- When restriction No_Dynamic_Accessibility_Checks is active
-- and -gnatd_b set, the level is that of the designated type.
@@ -1167,7 +1153,7 @@ package body Sem_Util is
(Exp : Node_Id;
Check_Typ : Entity_Id)
is
- Exp_Typ : constant Entity_Id := Etype (Exp);
+ Exp_Typ : constant Entity_Id := Etype (Exp);
begin
if Raises_Constraint_Error (Exp) then
@@ -1250,12 +1236,12 @@ package body Sem_Util is
and then Is_Scalar_Type (Check_Typ)
and then Exp_Typ /= Check_Typ
then
+ -- If expression is a constant, it is worthwhile checking whether it
+ -- is a bound of the type.
+
if Is_Entity_Name (Exp)
and then Ekind (Entity (Exp)) = E_Constant
then
- -- If expression is a constant, it is worthwhile checking whether
- -- it is a bound of the type.
-
if (Is_Entity_Name (Type_Low_Bound (Check_Typ))
and then Entity (Exp) = Entity (Type_Low_Bound (Check_Typ)))
or else
@@ -1263,20 +1249,15 @@ package body Sem_Util is
and then Entity (Exp) = Entity (Type_High_Bound (Check_Typ)))
then
return;
-
- else
- Rewrite (Exp, Convert_To (Check_Typ, Relocate_Node (Exp)));
- Analyze_And_Resolve (Exp, Check_Typ);
- Check_Unset_Reference (Exp);
end if;
+ end if;
- -- Could use a comment on this case ???
+ -- Change Exp into Check_Typ'(Exp) to ensure that range checks are
+ -- performed at run time.
- else
- Rewrite (Exp, Convert_To (Check_Typ, Relocate_Node (Exp)));
- Analyze_And_Resolve (Exp, Check_Typ);
- Check_Unset_Reference (Exp);
- end if;
+ Rewrite (Exp, Convert_To (Check_Typ, Relocate_Node (Exp)));
+ Analyze_And_Resolve (Exp, Check_Typ);
+ Check_Unset_Reference (Exp);
end if;
end Aggregate_Constraint_Checks;
@@ -7043,6 +7024,25 @@ package body Sem_Util is
return Comps;
end Copy_Component_List;
+ -----------------------
+ -- Copy_Ghost_Aspect --
+ -----------------------
+
+ procedure Copy_Ghost_Aspect (From : Node_Id; To : Node_Id) is
+ pragma Assert (not Has_Aspects (To));
+ Asp : Node_Id;
+
+ begin
+ if Has_Aspects (From) then
+ Asp := Find_Aspect (Defining_Entity (From), Aspect_Ghost);
+
+ if Present (Asp) then
+ Set_Aspect_Specifications (To, New_List (New_Copy_Tree (Asp)));
+ Set_Has_Aspects (To, True);
+ end if;
+ end if;
+ end Copy_Ghost_Aspect;
+
-------------------------
-- Copy_Parameter_List --
-------------------------
@@ -11023,6 +11023,32 @@ package body Sem_Util is
end if;
end Get_Enclosing_Object;
+ -------------------------------
+ -- Get_Enclosing_Deep_Object --
+ -------------------------------
+
+ function Get_Enclosing_Deep_Object (N : Node_Id) return Entity_Id is
+ begin
+ if Is_Entity_Name (N) then
+ return Entity (N);
+ else
+ case Nkind (N) is
+ when N_Explicit_Dereference
+ | N_Indexed_Component
+ | N_Selected_Component
+ | N_Slice
+ =>
+ return Get_Enclosing_Deep_Object (Prefix (N));
+
+ when N_Type_Conversion =>
+ return Get_Enclosing_Deep_Object (Expression (N));
+
+ when others =>
+ return Empty;
+ end case;
+ end if;
+ end Get_Enclosing_Deep_Object;
+
---------------------------
-- Get_Enum_Lit_From_Pos --
---------------------------
@@ -18926,8 +18952,9 @@ package body Sem_Util is
if Has_Init_Expression (Nod) then
Visit (Expression (Nod));
- elsif not Has_Preelaborable_Initialization
- (Etype (Defining_Entity (Nod)))
+ elsif not Constant_Present (Nod)
+ and then not Has_Preelaborable_Initialization
+ (Etype (Defining_Entity (Nod)))
then
raise Non_Preelaborable;
end if;
@@ -25165,8 +25192,7 @@ package body Sem_Util is
end if;
-- If a record subtype is simply copied, the entity list will be
- -- shared. Thus cloned_Subtype must be set to indicate the sharing.
- -- ??? What does this do?
+ -- shared, so Cloned_Subtype must be set to indicate this.
if Ekind (Itype) in E_Class_Wide_Subtype | E_Record_Subtype then
Set_Cloned_Subtype (New_Itype, Itype);
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index 4121cf0..a8afda0 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -625,6 +625,11 @@ package Sem_Util is
-- create a new compatible record type. Loc is the source location assigned
-- to the created nodes.
+ procedure Copy_Ghost_Aspect (From : Node_Id; To : Node_Id);
+ -- Copy the Ghost aspect if present in the aspect specifications of node
+ -- From to node To. On entry it is assumed that To does not have aspect
+ -- specifications. If From has no aspects, the routine has no effect.
+
function Copy_Parameter_List (Subp_Id : Entity_Id) return List_Id;
-- Utility to create a parameter profile for a new subprogram spec, when
-- the subprogram has a body that acts as spec. This is done for some cases
@@ -1183,6 +1188,12 @@ package Sem_Util is
-- If expression N references a part of an object, return this object.
-- Otherwise return Empty. Expression N should have been resolved already.
+ function Get_Enclosing_Deep_Object (N : Node_Id) return Entity_Id;
+ -- If expression N references a reachable part of an object (as defined in
+ -- SPARK RM 6.9), return this object. Otherwise return Empty. It is similar
+ -- to Get_Enclosing_Object, but treats pointer dereference like component
+ -- selection. Expression N should have been resolved already.
+
function Get_Generic_Entity (N : Node_Id) return Entity_Id;
-- Returns the true generic entity in an instantiation. If the name in the
-- instantiation is a renaming, the function returns the renamed generic.
@@ -2872,7 +2883,7 @@ package Sem_Util is
-- This routine is called if the sub-expression N maybe the target of
-- an assignment (e.g. it is the left side of an assignment, used as
-- an out parameters, or used as prefixes of access attributes). It
- -- sets May_Be_Modified in the associated entity if there is one,
+ -- sets Never_Set_In_Source in the associated entity if there is one,
-- taking into account the rule that in the case of renamed objects,
-- it is the flag in the renamed object that must be set.
--
diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb
index b23be72..1d73f21 100644
--- a/gcc/ada/sem_warn.adb
+++ b/gcc/ada/sem_warn.adb
@@ -3401,9 +3401,14 @@ package body Sem_Warn is
False_Result => False_Result);
-- Warn on a possible evaluation to False / True in the presence of
- -- invalid values.
+ -- invalid values. But issue no warning for an assertion expression
+ -- (or a subexpression thereof); in particular, we don't want a
+ -- warning about an assertion that will always succeed.
- if True_Result then
+ if In_Assertion_Expression_Pragma (Op) then
+ null;
+
+ elsif True_Result then
Error_Msg_N
("condition can only be False if invalid values present?c?", Op);
diff --git a/gcc/ada/sem_warn.ads b/gcc/ada/sem_warn.ads
index bcf74ab..1894f36 100644
--- a/gcc/ada/sem_warn.ads
+++ b/gcc/ada/sem_warn.ads
@@ -86,15 +86,15 @@ package Sem_Warn is
-- N is the node for an expression which occurs in a reference position,
-- e.g. as the right side of an assignment. This procedure checks to see
-- if the node is a reference to a variable entity where the entity has
- -- Not_Assigned set. If so, the Unset_Reference field is set if it is not
- -- the first occurrence. No warning is posted, instead warnings will be
- -- posted later by Check_References. The reason we do things that
- -- way is that if there are no assignments anywhere, we prefer to flag
- -- the entity, rather than a reference to it. Note that for the purposes
- -- of this routine, a type conversion or qualified expression whose
- -- expression is an entity is also processed. The reason that we do not
- -- process these at the point of occurrence is that both these constructs
- -- can occur in non-reference positions (e.g. as out parameters).
+ -- Never_Set_In_Source set. If so, the Unset_Reference field is set if it
+ -- is not the first occurrence. No warning is posted, instead warnings will
+ -- be posted later by Check_References. The reason we do things that way is
+ -- that if there are no assignments anywhere, we prefer to flag the entity,
+ -- rather than a reference to it. Note that for the purposes of this
+ -- routine, a type conversion or qualified expression whose expression is
+ -- an entity is also processed. The reason that we do not process these
+ -- at the point of occurrence is that both these constructs can occur in
+ -- non-reference positions (e.g. as out parameters).
procedure Check_Unused_Withs (Spec_Unit : Unit_Number_Type := No_Unit);
-- This routine performs two kinds of checks. It checks that all with'ed
diff --git a/gcc/ada/sfn_scan.adb b/gcc/ada/sfn_scan.adb
index b6ab92f..b428ed7 100644
--- a/gcc/ada/sfn_scan.adb
+++ b/gcc/ada/sfn_scan.adb
@@ -622,7 +622,6 @@ package body SFN_Scan is
Q := '%';
else
Error ("bad string");
- Q := '"';
end if;
-- Scan out the string, B points to first char
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index e18a427..a9099e3 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -2299,7 +2299,7 @@ package Sinfo is
-- can be set in N_Object_Declaration nodes, to similarly suppress any
-- checks on the initializing value. In assignment statements it also
-- suppresses access checks in the generated code for out- and in-out
- -- parameters in entry calls.
+ -- parameters in entry calls, as well as length checks.
-- Suppress_Loop_Warnings
-- Used in N_Loop_Statement node to indicate that warnings within the
@@ -4651,7 +4651,7 @@ package Sinfo is
-- Note: The Actions field temporarily holds any actions associated with
-- evaluation of the Expression. During expansion of the case expression
- -- these actions are wrapped into an N_Expressions_With_Actions node
+ -- these actions are wrapped into an N_Expression_With_Actions node
-- replacing the original expression.
-- Note: this node never appears in the tree passed to the back end,
diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl
index 73e7304..dbf711d 100644
--- a/gcc/ada/snames.ads-tmpl
+++ b/gcc/ada/snames.ads-tmpl
@@ -776,7 +776,6 @@ package Snames is
Name_Allow : constant Name_Id := N + $;
Name_Amount : constant Name_Id := N + $;
Name_As_Is : constant Name_Id := N + $;
- Name_Attr_Long_Float : constant Name_Id := N + $;
Name_Assertion : constant Name_Id := N + $;
Name_Assertions : constant Name_Id := N + $;
Name_Attribute_Name : constant Name_Id := N + $;
diff --git a/gcc/ada/sprint.adb b/gcc/ada/sprint.adb
index 67861ba..42a6e4f 100644
--- a/gcc/ada/sprint.adb
+++ b/gcc/ada/sprint.adb
@@ -3132,7 +3132,9 @@ package body Sprint is
when N_Real_Literal =>
Write_Ureal_With_Col_Check_Sloc (Realval (Node));
- when N_Real_Range_Specification =>
+ when N_Real_Range_Specification
+ | N_Signed_Integer_Type_Definition
+ =>
Write_Str_With_Col_Check_Sloc ("range ");
Sprint_Node (Low_Bound (Node));
Write_Str (" .. ");
@@ -3248,12 +3250,6 @@ package body Sprint is
Write_Indent_Str ("end select;");
- when N_Signed_Integer_Type_Definition =>
- Write_Str_With_Col_Check_Sloc ("range ");
- Sprint_Node (Low_Bound (Node));
- Write_Str (" .. ");
- Sprint_Node (High_Bound (Node));
-
when N_Single_Protected_Declaration =>
Write_Indent_Str_Sloc ("protected ");
Write_Id (Defining_Identifier (Node));
diff --git a/gcc/ada/tbuild.adb b/gcc/ada/tbuild.adb
index 5aa9fbc..df13e9f 100644
--- a/gcc/ada/tbuild.adb
+++ b/gcc/ada/tbuild.adb
@@ -882,8 +882,8 @@ package body Tbuild is
-- We don't really want to allow E_Void here, but existing code passes
-- it.
- Loc : constant Source_Ptr := Sloc (Expr);
- Result : Node_Id;
+ Loc : constant Source_Ptr := Sloc (Expr);
+ Result : Node_Id;
begin
-- If the expression is already of the correct type, then nothing
diff --git a/gcc/ada/types.ads b/gcc/ada/types.ads
index 3b226e1..9ae1797 100644
--- a/gcc/ada/types.ads
+++ b/gcc/ada/types.ads
@@ -404,6 +404,11 @@ package Types is
-- that are entities (i.e. nodes with an Nkind of N_Defining_xxx). All such
-- nodes are extended nodes and these are the only extended nodes, so that
-- in practice entity and extended nodes are synonymous.
+ --
+ -- Note that Sinfo.Nodes.N_Entity_Id is the same as Entity_Id, except it
+ -- has a predicate requiring the correct Nkind. Opt_N_Entity_Id is the same
+ -- as N_Entity_Id, except it allows Empty. (Sinfo.Nodes is generated by the
+ -- Gen_IL program.)
subtype Node_Or_Entity_Id is Node_Id;
-- A synonym for node types, used in cases where a given value may be used
diff --git a/gcc/ada/uintp.ads b/gcc/ada/uintp.ads
index 55f5b97..1b408fc 100644
--- a/gcc/ada/uintp.ads
+++ b/gcc/ada/uintp.ads
@@ -70,6 +70,7 @@ package Uintp is
Uint_80 : constant Uint;
Uint_127 : constant Uint;
Uint_128 : constant Uint;
+ Uint_256 : constant Uint;
Uint_Minus_1 : constant Uint;
Uint_Minus_2 : constant Uint;
@@ -507,6 +508,7 @@ private
Uint_80 : constant Uint := Uint (Uint_Direct_Bias + 80);
Uint_127 : constant Uint := Uint (Uint_Direct_Bias + 127);
Uint_128 : constant Uint := Uint (Uint_Direct_Bias + 128);
+ Uint_256 : constant Uint := Uint (Uint_Direct_Bias + 256);
Uint_Minus_1 : constant Uint := Uint (Uint_Direct_Bias - 1);
Uint_Minus_2 : constant Uint := Uint (Uint_Direct_Bias - 2);
diff --git a/gcc/ada/vxworks-arm-link.spec b/gcc/ada/vxworks-arm-link.spec
deleted file mode 100644
index 71c9832..0000000
--- a/gcc/ada/vxworks-arm-link.spec
+++ /dev/null
@@ -1,4 +0,0 @@
-*lib:
-+ %{mrtp:%{!shared: \
- -L%:getenv(WIND_BASE /target/lib/usr/lib/arm/ARMARCH7/common) \
- }}
diff --git a/gcc/ada/vxworks-e500-link.spec b/gcc/ada/vxworks-e500-link.spec
deleted file mode 100644
index befeba1..0000000
--- a/gcc/ada/vxworks-e500-link.spec
+++ /dev/null
@@ -1,6 +0,0 @@
-*lib:
-+ %{mrtp:%{!shared: \
- -L%:if-exists-else( \
- %:getenv(WIND_BASE /target/lib/usr/lib/ppc/PPC32/e500v2common) \
- %:getenv(WIND_BASE /target/usr/lib/ppc/PPC32/e500v2common)) \
- }}
diff --git a/gcc/ada/vxworks-smp-arm-link.spec b/gcc/ada/vxworks-smp-arm-link.spec
deleted file mode 100644
index 0370716..0000000
--- a/gcc/ada/vxworks-smp-arm-link.spec
+++ /dev/null
@@ -1,4 +0,0 @@
-*lib:
-+ %{mrtp:%{!shared: \
- -L%:getenv(WIND_BASE /target/lib_smp/usr/lib/arm/ARMARCH7/common) \
- }}
diff --git a/gcc/ada/vxworks-smp-e500-link.spec b/gcc/ada/vxworks-smp-e500-link.spec
deleted file mode 100644
index 799bd190..0000000
--- a/gcc/ada/vxworks-smp-e500-link.spec
+++ /dev/null
@@ -1,4 +0,0 @@
-*lib:
-+ %{mrtp:%{!shared: \
- -L%:getenv(WIND_BASE /target/lib_smp/usr/lib/ppc/PPC32/e500v2common) \
- }}
diff --git a/gcc/ada/vxworks-smp-x86-link.spec b/gcc/ada/vxworks-smp-x86-link.spec
deleted file mode 100644
index 98a60c1..0000000
--- a/gcc/ada/vxworks-smp-x86-link.spec
+++ /dev/null
@@ -1,9 +0,0 @@
-*lib:
-+ %{mrtp:%{!shared: \
- %{vxsim: \
- -L%:getenv(WIND_BASE /target/lib_smp/usr/lib/simpentium/SIMPENTIUM/common) \
- } \
- %{!vxsim: \
- -L%:getenv(WIND_BASE /target/lib_smp/usr/lib/pentium/PENTIUM4/common) \
- } \
- }}
diff --git a/gcc/adjust-alignment.cc b/gcc/adjust-alignment.cc
index 2db41e8..5c5f8f4 100644
--- a/gcc/adjust-alignment.cc
+++ b/gcc/adjust-alignment.cc
@@ -50,7 +50,7 @@ public:
: gimple_opt_pass (pass_data_adjust_alignment, ctxt)
{}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_adjust_alignment
} // anon namespace
diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog
index f69a5b6..06d8454 100644
--- a/gcc/analyzer/ChangeLog
+++ b/gcc/analyzer/ChangeLog
@@ -1,3 +1,240 @@
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ * checker-path.cc (start_cfg_edge_event::get_desc): Update for
+ superedge::get_description returning a label_text.
+ * engine.cc (feasibility_state::maybe_update_for_edge): Likewise.
+ * supergraph.cc (superedge::dump): Likewise.
+ (superedge::get_description): Convert return type from char * to
+ label_text.
+ * supergraph.h (superedge::get_description): Likewise.
+
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ * call-info.cc (call_info::print): Update for removal of
+ label_text::maybe_free in favor of automatic memory management.
+ * checker-path.cc (checker_event::dump): Likewise.
+ (checker_event::prepare_for_emission): Likewise.
+ (state_change_event::get_desc): Likewise.
+ (superedge_event::should_filter_p): Likewise.
+ (start_cfg_edge_event::get_desc): Likewise.
+ (warning_event::get_desc): Likewise.
+ (checker_path::dump): Likewise.
+ (checker_path::debug): Likewise.
+ * diagnostic-manager.cc
+ (diagnostic_manager::prune_for_sm_diagnostic): Likewise.
+ (diagnostic_manager::prune_interproc_events): Likewise.
+ * program-state.cc (sm_state_map::to_json): Likewise.
+ * region.cc (region::to_json): Likewise.
+ * sm-malloc.cc (inform_nonnull_attribute): Likewise.
+ * store.cc (binding_map::to_json): Likewise.
+ (store::to_json): Likewise.
+ * svalue.cc (svalue::to_json): Likewise.
+
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ PR analyzer/106225
+ * sm-taint.cc (taint_state_machine::on_stmt): Move handling of
+ assignments from division to...
+ (taint_state_machine::check_for_tainted_divisor): ...this new
+ function. Reject warning when the divisor is known to be non-zero.
+ * sm.cc: Include "analyzer/program-state.h".
+ (sm_context::get_old_region_model): New.
+ * sm.h (sm_context::get_old_region_model): New decl.
+
+2022-07-06 Immad Mir <mirimmad@outlook.com>
+
+ PR analyzer/106184
+ * sm-fd.cc (fd_state_machine): Change ordering of initialization
+ of state m_invalid so that the order of initializers is same as
+ the ordering of the fields in the class decl.
+
+2022-07-06 Immad Mir <mirimmad@outlook.com>
+
+ * sm-fd.cc (use_after_close): save the "close" event and
+ show it where possible.
+
+2022-07-06 David Malcolm <dmalcolm@redhat.com>
+
+ PR analyzer/106204
+ * region-model.cc (within_short_circuited_stmt_p): Move extraction
+ of assign_stmt to caller.
+ (due_to_ifn_deferred_init_p): New.
+ (region_model::check_for_poison): Move extraction of assign_stmt
+ from within_short_circuited_stmt_p to here. Share logic with
+ call to due_to_ifn_deferred_init_p.
+
+2022-07-02 Tim Lange <mail@tim-lange.me>
+
+ PR analyzer/105900
+ * analyzer.opt: Added Wanalyzer-allocation-size.
+ * checker-path.cc (region_creation_event::get_desc): Added call to new
+ virtual function pending_diagnostic::describe_region_creation_event.
+ * checker-path.h: Added region_creation_event::get_desc.
+ * diagnostic-manager.cc (diagnostic_manager::add_event_on_final_node):
+ New function.
+ * diagnostic-manager.h:
+ Added diagnostic_manager::add_event_on_final_node.
+ * pending-diagnostic.h (struct region_creation): New event_desc struct.
+ (pending_diagnostic::describe_region_creation_event): Added virtual
+ function to overwrite description of a region creation.
+ * region-model.cc (class dubious_allocation_size): New class.
+ (capacity_compatible_with_type): New helper function.
+ (class size_visitor): New class.
+ (struct_or_union_with_inheritance_p): New helper function.
+ (is_any_cast_p): New helper function.
+ (region_model::check_region_size): New function.
+ (region_model::set_value): Added call to
+ region_model::check_region_size.
+ * region-model.h (class region_model): New function check_region_size.
+ * svalue.cc (region_svalue::accept): Changed to post-order traversal.
+ (initial_svalue::accept): Likewise.
+ (unaryop_svalue::accept): Likewise.
+ (binop_svalue::accept): Likewise.
+ (sub_svalue::accept): Likewise.
+ (repeated_svalue::accept): Likewise.
+ (bits_within_svalue::accept): Likewise.
+ (widening_svalue::accept): Likewise.
+ (unmergeable_svalue::accept): Likewise.
+ (compound_svalue::accept): Likewise.
+ (conjured_svalue::accept): Likewise.
+ (asm_output_svalue::accept): Likewise.
+ (const_fn_result_svalue::accept): Likewise.
+
+2022-07-02 Immad Mir <mirimmad17@gmail.com>
+
+ PR analyzer/106003
+ * analyzer.opt (Wanalyzer-fd-leak): New option.
+ (Wanalyzer-fd-access-mode-mismatch): New option.
+ (Wanalyzer-fd-use-without-check): New option.
+ (Wanalyzer-fd-double-close): New option.
+ (Wanalyzer-fd-use-after-close): New option.
+ * sm.h (make_fd_state_machine): New decl.
+ * sm.cc (make_checkers): Call make_fd_state_machine.
+ * sm-fd.cc: New file.
+
+2022-06-24 David Malcolm <dmalcolm@redhat.com>
+
+ * call-string.cc: Add includes of "analyzer/analyzer.h"
+ and "analyzer/analyzer-logging.h".
+ (call_string::call_string): Delete copy ctor.
+ (call_string::operator=): Delete.
+ (call_string::operator==): Delete.
+ (call_string::hash): Delete.
+ (call_string::push_call): Make const, returning the resulting
+ call_string.
+ (call_string::pop): Delete.
+ (call_string::cmp_ptr_ptr): New.
+ (call_string::validate): Assert that m_parent is non-NULL, or
+ m_elements is empty.
+ (call_string::call_string): Move default ctor here from
+ call-string.h and reimplement. Add ctor taking a parent
+ and an element.
+ (call_string::~call_string): New.
+ (call_string::recursive_log): New.
+ * call-string.h (call_string::call_string): Move default ctor's
+ defn to call-string.cc. Delete copy ctor. Add ctor taking a
+ parent and an element.
+ (call_string::operator=): Delete.
+ (call_string::operator==): Delete.
+ (call_string::hash): Delete.
+ (call_string::push_call): Make const, returning the resulting
+ call_string.
+ (call_string::pop): Delete decl.
+ (call_string::get_parent): New.
+ (call_string::cmp_ptr_ptr): New decl.
+ (call_string::get_top_of_stack): New.
+ (struct call_string::hashmap_traits_t): New.
+ (class call_string): Add friend class region_model_manager. Add
+ DISABLE_COPY_AND_ASSIGN.
+ (call_string::~call_string): New decl.
+ (call_string::recursive_log): New decl.
+ (call_string::m_parent): New field.
+ (call_string::m_children): New field.
+ * constraint-manager.cc (selftest::test_many_constants): Pass
+ model manager to program_point::origin.
+ * engine.cc (exploded_graph::exploded_graph): Likewise.
+ (exploded_graph::add_function_entry): Likewise for
+ program_point::from_function_entry.
+ (add_tainted_args_callback): Likewise.
+ (exploded_graph::maybe_process_run_of_before_supernode_enodes):
+ Update for change to program_point.get_call_string.
+ (exploded_graph::process_node): Likewise.
+ (class function_call_string_cluster): Convert m_cs from a
+ call_string to a const call_string &.
+ (struct function_call_string): Likewise.
+ (pod_hash_traits<function_call_string>::hash): Use pointer_hash
+ for m_cs.
+ (pod_hash_traits<function_call_string>::equal): Update for change
+ to m_cs.
+ (root_cluster::add_node): Update for change to
+ function_call_string.
+ (viz_callgraph_node::dump_dot): Update for change to call_string.
+ * exploded-graph.h (per_call_string_data::m_key): Convert to a
+ reference.
+ (struct eg_call_string_hash_map_traits): Delete.
+ (exploded_graph::call_string_data_map_t): Remove traits class.
+ * program-point.cc: Move include of "analyzer/call-string.h" to
+ after "analyzer/analyzer-logging.h".
+ (program_point::print): Update for conversion of m_call_string to
+ a pointer.
+ (program_point::to_json): Likewise.
+ (program_point::push_to_call_stack): Update for immutability of
+ call strings.
+ (program_point::pop_from_call_stack): Likewise.
+ (program_point::hash): Use pointer hashing for m_call_string.
+ (program_point::get_function_at_depth): Update for change to
+ m_call_string.
+ (program_point::validate): Update for changes to call_string.
+ (program_point::on_edge): Likewise.
+ (program_point::origin): Move here from call-string.h. Add
+ region_model_manager param and use it to get empty call string.
+ (program_point::from_function_entry): Likewise.
+ (selftest::test_function_point_ordering): Likewise.
+ (selftest::test_function_point_ordering): Likewise.
+ * program-point.h (program_point::program_point): Update for
+ change to m_call_string.
+ (program_point::get_call_string): Likewise.
+ (program_point::get_stack_depth): Likewise.
+ (program_point::origin): Add region_model_manager param, and move
+ defn to call-string.cc.
+ (program_point::from_function_entry): Likewise.
+ (program_point::empty): Drop call_string.
+ (program_point::deleted): Likewise.
+ (program_point::program_point): New private ctor.
+ (program_point::m_call_string): Convert from call_string to const
+ call_string *.
+ * program-state.cc (selftest::test_program_state_merging): Update
+ for call_string changes.
+ (selftest::test_program_state_merging_2): Likewise.
+ * region-model-manager.cc
+ (region_model_manager::region_model_manager): Construct
+ m_empty_call_string.
+ (region_model_manager::log_stats): Log the call strings.
+ * region-model.cc (assert_region_models_merge): Pass the
+ region_model_manager when creating program_point instances.
+ (selftest::test_state_merging): Likewise.
+ (selftest::test_constraint_merging): Likewise.
+ (selftest::test_widening_constraints): Likewise.
+ (selftest::test_iteration_1): Likewise.
+ * region-model.h (region_model_manager::get_empty_call_string):
+ New.
+ (region_model_manager::m_empty_call_string): New.
+ * sm-signal.cc (register_signal_handler::impl_transition): Update
+ for changes to call_string.
+
+2022-06-24 David Malcolm <dmalcolm@redhat.com>
+
+ * call-string.cc (call_string::calc_recursion_depth): Whitespace
+ cleanups.
+ (call_string::cmp): Likewise.
+ (call_string::get_caller_node): Likewise.
+ (call_string::validate): Likewise.
+ * engine.cc (dynamic_call_info_t::add_events_to_path): Likewise.
+ (exploded_graph::get_per_function_data): Likewise.
+ (exploded_graph::maybe_create_dynamic_call): Likewise.
+ (exploded_graph::maybe_create_dynamic_call): Likewise.
+ (exploded_graph::process_node): Likewise.
+
2022-06-16 David Malcolm <dmalcolm@redhat.com>
* varargs.cc (va_arg_type_mismatch::emit): Associate the warning
diff --git a/gcc/analyzer/analyzer.opt b/gcc/analyzer/analyzer.opt
index 4aea52d..5021376 100644
--- a/gcc/analyzer/analyzer.opt
+++ b/gcc/analyzer/analyzer.opt
@@ -54,6 +54,10 @@ The minimum number of supernodes within a function for the analyzer to consider
Common Joined UInteger Var(param_analyzer_max_enodes_for_full_dump) Init(200) Param
The maximum depth of exploded nodes that should appear in a dot dump before switching to a less verbose format.
+Wanalyzer-allocation-size
+Common Var(warn_analyzer_allocation_size) Init(1) Warning
+Warn about code paths in which a pointer to a buffer is assigned to an incompatible type.
+
Wanalyzer-double-fclose
Common Var(warn_analyzer_double_fclose) Init(1) Warning
Warn about code paths in which a stdio FILE can be closed more than once.
@@ -66,6 +70,26 @@ Wanalyzer-exposure-through-output-file
Common Var(warn_analyzer_exposure_through_output_file) Init(1) Warning
Warn about code paths in which sensitive data is written to a file.
+Wanalyzer-fd-access-mode-mismatch
+Common Var(warn_analyzer_fd_mode_mismatch) Init(1) Warning
+Warn about code paths in which read on a write-only file descriptor is attempted, or vice versa.
+
+Wanalyzer-fd-double-close
+Common Var(warn_analyzer_fd_double_close) Init(1) Warning
+Warn about code paths in which a file descriptor can be closed more than once.
+
+Wanalyzer-fd-leak
+Common Var(warn_analyzer_fd_leak) Init(1) Warning
+Warn about code paths in which a file descriptor is not closed.
+
+Wanalyzer-fd-use-after-close
+Common Var(warn_analyzer_fd_use_after_close) Init(1) Warning
+Warn about code paths in which a read or write is performed on a closed file descriptor.
+
+Wanalyzer-fd-use-without-check
+Common Var(warn_analyzer_fd_use_without_check) Init(1) Warning
+Warn about code paths in which a file descriptor is used without being checked for validity.
+
Wanalyzer-file-leak
Common Var(warn_analyzer_file_leak) Init(1) Warning
Warn about code paths in which a stdio FILE is not closed.
diff --git a/gcc/analyzer/call-info.cc b/gcc/analyzer/call-info.cc
index b3ff51e..e1142d7 100644
--- a/gcc/analyzer/call-info.cc
+++ b/gcc/analyzer/call-info.cc
@@ -76,7 +76,6 @@ call_info::print (pretty_printer *pp) const
{
label_text desc (get_desc (pp_show_color (pp)));
pp_string (pp, desc.m_buffer);
- desc.maybe_free ();
}
/* Implementation of custom_edge_info::add_events_to_path vfunc for
diff --git a/gcc/analyzer/call-string.cc b/gcc/analyzer/call-string.cc
index df55e03..a09f569 100644
--- a/gcc/analyzer/call-string.cc
+++ b/gcc/analyzer/call-string.cc
@@ -25,7 +25,6 @@ along with GCC; see the file COPYING3. If not see
#include "tree.h"
#include "options.h"
#include "json.h"
-#include "analyzer/call-string.h"
#include "ordered-hash-map.h"
#include "options.h"
#include "cgraph.h"
@@ -35,6 +34,9 @@ along with GCC; see the file COPYING3. If not see
#include "gimple.h"
#include "gimple-iterator.h"
#include "digraph.h"
+#include "analyzer/analyzer.h"
+#include "analyzer/analyzer-logging.h"
+#include "analyzer/call-string.h"
#include "analyzer/supergraph.h"
#if ENABLE_ANALYZER
@@ -74,45 +76,6 @@ call_string::element_t::get_callee_function () const
return m_callee->get_function ();
}
-/* call_string's copy ctor. */
-
-call_string::call_string (const call_string &other)
-: m_elements (other.m_elements.length ())
-{
- for (const call_string::element_t &e : other.m_elements)
- m_elements.quick_push (e);
-}
-
-/* call_string's assignment operator. */
-
-call_string&
-call_string::operator= (const call_string &other)
-{
- // would be much simpler if we could rely on vec<> assignment op
- m_elements.truncate (0);
- m_elements.reserve (other.m_elements.length (), true);
- call_string::element_t *e;
- int i;
- FOR_EACH_VEC_ELT (other.m_elements, i, e)
- m_elements.quick_push (*e);
- return *this;
-}
-
-/* call_string's equality operator. */
-
-bool
-call_string::operator== (const call_string &other) const
-{
- if (m_elements.length () != other.m_elements.length ())
- return false;
- call_string::element_t *e;
- int i;
- FOR_EACH_VEC_ELT (m_elements, i, e)
- if (*e != other.m_elements[i])
- return false;
- return true;
-}
-
/* Print this to PP. */
void
@@ -160,43 +123,34 @@ call_string::to_json () const
return arr;
}
-/* Generate a hash value for this call_string. */
-
-hashval_t
-call_string::hash () const
-{
- inchash::hash hstate;
- for (const call_string::element_t &e : m_elements)
- hstate.add_ptr (e.m_caller);
- return hstate.end ();
-}
-
-/* Push the return superedge for CALL_SEDGE onto the end of this
- call_string. */
+/* Get or create the call_string resulting from pushing the return
+ superedge for CALL_SEDGE onto the end of this call_string. */
-void
+const call_string *
call_string::push_call (const supergraph &sg,
- const call_superedge *call_sedge)
+ const call_superedge *call_sedge) const
{
gcc_assert (call_sedge);
const return_superedge *return_sedge = call_sedge->get_edge_for_return (sg);
gcc_assert (return_sedge);
- call_string::element_t e (return_sedge->m_dest, return_sedge->m_src);
- m_elements.safe_push (e);
+ return push_call (return_sedge->m_dest, return_sedge->m_src);
}
-void
+/* Get or create the call_string resulting from pushing the call
+ (caller, callee) onto the end of this call_string. */
+
+const call_string *
call_string::push_call (const supernode *caller,
- const supernode *callee)
+ const supernode *callee) const
{
call_string::element_t e (caller, callee);
- m_elements.safe_push (e);
-}
-call_string::element_t
-call_string::pop ()
-{
- return m_elements.pop();
+ if (const call_string **slot = m_children.get (e))
+ return *slot;
+
+ call_string *result = new call_string (*this, e);
+ m_children.put (e, result);
+ return result;
}
/* Count the number of times the top-most call site appears in the
@@ -206,7 +160,7 @@ call_string::calc_recursion_depth () const
{
if (m_elements.is_empty ())
return 0;
- const call_string::element_t top_return_sedge
+ const call_string::element_t top_return_sedge
= m_elements[m_elements.length () - 1];
int result = 0;
@@ -247,12 +201,12 @@ call_string::cmp (const call_string &a,
/* Otherwise, compare the node pairs. */
const call_string::element_t a_node_pair = a[i];
const call_string::element_t b_node_pair = b[i];
- int src_cmp
- = a_node_pair.m_callee->m_index - b_node_pair.m_callee->m_index;
+ int src_cmp
+ = a_node_pair.m_callee->m_index - b_node_pair.m_callee->m_index;
if (src_cmp)
return src_cmp;
- int dest_cmp
- = a_node_pair.m_caller->m_index - b_node_pair.m_caller->m_index;
+ int dest_cmp
+ = a_node_pair.m_caller->m_index - b_node_pair.m_caller->m_index;
if (dest_cmp)
return dest_cmp;
i++;
@@ -260,6 +214,16 @@ call_string::cmp (const call_string &a,
}
}
+/* Comparator for use by vec<const call_string *>::qsort. */
+
+int
+call_string::cmp_ptr_ptr (const void *pa, const void *pb)
+{
+ const call_string *cs_a = *static_cast <const call_string * const *> (pa);
+ const call_string *cs_b = *static_cast <const call_string * const *> (pb);
+ return cmp (*cs_a, *cs_b);
+}
+
/* Return the pointer to callee of the topmost call in the stack,
or NULL if stack is empty. */
const supernode *
@@ -272,7 +236,7 @@ call_string::get_callee_node () const
/* Return the pointer to caller of the topmost call in the stack,
or NULL if stack is empty. */
-const supernode *
+const supernode *
call_string::get_caller_node () const
{
if(m_elements.is_empty ())
@@ -290,15 +254,79 @@ call_string::validate () const
return;
#endif
+ gcc_assert (m_parent || m_elements.length () == 0);
+
/* Each entry's "caller" should be the "callee" of the previous entry. */
call_string::element_t *e;
int i;
FOR_EACH_VEC_ELT (m_elements, i, e)
if (i > 0)
+ gcc_assert (e->get_caller_function () ==
+ m_elements[i - 1].get_callee_function ());
+}
+
+/* ctor for the root/empty call_string. */
+
+call_string::call_string ()
+: m_parent (NULL), m_elements ()
+{
+}
+
+/* ctor for a child call_string. */
+
+call_string::call_string (const call_string &parent, const element_t &to_push)
+: m_parent (&parent),
+ m_elements (parent.m_elements.length () + 1)
+{
+ m_elements.splice (parent.m_elements);
+ m_elements.quick_push (to_push);
+}
+
+/* dtor for call_string: recursively delete children. */
+
+call_string::~call_string ()
+{
+ for (auto child_iter : m_children)
+ delete child_iter.second;
+}
+
+/* Log this call_string and all its descendents recursively to LOGGER,
+ using indentation and elision to highlight the hierarchy. */
+
+void
+call_string::recursive_log (logger *logger) const
+{
+ logger->start_log_line ();
+ pretty_printer *pp = logger->get_printer ();
+ for (unsigned i = 0; i < length (); i++)
+ pp_string (pp, " ");
+ if (length () > 0)
{
- gcc_assert (e->get_caller_function () ==
- m_elements[i - 1].get_callee_function ());
+ pp_string (pp, "[");
+ /* Elide all but the final element, since they are shared with
+ the parent call_string. */
+ for (unsigned i = 0; i < length (); i++)
+ pp_string (pp, "..., ");
+ /* Log the final element in detail. */
+ const element_t *e = &m_elements[m_elements.length () - 1];
+ pp_printf (pp, "(SN: %i -> SN: %i in %s)]",
+ e->m_callee->m_index, e->m_caller->m_index,
+ function_name (e->m_caller->m_fun));
}
+ else
+ pp_string (pp, "[]");
+ logger->end_log_line ();
+
+ /* Recurse into children. */
+ {
+ auto_vec<const call_string *> children (m_children.elements ());
+ for (auto iter : m_children)
+ children.safe_push (iter.second);
+ children.qsort (call_string::cmp_ptr_ptr);
+
+ for (auto iter : children)
+ iter->recursive_log (logger);
+ }
}
#endif /* #if ENABLE_ANALYZER */
diff --git a/gcc/analyzer/call-string.h b/gcc/analyzer/call-string.h
index 87d04a1..c3cea90 100644
--- a/gcc/analyzer/call-string.h
+++ b/gcc/analyzer/call-string.h
@@ -36,8 +36,13 @@ class return_superedge;
i.e. that we return to the same callsite that called us.
The class stores returning calls ( which may be represented by a
- returning superedge ). We do so because this is what we need to compare
- against. */
+ returning superedge ). We do so because this is what we need to compare
+ against.
+
+ Instances of call_string are consolidated by the region_model_manager,
+ which effectively owns them: it owns the root/empty call_string, and each
+ call_string instance tracks its children, lazily creating them on demand,
+ so that the call_string instances form a tree-like hierarchy in memory. */
class call_string
{
@@ -60,38 +65,31 @@ public:
/* Accessors */
function *get_caller_function () const;
function *get_callee_function () const;
-
+
const supernode *m_caller;
const supernode *m_callee;
};
- call_string () : m_elements () {}
- call_string (const call_string &other);
- call_string& operator= (const call_string &other);
-
- bool operator== (const call_string &other) const;
-
void print (pretty_printer *pp) const;
json::value *to_json () const;
- hashval_t hash () const;
-
bool empty_p () const { return m_elements.is_empty (); }
- void push_call (const supergraph &sg,
- const call_superedge *sedge);
-
- void push_call (const supernode *src,
- const supernode *dest);
+ const call_string *push_call (const supergraph &sg,
+ const call_superedge *sedge) const;
- element_t pop ();
+ const call_string *push_call (const supernode *src,
+ const supernode *dest) const;
+ const call_string *get_parent () const { return m_parent; }
int calc_recursion_depth () const;
static int cmp (const call_string &a,
const call_string &b);
+ static int cmp_ptr_ptr (const void *, const void *);
+
/* Accessors */
const supernode *get_callee_node () const;
@@ -101,11 +99,69 @@ public:
{
return m_elements[idx];
}
+ const element_t &get_top_of_stack () const
+ {
+ gcc_assert (m_elements.length () > 0);
+ return m_elements[m_elements.length () - 1];
+ }
void validate () const;
private:
+ struct hashmap_traits_t
+ {
+ typedef element_t key_type;
+ typedef const call_string *value_type;
+
+ static const bool maybe_mx = false;
+ static inline hashval_t hash (const key_type &k)
+ {
+ inchash::hash hstate;
+ hstate.add_ptr (k.m_caller);
+ hstate.add_ptr (k.m_callee);
+ return hstate.end ();
+ }
+ static inline bool equal_keys (const key_type &k1, const key_type &k2)
+ {
+ return k1 == k2;
+ }
+ template <typename T> static inline void remove (T &entry)
+ {
+ entry.m_key = element_t (NULL, NULL);
+ }
+ static const bool empty_zero_p = true;
+ template <typename T> static inline bool is_empty (const T &entry)
+ {
+ return entry.m_key.m_caller == NULL;
+ }
+ template <typename T> static inline bool is_deleted (const T &entry)
+ {
+ return entry.m_key.m_caller == reinterpret_cast<const supernode *> (1);
+ }
+ template <typename T> static inline void mark_empty (T &entry)
+ {
+ entry.m_key = element_t (NULL, NULL);
+ entry.m_value = NULL;
+ }
+ template <typename T> static inline void mark_deleted (T &entry)
+ {
+ entry.m_key.m_caller = reinterpret_cast<const supernode *> (1);
+ }
+ };
+
+ friend class region_model_manager;
+
+ DISABLE_COPY_AND_ASSIGN (call_string);
+
+ call_string ();
+ call_string (const call_string &parent, const element_t &to_push);
+ ~call_string ();
+
+ void recursive_log (logger *logger) const;
+
+ const call_string *m_parent;
auto_vec<element_t> m_elements;
+ mutable hash_map<element_t, const call_string *, hashmap_traits_t> m_children;
};
} // namespace ana
diff --git a/gcc/analyzer/checker-path.cc b/gcc/analyzer/checker-path.cc
index 0133dc9..211cf3e 100644
--- a/gcc/analyzer/checker-path.cc
+++ b/gcc/analyzer/checker-path.cc
@@ -196,7 +196,6 @@ checker_event::dump (pretty_printer *pp) const
label_text event_desc (get_desc (false));
pp_printf (pp, "\"%s\" (depth %i",
event_desc.m_buffer, m_effective_depth);
- event_desc.maybe_free ();
if (m_effective_depth != m_original_depth)
pp_printf (pp, " corrected from %i",
@@ -235,7 +234,6 @@ checker_event::prepare_for_emission (checker_path *,
m_emission_id = emission_id;
label_text desc = get_desc (false);
- desc.maybe_free ();
}
/* class debug_event : public checker_event. */
@@ -302,8 +300,17 @@ region_creation_event::region_creation_event (const region *reg,
region_creation_event. */
label_text
-region_creation_event::get_desc (bool) const
+region_creation_event::get_desc (bool can_colorize) const
{
+ if (m_pending_diagnostic)
+ {
+ label_text custom_desc
+ = m_pending_diagnostic->describe_region_creation_event
+ (evdesc::region_creation (can_colorize, m_reg));
+ if (custom_desc.m_buffer)
+ return custom_desc;
+ }
+
switch (m_reg->get_memory_space ())
{
default:
@@ -393,9 +400,8 @@ state_change_event::get_desc (bool can_colorize) const
meaning.dump_to_pp (&meaning_pp);
/* Append debug version. */
- label_text result;
if (m_origin)
- result = make_label_text
+ return make_label_text
(can_colorize,
"%s (state of %qE: %qs -> %qs, origin: %qE, meaning: %s)",
custom_desc.m_buffer,
@@ -405,7 +411,7 @@ state_change_event::get_desc (bool can_colorize) const
origin,
pp_formatted_text (&meaning_pp));
else
- result = make_label_text
+ return make_label_text
(can_colorize,
"%s (state of %qE: %qs -> %qs, NULL origin, meaning: %s)",
custom_desc.m_buffer,
@@ -413,9 +419,6 @@ state_change_event::get_desc (bool can_colorize) const
m_from->get_name (),
m_to->get_name (),
pp_formatted_text (&meaning_pp));
-
- custom_desc.maybe_free ();
- return result;
}
else
return custom_desc;
@@ -426,28 +429,24 @@ state_change_event::get_desc (bool can_colorize) const
if (m_sval)
{
label_text sval_desc = m_sval->get_desc ();
- label_text result;
if (m_origin)
{
label_text origin_desc = m_origin->get_desc ();
- result = make_label_text
+ return make_label_text
(can_colorize,
"state of %qs: %qs -> %qs (origin: %qs)",
sval_desc.m_buffer,
m_from->get_name (),
m_to->get_name (),
origin_desc.m_buffer);
- origin_desc.maybe_free ();
}
else
- result = make_label_text
+ return make_label_text
(can_colorize,
"state of %qs: %qs -> %qs (NULL origin)",
sval_desc.m_buffer,
m_from->get_name (),
m_to->get_name ());
- sval_desc.maybe_free ();
- return result;
}
else
{
@@ -513,7 +512,6 @@ superedge_event::should_filter_p (int verbosity) const
gcc_assert (desc.m_buffer);
if (desc.m_buffer[0] == '\0')
return true;
- desc.maybe_free ();
}
}
break;
@@ -596,56 +594,38 @@ label_text
start_cfg_edge_event::get_desc (bool can_colorize) const
{
bool user_facing = !flag_analyzer_verbose_edges;
- char *edge_desc = m_sedge->get_description (user_facing);
+ label_text edge_desc (m_sedge->get_description (user_facing));
if (user_facing)
{
- if (edge_desc && strlen (edge_desc) > 0)
+ if (edge_desc.m_buffer && strlen (edge_desc.m_buffer) > 0)
{
label_text cond_desc = maybe_describe_condition (can_colorize);
label_text result;
if (cond_desc.m_buffer)
- {
- result = make_label_text (can_colorize,
- "following %qs branch (%s)...",
- edge_desc, cond_desc.m_buffer);
- cond_desc.maybe_free ();
- }
+ return make_label_text (can_colorize,
+ "following %qs branch (%s)...",
+ edge_desc.m_buffer, cond_desc.m_buffer);
else
- {
- result = make_label_text (can_colorize,
- "following %qs branch...",
- edge_desc);
- }
- free (edge_desc);
- return result;
+ return make_label_text (can_colorize,
+ "following %qs branch...",
+ edge_desc.m_buffer);
}
else
- {
- free (edge_desc);
- return label_text::borrow ("");
- }
+ return label_text::borrow ("");
}
else
{
- if (strlen (edge_desc) > 0)
- {
- label_text result
- = make_label_text (can_colorize,
- "taking %qs edge SN:%i -> SN:%i",
- edge_desc,
- m_sedge->m_src->m_index,
- m_sedge->m_dest->m_index);
- free (edge_desc);
- return result;
- }
+ if (strlen (edge_desc.m_buffer) > 0)
+ return make_label_text (can_colorize,
+ "taking %qs edge SN:%i -> SN:%i",
+ edge_desc.m_buffer,
+ m_sedge->m_src->m_index,
+ m_sedge->m_dest->m_index);
else
- {
- free (edge_desc);
- return make_label_text (can_colorize,
- "taking edge SN:%i -> SN:%i",
- m_sedge->m_src->m_index,
- m_sedge->m_dest->m_index);
- }
+ return make_label_text (can_colorize,
+ "taking edge SN:%i -> SN:%i",
+ m_sedge->m_src->m_index,
+ m_sedge->m_dest->m_index);
}
}
@@ -1129,19 +1109,16 @@ warning_event::get_desc (bool can_colorize) const
{
if (m_sm && flag_analyzer_verbose_state_changes)
{
- label_text result;
if (var)
- result = make_label_text (can_colorize,
- "%s (%qE is in state %qs)",
- ev_desc.m_buffer,
- var, m_state->get_name ());
+ return make_label_text (can_colorize,
+ "%s (%qE is in state %qs)",
+ ev_desc.m_buffer,
+ var, m_state->get_name ());
else
- result = make_label_text (can_colorize,
- "%s (in global state %qs)",
- ev_desc.m_buffer,
- m_state->get_name ());
- ev_desc.maybe_free ();
- return result;
+ return make_label_text (can_colorize,
+ "%s (in global state %qs)",
+ ev_desc.m_buffer,
+ m_state->get_name ());
}
else
return ev_desc;
@@ -1187,7 +1164,6 @@ checker_path::dump (pretty_printer *pp) const
pp_string (pp, ", ");
label_text event_desc (e->get_desc (false));
pp_printf (pp, "\"%s\"", event_desc.m_buffer);
- event_desc.maybe_free ();
}
pp_character (pp, ']');
}
@@ -1228,7 +1204,6 @@ checker_path::debug () const
i,
event_kind_to_string (m_events[i]->m_kind),
event_desc.m_buffer);
- event_desc.maybe_free ();
}
}
diff --git a/gcc/analyzer/checker-path.h b/gcc/analyzer/checker-path.h
index 24decf5..8e48d8a 100644
--- a/gcc/analyzer/checker-path.h
+++ b/gcc/analyzer/checker-path.h
@@ -219,7 +219,7 @@ public:
region_creation_event (const region *reg,
location_t loc, tree fndecl, int depth);
- label_text get_desc (bool) const final override;
+ label_text get_desc (bool can_colorize) const final override;
private:
const region *m_reg;
diff --git a/gcc/analyzer/constraint-manager.cc b/gcc/analyzer/constraint-manager.cc
index 02e8ce9..4133a13 100644
--- a/gcc/analyzer/constraint-manager.cc
+++ b/gcc/analyzer/constraint-manager.cc
@@ -3923,10 +3923,10 @@ test_equality ()
static void
test_many_constants ()
{
- program_point point (program_point::origin ());
+ region_model_manager mgr;
+ program_point point (program_point::origin (mgr));
tree a = build_global_decl ("a", integer_type_node);
- region_model_manager mgr;
region_model model (&mgr);
auto_vec<tree> constants;
for (int i = 0; i < 20; i++)
diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc
index 8ea1f617..083f66b 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -1476,6 +1476,67 @@ diagnostic_manager::build_emission_path (const path_builder &pb,
const exploded_edge *eedge = epath.m_edges[i];
add_events_for_eedge (pb, *eedge, emission_path, &interest);
}
+ add_event_on_final_node (epath.get_final_enode (), emission_path, &interest);
+}
+
+/* Emit a region_creation_event when requested on the last statement in
+ the path.
+
+ If a region_creation_event should be emitted on the last statement of the
+ path, we need to peek to the successors to get whether the final enode
+ created a region.
+*/
+
+void
+diagnostic_manager::add_event_on_final_node (const exploded_node *final_enode,
+ checker_path *emission_path,
+ interesting_t *interest) const
+{
+ const program_point &src_point = final_enode->get_point ();
+ const int src_stack_depth = src_point.get_stack_depth ();
+ const program_state &src_state = final_enode->get_state ();
+ const region_model *src_model = src_state.m_region_model;
+
+ unsigned j;
+ exploded_edge *e;
+ FOR_EACH_VEC_ELT (final_enode->m_succs, j, e)
+ {
+ exploded_node *dst = e->m_dest;
+ const program_state &dst_state = dst->get_state ();
+ const region_model *dst_model = dst_state.m_region_model;
+ if (src_model->get_dynamic_extents ()
+ != dst_model->get_dynamic_extents ())
+ {
+ unsigned i;
+ const region *reg;
+ bool emitted = false;
+ FOR_EACH_VEC_ELT (interest->m_region_creation, i, reg)
+ {
+ const region *base_reg = reg->get_base_region ();
+ const svalue *old_extents
+ = src_model->get_dynamic_extents (base_reg);
+ const svalue *new_extents
+ = dst_model->get_dynamic_extents (base_reg);
+ if (old_extents == NULL && new_extents != NULL)
+ switch (base_reg->get_kind ())
+ {
+ default:
+ break;
+ case RK_HEAP_ALLOCATED:
+ case RK_ALLOCA:
+ emission_path->add_region_creation_event
+ (reg,
+ src_point.get_location (),
+ src_point.get_fndecl (),
+ src_stack_depth);
+ emitted = true;
+ break;
+ }
+ }
+ if (emitted)
+ break;
+ }
+ }
}
/* Subclass of state_change_visitor that creates state_change_event
@@ -2237,7 +2298,6 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
log ("considering event %i (%s), with sval: %qs, state: %qs",
idx, event_kind_to_string (base_event->m_kind),
sval_desc.m_buffer, state->get_name ());
- sval_desc.maybe_free ();
}
else
log ("considering event %i (%s), with global state: %qs",
@@ -2305,8 +2365,6 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
" switching var of interest from %qs to %qs",
idx, sval_desc.m_buffer,
origin_sval_desc.m_buffer);
- sval_desc.maybe_free ();
- origin_sval_desc.maybe_free ();
}
sval = state_change->m_origin;
}
@@ -2334,7 +2392,6 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
else
log ("filtering event %i: state change to %qs",
idx, change_sval_desc.m_buffer);
- change_sval_desc.maybe_free ();
}
else
log ("filtering event %i: global state change", idx);
@@ -2404,7 +2461,6 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
" recording critical state for %qs at call"
" from %qE in callee to %qE in caller",
idx, sval_desc.m_buffer, callee_var, caller_var);
- sval_desc.maybe_free ();
}
if (expr.param_p ())
event->record_critical_state (caller_var, state);
@@ -2448,7 +2504,6 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
" recording critical state for %qs at return"
" from %qE in caller to %qE in callee",
idx, sval_desc.m_buffer, callee_var, callee_var);
- sval_desc.maybe_free ();
}
if (expr.return_value_p ())
event->record_critical_state (callee_var, state);
@@ -2532,7 +2587,6 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
log ("filtering events %i-%i:"
" irrelevant call/entry/return: %s",
idx, idx + 2, desc.m_buffer);
- desc.maybe_free ();
}
path->delete_event (idx + 2);
path->delete_event (idx + 1);
@@ -2555,7 +2609,6 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
log ("filtering events %i-%i:"
" irrelevant call/return: %s",
idx, idx + 1, desc.m_buffer);
- desc.maybe_free ();
}
path->delete_event (idx + 1);
path->delete_event (idx);
diff --git a/gcc/analyzer/diagnostic-manager.h b/gcc/analyzer/diagnostic-manager.h
index b9bb7c8..266eed8 100644
--- a/gcc/analyzer/diagnostic-manager.h
+++ b/gcc/analyzer/diagnostic-manager.h
@@ -149,6 +149,10 @@ private:
const exploded_path &epath,
checker_path *emission_path) const;
+ void add_event_on_final_node (const exploded_node *final_enode,
+ checker_path *emission_path,
+ interesting_t *interest) const;
+
void add_events_for_eedge (const path_builder &pb,
const exploded_edge &eedge,
checker_path *emission_path,
diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc
index 7237cc1..888123f 100644
--- a/gcc/analyzer/engine.cc
+++ b/gcc/analyzer/engine.cc
@@ -1853,18 +1853,19 @@ dynamic_call_info_t::add_events_to_path (checker_path *emission_path,
const int dest_stack_depth = dest_point.get_stack_depth ();
if (m_is_returning_call)
- emission_path->add_event (new return_event (eedge, (m_dynamic_call
- ? m_dynamic_call->location
- : UNKNOWN_LOCATION),
- dest_point.get_fndecl (),
- dest_stack_depth));
+ emission_path->add_event (new return_event (eedge,
+ (m_dynamic_call
+ ? m_dynamic_call->location
+ : UNKNOWN_LOCATION),
+ dest_point.get_fndecl (),
+ dest_stack_depth));
else
- emission_path->add_event (new call_event (eedge, (m_dynamic_call
- ? m_dynamic_call->location
- : UNKNOWN_LOCATION),
- src_point.get_fndecl (),
- src_stack_depth));
-
+ emission_path->add_event (new call_event (eedge,
+ (m_dynamic_call
+ ? m_dynamic_call->location
+ : UNKNOWN_LOCATION),
+ src_point.get_fndecl (),
+ src_stack_depth));
}
/* class rewind_info_t : public custom_edge_info. */
@@ -2373,8 +2374,9 @@ exploded_graph::exploded_graph (const supergraph &sg, logger *logger,
m_functionless_stats (m_sg.num_nodes ()),
m_PK_AFTER_SUPERNODE_per_snode (m_sg.num_nodes ())
{
- m_origin = get_or_create_node (program_point::origin (),
- program_state (ext_state), NULL);
+ m_origin = get_or_create_node
+ (program_point::origin (*ext_state.get_model_manager ()),
+ program_state (ext_state), NULL);
for (int i = 0; i < m_sg.num_nodes (); i++)
m_PK_AFTER_SUPERNODE_per_snode.quick_push (i);
}
@@ -2525,7 +2527,9 @@ exploded_graph::add_function_entry (function *fun)
return NULL;
}
- program_point point = program_point::from_function_entry (m_sg, fun);
+ program_point point
+ = program_point::from_function_entry (*m_ext_state.get_model_manager (),
+ m_sg, fun);
program_state state (m_ext_state);
state.push_frame (m_ext_state, fun);
@@ -2825,7 +2829,7 @@ per_function_data *
exploded_graph::get_per_function_data (function *fun) const
{
if (per_function_data **slot
- = const_cast <per_function_data_t &> (m_per_function_data).get (fun))
+ = const_cast <per_function_data_t &> (m_per_function_data).get (fun))
return *slot;
return NULL;
@@ -2978,7 +2982,8 @@ add_tainted_args_callback (exploded_graph *eg, tree field, tree fndecl,
gcc_assert (fun);
program_point point
- = program_point::from_function_entry (eg->get_supergraph (), fun);
+ = program_point::from_function_entry (*ext_state.get_model_manager (),
+ eg->get_supergraph (), fun);
program_state state (ext_state);
state.push_frame (ext_state, fun);
@@ -3340,7 +3345,7 @@ maybe_process_run_of_before_supernode_enodes (exploded_node *enode)
if (point_2.get_kind () == PK_BEFORE_SUPERNODE
&& point_2.get_supernode () == snode
- && point_2.get_call_string () == point.get_call_string ())
+ && &point_2.get_call_string () == &point.get_call_string ())
{
enodes.safe_push (enode_2);
m_worklist.take_next ();
@@ -3537,7 +3542,7 @@ state_change_requires_new_enode_p (const program_state &old_state,
return false;
}
-/* Create enodes and eedges for the function calls that doesn't have an
+/* Create enodes and eedges for the function calls that doesn't have an
underlying call superedge.
Such case occurs when GCC's middle end didn't know which function to
@@ -3548,12 +3553,12 @@ state_change_requires_new_enode_p (const program_state &old_state,
bool
exploded_graph::maybe_create_dynamic_call (const gcall *call,
- tree fn_decl,
- exploded_node *node,
- program_state next_state,
- program_point &next_point,
- uncertainty_t *uncertainty,
- logger *logger)
+ tree fn_decl,
+ exploded_node *node,
+ program_state next_state,
+ program_point &next_point,
+ uncertainty_t *uncertainty,
+ logger *logger)
{
LOG_FUNC (logger);
@@ -3566,44 +3571,44 @@ exploded_graph::maybe_create_dynamic_call (const gcall *call,
supernode *sn_exit = sg.get_node_for_function_exit (fun);
program_point new_point
- = program_point::before_supernode (sn_entry,
- NULL,
- this_point->get_call_string ());
+ = program_point::before_supernode (sn_entry,
+ NULL,
+ this_point->get_call_string ());
new_point.push_to_call_stack (sn_exit,
- next_point.get_supernode());
+ next_point.get_supernode());
/* Impose a maximum recursion depth and don't analyze paths
- that exceed it further.
- This is something of a blunt workaround, but it only
- applies to recursion (and mutual recursion), not to
- general call stacks. */
+ that exceed it further.
+ This is something of a blunt workaround, but it only
+ applies to recursion (and mutual recursion), not to
+ general call stacks. */
if (new_point.get_call_string ().calc_recursion_depth ()
- > param_analyzer_max_recursion_depth)
+ > param_analyzer_max_recursion_depth)
{
- if (logger)
- logger->log ("rejecting call edge: recursion limit exceeded");
- return false;
+ if (logger)
+ logger->log ("rejecting call edge: recursion limit exceeded");
+ return false;
}
next_state.push_call (*this, node, call, uncertainty);
if (next_state.m_valid)
- {
- if (logger)
- logger->log ("Discovered call to %s [SN: %i -> SN: %i]",
- function_name(fun),
- this_point->get_supernode ()->m_index,
- sn_entry->m_index);
-
- exploded_node *enode = get_or_create_node (new_point,
- next_state,
- node);
- if (enode)
- add_edge (node,enode, NULL,
- new dynamic_call_info_t (call));
- return true;
- }
+ {
+ if (logger)
+ logger->log ("Discovered call to %s [SN: %i -> SN: %i]",
+ function_name(fun),
+ this_point->get_supernode ()->m_index,
+ sn_entry->m_index);
+
+ exploded_node *enode = get_or_create_node (new_point,
+ next_state,
+ node);
+ if (enode)
+ add_edge (node,enode, NULL,
+ new dynamic_call_info_t (call));
+ return true;
+ }
}
return false;
}
@@ -3933,8 +3938,8 @@ exploded_graph::process_node (exploded_node *node)
break;
case PK_AFTER_SUPERNODE:
{
- bool found_a_superedge = false;
- bool is_an_exit_block = false;
+ bool found_a_superedge = false;
+ bool is_an_exit_block = false;
/* If this is an EXIT BB, detect leaks, and potentially
create a function summary. */
if (point.get_supernode ()->return_p ())
@@ -3978,54 +3983,54 @@ exploded_graph::process_node (exploded_node *node)
program_state next_state (state);
uncertainty_t uncertainty;
- /* Make use the current state and try to discover and analyse
- indirect function calls (a call that doesn't have an underlying
- cgraph edge representing call).
-
- Some examples of such calls are virtual function calls
- and calls that happen via a function pointer. */
- if (succ->m_kind == SUPEREDGE_INTRAPROCEDURAL_CALL
- && !(succ->get_any_callgraph_edge ()))
- {
- const gcall *call
- = point.get_supernode ()->get_final_call ();
-
- impl_region_model_context ctxt (*this,
- node,
- &state,
- &next_state,
- &uncertainty,
+ /* Make use the current state and try to discover and analyse
+ indirect function calls (a call that doesn't have an underlying
+ cgraph edge representing call).
+
+ Some examples of such calls are virtual function calls
+ and calls that happen via a function pointer. */
+ if (succ->m_kind == SUPEREDGE_INTRAPROCEDURAL_CALL
+ && !(succ->get_any_callgraph_edge ()))
+ {
+ const gcall *call
+ = point.get_supernode ()->get_final_call ();
+
+ impl_region_model_context ctxt (*this,
+ node,
+ &state,
+ &next_state,
+ &uncertainty,
NULL,
- point.get_stmt());
-
- region_model *model = state.m_region_model;
- bool call_discovered = false;
-
- if (tree fn_decl = model->get_fndecl_for_call(call,&ctxt))
- call_discovered = maybe_create_dynamic_call (call,
- fn_decl,
- node,
- next_state,
- next_point,
- &uncertainty,
- logger);
- if (!call_discovered)
- {
- /* An unknown function or a special function was called
- at this point, in such case, don't terminate the
- analysis of the current function.
-
- The analyzer handles calls to such functions while
- analysing the stmt itself, so the function call
- must have been handled by the anlyzer till now. */
- exploded_node *next
- = get_or_create_node (next_point,
- next_state,
- node);
- if (next)
- add_edge (node, next, succ);
- }
- }
+ point.get_stmt());
+
+ region_model *model = state.m_region_model;
+ bool call_discovered = false;
+
+ if (tree fn_decl = model->get_fndecl_for_call (call, &ctxt))
+ call_discovered = maybe_create_dynamic_call (call,
+ fn_decl,
+ node,
+ next_state,
+ next_point,
+ &uncertainty,
+ logger);
+ if (!call_discovered)
+ {
+ /* An unknown function or a special function was called
+ at this point, in such case, don't terminate the
+ analysis of the current function.
+
+ The analyzer handles calls to such functions while
+ analysing the stmt itself, so the function call
+ must have been handled by the anlyzer till now. */
+ exploded_node *next
+ = get_or_create_node (next_point,
+ next_state,
+ node);
+ if (next)
+ add_edge (node, next, succ);
+ }
+ }
if (!node->on_edge (*this, succ, &next_point, &next_state,
&uncertainty))
@@ -4041,37 +4046,37 @@ exploded_graph::process_node (exploded_node *node)
add_edge (node, next, succ);
}
- /* Return from the calls which doesn't have a return superedge.
- Such case occurs when GCC's middle end didn't knew which function to
- call but analyzer did. */
- if((is_an_exit_block && !found_a_superedge)
- && (!point.get_call_string ().empty_p ()))
- {
- const call_string cs = point.get_call_string ();
- program_point next_point
- = program_point::before_supernode (cs.get_caller_node (),
- NULL,
- cs);
- program_state next_state (state);
- uncertainty_t uncertainty;
-
- const gcall *call
- = next_point.get_supernode ()->get_returning_call ();
-
- if(call)
- next_state.returning_call (*this, node, call, &uncertainty);
-
- if (next_state.m_valid)
- {
- next_point.pop_from_call_stack ();
- exploded_node *enode = get_or_create_node (next_point,
- next_state,
- node);
- if (enode)
- add_edge (node, enode, NULL,
- new dynamic_call_info_t (call, true));
- }
- }
+ /* Return from the calls which doesn't have a return superedge.
+ Such case occurs when GCC's middle end didn't knew which function to
+ call but analyzer did. */
+ if ((is_an_exit_block && !found_a_superedge)
+ && (!point.get_call_string ().empty_p ()))
+ {
+ const call_string &cs = point.get_call_string ();
+ program_point next_point
+ = program_point::before_supernode (cs.get_caller_node (),
+ NULL,
+ cs);
+ program_state next_state (state);
+ uncertainty_t uncertainty;
+
+ const gcall *call
+ = next_point.get_supernode ()->get_returning_call ();
+
+ if (call)
+ next_state.returning_call (*this, node, call, &uncertainty);
+
+ if (next_state.m_valid)
+ {
+ next_point.pop_from_call_stack ();
+ exploded_node *enode = get_or_create_node (next_point,
+ next_state,
+ node);
+ if (enode)
+ add_edge (node, enode, NULL,
+ new dynamic_call_info_t (call, true));
+ }
+ }
}
break;
}
@@ -4581,12 +4586,11 @@ feasibility_state::maybe_update_for_edge (logger *logger,
{
if (logger)
{
- char *desc = sedge->get_description (false);
+ label_text desc (sedge->get_description (false));
logger->log (" sedge: SN:%i -> SN:%i %s",
sedge->m_src->m_index,
sedge->m_dest->m_index,
- desc);
- free (desc);
+ desc.m_buffer);
}
const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
@@ -4735,7 +4739,7 @@ private:
class function_call_string_cluster : public exploded_cluster
{
public:
- function_call_string_cluster (function *fun, call_string cs)
+ function_call_string_cluster (function *fun, const call_string &cs)
: m_fun (fun), m_cs (cs) {}
~function_call_string_cluster ()
@@ -4810,7 +4814,7 @@ public:
private:
function *m_fun;
- call_string m_cs;
+ const call_string &m_cs;
typedef ordered_hash_map<const supernode *, supernode_cluster *> map_t;
map_t m_map;
};
@@ -4819,14 +4823,15 @@ private:
struct function_call_string
{
- function_call_string (function *fun, call_string cs)
+ function_call_string (function *fun, const call_string *cs)
: m_fun (fun), m_cs (cs)
{
gcc_assert (fun);
+ gcc_assert (cs);
}
function *m_fun;
- call_string m_cs;
+ const call_string *m_cs;
};
} // namespace ana
@@ -4841,7 +4846,8 @@ template <>
inline hashval_t
pod_hash_traits<function_call_string>::hash (value_type v)
{
- return pointer_hash <function>::hash (v.m_fun) ^ v.m_cs.hash ();
+ return (pointer_hash <function>::hash (v.m_fun)
+ ^ pointer_hash <const call_string>::hash (v.m_cs));
}
template <>
@@ -4849,7 +4855,7 @@ inline bool
pod_hash_traits<function_call_string>::equal (const value_type &existing,
const value_type &candidate)
{
- return existing.m_fun == candidate.m_fun && existing.m_cs == candidate.m_cs;
+ return existing.m_fun == candidate.m_fun && &existing.m_cs == &candidate.m_cs;
}
template <>
inline void
@@ -4924,7 +4930,7 @@ public:
}
const call_string &cs = en->get_point ().get_call_string ();
- function_call_string key (fun, cs);
+ function_call_string key (fun, &cs);
function_call_string_cluster **slot = m_map.get (key);
if (slot)
(*slot)->add_node (en);
@@ -4938,11 +4944,6 @@ public:
}
private:
- /* This can't be an ordered_hash_map, as we can't store vec<call_string>,
- since it's not a POD; vec<>::quick_push has:
- *slot = obj;
- and the slot isn't initialized, so the assignment op dies when cleaning up
- un-inited *slot (within the truncate call). */
typedef hash_map<function_call_string, function_call_string_cluster *> map_t;
map_t m_map;
@@ -5318,7 +5319,7 @@ public:
FOR_EACH_VEC_ELT (args.m_eg->m_nodes, i, enode)
{
if (enode->get_point ().get_function () == m_fun
- && enode->get_point ().get_call_string () == *cs)
+ && &enode->get_point ().get_call_string () == cs)
num_enodes++;
}
if (num_enodes > 0)
diff --git a/gcc/analyzer/exploded-graph.h b/gcc/analyzer/exploded-graph.h
index 101f4f9..0613f55 100644
--- a/gcc/analyzer/exploded-graph.h
+++ b/gcc/analyzer/exploded-graph.h
@@ -599,65 +599,10 @@ struct per_call_string_data
: m_key (key), m_stats (num_supernodes)
{}
- const call_string m_key;
+ const call_string &m_key;
stats m_stats;
};
-/* Traits class for storing per-call_string data within
- an exploded_graph. */
-
-struct eg_call_string_hash_map_traits
-{
- typedef const call_string *key_type;
- typedef per_call_string_data *value_type;
- typedef per_call_string_data *compare_type;
-
- static inline hashval_t hash (const key_type &k)
- {
- gcc_assert (k != NULL);
- gcc_assert (k != reinterpret_cast<key_type> (1));
- return k->hash ();
- }
- static inline bool equal_keys (const key_type &k1, const key_type &k2)
- {
- gcc_assert (k1 != NULL);
- gcc_assert (k2 != NULL);
- gcc_assert (k1 != reinterpret_cast<key_type> (1));
- gcc_assert (k2 != reinterpret_cast<key_type> (1));
- if (k1 && k2)
- return *k1 == *k2;
- else
- /* Otherwise they must both be non-NULL. */
- return k1 == k2;
- }
- template <typename T>
- static inline void remove (T &)
- {
- /* empty; the nodes are handled elsewhere. */
- }
- template <typename T>
- static inline void mark_deleted (T &entry)
- {
- entry.m_key = reinterpret_cast<key_type> (1);
- }
- template <typename T>
- static inline void mark_empty (T &entry)
- {
- entry.m_key = NULL;
- }
- template <typename T>
- static inline bool is_deleted (const T &entry)
- {
- return entry.m_key == reinterpret_cast<key_type> (1);
- }
- template <typename T>
- static inline bool is_empty (const T &entry)
- {
- return entry.m_key == NULL;
- }
- static const bool empty_zero_p = false;
-};
-
/* Data about a particular function within an exploded_graph. */
struct per_function_data
@@ -791,8 +736,8 @@ private:
class exploded_graph : public digraph<eg_traits>
{
public:
- typedef hash_map <const call_string *, per_call_string_data *,
- eg_call_string_hash_map_traits> call_string_data_map_t;
+ typedef hash_map <const call_string *,
+ per_call_string_data *> call_string_data_map_t;
exploded_graph (const supergraph &sg, logger *logger,
const extrinsic_state &ext_state,
diff --git a/gcc/analyzer/pending-diagnostic.h b/gcc/analyzer/pending-diagnostic.h
index 9e1c656..4ea469e 100644
--- a/gcc/analyzer/pending-diagnostic.h
+++ b/gcc/analyzer/pending-diagnostic.h
@@ -58,6 +58,17 @@ struct event_desc
bool m_colorize;
};
+/* For use by pending_diagnostic::describe_region_creation. */
+
+struct region_creation : public event_desc
+{
+ region_creation (bool colorize, const region *reg)
+ : event_desc (colorize), m_reg (reg)
+ {}
+
+ const region *m_reg;
+};
+
/* For use by pending_diagnostic::describe_state_change. */
struct state_change : public event_desc
@@ -215,6 +226,15 @@ class pending_diagnostic
description; NULL otherwise (falling back on a more generic
description). */
+ /* Precision-of-wording vfunc for describing a region creation event
+ triggered by the mark_interesting_stuff vfunc. */
+ virtual label_text
+ describe_region_creation_event (const evdesc::region_creation &)
+ {
+ /* Default no-op implementation. */
+ return label_text ();
+ }
+
/* Precision-of-wording vfunc for describing a critical state change
within the diagnostic_path.
diff --git a/gcc/analyzer/program-point.cc b/gcc/analyzer/program-point.cc
index 8fa7066..6c296d5 100644
--- a/gcc/analyzer/program-point.cc
+++ b/gcc/analyzer/program-point.cc
@@ -25,7 +25,6 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-pretty-print.h"
#include "gcc-rich-location.h"
#include "json.h"
-#include "analyzer/call-string.h"
#include "ordered-hash-map.h"
#include "options.h"
#include "cgraph.h"
@@ -37,6 +36,7 @@ along with GCC; see the file COPYING3. If not see
#include "digraph.h"
#include "analyzer/analyzer.h"
#include "analyzer/analyzer-logging.h"
+#include "analyzer/call-string.h"
#include "analyzer/supergraph.h"
#include "analyzer/program-point.h"
#include "sbitmap.h"
@@ -290,7 +290,7 @@ void
program_point::print (pretty_printer *pp, const format &f) const
{
pp_string (pp, "callstring: ");
- m_call_string.print (pp);
+ m_call_string->print (pp);
f.spacer (pp);
m_function_point.print (pp, f);
@@ -340,7 +340,7 @@ program_point::to_json () const
break;
}
- point_obj->set ("call_string", m_call_string.to_json ());
+ point_obj->set ("call_string", m_call_string->to_json ());
return point_obj;
}
@@ -353,14 +353,15 @@ void
program_point::push_to_call_stack (const supernode *caller,
const supernode *callee)
{
- m_call_string.push_call (callee, caller);
+ m_call_string = m_call_string->push_call (callee, caller);
}
/* Pop the topmost call from the current callstack. */
void
program_point::pop_from_call_stack ()
{
- m_call_string.pop ();
+ m_call_string = m_call_string->get_parent ();
+ gcc_assert (m_call_string);
}
/* Generate a hash value for this program_point. */
@@ -370,7 +371,7 @@ program_point::hash () const
{
inchash::hash hstate;
hstate.merge_hash (m_function_point.hash ());
- hstate.merge_hash (m_call_string.hash ());
+ hstate.add_ptr (m_call_string);
return hstate.end ();
}
@@ -379,11 +380,11 @@ program_point::hash () const
function *
program_point::get_function_at_depth (unsigned depth) const
{
- gcc_assert (depth <= m_call_string.length ());
- if (depth == m_call_string.length ())
+ gcc_assert (depth <= m_call_string->length ());
+ if (depth == m_call_string->length ())
return m_function_point.get_function ();
else
- return m_call_string[depth].get_caller_function ();
+ return get_call_string ()[depth].get_caller_function ();
}
/* Assert that this object is sane. */
@@ -396,12 +397,13 @@ program_point::validate () const
return;
#endif
- m_call_string.validate ();
+ m_call_string->validate ();
/* The "callee" of the final entry in the callstring should be the
function of the m_function_point. */
- if (m_call_string.length () > 0)
- gcc_assert (m_call_string[m_call_string.length () - 1].get_callee_function ()
- == get_function ());
+ if (m_call_string->length () > 0)
+ gcc_assert
+ ((*m_call_string)[m_call_string->length () - 1].get_callee_function ()
+ == get_function ());
}
/* Check to see if SUCC is a valid edge to take (ensuring that we have
@@ -444,14 +446,15 @@ program_point::on_edge (exploded_graph &eg,
}
/* Add the callsite to the call string. */
- m_call_string.push_call (eg.get_supergraph (), call_sedge);
+ m_call_string = m_call_string->push_call (eg.get_supergraph (),
+ call_sedge);
/* Impose a maximum recursion depth and don't analyze paths
that exceed it further.
This is something of a blunt workaround, but it only
applies to recursion (and mutual recursion), not to
general call stacks. */
- if (m_call_string.calc_recursion_depth ()
+ if (m_call_string->calc_recursion_depth ()
> param_analyzer_max_recursion_depth)
{
if (logger)
@@ -465,13 +468,15 @@ program_point::on_edge (exploded_graph &eg,
case SUPEREDGE_RETURN:
{
/* Require that we return to the call site in the call string. */
- if (m_call_string.empty_p ())
+ if (m_call_string->empty_p ())
{
if (logger)
logger->log ("rejecting return edge: empty call string");
return false;
}
- const call_string::element_t top_of_stack = m_call_string.pop ();
+ const call_string::element_t &top_of_stack
+ = m_call_string->get_top_of_stack ();
+ m_call_string = m_call_string->get_parent ();
call_string::element_t current_call_string_element (succ->m_dest,
succ->m_src);
if (top_of_stack != current_call_string_element)
@@ -669,6 +674,25 @@ function_point::get_next () const
}
}
+/* class program_point. */
+
+program_point
+program_point::origin (const region_model_manager &mgr)
+{
+ return program_point (function_point (NULL, NULL,
+ 0, PK_ORIGIN),
+ mgr.get_empty_call_string ());
+}
+
+program_point
+program_point::from_function_entry (const region_model_manager &mgr,
+ const supergraph &sg,
+ function *fun)
+{
+ return program_point (function_point::from_function_entry (sg, fun),
+ mgr.get_empty_call_string ());
+}
+
/* For those program points for which there is a uniquely-defined
successor, return it. */
@@ -721,7 +745,6 @@ static void
test_function_point_ordering ()
{
const supernode *snode = NULL;
- const call_string call_string;
/* Populate an array with various points within the same
snode, in order. */
@@ -756,9 +779,11 @@ test_function_point_ordering ()
static void
test_program_point_equality ()
{
+ region_model_manager mgr;
+
const supernode *snode = NULL;
- const call_string cs;
+ const call_string &cs = mgr.get_empty_call_string ();
program_point a = program_point::before_supernode (snode, NULL,
cs);
diff --git a/gcc/analyzer/program-point.h b/gcc/analyzer/program-point.h
index 6084c9e..63f7224 100644
--- a/gcc/analyzer/program-point.h
+++ b/gcc/analyzer/program-point.h
@@ -174,7 +174,7 @@ public:
program_point (const function_point &fn_point,
const call_string &call_string)
: m_function_point (fn_point),
- m_call_string (call_string)
+ m_call_string (&call_string)
{
}
@@ -197,7 +197,7 @@ public:
/* Accessors. */
const function_point &get_function_point () const { return m_function_point; }
- const call_string &get_call_string () const { return m_call_string; }
+ const call_string &get_call_string () const { return *m_call_string; }
const supernode *get_supernode () const
{
@@ -242,23 +242,14 @@ public:
{
if (get_kind () == PK_ORIGIN)
return 0;
- return m_call_string.length () + 1;
+ return get_call_string ().length () + 1;
}
/* Factory functions for making various kinds of program_point. */
- static program_point origin ()
- {
- return program_point (function_point (NULL, NULL,
- 0, PK_ORIGIN),
- call_string ());
- }
-
- static program_point from_function_entry (const supergraph &sg,
- function *fun)
- {
- return program_point (function_point::from_function_entry (sg, fun),
- call_string ());
- }
+ static program_point origin (const region_model_manager &mgr);
+ static program_point from_function_entry (const region_model_manager &mgr,
+ const supergraph &sg,
+ function *fun);
static program_point before_supernode (const supernode *supernode,
const superedge *from_edge,
@@ -288,11 +279,11 @@ public:
static program_point empty ()
{
- return program_point (function_point::empty (), call_string ());
+ return program_point (function_point::empty ());
}
static program_point deleted ()
{
- return program_point (function_point::deleted (), call_string ());
+ return program_point (function_point::deleted ());
}
bool on_edge (exploded_graph &eg, const superedge *succ);
@@ -306,8 +297,14 @@ public:
program_point get_next () const;
private:
+ program_point (const function_point &fn_point)
+ : m_function_point (fn_point),
+ m_call_string (NULL)
+ {
+ }
+
function_point m_function_point;
- call_string m_call_string;
+ const call_string *m_call_string;
};
} // namespace ana
diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-state.cc
index 7ad581c..90a56e3 100644
--- a/gcc/analyzer/program-state.cc
+++ b/gcc/analyzer/program-state.cc
@@ -301,7 +301,6 @@ sm_state_map::to_json () const
label_text sval_desc = sval->get_desc ();
map_obj->set (sval_desc.m_buffer, e.m_state->to_json ());
- sval_desc.maybe_free ();
/* This doesn't yet JSONify e.m_origin. */
}
@@ -1668,12 +1667,12 @@ test_program_state_merging ()
malloc sm-state, pointing to a region on the heap. */
tree p = build_global_decl ("p", ptr_type_node);
- program_point point (program_point::origin ());
+ engine eng;
+ region_model_manager *mgr = eng.get_model_manager ();
+ program_point point (program_point::origin (*mgr));
auto_delete_vec <state_machine> checkers;
checkers.safe_push (make_malloc_state_machine (NULL));
- engine eng;
extrinsic_state ext_state (checkers, &eng);
- region_model_manager *mgr = eng.get_model_manager ();
program_state s0 (ext_state);
uncertainty_t uncertainty;
@@ -1736,10 +1735,11 @@ test_program_state_merging ()
static void
test_program_state_merging_2 ()
{
- program_point point (program_point::origin ());
+ engine eng;
+ region_model_manager *mgr = eng.get_model_manager ();
+ program_point point (program_point::origin (*mgr));
auto_delete_vec <state_machine> checkers;
checkers.safe_push (make_signal_state_machine (NULL));
- engine eng;
extrinsic_state ext_state (checkers, &eng);
const state_machine::state test_state_0 ("test state 0", 0);
diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc
index 3377f15..17713b0 100644
--- a/gcc/analyzer/region-model-manager.cc
+++ b/gcc/analyzer/region-model-manager.cc
@@ -68,6 +68,7 @@ namespace ana {
region_model_manager::region_model_manager (logger *logger)
: m_logger (logger),
+ m_empty_call_string (),
m_next_region_id (0),
m_root_region (alloc_region_id ()),
m_stack_region (alloc_region_id (), &m_root_region),
@@ -1748,6 +1749,8 @@ void
region_model_manager::log_stats (logger *logger, bool show_objs) const
{
LOG_SCOPE (logger);
+ logger->log ("call string consolidation");
+ m_empty_call_string.recursive_log (logger);
logger->log ("svalue consolidation");
log_uniq_map (logger, show_objs, "constant_svalue", m_constants_map);
log_uniq_map (logger, show_objs, "unknown_svalue", m_unknowns_map);
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index 6b49719..8b7b4e1 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -73,6 +73,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-operands.h"
#include "ssa-iterators.h"
#include "calls.h"
+#include "is-a.h"
#if ENABLE_ANALYZER
@@ -895,17 +896,9 @@ region_model::get_gassign_result (const gassign *assign,
static bool
within_short_circuited_stmt_p (const region_model *model,
- region_model_context *ctxt)
+ const gassign *assign_stmt)
{
- gcc_assert (ctxt);
- const gimple *curr_stmt = ctxt->get_stmt ();
- if (curr_stmt == NULL)
- return false;
-
/* We must have an assignment to a temporary of _Bool type. */
- const gassign *assign_stmt = dyn_cast <const gassign *> (curr_stmt);
- if (!assign_stmt)
- return false;
tree lhs = gimple_assign_lhs (assign_stmt);
if (TREE_TYPE (lhs) != boolean_type_node)
return false;
@@ -958,6 +951,47 @@ within_short_circuited_stmt_p (const region_model *model,
return true;
}
+/* Workaround for discarding certain false positives from
+ -Wanalyzer-use-of-uninitialized-value
+ seen with -ftrivial-auto-var-init=.
+
+ -ftrivial-auto-var-init= will generate calls to IFN_DEFERRED_INIT.
+
+ If the address of the var is taken, gimplification will give us
+ something like:
+
+ _1 = .DEFERRED_INIT (4, 2, &"len"[0]);
+ len = _1;
+
+ The result of DEFERRED_INIT will be an uninit value; we don't
+ want to emit a false positive for "len = _1;"
+
+ Return true if ASSIGN_STMT is such a stmt. */
+
+static bool
+due_to_ifn_deferred_init_p (const gassign *assign_stmt)
+
+{
+ /* We must have an assignment to a decl from an SSA name that's the
+ result of a IFN_DEFERRED_INIT call. */
+ if (gimple_assign_rhs_code (assign_stmt) != SSA_NAME)
+ return false;
+ tree lhs = gimple_assign_lhs (assign_stmt);
+ if (TREE_CODE (lhs) != VAR_DECL)
+ return false;
+ tree rhs = gimple_assign_rhs1 (assign_stmt);
+ if (TREE_CODE (rhs) != SSA_NAME)
+ return false;
+ const gimple *def_stmt = SSA_NAME_DEF_STMT (rhs);
+ const gcall *call = dyn_cast <const gcall *> (def_stmt);
+ if (!call)
+ return false;
+ if (gimple_call_internal_p (call)
+ && gimple_call_internal_fn (call) == IFN_DEFERRED_INIT)
+ return true;
+ return false;
+}
+
/* Check for SVAL being poisoned, adding a warning to CTXT.
Return SVAL, or, if a warning is added, another value, to avoid
repeatedly complaining about the same poisoned value in followup code. */
@@ -981,10 +1015,20 @@ region_model::check_for_poison (const svalue *sval,
&& is_empty_type (sval->get_type ()))
return sval;
- /* Special case to avoid certain false positives. */
- if (pkind == POISON_KIND_UNINIT
- && within_short_circuited_stmt_p (this, ctxt))
- return sval;
+ if (pkind == POISON_KIND_UNINIT)
+ if (const gimple *curr_stmt = ctxt->get_stmt ())
+ if (const gassign *assign_stmt
+ = dyn_cast <const gassign *> (curr_stmt))
+ {
+ /* Special case to avoid certain false positives. */
+ if (within_short_circuited_stmt_p (this, assign_stmt))
+ return sval;
+
+ /* Special case to avoid false positive on
+ -ftrivial-auto-var-init=. */
+ if (due_to_ifn_deferred_init_p (assign_stmt))
+ return sval;
+ }
/* If we have an SSA name for a temporary, we don't want to print
'<unknown>'.
@@ -2799,6 +2843,373 @@ region_model::check_region_for_read (const region *src_reg,
check_region_access (src_reg, DIR_READ, ctxt);
}
+/* Concrete subclass for casts of pointers that lead to trailing bytes. */
+
+class dubious_allocation_size
+: public pending_diagnostic_subclass<dubious_allocation_size>
+{
+public:
+ dubious_allocation_size (const region *lhs, const region *rhs)
+ : m_lhs (lhs), m_rhs (rhs), m_expr (NULL_TREE)
+ {}
+
+ dubious_allocation_size (const region *lhs, const region *rhs,
+ tree expr)
+ : m_lhs (lhs), m_rhs (rhs), m_expr (expr)
+ {}
+
+ const char *get_kind () const final override
+ {
+ return "dubious_allocation_size";
+ }
+
+ bool operator== (const dubious_allocation_size &other) const
+ {
+ return m_lhs == other.m_lhs && m_rhs == other.m_rhs
+ && pending_diagnostic::same_tree_p (m_expr, other.m_expr);
+ }
+
+ int get_controlling_option () const final override
+ {
+ return OPT_Wanalyzer_allocation_size;
+ }
+
+ bool emit (rich_location *rich_loc) final override
+ {
+ diagnostic_metadata m;
+ m.add_cwe (131);
+
+ return warning_meta (rich_loc, m, get_controlling_option (),
+ "allocated buffer size is not a multiple of the pointee's size");
+ }
+
+ label_text
+ describe_region_creation_event (const evdesc::region_creation &ev) final
+ override
+ {
+ m_allocation_event = &ev;
+ if (m_expr)
+ {
+ if (TREE_CODE (m_expr) == INTEGER_CST)
+ return ev.formatted_print ("allocated %E bytes here", m_expr);
+ else
+ return ev.formatted_print ("allocated %qE bytes here", m_expr);
+ }
+
+ return ev.formatted_print ("allocated here");
+ }
+
+ label_text describe_final_event (const evdesc::final_event &ev) final
+ override
+ {
+ tree pointee_type = TREE_TYPE (m_lhs->get_type ());
+ if (m_allocation_event)
+ /* Fallback: Typically, we should always
+ see an m_allocation_event before. */
+ return ev.formatted_print ("assigned to %qT here;"
+ " %<sizeof (%T)%> is %qE",
+ m_lhs->get_type (), pointee_type,
+ size_in_bytes (pointee_type));
+
+ if (m_expr)
+ {
+ if (TREE_CODE (m_expr) == INTEGER_CST)
+ return ev.formatted_print ("allocated %E bytes and assigned to"
+ " %qT here; %<sizeof (%T)%> is %qE",
+ m_expr, m_lhs->get_type (), pointee_type,
+ size_in_bytes (pointee_type));
+ else
+ return ev.formatted_print ("allocated %qE bytes and assigned to"
+ " %qT here; %<sizeof (%T)%> is %qE",
+ m_expr, m_lhs->get_type (), pointee_type,
+ size_in_bytes (pointee_type));
+ }
+
+ return ev.formatted_print ("allocated and assigned to %qT here;"
+ " %<sizeof (%T)%> is %qE",
+ m_lhs->get_type (), pointee_type,
+ size_in_bytes (pointee_type));
+ }
+
+ void mark_interesting_stuff (interesting_t *interest) final override
+ {
+ interest->add_region_creation (m_rhs);
+ }
+
+private:
+ const region *m_lhs;
+ const region *m_rhs;
+ const tree m_expr;
+ const evdesc::region_creation *m_allocation_event;
+};
+
+/* Return true on dubious allocation sizes for constant sizes. */
+
+static bool
+capacity_compatible_with_type (tree cst, tree pointee_size_tree,
+ bool is_struct)
+{
+ gcc_assert (TREE_CODE (cst) == INTEGER_CST);
+ gcc_assert (TREE_CODE (pointee_size_tree) == INTEGER_CST);
+
+ unsigned HOST_WIDE_INT pointee_size = TREE_INT_CST_LOW (pointee_size_tree);
+ unsigned HOST_WIDE_INT alloc_size = TREE_INT_CST_LOW (cst);
+
+ if (is_struct)
+ return alloc_size >= pointee_size;
+ return alloc_size % pointee_size == 0;
+}
+
+static bool
+capacity_compatible_with_type (tree cst, tree pointee_size_tree)
+{
+ return capacity_compatible_with_type (cst, pointee_size_tree, false);
+}
+
+/* Checks whether SVAL could be a multiple of SIZE_CST.
+
+ It works by visiting all svalues inside SVAL until it reaches
+ atomic nodes. From those, it goes back up again and adds each
+ node that might be a multiple of SIZE_CST to the RESULT_SET. */
+
+class size_visitor : public visitor
+{
+public:
+ size_visitor (tree size_cst, const svalue *sval, constraint_manager *cm)
+ : m_size_cst (size_cst), m_sval (sval), m_cm (cm)
+ {
+ sval->accept (this);
+ }
+
+ bool get_result ()
+ {
+ return result_set.contains (m_sval);
+ }
+
+ void visit_constant_svalue (const constant_svalue *sval) final override
+ {
+ if (capacity_compatible_with_type (sval->get_constant (), m_size_cst))
+ result_set.add (sval);
+ }
+
+ void visit_unknown_svalue (const unknown_svalue *sval ATTRIBUTE_UNUSED)
+ final override
+ {
+ result_set.add (sval);
+ }
+
+ void visit_poisoned_svalue (const poisoned_svalue *sval ATTRIBUTE_UNUSED)
+ final override
+ {
+ result_set.add (sval);
+ }
+
+ void visit_unaryop_svalue (const unaryop_svalue *sval)
+ {
+ const svalue *arg = sval->get_arg ();
+ if (result_set.contains (arg))
+ result_set.add (sval);
+ }
+
+ void visit_binop_svalue (const binop_svalue *sval) final override
+ {
+ const svalue *arg0 = sval->get_arg0 ();
+ const svalue *arg1 = sval->get_arg1 ();
+
+ if (sval->get_op () == MULT_EXPR)
+ {
+ if (result_set.contains (arg0) || result_set.contains (arg1))
+ result_set.add (sval);
+ }
+ else
+ {
+ if (result_set.contains (arg0) && result_set.contains (arg1))
+ result_set.add (sval);
+ }
+ }
+
+ void visit_repeated_svalue (const repeated_svalue *sval)
+ {
+ sval->get_inner_svalue ()->accept (this);
+ if (result_set.contains (sval->get_inner_svalue ()))
+ result_set.add (sval);
+ }
+
+ void visit_unmergeable_svalue (const unmergeable_svalue *sval) final override
+ {
+ sval->get_arg ()->accept (this);
+ if (result_set.contains (sval->get_arg ()))
+ result_set.add (sval);
+ }
+
+ void visit_widening_svalue (const widening_svalue *sval) final override
+ {
+ const svalue *base = sval->get_base_svalue ();
+ const svalue *iter = sval->get_iter_svalue ();
+
+ if (result_set.contains (base) && result_set.contains (iter))
+ result_set.add (sval);
+ }
+
+ void visit_conjured_svalue (const conjured_svalue *sval ATTRIBUTE_UNUSED)
+ final override
+ {
+ equiv_class_id id (-1);
+ if (m_cm->get_equiv_class_by_svalue (sval, &id))
+ {
+ if (tree cst_val = id.get_obj (*m_cm).get_any_constant ())
+ {
+ if (capacity_compatible_with_type (cst_val, m_size_cst))
+ result_set.add (sval);
+ }
+ else
+ {
+ result_set.add (sval);
+ }
+ }
+ }
+
+ void visit_asm_output_svalue (const asm_output_svalue *sval ATTRIBUTE_UNUSED)
+ final override
+ {
+ result_set.add (sval);
+ }
+
+ void visit_const_fn_result_svalue (const const_fn_result_svalue
+ *sval ATTRIBUTE_UNUSED) final override
+ {
+ result_set.add (sval);
+ }
+
+private:
+ tree m_size_cst;
+ const svalue *m_sval;
+ constraint_manager *m_cm;
+ svalue_set result_set; /* Used as a mapping of svalue*->bool. */
+};
+
+/* Return true if a struct or union either uses the inheritance pattern,
+ where the first field is a base struct, or the flexible array member
+ pattern, where the last field is an array without a specified size. */
+
+static bool
+struct_or_union_with_inheritance_p (tree struc)
+{
+ tree iter = TYPE_FIELDS (struc);
+ if (iter == NULL_TREE)
+ return false;
+ if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (iter)))
+ return true;
+
+ tree last_field;
+ while (iter != NULL_TREE)
+ {
+ last_field = iter;
+ iter = DECL_CHAIN (iter);
+ }
+
+ if (last_field != NULL_TREE
+ && TREE_CODE (TREE_TYPE (last_field)) == ARRAY_TYPE)
+ return true;
+
+ return false;
+}
+
+/* Return true if the lhs and rhs of an assignment have different types. */
+
+static bool
+is_any_cast_p (const gimple *stmt)
+{
+ if (const gassign *assign = dyn_cast<const gassign *>(stmt))
+ return gimple_assign_cast_p (assign)
+ || !pending_diagnostic::same_tree_p (
+ TREE_TYPE (gimple_assign_lhs (assign)),
+ TREE_TYPE (gimple_assign_rhs1 (assign)));
+ else if (const gcall *call = dyn_cast<const gcall *>(stmt))
+ {
+ tree lhs = gimple_call_lhs (call);
+ return lhs != NULL_TREE && !pending_diagnostic::same_tree_p (
+ TREE_TYPE (gimple_call_lhs (call)),
+ gimple_call_return_type (call));
+ }
+
+ return false;
+}
+
+/* On pointer assignments, check whether the buffer size of
+ RHS_SVAL is compatible with the type of the LHS_REG.
+ Use a non-null CTXT to report allocation size warnings. */
+
+void
+region_model::check_region_size (const region *lhs_reg, const svalue *rhs_sval,
+ region_model_context *ctxt) const
+{
+ if (!ctxt || ctxt->get_stmt () == NULL)
+ return;
+ /* Only report warnings on assignments that actually change the type. */
+ if (!is_any_cast_p (ctxt->get_stmt ()))
+ return;
+
+ const region_svalue *reg_sval = dyn_cast <const region_svalue *> (rhs_sval);
+ if (!reg_sval)
+ return;
+
+ tree pointer_type = lhs_reg->get_type ();
+ if (pointer_type == NULL_TREE || !POINTER_TYPE_P (pointer_type))
+ return;
+
+ tree pointee_type = TREE_TYPE (pointer_type);
+ /* Make sure that the type on the left-hand size actually has a size. */
+ if (pointee_type == NULL_TREE || VOID_TYPE_P (pointee_type)
+ || TYPE_SIZE_UNIT (pointee_type) == NULL_TREE)
+ return;
+
+ /* Bail out early on pointers to structs where we can
+ not deduce whether the buffer size is compatible. */
+ bool is_struct = RECORD_OR_UNION_TYPE_P (pointee_type);
+ if (is_struct && struct_or_union_with_inheritance_p (pointee_type))
+ return;
+
+ tree pointee_size_tree = size_in_bytes (pointee_type);
+ /* We give up if the type size is not known at compile-time or the
+ type size is always compatible regardless of the buffer size. */
+ if (TREE_CODE (pointee_size_tree) != INTEGER_CST
+ || integer_zerop (pointee_size_tree)
+ || integer_onep (pointee_size_tree))
+ return;
+
+ const region *rhs_reg = reg_sval->get_pointee ();
+ const svalue *capacity = get_capacity (rhs_reg);
+ switch (capacity->get_kind ())
+ {
+ case svalue_kind::SK_CONSTANT:
+ {
+ const constant_svalue *cst_cap_sval
+ = as_a <const constant_svalue *> (capacity);
+ tree cst_cap = cst_cap_sval->get_constant ();
+ if (!capacity_compatible_with_type (cst_cap, pointee_size_tree,
+ is_struct))
+ ctxt->warn (new dubious_allocation_size (lhs_reg, rhs_reg,
+ cst_cap));
+ }
+ break;
+ default:
+ {
+ if (!is_struct)
+ {
+ size_visitor v (pointee_size_tree, capacity, m_constraints);
+ if (!v.get_result ())
+ {
+ tree expr = get_representative_tree (capacity);
+ ctxt->warn (new dubious_allocation_size (lhs_reg, rhs_reg,
+ expr));
+ }
+ }
+ break;
+ }
+ }
+}
+
/* Set the value of the region given by LHS_REG to the value given
by RHS_SVAL.
Use CTXT to report any warnings associated with writing to LHS_REG. */
@@ -2810,6 +3221,8 @@ region_model::set_value (const region *lhs_reg, const svalue *rhs_sval,
gcc_assert (lhs_reg);
gcc_assert (rhs_sval);
+ check_region_size (lhs_reg, rhs_sval, ctxt);
+
check_region_for_write (lhs_reg, ctxt);
m_store.set_value (m_mgr->get_store_manager(), lhs_reg, rhs_sval,
@@ -5460,9 +5873,9 @@ assert_region_models_merge (tree expr, tree val_a, tree val_b,
region_model *out_merged_model,
const svalue **out_merged_svalue)
{
- program_point point (program_point::origin ());
- test_region_model_context ctxt;
region_model_manager *mgr = out_merged_model->get_manager ();
+ program_point point (program_point::origin (*mgr));
+ test_region_model_context ctxt;
region_model model0 (mgr);
region_model model1 (mgr);
if (val_a)
@@ -5511,8 +5924,8 @@ test_state_merging ()
ptr_type_node);
DECL_CONTEXT (q) = test_fndecl;
- program_point point (program_point::origin ());
region_model_manager mgr;
+ program_point point (program_point::origin (mgr));
{
region_model model0 (&mgr);
@@ -5852,7 +6265,7 @@ test_constraint_merging ()
/* They should be mergeable; the merged constraints should
be: (0 <= x < n). */
- program_point point (program_point::origin ());
+ program_point point (program_point::origin (mgr));
region_model merged (&mgr);
ASSERT_TRUE (model0.can_merge_with_p (model1, point, &merged));
@@ -5873,12 +6286,12 @@ test_constraint_merging ()
static void
test_widening_constraints ()
{
- program_point point (program_point::origin ());
+ region_model_manager mgr;
+ program_point point (program_point::origin (mgr));
tree int_0 = build_int_cst (integer_type_node, 0);
tree int_m1 = build_int_cst (integer_type_node, -1);
tree int_1 = build_int_cst (integer_type_node, 1);
tree int_256 = build_int_cst (integer_type_node, 256);
- region_model_manager mgr;
test_region_model_context ctxt;
const svalue *int_0_sval = mgr.get_or_create_constant_svalue (int_0);
const svalue *int_1_sval = mgr.get_or_create_constant_svalue (int_1);
@@ -5988,7 +6401,8 @@ test_widening_constraints ()
static void
test_iteration_1 ()
{
- program_point point (program_point::origin ());
+ region_model_manager mgr;
+ program_point point (program_point::origin (mgr));
tree int_0 = build_int_cst (integer_type_node, 0);
tree int_1 = build_int_cst (integer_type_node, 1);
@@ -5996,7 +6410,6 @@ test_iteration_1 ()
tree int_257 = build_int_cst (integer_type_node, 257);
tree i = build_global_decl ("i", integer_type_node);
- region_model_manager mgr;
test_region_model_context ctxt;
/* model0: i: 0. */
diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h
index 1bfa56a..6dda43f 100644
--- a/gcc/analyzer/region-model.h
+++ b/gcc/analyzer/region-model.h
@@ -244,6 +244,12 @@ public:
region_model_manager (logger *logger = NULL);
~region_model_manager ();
+ /* call_string consolidation. */
+ const call_string &get_empty_call_string () const
+ {
+ return m_empty_call_string;
+ }
+
/* svalue consolidation. */
const svalue *get_or_create_constant_svalue (tree cst_expr);
const svalue *get_or_create_int_cst (tree type, poly_int64);
@@ -381,6 +387,8 @@ private:
logger *m_logger;
+ const call_string m_empty_call_string;
+
unsigned m_next_region_id;
root_region m_root_region;
stack_region m_stack_region;
@@ -857,6 +865,8 @@ class region_model
region_model_context *ctxt) const;
void check_region_for_read (const region *src_reg,
region_model_context *ctxt) const;
+ void check_region_size (const region *lhs_reg, const svalue *rhs_sval,
+ region_model_context *ctxt) const;
void check_call_args (const call_details &cd) const;
void check_external_function_for_access_attr (const gcall *call,
diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc
index a828623..5b00e6a 100644
--- a/gcc/analyzer/region.cc
+++ b/gcc/analyzer/region.cc
@@ -590,7 +590,6 @@ region::to_json () const
{
label_text desc = get_desc (true);
json::value *reg_js = new json::string (desc.m_buffer);
- desc.maybe_free ();
return reg_js;
}
diff --git a/gcc/analyzer/sm-fd.cc b/gcc/analyzer/sm-fd.cc
new file mode 100644
index 0000000..8e4300b
--- /dev/null
+++ b/gcc/analyzer/sm-fd.cc
@@ -0,0 +1,857 @@
+/* A state machine for detecting misuses of POSIX file descriptor APIs.
+ Copyright (C) 2019-2022 Free Software Foundation, Inc.
+ Contributed by Immad Mir <mir@sourceware.org>.
+
+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/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tree.h"
+#include "function.h"
+#include "basic-block.h"
+#include "gimple.h"
+#include "options.h"
+#include "diagnostic-path.h"
+#include "diagnostic-metadata.h"
+#include "function.h"
+#include "json.h"
+#include "analyzer/analyzer.h"
+#include "diagnostic-event-id.h"
+#include "analyzer/analyzer-logging.h"
+#include "analyzer/sm.h"
+#include "analyzer/pending-diagnostic.h"
+#include "analyzer/function-set.h"
+#include "analyzer/analyzer-selftests.h"
+#include "tristate.h"
+#include "selftest.h"
+#include "analyzer/call-string.h"
+#include "analyzer/program-point.h"
+#include "analyzer/store.h"
+#include "analyzer/region-model.h"
+
+#if ENABLE_ANALYZER
+
+namespace ana {
+
+namespace {
+
+/* An enum for distinguishing between three different access modes. */
+
+enum access_mode
+{
+ READ_WRITE,
+ READ_ONLY,
+ WRITE_ONLY
+};
+
+class fd_state_machine : public state_machine
+{
+public:
+ fd_state_machine (logger *logger);
+
+ bool
+ inherited_state_p () const final override
+ {
+ return false;
+ }
+
+ state_machine::state_t
+ get_default_state (const svalue *sval) const final override
+ {
+ if (tree cst = sval->maybe_get_constant ())
+ {
+ if (TREE_CODE (cst) == INTEGER_CST)
+ {
+ int val = TREE_INT_CST_LOW (cst);
+ if (val >= 0)
+ return m_constant_fd;
+ else
+ return m_invalid;
+ }
+ }
+ return m_start;
+ }
+
+ bool on_stmt (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt) const final override;
+
+ void on_condition (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const svalue *lhs, const tree_code op,
+ const svalue *rhs) const final override;
+
+ bool can_purge_p (state_t s) const final override;
+ pending_diagnostic *on_leak (tree var) const final override;
+
+ bool is_unchecked_fd_p (state_t s) const;
+ bool is_valid_fd_p (state_t s) const;
+ bool is_closed_fd_p (state_t s) const;
+ bool is_constant_fd_p (state_t s) const;
+ bool is_readonly_fd_p (state_t s) const;
+ bool is_writeonly_fd_p (state_t s) const;
+ enum access_mode get_access_mode_from_flag (int flag) const;
+
+ /* State for a constant file descriptor (>= 0) */
+ state_t m_constant_fd;
+
+ /* States representing a file descriptor that hasn't yet been
+ checked for validity after opening, for three different
+ access modes. */
+ state_t m_unchecked_read_write;
+
+ state_t m_unchecked_read_only;
+
+ state_t m_unchecked_write_only;
+
+ /* States for representing a file descriptor that is known to be valid (>=
+ 0), for three different access modes.*/
+ state_t m_valid_read_write;
+
+ state_t m_valid_read_only;
+
+ state_t m_valid_write_only;
+
+ /* State for a file descriptor that is known to be invalid (< 0). */
+ state_t m_invalid;
+
+ /* State for a file descriptor that has been closed.*/
+ state_t m_closed;
+
+ /* State for a file descriptor that we do not want to track anymore . */
+ state_t m_stop;
+
+private:
+ void on_open (sm_context *sm_ctxt, const supernode *node, const gimple *stmt,
+ const gcall *call) const;
+ void on_close (sm_context *sm_ctxt, const supernode *node, const gimple *stmt,
+ const gcall *call) const;
+ void on_read (sm_context *sm_ctxt, const supernode *node, const gimple *stmt,
+ const gcall *call, const tree callee_fndecl) const;
+ void on_write (sm_context *sm_ctxt, const supernode *node, const gimple *stmt,
+ const gcall *call, const tree callee_fndecl) const;
+ void check_for_open_fd (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const gcall *call,
+ const tree callee_fndecl,
+ enum access_direction access_fn) const;
+
+ void make_valid_transitions_on_condition (sm_context *sm_ctxt,
+ const supernode *node,
+ const gimple *stmt,
+ const svalue *lhs) const;
+ void make_invalid_transitions_on_condition (sm_context *sm_ctxt,
+ const supernode *node,
+ const gimple *stmt,
+ const svalue *lhs) const;
+};
+
+/* Base diagnostic class relative to fd_state_machine. */
+class fd_diagnostic : public pending_diagnostic
+{
+public:
+ fd_diagnostic (const fd_state_machine &sm, tree arg) : m_sm (sm), m_arg (arg)
+ {
+ }
+
+ bool
+ subclass_equal_p (const pending_diagnostic &base_other) const override
+ {
+ return same_tree_p (m_arg, ((const fd_diagnostic &)base_other).m_arg);
+ }
+
+ label_text
+ describe_state_change (const evdesc::state_change &change) override
+ {
+ if (change.m_old_state == m_sm.get_start_state ()
+ && m_sm.is_unchecked_fd_p (change.m_new_state))
+ {
+ if (change.m_new_state == m_sm.m_unchecked_read_write)
+ return change.formatted_print ("opened here as read-write");
+
+ if (change.m_new_state == m_sm.m_unchecked_read_only)
+ return change.formatted_print ("opened here as read-only");
+
+ if (change.m_new_state == m_sm.m_unchecked_write_only)
+ return change.formatted_print ("opened here as write-only");
+ }
+
+ if (change.m_new_state == m_sm.m_closed)
+ return change.formatted_print ("closed here");
+
+ if (m_sm.is_unchecked_fd_p (change.m_old_state)
+ && m_sm.is_valid_fd_p (change.m_new_state))
+ {
+ if (change.m_expr)
+ return change.formatted_print (
+ "assuming %qE is a valid file descriptor (>= 0)", change.m_expr);
+ else
+ return change.formatted_print ("assuming a valid file descriptor");
+ }
+
+ if (m_sm.is_unchecked_fd_p (change.m_old_state)
+ && change.m_new_state == m_sm.m_invalid)
+ {
+ if (change.m_expr)
+ return change.formatted_print (
+ "assuming %qE is an invalid file descriptor (< 0)",
+ change.m_expr);
+ else
+ return change.formatted_print ("assuming an invalid file descriptor");
+ }
+
+ return label_text ();
+ }
+
+protected:
+ const fd_state_machine &m_sm;
+ tree m_arg;
+};
+
+class fd_leak : public fd_diagnostic
+{
+public:
+ fd_leak (const fd_state_machine &sm, tree arg) : fd_diagnostic (sm, arg) {}
+
+ const char *
+ get_kind () const final override
+ {
+ return "fd_leak";
+ }
+
+ int
+ get_controlling_option () const final override
+ {
+ return OPT_Wanalyzer_fd_leak;
+ }
+
+ bool
+ emit (rich_location *rich_loc) final override
+ {
+ /*CWE-775: Missing Release of File Descriptor or Handle after Effective
+ Lifetime
+ */
+ diagnostic_metadata m;
+ m.add_cwe (775);
+ if (m_arg)
+ return warning_meta (rich_loc, m, get_controlling_option (),
+ "leak of file descriptor %qE", m_arg);
+ else
+ return warning_meta (rich_loc, m, get_controlling_option (),
+ "leak of file descriptor");
+ }
+
+ label_text
+ describe_state_change (const evdesc::state_change &change) final override
+ {
+ if (m_sm.is_unchecked_fd_p (change.m_new_state))
+ {
+ m_open_event = change.m_event_id;
+ return label_text::borrow ("opened here");
+ }
+
+ return fd_diagnostic::describe_state_change (change);
+ }
+
+ label_text
+ describe_final_event (const evdesc::final_event &ev) final override
+ {
+ if (m_open_event.known_p ())
+ {
+ if (ev.m_expr)
+ return ev.formatted_print ("%qE leaks here; was opened at %@",
+ ev.m_expr, &m_open_event);
+ else
+ return ev.formatted_print ("leaks here; was opened at %@",
+ &m_open_event);
+ }
+ else
+ {
+ if (ev.m_expr)
+ return ev.formatted_print ("%qE leaks here", ev.m_expr);
+ else
+ return ev.formatted_print ("leaks here");
+ }
+ }
+
+private:
+ diagnostic_event_id_t m_open_event;
+};
+
+class fd_access_mode_mismatch : public fd_diagnostic
+{
+public:
+ fd_access_mode_mismatch (const fd_state_machine &sm, tree arg,
+ enum access_direction fd_dir,
+ const tree callee_fndecl)
+ : fd_diagnostic (sm, arg), m_fd_dir (fd_dir),
+ m_callee_fndecl (callee_fndecl)
+
+ {
+ }
+
+ const char *
+ get_kind () const final override
+ {
+ return "fd_access_mode_mismatch";
+ }
+
+ int
+ get_controlling_option () const final override
+ {
+ return OPT_Wanalyzer_fd_access_mode_mismatch;
+ }
+
+ bool
+ emit (rich_location *rich_loc) final override
+ {
+ switch (m_fd_dir)
+ {
+ case DIR_READ:
+ return warning_at (rich_loc, get_controlling_option (),
+ "%qE on %<read-only%> file descriptor %qE",
+ m_callee_fndecl, m_arg);
+ case DIR_WRITE:
+ return warning_at (rich_loc, get_controlling_option (),
+ "%qE on %<write-only%> file descriptor %qE",
+ m_callee_fndecl, m_arg);
+ default:
+ gcc_unreachable ();
+ }
+ }
+
+ bool
+ subclass_equal_p (const pending_diagnostic &base_other) const override
+ {
+ const fd_access_mode_mismatch &sub_other
+ = (const fd_access_mode_mismatch &)base_other;
+ return (same_tree_p (m_arg, sub_other.m_arg)
+ && m_callee_fndecl == sub_other.m_callee_fndecl
+ && m_fd_dir == sub_other.m_fd_dir);
+ }
+
+ label_text
+ describe_final_event (const evdesc::final_event &ev) final override
+ {
+ switch (m_fd_dir)
+ {
+ case DIR_READ:
+ return ev.formatted_print ("%qE on %<read-only%> file descriptor %qE",
+ m_callee_fndecl, m_arg);
+ case DIR_WRITE:
+ return ev.formatted_print ("%qE on %<write-only%> file descriptor %qE",
+ m_callee_fndecl, m_arg);
+ default:
+ gcc_unreachable ();
+ }
+ }
+
+private:
+ enum access_direction m_fd_dir;
+ const tree m_callee_fndecl;
+};
+
+class double_close : public fd_diagnostic
+{
+public:
+ double_close (const fd_state_machine &sm, tree arg) : fd_diagnostic (sm, arg)
+ {
+ }
+
+ const char *
+ get_kind () const final override
+ {
+ return "double_close";
+ }
+
+ int
+ get_controlling_option () const final override
+ {
+ return OPT_Wanalyzer_fd_double_close;
+ }
+ bool
+ emit (rich_location *rich_loc) final override
+ {
+ diagnostic_metadata m;
+ // CWE-1341: Multiple Releases of Same Resource or Handle
+ m.add_cwe (1341);
+ return warning_meta (rich_loc, m, get_controlling_option (),
+ "double %<close%> of file descriptor %qE", m_arg);
+ }
+
+ label_text
+ describe_state_change (const evdesc::state_change &change) override
+ {
+ if (m_sm.is_unchecked_fd_p (change.m_new_state))
+ return label_text::borrow ("opened here");
+
+ if (change.m_new_state == m_sm.m_closed)
+ {
+ m_first_close_event = change.m_event_id;
+ return change.formatted_print ("first %qs here", "close");
+ }
+ return fd_diagnostic::describe_state_change (change);
+ }
+
+ label_text
+ describe_final_event (const evdesc::final_event &ev) final override
+ {
+ if (m_first_close_event.known_p ())
+ return ev.formatted_print ("second %qs here; first %qs was at %@",
+ "close", "close", &m_first_close_event);
+ return ev.formatted_print ("second %qs here", "close");
+ }
+
+private:
+ diagnostic_event_id_t m_first_close_event;
+};
+
+class fd_use_after_close : public fd_diagnostic
+{
+public:
+ fd_use_after_close (const fd_state_machine &sm, tree arg,
+ const tree callee_fndecl)
+ : fd_diagnostic (sm, arg), m_callee_fndecl (callee_fndecl)
+ {
+ }
+
+ const char *
+ get_kind () const final override
+ {
+ return "fd_use_after_close";
+ }
+
+ int
+ get_controlling_option () const final override
+ {
+ return OPT_Wanalyzer_fd_use_after_close;
+ }
+
+ bool
+ emit (rich_location *rich_loc) final override
+ {
+ return warning_at (rich_loc, get_controlling_option (),
+ "%qE on closed file descriptor %qE", m_callee_fndecl,
+ m_arg);
+ }
+
+ label_text
+ describe_state_change (const evdesc::state_change &change) override
+ {
+ if (m_sm.is_unchecked_fd_p (change.m_new_state))
+ return label_text::borrow ("opened here");
+
+ if (change.m_new_state == m_sm.m_closed)
+ {
+ m_first_close_event = change.m_event_id;
+ return change.formatted_print ("closed here");
+ }
+
+ return fd_diagnostic::describe_state_change (change);
+ }
+
+ label_text
+ describe_final_event (const evdesc::final_event &ev) final override
+ {
+ if (m_first_close_event.known_p ())
+ return ev.formatted_print (
+ "%qE on closed file descriptor %qE; %qs was at %@", m_callee_fndecl,
+ m_arg, "close", &m_first_close_event);
+ else
+ return ev.formatted_print ("%qE on closed file descriptor %qE",
+ m_callee_fndecl, m_arg);
+ }
+
+private:
+ diagnostic_event_id_t m_first_close_event;
+ const tree m_callee_fndecl;
+};
+
+class unchecked_use_of_fd : public fd_diagnostic
+{
+public:
+ unchecked_use_of_fd (const fd_state_machine &sm, tree arg,
+ const tree callee_fndecl)
+ : fd_diagnostic (sm, arg), m_callee_fndecl (callee_fndecl)
+ {
+ }
+
+ const char *
+ get_kind () const final override
+ {
+ return "unchecked_use_of_fd";
+ }
+
+ int
+ get_controlling_option () const final override
+ {
+ return OPT_Wanalyzer_fd_use_without_check;
+ }
+
+ bool
+ emit (rich_location *rich_loc) final override
+ {
+ return warning_at (rich_loc, get_controlling_option (),
+ "%qE on possibly invalid file descriptor %qE",
+ m_callee_fndecl, m_arg);
+ }
+
+ bool
+ subclass_equal_p (const pending_diagnostic &base_other) const override
+ {
+ const unchecked_use_of_fd &sub_other
+ = (const unchecked_use_of_fd &)base_other;
+ return (same_tree_p (m_arg, sub_other.m_arg)
+ && m_callee_fndecl == sub_other.m_callee_fndecl);
+ }
+
+ label_text
+ describe_state_change (const evdesc::state_change &change) override
+ {
+ if (m_sm.is_unchecked_fd_p (change.m_new_state))
+ {
+ m_first_open_event = change.m_event_id;
+ return label_text::borrow ("opened here");
+ }
+
+ return fd_diagnostic::describe_state_change (change);
+ }
+
+ label_text
+ describe_final_event (const evdesc::final_event &ev) final override
+ {
+ if (m_first_open_event.known_p ())
+ return ev.formatted_print (
+ "%qE could be invalid: unchecked value from %@", m_arg,
+ &m_first_open_event);
+ else
+ return ev.formatted_print ("%qE could be invalid", m_arg);
+ }
+
+private:
+ diagnostic_event_id_t m_first_open_event;
+ const tree m_callee_fndecl;
+};
+
+fd_state_machine::fd_state_machine (logger *logger)
+ : state_machine ("file-descriptor", logger),
+ m_constant_fd (add_state ("fd-constant")),
+ m_unchecked_read_write (add_state ("fd-unchecked-read-write")),
+ m_unchecked_read_only (add_state ("fd-unchecked-read-only")),
+ m_unchecked_write_only (add_state ("fd-unchecked-write-only")),
+ m_valid_read_write (add_state ("fd-valid-read-write")),
+ m_valid_read_only (add_state ("fd-valid-read-only")),
+ m_valid_write_only (add_state ("fd-valid-write-only")),
+ m_invalid (add_state ("fd-invalid")),
+ m_closed (add_state ("fd-closed")),
+ m_stop (add_state ("fd-stop"))
+{
+}
+
+bool
+fd_state_machine::is_unchecked_fd_p (state_t s) const
+{
+ return (s == m_unchecked_read_write
+ || s == m_unchecked_read_only
+ || s == m_unchecked_write_only);
+}
+
+bool
+fd_state_machine::is_valid_fd_p (state_t s) const
+{
+ return (s == m_valid_read_write
+ || s == m_valid_read_only
+ || s == m_valid_write_only);
+}
+
+enum access_mode
+fd_state_machine::get_access_mode_from_flag (int flag) const
+{
+ /* FIXME: this code assumes the access modes on the host and
+ target are the same, which in practice might not be the case. */
+
+ if ((flag & O_ACCMODE) == O_RDONLY)
+ {
+ return READ_ONLY;
+ }
+ else if ((flag & O_ACCMODE) == O_WRONLY)
+ {
+ return WRITE_ONLY;
+ }
+ return READ_WRITE;
+}
+
+bool
+fd_state_machine::is_readonly_fd_p (state_t state) const
+{
+ return (state == m_unchecked_read_only || state == m_valid_read_only);
+}
+
+bool
+fd_state_machine::is_writeonly_fd_p (state_t state) const
+{
+ return (state == m_unchecked_write_only || state == m_valid_write_only);
+}
+
+bool
+fd_state_machine::is_closed_fd_p (state_t state) const
+{
+ return (state == m_closed);
+}
+
+bool
+fd_state_machine::is_constant_fd_p (state_t state) const
+{
+ return (state == m_constant_fd);
+}
+
+bool
+fd_state_machine::on_stmt (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt) const
+{
+ if (const gcall *call = dyn_cast<const gcall *> (stmt))
+ if (tree callee_fndecl = sm_ctxt->get_fndecl_for_call (call))
+ {
+ if (is_named_call_p (callee_fndecl, "open", call, 2))
+ {
+ on_open (sm_ctxt, node, stmt, call);
+ return true;
+ } // "open"
+
+ if (is_named_call_p (callee_fndecl, "close", call, 1))
+ {
+ on_close (sm_ctxt, node, stmt, call);
+ return true;
+ } // "close"
+
+ if (is_named_call_p (callee_fndecl, "write", call, 3))
+ {
+ on_write (sm_ctxt, node, stmt, call, callee_fndecl);
+ return true;
+ } // "write"
+
+ if (is_named_call_p (callee_fndecl, "read", call, 3))
+ {
+ on_read (sm_ctxt, node, stmt, call, callee_fndecl);
+ return true;
+ } // "read"
+ }
+
+ return false;
+}
+
+void
+fd_state_machine::on_open (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const gcall *call) const
+{
+ tree lhs = gimple_call_lhs (call);
+ if (lhs)
+ {
+ tree arg = gimple_call_arg (call, 1);
+ if (TREE_CODE (arg) == INTEGER_CST)
+ {
+ int flag = TREE_INT_CST_LOW (arg);
+ enum access_mode mode = get_access_mode_from_flag (flag);
+
+ switch (mode)
+ {
+ case READ_ONLY:
+ sm_ctxt->on_transition (node, stmt, lhs, m_start,
+ m_unchecked_read_only);
+ break;
+ case WRITE_ONLY:
+ sm_ctxt->on_transition (node, stmt, lhs, m_start,
+ m_unchecked_write_only);
+ break;
+ default:
+ sm_ctxt->on_transition (node, stmt, lhs, m_start,
+ m_unchecked_read_write);
+ }
+ }
+ }
+ else
+ {
+ sm_ctxt->warn (node, stmt, NULL_TREE, new fd_leak (*this, NULL_TREE));
+ }
+}
+
+void
+fd_state_machine::on_close (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const gcall *call) const
+{
+ tree arg = gimple_call_arg (call, 0);
+ state_t state = sm_ctxt->get_state (stmt, arg);
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
+
+ sm_ctxt->on_transition (node, stmt, arg, m_start, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_unchecked_read_write, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_unchecked_read_only, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_unchecked_write_only, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_valid_read_write, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_valid_read_only, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_valid_write_only, m_closed);
+ sm_ctxt->on_transition (node, stmt, arg, m_constant_fd, m_closed);
+
+ if (is_closed_fd_p (state))
+ {
+ sm_ctxt->warn (node, stmt, arg, new double_close (*this, diag_arg));
+ sm_ctxt->set_next_state (stmt, arg, m_stop);
+ }
+}
+void
+fd_state_machine::on_read (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const gcall *call,
+ const tree callee_fndecl) const
+{
+ check_for_open_fd (sm_ctxt, node, stmt, call, callee_fndecl, DIR_READ);
+}
+void
+fd_state_machine::on_write (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const gcall *call,
+ const tree callee_fndecl) const
+{
+ check_for_open_fd (sm_ctxt, node, stmt, call, callee_fndecl, DIR_WRITE);
+}
+
+void
+fd_state_machine::check_for_open_fd (
+ sm_context *sm_ctxt, const supernode *node, const gimple *stmt,
+ const gcall *call, const tree callee_fndecl,
+ enum access_direction callee_fndecl_dir) const
+{
+ tree arg = gimple_call_arg (call, 0);
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
+ state_t state = sm_ctxt->get_state (stmt, arg);
+
+ if (is_closed_fd_p (state))
+ {
+ sm_ctxt->warn (node, stmt, arg,
+ new fd_use_after_close (*this, diag_arg, callee_fndecl));
+ }
+
+ else
+ {
+ if (!(is_valid_fd_p (state) || (state == m_stop)))
+ {
+ if (!is_constant_fd_p (state))
+ sm_ctxt->warn (
+ node, stmt, arg,
+ new unchecked_use_of_fd (*this, diag_arg, callee_fndecl));
+ }
+ switch (callee_fndecl_dir)
+ {
+ case DIR_READ:
+ if (is_writeonly_fd_p (state))
+ {
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
+ sm_ctxt->warn (node, stmt, arg,
+ new fd_access_mode_mismatch (
+ *this, diag_arg, DIR_WRITE, callee_fndecl));
+ }
+
+ break;
+ case DIR_WRITE:
+
+ if (is_readonly_fd_p (state))
+ {
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
+ sm_ctxt->warn (node, stmt, arg,
+ new fd_access_mode_mismatch (
+ *this, diag_arg, DIR_READ, callee_fndecl));
+ }
+ break;
+ }
+ }
+}
+
+void
+fd_state_machine::on_condition (sm_context *sm_ctxt, const supernode *node,
+ const gimple *stmt, const svalue *lhs,
+ enum tree_code op, const svalue *rhs) const
+{
+ if (tree cst = rhs->maybe_get_constant ())
+ {
+ if (TREE_CODE (cst) == INTEGER_CST)
+ {
+ int val = TREE_INT_CST_LOW (cst);
+ if (val == -1)
+ {
+ if (op == NE_EXPR)
+ make_valid_transitions_on_condition (sm_ctxt, node, stmt, lhs);
+
+ else if (op == EQ_EXPR)
+ make_invalid_transitions_on_condition (sm_ctxt, node, stmt,
+ lhs);
+ }
+ }
+ }
+
+ if (rhs->all_zeroes_p ())
+ {
+ if (op == GE_EXPR)
+ make_valid_transitions_on_condition (sm_ctxt, node, stmt, lhs);
+ else if (op == LT_EXPR)
+ make_invalid_transitions_on_condition (sm_ctxt, node, stmt, lhs);
+ }
+}
+
+void
+fd_state_machine::make_valid_transitions_on_condition (sm_context *sm_ctxt,
+ const supernode *node,
+ const gimple *stmt,
+ const svalue *lhs) const
+{
+ sm_ctxt->on_transition (node, stmt, lhs, m_unchecked_read_write,
+ m_valid_read_write);
+ sm_ctxt->on_transition (node, stmt, lhs, m_unchecked_read_only,
+ m_valid_read_only);
+ sm_ctxt->on_transition (node, stmt, lhs, m_unchecked_write_only,
+ m_valid_write_only);
+}
+
+void
+fd_state_machine::make_invalid_transitions_on_condition (
+ sm_context *sm_ctxt, const supernode *node, const gimple *stmt,
+ const svalue *lhs) const
+{
+ sm_ctxt->on_transition (node, stmt, lhs, m_unchecked_read_write, m_invalid);
+ sm_ctxt->on_transition (node, stmt, lhs, m_unchecked_read_only, m_invalid);
+ sm_ctxt->on_transition (node, stmt, lhs, m_unchecked_write_only, m_invalid);
+}
+
+bool
+fd_state_machine::can_purge_p (state_t s) const
+{
+ if (is_unchecked_fd_p (s) || is_valid_fd_p (s))
+ return false;
+ else
+ return true;
+}
+
+pending_diagnostic *
+fd_state_machine::on_leak (tree var) const
+{
+ return new fd_leak (*this, var);
+}
+} // namespace
+
+state_machine *
+make_fd_state_machine (logger *logger)
+{
+ return new fd_state_machine (logger);
+}
+} // namespace ana
+
+#endif // ENABLE_ANALYZER \ No newline at end of file
diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc
index 3bd4042..553fcd8 100644
--- a/gcc/analyzer/sm-malloc.cc
+++ b/gcc/analyzer/sm-malloc.cc
@@ -1008,7 +1008,6 @@ inform_nonnull_attribute (tree fndecl, int arg_idx)
inform (DECL_SOURCE_LOCATION (fndecl),
"argument %s of %qD must be non-null",
arg_desc.m_buffer, fndecl);
- arg_desc.maybe_free ();
/* Ideally we would use the location of the parm and underline the
attribute also - but we don't have the location_t values at this point
in the middle-end.
@@ -1072,7 +1071,6 @@ public:
result = ev.formatted_print ("argument %s (%qE) could be NULL"
" where non-null expected",
arg_desc.m_buffer, ev.m_expr);
- arg_desc.maybe_free ();
return result;
}
@@ -1180,7 +1178,6 @@ public:
result = ev.formatted_print ("argument %s (%qE) NULL"
" where non-null expected",
arg_desc.m_buffer, ev.m_expr);
- arg_desc.maybe_free ();
return result;
}
diff --git a/gcc/analyzer/sm-signal.cc b/gcc/analyzer/sm-signal.cc
index 1f48a09..b601f45 100644
--- a/gcc/analyzer/sm-signal.cc
+++ b/gcc/analyzer/sm-signal.cc
@@ -266,11 +266,13 @@ public:
function *handler_fun = DECL_STRUCT_FUNCTION (m_fndecl);
if (!handler_fun)
return;
+ const extrinsic_state &ext_state = eg->get_ext_state ();
program_point entering_handler
- = program_point::from_function_entry (eg->get_supergraph (),
+ = program_point::from_function_entry (*ext_state.get_model_manager (),
+ eg->get_supergraph (),
handler_fun);
- program_state state_entering_handler (eg->get_ext_state ());
+ program_state state_entering_handler (ext_state);
update_model_for_signal_handler (state_entering_handler.m_region_model,
handler_fun);
state_entering_handler.m_checker_states[sm_idx]->set_global_state
diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc
index d2d03c3..4075cf6 100644
--- a/gcc/analyzer/sm-taint.cc
+++ b/gcc/analyzer/sm-taint.cc
@@ -109,6 +109,9 @@ private:
const supernode *node,
const gcall *call,
tree callee_fndecl) const;
+ void check_for_tainted_divisor (sm_context *sm_ctxt,
+ const supernode *node,
+ const gassign *assign) const;
public:
/* State for a "tainted" value: unsanitized data potentially under an
@@ -803,18 +806,7 @@ taint_state_machine::on_stmt (sm_context *sm_ctxt,
case ROUND_MOD_EXPR:
case RDIV_EXPR:
case EXACT_DIV_EXPR:
- {
- tree divisor = gimple_assign_rhs2 (assign);;
- state_t state = sm_ctxt->get_state (stmt, divisor);
- enum bounds b;
- if (get_taint (state, TREE_TYPE (divisor), &b))
- {
- tree diag_divisor = sm_ctxt->get_diagnostic_tree (divisor);
- sm_ctxt->warn (node, stmt, divisor,
- new tainted_divisor (*this, diag_divisor, b));
- sm_ctxt->set_next_state (stmt, divisor, m_stop);
- }
- }
+ check_for_tainted_divisor (sm_ctxt, node, assign);
break;
}
}
@@ -989,6 +981,41 @@ taint_state_machine::check_for_tainted_size_arg (sm_context *sm_ctxt,
}
}
+/* Complain if ASSIGN (a division operation) has a tainted divisor
+ that could be zero. */
+
+void
+taint_state_machine::check_for_tainted_divisor (sm_context *sm_ctxt,
+ const supernode *node,
+ const gassign *assign) const
+{
+ const region_model *old_model = sm_ctxt->get_old_region_model ();
+ if (!old_model)
+ return;
+
+ tree divisor_expr = gimple_assign_rhs2 (assign);;
+ const svalue *divisor_sval = old_model->get_rvalue (divisor_expr, NULL);
+
+ state_t state = sm_ctxt->get_state (assign, divisor_sval);
+ enum bounds b;
+ if (get_taint (state, TREE_TYPE (divisor_expr), &b))
+ {
+ const svalue *zero_sval
+ = old_model->get_manager ()->get_or_create_int_cst
+ (TREE_TYPE (divisor_expr), 0);
+ tristate ts
+ = old_model->eval_condition (divisor_sval, NE_EXPR, zero_sval);
+ if (ts.is_true ())
+ /* The divisor is known to not equal 0: don't warn. */
+ return;
+
+ tree diag_divisor = sm_ctxt->get_diagnostic_tree (divisor_expr);
+ sm_ctxt->warn (node, assign, divisor_expr,
+ new tainted_divisor (*this, diag_divisor, b));
+ sm_ctxt->set_next_state (assign, divisor_sval, m_stop);
+ }
+}
+
} // anonymous namespace
/* Internal interface to this file. */
diff --git a/gcc/analyzer/sm.cc b/gcc/analyzer/sm.cc
index 622cb0b..d17d5c7 100644
--- a/gcc/analyzer/sm.cc
+++ b/gcc/analyzer/sm.cc
@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3. If not see
#include "analyzer/program-point.h"
#include "analyzer/store.h"
#include "analyzer/svalue.h"
+#include "analyzer/program-state.h"
#if ENABLE_ANALYZER
@@ -159,6 +160,17 @@ state_machine::to_json () const
return sm_obj;
}
+/* class sm_context. */
+
+const region_model *
+sm_context::get_old_region_model () const
+{
+ if (const program_state *old_state = get_old_program_state ())
+ return old_state->m_region_model;
+ else
+ return NULL;
+}
+
/* Create instances of the various state machines, each using LOGGER,
and populate OUT with them. */
@@ -167,6 +179,7 @@ make_checkers (auto_delete_vec <state_machine> &out, logger *logger)
{
out.safe_push (make_malloc_state_machine (logger));
out.safe_push (make_fileptr_state_machine (logger));
+ out.safe_push (make_fd_state_machine (logger));
/* The "taint" checker must be explicitly enabled (as it currently
leads to state explosions that stop the other checkers working). */
if (flag_analyzer_checker)
diff --git a/gcc/analyzer/sm.h b/gcc/analyzer/sm.h
index 4cc5453..353a6db 100644
--- a/gcc/analyzer/sm.h
+++ b/gcc/analyzer/sm.h
@@ -279,6 +279,8 @@ public:
virtual const program_state *get_old_program_state () const = 0;
virtual const program_state *get_new_program_state () const = 0;
+ const region_model *get_old_region_model () const;
+
protected:
sm_context (int sm_idx, const state_machine &sm)
: m_sm_idx (sm_idx), m_sm (sm) {}
@@ -301,6 +303,7 @@ extern state_machine *make_sensitive_state_machine (logger *logger);
extern state_machine *make_signal_state_machine (logger *logger);
extern state_machine *make_pattern_test_state_machine (logger *logger);
extern state_machine *make_va_list_state_machine (logger *logger);
+extern state_machine *make_fd_state_machine (logger *logger);
} // namespace ana
diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc
index 1b7c818..d558d47 100644
--- a/gcc/analyzer/store.cc
+++ b/gcc/analyzer/store.cc
@@ -676,7 +676,6 @@ binding_map::to_json () const
const svalue *value = *const_cast <map_t &> (m_map).get (key);
label_text key_desc = key->get_desc ();
map_obj->set (key_desc.m_buffer, value->to_json ());
- key_desc.maybe_free ();
}
return map_obj;
@@ -2405,11 +2404,9 @@ store::to_json () const
label_text base_reg_desc = base_reg->get_desc ();
clusters_in_parent_reg_obj->set (base_reg_desc.m_buffer,
cluster->to_json ());
- base_reg_desc.maybe_free ();
}
label_text parent_reg_desc = parent_reg->get_desc ();
store_obj->set (parent_reg_desc.m_buffer, clusters_in_parent_reg_obj);
- parent_reg_desc.maybe_free ();
}
store_obj->set ("called_unknown_fn", new json::literal (m_called_unknown_fn));
diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
index f023c53..52b48524 100644
--- a/gcc/analyzer/supergraph.cc
+++ b/gcc/analyzer/supergraph.cc
@@ -854,13 +854,12 @@ void
superedge::dump (pretty_printer *pp) const
{
pp_printf (pp, "edge: SN: %i -> SN: %i", m_src->m_index, m_dest->m_index);
- char *desc = get_description (false);
- if (strlen (desc) > 0)
+ label_text desc (get_description (false));
+ if (strlen (desc.m_buffer) > 0)
{
pp_space (pp);
- pp_string (pp, desc);
+ pp_string (pp, desc.m_buffer);
}
- free (desc);
}
/* Dump this superedge to stderr. */
@@ -998,17 +997,15 @@ superedge::get_any_callgraph_edge () const
/* Build a description of this superedge (e.g. "true" for the true
edge of a conditional, or "case 42:" for a switch case).
- The caller is responsible for freeing the result.
-
If USER_FACING is false, the result also contains any underlying
CFG edge flags. e.g. " (flags FALLTHRU | DFS_BACK)". */
-char *
+label_text
superedge::get_description (bool user_facing) const
{
pretty_printer pp;
dump_label_to_pp (&pp, user_facing);
- return xstrdup (pp_formatted_text (&pp));
+ return label_text::take (xstrdup (pp_formatted_text (&pp)));
}
/* Implementation of superedge::dump_label_to_pp for non-switch CFG
diff --git a/gcc/analyzer/supergraph.h b/gcc/analyzer/supergraph.h
index 42c6df5..e9a5be2 100644
--- a/gcc/analyzer/supergraph.h
+++ b/gcc/analyzer/supergraph.h
@@ -331,7 +331,7 @@ class superedge : public dedge<supergraph_traits>
::edge get_any_cfg_edge () const;
cgraph_edge *get_any_callgraph_edge () const;
- char *get_description (bool user_facing) const;
+ label_text get_description (bool user_facing) const;
protected:
superedge (supernode *src, supernode *dest, enum edge_kind kind)
diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc
index 2f91494..78a6eef 100644
--- a/gcc/analyzer/svalue.cc
+++ b/gcc/analyzer/svalue.cc
@@ -97,7 +97,6 @@ svalue::to_json () const
{
label_text desc = get_desc (true);
json::value *sval_js = new json::string (desc.m_buffer);
- desc.maybe_free ();
return sval_js;
}
@@ -732,8 +731,8 @@ region_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
region_svalue::accept (visitor *v) const
{
- v->visit_region_svalue (this);
m_reg->accept (v);
+ v->visit_region_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for region_svalue. */
@@ -1031,8 +1030,8 @@ initial_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
initial_svalue::accept (visitor *v) const
{
- v->visit_initial_svalue (this);
m_reg->accept (v);
+ v->visit_initial_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for initial_svalue. */
@@ -1123,8 +1122,8 @@ unaryop_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
unaryop_svalue::accept (visitor *v) const
{
- v->visit_unaryop_svalue (this);
m_arg->accept (v);
+ v->visit_unaryop_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for unaryop_svalue. */
@@ -1225,9 +1224,9 @@ binop_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
binop_svalue::accept (visitor *v) const
{
- v->visit_binop_svalue (this);
m_arg0->accept (v);
m_arg1->accept (v);
+ v->visit_binop_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for binop_svalue. */
@@ -1283,9 +1282,9 @@ sub_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
sub_svalue::accept (visitor *v) const
{
- v->visit_sub_svalue (this);
m_parent_svalue->accept (v);
m_subregion->accept (v);
+ v->visit_sub_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for sub_svalue. */
@@ -1352,8 +1351,8 @@ repeated_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
repeated_svalue::accept (visitor *v) const
{
- v->visit_repeated_svalue (this);
m_inner_svalue->accept (v);
+ v->visit_repeated_svalue (this);
}
/* Implementation of svalue::all_zeroes_p for repeated_svalue. */
@@ -1494,8 +1493,8 @@ bits_within_svalue::maybe_fold_bits_within (tree type,
void
bits_within_svalue::accept (visitor *v) const
{
- v->visit_bits_within_svalue (this);
m_inner_svalue->accept (v);
+ v->visit_bits_within_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for bits_within_svalue. */
@@ -1544,9 +1543,9 @@ widening_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
widening_svalue::accept (visitor *v) const
{
- v->visit_widening_svalue (this);
m_base_sval->accept (v);
m_iter_sval->accept (v);
+ v->visit_widening_svalue (this);
}
/* Attempt to determine in which direction this value is changing
@@ -1711,8 +1710,8 @@ unmergeable_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
unmergeable_svalue::accept (visitor *v) const
{
- v->visit_unmergeable_svalue (this);
m_arg->accept (v);
+ v->visit_unmergeable_svalue (this);
}
/* Implementation of svalue::implicitly_live_p vfunc for unmergeable_svalue. */
@@ -1776,13 +1775,13 @@ compound_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
compound_svalue::accept (visitor *v) const
{
- v->visit_compound_svalue (this);
for (binding_map::iterator_t iter = m_map.begin ();
iter != m_map.end (); ++iter)
{
//(*iter).first.accept (v);
(*iter).second->accept (v);
}
+ v->visit_compound_svalue (this);
}
/* Calculate what the complexity of a compound_svalue instance for MAP
@@ -1903,8 +1902,8 @@ conjured_svalue::dump_to_pp (pretty_printer *pp, bool simple) const
void
conjured_svalue::accept (visitor *v) const
{
- v->visit_conjured_svalue (this);
m_id_reg->accept (v);
+ v->visit_conjured_svalue (this);
}
/* class asm_output_svalue : public svalue. */
@@ -1968,9 +1967,9 @@ asm_output_svalue::input_idx_to_asm_idx (unsigned input_idx) const
void
asm_output_svalue::accept (visitor *v) const
{
- v->visit_asm_output_svalue (this);
for (unsigned i = 0; i < m_num_inputs; i++)
m_input_arr[i]->accept (v);
+ v->visit_asm_output_svalue (this);
}
/* class const_fn_result_svalue : public svalue. */
@@ -2021,9 +2020,9 @@ const_fn_result_svalue::dump_input (pretty_printer *pp,
void
const_fn_result_svalue::accept (visitor *v) const
{
- v->visit_const_fn_result_svalue (this);
for (unsigned i = 0; i < m_num_inputs; i++)
m_input_arr[i]->accept (v);
+ v->visit_const_fn_result_svalue (this);
}
} // namespace ana
diff --git a/gcc/asan.cc b/gcc/asan.cc
index 15b2cf8..8276f12 100644
--- a/gcc/asan.cc
+++ b/gcc/asan.cc
@@ -4222,9 +4222,15 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_asan (m_ctxt); }
- virtual bool gate (function *) { return gate_asan () || gate_hwasan (); }
- virtual unsigned int execute (function *) { return asan_instrument (); }
+ opt_pass * clone () final override { return new pass_asan (m_ctxt); }
+ bool gate (function *) final override
+ {
+ return gate_asan () || gate_hwasan ();
+ }
+ unsigned int execute (function *) final override
+ {
+ return asan_instrument ();
+ }
}; // class pass_asan
@@ -4259,11 +4265,14 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return !optimize && (gate_asan () || gate_hwasan ());
}
- virtual unsigned int execute (function *) { return asan_instrument (); }
+ unsigned int execute (function *) final override
+ {
+ return asan_instrument ();
+ }
}; // class pass_asan_O0
diff --git a/gcc/auto-inc-dec.cc b/gcc/auto-inc-dec.cc
index 85fe9d1..481e7af 100644
--- a/gcc/auto-inc-dec.cc
+++ b/gcc/auto-inc-dec.cc
@@ -1692,7 +1692,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
if (!AUTO_INC_DEC)
return false;
@@ -1701,7 +1701,7 @@ public:
}
- unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_inc_dec
diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc
index 2b34b80..6533722 100644
--- a/gcc/auto-profile.cc
+++ b/gcc/auto-profile.cc
@@ -1752,13 +1752,13 @@ public:
}
/* opt_pass methods: */
- virtual bool
- gate (function *)
+ bool
+ gate (function *) final override
{
return flag_auto_profile;
}
- virtual unsigned int
- execute (function *)
+ unsigned int
+ execute (function *) final override
{
return autofdo::auto_profile ();
}
diff --git a/gcc/bb-reorder.cc b/gcc/bb-reorder.cc
index d20ccb8..5cd4825 100644
--- a/gcc/bb-reorder.cc
+++ b/gcc/bb-reorder.cc
@@ -761,7 +761,7 @@ find_traces_1_round (int branch_th, profile_count count_th,
& EDGE_CAN_FALLTHRU)
&& !(single_succ_edge (e->dest)->flags & EDGE_COMPLEX)
&& single_succ (e->dest) == best_edge->dest
- && (e->dest->count.apply_scale (2, 1)
+ && (e->dest->count * 2
>= best_edge->count () || for_size))
{
best_edge = e;
@@ -944,7 +944,7 @@ better_edge_p (const_basic_block bb, const_edge e, profile_probability prob,
/* The BEST_* values do not have to be best, but can be a bit smaller than
maximum values. */
- profile_probability diff_prob = best_prob.apply_scale (1, 10);
+ profile_probability diff_prob = best_prob / 10;
/* The smaller one is better to keep the original order. */
if (optimize_function_for_size_p (cfun))
@@ -966,7 +966,7 @@ better_edge_p (const_basic_block bb, const_edge e, profile_probability prob,
is_better_edge = false;
else
{
- profile_count diff_count = best_count.apply_scale (1, 10);
+ profile_count diff_count = best_count / 10;
if (count < best_count - diff_count
|| (!best_count.initialized_p ()
&& count.nonzero_p ()))
@@ -2633,7 +2633,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
if (targetm.cannot_modify_jumps_p ())
return false;
@@ -2641,7 +2641,7 @@ public:
&& (flag_reorder_blocks || flag_reorder_blocks_and_partition));
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_reorder_blocks
@@ -2794,8 +2794,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *);
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override;
}; // class pass_duplicate_computed_gotos
@@ -2937,8 +2937,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *);
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override;
}; // class pass_partition_blocks
diff --git a/gcc/builtins.cc b/gcc/builtins.cc
index 971b18c..35b9197 100644
--- a/gcc/builtins.cc
+++ b/gcc/builtins.cc
@@ -5184,6 +5184,9 @@ expand_builtin_trap (void)
static void
expand_builtin_unreachable (void)
{
+ /* Use gimple_build_builtin_unreachable or builtin_decl_unreachable
+ to avoid this. */
+ gcc_checking_assert (!sanitize_flags_p (SANITIZE_UNREACHABLE));
emit_barrier ();
}
@@ -6026,8 +6029,8 @@ expand_ifn_atomic_compare_exchange_into_call (gcall *call, machine_mode mode)
if (GET_MODE (boolret) != mode)
boolret = convert_modes (mode, GET_MODE (boolret), boolret, 1);
x = force_reg (mode, x);
- write_complex_part (target, boolret, true);
- write_complex_part (target, x, false);
+ write_complex_part (target, boolret, true, true);
+ write_complex_part (target, x, false, false);
}
}
@@ -6082,8 +6085,8 @@ expand_ifn_atomic_compare_exchange (gcall *call)
rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
if (GET_MODE (boolret) != mode)
boolret = convert_modes (mode, GET_MODE (boolret), boolret, 1);
- write_complex_part (target, boolret, true);
- write_complex_part (target, oldval, false);
+ write_complex_part (target, boolret, true, true);
+ write_complex_part (target, oldval, false, false);
}
}
@@ -9261,6 +9264,12 @@ fold_builtin_0 (location_t loc, tree fndecl)
case BUILT_IN_CLASSIFY_TYPE:
return fold_builtin_classify_type (NULL_TREE);
+ case BUILT_IN_UNREACHABLE:
+ /* Rewrite any explicit calls to __builtin_unreachable. */
+ if (sanitize_flags_p (SANITIZE_UNREACHABLE))
+ return build_builtin_unreachable (loc);
+ break;
+
default:
break;
}
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 1040d4a..e16014f 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,82 @@
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ * c-format.cc (range_label_for_format_type_mismatch::get_text):
+ Update for removal of label_text::maybe_free in favor of automatic
+ memory management.
+
+2022-07-06 Lewis Hyatt <lhyatt@gmail.com>
+
+ PR preprocessor/53920
+ PR c++/53431
+ * c-common.cc (c_option_is_from_cpp_diagnostics): New function.
+ * c-common.h (c_option_is_from_cpp_diagnostics): Declare.
+ (c_pp_stream_token): Declare.
+ * c-ppoutput.cc (init_pp_output): Refactor logic about skipping
+ pragmas to...
+ (should_output_pragmas): ...here. New function.
+ (token_streamer::stream): Support handling early pragmas.
+ (do_line_change): Likewise.
+ (c_pp_stream_token): New function.
+ * c-pragma.cc (struct pragma_diagnostic_data): New helper class.
+ (pragma_diagnostic_lex_normal): New function. Moved logic for
+ interpreting GCC diagnostic pragmas here.
+ (pragma_diagnostic_lex_pp): New function for parsing diagnostic pragmas
+ directly from libcpp.
+ (handle_pragma_diagnostic): Refactor into helper function...
+ (handle_pragma_diagnostic_impl): ...here. New function.
+ (handle_pragma_diagnostic_early): New function.
+ (handle_pragma_diagnostic_early_pp): New function.
+ (struct pragma_ns_name): Renamed to...
+ (struct pragma_pp_data): ...this. Add new "early_handler" member.
+ (c_register_pragma_1): Support early pragmas in the preprocessor.
+ (c_register_pragma_with_early_handler): New function.
+ (c_register_pragma): Support the new early handlers in struct
+ internal_pragma_handler.
+ (c_register_pragma_with_data): Likewise.
+ (c_register_pragma_with_expansion): Likewise.
+ (c_register_pragma_with_expansion_and_data): Likewise.
+ (c_invoke_early_pragma_handler): New function.
+ (c_pp_invoke_early_pragma_handler): New function.
+ (init_pragma): Add early pragma support for diagnostic pragmas.
+ * c-pragma.h (struct internal_pragma_handler): Add new early handler
+ members.
+ (c_register_pragma_with_early_handler): Declare.
+ (c_invoke_early_pragma_handler): Declare.
+ (c_pp_invoke_early_pragma_handler): Declare.
+
+2022-07-05 Marek Polacek <polacek@redhat.com>
+
+ PR c++/105626
+ * c-format.cc (check_format_arg): Don't emit -Wformat warnings with
+ u8 strings.
+
+2022-07-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/106111
+ * c-common.h (enum rid): Update RID_LAST_CXX20.
+
+2022-06-30 Jonathan Wakely <jwakely@redhat.com>
+
+ * known-headers.cc (get_stdlib_header_for_name): Add <time.h>
+ names.
+
+2022-06-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/87729
+ PR c++/20423
+ * c.opt (Woverloaded-virtual): Add levels, include in -Wall.
+
+2022-06-18 Jakub Jelinek <jakub@redhat.com>
+
+ * c-ubsan.cc (ubsan_instrument_division, ubsan_instrument_shift):
+ Use flag_sanitize_trap & SANITIZE_??? instead of
+ flag_sanitize_undefined_trap_on_error. If 2 sanitizers are involved
+ and flag_sanitize_trap differs for them, emit __builtin_trap only
+ for the comparison where trap is requested.
+ (ubsan_instrument_vla, ubsan_instrument_return): Use
+ lag_sanitize_trap & SANITIZE_??? instead of
+ flag_sanitize_undefined_trap_on_error.
+
2022-06-13 Jason Merrill <jason@redhat.com>
* c-ubsan.cc (ubsan_instrument_return): Use BUILTINS_LOCATION.
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
index c9c9e72..1b8e73f 100644
--- a/gcc/c-family/c-common.cc
+++ b/gcc/c-family/c-common.cc
@@ -6611,6 +6611,20 @@ c_option_controlling_cpp_diagnostic (enum cpp_warning_reason reason)
return 0;
}
+/* Return TRUE if the given option index corresponds to a diagnostic
+ issued by libcpp. Linear search seems fine for now. */
+bool
+c_option_is_from_cpp_diagnostics (int option_index)
+{
+ for (auto entry = cpp_reason_option_codes; entry->reason != CPP_W_NONE;
+ ++entry)
+ {
+ if (entry->option_code == option_index)
+ return true;
+ }
+ return false;
+}
+
/* Callback from cpp_diagnostic for PFILE to print diagnostics from the
preprocessor. The diagnostic is of type LEVEL, with REASON set
to the reason code if LEVEL is represents a warning, at location
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index 47442c9..c090084 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -271,7 +271,7 @@ enum rid
RID_FIRST_CXX11 = RID_CONSTEXPR,
RID_LAST_CXX11 = RID_STATIC_ASSERT,
RID_FIRST_CXX20 = RID_CONSTINIT,
- RID_LAST_CXX20 = RID_CONSTINIT,
+ RID_LAST_CXX20 = RID_CO_RETURN,
RID_FIRST_AT = RID_AT_ENCODE,
RID_LAST_AT = RID_AT_IMPLEMENTATION,
RID_FIRST_PQ = RID_IN,
@@ -911,6 +911,7 @@ extern tree fold_for_warn (tree);
extern tree c_common_get_narrower (tree, int *);
extern bool get_attribute_operand (tree, unsigned HOST_WIDE_INT *);
extern void c_common_finalize_early_debug (void);
+extern bool c_option_is_from_cpp_diagnostics (int);
/* Used by convert_and_check; in front ends. */
extern tree convert_init (tree, tree);
@@ -1191,6 +1192,7 @@ extern void preprocess_file (cpp_reader *);
extern void pp_file_change (const line_map_ordinary *);
extern void pp_dir_change (cpp_reader *, const char *);
extern bool check_missing_format_attribute (tree, tree);
+extern void c_pp_stream_token (cpp_reader *, const cpp_token *, location_t loc);
/* In c-omp.cc */
typedef wide_int_bitmask omp_clause_mask;
diff --git a/gcc/c-family/c-format.cc b/gcc/c-family/c-format.cc
index 4559ca3..2faed0c 100644
--- a/gcc/c-family/c-format.cc
+++ b/gcc/c-family/c-format.cc
@@ -1742,7 +1742,8 @@ check_format_arg (void *ctx, tree format_tree,
}
tree underlying_type
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (format_tree)));
- if (underlying_type != char_type_node)
+ if (underlying_type != char_type_node
+ && !(flag_char8_t && underlying_type == char8_type_node))
{
if (underlying_type == char16_type_node
|| underlying_type == char32_type_node
@@ -4624,7 +4625,6 @@ class range_label_for_format_type_mismatch
suffix.fill_buffer (p);
char *result = concat (text.m_buffer, p, NULL);
- text.maybe_free ();
return label_text::take (result);
}
diff --git a/gcc/c-family/c-ppoutput.cc b/gcc/c-family/c-ppoutput.cc
index 9de46a9..cd38c96 100644
--- a/gcc/c-family/c-ppoutput.cc
+++ b/gcc/c-family/c-ppoutput.cc
@@ -25,6 +25,8 @@
#include "c-pragma.h" /* For parse_in. */
#include "file-prefix-map.h" /* remap_macro_filename() */
+class token_streamer;
+
/* Encapsulates state used to convert a stream of tokens into a text
file. */
static struct
@@ -38,6 +40,8 @@ static struct
bool prev_was_system_token; /* True if the previous token was a
system token.*/
const char *src_file; /* Current source file. */
+ token_streamer *streamer; /* Instance of class token_streamer using this
+ object. */
} print;
/* Defined and undefined macros being queued for output with -dU at
@@ -110,6 +114,14 @@ preprocess_file (cpp_reader *pfile)
putc ('\n', print.outf);
}
+/* Don't emit #pragma or #ident directives if we are processing
+ assembly language; the assembler may choke on them. */
+static bool
+should_output_pragmas ()
+{
+ return cpp_get_options (parse_in)->lang != CLK_ASM;
+}
+
/* Set up the callbacks as appropriate. */
void
init_pp_output (FILE *out_stream)
@@ -119,9 +131,7 @@ init_pp_output (FILE *out_stream)
if (!flag_no_output)
{
cb->line_change = cb_line_change;
- /* Don't emit #pragma or #ident directives if we are processing
- assembly language; the assembler may choke on them. */
- if (cpp_get_options (parse_in)->lang != CLK_ASM)
+ if (should_output_pragmas ())
{
cb->ident = cb_ident;
cb->def_pragma = cb_def_pragma;
@@ -163,6 +173,7 @@ init_pp_output (FILE *out_stream)
print.first_time = 1;
print.src_file = "";
print.prev_was_system_token = false;
+ print.streamer = nullptr;
}
// FIXME: Ideally we'd just turn the entirety of the print struct into
@@ -183,6 +194,8 @@ class token_streamer
in_pragma (false),
line_marker_emitted (false)
{
+ gcc_assert (!print.streamer);
+ print.streamer = this;
}
void begin_pragma ()
@@ -235,7 +248,7 @@ token_streamer::stream (cpp_reader *pfile, const cpp_token *token,
print.printed = true;
}
}
- else if (token->flags & PREV_WHITE)
+ else if (token->flags & PREV_WHITE && token->type != CPP_PRAGMA)
{
unsigned src_line = LOCATION_LINE (loc);
@@ -252,22 +265,28 @@ token_streamer::stream (cpp_reader *pfile, const cpp_token *token,
print.prev = token;
if (token->type == CPP_PRAGMA)
{
- const char *space;
- const char *name;
-
- line_marker_emitted = maybe_print_line (token->src_loc);
- fputs ("#pragma ", print.outf);
- c_pp_lookup_pragma (token->val.pragma, &space, &name);
- if (space)
- fprintf (print.outf, "%s %s", space, name);
- else
- fprintf (print.outf, "%s", name);
- print.printed = true;
in_pragma = true;
+ if (should_output_pragmas ())
+ {
+ const char *space;
+ const char *name;
+
+ line_marker_emitted = maybe_print_line (token->src_loc);
+ fputs ("#pragma ", print.outf);
+ c_pp_lookup_pragma (token->val.pragma, &space, &name);
+ if (space)
+ fprintf (print.outf, "%s %s", space, name);
+ else
+ fprintf (print.outf, "%s", name);
+ print.printed = true;
+ }
+ if (token->val.pragma >= PRAGMA_FIRST_EXTERNAL)
+ c_pp_invoke_early_pragma_handler (token->val.pragma);
}
else if (token->type == CPP_PRAGMA_EOL)
{
- maybe_print_line (UNKNOWN_LOCATION);
+ if (should_output_pragmas ())
+ maybe_print_line (UNKNOWN_LOCATION);
in_pragma = false;
}
else
@@ -287,9 +306,12 @@ token_streamer::stream (cpp_reader *pfile, const cpp_token *token,
do_line_change (pfile, token, loc, false);
print.prev_was_system_token = !!in_system_header_at (loc);
}
- cpp_output_token (token, print.outf);
- line_marker_emitted = false;
- print.printed = true;
+ if (!in_pragma || should_output_pragmas ())
+ {
+ cpp_output_token (token, print.outf);
+ line_marker_emitted = false;
+ print.printed = true;
+ }
}
/* CPP_COMMENT tokens and raw-string literal tokens can have
@@ -561,8 +583,12 @@ do_line_change (cpp_reader *pfile, const cpp_token *token,
one space per column greater than 2, since scan_translation_unit
will provide a space if PREV_WHITE. Don't bother trying to
reconstruct tabs; we can't get it right in general, and nothing
- ought to care. Some things do care; the fault lies with them. */
- if (!CPP_OPTION (pfile, traditional))
+ ought to care. Some things do care; the fault lies with them.
+
+ Also do not output the spaces if this is a CPP_PRAGMA token. In this
+ case, libcpp has provided the location of the first token after #pragma,
+ so we would start at the wrong column. */
+ if (!CPP_OPTION (pfile, traditional) && token->type != CPP_PRAGMA)
{
int spaces = LOCATION_COLUMN (src_loc) - 2;
print.printed = true;
@@ -782,6 +808,16 @@ cb_def_pragma (cpp_reader *pfile, location_t line)
print.src_line++;
}
+/* Stream a token as if we had seen it directly ourselves; needed
+ in case a token was lexed externally, e.g. while processing a
+ pragma. */
+void
+c_pp_stream_token (cpp_reader *pfile, const cpp_token *tok, location_t loc)
+{
+ gcc_assert (print.streamer);
+ print.streamer->stream (pfile, tok, loc);
+}
+
/* Dump out the hash table. */
static int
dump_macro (cpp_reader *pfile, cpp_hashnode *node, void *v ATTRIBUTE_UNUSED)
diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc
index cc05b25..62bce2e 100644
--- a/gcc/c-family/c-pragma.cc
+++ b/gcc/c-family/c-pragma.cc
@@ -764,139 +764,324 @@ handle_pragma_visibility (cpp_reader *)
warning (OPT_Wpragmas, "junk at end of %<#pragma GCC visibility%>");
}
+/* Helper routines for parsing #pragma GCC diagnostic. */
+class pragma_diagnostic_data
+{
+ pragma_diagnostic_data (const pragma_diagnostic_data &) = delete;
+ pragma_diagnostic_data& operator= (const pragma_diagnostic_data &) = delete;
+
+public:
+ bool valid;
+ location_t loc_kind, loc_option;
+ enum pd_kind_t
+ {
+ PK_INVALID,
+ PK_PUSH,
+ PK_POP,
+ PK_IGNORED_ATTRIBUTES,
+ PK_DIAGNOSTIC,
+ } pd_kind;
+ diagnostic_t diagnostic_kind;
+ const char *kind_str;
+ const char *option_str;
+ bool own_option_str;
+
+ pragma_diagnostic_data () { clear (); }
+ void clear ()
+ {
+ valid = false;
+ loc_kind = loc_option = UNKNOWN_LOCATION;
+ pd_kind = PK_INVALID;
+ diagnostic_kind = DK_UNSPECIFIED;
+ kind_str = option_str = nullptr;
+ own_option_str = false;
+ }
+
+ ~pragma_diagnostic_data ()
+ {
+ if (own_option_str && option_str)
+ XDELETEVEC (const_cast<char *> (option_str));
+ }
+
+ void set_kind (const char *kind_string)
+ {
+ kind_str = kind_string;
+
+ pd_kind = PK_INVALID;
+ diagnostic_kind = DK_UNSPECIFIED;
+ if (strcmp (kind_str, "push") == 0)
+ pd_kind = PK_PUSH;
+ else if (strcmp (kind_str, "pop") == 0)
+ pd_kind = PK_POP;
+ else if (strcmp (kind_str, "ignored_attributes") == 0)
+ pd_kind = PK_IGNORED_ATTRIBUTES;
+ else if (strcmp (kind_str, "error") == 0)
+ {
+ pd_kind = PK_DIAGNOSTIC;
+ diagnostic_kind = DK_ERROR;
+ }
+ else if (strcmp (kind_str, "warning") == 0)
+ {
+ pd_kind = PK_DIAGNOSTIC;
+ diagnostic_kind = DK_WARNING;
+ }
+ else if (strcmp (kind_str, "ignored") == 0)
+ {
+ pd_kind = PK_DIAGNOSTIC;
+ diagnostic_kind = DK_IGNORED;
+ }
+ }
+
+ bool needs_option () const
+ {
+ return pd_kind == PK_IGNORED_ATTRIBUTES
+ || pd_kind == PK_DIAGNOSTIC;
+ }
+
+};
+
+/* When compiling normally, use pragma_lex () to obtain the needed tokens.
+ This will call into either the C or C++ frontends as appropriate. */
+
static void
-handle_pragma_diagnostic(cpp_reader *)
+pragma_diagnostic_lex_normal (pragma_diagnostic_data *result)
{
+ result->clear ();
tree x;
- location_t loc;
- enum cpp_ttype token = pragma_lex (&x, &loc);
- if (token != CPP_NAME)
+ auto ttype = pragma_lex (&x, &result->loc_kind);
+ if (ttype != CPP_NAME)
+ return;
+ result->set_kind (IDENTIFIER_POINTER (x));
+ if (result->pd_kind == pragma_diagnostic_data::PK_INVALID)
+ return;
+
+ if (result->needs_option ())
{
- warning_at (loc, OPT_Wpragmas,
- "missing %<error%>, %<warning%>, %<ignored%>, %<push%>, "
- "%<pop%>, or %<ignored_attributes%> after "
- "%<#pragma GCC diagnostic%>");
- return;
+ ttype = pragma_lex (&x, &result->loc_option);
+ if (ttype != CPP_STRING)
+ return;
+ result->option_str = TREE_STRING_POINTER (x);
}
- diagnostic_t kind;
- const char *kind_string = IDENTIFIER_POINTER (x);
- if (strcmp (kind_string, "error") == 0)
- kind = DK_ERROR;
- else if (strcmp (kind_string, "warning") == 0)
- kind = DK_WARNING;
- else if (strcmp (kind_string, "ignored") == 0)
- kind = DK_IGNORED;
- else if (strcmp (kind_string, "push") == 0)
+ result->valid = true;
+}
+
+/* When preprocessing only, pragma_lex () is not available, so obtain the
+ tokens directly from libcpp. We also need to inform the token streamer
+ about all tokens we lex ourselves here, so it outputs them too; this is
+ done by calling c_pp_stream_token () for each.
+
+ ??? If we need to support more pragmas in the future, maybe initialize
+ this_parser with the pragma tokens and call pragma_lex () instead? */
+
+static void
+pragma_diagnostic_lex_pp (pragma_diagnostic_data *result)
+{
+ result->clear ();
+
+ auto tok = cpp_get_token_with_location (parse_in, &result->loc_kind);
+ c_pp_stream_token (parse_in, tok, result->loc_kind);
+ if (!(tok->type == CPP_NAME || tok->type == CPP_KEYWORD))
+ return;
+ const unsigned char *const kind_u = cpp_token_as_text (parse_in, tok);
+ result->set_kind ((const char *)kind_u);
+ if (result->pd_kind == pragma_diagnostic_data::PK_INVALID)
+ return;
+
+ if (result->needs_option ())
{
- diagnostic_push_diagnostics (global_dc, input_location);
- return;
+ tok = cpp_get_token_with_location (parse_in, &result->loc_option);
+ c_pp_stream_token (parse_in, tok, result->loc_option);
+ if (tok->type != CPP_STRING)
+ return;
+ cpp_string str;
+ if (!cpp_interpret_string_notranslate (parse_in, &tok->val.str, 1, &str,
+ CPP_STRING)
+ || !str.len)
+ return;
+ result->option_str = (const char *)str.text;
+ result->own_option_str = true;
}
- else if (strcmp (kind_string, "pop") == 0)
+
+ result->valid = true;
+}
+
+/* Handle #pragma GCC diagnostic. Early mode is used by frontends (such as C++)
+ that do not process the deferred pragma while they are consuming tokens; they
+ can use early mode to make sure diagnostics affecting the preprocessor itself
+ are correctly modified by the #pragma. */
+template<bool early, bool is_pp> static void
+handle_pragma_diagnostic_impl ()
+{
+ static const bool want_diagnostics = (is_pp || !early);
+
+ pragma_diagnostic_data data;
+ if (is_pp)
+ pragma_diagnostic_lex_pp (&data);
+ else
+ pragma_diagnostic_lex_normal (&data);
+
+ if (!data.kind_str)
{
- diagnostic_pop_diagnostics (global_dc, input_location);
+ if (want_diagnostics)
+ warning_at (data.loc_kind, OPT_Wpragmas,
+ "missing %<error%>, %<warning%>, %<ignored%>, %<push%>, "
+ "%<pop%>, or %<ignored_attributes%> after "
+ "%<#pragma GCC diagnostic%>");
return;
}
- else if (strcmp (kind_string, "ignored_attributes") == 0)
+
+ switch (data.pd_kind)
{
- token = pragma_lex (&x, &loc);
- if (token != CPP_STRING)
- {
- warning_at (loc, OPT_Wpragmas,
- "missing attribute name after %<#pragma GCC diagnostic "
- "ignored_attributes%>");
- return;
- }
- char *args = xstrdup (TREE_STRING_POINTER (x));
- const size_t l = strlen (args);
- if (l == 0)
- {
- warning_at (loc, OPT_Wpragmas, "missing argument to %<#pragma GCC "
- "diagnostic ignored_attributes%>");
- free (args);
+
+ case pragma_diagnostic_data::PK_PUSH:
+ diagnostic_push_diagnostics (global_dc, input_location);
+ return;
+
+ case pragma_diagnostic_data::PK_POP:
+ diagnostic_pop_diagnostics (global_dc, input_location);
+ return;
+
+ case pragma_diagnostic_data::PK_IGNORED_ATTRIBUTES:
+ {
+ if (early)
return;
- }
- else if (args[l - 1] == ',')
+ if (!data.option_str)
+ {
+ warning_at (data.loc_option, OPT_Wpragmas,
+ "missing attribute name after %<#pragma GCC diagnostic "
+ "ignored_attributes%>");
+ return;
+ }
+ char *args = xstrdup (data.option_str);
+ const size_t l = strlen (args);
+ if (l == 0)
+ {
+ warning_at (data.loc_option, OPT_Wpragmas,
+ "missing argument to %<#pragma GCC "
+ "diagnostic ignored_attributes%>");
+ free (args);
+ return;
+ }
+ else if (args[l - 1] == ',')
+ {
+ warning_at (data.loc_option, OPT_Wpragmas,
+ "trailing %<,%> in arguments for "
+ "%<#pragma GCC diagnostic ignored_attributes%>");
+ free (args);
+ return;
+ }
+ auto_vec<char *> v;
+ for (char *p = strtok (args, ","); p; p = strtok (NULL, ","))
+ v.safe_push (p);
+ handle_ignored_attributes_option (&v);
+ free (args);
+ return;
+ }
+
+ case pragma_diagnostic_data::PK_DIAGNOSTIC:
+ if (!data.option_str)
{
- warning_at (loc, OPT_Wpragmas, "trailing %<,%> in arguments for "
- "%<#pragma GCC diagnostic ignored_attributes%>");
- free (args);
+ if (want_diagnostics)
+ warning_at (data.loc_option, OPT_Wpragmas,
+ "missing option after %<#pragma GCC diagnostic%> kind");
return;
}
- auto_vec<char *> v;
- for (char *p = strtok (args, ","); p; p = strtok (NULL, ","))
- v.safe_push (p);
- handle_ignored_attributes_option (&v);
- free (args);
- return;
- }
- else
- {
- warning_at (loc, OPT_Wpragmas,
- "expected %<error%>, %<warning%>, %<ignored%>, %<push%>, "
- "%<pop%>, %<ignored_attributes%> after "
- "%<#pragma GCC diagnostic%>");
- return;
- }
+ break;
- token = pragma_lex (&x, &loc);
- if (token != CPP_STRING)
- {
- warning_at (loc, OPT_Wpragmas,
- "missing option after %<#pragma GCC diagnostic%> kind");
+ default:
+ if (want_diagnostics)
+ warning_at (data.loc_kind, OPT_Wpragmas,
+ "expected %<error%>, %<warning%>, %<ignored%>, %<push%>, "
+ "%<pop%>, %<ignored_attributes%> after "
+ "%<#pragma GCC diagnostic%>");
return;
+
}
- const char *option_string = TREE_STRING_POINTER (x);
+ gcc_assert (data.pd_kind == pragma_diagnostic_data::PK_DIAGNOSTIC);
+ gcc_assert (data.valid);
+
unsigned int lang_mask = c_common_option_lang_mask () | CL_COMMON;
/* option_string + 1 to skip the initial '-' */
- unsigned int option_index = find_opt (option_string + 1, lang_mask);
+ unsigned int option_index = find_opt (data.option_str + 1, lang_mask);
+
+ if (early && !c_option_is_from_cpp_diagnostics (option_index))
+ return;
+
+ const char *arg = NULL;
+ if (cl_options[option_index].flags & CL_JOINED)
+ arg = data.option_str + 1 + cl_options[option_index].opt_len;
+
if (option_index == OPT_SPECIAL_unknown)
{
- auto_diagnostic_group d;
- if (warning_at (loc, OPT_Wpragmas,
- "unknown option after %<#pragma GCC diagnostic%> kind"))
+ if (want_diagnostics)
{
- option_proposer op;
- const char *hint = op.suggest_option (option_string + 1);
- if (hint)
- inform (loc, "did you mean %<-%s%>?", hint);
+ auto_diagnostic_group d;
+ if (warning_at (data.loc_option, OPT_Wpragmas,
+ "unknown option after %<#pragma GCC diagnostic%> kind"))
+ {
+ option_proposer op;
+ const char *hint = op.suggest_option (data.option_str + 1);
+ if (hint)
+ inform (data.loc_option, "did you mean %<-%s%>?", hint);
+ }
}
return;
}
else if (!(cl_options[option_index].flags & CL_WARNING))
{
- warning_at (loc, OPT_Wpragmas,
- "%qs is not an option that controls warnings", option_string);
+ if (want_diagnostics)
+ warning_at (data.loc_option, OPT_Wpragmas,
+ "%qs is not an option that controls warnings",
+ data.option_str);
return;
}
else if (!(cl_options[option_index].flags & lang_mask))
{
- char *ok_langs = write_langs (cl_options[option_index].flags);
- char *bad_lang = write_langs (c_common_option_lang_mask ());
- warning_at (loc, OPT_Wpragmas,
- "option %qs is valid for %s but not for %s",
- option_string, ok_langs, bad_lang);
- free (ok_langs);
- free (bad_lang);
+ if (want_diagnostics)
+ {
+ char *ok_langs = write_langs (cl_options[option_index].flags);
+ char *bad_lang = write_langs (c_common_option_lang_mask ());
+ warning_at (data.loc_option, OPT_Wpragmas,
+ "option %qs is valid for %s but not for %s",
+ data.option_str, ok_langs, bad_lang);
+ free (ok_langs);
+ free (bad_lang);
+ }
return;
}
struct cl_option_handlers handlers;
set_default_handlers (&handlers, NULL);
- const char *arg = NULL;
- if (cl_options[option_index].flags & CL_JOINED)
- arg = option_string + 1 + cl_options[option_index].opt_len;
/* FIXME: input_location isn't the best location here, but it is
what we used to do here before and changing it breaks e.g.
PR69543 and PR69558. */
- control_warning_option (option_index, (int) kind,
- arg, kind != DK_IGNORED,
+ control_warning_option (option_index, (int) data.diagnostic_kind,
+ arg, data.diagnostic_kind != DK_IGNORED,
input_location, lang_mask, &handlers,
&global_options, &global_options_set,
global_dc);
}
+static void
+handle_pragma_diagnostic (cpp_reader *)
+{
+ handle_pragma_diagnostic_impl<false, false> ();
+}
+
+static void
+handle_pragma_diagnostic_early (cpp_reader *)
+{
+ handle_pragma_diagnostic_impl<true, false> ();
+}
+
+static void
+handle_pragma_diagnostic_early_pp (cpp_reader *)
+{
+ handle_pragma_diagnostic_impl<true, true> ();
+}
+
/* Parse #pragma GCC target (xxx) to set target specific options. */
static void
handle_pragma_target(cpp_reader *)
@@ -1332,14 +1517,15 @@ handle_pragma_float_const_decimal64 (cpp_reader *)
static vec<internal_pragma_handler> registered_pragmas;
-struct pragma_ns_name
+struct pragma_pp_data
{
const char *space;
const char *name;
+ pragma_handler_1arg early_handler;
};
-static vec<pragma_ns_name> registered_pp_pragmas;
+static vec<pragma_pp_data> registered_pp_pragmas;
struct omp_pragma_def { const char *name; unsigned int id; };
static const struct omp_pragma_def oacc_pragmas[] = {
@@ -1452,14 +1638,14 @@ c_register_pragma_1 (const char *space, const char *name,
if (flag_preprocess_only)
{
- pragma_ns_name ns_name;
-
- if (!allow_expansion)
+ if (!(allow_expansion || ihandler.early_handler.handler_1arg))
return;
- ns_name.space = space;
- ns_name.name = name;
- registered_pp_pragmas.safe_push (ns_name);
+ pragma_pp_data pp_data;
+ pp_data.space = space;
+ pp_data.name = name;
+ pp_data.early_handler = ihandler.early_handler.handler_1arg;
+ registered_pp_pragmas.safe_push (pp_data);
id = registered_pp_pragmas.length ();
id += PRAGMA_FIRST_EXTERNAL - 1;
}
@@ -1485,9 +1671,16 @@ void
c_register_pragma (const char *space, const char *name,
pragma_handler_1arg handler)
{
+ c_register_pragma_with_early_handler (space, name, handler, nullptr);
+}
+void c_register_pragma_with_early_handler (const char *space, const char *name,
+ pragma_handler_1arg handler,
+ pragma_handler_1arg early_handler)
+{
internal_pragma_handler ihandler;
ihandler.handler.handler_1arg = handler;
+ ihandler.early_handler.handler_1arg = early_handler;
ihandler.extra_data = false;
ihandler.data = NULL;
c_register_pragma_1 (space, name, ihandler, false);
@@ -1504,6 +1697,7 @@ c_register_pragma_with_data (const char *space, const char *name,
internal_pragma_handler ihandler;
ihandler.handler.handler_2arg = handler;
+ ihandler.early_handler.handler_2arg = nullptr;
ihandler.extra_data = true;
ihandler.data = data;
c_register_pragma_1 (space, name, ihandler, false);
@@ -1523,6 +1717,7 @@ c_register_pragma_with_expansion (const char *space, const char *name,
internal_pragma_handler ihandler;
ihandler.handler.handler_1arg = handler;
+ ihandler.early_handler.handler_1arg = nullptr;
ihandler.extra_data = false;
ihandler.data = NULL;
c_register_pragma_1 (space, name, ihandler, true);
@@ -1544,6 +1739,7 @@ c_register_pragma_with_expansion_and_data (const char *space, const char *name,
internal_pragma_handler ihandler;
ihandler.handler.handler_2arg = handler;
+ ihandler.early_handler.handler_2arg = nullptr;
ihandler.extra_data = true;
ihandler.data = data;
c_register_pragma_1 (space, name, ihandler, true);
@@ -1570,6 +1766,38 @@ c_invoke_pragma_handler (unsigned int id)
}
}
+/* In contrast to the normal handler, the early handler is optional. */
+void
+c_invoke_early_pragma_handler (unsigned int id)
+{
+ internal_pragma_handler *ihandler;
+ pragma_handler_1arg handler_1arg;
+ pragma_handler_2arg handler_2arg;
+
+ id -= PRAGMA_FIRST_EXTERNAL;
+ ihandler = &registered_pragmas[id];
+ if (ihandler->extra_data)
+ {
+ handler_2arg = ihandler->early_handler.handler_2arg;
+ if (handler_2arg)
+ handler_2arg (parse_in, ihandler->data);
+ }
+ else
+ {
+ handler_1arg = ihandler->early_handler.handler_1arg;
+ if (handler_1arg)
+ handler_1arg (parse_in);
+ }
+}
+
+void
+c_pp_invoke_early_pragma_handler (unsigned int id)
+{
+ const auto data = &registered_pp_pragmas[id - PRAGMA_FIRST_EXTERNAL];
+ if (data->early_handler)
+ data->early_handler (parse_in);
+}
+
/* Set up front-end pragmas. */
void
init_pragma (void)
@@ -1625,7 +1853,14 @@ init_pragma (void)
c_register_pragma ("GCC", "visibility", handle_pragma_visibility);
- c_register_pragma ("GCC", "diagnostic", handle_pragma_diagnostic);
+ if (flag_preprocess_only)
+ c_register_pragma_with_early_handler ("GCC", "diagnostic",
+ nullptr,
+ handle_pragma_diagnostic_early_pp);
+ else
+ c_register_pragma_with_early_handler ("GCC", "diagnostic",
+ handle_pragma_diagnostic,
+ handle_pragma_diagnostic_early);
c_register_pragma ("GCC", "target", handle_pragma_target);
c_register_pragma ("GCC", "optimize", handle_pragma_optimize);
c_register_pragma ("GCC", "push_options", handle_pragma_push_options);
diff --git a/gcc/c-family/c-pragma.h b/gcc/c-family/c-pragma.h
index d5d4fe3..de806a6 100644
--- a/gcc/c-family/c-pragma.h
+++ b/gcc/c-family/c-pragma.h
@@ -219,7 +219,7 @@ union gen_pragma_handler {
};
/* Internally used to keep the data of the handler. */
struct internal_pragma_handler {
- union gen_pragma_handler handler;
+ union gen_pragma_handler handler, early_handler;
/* Permits to know if handler is a pragma_handler_1arg (extra_data is false)
or a pragma_handler_2arg (extra_data is true). */
bool extra_data;
@@ -242,6 +242,17 @@ extern void c_register_pragma_with_expansion_and_data (const char *space,
void *data);
extern void c_invoke_pragma_handler (unsigned int);
+/* Early pragma handlers run in addition to the normal ones. They can be used
+ by frontends such as C++ that may want to process some pragmas during lexing
+ before they start processing them. */
+extern void
+c_register_pragma_with_early_handler (const char *space, const char *name,
+ pragma_handler_1arg handler,
+ pragma_handler_1arg early_handler);
+extern void c_invoke_early_pragma_handler (unsigned int);
+extern void c_pp_invoke_early_pragma_handler (unsigned int);
+
+
extern void maybe_apply_pragma_weak (tree);
extern void maybe_apply_pending_pragma_weaks (void);
extern tree maybe_apply_renaming_pragma (tree, tree);
diff --git a/gcc/c-family/c-ubsan.cc b/gcc/c-family/c-ubsan.cc
index a2cd8fb..360ba82 100644
--- a/gcc/c-family/c-ubsan.cc
+++ b/gcc/c-family/c-ubsan.cc
@@ -83,8 +83,9 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1)
x = NULL_TREE;
flag = SANITIZE_SI_OVERFLOW;
}
- else if (flag_sanitize_undefined_trap_on_error
- || (((flag_sanitize_recover & SANITIZE_DIVIDE) == 0)
+ else if ((((flag_sanitize_trap & SANITIZE_DIVIDE) == 0)
+ == ((flag_sanitize_trap & SANITIZE_SI_OVERFLOW) == 0))
+ && (((flag_sanitize_recover & SANITIZE_DIVIDE) == 0)
== ((flag_sanitize_recover & SANITIZE_SI_OVERFLOW) == 0)))
{
t = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, t, x);
@@ -105,7 +106,7 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1)
make sure it gets evaluated before the condition. */
t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op0), t);
t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op1), t);
- if (flag_sanitize_undefined_trap_on_error)
+ if ((flag_sanitize_trap & flag) && x == NULL_TREE)
tt = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -113,25 +114,41 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1)
ubsan_type_descriptor (type), NULL_TREE,
NULL_TREE);
data = build_fold_addr_expr_loc (loc, data);
- enum built_in_function bcode
- = (flag_sanitize_recover & flag)
- ? BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW
- : BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT;
- tt = builtin_decl_explicit (bcode);
- op0 = unshare_expr (op0);
- op1 = unshare_expr (op1);
- tt = build_call_expr_loc (loc, tt, 3, data, ubsan_encode_value (op0),
- ubsan_encode_value (op1));
- if (x)
+ if (flag_sanitize_trap & flag)
+ tt = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP),
+ 0);
+ else
{
- bcode = (flag_sanitize_recover & SANITIZE_SI_OVERFLOW)
- ? BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW
- : BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT;
- tree xt = builtin_decl_explicit (bcode);
+ enum built_in_function bcode
+ = (flag_sanitize_recover & flag)
+ ? BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW
+ : BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT;
+ tt = builtin_decl_explicit (bcode);
op0 = unshare_expr (op0);
op1 = unshare_expr (op1);
- xt = build_call_expr_loc (loc, xt, 3, data, ubsan_encode_value (op0),
+ tt = build_call_expr_loc (loc, tt, 3, data, ubsan_encode_value (op0),
ubsan_encode_value (op1));
+ }
+ if (x)
+ {
+ tree xt;
+ if (flag_sanitize_trap & SANITIZE_SI_OVERFLOW)
+ xt = build_call_expr_loc (loc,
+ builtin_decl_explicit (BUILT_IN_TRAP),
+ 0);
+ else
+ {
+ enum built_in_function bcode
+ = (flag_sanitize_recover & SANITIZE_SI_OVERFLOW)
+ ? BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW
+ : BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT;
+ xt = builtin_decl_explicit (bcode);
+ op0 = unshare_expr (op0);
+ op1 = unshare_expr (op1);
+ xt = build_call_expr_loc (loc, xt, 3, data,
+ ubsan_encode_value (op0),
+ ubsan_encode_value (op1));
+ }
x = fold_build3 (COND_EXPR, void_type_node, x, xt, void_node);
}
}
@@ -225,8 +242,9 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
}
else
{
- if (flag_sanitize_undefined_trap_on_error
- || ((!(flag_sanitize_recover & SANITIZE_SHIFT_EXPONENT))
+ if (((!(flag_sanitize_trap & SANITIZE_SHIFT_EXPONENT))
+ == (!(flag_sanitize_trap & SANITIZE_SHIFT_BASE)))
+ && ((!(flag_sanitize_recover & SANITIZE_SHIFT_EXPONENT))
== (!(flag_sanitize_recover & SANITIZE_SHIFT_BASE))))
t = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, t, tt);
else
@@ -234,7 +252,7 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
}
}
- if (flag_sanitize_undefined_trap_on_error)
+ if ((flag_sanitize_trap & recover_kind) && else_t == void_node)
tt = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -244,26 +262,40 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
NULL_TREE);
data = build_fold_addr_expr_loc (loc, data);
- enum built_in_function bcode
- = (flag_sanitize_recover & recover_kind)
- ? BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS
- : BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS_ABORT;
- tt = builtin_decl_explicit (bcode);
- op0 = unshare_expr (op0);
- op1 = unshare_expr (op1);
- tt = build_call_expr_loc (loc, tt, 3, data, ubsan_encode_value (op0),
- ubsan_encode_value (op1));
+ if (flag_sanitize_trap & recover_kind)
+ tt = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP), 0);
+ else
+ {
+ enum built_in_function bcode
+ = (flag_sanitize_recover & recover_kind)
+ ? BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS
+ : BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS_ABORT;
+ tt = builtin_decl_explicit (bcode);
+ op0 = unshare_expr (op0);
+ op1 = unshare_expr (op1);
+ tt = build_call_expr_loc (loc, tt, 3, data, ubsan_encode_value (op0),
+ ubsan_encode_value (op1));
+ }
if (else_t != void_node)
{
- bcode = (flag_sanitize_recover & SANITIZE_SHIFT_BASE)
+ tree else_tt;
+ if (flag_sanitize_trap & SANITIZE_SHIFT_BASE)
+ else_tt
+ = build_call_expr_loc (loc,
+ builtin_decl_explicit (BUILT_IN_TRAP), 0);
+ else
+ {
+ enum built_in_function bcode
+ = (flag_sanitize_recover & SANITIZE_SHIFT_BASE)
? BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS
: BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS_ABORT;
- tree else_tt = builtin_decl_explicit (bcode);
- op0 = unshare_expr (op0);
- op1 = unshare_expr (op1);
- else_tt = build_call_expr_loc (loc, else_tt, 3, data,
- ubsan_encode_value (op0),
- ubsan_encode_value (op1));
+ else_tt = builtin_decl_explicit (bcode);
+ op0 = unshare_expr (op0);
+ op1 = unshare_expr (op1);
+ else_tt = build_call_expr_loc (loc, else_tt, 3, data,
+ ubsan_encode_value (op0),
+ ubsan_encode_value (op1));
+ }
else_t = fold_build3 (COND_EXPR, void_type_node, else_t,
else_tt, void_node);
}
@@ -282,7 +314,7 @@ ubsan_instrument_vla (location_t loc, tree size)
tree t, tt;
t = fold_build2 (LE_EXPR, boolean_type_node, size, build_int_cst (type, 0));
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_VLA)
tt = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -307,10 +339,10 @@ ubsan_instrument_vla (location_t loc, tree size)
tree
ubsan_instrument_return (location_t loc)
{
- if (flag_sanitize_undefined_trap_on_error)
- return build_call_expr_loc
- /* pass_warn_function_return checks for BUILTINS_LOCATION. */
- (BUILTINS_LOCATION, builtin_decl_explicit (BUILT_IN_TRAP), 0);
+ if (flag_sanitize_trap & SANITIZE_RETURN)
+ /* pass_warn_function_return checks for BUILTINS_LOCATION. */
+ return build_call_expr_loc (BUILTINS_LOCATION,
+ builtin_decl_explicit (BUILT_IN_TRAP), 0);
tree data = ubsan_create_data ("__ubsan_missing_return_data", 1, &loc,
NULL_TREE, NULL_TREE);
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 41a20bc6..44e1a60 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1126,7 +1126,11 @@ C ObjC C++ ObjC++ Var(warn_overlength_strings) Warning LangEnabledBy(C ObjC C++
Warn if a string is longer than the maximum portable length specified by the standard.
Woverloaded-virtual
-C++ ObjC++ Var(warn_overloaded_virtual) Warning
+C++ ObjC++ Warning Alias(Woverloaded-virtual=,2,0)
+Warn about overloaded virtual function names.
+
+Woverloaded-virtual=
+C++ ObjC++ Joined UInteger IntegerRange(0,2) Var(warn_overloaded_virtual) Warning LangEnabledBy(C++ ObjC++,Wall,1,0)
Warn about overloaded virtual function names.
Woverride-init
diff --git a/gcc/c-family/known-headers.cc b/gcc/c-family/known-headers.cc
index 01c86b2..9c25617 100644
--- a/gcc/c-family/known-headers.cc
+++ b/gcc/c-family/known-headers.cc
@@ -199,6 +199,20 @@ get_stdlib_header_for_name (const char *name, enum stdlib lib)
{"WINT_MAX", {"<stdint.h>", "<cstdint>"} },
{"WINT_MIN", {"<stdint.h>", "<cstdint>"} },
+ /* <time.h>. */
+ {"asctime", {"<time.h>", "<ctime>"} },
+ {"clock", {"<time.h>", "<ctime>"} },
+ {"clock_t", {"<time.h>", "<ctime>"} },
+ {"ctime", {"<time.h>", "<ctime>"} },
+ {"difftime", {"<time.h>", "<ctime>"} },
+ {"gmtime", {"<time.h>", "<ctime>"} },
+ {"localtime", {"<time.h>", "<ctime>"} },
+ {"mktime", {"<time.h>", "<ctime>"} },
+ {"strftime", {"<time.h>", "<ctime>"} },
+ {"time", {"<time.h>", "<ctime>"} },
+ {"time_t", {"<time.h>", "<ctime>"} },
+ {"tm", {"<time.h>", "<ctime>"} },
+
/* <wchar.h>. */
{"WCHAR_MAX", {"<wchar.h>", "<cwchar>"} },
{"WCHAR_MIN", {"<wchar.h>", "<cwchar>"} }
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 077b726..989f293 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,18 @@
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-parser.cc (c_parser_omp_target_data, c_parser_omp_target_update,
+ c_parser_omp_target_enter_data, c_parser_omp_target_exit_data): Set
+ OMP_REQUIRES_TARGET_USED.
+ (c_parser_omp_requires): Remove sorry.
+
+2022-07-01 Tobias Burnus <tobias@codesourcery.com>
+
+ * c-parser.cc (c_parser_omp_target_enter_data,
+ c_parser_omp_target_exit_data): Accept tofrom
+ map-type modifier but use 'to' / 'from' internally.
+
2022-06-16 David Malcolm <dmalcolm@redhat.com>
* c-decl.cc (implicitly_declare): Add auto_diagnostic_group to
diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index 1704a52..9c02141 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -20915,6 +20915,10 @@ c_parser_omp_teams (location_t loc, c_parser *parser,
static tree
c_parser_omp_target_data (location_t loc, c_parser *parser, bool *if_p)
{
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree clauses
= c_parser_omp_all_clauses (parser, OMP_TARGET_DATA_CLAUSE_MASK,
"#pragma omp target data");
@@ -21010,6 +21014,10 @@ c_parser_omp_target_update (location_t loc, c_parser *parser,
return false;
}
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree stmt = make_node (OMP_TARGET_UPDATE);
TREE_TYPE (stmt) = void_type_node;
OMP_TARGET_UPDATE_CLAUSES (stmt) = clauses;
@@ -21057,6 +21065,10 @@ c_parser_omp_target_enter_data (location_t loc, c_parser *parser,
return true;
}
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree clauses
= c_parser_omp_all_clauses (parser, OMP_TARGET_ENTER_DATA_CLAUSE_MASK,
"#pragma omp target enter data");
@@ -21072,6 +21084,14 @@ c_parser_omp_target_enter_data (location_t loc, c_parser *parser,
case GOMP_MAP_ALLOC:
map_seen = 3;
break;
+ case GOMP_MAP_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_TO);
+ map_seen = 3;
+ break;
+ case GOMP_MAP_ALWAYS_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_ALWAYS_TO);
+ map_seen = 3;
+ break;
case GOMP_MAP_FIRSTPRIVATE_POINTER:
case GOMP_MAP_ALWAYS_POINTER:
case GOMP_MAP_ATTACH_DETACH:
@@ -21080,7 +21100,7 @@ c_parser_omp_target_enter_data (location_t loc, c_parser *parser,
map_seen |= 1;
error_at (OMP_CLAUSE_LOCATION (*pc),
"%<#pragma omp target enter data%> with map-type other "
- "than %<to%> or %<alloc%> on %<map%> clause");
+ "than %<to%>, %<tofrom%> or %<alloc%> on %<map%> clause");
*pc = OMP_CLAUSE_CHAIN (*pc);
continue;
}
@@ -21143,6 +21163,10 @@ c_parser_omp_target_exit_data (location_t loc, c_parser *parser,
return true;
}
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree clauses
= c_parser_omp_all_clauses (parser, OMP_TARGET_EXIT_DATA_CLAUSE_MASK,
"#pragma omp target exit data");
@@ -21159,6 +21183,14 @@ c_parser_omp_target_exit_data (location_t loc, c_parser *parser,
case GOMP_MAP_DELETE:
map_seen = 3;
break;
+ case GOMP_MAP_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_FROM);
+ map_seen = 3;
+ break;
+ case GOMP_MAP_ALWAYS_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_ALWAYS_FROM);
+ map_seen = 3;
+ break;
case GOMP_MAP_FIRSTPRIVATE_POINTER:
case GOMP_MAP_ALWAYS_POINTER:
case GOMP_MAP_ATTACH_DETACH:
@@ -21167,8 +21199,8 @@ c_parser_omp_target_exit_data (location_t loc, c_parser *parser,
map_seen |= 1;
error_at (OMP_CLAUSE_LOCATION (*pc),
"%<#pragma omp target exit data%> with map-type other "
- "than %<from%>, %<release%> or %<delete%> on %<map%>"
- " clause");
+ "than %<from%>, %<tofrom%>, %<release%> or %<delete%> "
+ "on %<map%> clause");
*pc = OMP_CLAUSE_CHAIN (*pc);
continue;
}
@@ -22763,9 +22795,6 @@ c_parser_omp_requires (c_parser *parser)
c_parser_skip_to_pragma_eol (parser, false);
return;
}
- if (p && this_req != OMP_REQUIRES_DYNAMIC_ALLOCATORS)
- sorry_at (cloc, "%qs clause on %<requires%> directive not "
- "supported yet", p);
if (p)
c_parser_consume_token (parser);
if (this_req)
diff --git a/gcc/calls.cc b/gcc/calls.cc
index f4e1299..bc96aff 100644
--- a/gcc/calls.cc
+++ b/gcc/calls.cc
@@ -992,11 +992,21 @@ precompute_register_parameters (int num_actuals, struct arg_data *args,
/* If we are to promote the function arg to a wider mode,
do it now. */
- if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
- args[i].value
- = convert_modes (args[i].mode,
- TYPE_MODE (TREE_TYPE (args[i].tree_value)),
- args[i].value, args[i].unsignedp);
+ machine_mode old_mode = TYPE_MODE (TREE_TYPE (args[i].tree_value));
+
+ /* Some ABIs require scalar floating point modes to be returned
+ in a wider scalar integer mode. We need to explicitly
+ reinterpret to an integer mode of the correct precision
+ before extending to the desired result. */
+ if (SCALAR_INT_MODE_P (args[i].mode)
+ && SCALAR_FLOAT_MODE_P (old_mode)
+ && known_gt (GET_MODE_SIZE (args[i].mode),
+ GET_MODE_SIZE (old_mode)))
+ args[i].value = convert_float_to_wider_int (args[i].mode, old_mode,
+ args[i].value);
+ else if (args[i].mode != old_mode)
+ args[i].value = convert_modes (args[i].mode, old_mode,
+ args[i].value, args[i].unsignedp);
/* If the value is a non-legitimate constant, force it into a
pseudo now. TLS symbols sometimes need a call to resolve. */
@@ -1216,7 +1226,7 @@ store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals)
bytes -= bitsize / BITS_PER_UNIT;
store_bit_field (reg, bitsize, endian_correction, 0, 0,
- word_mode, word, false);
+ word_mode, word, false, false);
}
}
}
@@ -3825,18 +3835,24 @@ expand_call (tree exp, rtx target, int ignore)
{
tree type = rettype;
int unsignedp = TYPE_UNSIGNED (type);
+ machine_mode ret_mode = TYPE_MODE (type);
machine_mode pmode;
/* Ensure we promote as expected, and get the new unsignedness. */
- pmode = promote_function_mode (type, TYPE_MODE (type), &unsignedp,
+ pmode = promote_function_mode (type, ret_mode, &unsignedp,
funtype, 1);
gcc_assert (GET_MODE (target) == pmode);
- poly_uint64 offset = subreg_lowpart_offset (TYPE_MODE (type),
- GET_MODE (target));
- target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
- SUBREG_PROMOTED_VAR_P (target) = 1;
- SUBREG_PROMOTED_SET (target, unsignedp);
+ if (SCALAR_INT_MODE_P (pmode)
+ && SCALAR_FLOAT_MODE_P (ret_mode)
+ && known_gt (GET_MODE_SIZE (pmode), GET_MODE_SIZE (ret_mode)))
+ target = convert_wider_int_to_float (ret_mode, pmode, target);
+ else
+ {
+ target = gen_lowpart_SUBREG (ret_mode, target);
+ SUBREG_PROMOTED_VAR_P (target) = 1;
+ SUBREG_PROMOTED_SET (target, unsignedp);
+ }
}
/* If size of args is variable or this was a constructor call for a stack
diff --git a/gcc/cfgcleanup.cc b/gcc/cfgcleanup.cc
index 335af49..18047da 100644
--- a/gcc/cfgcleanup.cc
+++ b/gcc/cfgcleanup.cc
@@ -3227,7 +3227,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_jump
@@ -3274,11 +3274,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_thread_jumps && flag_expensive_optimizations;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_jump_after_combine
@@ -3322,7 +3322,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
cleanup_cfg (flag_crossjumping ? CLEANUP_CROSSJUMP : 0);
return 0;
diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc
index bb33c1b..dd29fff 100644
--- a/gcc/cfgexpand.cc
+++ b/gcc/cfgexpand.cc
@@ -3720,7 +3720,18 @@ expand_value_return (rtx val)
mode = promote_function_mode (type, old_mode, &unsignedp, funtype, 1);
if (mode != old_mode)
- val = convert_modes (mode, old_mode, val, unsignedp);
+ {
+ /* Some ABIs require scalar floating point modes to be returned
+ in a wider scalar integer mode. We need to explicitly
+ reinterpret to an integer mode of the correct precision
+ before extending to the desired result. */
+ if (SCALAR_INT_MODE_P (mode)
+ && SCALAR_FLOAT_MODE_P (old_mode)
+ && known_gt (GET_MODE_SIZE (mode), GET_MODE_SIZE (old_mode)))
+ val = convert_float_to_wider_int (mode, old_mode, val);
+ else
+ val = convert_modes (mode, old_mode, val, unsignedp);
+ }
if (GET_CODE (return_reg) == PARALLEL)
emit_group_load (return_reg, val, type, int_size_in_bytes (type));
@@ -6573,7 +6584,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_expand
diff --git a/gcc/cfgloop.cc b/gcc/cfgloop.cc
index 5ffcc77..57bf7b1 100644
--- a/gcc/cfgloop.cc
+++ b/gcc/cfgloop.cc
@@ -619,7 +619,7 @@ find_subloop_latch_edge_by_profile (vec<edge> latches)
}
if (!tcount.initialized_p () || !(tcount.ipa () > HEAVY_EDGE_MIN_SAMPLES)
- || (tcount - mcount).apply_scale (HEAVY_EDGE_RATIO, 1) > tcount)
+ || (tcount - mcount) * HEAVY_EDGE_RATIO > tcount)
return NULL;
if (dump_file)
diff --git a/gcc/cfgloopmanip.cc b/gcc/cfgloopmanip.cc
index 7736e3e..db07fd6 100644
--- a/gcc/cfgloopmanip.cc
+++ b/gcc/cfgloopmanip.cc
@@ -563,8 +563,7 @@ scale_loop_profile (class loop *loop, profile_probability p,
/* Probability of exit must be 1/iterations. */
count_delta = e->count ();
- e->probability = profile_probability::always ()
- .apply_scale (1, iteration_bound);
+ e->probability = profile_probability::always () / iteration_bound;
other_e->probability = e->probability.invert ();
/* In code below we only handle the following two updates. */
@@ -586,7 +585,7 @@ scale_loop_profile (class loop *loop, profile_probability p,
we look at the actual profile, if it is available. */
p = profile_probability::always ();
- count_in = count_in.apply_scale (iteration_bound, 1);
+ count_in *= iteration_bound;
p = count_in.probability_in (loop->header->count);
if (!(p > profile_probability::never ()))
p = profile_probability::very_unlikely ();
diff --git a/gcc/cfgrtl.cc b/gcc/cfgrtl.cc
index 06be46d..a05c338 100644
--- a/gcc/cfgrtl.cc
+++ b/gcc/cfgrtl.cc
@@ -483,7 +483,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_free_cfg
@@ -1686,8 +1686,8 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
add also edge from asm goto bb to target. */
if (asm_goto_edge)
{
- new_edge->probability = new_edge->probability.apply_scale (1, 2);
- jump_block->count = jump_block->count.apply_scale (1, 2);
+ new_edge->probability /= 2;
+ jump_block->count /= 2;
edge new_edge2 = make_edge (new_edge->src, target,
e->flags & ~EDGE_FALLTHRU);
new_edge2->probability = probability - new_edge->probability;
@@ -3698,7 +3698,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
cfg_layout_initialize (0);
return 0;
@@ -3737,7 +3737,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_outof_cfg_layout_mode
diff --git a/gcc/cgraph.cc b/gcc/cgraph.cc
index 23749a2..8d6ed38 100644
--- a/gcc/cgraph.cc
+++ b/gcc/cgraph.cc
@@ -1423,7 +1423,7 @@ cgraph_edge::redirect_call_stmt_to_callee (cgraph_edge *e)
else
{
/* Be sure we redirect all speculative targets before poking
- abou tindirect edge. */
+ about indirect edge. */
gcc_checking_assert (e->callee);
cgraph_edge *indirect = e->speculative_call_indirect_edge ();
gcall *new_stmt;
@@ -2935,11 +2935,10 @@ cgraph_edge::maybe_hot_p (void)
return false;
if (caller->frequency == NODE_FREQUENCY_EXECUTED_ONCE)
{
- if (count.apply_scale (2, 1) < where->count.apply_scale (3, 1))
+ if (count * 2 < where->count * 3)
return false;
}
- else if (count.apply_scale (param_hot_bb_frequency_fraction , 1)
- < where->count)
+ else if (count * param_hot_bb_frequency_fraction < where->count)
return false;
return true;
}
diff --git a/gcc/cgraphbuild.cc b/gcc/cgraphbuild.cc
index fdd17aa..bae4459 100644
--- a/gcc/cgraphbuild.cc
+++ b/gcc/cgraphbuild.cc
@@ -290,7 +290,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_build_cgraph_edges
@@ -484,8 +484,11 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_rebuild_cgraph_edges (m_ctxt); }
- virtual unsigned int execute (function *)
+ opt_pass * clone () final override
+ {
+ return new pass_rebuild_cgraph_edges (m_ctxt);
+ }
+ unsigned int execute (function *) final override
{
return cgraph_edge::rebuild_edges ();
}
@@ -524,10 +527,10 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () {
+ opt_pass * clone () final override {
return new pass_remove_cgraph_callee_edges (m_ctxt);
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_remove_cgraph_callee_edges
diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc
index e77bf97..836e759 100644
--- a/gcc/cgraphunit.cc
+++ b/gcc/cgraphunit.cc
@@ -1033,8 +1033,7 @@ walk_polymorphic_call_targets (hash_set<void *> *reachable_call_targets,
if (targets.length () == 1)
target = targets[0];
else
- target = cgraph_node::create
- (builtin_decl_implicit (BUILT_IN_UNREACHABLE));
+ target = cgraph_node::create (builtin_decl_unreachable ());
if (symtab->dump_file)
{
diff --git a/gcc/combine-stack-adj.cc b/gcc/combine-stack-adj.cc
index e8ba271..e76d60a 100644
--- a/gcc/combine-stack-adj.cc
+++ b/gcc/combine-stack-adj.cc
@@ -823,8 +823,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return rest_of_handle_stack_adjustments ();
}
diff --git a/gcc/combine.cc b/gcc/combine.cc
index 9a34ef8..a5fabf3 100644
--- a/gcc/combine.cc
+++ b/gcc/combine.cc
@@ -14218,8 +14218,10 @@ distribute_notes (rtx notes, rtx_insn *from_insn, rtx_insn *i3, rtx_insn *i2,
gcc_assert (from_insn == i3);
/* We are making sure there is a single effective REG_EH_REGION
note and it's valid to put it on i3. */
- if (!insn_could_throw_p (from_insn))
- /* Throw away stra notes on insns that can never throw. */
+ if (!insn_could_throw_p (from_insn)
+ && !(lp_nr == INT_MIN && can_nonlocal_goto (from_insn)))
+ /* Throw away stray notes on insns that can never throw or
+ make a nonlocal goto. */
;
else
{
@@ -15015,8 +15017,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return (optimize > 0); }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return (optimize > 0); }
+ unsigned int execute (function *) final override
{
return rest_of_handle_combine ();
}
diff --git a/gcc/common.opt b/gcc/common.opt
index 8e961f1..e7a51e8 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -223,6 +223,10 @@ unsigned int flag_sanitize
Variable
unsigned int flag_sanitize_recover = (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT | SANITIZE_KERNEL_ADDRESS | SANITIZE_KERNEL_HWADDRESS) & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)
+; What sanitizers should use __builtin_trap () instead of runtime diagnostics
+Variable
+unsigned int flag_sanitize_trap
+
; Flag whether a prefix has been added to dump_base_name
Variable
bool dump_base_name_prefixed = false
@@ -1105,12 +1109,19 @@ fsanitize-recover
Common
This switch is deprecated; use -fsanitize-recover= instead.
+fsanitize-trap=
+Common Driver Joined
+Use traps instead of diagnostics of undefined behavior sanitizers.
+
+fsanitize-trap
+Common Driver
+
fsanitize-address-use-after-scope
Common Driver Var(flag_sanitize_address_use_after_scope) Init(0)
fsanitize-undefined-trap-on-error
-Common Driver Var(flag_sanitize_undefined_trap_on_error) Init(0)
-Use trap instead of a library function for undefined behavior sanitization.
+Common Driver Alias(fsanitize-trap)
+This switch is deprecated; use -fsanitize-trap= instead.
fasynchronous-unwind-tables
Common Var(flag_asynchronous_unwind_tables) Optimization
@@ -1455,6 +1466,10 @@ fdiagnostics-show-cwe
Common Var(flag_diagnostics_show_cwe) Init(1)
Print CWE identifiers for diagnostic messages, where available.
+fdiagnostics-show-rules
+Common Var(flag_diagnostics_show_rules) Init(1)
+Print any rules associated with diagnostic messages.
+
fdiagnostics-path-format=
Common Joined RejectNegative Var(flag_diagnostics_path_format) Enum(diagnostic_path_format) Init(DPF_INLINE_EVENTS)
Specify how to print any control-flow path associated with a diagnostic.
@@ -3006,6 +3021,10 @@ funit-at-a-time
Common Var(flag_unit_at_a_time) Init(1)
Compile whole compilation unit at a time.
+funreachable-traps
+Common Var(flag_unreachable_traps) Optimization
+Trap on __builtin_unreachable instead of using it for optimization.
+
funroll-loops
Common Var(flag_unroll_loops) Optimization EnabledBy(funroll-all-loops)
Perform loop unrolling when iteration count is known.
@@ -3448,6 +3467,9 @@ Driver
nostdlib
Driver
+nostdlib++
+Driver
+
o
Common Driver Joined Separate Var(asm_file_name) MissingArgError(missing filename after %qs)
-o <file> Place output into <file>.
diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc
index cb878163..c0c2ad7 100644
--- a/gcc/common/config/i386/i386-common.cc
+++ b/gcc/common/config/i386/i386-common.cc
@@ -315,11 +315,10 @@ along with GCC; see the file COPYING3. If not see
| OPTION_MASK_ISA_SSE_UNSET)
#define OPTION_MASK_ISA2_AVX512F_UNSET \
- (OPTION_MASK_ISA2_AVX512BF16_UNSET \
+ (OPTION_MASK_ISA2_AVX512BW_UNSET \
| OPTION_MASK_ISA2_AVX5124FMAPS_UNSET \
| OPTION_MASK_ISA2_AVX5124VNNIW_UNSET \
- | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET \
- | OPTION_MASK_ISA2_AVX512FP16_UNSET)
+ | OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET)
#define OPTION_MASK_ISA2_GENERAL_REGS_ONLY_UNSET \
OPTION_MASK_ISA2_SSE_UNSET
#define OPTION_MASK_ISA2_AVX_UNSET OPTION_MASK_ISA2_AVX2_UNSET
diff --git a/gcc/common/config/loongarch/loongarch-common.cc b/gcc/common/config/loongarch/loongarch-common.cc
index 085d3d9..ed3730f 100644
--- a/gcc/common/config/loongarch/loongarch-common.cc
+++ b/gcc/common/config/loongarch/loongarch-common.cc
@@ -37,7 +37,4 @@ static const struct default_options loongarch_option_optimization_table[] =
{ OPT_LEVELS_NONE, 0, NULL, 0 }
};
-#undef TARGET_DEFAULT_TARGET_FLAGS
-#define TARGET_DEFAULT_TARGET_FLAGS MASK_CHECK_ZERO_DIV
-
struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
diff --git a/gcc/common/config/tilegx/tilegx-common.cc b/gcc/common/config/tilegx/tilegx-common.cc
deleted file mode 100644
index 3d33b7b..0000000
--- a/gcc/common/config/tilegx/tilegx-common.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Common hooks for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "diagnostic-core.h"
-#include "tm.h"
-#include "common/common-target.h"
-#include "common/common-target-def.h"
-#include "opts.h"
-#include "flags.h"
-
-static const struct default_options tilegx_option_optimization_table[] = {
- /* Scheduling and bundling are super important for our architecture, so
- enable them at -O1. */
- {OPT_LEVELS_1_PLUS, OPT_fschedule_insns, NULL, 1},
- {OPT_LEVELS_1_PLUS, OPT_fschedule_insns2, NULL, 1},
- {OPT_LEVELS_NONE, 0, NULL, 0}
-};
-
-
-static void
-tilegx_option_init_struct (struct gcc_options *opts)
-{
- opts->x_flag_asynchronous_unwind_tables = 1;
-}
-
-
-#undef TARGET_DEFAULT_TARGET_FLAGS
-#define TARGET_DEFAULT_TARGET_FLAGS \
- (TARGET_DEFAULT \
- | TARGET_ENDIAN_DEFAULT)
-
-#undef TARGET_OPTION_OPTIMIZATION_TABLE
-#define TARGET_OPTION_OPTIMIZATION_TABLE tilegx_option_optimization_table
-
-#undef TARGET_OPTION_INIT_STRUCT
-#define TARGET_OPTION_INIT_STRUCT tilegx_option_init_struct
-
-struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
diff --git a/gcc/common/config/tilepro/tilepro-common.cc b/gcc/common/config/tilepro/tilepro-common.cc
deleted file mode 100644
index 8e09736..0000000
--- a/gcc/common/config/tilepro/tilepro-common.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Common hooks for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "diagnostic-core.h"
-#include "tm.h"
-#include "common/common-target.h"
-#include "common/common-target-def.h"
-#include "opts.h"
-#include "flags.h"
-
-static const struct default_options tilepro_option_optimization_table[] = {
- /* Scheduling and bundling are super important for our architecture, so
- enable them at -O1. */
- {OPT_LEVELS_1_PLUS, OPT_fschedule_insns, NULL, 1},
- {OPT_LEVELS_1_PLUS, OPT_fschedule_insns2, NULL, 1},
- {OPT_LEVELS_NONE, 0, NULL, 0}
-};
-
-
-static void
-tilepro_option_init_struct (struct gcc_options *opts)
-{
- opts->x_flag_asynchronous_unwind_tables = 1;
-}
-
-
-
-#undef TARGET_OPTION_OPTIMIZATION_TABLE
-#define TARGET_OPTION_OPTIMIZATION_TABLE tilepro_option_optimization_table
-
-#undef TARGET_OPTION_INIT_STRUCT
-#define TARGET_OPTION_INIT_STRUCT tilepro_option_init_struct
-
-struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
diff --git a/gcc/compare-elim.cc b/gcc/compare-elim.cc
index 985c0c9..4a23202 100644
--- a/gcc/compare-elim.cc
+++ b/gcc/compare-elim.cc
@@ -283,7 +283,7 @@ public:
find_comparison_dom_walker (cdi_direction direction)
: dom_walker (direction) {}
- virtual edge before_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
};
/* Return true if conforming COMPARE with EH_NOTE is redundant with comparison
@@ -954,7 +954,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Setting this target hook value is how a backend indicates the need. */
if (targetm.flags_regnum == INVALID_REGNUM)
@@ -962,7 +962,7 @@ public:
return flag_compare_elim_after_reload;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_compare_elim_after_reload ();
}
diff --git a/gcc/config.gcc b/gcc/config.gcc
index cdbefb5..4e3b15b 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -248,8 +248,7 @@ md_file=
# Obsolete configurations.
case ${target} in
- tile*-*-* \
- | cr16-*-* \
+ cr16-*-* \
| hppa[12]*-*-hpux10* \
| hppa[12]*-*-hpux11* \
| m32c-*-rtems* \
@@ -557,12 +556,6 @@ tic6x-*-*)
xtensa*-*-*)
extra_options="${extra_options} fused-madd.opt"
;;
-tilegx*-*-*)
- cpu_type=tilegx
- ;;
-tilepro*-*-*)
- cpu_type=tilepro
- ;;
esac
tm_file=${cpu_type}/${cpu_type}.h
@@ -3477,27 +3470,6 @@ tic6x-*-uclinux)
tmake_file="${tmake_file} c6x/t-c6x c6x/t-c6x-elf c6x/t-c6x-uclinux"
use_collect2=no
;;
-tilegx*-*-linux*)
- tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h tilegx/linux.h ${tm_file}"
- tmake_file="${tmake_file} tilegx/t-tilegx"
- extra_objs="${extra_objs} mul-tables.o"
- c_target_objs="${c_target_objs} tilegx-c.o"
- cxx_target_objs="${cxx_target_objs} tilegx-c.o"
- extra_headers="feedback.h"
- case $target in
- tilegxbe-*)
- tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
- ;;
- esac
- ;;
-tilepro*-*-linux*)
- tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h tilepro/linux.h ${tm_file}"
- tmake_file="${tmake_file} tilepro/t-tilepro"
- extra_objs="${extra_objs} mul-tables.o"
- c_target_objs="${c_target_objs} tilepro-c.o"
- cxx_target_objs="${cxx_target_objs} tilepro-c.o"
- extra_headers="feedback.h"
- ;;
v850-*-rtems*)
target_cpu_default="TARGET_CPU_generic"
tm_file="elfos.h v850/v850.h"
diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h
index 0c832bf..adfdd77 100644
--- a/gcc/config/alpha/alpha-protos.h
+++ b/gcc/config/alpha/alpha-protos.h
@@ -73,6 +73,8 @@ extern void alpha_end_function (FILE *, const char *, tree);
extern bool alpha_find_lo_sum_using_gp (rtx);
+extern int alpha_store_data_bypass_p (rtx_insn *, rtx_insn *);
+
#ifdef REAL_VALUE_TYPE
extern int check_float_value (machine_mode, REAL_VALUE_TYPE *, int);
#endif
diff --git a/gcc/config/alpha/alpha.cc b/gcc/config/alpha/alpha.cc
index 3db5337..0a85e66 100644
--- a/gcc/config/alpha/alpha.cc
+++ b/gcc/config/alpha/alpha.cc
@@ -7564,6 +7564,75 @@ alpha_does_function_need_gp (void)
return 0;
}
+/* Helper function for alpha_store_data_bypass_p, handle just a single SET
+ IN_SET. */
+
+static bool
+alpha_store_data_bypass_p_1 (rtx_insn *out_insn, rtx in_set)
+{
+ if (!MEM_P (SET_DEST (in_set)))
+ return false;
+
+ rtx out_set = single_set (out_insn);
+ if (out_set)
+ return !reg_mentioned_p (SET_DEST (out_set), SET_DEST (in_set));
+
+ rtx out_pat = PATTERN (out_insn);
+ if (GET_CODE (out_pat) != PARALLEL)
+ return false;
+
+ for (int i = 0; i < XVECLEN (out_pat, 0); i++)
+ {
+ rtx out_exp = XVECEXP (out_pat, 0, i);
+
+ if (GET_CODE (out_exp) == CLOBBER || GET_CODE (out_exp) == USE
+ || GET_CODE (out_exp) == TRAP_IF)
+ continue;
+
+ gcc_assert (GET_CODE (out_exp) == SET);
+
+ if (reg_mentioned_p (SET_DEST (out_exp), SET_DEST (in_set)))
+ return false;
+ }
+
+ return true;
+}
+
+/* True if the dependency between OUT_INSN and IN_INSN is on the store
+ data not the address operand(s) of the store. IN_INSN and OUT_INSN
+ must be either a single_set or a PARALLEL with SETs inside.
+
+ This alpha-specific version of store_data_bypass_p ignores TRAP_IF
+ that would result in assertion failure (and internal compiler error)
+ in the generic store_data_bypass_p function. */
+
+int
+alpha_store_data_bypass_p (rtx_insn *out_insn, rtx_insn *in_insn)
+{
+ rtx in_set = single_set (in_insn);
+ if (in_set)
+ return alpha_store_data_bypass_p_1 (out_insn, in_set);
+
+ rtx in_pat = PATTERN (in_insn);
+ if (GET_CODE (in_pat) != PARALLEL)
+ return false;
+
+ for (int i = 0; i < XVECLEN (in_pat, 0); i++)
+ {
+ rtx in_exp = XVECEXP (in_pat, 0, i);
+
+ if (GET_CODE (in_exp) == CLOBBER || GET_CODE (in_exp) == USE
+ || GET_CODE (in_exp) == TRAP_IF)
+ continue;
+
+ gcc_assert (GET_CODE (in_exp) == SET);
+
+ if (!alpha_store_data_bypass_p_1 (out_insn, in_exp))
+ return false;
+ }
+
+ return true;
+}
/* Helper function to set RTX_FRAME_RELATED_P on instructions, including
sequences. */
diff --git a/gcc/config/alpha/ev4.md b/gcc/config/alpha/ev4.md
index 01b9a72..c8ff4ed 100644
--- a/gcc/config/alpha/ev4.md
+++ b/gcc/config/alpha/ev4.md
@@ -44,14 +44,7 @@
; Stores can issue before the data (but not address) is ready.
(define_insn_reservation "ev4_ist" 1
(and (eq_attr "tune" "ev4")
- (eq_attr "type" "ist"))
- "ev4_ib1+ev4_abox")
-
-; ??? Separate from ev4_ist because store_data_bypass_p can't handle
-; the patterns with multiple sets, like store-conditional.
-(define_insn_reservation "ev4_ist_c" 1
- (and (eq_attr "tune" "ev4")
- (eq_attr "type" "st_c"))
+ (eq_attr "type" "ist,st_c"))
"ev4_ib1+ev4_abox")
(define_insn_reservation "ev4_fst" 1
@@ -110,7 +103,7 @@
(define_bypass 0
"ev4_iaddlog,ev4_shiftcm,ev4_icmp"
"ev4_ist"
- "store_data_bypass_p")
+ "alpha_store_data_bypass_p")
; Multiplies use a non-pipelined imul unit. Also, "no [ebox] insn can
; be issued exactly three cycles before an integer multiply completes".
@@ -121,7 +114,7 @@
(eq_attr "opsize" "si")))
"ev4_ib0+ev4_imul,ev4_imul*18,ev4_ebox")
-(define_bypass 20 "ev4_imulsi" "ev4_ist" "store_data_bypass_p")
+(define_bypass 20 "ev4_imulsi" "ev4_ist" "alpha_store_data_bypass_p")
(define_insn_reservation "ev4_imuldi" 23
(and (eq_attr "tune" "ev4")
@@ -129,7 +122,7 @@
(eq_attr "opsize" "!si")))
"ev4_ib0+ev4_imul,ev4_imul*20,ev4_ebox")
-(define_bypass 22 "ev4_imuldi" "ev4_ist" "store_data_bypass_p")
+(define_bypass 22 "ev4_imuldi" "ev4_ist" "alpha_store_data_bypass_p")
; Most FP insns have a 6 cycle latency, but with a 4 cycle bypass back in.
(define_insn_reservation "ev4_fpop" 6
diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc
index 2925907..33fb98d 100644
--- a/gcc/config/arm/arm.cc
+++ b/gcc/config/arm/arm.cc
@@ -24199,7 +24199,8 @@ arm_print_operand (FILE *stream, rtx x, int code)
return;
}
- unsigned HOST_WIDE_INT val = ~XUINT (x, 0);
+ unsigned HOST_WIDE_INT val
+ = ~UINTVAL (x) & HOST_WIDE_INT_UC (0xffffffff);
int lsb = exact_log2 (val & -val);
asm_fprintf (stream, "#%d, #%d", lsb,
(exact_log2 (val + (val & -val)) - lsb));
diff --git a/gcc/config/gcn/gcn-protos.h b/gcc/config/gcn/gcn-protos.h
index 61791c9..38197b9 100644
--- a/gcc/config/gcn/gcn-protos.h
+++ b/gcc/config/gcn/gcn-protos.h
@@ -75,7 +75,7 @@ extern bool gcn_valid_move_p (machine_mode, rtx, rtx);
extern rtx gcn_vec_constant (machine_mode, int);
extern rtx gcn_vec_constant (machine_mode, rtx);
extern bool gcn_vgpr_move_p (rtx, rtx);
-extern void print_operand_address (FILE *file, register rtx addr);
+extern void print_operand_address (FILE *file, rtx addr);
extern void print_operand (FILE *file, rtx x, int code);
extern bool regno_ok_for_index_p (int);
diff --git a/gcc/config/gcn/gcn.md b/gcc/config/gcn/gcn.md
index 53e846e..033c170 100644
--- a/gcc/config/gcn/gcn.md
+++ b/gcc/config/gcn/gcn.md
@@ -481,14 +481,7 @@
we emit bytes directly as a workaround. */
switch (which_alternative) {
case 0:
- if (REG_P (operands[1]) && REGNO (operands[1]) == SCC_REG)
- return "; s_mov_b32\t%0,%1 is not supported by the assembler.\;"
- ".byte\t0xfd\;"
- ".byte\t0x0\;"
- ".byte\t0x80|%R0\;"
- ".byte\t0xbe";
- else
- return "s_mov_b32\t%0, %1";
+ return "s_mov_b32\t%0, %1";
case 1:
if (REG_P (operands[1]) && REGNO (operands[1]) == SCC_REG)
return "; v_mov_b32\t%0, %1\;"
@@ -505,16 +498,8 @@
case 4:
return "v_cmp_ne_u32\tvcc, 0, %1";
case 5:
- if (REGNO (operands[1]) == SCC_REG)
- return "; s_mov_b32\t%0, %1 is not supported by the assembler.\;"
- ".byte\t0xfd\;"
- ".byte\t0x0\;"
- ".byte\t0xea\;"
- ".byte\t0xbe\;"
- "s_mov_b32\tvcc_hi, 0";
- else
- return "s_mov_b32\tvcc_lo, %1\;"
- "s_mov_b32\tvcc_hi, 0";
+ return "s_mov_b32\tvcc_lo, %1\;"
+ "s_mov_b32\tvcc_hi, 0";
case 6:
return "s_load_dword\t%0, %A1\;s_waitcnt\tlgkmcnt(0)";
case 7:
@@ -739,8 +724,7 @@
return "s_branch\t%0";
else
/* !!! This sequence clobbers EXEC_SAVE_REG and CC_SAVE_REG. */
- return "; s_mov_b32\ts22, scc is not supported by the assembler.\;"
- ".long\t0xbe9600fd\;"
+ return "s_mov_b32\ts22, scc\;"
"s_getpc_b64\ts[20:21]\;"
"s_add_u32\ts20, s20, %0@rel32@lo+4\;"
"s_addc_u32\ts21, s21, %0@rel32@hi+4\;"
@@ -801,11 +785,7 @@
}
else
return "s_cbranch%c1\t.Lskip%=\;"
- "; s_mov_b32\ts22, scc is not supported by the assembler.\;"
- ".byte\t0xfd\;"
- ".byte\t0x0\;"
- ".byte\t0x80|22\;"
- ".byte\t0xbe\;"
+ "s_mov_b32\ts22, scc\;"
"s_getpc_b64\ts[20:21]\;"
"s_add_u32\ts20, s20, %0@rel32@lo+4\;"
"s_addc_u32\ts21, s21, %0@rel32@hi+4\;"
@@ -890,8 +870,7 @@
if (SYMBOL_REF_P (operands[1])
&& SYMBOL_REF_WEAK (operands[1]))
- return "; s_mov_b32\ts22, scc is not supported by the assembler.\;"
- ".long\t0xbe9600fd\;"
+ return "s_mov_b32\ts22, scc\;"
"s_getpc_b64\t%0\;"
"s_add_u32\t%L0, %L0, %1@gotpcrel32@lo+4\;"
"s_addc_u32\t%H0, %H0, %1@gotpcrel32@hi+4\;"
@@ -899,8 +878,7 @@
"s_cmpk_lg_u32\ts22, 0\;"
"s_waitcnt\tlgkmcnt(0)";
- return "; s_mov_b32\ts22, scc is not supported by the assembler.\;"
- ".long\t0xbe9600fd\;"
+ return "s_mov_b32\ts22, scc\;"
"s_getpc_b64\t%0\;"
"s_add_u32\t%L0, %L0, %1@rel32@lo+4\;"
"s_addc_u32\t%H0, %H0, %1@rel32@hi+4\;"
diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc
index ed93ae8..d246433 100644
--- a/gcc/config/gcn/mkoffload.cc
+++ b/gcc/config/gcn/mkoffload.cc
@@ -611,6 +611,7 @@ process_asm (FILE *in, FILE *out, FILE *cfile)
struct regcount *regcounts = XOBFINISH (&regcounts_os, struct regcount *);
fprintf (cfile, "#include <stdlib.h>\n");
+ fprintf (cfile, "#include <stdint.h>\n");
fprintf (cfile, "#include <stdbool.h>\n\n");
fprintf (cfile, "static const int gcn_num_vars = %d;\n\n", var_count);
@@ -664,7 +665,7 @@ process_asm (FILE *in, FILE *out, FILE *cfile)
/* Embed an object file into a C source file. */
static void
-process_obj (FILE *in, FILE *cfile)
+process_obj (FILE *in, FILE *cfile, uint32_t omp_requires)
{
size_t len = 0;
const char *input = read_file (in, &len);
@@ -691,17 +692,19 @@ process_obj (FILE *in, FILE *cfile)
len);
fprintf (cfile,
- "static const struct gcn_image_desc {\n"
+ "static const struct gcn_data {\n"
+ " uintptr_t omp_requires_mask;\n"
" const struct gcn_image *gcn_image;\n"
" unsigned kernel_count;\n"
" const struct hsa_kernel_description *kernel_infos;\n"
" unsigned global_variable_count;\n"
- "} target_data = {\n"
+ "} gcn_data = {\n"
+ " %d,\n"
" &gcn_image,\n"
" sizeof (gcn_kernels) / sizeof (gcn_kernels[0]),\n"
" gcn_kernels,\n"
" gcn_num_vars\n"
- "};\n\n");
+ "};\n\n", omp_requires);
fprintf (cfile,
"#ifdef __cplusplus\n"
@@ -720,7 +723,7 @@ process_obj (FILE *in, FILE *cfile)
fprintf (cfile, "static __attribute__((constructor)) void init (void)\n"
"{\n"
" GOMP_offload_register_ver (%#x, __OFFLOAD_TABLE__,"
- " %d/*GCN*/, &target_data);\n"
+ " %d/*GCN*/, &gcn_data);\n"
"};\n",
GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_GCN),
GOMP_DEVICE_GCN);
@@ -728,7 +731,7 @@ process_obj (FILE *in, FILE *cfile)
fprintf (cfile, "static __attribute__((destructor)) void fini (void)\n"
"{\n"
" GOMP_offload_unregister_ver (%#x, __OFFLOAD_TABLE__,"
- " %d/*GCN*/, &target_data);\n"
+ " %d/*GCN*/, &gcn_data);\n"
"};\n",
GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_GCN),
GOMP_DEVICE_GCN);
@@ -1077,9 +1080,27 @@ main (int argc, char **argv)
unsetenv ("COMPILER_PATH");
unsetenv ("LIBRARY_PATH");
+ char *omp_requires_file;
+ if (save_temps)
+ omp_requires_file = concat (dumppfx, ".mkoffload.omp_requires", NULL);
+ else
+ omp_requires_file = make_temp_file (".mkoffload.omp_requires");
+
/* Run the compiler pass. */
+ xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
fork_execute (cc_argv[0], CONST_CAST (char **, cc_argv), true, ".gcc_args");
obstack_free (&cc_argv_obstack, NULL);
+ unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
+
+ in = fopen (omp_requires_file, "rb");
+ if (!in)
+ fatal_error (input_location, "cannot open omp_requires file %qs",
+ omp_requires_file);
+ uint32_t omp_requires;
+ if (fread (&omp_requires, sizeof (omp_requires), 1, in) != 1)
+ fatal_error (input_location, "cannot read omp_requires file %qs",
+ omp_requires_file);
+ fclose (in);
in = fopen (gcn_s1_name, "r");
if (!in)
@@ -1102,7 +1123,7 @@ main (int argc, char **argv)
if (!in)
fatal_error (input_location, "cannot open intermediate gcn obj file");
- process_obj (in, cfile);
+ process_obj (in, cfile, omp_requires);
fclose (in);
diff --git a/gcc/config/i386/i386-builtin.def b/gcc/config/i386/i386-builtin.def
index e6daad4..fd16093 100644
--- a/gcc/config/i386/i386-builtin.def
+++ b/gcc/config/i386/i386-builtin.def
@@ -900,7 +900,7 @@ BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_ssse3_psignv4si3, "__builtin_ia32_psig
BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_ssse3_psignv2si3, "__builtin_ia32_psignd", IX86_BUILTIN_PSIGND, UNKNOWN, (int) V2SI_FTYPE_V2SI_V2SI)
/* SSSE3. */
-BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_ssse3_palignrti, "__builtin_ia32_palignr128", IX86_BUILTIN_PALIGNR128, UNKNOWN, (int) V2DI_FTYPE_V2DI_V2DI_INT_CONVERT)
+BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_ssse3_palignrv1ti, "__builtin_ia32_palignr128", IX86_BUILTIN_PALIGNR128, UNKNOWN, (int) V2DI_FTYPE_V2DI_V2DI_INT_CONVERT)
BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_ssse3_palignrdi, "__builtin_ia32_palignr", IX86_BUILTIN_PALIGNR, UNKNOWN, (int) V1DI_FTYPE_V1DI_V1DI_INT_CONVERT)
/* SSE4.1 */
diff --git a/gcc/config/i386/i386-builtins.cc b/gcc/config/i386/i386-builtins.cc
index 96743e6..fe7243c 100644
--- a/gcc/config/i386/i386-builtins.cc
+++ b/gcc/config/i386/i386-builtins.cc
@@ -385,6 +385,8 @@ ix86_add_new_builtins (HOST_WIDE_INT isa, HOST_WIDE_INT isa2)
ix86_builtins[i] = decl;
if (ix86_builtins_isa[i].const_p)
TREE_READONLY (decl) = 1;
+ if (ix86_builtins_isa[i].pure_p)
+ DECL_PURE_P (decl) = 1;
}
}
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
index 8bc5430..6a3fcde 100644
--- a/gcc/config/i386/i386-expand.cc
+++ b/gcc/config/i386/i386-expand.cc
@@ -19548,9 +19548,11 @@ expand_vec_perm_palignr (struct expand_vec_perm_d *d, bool single_insn_only_p)
shift = GEN_INT (min * GET_MODE_UNIT_BITSIZE (d->vmode));
if (GET_MODE_SIZE (d->vmode) == 16)
{
- target = gen_reg_rtx (TImode);
- emit_insn (gen_ssse3_palignrti (target, gen_lowpart (TImode, dcopy.op1),
- gen_lowpart (TImode, dcopy.op0), shift));
+ target = gen_reg_rtx (V1TImode);
+ emit_insn (gen_ssse3_palignrv1ti (target,
+ gen_lowpart (V1TImode, dcopy.op1),
+ gen_lowpart (V1TImode, dcopy.op0),
+ shift));
}
else
{
diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc
index 8908e42..a7bd172 100644
--- a/gcc/config/i386/i386-features.cc
+++ b/gcc/config/i386/i386-features.cc
@@ -938,10 +938,10 @@ general_scalar_chain::convert_compare (rtx op1, rtx op2, rtx_insn *insn)
{
rtx tmp = gen_reg_rtx (vmode);
rtx src;
- convert_op (&op1, insn);
/* Comparison against anything other than zero, requires an XOR. */
if (op2 != const0_rtx)
{
+ convert_op (&op1, insn);
convert_op (&op2, insn);
/* If both operands are MEMs, explicitly load the OP1 into TMP. */
if (MEM_P (op1) && MEM_P (op2))
@@ -953,8 +953,25 @@ general_scalar_chain::convert_compare (rtx op1, rtx op2, rtx_insn *insn)
src = op1;
src = gen_rtx_XOR (vmode, src, op2);
}
+ else if (GET_CODE (op1) == AND
+ && GET_CODE (XEXP (op1, 0)) == NOT)
+ {
+ rtx op11 = XEXP (XEXP (op1, 0), 0);
+ rtx op12 = XEXP (op1, 1);
+ convert_op (&op11, insn);
+ convert_op (&op12, insn);
+ if (MEM_P (op11))
+ {
+ emit_insn_before (gen_rtx_SET (tmp, op11), insn);
+ op11 = tmp;
+ }
+ src = gen_rtx_AND (vmode, gen_rtx_NOT (vmode, op11), op12);
+ }
else
- src = op1;
+ {
+ convert_op (&op1, insn);
+ src = op1;
+ }
emit_insn_before (gen_rtx_SET (tmp, src), insn);
if (vmode == V2DImode)
@@ -1399,17 +1416,29 @@ convertible_comparison_p (rtx_insn *insn, enum machine_mode mode)
rtx op1 = XEXP (src, 0);
rtx op2 = XEXP (src, 1);
- if (!CONST_INT_P (op1)
- && ((!REG_P (op1) && !MEM_P (op1))
- || GET_MODE (op1) != mode))
- return false;
-
- if (!CONST_INT_P (op2)
- && ((!REG_P (op2) && !MEM_P (op2))
- || GET_MODE (op2) != mode))
- return false;
+ /* *cmp<dwi>_doubleword. */
+ if ((CONST_INT_P (op1)
+ || ((REG_P (op1) || MEM_P (op1))
+ && GET_MODE (op1) == mode))
+ && (CONST_INT_P (op2)
+ || ((REG_P (op2) || MEM_P (op2))
+ && GET_MODE (op2) == mode)))
+ return true;
+
+ /* *test<dwi>_not_doubleword. */
+ if (op2 == const0_rtx
+ && GET_CODE (op1) == AND
+ && GET_CODE (XEXP (op1, 0)) == NOT)
+ {
+ rtx op11 = XEXP (XEXP (op1, 0), 0);
+ rtx op12 = XEXP (op1, 1);
+ return (REG_P (op11) || MEM_P (op11))
+ && (REG_P (op12) || MEM_P (op12))
+ && GET_MODE (op11) == mode
+ && GET_MODE (op12) == mode;
+ }
- return true;
+ return false;
}
/* The general version of scalar_to_vector_candidate_p. */
@@ -1880,13 +1909,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return TARGET_AVX && TARGET_VZEROUPPER
&& flag_expensive_optimizations && !optimize_size;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_insert_vzeroupper ();
}
@@ -1915,23 +1944,23 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return ((!timode_p || TARGET_64BIT)
&& TARGET_STV && TARGET_SSE2 && optimize > 1);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return convert_scalars_to_vector (timode_p);
}
- opt_pass *clone ()
+ opt_pass *clone () final override
{
return new pass_stv (m_ctxt);
}
- void set_pass_param (unsigned int n, bool param)
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
timode_p = param;
@@ -2142,14 +2171,14 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
need_endbr = (flag_cf_protection & CF_BRANCH) != 0;
patchable_area_size = crtl->patch_area_size - crtl->patch_area_entry;
return need_endbr || patchable_area_size;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
timevar_push (TV_MACH_DEP);
rest_of_insert_endbr_and_patchable_area (need_endbr,
@@ -2406,7 +2435,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (TARGET_AVX
&& TARGET_SSE_PARTIAL_REG_DEPENDENCY
@@ -2415,7 +2444,7 @@ public:
&& optimize_function_for_speed_p (cfun));
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return remove_partial_avx_dependency ();
}
diff --git a/gcc/config/i386/i386-features.h b/gcc/config/i386/i386-features.h
index 891cb46..839b63c 100644
--- a/gcc/config/i386/i386-features.h
+++ b/gcc/config/i386/i386-features.h
@@ -169,18 +169,18 @@ class general_scalar_chain : public scalar_chain
public:
general_scalar_chain (enum machine_mode smode_, enum machine_mode vmode_);
~general_scalar_chain ();
- int compute_convert_gain ();
+ int compute_convert_gain () final override;
private:
hash_map<rtx, rtx> defs_map;
bitmap insns_conv;
unsigned n_sse_to_integer;
unsigned n_integer_to_sse;
- void mark_dual_mode_def (df_ref def);
- void convert_insn (rtx_insn *insn);
+ void mark_dual_mode_def (df_ref def) final override;
+ void convert_insn (rtx_insn *insn) final override;
void convert_op (rtx *op, rtx_insn *insn);
void convert_reg (rtx_insn *insn, rtx dst, rtx src);
void make_vector_copies (rtx_insn *, rtx);
- void convert_registers ();
+ void convert_registers () final override;
rtx convert_compare (rtx op1, rtx op2, rtx_insn *insn);
int vector_const_cost (rtx exp);
};
@@ -191,14 +191,14 @@ class timode_scalar_chain : public scalar_chain
timode_scalar_chain () : scalar_chain (TImode, V1TImode) {}
/* Convert from TImode to V1TImode is always faster. */
- int compute_convert_gain () { return 1; }
+ int compute_convert_gain () final override { return 1; }
private:
- void mark_dual_mode_def (df_ref def);
+ void mark_dual_mode_def (df_ref def) final override;
void fix_debug_reg_uses (rtx reg);
- void convert_insn (rtx_insn *insn);
+ void convert_insn (rtx_insn *insn) final override;
/* We don't convert registers to difference size. */
- void convert_registers () {}
+ void convert_registers () final override {}
};
} // anon namespace
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index 3596ce8..cf84775 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -122,6 +122,8 @@ extern void ix86_expand_unary_operator (enum rtx_code, machine_mode,
rtx[]);
extern rtx ix86_build_const_vector (machine_mode, bool, rtx);
extern rtx ix86_build_signbit_mask (machine_mode, bool, bool);
+extern HOST_WIDE_INT ix86_convert_const_vector_to_integer (rtx,
+ machine_mode);
extern void ix86_split_convert_uns_si_sse (rtx[]);
extern void ix86_expand_convert_uns_didf_sse (rtx, rtx);
extern void ix86_expand_convert_uns_sixf_sse (rtx, rtx);
diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index 3d189e1..95cb1e2 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -1015,6 +1015,15 @@ ix86_function_ok_for_sibcall (tree decl, tree exp)
}
}
+ if (decl && ix86_use_pseudo_pic_reg ())
+ {
+ /* When PIC register is used, it must be restored after ifunc
+ function returns. */
+ cgraph_node *node = cgraph_node::get (decl);
+ if (node && node->ifunc_resolver)
+ return false;
+ }
+
/* Otherwise okay. That also includes certain types of indirect calls. */
return true;
}
@@ -3348,7 +3357,7 @@ ix86_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
if (POINTER_TYPE_P (arg.type))
{
/* This is the pointer argument. */
- gcc_assert (TYPE_MODE (arg.type) == Pmode);
+ gcc_assert (TYPE_MODE (arg.type) == ptr_mode);
/* It is at -WORD(AP) in the current frame in interrupt and
exception handlers. */
reg = plus_constant (Pmode, arg_pointer_rtx, -UNITS_PER_WORD);
@@ -15714,6 +15723,53 @@ ix86_build_signbit_mask (machine_mode mode, bool vect, bool invert)
return force_reg (vec_mode, v);
}
+/* Return HOST_WIDE_INT for const vector OP in MODE. */
+
+HOST_WIDE_INT
+ix86_convert_const_vector_to_integer (rtx op, machine_mode mode)
+{
+ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+ gcc_unreachable ();
+
+ int nunits = GET_MODE_NUNITS (mode);
+ wide_int val = wi::zero (GET_MODE_BITSIZE (mode));
+ machine_mode innermode = GET_MODE_INNER (mode);
+ unsigned int innermode_bits = GET_MODE_BITSIZE (innermode);
+
+ switch (mode)
+ {
+ case E_V2QImode:
+ case E_V4QImode:
+ case E_V2HImode:
+ case E_V8QImode:
+ case E_V4HImode:
+ case E_V2SImode:
+ for (int i = 0; i < nunits; ++i)
+ {
+ int v = INTVAL (XVECEXP (op, 0, i));
+ wide_int wv = wi::shwi (v, innermode_bits);
+ val = wi::insert (val, wv, innermode_bits * i, innermode_bits);
+ }
+ break;
+ case E_V2HFmode:
+ case E_V4HFmode:
+ case E_V2SFmode:
+ for (int i = 0; i < nunits; ++i)
+ {
+ rtx x = XVECEXP (op, 0, i);
+ int v = real_to_target (NULL, CONST_DOUBLE_REAL_VALUE (x),
+ REAL_MODE_FORMAT (innermode));
+ wide_int wv = wi::shwi (v, innermode_bits);
+ val = wi::insert (val, wv, innermode_bits * i, innermode_bits);
+ }
+ break;
+ default:
+ gcc_unreachable ();
+ }
+
+ return val.to_shwi ();
+}
+
/* Return TRUE or FALSE depending on whether the first SET in INSN
has source and destination with matching CC modes, and that the
CC mode is at least as constrained as REQ_MODE. */
@@ -20926,6 +20982,19 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno,
return true;
}
+ if (SCALAR_INT_MODE_P (GET_MODE (op0))
+ && GET_MODE_SIZE (GET_MODE (op0)) > UNITS_PER_WORD)
+ {
+ if (op1 == const0_rtx)
+ *total = cost->add
+ + rtx_cost (op0, GET_MODE (op0), outer_code, opno, speed);
+ else
+ *total = 3*cost->add
+ + rtx_cost (op0, GET_MODE (op0), outer_code, opno, speed)
+ + rtx_cost (op1, GET_MODE (op0), outer_code, opno, speed);
+ return true;
+ }
+
/* The embedded comparison operand is completely free. */
if (!general_operand (op0, GET_MODE (op0)) && op1 == const0_rtx)
*total = 0;
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 3093cb5..3b02d0c 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1192,7 +1192,8 @@
[(QI "general_operand")
(HI "general_operand")
(SI "x86_64_szext_general_operand")
- (DI "x86_64_szext_general_operand")])
+ (DI "x86_64_szext_general_operand")
+ (TI "x86_64_hilo_general_operand")])
(define_mode_attr nonmemory_szext_operand
[(QI "nonmemory_operand")
@@ -1509,7 +1510,7 @@
(define_insn_and_split "*cmp<dwi>_doubleword"
[(set (reg:CCZ FLAGS_REG)
(compare:CCZ (match_operand:<DWI> 0 "nonimmediate_operand")
- (match_operand:<DWI> 1 "x86_64_general_operand")))]
+ (match_operand:<DWI> 1 "x86_64_hilo_general_operand")))]
"ix86_pre_reload_split ()"
"#"
"&& 1"
@@ -2588,7 +2589,8 @@
"optimize_insn_for_size_p () && optimize_size > 1
&& operands[1] != const0_rtx
&& IN_RANGE (INTVAL (operands[1]), -128, 127)
- && !ix86_red_zone_used"
+ && !ix86_red_zone_used
+ && REGNO (operands[0]) != SP_REG"
[(set (match_dup 2) (match_dup 1))
(set (match_dup 0) (match_dup 3))]
{
@@ -2966,7 +2968,7 @@
(set_attr "memory" "load")
(set_attr "mode" "<MODE>")])
-(define_insn "*swap<mode>"
+(define_insn "swap<mode>"
[(set (match_operand:SWI48 0 "register_operand" "+r")
(match_operand:SWI48 1 "register_operand" "+r"))
(set (match_dup 1)
@@ -5802,7 +5804,12 @@
split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);
if (operands[2] == const0_rtx)
{
- ix86_expand_binary_operator (PLUS, <MODE>mode, &operands[3]);
+ if (operands[5] != const0_rtx)
+ ix86_expand_binary_operator (PLUS, <MODE>mode, &operands[3]);
+ else if (!rtx_equal_p (operands[3], operands[4]))
+ emit_move_insn (operands[3], operands[4]);
+ else
+ emit_note (NOTE_INSN_DELETED);
DONE;
}
})
@@ -9785,7 +9792,25 @@
(set (reg:CCZ FLAGS_REG)
(compare:CCZ (and:SWI (match_dup 2) (match_dup 1))
(const_int 0)))]
+ "operands[2] = gen_reg_rtx (<MODE>mode);")
+
+;; Split and;cmp (as optimized by combine) into andn;cmp $0
+(define_insn_and_split "*test<mode>_not_doubleword"
+ [(set (reg:CCZ FLAGS_REG)
+ (compare:CCZ
+ (and:DWI
+ (not:DWI (match_operand:DWI 0 "nonimmediate_operand"))
+ (match_operand:DWI 1 "nonimmediate_operand"))
+ (const_int 0)))]
+ "ix86_pre_reload_split ()"
+ "#"
+ "&& 1"
+ [(parallel
+ [(set (match_dup 2) (and:DWI (not:DWI (match_dup 0)) (match_dup 1)))
+ (clobber (reg:CC FLAGS_REG))])
+ (set (reg:CCZ FLAGS_REG) (compare:CCZ (match_dup 2) (const_int 0)))]
{
+ operands[0] = force_reg (<MODE>mode, operands[0]);
operands[2] = gen_reg_rtx (<MODE>mode);
})
@@ -9846,19 +9871,22 @@
;; it should be done with splitters.
(define_expand "and<mode>3"
- [(set (match_operand:SWIM1248x 0 "nonimmediate_operand")
- (and:SWIM1248x (match_operand:SWIM1248x 1 "nonimmediate_operand")
- (match_operand:SWIM1248x 2 "<general_szext_operand>")))]
+ [(set (match_operand:SDWIM 0 "nonimmediate_operand")
+ (and:SDWIM (match_operand:SDWIM 1 "nonimmediate_operand")
+ (match_operand:SDWIM 2 "<general_szext_operand>")))]
""
{
machine_mode mode = <MODE>mode;
- if (<MODE>mode == DImode && !TARGET_64BIT)
- ;
- else if (const_int_operand (operands[2], <MODE>mode)
- && register_operand (operands[0], <MODE>mode)
- && !(TARGET_ZERO_EXTEND_WITH_AND
- && optimize_function_for_speed_p (cfun)))
+ if (GET_MODE_SIZE (<MODE>mode) > UNITS_PER_WORD
+ && !x86_64_hilo_general_operand (operands[2], <MODE>mode))
+ operands[2] = force_reg (<MODE>mode, operands[2]);
+
+ if (GET_MODE_SIZE (<MODE>mode) <= UNITS_PER_WORD
+ && const_int_operand (operands[2], <MODE>mode)
+ && register_operand (operands[0], <MODE>mode)
+ && !(TARGET_ZERO_EXTEND_WITH_AND
+ && optimize_function_for_speed_p (cfun)))
{
unsigned HOST_WIDE_INT ival = UINTVAL (operands[2]);
@@ -9880,34 +9908,37 @@
DONE;
})
-(define_insn_and_split "*anddi3_doubleword"
- [(set (match_operand:DI 0 "nonimmediate_operand")
- (and:DI
- (match_operand:DI 1 "nonimmediate_operand")
- (match_operand:DI 2 "x86_64_szext_general_operand")))
+(define_insn_and_split "*and<dwi>3_doubleword"
+ [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r")
+ (and:<DWI>
+ (match_operand:<DWI> 1 "nonimmediate_operand" "%0,0")
+ (match_operand:<DWI> 2 "x86_64_hilo_general_operand" "r<di>,o")))
(clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT
- && ix86_binary_operator_ok (AND, DImode, operands)
- && ix86_pre_reload_split ()"
+ "ix86_binary_operator_ok (AND, <DWI>mode, operands)"
"#"
- "&& 1"
- [(const_int 0)]
+ "&& reload_completed"
+ [(const_int:DWIH 0)]
{
- split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);
+ bool emit_insn_deleted_note_p = false;
+
+ split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);
if (operands[2] == const0_rtx)
emit_move_insn (operands[0], const0_rtx);
else if (operands[2] == constm1_rtx)
- emit_move_insn (operands[0], operands[1]);
+ emit_insn_deleted_note_p = true;
else
- emit_insn (gen_andsi3 (operands[0], operands[1], operands[2]));
+ ix86_expand_binary_operator (AND, <MODE>mode, &operands[0]);
if (operands[5] == const0_rtx)
emit_move_insn (operands[3], const0_rtx);
else if (operands[5] == constm1_rtx)
- emit_move_insn (operands[3], operands[4]);
+ {
+ if (emit_insn_deleted_note_p)
+ emit_note (NOTE_INSN_DELETED);
+ }
else
- emit_insn (gen_andsi3 (operands[3], operands[4], operands[5]));
+ ix86_expand_binary_operator (AND, <MODE>mode, &operands[3]);
DONE;
})
@@ -10391,54 +10422,38 @@
operands[2] = gen_int_mode (INTVAL (operands[2]), QImode);
})
-(define_insn "*andndi3_doubleword"
- [(set (match_operand:DI 0 "register_operand")
- (and:DI
- (not:DI (match_operand:DI 1 "register_operand"))
- (match_operand:DI 2 "nonimmediate_operand")))
- (clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT && TARGET_STV && TARGET_SSE2
- && ix86_pre_reload_split ()"
- "#")
-
-(define_split
- [(set (match_operand:DI 0 "register_operand")
- (and:DI
- (not:DI (match_operand:DI 1 "register_operand"))
- (match_operand:DI 2 "nonimmediate_operand")))
+(define_insn_and_split "*andn<dwi>3_doubleword_bmi"
+ [(set (match_operand:<DWI> 0 "register_operand" "=r")
+ (and:<DWI>
+ (not:<DWI> (match_operand:<DWI> 1 "register_operand" "r"))
+ (match_operand:<DWI> 2 "nonimmediate_operand" "ro")))
(clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT && TARGET_BMI && TARGET_STV && TARGET_SSE2
- && can_create_pseudo_p ()"
+ "TARGET_BMI"
+ "#"
+ "&& reload_completed"
[(parallel [(set (match_dup 0)
- (and:SI (not:SI (match_dup 1)) (match_dup 2)))
+ (and:DWIH (not:DWIH (match_dup 1)) (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])
(parallel [(set (match_dup 3)
- (and:SI (not:SI (match_dup 4)) (match_dup 5)))
+ (and:DWIH (not:DWIH (match_dup 4)) (match_dup 5)))
(clobber (reg:CC FLAGS_REG))])]
- "split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);")
+ "split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);")
-(define_split
- [(set (match_operand:DI 0 "register_operand")
- (and:DI
- (not:DI (match_operand:DI 1 "register_operand"))
- (match_operand:DI 2 "nonimmediate_operand")))
+(define_insn_and_split "*andn<mode>3_doubleword"
+ [(set (match_operand:DWI 0 "register_operand")
+ (and:DWI
+ (not:DWI (match_operand:DWI 1 "register_operand"))
+ (match_operand:DWI 2 "nonimmediate_operand")))
(clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT && !TARGET_BMI && TARGET_STV && TARGET_SSE2
- && can_create_pseudo_p ()"
- [(set (match_dup 6) (not:SI (match_dup 1)))
+ "!TARGET_BMI
+ && ix86_pre_reload_split ()"
+ "#"
+ "&& 1"
+ [(set (match_dup 3) (not:DWI (match_dup 1)))
(parallel [(set (match_dup 0)
- (and:SI (match_dup 6) (match_dup 2)))
- (clobber (reg:CC FLAGS_REG))])
- (set (match_dup 7) (not:SI (match_dup 4)))
- (parallel [(set (match_dup 3)
- (and:SI (match_dup 7) (match_dup 5)))
+ (and:DWI (match_dup 3) (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
-{
- operands[6] = gen_reg_rtx (SImode);
- operands[7] = gen_reg_rtx (SImode);
-
- split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);
-})
+ "operands[3] = gen_reg_rtx (<MODE>mode);")
(define_insn "*andn<mode>_1"
[(set (match_operand:SWI48 0 "register_operand" "=r,r,?k")
@@ -10525,6 +10540,82 @@
(set (match_dup 0) (match_op_dup 1
[(and:SI (match_dup 3) (match_dup 2))
(const_int 0)]))])
+
+;; Variant 1 of 4: Split ((A | B) ^ A) ^ C as (B & ~A) ^ C.
+(define_split
+ [(set (match_operand:SWI48 0 "register_operand")
+ (xor:SWI48
+ (xor:SWI48
+ (ior:SWI48 (match_operand:SWI48 1 "register_operand")
+ (match_operand:SWI48 2 "nonimmediate_operand"))
+ (match_dup 1))
+ (match_operand:SWI48 3 "nonimmediate_operand")))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI"
+ [(parallel
+ [(set (match_dup 4) (and:SWI48 (not:SWI48 (match_dup 1)) (match_dup 2)))
+ (clobber (reg:CC FLAGS_REG))])
+ (parallel
+ [(set (match_dup 0) (xor:SWI48 (match_dup 4) (match_dup 3)))
+ (clobber (reg:CC FLAGS_REG))])]
+ "operands[4] = gen_reg_rtx (<MODE>mode);")
+
+;; Variant 2 of 4: Split ((A | B) ^ B) ^ C as (A & ~B) ^ C.
+(define_split
+ [(set (match_operand:SWI48 0 "register_operand")
+ (xor:SWI48
+ (xor:SWI48
+ (ior:SWI48 (match_operand:SWI48 1 "register_operand")
+ (match_operand:SWI48 2 "register_operand"))
+ (match_dup 2))
+ (match_operand:SWI48 3 "nonimmediate_operand")))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI"
+ [(parallel
+ [(set (match_dup 4) (and:SWI48 (not:SWI48 (match_dup 2)) (match_dup 1)))
+ (clobber (reg:CC FLAGS_REG))])
+ (parallel
+ [(set (match_dup 0) (xor:SWI48 (match_dup 4) (match_dup 3)))
+ (clobber (reg:CC FLAGS_REG))])]
+ "operands[4] = gen_reg_rtx (<MODE>mode);")
+
+;; Variant 3 of 4: Split ((A | B) ^ C) ^ A as (B & ~A) ^ C.
+(define_split
+ [(set (match_operand:SWI48 0 "register_operand")
+ (xor:SWI48
+ (xor:SWI48
+ (ior:SWI48 (match_operand:SWI48 1 "register_operand")
+ (match_operand:SWI48 2 "nonimmediate_operand"))
+ (match_operand:SWI48 3 "nonimmediate_operand"))
+ (match_dup 1)))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI"
+ [(parallel
+ [(set (match_dup 4) (and:SWI48 (not:SWI48 (match_dup 1)) (match_dup 2)))
+ (clobber (reg:CC FLAGS_REG))])
+ (parallel
+ [(set (match_dup 0) (xor:SWI48 (match_dup 4) (match_dup 3)))
+ (clobber (reg:CC FLAGS_REG))])]
+ "operands[4] = gen_reg_rtx (<MODE>mode);")
+
+;; Variant 4 of 4: Split ((A | B) ^ C) ^ B as (A & ~B) ^ C.
+(define_split
+ [(set (match_operand:SWI48 0 "register_operand")
+ (xor:SWI48
+ (xor:SWI48
+ (ior:SWI48 (match_operand:SWI48 1 "register_operand")
+ (match_operand:SWI48 2 "register_operand"))
+ (match_operand:SWI48 3 "nonimmediate_operand"))
+ (match_dup 2)))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI"
+ [(parallel
+ [(set (match_dup 4) (and:SWI48 (not:SWI48 (match_dup 2)) (match_dup 1)))
+ (clobber (reg:CC FLAGS_REG))])
+ (parallel
+ [(set (match_dup 0) (xor:SWI48 (match_dup 4) (match_dup 3)))
+ (clobber (reg:CC FLAGS_REG))])]
+ "operands[4] = gen_reg_rtx (<MODE>mode);")
;; Logical inclusive and exclusive OR instructions
@@ -10532,50 +10623,62 @@
;; If this is considered useful, it should be done with splitters.
(define_expand "<code><mode>3"
- [(set (match_operand:SWIM1248x 0 "nonimmediate_operand")
- (any_or:SWIM1248x (match_operand:SWIM1248x 1 "nonimmediate_operand")
- (match_operand:SWIM1248x 2 "<general_operand>")))]
+ [(set (match_operand:SDWIM 0 "nonimmediate_operand")
+ (any_or:SDWIM (match_operand:SDWIM 1 "nonimmediate_operand")
+ (match_operand:SDWIM 2 "<general_operand>")))]
""
- "ix86_expand_binary_operator (<CODE>, <MODE>mode, operands); DONE;")
+{
+ if (GET_MODE_SIZE (<MODE>mode) > UNITS_PER_WORD
+ && !x86_64_hilo_general_operand (operands[2], <MODE>mode))
+ operands[2] = force_reg (<MODE>mode, operands[2]);
-(define_insn_and_split "*<code>di3_doubleword"
- [(set (match_operand:DI 0 "nonimmediate_operand")
- (any_or:DI
- (match_operand:DI 1 "nonimmediate_operand")
- (match_operand:DI 2 "x86_64_szext_general_operand")))
+ ix86_expand_binary_operator (<CODE>, <MODE>mode, operands);
+ DONE;
+})
+
+(define_insn_and_split "*<code><dwi>3_doubleword"
+ [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro,r")
+ (any_or:<DWI>
+ (match_operand:<DWI> 1 "nonimmediate_operand" "%0,0")
+ (match_operand:<DWI> 2 "x86_64_hilo_general_operand" "r<di>,o")))
(clobber (reg:CC FLAGS_REG))]
- "!TARGET_64BIT
- && ix86_binary_operator_ok (<CODE>, DImode, operands)
- && ix86_pre_reload_split ()"
+ "ix86_binary_operator_ok (<CODE>, <DWI>mode, operands)"
"#"
- "&& 1"
- [(const_int 0)]
+ "&& reload_completed"
+ [(const_int:DWIH 0)]
{
- split_double_mode (DImode, &operands[0], 3, &operands[0], &operands[3]);
+ /* This insn may disappear completely when operands[2] == const0_rtx
+ and operands[0] == operands[1], which requires a NOTE_INSN_DELETED. */
+ bool emit_insn_deleted_note_p = false;
+
+ split_double_mode (<DWI>mode, &operands[0], 3, &operands[0], &operands[3]);
if (operands[2] == const0_rtx)
- emit_move_insn (operands[0], operands[1]);
+ emit_insn_deleted_note_p = true;
else if (operands[2] == constm1_rtx)
{
if (<CODE> == IOR)
emit_move_insn (operands[0], constm1_rtx);
else
- ix86_expand_unary_operator (NOT, SImode, &operands[0]);
+ ix86_expand_unary_operator (NOT, <MODE>mode, &operands[0]);
}
else
- ix86_expand_binary_operator (<CODE>, SImode, &operands[0]);
+ ix86_expand_binary_operator (<CODE>, <MODE>mode, &operands[0]);
if (operands[5] == const0_rtx)
- emit_move_insn (operands[3], operands[4]);
+ {
+ if (emit_insn_deleted_note_p)
+ emit_note (NOTE_INSN_DELETED);
+ }
else if (operands[5] == constm1_rtx)
{
if (<CODE> == IOR)
emit_move_insn (operands[3], constm1_rtx);
else
- ix86_expand_unary_operator (NOT, SImode, &operands[3]);
+ ix86_expand_unary_operator (NOT, <MODE>mode, &operands[3]);
}
else
- ix86_expand_binary_operator (<CODE>, SImode, &operands[3]);
+ ix86_expand_binary_operator (<CODE>, <MODE>mode, &operands[3]);
DONE;
})
@@ -11714,24 +11817,22 @@
;; One complement instructions
(define_expand "one_cmpl<mode>2"
- [(set (match_operand:SWIM1248x 0 "nonimmediate_operand")
- (not:SWIM1248x (match_operand:SWIM1248x 1 "nonimmediate_operand")))]
+ [(set (match_operand:SDWIM 0 "nonimmediate_operand")
+ (not:SDWIM (match_operand:SDWIM 1 "nonimmediate_operand")))]
""
"ix86_expand_unary_operator (NOT, <MODE>mode, operands); DONE;")
-(define_insn_and_split "*one_cmpldi2_doubleword"
- [(set (match_operand:DI 0 "nonimmediate_operand")
- (not:DI (match_operand:DI 1 "nonimmediate_operand")))]
- "!TARGET_64BIT
- && ix86_unary_operator_ok (NOT, DImode, operands)
- && ix86_pre_reload_split ()"
+(define_insn_and_split "*one_cmpl<dwi>2_doubleword"
+ [(set (match_operand:<DWI> 0 "nonimmediate_operand" "=ro")
+ (not:<DWI> (match_operand:<DWI> 1 "nonimmediate_operand" "0")))]
+ "ix86_unary_operator_ok (NOT, <DWI>mode, operands)"
"#"
- "&& 1"
+ "&& reload_completed"
[(set (match_dup 0)
- (not:SI (match_dup 1)))
+ (not:DWIH (match_dup 1)))
(set (match_dup 2)
- (not:SI (match_dup 3)))]
- "split_double_mode (DImode, &operands[0], 2, &operands[0], &operands[2]);")
+ (not:DWIH (match_dup 3)))]
+ "split_double_mode (<DWI>mode, &operands[0], 2, &operands[0], &operands[2]);")
(define_insn "*one_cmpl<mode>2_1"
[(set (match_operand:SWI248 0 "nonimmediate_operand" "=rm,?k")
@@ -13236,6 +13337,31 @@
(const_string "*")))
(set_attr "mode" "<MODE>")])
+;; Specialization of *lshr<mode>3_1 below, extracting the SImode
+;; highpart of a DI to be extracted, but allowing it to be clobbered.
+(define_insn_and_split "*highpartdisi2"
+ [(set (subreg:DI (match_operand:SI 0 "register_operand" "=r,x,?k") 0)
+ (lshiftrt:DI (match_operand:DI 1 "register_operand" "0,0,k")
+ (const_int 32)))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_64BIT"
+ "#"
+ "&& reload_completed"
+ [(parallel
+ [(set (match_dup 0) (lshiftrt:DI (match_dup 1) (const_int 32)))
+ (clobber (reg:CC FLAGS_REG))])]
+{
+ if (SSE_REG_P (operands[0]))
+ {
+ rtx tmp = gen_rtx_REG (V4SImode, REGNO (operands[0]));
+ emit_insn (gen_sse_shufps_v4si (tmp, tmp, tmp,
+ const1_rtx, const1_rtx,
+ GEN_INT (5), GEN_INT (5)));
+ DONE;
+ }
+ operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));
+})
+
(define_insn "*lshr<mode>3_1"
[(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm,r,?k")
(lshiftrt:SWI48
@@ -13635,6 +13761,8 @@
else if (const_1_to_31_operand (operands[2], VOIDmode))
emit_insn (gen_ix86_<insn>di3_doubleword
(operands[0], operands[1], operands[2]));
+ else if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 32)
+ emit_insn (gen_<insn>32di2_doubleword (operands[0], operands[1]));
else
FAIL;
@@ -13807,6 +13935,24 @@
split_double_mode (<DWI>mode, &operands[0], 1, &operands[4], &operands[5]);
})
+(define_insn_and_split "<insn>32di2_doubleword"
+ [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+ (any_rotate:DI (match_operand:DI 1 "nonimmediate_operand" "0,r,o")
+ (const_int 32)))]
+ "!TARGET_64BIT"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 0) (match_dup 3))
+ (set (match_dup 2) (match_dup 1))]
+{
+ split_double_mode (DImode, &operands[0], 2, &operands[0], &operands[2]);
+ if (rtx_equal_p (operands[0], operands[1]))
+ {
+ emit_insn (gen_swapsi (operands[0], operands[2]));
+ DONE;
+ }
+})
+
(define_mode_attr rorx_immediate_operand
[(SI "const_0_to_31_operand")
(DI "const_0_to_63_operand")])
@@ -15074,7 +15220,7 @@
;; Convert setcc + movzbl to xor + setcc if operands don't overlap.
(define_peephole2
- [(set (reg FLAGS_REG) (match_operand 0))
+ [(set (match_operand 4 "flags_reg_operand") (match_operand 0))
(set (match_operand:QI 1 "register_operand")
(match_operator:QI 2 "ix86_comparison_operator"
[(reg FLAGS_REG) (const_int 0)]))
@@ -15088,13 +15234,12 @@
(set (strict_low_part (match_dup 5))
(match_dup 2))]
{
- operands[4] = gen_rtx_REG (GET_MODE (operands[0]), FLAGS_REG);
operands[5] = gen_lowpart (QImode, operands[3]);
ix86_expand_clear (operands[3]);
})
(define_peephole2
- [(parallel [(set (reg FLAGS_REG) (match_operand 0))
+ [(parallel [(set (match_operand 5 "flags_reg_operand") (match_operand 0))
(match_operand 4)])
(set (match_operand:QI 1 "register_operand")
(match_operator:QI 2 "ix86_comparison_operator"
@@ -15112,14 +15257,13 @@
(set (strict_low_part (match_dup 6))
(match_dup 2))]
{
- operands[5] = gen_rtx_REG (GET_MODE (operands[0]), FLAGS_REG);
operands[6] = gen_lowpart (QImode, operands[3]);
ix86_expand_clear (operands[3]);
})
(define_peephole2
- [(set (reg FLAGS_REG) (match_operand 0))
- (parallel [(set (reg FLAGS_REG) (match_operand 1))
+ [(set (match_operand 6 "flags_reg_operand") (match_operand 0))
+ (parallel [(set (match_operand 7 "flags_reg_operand") (match_operand 1))
(match_operand 5)])
(set (match_operand:QI 2 "register_operand")
(match_operator:QI 3 "ix86_comparison_operator"
@@ -15140,8 +15284,6 @@
(set (strict_low_part (match_dup 8))
(match_dup 3))]
{
- operands[6] = gen_rtx_REG (GET_MODE (operands[0]), FLAGS_REG);
- operands[7] = gen_rtx_REG (GET_MODE (operands[1]), FLAGS_REG);
operands[8] = gen_lowpart (QImode, operands[4]);
ix86_expand_clear (operands[4]);
})
@@ -15149,7 +15291,7 @@
;; Similar, but match zero extend with andsi3.
(define_peephole2
- [(set (reg FLAGS_REG) (match_operand 0))
+ [(set (match_operand 4 "flags_reg_operand") (match_operand 0))
(set (match_operand:QI 1 "register_operand")
(match_operator:QI 2 "ix86_comparison_operator"
[(reg FLAGS_REG) (const_int 0)]))
@@ -15163,13 +15305,12 @@
(set (strict_low_part (match_dup 5))
(match_dup 2))]
{
- operands[4] = gen_rtx_REG (GET_MODE (operands[0]), FLAGS_REG);
operands[5] = gen_lowpart (QImode, operands[3]);
ix86_expand_clear (operands[3]);
})
(define_peephole2
- [(parallel [(set (reg FLAGS_REG) (match_operand 0))
+ [(parallel [(set (match_operand 5 "flags_reg_operand") (match_operand 0))
(match_operand 4)])
(set (match_operand:QI 1 "register_operand")
(match_operator:QI 2 "ix86_comparison_operator"
@@ -15188,14 +15329,13 @@
(set (strict_low_part (match_dup 6))
(match_dup 2))]
{
- operands[5] = gen_rtx_REG (GET_MODE (operands[0]), FLAGS_REG);
operands[6] = gen_lowpart (QImode, operands[3]);
ix86_expand_clear (operands[3]);
})
(define_peephole2
- [(set (reg FLAGS_REG) (match_operand 0))
- (parallel [(set (reg FLAGS_REG) (match_operand 1))
+ [(set (match_operand 6 "flags_reg_operand") (match_operand 0))
+ (parallel [(set (match_operand 7 "flags_reg_operand") (match_operand 1))
(match_operand 5)])
(set (match_operand:QI 2 "register_operand")
(match_operator:QI 3 "ix86_comparison_operator"
@@ -15217,8 +15357,6 @@
(set (strict_low_part (match_dup 8))
(match_dup 3))]
{
- operands[6] = gen_rtx_REG (GET_MODE (operands[0]), FLAGS_REG);
- operands[7] = gen_rtx_REG (GET_MODE (operands[1]), FLAGS_REG);
operands[8] = gen_lowpart (QImode, operands[4]);
ix86_expand_clear (operands[4]);
})
diff --git a/gcc/config/i386/intelmic-mkoffload.cc b/gcc/config/i386/intelmic-mkoffload.cc
index c683d6f..596f6f1 100644
--- a/gcc/config/i386/intelmic-mkoffload.cc
+++ b/gcc/config/i386/intelmic-mkoffload.cc
@@ -370,7 +370,7 @@ generate_target_offloadend_file (const char *target_compiler)
/* Generates object file with the host side descriptor. */
static const char *
-generate_host_descr_file (const char *host_compiler)
+generate_host_descr_file (const char *host_compiler, uint32_t omp_requires)
{
char *dump_filename = concat (dumppfx, "_host_descr.c", NULL);
const char *src_filename = save_temps
@@ -386,39 +386,50 @@ generate_host_descr_file (const char *host_compiler)
if (!src_file)
fatal_error (input_location, "cannot open '%s'", src_filename);
+ fprintf (src_file, "#include <stdint.h>\n\n");
+
fprintf (src_file,
"extern const void *const __OFFLOAD_TABLE__;\n"
"extern const void *const __offload_image_intelmic_start;\n"
"extern const void *const __offload_image_intelmic_end;\n\n"
- "static const void *const __offload_target_data[] = {\n"
+ "static const struct intelmic_data {\n"
+ " uintptr_t omp_requires_mask;\n"
+ " const void *const image_start;\n"
+ " const void *const image_end;\n"
+ "} intelmic_data = {\n"
+ " %d,\n"
" &__offload_image_intelmic_start, &__offload_image_intelmic_end\n"
- "};\n\n");
+ "};\n\n", omp_requires);
fprintf (src_file,
"#ifdef __cplusplus\n"
"extern \"C\"\n"
"#endif\n"
- "void GOMP_offload_register (const void *, int, const void *);\n"
+ "void GOMP_offload_register_ver (unsigned, const void *, int, const void *);\n"
"#ifdef __cplusplus\n"
"extern \"C\"\n"
"#endif\n"
- "void GOMP_offload_unregister (const void *, int, const void *);\n\n"
+ "void GOMP_offload_unregister_ver (unsigned, const void *, int, const void *);\n\n"
"__attribute__((constructor))\n"
"static void\n"
"init (void)\n"
"{\n"
- " GOMP_offload_register (&__OFFLOAD_TABLE__, %d, __offload_target_data);\n"
- "}\n\n", GOMP_DEVICE_INTEL_MIC);
+ " GOMP_offload_register_ver (%#x, &__OFFLOAD_TABLE__, %d, &intelmic_data);\n"
+ "}\n\n",
+ GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_INTEL_MIC),
+ GOMP_DEVICE_INTEL_MIC);
fprintf (src_file,
"__attribute__((destructor))\n"
"static void\n"
"fini (void)\n"
"{\n"
- " GOMP_offload_unregister (&__OFFLOAD_TABLE__, %d, __offload_target_data);\n"
- "}\n", GOMP_DEVICE_INTEL_MIC);
+ " GOMP_offload_unregister_ver (%#x, &__OFFLOAD_TABLE__, %d, &intelmic_data);\n"
+ "}\n",
+ GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_INTEL_MIC),
+ GOMP_DEVICE_INTEL_MIC);
fclose (src_file);
@@ -462,7 +473,7 @@ generate_host_descr_file (const char *host_compiler)
}
static const char *
-prepare_target_image (const char *target_compiler, int argc, char **argv)
+prepare_target_image (const char *target_compiler, int argc, char **argv, uint32_t *omp_requires)
{
const char *target_descr_filename
= generate_target_descr_file (target_compiler);
@@ -509,8 +520,26 @@ prepare_target_image (const char *target_compiler, int argc, char **argv)
obstack_ptr_grow (&argv_obstack, "");
obstack_ptr_grow (&argv_obstack, "-o");
obstack_ptr_grow (&argv_obstack, target_so_filename);
+
+ char *omp_requires_file;
+ if (save_temps)
+ omp_requires_file = concat (dumppfx, ".mkoffload.omp_requires", NULL);
+ else
+ omp_requires_file = make_temp_file (".mkoffload.omp_requires");
+ xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
+
compile_for_target (&argv_obstack);
+ unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
+ FILE *in = fopen (omp_requires_file, "rb");
+ if (!in)
+ fatal_error (input_location, "cannot open omp_requires file %qs",
+ omp_requires_file);
+ if (fread (omp_requires, sizeof (*omp_requires), 1, in) != 1)
+ fatal_error (input_location, "cannot read omp_requires file %qs",
+ omp_requires_file);
+ fclose (in);
+
/* Run objcopy. */
char *rename_section_opt
= XALLOCAVEC (char, sizeof (".data=") + strlen (image_section_name));
@@ -643,10 +672,13 @@ main (int argc, char **argv)
if (!dumppfx)
dumppfx = out_obj_filename;
+ uint32_t omp_requires;
+
const char *target_so_filename
- = prepare_target_image (target_compiler, argc, argv);
+ = prepare_target_image (target_compiler, argc, argv, &omp_requires);
- const char *host_descr_filename = generate_host_descr_file (host_compiler);
+ const char *host_descr_filename
+ = generate_host_descr_file (host_compiler, omp_requires);
/* Perform partial linking for the target image and host side descriptor.
As a result we'll get a finalized object file with all offload data. */
diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md
index ba53007a..3294c1e 100644
--- a/gcc/config/i386/mmx.md
+++ b/gcc/config/i386/mmx.md
@@ -69,6 +69,12 @@
;; 4-byte and 2-byte QImode vector modes
(define_mode_iterator VI1_16_32 [V4QI V2QI])
+;; All 2-byte, 4-byte and 8-byte vector modes with more than 1 element
+(define_mode_iterator V_16_32_64
+ [V2QI V4QI V2HI V2HF
+ (V8QI "TARGET_64BIT") (V4HI "TARGET_64BIT") (V4HF "TARGET_64BIT")
+ (V2SI "TARGET_64BIT") (V2SF "TARGET_64BIT")])
+
;; V2S* modes
(define_mode_iterator V2FI [V2SF V2SI])
@@ -331,6 +337,37 @@
]
(symbol_ref "true")))])
+;; 16-bit, 32-bit and 64-bit constant vector stores. After reload,
+;; convert them to immediate integer stores.
+(define_insn_and_split "*mov<mode>_imm"
+ [(set (match_operand:V_16_32_64 0 "memory_operand" "=m")
+ (match_operand:V_16_32_64 1 "x86_64_const_vector_operand" "i"))]
+ ""
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 0) (match_dup 1))]
+{
+ HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (operands[1],
+ <MODE>mode);
+ operands[1] = GEN_INT (val);
+ machine_mode mode;
+ switch (GET_MODE_SIZE (<MODE>mode))
+ {
+ case 2:
+ mode = HImode;
+ break;
+ case 4:
+ mode = SImode;
+ break;
+ case 8:
+ mode = DImode;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ operands[0] = lowpart_subreg (mode, operands[0], <MODE>mode);
+})
+
;; For TARGET_64BIT we always round up to 8 bytes.
(define_insn "*push<mode>2_rex64"
[(set (match_operand:V_32 0 "push_operand" "=X,X")
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 128144f..c71c453 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -1194,6 +1194,17 @@
(ior (match_operand 0 "register_operand")
(match_code "const_vector")))
+;; Return true when OP is CONST_VECTOR which can be converted to a
+;; sign extended 32-bit integer.
+(define_predicate "x86_64_const_vector_operand"
+ (match_code "const_vector")
+{
+ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+ return false;
+ HOST_WIDE_INT val = ix86_convert_const_vector_to_integer (op, mode);
+ return trunc_int_for_mode (val, SImode) == val;
+})
+
;; Return true when OP is nonimmediate or standard SSE constant.
(define_predicate "nonimmediate_or_sse_const_operand"
(ior (match_operand 0 "nonimmediate_operand")
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 3e3d96f..a755d72 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -575,10 +575,6 @@
(define_mode_iterator VIMAX_AVX2
[(V2TI "TARGET_AVX2") V1TI])
-;; ??? This should probably be dropped in favor of VIMAX_AVX2_AVX512BW.
-(define_mode_iterator SSESCALARMODE
- [(V4TI "TARGET_AVX512BW") (V2TI "TARGET_AVX2") TI])
-
(define_mode_iterator VI12_AVX2
[(V32QI "TARGET_AVX2") V16QI
(V16HI "TARGET_AVX2") V8HI])
@@ -712,7 +708,7 @@
(V4HI "ssse3") (V8HI "ssse3") (V16HI "avx2") (V32HI "avx512bw")
(V4SI "ssse3") (V8SI "avx2")
(V2DI "ssse3") (V4DI "avx2")
- (TI "ssse3") (V2TI "avx2") (V4TI "avx512bw")])
+ (V1TI "ssse3") (V2TI "avx2") (V4TI "avx512bw")])
(define_mode_attr sse4_1_avx2
[(V16QI "sse4_1") (V32QI "avx2") (V64QI "avx512bw")
@@ -8859,7 +8855,7 @@
"@
cvtsd2ss\t{%2, %0|%0, %2}
cvtsd2ss\t{%2, %0|%0, %q2}
- vcvtsd2ss\t{<round_mask_op3>%2, %1, %0<mask_operand3>|<mask_operand3>%0, %1, %q2<round_mask_op3>}"
+ vcvtsd2ss\t{<round_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %q2<round_mask_op3>}"
[(set_attr "isa" "noavx,noavx,avx")
(set_attr "type" "ssecvt")
(set_attr "athlon_decode" "vector,double,*")
@@ -8903,7 +8899,7 @@
"@
cvtss2sd\t{%2, %0|%0, %2}
cvtss2sd\t{%2, %0|%0, %k2}
- vcvtss2sd\t{<round_saeonly_mask_op3>%2, %1, %0<mask_operand3>|<mask_operand3>%0, %1, %k2<round_saeonly_mask_op3>}"
+ vcvtss2sd\t{<round_saeonly_mask_op3>%2, %1, %0<mask_operand3>|%0<mask_operand3>, %1, %k2<round_saeonly_mask_op3>}"
[(set_attr "isa" "noavx,noavx,avx")
(set_attr "type" "ssecvt")
(set_attr "amdfam10_decode" "vector,double,*")
@@ -9176,11 +9172,27 @@
(set_attr "prefix" "evex")
(set_attr "mode" "<sseinsnmode>")])
+(define_expand "extendv2sfv2df2"
+ [(set (match_operand:V2DF 0 "register_operand")
+ (float_extend:V2DF
+ (match_operand:V2SF 1 "nonimmediate_operand")))]
+ "TARGET_MMX_WITH_SSE"
+{
+ if (!MEM_P (operands[1]))
+ {
+ operands[1] = lowpart_subreg (V4SFmode,
+ force_reg (V2SFmode, operands[1]),
+ V2SFmode);
+ emit_insn (gen_sse2_cvtps2pd (operands[0], operands[1]));
+ DONE;
+ }
+})
+
(define_insn "sse2_cvtps2pd<mask_name>"
[(set (match_operand:V2DF 0 "register_operand" "=v")
(float_extend:V2DF
(vec_select:V2SF
- (match_operand:V4SF 1 "vector_operand" "vm")
+ (match_operand:V4SF 1 "register_operand" "v")
(parallel [(const_int 0) (const_int 1)]))))]
"TARGET_SSE2 && <mask_avx512vl_condition>"
"%vcvtps2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
@@ -9192,12 +9204,12 @@
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "V2DF")])
-(define_insn "extendv2sfv2df2"
+(define_insn "sse2_cvtps2pd<mask_name>_1"
[(set (match_operand:V2DF 0 "register_operand" "=v")
(float_extend:V2DF
- (match_operand:V2SF 1 "register_operand" "v")))]
- "TARGET_MMX_WITH_SSE"
- "%vcvtps2pd\t{%1, %0|%0, %1}"
+ (match_operand:V2SF 1 "memory_operand" "m")))]
+ "TARGET_SSE2 && <mask_avx512vl_condition>"
+ "%vcvtps2pd\t{%1, %0<mask_operand2>|%0<mask_operand2>, %q1}"
[(set_attr "type" "ssecvt")
(set_attr "amdfam10_decode" "direct")
(set_attr "athlon_decode" "double")
@@ -9254,7 +9266,15 @@
(vec_select:V2SF
(match_operand:V4SF 1 "vector_operand")
(parallel [(const_int 0) (const_int 1)]))))]
- "TARGET_SSE2")
+ "TARGET_SSE2"
+{
+ if (MEM_P (operands[1]))
+ {
+ operands[1] = adjust_address_nv (operands[1], V2SFmode, 0);
+ emit_insn (gen_sse2_cvtps2pd_1 (operands[0], operands[1]));
+ DONE;
+ }
+})
(define_expand "vec_unpacks_lo_v8sf"
[(set (match_operand:V4DF 0 "register_operand")
@@ -14406,8 +14426,8 @@
"TARGET_AVX512VL"
{
if (GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) == 4)
- return "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %t1}";
- return "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %g1}";
+ return "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
+ return "vpmov<trunsuffix><pmov_suff_4>\t{%1, %0%{%2%}|%0%{%2%}, %1}";
}
[(set_attr "type" "ssemov")
(set_attr "memory" "store")
@@ -14506,7 +14526,7 @@
(match_dup 0)
(match_operand:QI 2 "register_operand" "Yk")))]
"TARGET_AVX512VL"
- "vpmov<trunsuffix>qw\t{%1, %0%{%2%}|%0%{%2%}, %g1}"
+ "vpmov<trunsuffix>qw\t{%1, %0%{%2%}|%0%{%2%}, %1}"
[(set_attr "type" "ssemov")
(set_attr "memory" "store")
(set_attr "prefix" "evex")
@@ -21092,10 +21112,10 @@
(set_attr "mode" "<sseinsnmode>")])
(define_insn "<ssse3_avx2>_palignr<mode>"
- [(set (match_operand:SSESCALARMODE 0 "register_operand" "=x,<v_Yw>")
- (unspec:SSESCALARMODE
- [(match_operand:SSESCALARMODE 1 "register_operand" "0,<v_Yw>")
- (match_operand:SSESCALARMODE 2 "vector_operand" "xBm,<v_Yw>m")
+ [(set (match_operand:VIMAX_AVX2_AVX512BW 0 "register_operand" "=x,<v_Yw>")
+ (unspec:VIMAX_AVX2_AVX512BW
+ [(match_operand:VIMAX_AVX2_AVX512BW 1 "register_operand" "0,<v_Yw>")
+ (match_operand:VIMAX_AVX2_AVX512BW 2 "vector_operand" "xBm,<v_Yw>m")
(match_operand:SI 3 "const_0_to_255_mul_8_operand")]
UNSPEC_PALIGNR))]
"TARGET_SSSE3"
@@ -21141,11 +21161,30 @@
gcc_unreachable ();
}
}
- "TARGET_SSSE3 && reload_completed
- && SSE_REGNO_P (REGNO (operands[0]))"
+ "(TARGET_SSSE3 && reload_completed
+ && SSE_REGNO_P (REGNO (operands[0])))
+ || operands[3] == const0_rtx
+ || INTVAL (operands[3]) == 64"
[(set (match_dup 0)
(lshiftrt:V1TI (match_dup 0) (match_dup 3)))]
{
+ if (operands[3] == const0_rtx)
+ {
+ if (!rtx_equal_p (operands[0], operands[2]))
+ emit_move_insn (operands[0], operands[2]);
+ else
+ emit_note (NOTE_INSN_DELETED);
+ DONE;
+ }
+ else if (INTVAL (operands[3]) == 64)
+ {
+ if (!rtx_equal_p (operands[0], operands[1]))
+ emit_move_insn (operands[0], operands[1]);
+ else
+ emit_note (NOTE_INSN_DELETED);
+ DONE;
+ }
+
/* Emulate MMX palignrdi with SSE psrldq. */
rtx op0 = lowpart_subreg (V2DImode, operands[0],
GET_MODE (operands[0]));
@@ -23250,8 +23289,10 @@
"&& 1"
[(const_int 0)]
{
- int ecx = !find_regno_note (curr_insn, REG_UNUSED, REGNO (operands[0]));
- int xmm0 = !find_regno_note (curr_insn, REG_UNUSED, REGNO (operands[1]));
+ int ecx = !find_regno_note (curr_insn, REG_UNUSED,
+ reg_or_subregno (operands[0]));
+ int xmm0 = !find_regno_note (curr_insn, REG_UNUSED,
+ reg_or_subregno (operands[1]));
int flags = !find_regno_note (curr_insn, REG_UNUSED, FLAGS_REG);
if (ecx)
@@ -23386,8 +23427,10 @@
"&& 1"
[(const_int 0)]
{
- int ecx = !find_regno_note (curr_insn, REG_UNUSED, REGNO (operands[0]));
- int xmm0 = !find_regno_note (curr_insn, REG_UNUSED, REGNO (operands[1]));
+ int ecx = !find_regno_note (curr_insn, REG_UNUSED,
+ reg_or_subregno (operands[0]));
+ int xmm0 = !find_regno_note (curr_insn, REG_UNUSED,
+ reg_or_subregno (operands[1]));
int flags = !find_regno_note (curr_insn, REG_UNUSED, FLAGS_REG);
if (ecx)
@@ -23875,21 +23918,23 @@
(xor:V_128_256 (match_operand:V_128_256 1 "register_operand")
(match_operand:V_128_256 2 "register_operand"))
(match_operand:V_128_256 3 "nonimmediate_operand"))
- (match_operand:V_128_256 4 "register_operand")))]
- "TARGET_XOP
- && (REGNO (operands[4]) == REGNO (operands[1])
- || REGNO (operands[4]) == REGNO (operands[2]))"
+ (match_dup 1)))]
+ "TARGET_XOP"
[(set (match_dup 0) (if_then_else:V_128_256 (match_dup 3)
- (match_dup 5)
- (match_dup 4)))]
-{
- /* To handle the commutivity of XOR, operands[4] is either operands[1]
- or operands[2], we need operands[5] to be the other one. */
- if (REGNO (operands[4]) == REGNO (operands[1]))
- operands[5] = operands[2];
- else
- operands[5] = operands[1];
-})
+ (match_dup 2)
+ (match_dup 1)))])
+(define_split
+ [(set (match_operand:V_128_256 0 "register_operand")
+ (xor:V_128_256
+ (and:V_128_256
+ (xor:V_128_256 (match_operand:V_128_256 1 "register_operand")
+ (match_operand:V_128_256 2 "register_operand"))
+ (match_operand:V_128_256 3 "nonimmediate_operand"))
+ (match_dup 2)))]
+ "TARGET_XOP"
+ [(set (match_dup 0) (if_then_else:V_128_256 (match_dup 3)
+ (match_dup 1)
+ (match_dup 2)))])
;; XOP horizontal add/subtract instructions
(define_insn "xop_phadd<u>bw"
diff --git a/gcc/config/loongarch/loongarch-protos.h b/gcc/config/loongarch/loongarch-protos.h
index 2144c24..2287fd37 100644
--- a/gcc/config/loongarch/loongarch-protos.h
+++ b/gcc/config/loongarch/loongarch-protos.h
@@ -130,6 +130,7 @@ extern bool loongarch_symbol_binds_local_p (const_rtx);
extern const char *current_section_name (void);
extern unsigned int current_section_flags (void);
extern bool loongarch_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
+extern bool loongarch_check_zero_div_p (void);
union loongarch_gen_fn_ptrs
{
diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc
index 80046b6..8b0d7f4 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -160,7 +160,7 @@ enum loongarch_load_imm_method
struct loongarch_integer_op
{
enum rtx_code code;
- unsigned HOST_WIDE_INT value;
+ HOST_WIDE_INT value;
enum loongarch_load_imm_method method;
};
@@ -189,7 +189,7 @@ const enum reg_class loongarch_regno_to_class[FIRST_PSEUDO_REGISTER] = {
GR_REGS, GR_REGS, GR_REGS, GR_REGS,
JIRL_REGS, JIRL_REGS, JIRL_REGS, JIRL_REGS,
JIRL_REGS, JIRL_REGS, JIRL_REGS, JIRL_REGS,
- SIBCALL_REGS, SIBCALL_REGS, SIBCALL_REGS, SIBCALL_REGS,
+ SIBCALL_REGS, JIRL_REGS, SIBCALL_REGS, SIBCALL_REGS,
SIBCALL_REGS, SIBCALL_REGS, SIBCALL_REGS, SIBCALL_REGS,
SIBCALL_REGS, GR_REGS, GR_REGS, JIRL_REGS,
JIRL_REGS, JIRL_REGS, JIRL_REGS, JIRL_REGS,
@@ -917,8 +917,12 @@ loongarch_compute_frame_info (void)
frame->frame_pointer_offset = offset;
/* Next are the callee-saved FPRs. */
if (frame->fmask)
- offset += LARCH_STACK_ALIGN (num_f_saved * UNITS_PER_FP_REG);
- frame->fp_sp_offset = offset - UNITS_PER_FP_REG;
+ {
+ offset += LARCH_STACK_ALIGN (num_f_saved * UNITS_PER_FP_REG);
+ frame->fp_sp_offset = offset - UNITS_PER_FP_REG;
+ }
+ else
+ frame->fp_sp_offset = offset;
/* Next are the callee-saved GPRs. */
if (frame->mask)
{
@@ -931,8 +935,10 @@ loongarch_compute_frame_info (void)
frame->save_libcall_adjustment = x_save_size;
offset += x_save_size;
+ frame->gp_sp_offset = offset - UNITS_PER_WORD;
}
- frame->gp_sp_offset = offset - UNITS_PER_WORD;
+ else
+ frame->gp_sp_offset = offset;
/* The hard frame pointer points above the callee-saved GPRs. */
frame->hard_frame_pointer_offset = offset;
/* Above the hard frame pointer is the callee-allocated varags save area. */
@@ -1468,7 +1474,7 @@ loongarch_build_integer (struct loongarch_integer_op *codes,
unsigned int cost = 0;
/* Get the lower 32 bits of the value. */
- HOST_WIDE_INT low_part = TARGET_64BIT ? value << 32 >> 32 : value;
+ HOST_WIDE_INT low_part = (int32_t)value;
if (IMM12_OPERAND (low_part) || IMM12_OPERAND_UNSIGNED (low_part))
{
@@ -1502,6 +1508,7 @@ loongarch_build_integer (struct loongarch_integer_op *codes,
bool lu52i[2] = {(value & LU52I_B) == 0, (value & LU52I_B) == LU52I_B};
int sign31 = (value & (1UL << 31)) >> 31;
+ int sign51 = (value & (1UL << 51)) >> 51;
/* Determine whether the upper 32 bits are sign-extended from the lower
32 bits. If it is, the instructions to load the high order can be
ommitted. */
@@ -1512,12 +1519,12 @@ loongarch_build_integer (struct loongarch_integer_op *codes,
else if (lu32i[sign31])
{
codes[cost].method = METHOD_LU52I;
- codes[cost].value = (value >> 52) << 52;
+ codes[cost].value = value & LU52I_B;
return cost + 1;
}
codes[cost].method = METHOD_LU32I;
- codes[cost].value = ((value << 12) >> 44) << 32;
+ codes[cost].value = (value & LU32I_B) | (sign51 ? LU52I_B : 0);
cost++;
/* Determine whether the 52-61 bits are sign-extended from the low order,
@@ -1525,7 +1532,7 @@ loongarch_build_integer (struct loongarch_integer_op *codes,
if (!lu52i[(value & (1ULL << 51)) >> 51])
{
codes[cost].method = METHOD_LU52I;
- codes[cost].value = (value >> 52) << 52;
+ codes[cost].value = value & LU52I_B;
cost++;
}
}
@@ -2101,6 +2108,19 @@ loongarch_load_store_insns (rtx mem, rtx_insn *insn)
return loongarch_address_insns (XEXP (mem, 0), mode, might_split_p);
}
+/* Return true if we need to trap on division by zero. */
+
+bool
+loongarch_check_zero_div_p (void)
+{
+ /* if -m[no-]check-zero-division is given explicitly. */
+ if (target_flags_explicit & MASK_CHECK_ZERO_DIV)
+ return TARGET_CHECK_ZERO_DIV;
+
+ /* if not, don't trap for optimized code except -Og. */
+ return !optimize || optimize_debug;
+}
+
/* Return the number of instructions needed for an integer division. */
int
@@ -2109,7 +2129,7 @@ loongarch_idiv_insns (machine_mode mode ATTRIBUTE_UNUSED)
int count;
count = 1;
- if (TARGET_CHECK_ZERO_DIV)
+ if (loongarch_check_zero_div_p ())
count += 2;
return count;
@@ -4050,7 +4070,6 @@ loongarch_do_optimize_block_move_p (void)
return !optimize_size;
}
-
/* Expand a QI or HI mode atomic memory operation.
GENERATOR contains a pointer to the gen_* function that generates
@@ -5262,7 +5281,7 @@ loongarch_output_division (const char *division, rtx *operands)
const char *s;
s = division;
- if (TARGET_CHECK_ZERO_DIV)
+ if (loongarch_check_zero_div_p ())
{
output_asm_insn (s, operands);
s = "bne\t%2,%.,1f\n\tbreak\t7\n1:";
diff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h
index 4d107a4..f9de9a6 100644
--- a/gcc/config/loongarch/loongarch.h
+++ b/gcc/config/loongarch/loongarch.h
@@ -511,7 +511,7 @@ enum reg_class
#define REG_CLASS_CONTENTS \
{ \
{ 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */ \
- { 0x001ff000, 0x00000000, 0x00000000 }, /* SIBCALL_REGS */ \
+ { 0x001fd000, 0x00000000, 0x00000000 }, /* SIBCALL_REGS */ \
{ 0xff9ffff0, 0x00000000, 0x00000000 }, /* JIRL_REGS */ \
{ 0xfffffffc, 0x00000000, 0x00000000 }, /* CSR_REGS */ \
{ 0xffffffff, 0x00000000, 0x00000000 }, /* GR_REGS */ \
diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md
index d3c809e..5c0445d 100644
--- a/gcc/config/loongarch/loongarch.md
+++ b/gcc/config/loongarch/loongarch.md
@@ -110,6 +110,8 @@
;;
;; ....................
+(define_attr "enabled" "no,yes" (const_string "yes"))
+
(define_attr "got" "unset,load"
(const_string "unset"))
@@ -621,7 +623,7 @@
(mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
(sign_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
"TARGET_64BIT"
- "mul.d\t%0,%1,%2"
+ "mulw.d.w\t%0,%1,%2"
[(set_attr "type" "imul")
(set_attr "mode" "DI")])
@@ -750,6 +752,7 @@
{
rtx reg1 = gen_reg_rtx (DImode);
rtx reg2 = gen_reg_rtx (DImode);
+ rtx rd = gen_reg_rtx (DImode);
operands[1] = gen_rtx_SIGN_EXTEND (word_mode, operands[1]);
operands[2] = gen_rtx_SIGN_EXTEND (word_mode, operands[2]);
@@ -757,32 +760,45 @@
emit_insn (gen_rtx_SET (reg1, operands[1]));
emit_insn (gen_rtx_SET (reg2, operands[2]));
- emit_insn (gen_<optab>di3_fake (operands[0], reg1, reg2));
+ emit_insn (gen_<optab>di3_fake (rd, reg1, reg2));
+ emit_insn (gen_rtx_SET (operands[0],
+ simplify_gen_subreg (SImode, rd, DImode, 0)));
DONE;
}
})
(define_insn "*<optab><mode>3"
- [(set (match_operand:GPR 0 "register_operand" "=&r")
- (any_div:GPR (match_operand:GPR 1 "register_operand" "r")
- (match_operand:GPR 2 "register_operand" "r")))]
+ [(set (match_operand:GPR 0 "register_operand" "=r,&r,&r")
+ (any_div:GPR (match_operand:GPR 1 "register_operand" "r,r,0")
+ (match_operand:GPR 2 "register_operand" "r,r,r")))]
""
{
return loongarch_output_division ("<insn>.<d><u>\t%0,%1,%2", operands);
}
[(set_attr "type" "idiv")
- (set_attr "mode" "<MODE>")])
+ (set_attr "mode" "<MODE>")
+ (set (attr "enabled")
+ (if_then_else
+ (match_test "!!which_alternative == loongarch_check_zero_div_p()")
+ (const_string "yes")
+ (const_string "no")))])
(define_insn "<optab>di3_fake"
- [(set (match_operand:SI 0 "register_operand" "=&r")
- (any_div:SI (match_operand:DI 1 "register_operand" "r")
- (match_operand:DI 2 "register_operand" "r")))]
+ [(set (match_operand:DI 0 "register_operand" "=r,&r,&r")
+ (sign_extend:DI
+ (any_div:SI (match_operand:DI 1 "register_operand" "r,r,0")
+ (match_operand:DI 2 "register_operand" "r,r,r"))))]
""
{
return loongarch_output_division ("<insn>.w<u>\t%0,%1,%2", operands);
}
[(set_attr "type" "idiv")
- (set_attr "mode" "SI")])
+ (set_attr "mode" "SI")
+ (set (attr "enabled")
+ (if_then_else
+ (match_test "!!which_alternative == loongarch_check_zero_div_p()")
+ (const_string "yes")
+ (const_string "no")))])
;; Floating point multiply accumulate instructions.
diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc
index 5eb8459..e81a245 100644
--- a/gcc/config/mips/mips.cc
+++ b/gcc/config/mips/mips.cc
@@ -22743,7 +22743,12 @@ mips_constant_alignment (const_tree exp, HOST_WIDE_INT align)
static unsigned HOST_WIDE_INT
mips_asan_shadow_offset (void)
{
- return SUBTARGET_SHADOW_OFFSET;
+ if (mips_abi == ABI_N32)
+ return (HOST_WIDE_INT_1 << 29);
+ if (POINTER_SIZE == 64)
+ return (HOST_WIDE_INT_1 << 37);
+ else
+ return HOST_WIDE_INT_C (0x0aaa0000);
}
/* Implement TARGET_STARTING_FRAME_OFFSET. See mips_compute_frame_info
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 858bbba..0029864 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -3463,10 +3463,3 @@ struct GTY(()) machine_function {
&& !TARGET_MICROMIPS && !TARGET_FIX_24K)
#define NEED_INDICATE_EXEC_STACK 0
-
-/* Define the shadow offset for asan. Other OS's can override in the
- respective tm.h files. */
-#ifndef SUBTARGET_SHADOW_OFFSET
-#define SUBTARGET_SHADOW_OFFSET \
- (POINTER_SIZE == 64 ? HOST_WIDE_INT_1 << 37 : HOST_WIDE_INT_C (0x0aaa0000))
-#endif
diff --git a/gcc/config/nios2/nios2.cc b/gcc/config/nios2/nios2.cc
index f193cde..1a33c88 100644
--- a/gcc/config/nios2/nios2.cc
+++ b/gcc/config/nios2/nios2.cc
@@ -2552,7 +2552,10 @@ nios2_load_pic_address (rtx sym, int unspec, rtx tmp)
return nios2_large_got_address (offset, tmp);
}
- return gen_const_mem (Pmode, nios2_got_address (sym, unspec));
+ if (unspec == UNSPEC_PIC_CALL_SYM)
+ return gen_rtx_MEM (Pmode, nios2_got_address (sym, unspec));
+ else
+ return gen_const_mem (Pmode, nios2_got_address (sym, unspec));
}
/* Nonzero if the constant value X is a legitimate general operand
diff --git a/gcc/config/nvptx/mkoffload.cc b/gcc/config/nvptx/mkoffload.cc
index b28c1a3..0fa5f44 100644
--- a/gcc/config/nvptx/mkoffload.cc
+++ b/gcc/config/nvptx/mkoffload.cc
@@ -231,7 +231,7 @@ access_check (const char *name, int mode)
}
static void
-process (FILE *in, FILE *out)
+process (FILE *in, FILE *out, uint32_t omp_requires)
{
size_t len = 0;
const char *input = read_file (in, &len);
@@ -240,6 +240,8 @@ process (FILE *in, FILE *out)
unsigned obj_count = 0;
unsigned ix;
+ fprintf (out, "#include <stdint.h>\n\n");
+
/* Dump out char arrays for each PTX object file. These are
terminated by a NUL. */
for (size_t i = 0; i != len;)
@@ -308,20 +310,21 @@ process (FILE *in, FILE *out)
fprintf (out, "\n};\n\n");
fprintf (out,
- "static const struct nvptx_tdata {\n"
+ "static const struct nvptx_data {\n"
+ " uintptr_t omp_requires_mask;\n"
" const struct ptx_obj *ptx_objs;\n"
" unsigned ptx_num;\n"
" const char *const *var_names;\n"
" unsigned var_num;\n"
" const struct nvptx_fn *fn_names;\n"
" unsigned fn_num;\n"
- "} target_data = {\n"
- " ptx_objs, sizeof (ptx_objs) / sizeof (ptx_objs[0]),\n"
+ "} nvptx_data = {\n"
+ " %d, ptx_objs, sizeof (ptx_objs) / sizeof (ptx_objs[0]),\n"
" var_mappings,"
" sizeof (var_mappings) / sizeof (var_mappings[0]),\n"
" func_mappings,"
" sizeof (func_mappings) / sizeof (func_mappings[0])\n"
- "};\n\n");
+ "};\n\n", omp_requires);
fprintf (out, "#ifdef __cplusplus\n"
"extern \"C\" {\n"
@@ -341,7 +344,7 @@ process (FILE *in, FILE *out)
fprintf (out, "static __attribute__((constructor)) void init (void)\n"
"{\n"
" GOMP_offload_register_ver (%#x, __OFFLOAD_TABLE__,"
- " %d/*NVIDIA_PTX*/, &target_data);\n"
+ " %d/*NVIDIA_PTX*/, &nvptx_data);\n"
"};\n",
GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_NVIDIA_PTX),
GOMP_DEVICE_NVIDIA_PTX);
@@ -349,7 +352,7 @@ process (FILE *in, FILE *out)
fprintf (out, "static __attribute__((destructor)) void fini (void)\n"
"{\n"
" GOMP_offload_unregister_ver (%#x, __OFFLOAD_TABLE__,"
- " %d/*NVIDIA_PTX*/, &target_data);\n"
+ " %d/*NVIDIA_PTX*/, &nvptx_data);\n"
"};\n",
GOMP_VERSION_PACK (GOMP_VERSION, GOMP_VERSION_NVIDIA_PTX),
GOMP_DEVICE_NVIDIA_PTX);
@@ -583,19 +586,37 @@ main (int argc, char **argv)
unsetenv ("COMPILER_PATH");
unsetenv ("LIBRARY_PATH");
+ char *omp_requires_file;
+ if (save_temps)
+ omp_requires_file = concat (dumppfx, ".mkoffload.omp_requires", NULL);
+ else
+ omp_requires_file = make_temp_file (".mkoffload.omp_requires");
+
+ xputenv (concat ("GCC_OFFLOAD_OMP_REQUIRES_FILE=", omp_requires_file, NULL));
fork_execute (new_argv[0], CONST_CAST (char **, new_argv), true,
".gcc_args");
obstack_free (&argv_obstack, NULL);
+ unsetenv("GCC_OFFLOAD_OMP_REQUIRES_FILE");
xputenv (concat ("GCC_EXEC_PREFIX=", execpath, NULL));
xputenv (concat ("COMPILER_PATH=", cpath, NULL));
xputenv (concat ("LIBRARY_PATH=", lpath, NULL));
+ in = fopen (omp_requires_file, "rb");
+ if (!in)
+ fatal_error (input_location, "cannot open omp_requires file %qs",
+ omp_requires_file);
+ uint32_t omp_requires;
+ if (fread (&omp_requires, sizeof (omp_requires), 1, in) != 1)
+ fatal_error (input_location, "cannot read omp_requires file %qs",
+ omp_requires_file);
+ fclose (in);
+
in = fopen (ptx_name, "r");
if (!in)
fatal_error (input_location, "cannot open intermediate ptx file");
- process (in, out);
+ process (in, out, omp_requires);
fclose (in);
}
diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md
index 6c1ccc6..d1570ce 100644
--- a/gcc/config/riscv/bitmanip.md
+++ b/gcc/config/riscv/bitmanip.md
@@ -102,7 +102,7 @@
{
unsigned HOST_WIDE_INT mask = UINTVAL (operands[3]);
/* scale: shift within the sh[123]add.uw */
- int scale = 32 - clz_hwi (mask);
+ unsigned HOST_WIDE_INT scale = 32 - clz_hwi (mask);
/* bias: pre-scale amount (i.e. the prior shift amount) */
int bias = ctz_hwi (mask) - scale;
diff --git a/gcc/config/riscv/riscv-builtins.cc b/gcc/config/riscv/riscv-builtins.cc
index 795132a..1218fdf 100644
--- a/gcc/config/riscv/riscv-builtins.cc
+++ b/gcc/config/riscv/riscv-builtins.cc
@@ -133,6 +133,7 @@ AVAIL (prefetchi64, TARGET_ZICBOP && TARGET_64BIT)
#define RISCV_ATYPE_USI unsigned_intSI_type_node
#define RISCV_ATYPE_SI intSI_type_node
#define RISCV_ATYPE_DI intDI_type_node
+#define RISCV_ATYPE_VOID_PTR ptr_type_node
/* RISCV_FTYPE_ATYPESN takes N RISCV_FTYPES-like type codes and lists
their associated RISCV_ATYPEs. */
diff --git a/gcc/config/riscv/riscv-cmo.def b/gcc/config/riscv/riscv-cmo.def
index b30ecf9..9fe5094 100644
--- a/gcc/config/riscv/riscv-cmo.def
+++ b/gcc/config/riscv/riscv-cmo.def
@@ -1,16 +1,16 @@
// zicbom
-RISCV_BUILTIN (clean_si, "zicbom_cbo_clean", RISCV_BUILTIN_DIRECT, RISCV_SI_FTYPE, clean32),
-RISCV_BUILTIN (clean_di, "zicbom_cbo_clean", RISCV_BUILTIN_DIRECT, RISCV_DI_FTYPE, clean64),
+RISCV_BUILTIN (clean_si, "zicbom_cbo_clean", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, clean32),
+RISCV_BUILTIN (clean_di, "zicbom_cbo_clean", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, clean64),
-RISCV_BUILTIN (flush_si, "zicbom_cbo_flush", RISCV_BUILTIN_DIRECT, RISCV_SI_FTYPE, flush32),
-RISCV_BUILTIN (flush_di, "zicbom_cbo_flush", RISCV_BUILTIN_DIRECT, RISCV_DI_FTYPE, flush64),
+RISCV_BUILTIN (flush_si, "zicbom_cbo_flush", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, flush32),
+RISCV_BUILTIN (flush_di, "zicbom_cbo_flush", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, flush64),
-RISCV_BUILTIN (inval_si, "zicbom_cbo_inval", RISCV_BUILTIN_DIRECT, RISCV_SI_FTYPE, inval32),
-RISCV_BUILTIN (inval_di, "zicbom_cbo_inval", RISCV_BUILTIN_DIRECT, RISCV_DI_FTYPE, inval64),
+RISCV_BUILTIN (inval_si, "zicbom_cbo_inval", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, inval32),
+RISCV_BUILTIN (inval_di, "zicbom_cbo_inval", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, inval64),
// zicboz
-RISCV_BUILTIN (zero_si, "zicboz_cbo_zero", RISCV_BUILTIN_DIRECT, RISCV_SI_FTYPE, zero32),
-RISCV_BUILTIN (zero_di, "zicboz_cbo_zero", RISCV_BUILTIN_DIRECT, RISCV_DI_FTYPE, zero64),
+RISCV_BUILTIN (zero_si, "zicboz_cbo_zero", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, zero32),
+RISCV_BUILTIN (zero_di, "zicboz_cbo_zero", RISCV_BUILTIN_DIRECT_NO_TARGET, RISCV_VOID_FTYPE_VOID_PTR, zero64),
// zicbop
RISCV_BUILTIN (prefetchi_si, "zicbop_cbo_prefetchi", RISCV_BUILTIN_DIRECT, RISCV_SI_FTYPE_SI, prefetchi32),
diff --git a/gcc/config/riscv/riscv-ftypes.def b/gcc/config/riscv/riscv-ftypes.def
index 6242129..c2b45c6 100644
--- a/gcc/config/riscv/riscv-ftypes.def
+++ b/gcc/config/riscv/riscv-ftypes.def
@@ -28,7 +28,6 @@ along with GCC; see the file COPYING3. If not see
DEF_RISCV_FTYPE (0, (USI))
DEF_RISCV_FTYPE (1, (VOID, USI))
-DEF_RISCV_FTYPE (0, (SI))
-DEF_RISCV_FTYPE (0, (DI))
+DEF_RISCV_FTYPE (1, (VOID, VOID_PTR))
DEF_RISCV_FTYPE (1, (SI, SI))
DEF_RISCV_FTYPE (1, (DI, DI))
diff --git a/gcc/config/rs6000/aix71.h b/gcc/config/rs6000/aix71.h
index 57e07bc..323d7c8 100644
--- a/gcc/config/rs6000/aix71.h
+++ b/gcc/config/rs6000/aix71.h
@@ -137,9 +137,11 @@ do { \
#undef TARGET_DEFAULT
#ifdef RS6000_BI_ARCH
-#define TARGET_DEFAULT (MASK_PPC_GPOPT | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT)
+#define TARGET_DEFAULT (OPTION_MASK_PPC_GPOPT | OPTION_MASK_PPC_GFXOPT \
+ | OPTION_MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT)
#else
-#define TARGET_DEFAULT (MASK_PPC_GPOPT | MASK_PPC_GFXOPT | MASK_MFCRF)
+#define TARGET_DEFAULT (OPTION_MASK_PPC_GPOPT | OPTION_MASK_PPC_GFXOPT \
+ | OPTION_MASK_MFCRF)
#endif
#undef PROCESSOR_DEFAULT
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index b5cef42..6a8845e 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -367,7 +367,7 @@
default as well. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_MULTIPLE | MASK_PPC_GFXOPT)
+#define TARGET_DEFAULT (OPTION_MASK_MULTIPLE | OPTION_MASK_PPC_GFXOPT)
/* Darwin always uses IBM long double, never IEEE long double. */
#undef TARGET_IEEEQUAD
diff --git a/gcc/config/rs6000/darwin64-biarch.h b/gcc/config/rs6000/darwin64-biarch.h
index 57b0fab..6515bcc 100644
--- a/gcc/config/rs6000/darwin64-biarch.h
+++ b/gcc/config/rs6000/darwin64-biarch.h
@@ -21,7 +21,7 @@
#undef TARGET_DEFAULT
#define TARGET_DEFAULT (MASK_POWERPC64 | MASK_64BIT \
- | MASK_MULTIPLE | MASK_PPC_GFXOPT)
+ | OPTION_MASK_MULTIPLE | OPTION_MASK_PPC_GFXOPT)
#undef DARWIN_ARCH_SPEC
#define DARWIN_ARCH_SPEC "%{m32:ppc;:ppc64}"
diff --git a/gcc/config/rs6000/default64.h b/gcc/config/rs6000/default64.h
index 4bf0fee..0bec9493 100644
--- a/gcc/config/rs6000/default64.h
+++ b/gcc/config/rs6000/default64.h
@@ -24,12 +24,14 @@ along with GCC; see the file COPYING3. If not see
#if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (ISA_2_7_MASKS_SERVER | MASK_POWERPC64 | MASK_64BIT | MASK_LITTLE_ENDIAN)
+#define TARGET_DEFAULT (ISA_2_7_MASKS_SERVER | MASK_POWERPC64 | MASK_64BIT \
+ | MASK_LITTLE_ENDIAN)
#undef ASM_DEFAULT_SPEC
#define ASM_DEFAULT_SPEC "-mpower8"
#else
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_PPC_GFXOPT | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT)
+#define TARGET_DEFAULT (OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT \
+ | OPTION_MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT)
#undef ASM_DEFAULT_SPEC
#define ASM_DEFAULT_SPEC "-mpower4"
#endif
diff --git a/gcc/config/rs6000/eabi.h b/gcc/config/rs6000/eabi.h
index e58283f..367de7b 100644
--- a/gcc/config/rs6000/eabi.h
+++ b/gcc/config/rs6000/eabi.h
@@ -21,7 +21,7 @@
/* Add -meabi to target flags. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT MASK_EABI
+#define TARGET_DEFAULT OPTION_MASK_EABI
/* Invoke an initializer function to set up the GOT. */
#define NAME__MAIN "__eabi"
diff --git a/gcc/config/rs6000/eabialtivec.h b/gcc/config/rs6000/eabialtivec.h
index 63cb00f..23cef79 100644
--- a/gcc/config/rs6000/eabialtivec.h
+++ b/gcc/config/rs6000/eabialtivec.h
@@ -21,7 +21,7 @@
/* Add -meabi and -maltivec to target flags. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_EABI | MASK_ALTIVEC)
+#define TARGET_DEFAULT (OPTION_MASK_EABI | OPTION_MASK_ALTIVEC)
#undef ASM_DEFAULT_EXTRA
#define ASM_DEFAULT_EXTRA " %{!mvsx:%{!maltivec:%{!no-maltivec:-maltivec}}}"
diff --git a/gcc/config/rs6000/linuxaltivec.h b/gcc/config/rs6000/linuxaltivec.h
index d2557ca..55bae11 100644
--- a/gcc/config/rs6000/linuxaltivec.h
+++ b/gcc/config/rs6000/linuxaltivec.h
@@ -22,10 +22,10 @@
/* Override rs6000.h and sysv4.h definition. */
#if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_ALTIVEC | MASK_LITTLE_ENDIAN)
+#define TARGET_DEFAULT (OPTION_MASK_ALTIVEC | MASK_LITTLE_ENDIAN)
#else
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT MASK_ALTIVEC
+#define TARGET_DEFAULT OPTION_MASK_ALTIVEC
#endif
#undef ASM_DEFAULT_EXTRA
diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 9c8cbd7..0d13645 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -384,7 +384,7 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
TARGET_DEFAULT macro is defined to equal zero, and
TARGET_POWERPC64 and
a) BYTES_BIG_ENDIAN and the flag to be enabled is either
- MASK_PPC_GFXOPT or MASK_POWERPC64 (flags for "powerpc64"
+ OPTION_MASK_PPC_GFXOPT or MASK_POWERPC64 (flags for "powerpc64"
target), or
b) !BYTES_BIG_ENDIAN and the flag to be enabled is either
MASK_POWERPC64 or it is one of the flags included in
@@ -596,9 +596,9 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
rs6000_define_or_undefine_macro (define_p, "__FLOAT128_HARDWARE__");
/* options from the builtin masks. */
- /* Note that RS6000_BTM_CELL is enabled only if (rs6000_cpu ==
- PROCESSOR_CELL) (e.g. -mcpu=cell). */
- if ((bu_mask & RS6000_BTM_CELL) != 0)
+ /* Note that OPTION_MASK_FPRND is enabled only if
+ (rs6000_cpu == PROCESSOR_CELL) (e.g. -mcpu=cell). */
+ if ((bu_mask & OPTION_MASK_FPRND) != 0)
rs6000_define_or_undefine_macro (define_p, "__PPU__");
/* Tell the user if we support the MMA instructions. */
diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def
index 963947f..c3825bc 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -176,74 +176,82 @@
where the arguments are the fields of struct rs6000_ptt. */
-RS6000_CPU ("401", PROCESSOR_PPC403, MASK_SOFT_FLOAT)
-RS6000_CPU ("403", PROCESSOR_PPC403, MASK_SOFT_FLOAT | MASK_STRICT_ALIGN)
-RS6000_CPU ("405", PROCESSOR_PPC405, MASK_SOFT_FLOAT | MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("405fp", PROCESSOR_PPC405, MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("440", PROCESSOR_PPC440, MASK_SOFT_FLOAT | MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("440fp", PROCESSOR_PPC440, MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("464", PROCESSOR_PPC440, MASK_SOFT_FLOAT | MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("464fp", PROCESSOR_PPC440, MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("476", PROCESSOR_PPC476,
- MASK_SOFT_FLOAT | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB
- | MASK_FPRND | MASK_CMPB | MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("476fp", PROCESSOR_PPC476,
- MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
- | MASK_CMPB | MASK_MULHW | MASK_DLMZB)
+RS6000_CPU ("401", PROCESSOR_PPC403, OPTION_MASK_SOFT_FLOAT)
+RS6000_CPU ("403", PROCESSOR_PPC403, OPTION_MASK_SOFT_FLOAT | MASK_STRICT_ALIGN)
+RS6000_CPU ("405", PROCESSOR_PPC405, OPTION_MASK_SOFT_FLOAT
+ | OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("405fp", PROCESSOR_PPC405, OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("440", PROCESSOR_PPC440, OPTION_MASK_SOFT_FLOAT
+ | OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("440fp", PROCESSOR_PPC440, OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("464", PROCESSOR_PPC440, OPTION_MASK_SOFT_FLOAT
+ | OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("464fp", PROCESSOR_PPC440, OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("476", PROCESSOR_PPC476, OPTION_MASK_SOFT_FLOAT
+ | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_MFCRF | OPTION_MASK_POPCNTB
+ | OPTION_MASK_FPRND | OPTION_MASK_CMPB | OPTION_MASK_MULHW
+ | OPTION_MASK_DLMZB)
+RS6000_CPU ("476fp", PROCESSOR_PPC476, OPTION_MASK_PPC_GFXOPT
+ | OPTION_MASK_MFCRF | OPTION_MASK_POPCNTB | OPTION_MASK_FPRND
+ | OPTION_MASK_CMPB | OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
RS6000_CPU ("505", PROCESSOR_MPCCORE, 0)
-RS6000_CPU ("601", PROCESSOR_PPC601, MASK_MULTIPLE)
-RS6000_CPU ("602", PROCESSOR_PPC603, MASK_PPC_GFXOPT)
-RS6000_CPU ("603", PROCESSOR_PPC603, MASK_PPC_GFXOPT)
-RS6000_CPU ("603e", PROCESSOR_PPC603, MASK_PPC_GFXOPT)
-RS6000_CPU ("604", PROCESSOR_PPC604, MASK_PPC_GFXOPT)
-RS6000_CPU ("604e", PROCESSOR_PPC604e, MASK_PPC_GFXOPT)
-RS6000_CPU ("620", PROCESSOR_PPC620, MASK_PPC_GFXOPT | MASK_POWERPC64)
-RS6000_CPU ("630", PROCESSOR_PPC630, MASK_PPC_GFXOPT | MASK_POWERPC64)
-RS6000_CPU ("740", PROCESSOR_PPC750, MASK_PPC_GFXOPT)
+RS6000_CPU ("601", PROCESSOR_PPC601, OPTION_MASK_MULTIPLE)
+RS6000_CPU ("602", PROCESSOR_PPC603, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("603", PROCESSOR_PPC603, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("603e", PROCESSOR_PPC603, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("604", PROCESSOR_PPC604, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("604e", PROCESSOR_PPC604e, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("620", PROCESSOR_PPC620, OPTION_MASK_PPC_GFXOPT | MASK_POWERPC64)
+RS6000_CPU ("630", PROCESSOR_PPC630, OPTION_MASK_PPC_GFXOPT | MASK_POWERPC64)
+RS6000_CPU ("740", PROCESSOR_PPC750, OPTION_MASK_PPC_GFXOPT)
RS6000_CPU ("7400", PROCESSOR_PPC7400, POWERPC_7400_MASK)
RS6000_CPU ("7450", PROCESSOR_PPC7450, POWERPC_7400_MASK)
-RS6000_CPU ("750", PROCESSOR_PPC750, MASK_PPC_GFXOPT)
-RS6000_CPU ("801", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
-RS6000_CPU ("821", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
-RS6000_CPU ("823", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
-RS6000_CPU ("8540", PROCESSOR_PPC8540, MASK_STRICT_ALIGN | MASK_ISEL)
-RS6000_CPU ("8548", PROCESSOR_PPC8548, MASK_STRICT_ALIGN | MASK_ISEL)
-RS6000_CPU ("a2", PROCESSOR_PPCA2,
- MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_POPCNTB | MASK_CMPB
- | MASK_NO_UPDATE)
-RS6000_CPU ("e300c2", PROCESSOR_PPCE300C2, MASK_SOFT_FLOAT)
+RS6000_CPU ("750", PROCESSOR_PPC750, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("801", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
+RS6000_CPU ("821", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
+RS6000_CPU ("823", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
+RS6000_CPU ("8540", PROCESSOR_PPC8540, MASK_STRICT_ALIGN | OPTION_MASK_ISEL)
+RS6000_CPU ("8548", PROCESSOR_PPC8548, MASK_STRICT_ALIGN | OPTION_MASK_ISEL)
+RS6000_CPU ("a2", PROCESSOR_PPCA2, OPTION_MASK_PPC_GFXOPT | MASK_POWERPC64
+ | OPTION_MASK_POPCNTB | OPTION_MASK_CMPB
+ | OPTION_MASK_NO_UPDATE)
+RS6000_CPU ("e300c2", PROCESSOR_PPCE300C2, OPTION_MASK_SOFT_FLOAT)
RS6000_CPU ("e300c3", PROCESSOR_PPCE300C3, 0)
-RS6000_CPU ("e500mc", PROCESSOR_PPCE500MC, MASK_PPC_GFXOPT | MASK_ISEL)
+RS6000_CPU ("e500mc", PROCESSOR_PPCE500MC, OPTION_MASK_PPC_GFXOPT
+ | OPTION_MASK_ISEL)
RS6000_CPU ("e500mc64", PROCESSOR_PPCE500MC64,
- MASK_POWERPC64 | MASK_PPC_GFXOPT | MASK_ISEL)
+ MASK_POWERPC64 | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_ISEL)
RS6000_CPU ("e5500", PROCESSOR_PPCE5500,
- MASK_POWERPC64 | MASK_PPC_GFXOPT | MASK_ISEL)
+ MASK_POWERPC64 | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_ISEL)
RS6000_CPU ("e6500", PROCESSOR_PPCE6500, POWERPC_7400_MASK | MASK_POWERPC64
- | MASK_MFCRF | MASK_ISEL)
-RS6000_CPU ("860", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
-RS6000_CPU ("970", PROCESSOR_POWER4,
- POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
-RS6000_CPU ("cell", PROCESSOR_CELL,
- POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
-RS6000_CPU ("ec603e", PROCESSOR_PPC603, MASK_SOFT_FLOAT)
-RS6000_CPU ("G3", PROCESSOR_PPC750, MASK_PPC_GFXOPT)
+ | OPTION_MASK_MFCRF | OPTION_MASK_ISEL)
+RS6000_CPU ("860", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
+RS6000_CPU ("970", PROCESSOR_POWER4, POWERPC_7400_MASK | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_MFCRF | MASK_POWERPC64)
+RS6000_CPU ("cell", PROCESSOR_CELL, POWERPC_7400_MASK | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_MFCRF | MASK_POWERPC64)
+RS6000_CPU ("ec603e", PROCESSOR_PPC603, OPTION_MASK_SOFT_FLOAT)
+RS6000_CPU ("G3", PROCESSOR_PPC750, OPTION_MASK_PPC_GFXOPT)
RS6000_CPU ("G4", PROCESSOR_PPC7450, POWERPC_7400_MASK)
-RS6000_CPU ("G5", PROCESSOR_POWER4,
- POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
-RS6000_CPU ("titan", PROCESSOR_TITAN, MASK_MULHW | MASK_DLMZB)
-RS6000_CPU ("power3", PROCESSOR_PPC630, MASK_PPC_GFXOPT | MASK_POWERPC64)
-RS6000_CPU ("power4", PROCESSOR_POWER4, MASK_POWERPC64 | MASK_PPC_GPOPT
- | MASK_PPC_GFXOPT | MASK_MFCRF)
-RS6000_CPU ("power5", PROCESSOR_POWER5, MASK_POWERPC64 | MASK_PPC_GPOPT
- | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB)
-RS6000_CPU ("power5+", PROCESSOR_POWER5, MASK_POWERPC64 | MASK_PPC_GPOPT
- | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND)
-RS6000_CPU ("power6", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
- | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
- | MASK_CMPB | MASK_DFP | MASK_RECIP_PRECISION)
-RS6000_CPU ("power6x", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
- | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
- | MASK_CMPB | MASK_DFP | MASK_RECIP_PRECISION)
+RS6000_CPU ("G5", PROCESSOR_POWER4, POWERPC_7400_MASK | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_MFCRF | MASK_POWERPC64)
+RS6000_CPU ("titan", PROCESSOR_TITAN, OPTION_MASK_MULHW | OPTION_MASK_DLMZB)
+RS6000_CPU ("power3", PROCESSOR_PPC630, OPTION_MASK_PPC_GFXOPT | MASK_POWERPC64)
+RS6000_CPU ("power4", PROCESSOR_POWER4, MASK_POWERPC64 | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_MFCRF)
+RS6000_CPU ("power5", PROCESSOR_POWER5, MASK_POWERPC64 | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_MFCRF | OPTION_MASK_POPCNTB)
+RS6000_CPU ("power5+", PROCESSOR_POWER5, MASK_POWERPC64 | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_MFCRF | OPTION_MASK_POPCNTB
+ | OPTION_MASK_FPRND)
+RS6000_CPU ("power6", PROCESSOR_POWER6, MASK_POWERPC64 | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_MFCRF | OPTION_MASK_POPCNTB
+ | OPTION_MASK_FPRND | OPTION_MASK_CMPB | OPTION_MASK_DFP
+ | OPTION_MASK_RECIP_PRECISION)
+RS6000_CPU ("power6x", PROCESSOR_POWER6, MASK_POWERPC64 | OPTION_MASK_PPC_GPOPT
+ | OPTION_MASK_PPC_GFXOPT | OPTION_MASK_MFCRF | OPTION_MASK_POPCNTB
+ | OPTION_MASK_FPRND | OPTION_MASK_CMPB | OPTION_MASK_DFP
+ | OPTION_MASK_RECIP_PRECISION)
RS6000_CPU ("power7", PROCESSOR_POWER7, MASK_POWERPC64 | ISA_2_6_MASKS_SERVER)
RS6000_CPU ("power8", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER
| OPTION_MASK_HTM)
@@ -251,7 +259,8 @@ RS6000_CPU ("power9", PROCESSOR_POWER9, MASK_POWERPC64 | ISA_3_0_MASKS_SERVER
| OPTION_MASK_HTM)
RS6000_CPU ("power10", PROCESSOR_POWER10, MASK_POWERPC64 | ISA_3_1_MASKS_SERVER)
RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
-RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, MASK_PPC_GFXOPT | MASK_POWERPC64)
-RS6000_CPU ("powerpc64le", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER
- | OPTION_MASK_HTM)
-RS6000_CPU ("rs64", PROCESSOR_RS64A, MASK_PPC_GFXOPT | MASK_POWERPC64)
+RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, OPTION_MASK_PPC_GFXOPT
+ | MASK_POWERPC64)
+RS6000_CPU ("powerpc64le", PROCESSOR_POWER8, MASK_POWERPC64
+ | ISA_2_7_MASKS_SERVER | OPTION_MASK_HTM)
+RS6000_CPU ("rs64", PROCESSOR_RS64A, OPTION_MASK_PPC_GFXOPT | MASK_POWERPC64)
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 59481d9..3ff16b8 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -3379,32 +3379,32 @@ darwin_rs6000_override_options (void)
HOST_WIDE_INT
rs6000_builtin_mask_calculate (void)
{
- return (((TARGET_ALTIVEC) ? RS6000_BTM_ALTIVEC : 0)
- | ((TARGET_CMPB) ? RS6000_BTM_CMPB : 0)
- | ((TARGET_VSX) ? RS6000_BTM_VSX : 0)
- | ((TARGET_FRE) ? RS6000_BTM_FRE : 0)
- | ((TARGET_FRES) ? RS6000_BTM_FRES : 0)
- | ((TARGET_FRSQRTE) ? RS6000_BTM_FRSQRTE : 0)
- | ((TARGET_FRSQRTES) ? RS6000_BTM_FRSQRTES : 0)
- | ((TARGET_POPCNTD) ? RS6000_BTM_POPCNTD : 0)
- | ((rs6000_cpu == PROCESSOR_CELL) ? RS6000_BTM_CELL : 0)
- | ((TARGET_P8_VECTOR) ? RS6000_BTM_P8_VECTOR : 0)
- | ((TARGET_P9_VECTOR) ? RS6000_BTM_P9_VECTOR : 0)
- | ((TARGET_P9_MISC) ? RS6000_BTM_P9_MISC : 0)
- | ((TARGET_MODULO) ? RS6000_BTM_MODULO : 0)
- | ((TARGET_64BIT) ? RS6000_BTM_64BIT : 0)
- | ((TARGET_POWERPC64) ? RS6000_BTM_POWERPC64 : 0)
- | ((TARGET_CRYPTO) ? RS6000_BTM_CRYPTO : 0)
- | ((TARGET_HTM) ? RS6000_BTM_HTM : 0)
- | ((TARGET_DFP) ? RS6000_BTM_DFP : 0)
- | ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0)
+ return (((TARGET_ALTIVEC) ? OPTION_MASK_ALTIVEC : 0)
+ | ((TARGET_CMPB) ? OPTION_MASK_CMPB : 0)
+ | ((TARGET_VSX) ? OPTION_MASK_VSX : 0)
+ | ((TARGET_FRE) ? OPTION_MASK_POPCNTB : 0)
+ | ((TARGET_FRES) ? OPTION_MASK_PPC_GFXOPT : 0)
+ | ((TARGET_FRSQRTE) ? OPTION_MASK_PPC_GFXOPT : 0)
+ | ((TARGET_FRSQRTES) ? OPTION_MASK_POPCNTB : 0)
+ | ((TARGET_POPCNTD) ? OPTION_MASK_POPCNTD : 0)
+ | ((rs6000_cpu == PROCESSOR_CELL) ? OPTION_MASK_FPRND : 0)
+ | ((TARGET_P8_VECTOR) ? OPTION_MASK_P8_VECTOR : 0)
+ | ((TARGET_P9_VECTOR) ? OPTION_MASK_P9_VECTOR : 0)
+ | ((TARGET_P9_MISC) ? OPTION_MASK_P9_MISC : 0)
+ | ((TARGET_MODULO) ? OPTION_MASK_MODULO : 0)
+ | ((TARGET_64BIT) ? MASK_64BIT : 0)
+ | ((TARGET_POWERPC64) ? MASK_POWERPC64 : 0)
+ | ((TARGET_CRYPTO) ? OPTION_MASK_CRYPTO : 0)
+ | ((TARGET_HTM) ? OPTION_MASK_HTM : 0)
+ | ((TARGET_DFP) ? OPTION_MASK_DFP : 0)
+ | ((TARGET_HARD_FLOAT) ? OPTION_MASK_SOFT_FLOAT : 0)
| ((TARGET_LONG_DOUBLE_128
&& TARGET_HARD_FLOAT
- && !TARGET_IEEEQUAD) ? RS6000_BTM_LDBL128 : 0)
- | ((TARGET_FLOAT128_TYPE) ? RS6000_BTM_FLOAT128 : 0)
- | ((TARGET_FLOAT128_HW) ? RS6000_BTM_FLOAT128_HW : 0)
- | ((TARGET_MMA) ? RS6000_BTM_MMA : 0)
- | ((TARGET_POWER10) ? RS6000_BTM_P10 : 0));
+ && !TARGET_IEEEQUAD) ? OPTION_MASK_MULTIPLE : 0)
+ | ((TARGET_FLOAT128_TYPE) ? OPTION_MASK_FLOAT128_KEYWORD : 0)
+ | ((TARGET_FLOAT128_HW) ? OPTION_MASK_FLOAT128_HW : 0)
+ | ((TARGET_MMA) ? OPTION_MASK_MMA : 0)
+ | ((TARGET_POWER10) ? OPTION_MASK_POWER10 : 0));
}
/* Implement TARGET_MD_ASM_ADJUST. All asm statements are considered
@@ -20732,11 +20732,12 @@ rs6000_darwin_file_start (void)
HOST_WIDE_INT if_set;
} mapping[] = {
{ "ppc64", "ppc64", MASK_64BIT },
- { "970", "ppc970", MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64 },
+ { "970", "ppc970", OPTION_MASK_PPC_GPOPT | OPTION_MASK_MFCRF \
+ | MASK_POWERPC64 },
{ "power4", "ppc970", 0 },
{ "G5", "ppc970", 0 },
{ "7450", "ppc7450", 0 },
- { "7400", "ppc7400", MASK_ALTIVEC },
+ { "7400", "ppc7400", OPTION_MASK_ALTIVEC },
{ "G4", "ppc7400", 0 },
{ "750", "ppc750", 0 },
{ "740", "ppc750", 0 },
@@ -24053,27 +24054,27 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
/* Builtin mask mapping for printing the flags. */
static struct rs6000_opt_mask const rs6000_builtin_mask_names[] =
{
- { "altivec", RS6000_BTM_ALTIVEC, false, false },
- { "vsx", RS6000_BTM_VSX, false, false },
- { "fre", RS6000_BTM_FRE, false, false },
- { "fres", RS6000_BTM_FRES, false, false },
- { "frsqrte", RS6000_BTM_FRSQRTE, false, false },
- { "frsqrtes", RS6000_BTM_FRSQRTES, false, false },
- { "popcntd", RS6000_BTM_POPCNTD, false, false },
- { "cell", RS6000_BTM_CELL, false, false },
- { "power8-vector", RS6000_BTM_P8_VECTOR, false, false },
- { "power9-vector", RS6000_BTM_P9_VECTOR, false, false },
- { "power9-misc", RS6000_BTM_P9_MISC, false, false },
- { "crypto", RS6000_BTM_CRYPTO, false, false },
- { "htm", RS6000_BTM_HTM, false, false },
- { "hard-dfp", RS6000_BTM_DFP, false, false },
- { "hard-float", RS6000_BTM_HARD_FLOAT, false, false },
- { "long-double-128", RS6000_BTM_LDBL128, false, false },
- { "powerpc64", RS6000_BTM_POWERPC64, false, false },
- { "float128", RS6000_BTM_FLOAT128, false, false },
- { "float128-hw", RS6000_BTM_FLOAT128_HW,false, false },
- { "mma", RS6000_BTM_MMA, false, false },
- { "power10", RS6000_BTM_P10, false, false },
+ { "altivec", OPTION_MASK_ALTIVEC, false, false },
+ { "vsx", OPTION_MASK_VSX, false, false },
+ { "fre", OPTION_MASK_POPCNTB, false, false },
+ { "fres", OPTION_MASK_PPC_GFXOPT, false, false },
+ { "frsqrte", OPTION_MASK_PPC_GFXOPT, false, false },
+ { "frsqrtes", OPTION_MASK_POPCNTB, false, false },
+ { "popcntd", OPTION_MASK_POPCNTD, false, false },
+ { "cell", OPTION_MASK_FPRND, false, false },
+ { "power8-vector", OPTION_MASK_P8_VECTOR, false, false },
+ { "power9-vector", OPTION_MASK_P9_VECTOR, false, false },
+ { "power9-misc", OPTION_MASK_P9_MISC, false, false },
+ { "crypto", OPTION_MASK_CRYPTO, false, false },
+ { "htm", OPTION_MASK_HTM, false, false },
+ { "hard-dfp", OPTION_MASK_DFP, false, false },
+ { "hard-float", OPTION_MASK_SOFT_FLOAT, false, false },
+ { "long-double-128", OPTION_MASK_MULTIPLE, false, false },
+ { "powerpc64", MASK_POWERPC64, false, false },
+ { "float128", OPTION_MASK_FLOAT128_KEYWORD, false, false },
+ { "float128-hw", OPTION_MASK_FLOAT128_HW,false, false },
+ { "mma", OPTION_MASK_MMA, false, false },
+ { "power10", OPTION_MASK_POWER10, false, false },
};
/* Option variables that we want to support inside attribute((target)) and
@@ -28305,13 +28306,13 @@ rs6000_invalid_conversion (const_tree fromtype, const_tree totype)
&& tomode != VOIDmode)
{
if (frommode == XOmode)
- return N_("invalid conversion from type %<* __vector_quad%>");
+ return N_("invalid conversion from type %<__vector_quad *%>");
if (tomode == XOmode)
- return N_("invalid conversion to type %<* __vector_quad%>");
+ return N_("invalid conversion to type %<__vector_quad *%>");
if (frommode == OOmode)
- return N_("invalid conversion from type %<* __vector_pair%>");
+ return N_("invalid conversion from type %<__vector_pair *%>");
if (tomode == OOmode)
- return N_("invalid conversion to type %<* __vector_pair%>");
+ return N_("invalid conversion to type %<__vector_pair *%>");
}
}
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 3b8941a..7d04556 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -279,7 +279,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
/* The option machinery will define this. */
#endif
-#define TARGET_DEFAULT (MASK_MULTIPLE)
+#define TARGET_DEFAULT (OPTION_MASK_MULTIPLE)
/* Define generic processor types based upon current deployment. */
#define PROCESSOR_COMMON PROCESSOR_PPC601
@@ -505,41 +505,11 @@ extern int rs6000_vector_align[];
&& (TARGET_P9_MINMAX || !flag_trapping_math))
/* In switching from using target_flags to using rs6000_isa_flags, the options
- machinery creates OPTION_MASK_<xxx> instead of MASK_<xxx>. For now map
- OPTION_MASK_<xxx> back into MASK_<xxx>. */
-#define MASK_ALTIVEC OPTION_MASK_ALTIVEC
-#define MASK_CMPB OPTION_MASK_CMPB
-#define MASK_CRYPTO OPTION_MASK_CRYPTO
-#define MASK_DFP OPTION_MASK_DFP
-#define MASK_DIRECT_MOVE OPTION_MASK_DIRECT_MOVE
-#define MASK_DLMZB OPTION_MASK_DLMZB
-#define MASK_EABI OPTION_MASK_EABI
-#define MASK_FLOAT128_KEYWORD OPTION_MASK_FLOAT128_KEYWORD
-#define MASK_FLOAT128_HW OPTION_MASK_FLOAT128_HW
-#define MASK_FPRND OPTION_MASK_FPRND
-#define MASK_P8_FUSION OPTION_MASK_P8_FUSION
-#define MASK_HARD_FLOAT OPTION_MASK_HARD_FLOAT
-#define MASK_HTM OPTION_MASK_HTM
-#define MASK_ISEL OPTION_MASK_ISEL
-#define MASK_MFCRF OPTION_MASK_MFCRF
-#define MASK_MMA OPTION_MASK_MMA
-#define MASK_MULHW OPTION_MASK_MULHW
-#define MASK_MULTIPLE OPTION_MASK_MULTIPLE
-#define MASK_NO_UPDATE OPTION_MASK_NO_UPDATE
-#define MASK_P8_VECTOR OPTION_MASK_P8_VECTOR
-#define MASK_P9_VECTOR OPTION_MASK_P9_VECTOR
-#define MASK_P9_MISC OPTION_MASK_P9_MISC
-#define MASK_POPCNTB OPTION_MASK_POPCNTB
-#define MASK_POPCNTD OPTION_MASK_POPCNTD
-#define MASK_PPC_GFXOPT OPTION_MASK_PPC_GFXOPT
-#define MASK_PPC_GPOPT OPTION_MASK_PPC_GPOPT
-#define MASK_RECIP_PRECISION OPTION_MASK_RECIP_PRECISION
-#define MASK_SOFT_FLOAT OPTION_MASK_SOFT_FLOAT
+ machinery creates OPTION_MASK_<xxx> instead of MASK_<xxx>. The MASK_<xxxx>
+ options that have not yet been replaced by their OPTION_MASK_<xxx>
+ equivalents are defined here. */
+
#define MASK_STRICT_ALIGN OPTION_MASK_STRICT_ALIGN
-#define MASK_UPDATE OPTION_MASK_UPDATE
-#define MASK_VSX OPTION_MASK_VSX
-#define MASK_POWER10 OPTION_MASK_POWER10
-#define MASK_P10_FUSION OPTION_MASK_P10_FUSION
#ifndef IN_LIBGCC2
#define MASK_POWERPC64 OPTION_MASK_POWERPC64
@@ -553,19 +523,6 @@ extern int rs6000_vector_align[];
#define MASK_LITTLE_ENDIAN OPTION_MASK_LITTLE_ENDIAN
#endif
-#ifdef TARGET_REGNAMES
-#define MASK_REGNAMES OPTION_MASK_REGNAMES
-#endif
-
-#ifdef TARGET_PROTOTYPE
-#define MASK_PROTOTYPE OPTION_MASK_PROTOTYPE
-#endif
-
-#ifdef TARGET_MODULO
-#define RS6000_BTM_MODULO OPTION_MASK_MODULO
-#endif
-
-
/* For power systems, we want to enable Altivec and VSX builtins even if the
user did not use -maltivec or -mvsx to allow the builtins to be used inside
of #pragma GCC target or the target attribute to change the code level for a
@@ -2248,58 +2205,6 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
/* General flags. */
extern int frame_pointer_needed;
-
-/* Builtin targets. For now, we reuse the masks for those options that are in
- target flags, and pick a random bit for ldbl128, which isn't in
- target_flags. */
-#define RS6000_BTM_ALWAYS 0 /* Always enabled. */
-#define RS6000_BTM_ALTIVEC MASK_ALTIVEC /* VMX/altivec vectors. */
-#define RS6000_BTM_CMPB MASK_CMPB /* ISA 2.05: compare bytes. */
-#define RS6000_BTM_VSX MASK_VSX /* VSX (vector/scalar). */
-#define RS6000_BTM_P8_VECTOR MASK_P8_VECTOR /* ISA 2.07 vector. */
-#define RS6000_BTM_P9_VECTOR MASK_P9_VECTOR /* ISA 3.0 vector. */
-#define RS6000_BTM_P9_MISC MASK_P9_MISC /* ISA 3.0 misc. non-vector */
-#define RS6000_BTM_CRYPTO MASK_CRYPTO /* crypto funcs. */
-#define RS6000_BTM_HTM MASK_HTM /* hardware TM funcs. */
-#define RS6000_BTM_FRE MASK_POPCNTB /* FRE instruction. */
-#define RS6000_BTM_FRES MASK_PPC_GFXOPT /* FRES instruction. */
-#define RS6000_BTM_FRSQRTE MASK_PPC_GFXOPT /* FRSQRTE instruction. */
-#define RS6000_BTM_FRSQRTES MASK_POPCNTB /* FRSQRTES instruction. */
-#define RS6000_BTM_POPCNTD MASK_POPCNTD /* Target supports ISA 2.06. */
-#define RS6000_BTM_CELL MASK_FPRND /* Target is cell powerpc. */
-#define RS6000_BTM_DFP MASK_DFP /* Decimal floating point. */
-#define RS6000_BTM_HARD_FLOAT MASK_SOFT_FLOAT /* Hardware floating point. */
-#define RS6000_BTM_LDBL128 MASK_MULTIPLE /* 128-bit long double. */
-#define RS6000_BTM_64BIT MASK_64BIT /* 64-bit addressing. */
-#define RS6000_BTM_POWERPC64 MASK_POWERPC64 /* 64-bit registers. */
-#define RS6000_BTM_FLOAT128 MASK_FLOAT128_KEYWORD /* IEEE 128-bit float. */
-#define RS6000_BTM_FLOAT128_HW MASK_FLOAT128_HW /* IEEE 128-bit float h/w. */
-#define RS6000_BTM_MMA MASK_MMA /* ISA 3.1 MMA. */
-#define RS6000_BTM_P10 MASK_POWER10
-
-#define RS6000_BTM_COMMON (RS6000_BTM_ALTIVEC \
- | RS6000_BTM_VSX \
- | RS6000_BTM_P8_VECTOR \
- | RS6000_BTM_P9_VECTOR \
- | RS6000_BTM_P9_MISC \
- | RS6000_BTM_MODULO \
- | RS6000_BTM_CRYPTO \
- | RS6000_BTM_FRE \
- | RS6000_BTM_FRES \
- | RS6000_BTM_FRSQRTE \
- | RS6000_BTM_FRSQRTES \
- | RS6000_BTM_HTM \
- | RS6000_BTM_POPCNTD \
- | RS6000_BTM_CELL \
- | RS6000_BTM_DFP \
- | RS6000_BTM_HARD_FLOAT \
- | RS6000_BTM_LDBL128 \
- | RS6000_BTM_POWERPC64 \
- | RS6000_BTM_FLOAT128 \
- | RS6000_BTM_FLOAT128_HW \
- | RS6000_BTM_MMA \
- | RS6000_BTM_P10)
-
enum rs6000_builtin_type_index
{
RS6000_BTI_NOT_OPAQUE,
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index c55ee7e..1367a2c 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -4179,7 +4179,8 @@
(match_operand:GPR 4 "const_int_operand" "n"))
(ashift:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "n"))))]
- "INTVAL (operands[2]) == exact_log2 (UINTVAL (operands[4]) + 1)"
+ "INTVAL (operands[2]) > 0
+ && INTVAL (operands[2]) == exact_log2 (UINTVAL (operands[4]) + 1)"
{
if (<MODE>mode == SImode)
return "rlwimi %0,%1,%h2,0,31-%h2";
@@ -4188,6 +4189,24 @@
}
[(set_attr "type" "insert")])
+; Canonicalize the PLUS and XOR forms to IOR for rotl<mode>3_insert_3
+(define_code_iterator plus_xor [plus xor])
+
+(define_insn_and_split "*rotl<mode>3_insert_3_<code>"
+ [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
+ (plus_xor:GPR
+ (and:GPR (match_operand:GPR 3 "gpc_reg_operand" "0")
+ (match_operand:GPR 4 "const_int_operand" "n"))
+ (ashift:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "n"))))]
+ "INTVAL (operands[2]) > 0
+ && INTVAL (operands[2]) == exact_log2 (UINTVAL (operands[4]) + 1)"
+ "#"
+ "&& 1"
+ [(set (match_dup 0)
+ (ior:GPR (and:GPR (match_dup 3) (match_dup 4))
+ (ashift:GPR (match_dup 1) (match_dup 2))))])
+
(define_code_iterator plus_ior_xor [plus ior xor])
(define_split
@@ -4206,23 +4225,14 @@
operands[4] = GEN_INT ((HOST_WIDE_INT_1U << INTVAL (operands[2])) - 1);
})
-(define_insn "*rotl<mode>3_insert_4"
- [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
- (ior:GPR (and:GPR (match_operand:GPR 3 "gpc_reg_operand" "0")
- (match_operand:GPR 4 "const_int_operand" "n"))
- (lshiftrt:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
- (match_operand:SI 2 "const_int_operand" "n"))))]
- "<MODE>mode == SImode &&
- GET_MODE_PRECISION (<MODE>mode)
- == INTVAL (operands[2]) + exact_log2 (-UINTVAL (operands[4]))"
-{
- operands[2] = GEN_INT (GET_MODE_PRECISION (<MODE>mode)
- - INTVAL (operands[2]));
- if (<MODE>mode == SImode)
- return "rlwimi %0,%1,%h2,32-%h2,31";
- else
- return "rldimi %0,%1,%H2,64-%H2";
-}
+(define_insn "*rotlsi3_insert_4"
+ [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
+ (ior:SI (and:SI (match_operand:SI 3 "gpc_reg_operand" "0")
+ (match_operand:SI 4 "const_int_operand" "n"))
+ (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "n"))))]
+ "INTVAL (operands[2]) + exact_log2 (-UINTVAL (operands[4])) == 32"
+ "rlwimi %0,%1,32-%h2,%h2,31"
[(set_attr "type" "insert")])
(define_insn "*rotlsi3_insert_5"
diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h
index 4f6d116..6f11de6 100644
--- a/gcc/config/rs6000/vxworks.h
+++ b/gcc/config/rs6000/vxworks.h
@@ -227,7 +227,7 @@ along with GCC; see the file COPYING3. If not see
#define LINK_SPEC VXWORKS_LINK_SPEC " " VXWORKS_RELAX_LINK_SPEC
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_EABI | MASK_STRICT_ALIGN)
+#define TARGET_DEFAULT (OPTION_MASK_EABI | MASK_STRICT_ALIGN)
#undef PROCESSOR_DEFAULT
#define PROCESSOR_DEFAULT PROCESSOR_PPC604
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index 444b1ec..5aaf76a 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -7468,7 +7468,7 @@ s390_expand_atomic (machine_mode mode, enum rtx_code code,
case SET:
if (ac.aligned && MEM_P (val))
store_bit_field (new_rtx, GET_MODE_BITSIZE (mode), 0,
- 0, 0, SImode, val, false);
+ 0, 0, SImode, val, false, false);
else
{
new_rtx = expand_simple_binop (SImode, AND, new_rtx, ac.modemaski,
diff --git a/gcc/config/sh/sh.cc b/gcc/config/sh/sh.cc
index 03e1c04..9bee618 100644
--- a/gcc/config/sh/sh.cc
+++ b/gcc/config/sh/sh.cc
@@ -2178,7 +2178,7 @@ expand_cbranchdi4 (rtx *operands, enum rtx_code comparison)
&& prob.to_reg_br_prob_base () >= (int) (REG_BR_PROB_BASE * 3 / 8U)
&& prob.to_reg_br_prob_base () <= (int) (REG_BR_PROB_BASE * 5 / 8U))
{
- msw_taken_prob = prob.apply_scale (1, 2);
+ msw_taken_prob = prob / 2;
msw_skip_prob = rev_prob.apply_scale (REG_BR_PROB_BASE,
rev_prob.to_reg_br_prob_base ()
+ REG_BR_PROB_BASE);
diff --git a/gcc/config/tilegx/constraints.md b/gcc/config/tilegx/constraints.md
deleted file mode 100644
index dee57d8..0000000
--- a/gcc/config/tilegx/constraints.md
+++ /dev/null
@@ -1,115 +0,0 @@
-;; Constraint definitions for Tilera TILE-Gx.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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_register_constraint "R00" "R0_REGS" "r0")
-(define_register_constraint "R01" "R1_REGS" "r1")
-(define_register_constraint "R02" "R2_REGS" "r2")
-(define_register_constraint "R03" "R3_REGS" "r3")
-(define_register_constraint "R04" "R4_REGS" "r4")
-(define_register_constraint "R05" "R5_REGS" "r5")
-(define_register_constraint "R06" "R6_REGS" "r6")
-(define_register_constraint "R07" "R7_REGS" "r7")
-(define_register_constraint "R08" "R8_REGS" "r8")
-(define_register_constraint "R09" "R9_REGS" "r9")
-(define_register_constraint "R10" "R10_REGS" "r10")
-
-(define_constraint "I"
- "A signed 8 bit constant"
- (and (match_code "const_int")
- (match_test "ival >= -128 && ival <= 127")))
-
-(define_constraint "J"
- "Signed 16-bit integer constant"
- (and (match_code "const_int")
- (match_test "ival >= -32768 && ival <= 32767")))
-
-(define_constraint "K"
- "Unsigned 16-bit integer constant"
- (and (match_code "const_int")
- (match_test "(ival >= 0 && ival <= 65535)")))
-
-(define_constraint "L"
- "Integer constant that fits in one signed byte when incremented"
- (and (match_code "const_int")
- (match_test "ival >= -129 && ival <= 126")))
-
-(define_constraint "M"
- "A bit mask suitable for 'bfins'"
- (and (match_code "const_int")
- (match_test "tilegx_bitfield_operand_p (ival, NULL, NULL)")))
-
-(define_constraint "N"
- "Integer constant that is a byte tiled out eight times"
- (and (match_code "const_int")
- (match_test "(ival == (ival & 0xFF) * 0x0101010101010101LL)")))
-
-(define_constraint "O"
- "The integer zero constant"
- (and (match_code "const_int")
- (match_test "ival == 0")))
-
-(define_constraint "P"
- "Integer constant that is a sign-extended byte tiled out as four shorts"
- (and (match_code "const_int")
- (match_test "(ival
- == ((trunc_int_for_mode (ival, QImode) & 0xFFFF)
- * 0x0001000100010001LL))")))
-
-(define_constraint "Q"
- "Integer constant that fits in one signed byte when incremented, but not -1"
- (and (match_code "const_int")
- (match_test "ival >= -129 && ival <= 126 && ival != -1")))
-
-(define_constraint "S"
- "Integer constant that has all 1 bits consecutive and starting at bit 0"
- (and (match_code "const_int")
- (match_test "ival != 0 && (ival & (ival + 1)) == 0")))
-
-(define_constraint "T"
- "An unspec wrapper for a symbolc operand"
- (ior (match_operand 0 "const_last_symbolic_operand")
- (match_operand 0 "const_symbolic_operand")))
-
-(define_memory_constraint "U"
- "Non-auto-incrementing memory"
- (and (match_code "mem")
- (match_test "GET_RTX_CLASS (GET_CODE (XEXP (op, 0))) != RTX_AUTOINC")))
-
-(define_constraint "W"
- "An 8-element vector constant with identical elements"
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 8")
- (match_test "const_vec_duplicate_p (op)")))
-
-(define_constraint "Y"
- "A 4-element vector constant with identical elements"
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 4")
- (match_test "const_vec_duplicate_p (op)")))
-
-(define_constraint "Z0"
- "The integer constant 0xffffffff"
- (and (match_code "const_int")
- (match_test "ival == 0xffffffff")))
-
-(define_constraint "Z1"
- "The integer constant 0xffffffff00000000"
- (and (match_code "const_int")
- (match_test "ival == (HOST_WIDE_INT)0xffffffff00000000LL")))
diff --git a/gcc/config/tilegx/feedback.h b/gcc/config/tilegx/feedback.h
deleted file mode 100644
index 34e48ed..0000000
--- a/gcc/config/tilegx/feedback.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _FEEDBACK_H
-#define _FEEDBACK_H 1
-
-#ifdef __ASSEMBLER__
-
-/* Stub defines for feedback instrumentation. */
-#define FEEDBACK_ENTER_EXPLICIT(FUNCNAME, SECNAME, SIZE)
-#define FEEDBACK_ENTER(FUNCNAME)
-#define FEEDBACK_REENTER(FUNCNAME)
-#define FEEDBACK_ENTRY(FUNCNAME, SECNAME, SIZE)
-
-#endif /* __ASSEMBLER__ */
-
-#endif /* _FEEDBACK_H */
diff --git a/gcc/config/tilegx/linux.h b/gcc/config/tilegx/linux.h
deleted file mode 100644
index aae1f95..0000000
--- a/gcc/config/tilegx/linux.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Definitions for TILE-Gx running Linux-based GNU systems with ELF.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#undef CPP_SPEC
-#define CPP_SPEC "%{pthread:-D_REENTRANT}"
-
-#undef ASM_SPEC
-#define ASM_SPEC "%(endian_spec) %{m32:--32} %{m64:--64}"
-
-#undef LINK_SPEC
-#define LINK_SPEC "%(endian_spec) \
- %{m64:-m elf64tilegx} %{m32:-m elf32tilegx} \
- %{shared:-shared} \
- %{!shared: \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- -dynamic-linker \
- %{ m32: /lib32/ld.so.1} \
- %{!m32: /lib/ld.so.1}} \
- %{static:-static}}"
-
-#define MULTILIB_DEFAULTS { "m64" }
-
-#define NO_PROFILE_COUNTERS 1
-
-#undef MCOUNT_NAME
-#define MCOUNT_NAME "__mcount"
-
-#undef NEED_INDICATE_EXEC_STACK
-#define NEED_INDICATE_EXEC_STACK 1
-
-#ifdef TARGET_LIBC_PROVIDES_SSP
-/* TILE-Gx glibc provides __stack_chk_guard two pointer-size words before
- tp. */
-#define TARGET_THREAD_SSP_OFFSET (-2 * GET_MODE_SIZE (ptr_mode))
-#endif
-
-/* For __clear_cache in libgcc2.c. */
-#ifdef IN_LIBGCC2
-
-/* Use the minimum page size of 4K. Alternatively we can call
- getpagesize() but it introduces a libc dependence.
- See Linux arch/tile/include/uapi/arch/icache.h for more commentary. */
-#undef CLEAR_INSN_CACHE
-#define CLEAR_INSN_CACHE(BEG, END) \
-{ \
- long size = (long) (END) - (long) (BEG); \
- if (size) \
- { \
- const char *p = (const char *) ((unsigned long) (BEG) & -64L); \
- const char *end = p + (size < 4096 ? size : 4096) - 1; \
- __insn_mf (); \
- for (; p <= end; p += 64) \
- __insn_icoh (p); \
- __insn_drain (); \
- } \
-}
-
-#else
-
-/* define CLEAR_INSN_CACHE so that gcc knows to expand __builtin__clear_cache
- to the libraray call. */
-#undef CLEAR_INSN_CACHE
-#define CLEAR_INSN_CACHE 1
-
-#endif
diff --git a/gcc/config/tilegx/mul-tables.cc b/gcc/config/tilegx/mul-tables.cc
deleted file mode 100644
index 67f85ce..0000000
--- a/gcc/config/tilegx/mul-tables.cc
+++ /dev/null
@@ -1,27249 +0,0 @@
-/* Constant multiply table for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-/* Note this file is auto-generated from gen-mul-tables.cc.
- Make any required changes there. */
-
-#define IN_TARGET_CODE 1
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "backend.h"
-#include "rtl.h"
-#include "expmed.h"
-#include "tilegx-multiply.h"
-
-const enum insn_code tilegx_multiply_insn_seq_decode_opcode[] = {
- CODE_FOR_nothing /* must be first */ ,
- CODE_FOR_adddi3,
- CODE_FOR_subdi3,
- CODE_FOR_insn_shl1add,
- CODE_FOR_insn_shl2add,
- CODE_FOR_insn_shl3add,
- CODE_FOR_ashldi3
-};
-
-const struct tilegx_multiply_insn_seq tilegx_multiply_insn_seq_table[] = {
- {-9223372036854775807ll - 1 /* 0x8000000000000000 */ ,
- {{6, 1, 63}} /* shli r2, r1, 63 */
- },
- {-9223372036854775807ll /* 0x8000000000000001 */ ,
- {{6, 1, 63}, /* shli r2, r1, 63 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {-9223372036854775806ll /* 0x8000000000000002 */ ,
- {{6, 1, 63}, /* shli r2, r1, 63 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {-9223372036854775805ll /* 0x8000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775804ll /* 0x8000000000000004 */ ,
- {{6, 1, 63}, /* shli r2, r1, 63 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {-9223372036854775803ll /* 0x8000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775802ll /* 0x8000000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-9223372036854775801ll /* 0x8000000000000007 */ ,
- {{6, 1, 63}, /* shli r2, r1, 63 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {-9223372036854775800ll /* 0x8000000000000008 */ ,
- {{6, 1, 63}, /* shli r2, r1, 63 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {-9223372036854775799ll /* 0x8000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775798ll /* 0x800000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-9223372036854775792ll /* 0x8000000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775776ll /* 0x8000000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775744ll /* 0x8000000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775680ll /* 0x8000000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775552ll /* 0x8000000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854775296ll /* 0x8000000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854774784ll /* 0x8000000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854773760ll /* 0x8000000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854771712ll /* 0x8000000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854767616ll /* 0x8000000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854759424ll /* 0x8000000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854743040ll /* 0x8000000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854710272ll /* 0x8000000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854644736ll /* 0x8000000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854513664ll /* 0x8000000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036854251520ll /* 0x8000000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036853727232ll /* 0x8000000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036852678656ll /* 0x8000000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036850581504ll /* 0x8000000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036846387200ll /* 0x8000000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036837998592ll /* 0x8000000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036821221376ll /* 0x8000000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036787666944ll /* 0x8000000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036720558080ll /* 0x8000000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036586340352ll /* 0x8000000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372036317904896ll /* 0x8000000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372035781033984ll /* 0x8000000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372034707292160ll /* 0x8000000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372032559808512ll /* 0x8000000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372028264841216ll /* 0x8000000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372019674906624ll /* 0x8000000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223372002495037440ll /* 0x8000000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223371968135299072ll /* 0x8000001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223371899415822336ll /* 0x8000002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223371761976868864ll /* 0x8000004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223371487098961920ll /* 0x8000008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223370937343148032ll /* 0x8000010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223369837831520256ll /* 0x8000020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223367638808264704ll /* 0x8000040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223363240761753600ll /* 0x8000080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223354444668731392ll /* 0x8000100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223336852482686976ll /* 0x8000200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223301668110598144ll /* 0x8000400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223231299366420480ll /* 0x8000800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9223090561878065152ll /* 0x8001000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9222809086901354496ll /* 0x8002000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9222246136947933184ll /* 0x8004000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9221120237041090560ll /* 0x8008000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9218868437227405312ll /* 0x8010000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9214364837600034816ll /* 0x8020000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9205357638345293824ll /* 0x8040000000000000 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9187343239835811840ll /* 0x8080000000000000 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9151314442816847872ll /* 0x8100000000000000 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-9079256848778919936ll /* 0x8200000000000000 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-8935141660703064064ll /* 0x8400000000000000 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-8646911284551352320ll /* 0x8800000000000000 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-8070450532247928832ll /* 0x9000000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 60}} /* shli r3, r2, 60 */
- },
- {-6917529027641081857ll /* 0x9fffffffffffffff */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 61}, /* shli r3, r2, 61 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {-6917529027641081856ll /* 0xa000000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 61}} /* shli r3, r2, 61 */
- },
- {-4611686018427387912ll /* 0xbffffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 62}, /* shli r3, r2, 62 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-4611686018427387911ll /* 0xbffffffffffffff9 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4611686018427387908ll /* 0xbffffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 62}, /* shli r3, r2, 62 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-4611686018427387907ll /* 0xbffffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 62}, /* shli r3, r2, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {-4611686018427387906ll /* 0xbffffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 62}, /* shli r3, r2, 62 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4611686018427387905ll /* 0xbfffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4611686018427387904ll /* 0xc000000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 62}} /* shli r3, r2, 62 */
- },
- {-4611686018427387903ll /* 0xc000000000000001 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4611686018427387902ll /* 0xc000000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4611686018427387901ll /* 0xc000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4611686018427387900ll /* 0xc000000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4611686018427387899ll /* 0xc000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4611686018427387898ll /* 0xc000000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 62}, /* shli r3, r2, 62 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4611686018427387896ll /* 0xc000000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4611686018427387895ll /* 0xc000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3458764513820540929ll /* 0xcfffffffffffffff */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693960ll /* 0xdffffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 61}, /* shli r3, r2, 61 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-2305843009213693959ll /* 0xdffffffffffffff9 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2305843009213693956ll /* 0xdffffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 61}, /* shli r3, r2, 61 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-2305843009213693955ll /* 0xdffffffffffffffd */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2305843009213693954ll /* 0xdffffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 61}, /* shli r3, r2, 61 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-2305843009213693953ll /* 0xdfffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693952ll /* 0xe000000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 61}} /* shli r3, r2, 61 */
- },
- {-2305843009213693951ll /* 0xe000000000000001 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2305843009213693950ll /* 0xe000000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693949ll /* 0xe000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693948ll /* 0xe000000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693947ll /* 0xe000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693944ll /* 0xe000000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2305843009213693943ll /* 0xe000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1729382256910270465ll /* 0xe7ffffffffffffff */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846984ll /* 0xeffffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 60}, /* shli r3, r2, 60 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-1152921504606846983ll /* 0xeffffffffffffff9 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1152921504606846980ll /* 0xeffffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 60}, /* shli r3, r2, 60 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-1152921504606846979ll /* 0xeffffffffffffffd */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1152921504606846978ll /* 0xeffffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 60}, /* shli r3, r2, 60 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-1152921504606846977ll /* 0xefffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846976ll /* 0xf000000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 60}} /* shli r3, r2, 60 */
- },
- {-1152921504606846975ll /* 0xf000000000000001 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1152921504606846974ll /* 0xf000000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846973ll /* 0xf000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846972ll /* 0xf000000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846971ll /* 0xf000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846968ll /* 0xf000000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1152921504606846967ll /* 0xf000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-864691128455135233ll /* 0xf3ffffffffffffff */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423496ll /* 0xf7fffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 59}, /* shli r3, r2, 59 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-576460752303423495ll /* 0xf7fffffffffffff9 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-576460752303423492ll /* 0xf7fffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 59}, /* shli r3, r2, 59 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-576460752303423491ll /* 0xf7fffffffffffffd */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-576460752303423490ll /* 0xf7fffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 59}, /* shli r3, r2, 59 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-576460752303423489ll /* 0xf7ffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423488ll /* 0xf800000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 59}} /* shli r3, r2, 59 */
- },
- {-576460752303423487ll /* 0xf800000000000001 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-576460752303423486ll /* 0xf800000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423485ll /* 0xf800000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423484ll /* 0xf800000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423483ll /* 0xf800000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423480ll /* 0xf800000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-576460752303423479ll /* 0xf800000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-432345564227567617ll /* 0xf9ffffffffffffff */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711752ll /* 0xfbfffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 58}, /* shli r3, r2, 58 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-288230376151711751ll /* 0xfbfffffffffffff9 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-288230376151711748ll /* 0xfbfffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 58}, /* shli r3, r2, 58 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-288230376151711747ll /* 0xfbfffffffffffffd */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-288230376151711746ll /* 0xfbfffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 58}, /* shli r3, r2, 58 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-288230376151711745ll /* 0xfbffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711744ll /* 0xfc00000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 58}} /* shli r3, r2, 58 */
- },
- {-288230376151711743ll /* 0xfc00000000000001 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-288230376151711742ll /* 0xfc00000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711741ll /* 0xfc00000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711740ll /* 0xfc00000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711739ll /* 0xfc00000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711736ll /* 0xfc00000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-288230376151711735ll /* 0xfc00000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-216172782113783809ll /* 0xfcffffffffffffff */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855880ll /* 0xfdfffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 57}, /* shli r3, r2, 57 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-144115188075855879ll /* 0xfdfffffffffffff9 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-144115188075855876ll /* 0xfdfffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 57}, /* shli r3, r2, 57 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-144115188075855875ll /* 0xfdfffffffffffffd */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-144115188075855874ll /* 0xfdfffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 57}, /* shli r3, r2, 57 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-144115188075855873ll /* 0xfdffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855872ll /* 0xfe00000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 57}} /* shli r3, r2, 57 */
- },
- {-144115188075855871ll /* 0xfe00000000000001 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-144115188075855870ll /* 0xfe00000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855869ll /* 0xfe00000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855868ll /* 0xfe00000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855867ll /* 0xfe00000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855864ll /* 0xfe00000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-144115188075855863ll /* 0xfe00000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-108086391056891905ll /* 0xfe7fffffffffffff */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927944ll /* 0xfefffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 56}, /* shli r3, r2, 56 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-72057594037927943ll /* 0xfefffffffffffff9 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-72057594037927940ll /* 0xfefffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 56}, /* shli r3, r2, 56 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-72057594037927939ll /* 0xfefffffffffffffd */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-72057594037927938ll /* 0xfefffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 56}, /* shli r3, r2, 56 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-72057594037927937ll /* 0xfeffffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927936ll /* 0xff00000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 56}} /* shli r3, r2, 56 */
- },
- {-72057594037927935ll /* 0xff00000000000001 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-72057594037927934ll /* 0xff00000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927933ll /* 0xff00000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927932ll /* 0xff00000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927931ll /* 0xff00000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927928ll /* 0xff00000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-72057594037927927ll /* 0xff00000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-54043195528445953ll /* 0xff3fffffffffffff */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963976ll /* 0xff7ffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 55}, /* shli r3, r2, 55 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-36028797018963975ll /* 0xff7ffffffffffff9 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-36028797018963972ll /* 0xff7ffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 55}, /* shli r3, r2, 55 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-36028797018963971ll /* 0xff7ffffffffffffd */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-36028797018963970ll /* 0xff7ffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 55}, /* shli r3, r2, 55 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-36028797018963969ll /* 0xff7fffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963968ll /* 0xff80000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 55}} /* shli r3, r2, 55 */
- },
- {-36028797018963967ll /* 0xff80000000000001 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-36028797018963966ll /* 0xff80000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963965ll /* 0xff80000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963964ll /* 0xff80000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963963ll /* 0xff80000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963960ll /* 0xff80000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-36028797018963959ll /* 0xff80000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-27021597764222977ll /* 0xff9fffffffffffff */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481992ll /* 0xffbffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 54}, /* shli r3, r2, 54 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-18014398509481991ll /* 0xffbffffffffffff9 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-18014398509481988ll /* 0xffbffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 54}, /* shli r3, r2, 54 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-18014398509481987ll /* 0xffbffffffffffffd */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-18014398509481986ll /* 0xffbffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 54}, /* shli r3, r2, 54 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-18014398509481985ll /* 0xffbfffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481984ll /* 0xffc0000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 54}} /* shli r3, r2, 54 */
- },
- {-18014398509481983ll /* 0xffc0000000000001 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-18014398509481982ll /* 0xffc0000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481981ll /* 0xffc0000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481980ll /* 0xffc0000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481979ll /* 0xffc0000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481976ll /* 0xffc0000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-18014398509481975ll /* 0xffc0000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-13510798882111489ll /* 0xffcfffffffffffff */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254741000ll /* 0xffdffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 53}, /* shli r3, r2, 53 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-9007199254740999ll /* 0xffdffffffffffff9 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-9007199254740996ll /* 0xffdffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 53}, /* shli r3, r2, 53 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-9007199254740995ll /* 0xffdffffffffffffd */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-9007199254740994ll /* 0xffdffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 53}, /* shli r3, r2, 53 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-9007199254740993ll /* 0xffdfffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254740992ll /* 0xffe0000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 53}} /* shli r3, r2, 53 */
- },
- {-9007199254740991ll /* 0xffe0000000000001 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-9007199254740990ll /* 0xffe0000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254740989ll /* 0xffe0000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254740988ll /* 0xffe0000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254740987ll /* 0xffe0000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254740984ll /* 0xffe0000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9007199254740983ll /* 0xffe0000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-6755399441055745ll /* 0xffe7ffffffffffff */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370504ll /* 0xffeffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 52}, /* shli r3, r2, 52 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-4503599627370503ll /* 0xffeffffffffffff9 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4503599627370500ll /* 0xffeffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 52}, /* shli r3, r2, 52 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-4503599627370499ll /* 0xffeffffffffffffd */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4503599627370498ll /* 0xffeffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 52}, /* shli r3, r2, 52 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4503599627370497ll /* 0xffefffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370496ll /* 0xfff0000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 52}} /* shli r3, r2, 52 */
- },
- {-4503599627370495ll /* 0xfff0000000000001 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4503599627370494ll /* 0xfff0000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370493ll /* 0xfff0000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370492ll /* 0xfff0000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370491ll /* 0xfff0000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370488ll /* 0xfff0000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4503599627370487ll /* 0xfff0000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3377699720527873ll /* 0xfff3ffffffffffff */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685256ll /* 0xfff7fffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 51}, /* shli r3, r2, 51 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-2251799813685255ll /* 0xfff7fffffffffff9 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2251799813685252ll /* 0xfff7fffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 51}, /* shli r3, r2, 51 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-2251799813685251ll /* 0xfff7fffffffffffd */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2251799813685250ll /* 0xfff7fffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 51}, /* shli r3, r2, 51 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-2251799813685249ll /* 0xfff7ffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685248ll /* 0xfff8000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 51}} /* shli r3, r2, 51 */
- },
- {-2251799813685247ll /* 0xfff8000000000001 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2251799813685246ll /* 0xfff8000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685245ll /* 0xfff8000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685244ll /* 0xfff8000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685243ll /* 0xfff8000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685240ll /* 0xfff8000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2251799813685239ll /* 0xfff8000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1688849860263937ll /* 0xfff9ffffffffffff */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842632ll /* 0xfffbfffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 50}, /* shli r3, r2, 50 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-1125899906842631ll /* 0xfffbfffffffffff9 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1125899906842628ll /* 0xfffbfffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 50}, /* shli r3, r2, 50 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-1125899906842627ll /* 0xfffbfffffffffffd */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1125899906842626ll /* 0xfffbfffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 50}, /* shli r3, r2, 50 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-1125899906842625ll /* 0xfffbffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842624ll /* 0xfffc000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 50}} /* shli r3, r2, 50 */
- },
- {-1125899906842623ll /* 0xfffc000000000001 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1125899906842622ll /* 0xfffc000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842621ll /* 0xfffc000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842620ll /* 0xfffc000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842619ll /* 0xfffc000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842616ll /* 0xfffc000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1125899906842615ll /* 0xfffc000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-844424930131969ll /* 0xfffcffffffffffff */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421320ll /* 0xfffdfffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 49}, /* shli r3, r2, 49 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-562949953421319ll /* 0xfffdfffffffffff9 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-562949953421316ll /* 0xfffdfffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 49}, /* shli r3, r2, 49 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-562949953421315ll /* 0xfffdfffffffffffd */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-562949953421314ll /* 0xfffdfffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 49}, /* shli r3, r2, 49 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-562949953421313ll /* 0xfffdffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421312ll /* 0xfffe000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 49}} /* shli r3, r2, 49 */
- },
- {-562949953421311ll /* 0xfffe000000000001 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-562949953421310ll /* 0xfffe000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421309ll /* 0xfffe000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421308ll /* 0xfffe000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421307ll /* 0xfffe000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421304ll /* 0xfffe000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-562949953421303ll /* 0xfffe000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-422212465065985ll /* 0xfffe7fffffffffff */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710664ll /* 0xfffefffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 48}, /* shli r3, r2, 48 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-281474976710663ll /* 0xfffefffffffffff9 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-281474976710660ll /* 0xfffefffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 48}, /* shli r3, r2, 48 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-281474976710659ll /* 0xfffefffffffffffd */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-281474976710658ll /* 0xfffefffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 48}, /* shli r3, r2, 48 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-281474976710657ll /* 0xfffeffffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710656ll /* 0xffff000000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 48}} /* shli r3, r2, 48 */
- },
- {-281474976710655ll /* 0xffff000000000001 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-281474976710654ll /* 0xffff000000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710653ll /* 0xffff000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710652ll /* 0xffff000000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710651ll /* 0xffff000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710648ll /* 0xffff000000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-281474976710647ll /* 0xffff000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-211106232532993ll /* 0xffff3fffffffffff */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355336ll /* 0xffff7ffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 47}, /* shli r3, r2, 47 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-140737488355335ll /* 0xffff7ffffffffff9 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-140737488355332ll /* 0xffff7ffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 47}, /* shli r3, r2, 47 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-140737488355331ll /* 0xffff7ffffffffffd */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-140737488355330ll /* 0xffff7ffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 47}, /* shli r3, r2, 47 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-140737488355329ll /* 0xffff7fffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355328ll /* 0xffff800000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 47}} /* shli r3, r2, 47 */
- },
- {-140737488355327ll /* 0xffff800000000001 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-140737488355326ll /* 0xffff800000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355325ll /* 0xffff800000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355324ll /* 0xffff800000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355323ll /* 0xffff800000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355320ll /* 0xffff800000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-140737488355319ll /* 0xffff800000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-105553116266497ll /* 0xffff9fffffffffff */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177672ll /* 0xffffbffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 46}, /* shli r3, r2, 46 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-70368744177671ll /* 0xffffbffffffffff9 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-70368744177668ll /* 0xffffbffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 46}, /* shli r3, r2, 46 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-70368744177667ll /* 0xffffbffffffffffd */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-70368744177666ll /* 0xffffbffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 46}, /* shli r3, r2, 46 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-70368744177665ll /* 0xffffbfffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177664ll /* 0xffffc00000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 46}} /* shli r3, r2, 46 */
- },
- {-70368744177663ll /* 0xffffc00000000001 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-70368744177662ll /* 0xffffc00000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177661ll /* 0xffffc00000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177660ll /* 0xffffc00000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177659ll /* 0xffffc00000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177656ll /* 0xffffc00000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-70368744177655ll /* 0xffffc00000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-52776558133249ll /* 0xffffcfffffffffff */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088840ll /* 0xffffdffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 45}, /* shli r3, r2, 45 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-35184372088839ll /* 0xffffdffffffffff9 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-35184372088836ll /* 0xffffdffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 45}, /* shli r3, r2, 45 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-35184372088835ll /* 0xffffdffffffffffd */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-35184372088834ll /* 0xffffdffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 45}, /* shli r3, r2, 45 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-35184372088833ll /* 0xffffdfffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088832ll /* 0xffffe00000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 45}} /* shli r3, r2, 45 */
- },
- {-35184372088831ll /* 0xffffe00000000001 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-35184372088830ll /* 0xffffe00000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088829ll /* 0xffffe00000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088828ll /* 0xffffe00000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088827ll /* 0xffffe00000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088824ll /* 0xffffe00000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-35184372088823ll /* 0xffffe00000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-26388279066625ll /* 0xffffe7ffffffffff */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044424ll /* 0xffffeffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 44}, /* shli r3, r2, 44 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-17592186044423ll /* 0xffffeffffffffff9 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-17592186044420ll /* 0xffffeffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 44}, /* shli r3, r2, 44 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-17592186044419ll /* 0xffffeffffffffffd */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-17592186044418ll /* 0xffffeffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 44}, /* shli r3, r2, 44 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-17592186044417ll /* 0xffffefffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044416ll /* 0xfffff00000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 44}} /* shli r3, r2, 44 */
- },
- {-17592186044415ll /* 0xfffff00000000001 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-17592186044414ll /* 0xfffff00000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044413ll /* 0xfffff00000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044412ll /* 0xfffff00000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044411ll /* 0xfffff00000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044408ll /* 0xfffff00000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17592186044407ll /* 0xfffff00000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-13194139533313ll /* 0xfffff3ffffffffff */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022216ll /* 0xfffff7fffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 43}, /* shli r3, r2, 43 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-8796093022215ll /* 0xfffff7fffffffff9 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8796093022212ll /* 0xfffff7fffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 43}, /* shli r3, r2, 43 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-8796093022211ll /* 0xfffff7fffffffffd */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8796093022210ll /* 0xfffff7fffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 43}, /* shli r3, r2, 43 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-8796093022209ll /* 0xfffff7ffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022208ll /* 0xfffff80000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 43}} /* shli r3, r2, 43 */
- },
- {-8796093022207ll /* 0xfffff80000000001 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-8796093022206ll /* 0xfffff80000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022205ll /* 0xfffff80000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022204ll /* 0xfffff80000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022203ll /* 0xfffff80000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022200ll /* 0xfffff80000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8796093022199ll /* 0xfffff80000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-6597069766657ll /* 0xfffff9ffffffffff */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511112ll /* 0xfffffbfffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 42}, /* shli r3, r2, 42 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-4398046511111ll /* 0xfffffbfffffffff9 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4398046511108ll /* 0xfffffbfffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 42}, /* shli r3, r2, 42 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-4398046511107ll /* 0xfffffbfffffffffd */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4398046511106ll /* 0xfffffbfffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 42}, /* shli r3, r2, 42 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4398046511105ll /* 0xfffffbffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511104ll /* 0xfffffc0000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 42}} /* shli r3, r2, 42 */
- },
- {-4398046511103ll /* 0xfffffc0000000001 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4398046511102ll /* 0xfffffc0000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511101ll /* 0xfffffc0000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511100ll /* 0xfffffc0000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511099ll /* 0xfffffc0000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511096ll /* 0xfffffc0000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4398046511095ll /* 0xfffffc0000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3298534883329ll /* 0xfffffcffffffffff */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255560ll /* 0xfffffdfffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 41}, /* shli r3, r2, 41 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-2199023255559ll /* 0xfffffdfffffffff9 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2199023255556ll /* 0xfffffdfffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 41}, /* shli r3, r2, 41 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-2199023255555ll /* 0xfffffdfffffffffd */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2199023255554ll /* 0xfffffdfffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 41}, /* shli r3, r2, 41 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-2199023255553ll /* 0xfffffdffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255552ll /* 0xfffffe0000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 41}} /* shli r3, r2, 41 */
- },
- {-2199023255551ll /* 0xfffffe0000000001 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2199023255550ll /* 0xfffffe0000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255549ll /* 0xfffffe0000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255548ll /* 0xfffffe0000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255547ll /* 0xfffffe0000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255544ll /* 0xfffffe0000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2199023255543ll /* 0xfffffe0000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1649267441665ll /* 0xfffffe7fffffffff */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627784ll /* 0xfffffefffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 40}, /* shli r3, r2, 40 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-1099511627783ll /* 0xfffffefffffffff9 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1099511627780ll /* 0xfffffefffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 40}, /* shli r3, r2, 40 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-1099511627779ll /* 0xfffffefffffffffd */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1099511627778ll /* 0xfffffefffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 40}, /* shli r3, r2, 40 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-1099511627777ll /* 0xfffffeffffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627776ll /* 0xffffff0000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 40}} /* shli r3, r2, 40 */
- },
- {-1099511627775ll /* 0xffffff0000000001 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1099511627774ll /* 0xffffff0000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627773ll /* 0xffffff0000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627772ll /* 0xffffff0000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627771ll /* 0xffffff0000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627768ll /* 0xffffff0000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1099511627767ll /* 0xffffff0000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-824633720833ll /* 0xffffff3fffffffff */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813896ll /* 0xffffff7ffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 39}, /* shli r3, r2, 39 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-549755813895ll /* 0xffffff7ffffffff9 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-549755813892ll /* 0xffffff7ffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 39}, /* shli r3, r2, 39 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-549755813891ll /* 0xffffff7ffffffffd */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-549755813890ll /* 0xffffff7ffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 39}, /* shli r3, r2, 39 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-549755813889ll /* 0xffffff7fffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813888ll /* 0xffffff8000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 39}} /* shli r3, r2, 39 */
- },
- {-549755813887ll /* 0xffffff8000000001 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-549755813886ll /* 0xffffff8000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813885ll /* 0xffffff8000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813884ll /* 0xffffff8000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813883ll /* 0xffffff8000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813880ll /* 0xffffff8000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-549755813879ll /* 0xffffff8000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-412316860417ll /* 0xffffff9fffffffff */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906952ll /* 0xffffffbffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 38}, /* shli r3, r2, 38 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-274877906951ll /* 0xffffffbffffffff9 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-274877906948ll /* 0xffffffbffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 38}, /* shli r3, r2, 38 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-274877906947ll /* 0xffffffbffffffffd */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-274877906946ll /* 0xffffffbffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 38}, /* shli r3, r2, 38 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-274877906945ll /* 0xffffffbfffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906944ll /* 0xffffffc000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 38}} /* shli r3, r2, 38 */
- },
- {-274877906943ll /* 0xffffffc000000001 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-274877906942ll /* 0xffffffc000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906941ll /* 0xffffffc000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906940ll /* 0xffffffc000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906939ll /* 0xffffffc000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906936ll /* 0xffffffc000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-274877906935ll /* 0xffffffc000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-206158430209ll /* 0xffffffcfffffffff */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953480ll /* 0xffffffdffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 37}, /* shli r3, r2, 37 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-137438953479ll /* 0xffffffdffffffff9 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-137438953476ll /* 0xffffffdffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 37}, /* shli r3, r2, 37 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-137438953475ll /* 0xffffffdffffffffd */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-137438953474ll /* 0xffffffdffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 37}, /* shli r3, r2, 37 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-137438953473ll /* 0xffffffdfffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953472ll /* 0xffffffe000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 37}} /* shli r3, r2, 37 */
- },
- {-137438953471ll /* 0xffffffe000000001 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-137438953470ll /* 0xffffffe000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953469ll /* 0xffffffe000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953468ll /* 0xffffffe000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953467ll /* 0xffffffe000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953464ll /* 0xffffffe000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-137438953463ll /* 0xffffffe000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-103079215105ll /* 0xffffffe7ffffffff */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476744ll /* 0xffffffeffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 36}, /* shli r3, r2, 36 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-68719476743ll /* 0xffffffeffffffff9 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-68719476740ll /* 0xffffffeffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 36}, /* shli r3, r2, 36 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-68719476739ll /* 0xffffffeffffffffd */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-68719476738ll /* 0xffffffeffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 36}, /* shli r3, r2, 36 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-68719476737ll /* 0xffffffefffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476736ll /* 0xfffffff000000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 36}} /* shli r3, r2, 36 */
- },
- {-68719476735ll /* 0xfffffff000000001 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-68719476734ll /* 0xfffffff000000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476733ll /* 0xfffffff000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476732ll /* 0xfffffff000000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476731ll /* 0xfffffff000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476728ll /* 0xfffffff000000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-68719476727ll /* 0xfffffff000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-51539607553ll /* 0xfffffff3ffffffff */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738376ll /* 0xfffffff7fffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 35}, /* shli r3, r2, 35 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-34359738375ll /* 0xfffffff7fffffff9 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-34359738372ll /* 0xfffffff7fffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 35}, /* shli r3, r2, 35 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-34359738371ll /* 0xfffffff7fffffffd */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-34359738370ll /* 0xfffffff7fffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 35}, /* shli r3, r2, 35 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-34359738369ll /* 0xfffffff7ffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738368ll /* 0xfffffff800000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 35}} /* shli r3, r2, 35 */
- },
- {-34359738367ll /* 0xfffffff800000001 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-34359738366ll /* 0xfffffff800000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738365ll /* 0xfffffff800000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738364ll /* 0xfffffff800000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738363ll /* 0xfffffff800000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738360ll /* 0xfffffff800000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34359738359ll /* 0xfffffff800000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-25769803777ll /* 0xfffffff9ffffffff */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869192ll /* 0xfffffffbfffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 34}, /* shli r3, r2, 34 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-17179869191ll /* 0xfffffffbfffffff9 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-17179869188ll /* 0xfffffffbfffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 34}, /* shli r3, r2, 34 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-17179869187ll /* 0xfffffffbfffffffd */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-17179869186ll /* 0xfffffffbfffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 34}, /* shli r3, r2, 34 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-17179869185ll /* 0xfffffffbffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869184ll /* 0xfffffffc00000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 34}} /* shli r3, r2, 34 */
- },
- {-17179869183ll /* 0xfffffffc00000001 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-17179869182ll /* 0xfffffffc00000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869181ll /* 0xfffffffc00000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869180ll /* 0xfffffffc00000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869179ll /* 0xfffffffc00000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869176ll /* 0xfffffffc00000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-17179869175ll /* 0xfffffffc00000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-12884901889ll /* 0xfffffffcffffffff */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934600ll /* 0xfffffffdfffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 33}, /* shli r3, r2, 33 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-8589934599ll /* 0xfffffffdfffffff9 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8589934596ll /* 0xfffffffdfffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 33}, /* shli r3, r2, 33 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-8589934595ll /* 0xfffffffdfffffffd */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8589934594ll /* 0xfffffffdfffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 33}, /* shli r3, r2, 33 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-8589934593ll /* 0xfffffffdffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934592ll /* 0xfffffffe00000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 33}} /* shli r3, r2, 33 */
- },
- {-8589934591ll /* 0xfffffffe00000001 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-8589934590ll /* 0xfffffffe00000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934589ll /* 0xfffffffe00000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934588ll /* 0xfffffffe00000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934587ll /* 0xfffffffe00000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934584ll /* 0xfffffffe00000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8589934583ll /* 0xfffffffe00000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-6442450945ll /* 0xfffffffe7fffffff */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967304ll /* 0xfffffffefffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 32}, /* shli r3, r2, 32 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-4294967303ll /* 0xfffffffefffffff9 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4294967300ll /* 0xfffffffefffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 32}, /* shli r3, r2, 32 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-4294967299ll /* 0xfffffffefffffffd */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4294967298ll /* 0xfffffffefffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 32}, /* shli r3, r2, 32 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4294967297ll /* 0xfffffffeffffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967296ll /* 0xffffffff00000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 32}} /* shli r3, r2, 32 */
- },
- {-4294967295ll /* 0xffffffff00000001 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4294967294ll /* 0xffffffff00000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967293ll /* 0xffffffff00000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967292ll /* 0xffffffff00000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967291ll /* 0xffffffff00000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967288ll /* 0xffffffff00000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4294967287ll /* 0xffffffff00000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3221225473ll /* 0xffffffff3fffffff */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483656ll /* 0xffffffff7ffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 31}, /* shli r3, r2, 31 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-2147483655ll /* 0xffffffff7ffffff9 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2147483652ll /* 0xffffffff7ffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 31}, /* shli r3, r2, 31 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-2147483651ll /* 0xffffffff7ffffffd */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2147483650ll /* 0xffffffff7ffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 31}, /* shli r3, r2, 31 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-2147483649ll /* 0xffffffff7fffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483648ll /* 0xffffffff80000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 31}} /* shli r3, r2, 31 */
- },
- {-2147483647ll /* 0xffffffff80000001 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2147483646ll /* 0xffffffff80000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483645ll /* 0xffffffff80000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483644ll /* 0xffffffff80000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483643ll /* 0xffffffff80000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483640ll /* 0xffffffff80000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2147483639ll /* 0xffffffff80000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1610612737ll /* 0xffffffff9fffffff */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741832ll /* 0xffffffffbffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-1073741831ll /* 0xffffffffbffffff9 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1073741828ll /* 0xffffffffbffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-1073741827ll /* 0xffffffffbffffffd */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1073741826ll /* 0xffffffffbffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-1073741825ll /* 0xffffffffbfffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741824ll /* 0xffffffffc0000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}} /* shli r3, r2, 30 */
- },
- {-1073741823ll /* 0xffffffffc0000001 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1073741822ll /* 0xffffffffc0000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741821ll /* 0xffffffffc0000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741820ll /* 0xffffffffc0000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741819ll /* 0xffffffffc0000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741816ll /* 0xffffffffc0000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741815ll /* 0xffffffffc0000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-805306369ll /* 0xffffffffcfffffff */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870920ll /* 0xffffffffdffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-536870919ll /* 0xffffffffdffffff9 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-536870916ll /* 0xffffffffdffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-536870915ll /* 0xffffffffdffffffd */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-536870914ll /* 0xffffffffdffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-536870913ll /* 0xffffffffdfffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870912ll /* 0xffffffffe0000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {-536870911ll /* 0xffffffffe0000001 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-536870910ll /* 0xffffffffe0000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870909ll /* 0xffffffffe0000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870908ll /* 0xffffffffe0000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870907ll /* 0xffffffffe0000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870904ll /* 0xffffffffe0000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870903ll /* 0xffffffffe0000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-402653185ll /* 0xffffffffe7ffffff */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435464ll /* 0xffffffffeffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}, /* shli r3, r2, 28 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-268435463ll /* 0xffffffffeffffff9 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-268435460ll /* 0xffffffffeffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}, /* shli r3, r2, 28 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-268435459ll /* 0xffffffffeffffffd */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-268435458ll /* 0xffffffffeffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}, /* shli r3, r2, 28 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-268435457ll /* 0xffffffffefffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435456ll /* 0xfffffffff0000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {-268435455ll /* 0xfffffffff0000001 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-268435454ll /* 0xfffffffff0000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435453ll /* 0xfffffffff0000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435452ll /* 0xfffffffff0000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435451ll /* 0xfffffffff0000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435448ll /* 0xfffffffff0000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435447ll /* 0xfffffffff0000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-201326593ll /* 0xfffffffff3ffffff */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217736ll /* 0xfffffffff7fffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-134217735ll /* 0xfffffffff7fffff9 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-134217732ll /* 0xfffffffff7fffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-134217731ll /* 0xfffffffff7fffffd */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-134217730ll /* 0xfffffffff7fffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-134217729ll /* 0xfffffffff7ffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217728ll /* 0xfffffffff8000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {-134217727ll /* 0xfffffffff8000001 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-134217726ll /* 0xfffffffff8000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217725ll /* 0xfffffffff8000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217724ll /* 0xfffffffff8000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217723ll /* 0xfffffffff8000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217720ll /* 0xfffffffff8000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217719ll /* 0xfffffffff8000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-100663297ll /* 0xfffffffff9ffffff */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108872ll /* 0xfffffffffbfffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-67108871ll /* 0xfffffffffbfffff9 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-67108868ll /* 0xfffffffffbfffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-67108867ll /* 0xfffffffffbfffffd */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-67108866ll /* 0xfffffffffbfffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-67108865ll /* 0xfffffffffbffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108864ll /* 0xfffffffffc000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {-67108863ll /* 0xfffffffffc000001 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-67108862ll /* 0xfffffffffc000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108861ll /* 0xfffffffffc000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108860ll /* 0xfffffffffc000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108859ll /* 0xfffffffffc000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108856ll /* 0xfffffffffc000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108855ll /* 0xfffffffffc000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-50331649ll /* 0xfffffffffcffffff */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554440ll /* 0xfffffffffdfffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-33554439ll /* 0xfffffffffdfffff9 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-33554436ll /* 0xfffffffffdfffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-33554435ll /* 0xfffffffffdfffffd */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-33554434ll /* 0xfffffffffdfffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-33554433ll /* 0xfffffffffdffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554432ll /* 0xfffffffffe000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {-33554431ll /* 0xfffffffffe000001 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-33554430ll /* 0xfffffffffe000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554429ll /* 0xfffffffffe000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554428ll /* 0xfffffffffe000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554427ll /* 0xfffffffffe000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554424ll /* 0xfffffffffe000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554423ll /* 0xfffffffffe000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-25165825ll /* 0xfffffffffe7fffff */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777224ll /* 0xfffffffffefffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-16777223ll /* 0xfffffffffefffff9 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16777220ll /* 0xfffffffffefffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-16777219ll /* 0xfffffffffefffffd */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16777218ll /* 0xfffffffffefffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-16777217ll /* 0xfffffffffeffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777216ll /* 0xffffffffff000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {-16777215ll /* 0xffffffffff000001 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-16777214ll /* 0xffffffffff000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777213ll /* 0xffffffffff000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777212ll /* 0xffffffffff000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777211ll /* 0xffffffffff000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777208ll /* 0xffffffffff000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777207ll /* 0xffffffffff000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-12582913ll /* 0xffffffffff3fffff */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388616ll /* 0xffffffffff7ffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-8388615ll /* 0xffffffffff7ffff9 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8388612ll /* 0xffffffffff7ffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-8388611ll /* 0xffffffffff7ffffd */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8388610ll /* 0xffffffffff7ffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-8388609ll /* 0xffffffffff7fffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388608ll /* 0xffffffffff800000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {-8388607ll /* 0xffffffffff800001 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-8388606ll /* 0xffffffffff800002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388605ll /* 0xffffffffff800003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388604ll /* 0xffffffffff800004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388603ll /* 0xffffffffff800005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388600ll /* 0xffffffffff800008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388599ll /* 0xffffffffff800009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-6291457ll /* 0xffffffffff9fffff */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194312ll /* 0xffffffffffbffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-4194311ll /* 0xffffffffffbffff9 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4194308ll /* 0xffffffffffbffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-4194307ll /* 0xffffffffffbffffd */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4194306ll /* 0xffffffffffbffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4194305ll /* 0xffffffffffbfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194304ll /* 0xffffffffffc00000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {-4194303ll /* 0xffffffffffc00001 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4194302ll /* 0xffffffffffc00002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194301ll /* 0xffffffffffc00003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194300ll /* 0xffffffffffc00004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194299ll /* 0xffffffffffc00005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194296ll /* 0xffffffffffc00008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194295ll /* 0xffffffffffc00009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3145729ll /* 0xffffffffffcfffff */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097160ll /* 0xffffffffffdffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-2097159ll /* 0xffffffffffdffff9 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2097156ll /* 0xffffffffffdffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-2097155ll /* 0xffffffffffdffffd */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2097154ll /* 0xffffffffffdffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-2097153ll /* 0xffffffffffdfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097152ll /* 0xffffffffffe00000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {-2097151ll /* 0xffffffffffe00001 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2097150ll /* 0xffffffffffe00002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097149ll /* 0xffffffffffe00003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097148ll /* 0xffffffffffe00004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097147ll /* 0xffffffffffe00005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097144ll /* 0xffffffffffe00008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097143ll /* 0xffffffffffe00009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1572865ll /* 0xffffffffffe7ffff */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048584ll /* 0xffffffffffeffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-1048583ll /* 0xffffffffffeffff9 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1048580ll /* 0xffffffffffeffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-1048579ll /* 0xffffffffffeffffd */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1048578ll /* 0xffffffffffeffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-1048577ll /* 0xffffffffffefffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048576ll /* 0xfffffffffff00000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {-1048575ll /* 0xfffffffffff00001 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1048574ll /* 0xfffffffffff00002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048573ll /* 0xfffffffffff00003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048572ll /* 0xfffffffffff00004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048571ll /* 0xfffffffffff00005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048568ll /* 0xfffffffffff00008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048567ll /* 0xfffffffffff00009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-786433ll /* 0xfffffffffff3ffff */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524296ll /* 0xfffffffffff7fff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-524295ll /* 0xfffffffffff7fff9 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-524292ll /* 0xfffffffffff7fffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-524291ll /* 0xfffffffffff7fffd */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-524290ll /* 0xfffffffffff7fffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-524289ll /* 0xfffffffffff7ffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524288ll /* 0xfffffffffff80000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {-524287ll /* 0xfffffffffff80001 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-524286ll /* 0xfffffffffff80002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524285ll /* 0xfffffffffff80003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524284ll /* 0xfffffffffff80004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524283ll /* 0xfffffffffff80005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524280ll /* 0xfffffffffff80008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524279ll /* 0xfffffffffff80009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-393217ll /* 0xfffffffffff9ffff */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262152ll /* 0xfffffffffffbfff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-262151ll /* 0xfffffffffffbfff9 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-262148ll /* 0xfffffffffffbfffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-262147ll /* 0xfffffffffffbfffd */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-262146ll /* 0xfffffffffffbfffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-262145ll /* 0xfffffffffffbffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262144ll /* 0xfffffffffffc0000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {-262143ll /* 0xfffffffffffc0001 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-262142ll /* 0xfffffffffffc0002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262141ll /* 0xfffffffffffc0003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262140ll /* 0xfffffffffffc0004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262139ll /* 0xfffffffffffc0005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262136ll /* 0xfffffffffffc0008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262135ll /* 0xfffffffffffc0009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-196609ll /* 0xfffffffffffcffff */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131080ll /* 0xfffffffffffdfff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-131079ll /* 0xfffffffffffdfff9 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-131076ll /* 0xfffffffffffdfffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-131075ll /* 0xfffffffffffdfffd */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-131074ll /* 0xfffffffffffdfffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-131073ll /* 0xfffffffffffdffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131072ll /* 0xfffffffffffe0000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {-131071ll /* 0xfffffffffffe0001 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-131070ll /* 0xfffffffffffe0002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131069ll /* 0xfffffffffffe0003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131068ll /* 0xfffffffffffe0004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131067ll /* 0xfffffffffffe0005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131064ll /* 0xfffffffffffe0008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131063ll /* 0xfffffffffffe0009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-98305ll /* 0xfffffffffffe7fff */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65544ll /* 0xfffffffffffefff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-65543ll /* 0xfffffffffffefff9 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-65540ll /* 0xfffffffffffefffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-65539ll /* 0xfffffffffffefffd */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-65538ll /* 0xfffffffffffefffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-65537ll /* 0xfffffffffffeffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65536ll /* 0xffffffffffff0000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {-65535ll /* 0xffffffffffff0001 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-65534ll /* 0xffffffffffff0002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65533ll /* 0xffffffffffff0003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65532ll /* 0xffffffffffff0004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65531ll /* 0xffffffffffff0005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65528ll /* 0xffffffffffff0008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65527ll /* 0xffffffffffff0009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-49153ll /* 0xffffffffffff3fff */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32776ll /* 0xffffffffffff7ff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-32775ll /* 0xffffffffffff7ff9 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-32772ll /* 0xffffffffffff7ffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-32771ll /* 0xffffffffffff7ffd */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-32770ll /* 0xffffffffffff7ffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-32769ll /* 0xffffffffffff7fff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32768ll /* 0xffffffffffff8000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {-32767ll /* 0xffffffffffff8001 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-32766ll /* 0xffffffffffff8002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32765ll /* 0xffffffffffff8003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32764ll /* 0xffffffffffff8004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32763ll /* 0xffffffffffff8005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32760ll /* 0xffffffffffff8008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32759ll /* 0xffffffffffff8009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-24577ll /* 0xffffffffffff9fff */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16392ll /* 0xffffffffffffbff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-16391ll /* 0xffffffffffffbff9 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16388ll /* 0xffffffffffffbffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-16387ll /* 0xffffffffffffbffd */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16386ll /* 0xffffffffffffbffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-16385ll /* 0xffffffffffffbfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16384ll /* 0xffffffffffffc000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {-16383ll /* 0xffffffffffffc001 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-16382ll /* 0xffffffffffffc002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16381ll /* 0xffffffffffffc003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16380ll /* 0xffffffffffffc004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16379ll /* 0xffffffffffffc005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16376ll /* 0xffffffffffffc008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16375ll /* 0xffffffffffffc009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-12289ll /* 0xffffffffffffcfff */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8200ll /* 0xffffffffffffdff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-8199ll /* 0xffffffffffffdff9 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8196ll /* 0xffffffffffffdffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-8195ll /* 0xffffffffffffdffd */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8194ll /* 0xffffffffffffdffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-8193ll /* 0xffffffffffffdfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8192ll /* 0xffffffffffffe000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {-8191ll /* 0xffffffffffffe001 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-8190ll /* 0xffffffffffffe002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8189ll /* 0xffffffffffffe003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8188ll /* 0xffffffffffffe004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8187ll /* 0xffffffffffffe005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8184ll /* 0xffffffffffffe008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8183ll /* 0xffffffffffffe009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-6145ll /* 0xffffffffffffe7ff */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4104ll /* 0xffffffffffffeff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-4103ll /* 0xffffffffffffeff9 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4100ll /* 0xffffffffffffeffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-4099ll /* 0xffffffffffffeffd */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4098ll /* 0xffffffffffffeffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-4097ll /* 0xffffffffffffefff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4096ll /* 0xfffffffffffff000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {-4095ll /* 0xfffffffffffff001 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4094ll /* 0xfffffffffffff002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4093ll /* 0xfffffffffffff003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4092ll /* 0xfffffffffffff004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4091ll /* 0xfffffffffffff005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4088ll /* 0xfffffffffffff008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4087ll /* 0xfffffffffffff009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3073ll /* 0xfffffffffffff3ff */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3072ll /* 0xfffffffffffff400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2056ll /* 0xfffffffffffff7f8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-2055ll /* 0xfffffffffffff7f9 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2052ll /* 0xfffffffffffff7fc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-2051ll /* 0xfffffffffffff7fd */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2050ll /* 0xfffffffffffff7fe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-2049ll /* 0xfffffffffffff7ff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2048ll /* 0xfffffffffffff800 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {-2047ll /* 0xfffffffffffff801 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2046ll /* 0xfffffffffffff802 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2045ll /* 0xfffffffffffff803 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2044ll /* 0xfffffffffffff804 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2043ll /* 0xfffffffffffff805 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2040ll /* 0xfffffffffffff808 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2039ll /* 0xfffffffffffff809 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1537ll /* 0xfffffffffffff9ff */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1032ll /* 0xfffffffffffffbf8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-1031ll /* 0xfffffffffffffbf9 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1028ll /* 0xfffffffffffffbfc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-1027ll /* 0xfffffffffffffbfd */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1026ll /* 0xfffffffffffffbfe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-1025ll /* 0xfffffffffffffbff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1024ll /* 0xfffffffffffffc00 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {-1023ll /* 0xfffffffffffffc01 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1022ll /* 0xfffffffffffffc02 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1021ll /* 0xfffffffffffffc03 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1020ll /* 0xfffffffffffffc04 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1019ll /* 0xfffffffffffffc05 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1018ll /* 0xfffffffffffffc06 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-1017ll /* 0xfffffffffffffc07 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1016ll /* 0xfffffffffffffc08 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1015ll /* 0xfffffffffffffc09 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1014ll /* 0xfffffffffffffc0a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-1013ll /* 0xfffffffffffffc0b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-1012ll /* 0xfffffffffffffc0c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-1011ll /* 0xfffffffffffffc0d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-1010ll /* 0xfffffffffffffc0e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1009ll /* 0xfffffffffffffc0f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1008ll /* 0xfffffffffffffc10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1007ll /* 0xfffffffffffffc11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1006ll /* 0xfffffffffffffc12 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-1005ll /* 0xfffffffffffffc13 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 1}} /* shl1add r5, r4, r1 */
- },
- {-1004ll /* 0xfffffffffffffc14 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-1003ll /* 0xfffffffffffffc15 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-1001ll /* 0xfffffffffffffc17 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1000ll /* 0xfffffffffffffc18 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-999ll /* 0xfffffffffffffc19 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-997ll /* 0xfffffffffffffc1b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-996ll /* 0xfffffffffffffc1c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 1, 3}, /* shl2add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-994ll /* 0xfffffffffffffc1e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-993ll /* 0xfffffffffffffc1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-992ll /* 0xfffffffffffffc20 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-991ll /* 0xfffffffffffffc21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-990ll /* 0xfffffffffffffc22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-988ll /* 0xfffffffffffffc24 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-987ll /* 0xfffffffffffffc25 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-984ll /* 0xfffffffffffffc28 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-983ll /* 0xfffffffffffffc29 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-979ll /* 0xfffffffffffffc2d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-976ll /* 0xfffffffffffffc30 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-975ll /* 0xfffffffffffffc31 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {-969ll /* 0xfffffffffffffc37 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-968ll /* 0xfffffffffffffc38 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {5, 1, 3}, /* shl3add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-967ll /* 0xfffffffffffffc39 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-965ll /* 0xfffffffffffffc3b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-964ll /* 0xfffffffffffffc3c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 1, 3}, /* shl2add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-963ll /* 0xfffffffffffffc3d */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 1}, /* shl1add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-962ll /* 0xfffffffffffffc3e */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-961ll /* 0xfffffffffffffc3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-960ll /* 0xfffffffffffffc40 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-959ll /* 0xfffffffffffffc41 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-958ll /* 0xfffffffffffffc42 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-957ll /* 0xfffffffffffffc43 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-956ll /* 0xfffffffffffffc44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-955ll /* 0xfffffffffffffc45 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-953ll /* 0xfffffffffffffc47 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-952ll /* 0xfffffffffffffc48 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-951ll /* 0xfffffffffffffc49 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-945ll /* 0xfffffffffffffc4f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {-944ll /* 0xfffffffffffffc50 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-943ll /* 0xfffffffffffffc51 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-942ll /* 0xfffffffffffffc52 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {-940ll /* 0xfffffffffffffc54 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-936ll /* 0xfffffffffffffc58 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-935ll /* 0xfffffffffffffc59 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-929ll /* 0xfffffffffffffc5f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-928ll /* 0xfffffffffffffc60 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-925ll /* 0xfffffffffffffc63 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-924ll /* 0xfffffffffffffc64 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-920ll /* 0xfffffffffffffc68 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-919ll /* 0xfffffffffffffc69 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-916ll /* 0xfffffffffffffc6c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-913ll /* 0xfffffffffffffc6f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-912ll /* 0xfffffffffffffc70 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-911ll /* 0xfffffffffffffc71 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-910ll /* 0xfffffffffffffc72 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-905ll /* 0xfffffffffffffc77 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-904ll /* 0xfffffffffffffc78 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-903ll /* 0xfffffffffffffc79 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {-902ll /* 0xfffffffffffffc7a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-901ll /* 0xfffffffffffffc7b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-900ll /* 0xfffffffffffffc7c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-899ll /* 0xfffffffffffffc7d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-898ll /* 0xfffffffffffffc7e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-897ll /* 0xfffffffffffffc7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-896ll /* 0xfffffffffffffc80 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-895ll /* 0xfffffffffffffc81 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-894ll /* 0xfffffffffffffc82 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-893ll /* 0xfffffffffffffc83 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-892ll /* 0xfffffffffffffc84 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-891ll /* 0xfffffffffffffc85 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-890ll /* 0xfffffffffffffc86 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-889ll /* 0xfffffffffffffc87 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-888ll /* 0xfffffffffffffc88 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {-887ll /* 0xfffffffffffffc89 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-886ll /* 0xfffffffffffffc8a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-884ll /* 0xfffffffffffffc8c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* shl2add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-881ll /* 0xfffffffffffffc8f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-880ll /* 0xfffffffffffffc90 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-879ll /* 0xfffffffffffffc91 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {3, 4, 1}} /* shl1add r5, r4, r1 */
- },
- {-873ll /* 0xfffffffffffffc97 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-872ll /* 0xfffffffffffffc98 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-868ll /* 0xfffffffffffffc9c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-865ll /* 0xfffffffffffffc9f */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-864ll /* 0xfffffffffffffca0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-863ll /* 0xfffffffffffffca1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-861ll /* 0xfffffffffffffca3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-860ll /* 0xfffffffffffffca4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-856ll /* 0xfffffffffffffca8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-855ll /* 0xfffffffffffffca9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-847ll /* 0xfffffffffffffcb1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-837ll /* 0xfffffffffffffcbb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-835ll /* 0xfffffffffffffcbd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-834ll /* 0xfffffffffffffcbe */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {-832ll /* 0xfffffffffffffcc0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {-831ll /* 0xfffffffffffffcc1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-829ll /* 0xfffffffffffffcc3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-828ll /* 0xfffffffffffffcc4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-827ll /* 0xfffffffffffffcc5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-824ll /* 0xfffffffffffffcc8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-823ll /* 0xfffffffffffffcc9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-819ll /* 0xfffffffffffffccd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-816ll /* 0xfffffffffffffcd0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-815ll /* 0xfffffffffffffcd1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-803ll /* 0xfffffffffffffcdd */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-801ll /* 0xfffffffffffffcdf */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-800ll /* 0xfffffffffffffce0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-799ll /* 0xfffffffffffffce1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-797ll /* 0xfffffffffffffce3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-796ll /* 0xfffffffffffffce4 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-795ll /* 0xfffffffffffffce5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-793ll /* 0xfffffffffffffce7 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-792ll /* 0xfffffffffffffce8 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-791ll /* 0xfffffffffffffce9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-789ll /* 0xfffffffffffffceb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-788ll /* 0xfffffffffffffcec */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-785ll /* 0xfffffffffffffcef */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-784ll /* 0xfffffffffffffcf0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-783ll /* 0xfffffffffffffcf1 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-781ll /* 0xfffffffffffffcf3 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-780ll /* 0xfffffffffffffcf4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-779ll /* 0xfffffffffffffcf5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-777ll /* 0xfffffffffffffcf7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-776ll /* 0xfffffffffffffcf8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-775ll /* 0xfffffffffffffcf9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-774ll /* 0xfffffffffffffcfa */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-773ll /* 0xfffffffffffffcfb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-772ll /* 0xfffffffffffffcfc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-771ll /* 0xfffffffffffffcfd */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* shl1add r5, r4, r4 */
- },
- {-770ll /* 0xfffffffffffffcfe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-769ll /* 0xfffffffffffffcff */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-768ll /* 0xfffffffffffffd00 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-767ll /* 0xfffffffffffffd01 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-766ll /* 0xfffffffffffffd02 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-765ll /* 0xfffffffffffffd03 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-764ll /* 0xfffffffffffffd04 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {-763ll /* 0xfffffffffffffd05 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-762ll /* 0xfffffffffffffd06 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-761ll /* 0xfffffffffffffd07 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-760ll /* 0xfffffffffffffd08 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-759ll /* 0xfffffffffffffd09 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-757ll /* 0xfffffffffffffd0b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-756ll /* 0xfffffffffffffd0c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-755ll /* 0xfffffffffffffd0d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-753ll /* 0xfffffffffffffd0f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-752ll /* 0xfffffffffffffd10 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-751ll /* 0xfffffffffffffd11 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-749ll /* 0xfffffffffffffd13 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 1, 3}, /* shl3add r4, r1, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-748ll /* 0xfffffffffffffd14 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-744ll /* 0xfffffffffffffd18 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-743ll /* 0xfffffffffffffd19 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-741ll /* 0xfffffffffffffd1b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-739ll /* 0xfffffffffffffd1d */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-737ll /* 0xfffffffffffffd1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-736ll /* 0xfffffffffffffd20 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-735ll /* 0xfffffffffffffd21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-732ll /* 0xfffffffffffffd24 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-729ll /* 0xfffffffffffffd27 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-728ll /* 0xfffffffffffffd28 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-720ll /* 0xfffffffffffffd30 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-719ll /* 0xfffffffffffffd31 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-715ll /* 0xfffffffffffffd35 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-712ll /* 0xfffffffffffffd38 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-711ll /* 0xfffffffffffffd39 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-708ll /* 0xfffffffffffffd3c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-707ll /* 0xfffffffffffffd3d */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-705ll /* 0xfffffffffffffd3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-704ll /* 0xfffffffffffffd40 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {-703ll /* 0xfffffffffffffd41 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-701ll /* 0xfffffffffffffd43 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-700ll /* 0xfffffffffffffd44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-699ll /* 0xfffffffffffffd45 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-695ll /* 0xfffffffffffffd49 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-693ll /* 0xfffffffffffffd4b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-692ll /* 0xfffffffffffffd4c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-688ll /* 0xfffffffffffffd50 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-680ll /* 0xfffffffffffffd58 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-679ll /* 0xfffffffffffffd59 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-675ll /* 0xfffffffffffffd5d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-673ll /* 0xfffffffffffffd5f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-672ll /* 0xfffffffffffffd60 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-671ll /* 0xfffffffffffffd61 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-667ll /* 0xfffffffffffffd65 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-664ll /* 0xfffffffffffffd68 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-660ll /* 0xfffffffffffffd6c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-659ll /* 0xfffffffffffffd6d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-657ll /* 0xfffffffffffffd6f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-656ll /* 0xfffffffffffffd70 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-655ll /* 0xfffffffffffffd71 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-651ll /* 0xfffffffffffffd75 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-650ll /* 0xfffffffffffffd76 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-649ll /* 0xfffffffffffffd77 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-648ll /* 0xfffffffffffffd78 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-647ll /* 0xfffffffffffffd79 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}, /* shli r4, r3, 3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-645ll /* 0xfffffffffffffd7b */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-644ll /* 0xfffffffffffffd7c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-643ll /* 0xfffffffffffffd7d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-642ll /* 0xfffffffffffffd7e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-641ll /* 0xfffffffffffffd7f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-640ll /* 0xfffffffffffffd80 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 7}} /* shli r4, r3, 7 */
- },
- {-639ll /* 0xfffffffffffffd81 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-638ll /* 0xfffffffffffffd82 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-637ll /* 0xfffffffffffffd83 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-636ll /* 0xfffffffffffffd84 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-635ll /* 0xfffffffffffffd85 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-634ll /* 0xfffffffffffffd86 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-633ll /* 0xfffffffffffffd87 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-632ll /* 0xfffffffffffffd88 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-631ll /* 0xfffffffffffffd89 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-630ll /* 0xfffffffffffffd8a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-629ll /* 0xfffffffffffffd8b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-627ll /* 0xfffffffffffffd8d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-625ll /* 0xfffffffffffffd8f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-624ll /* 0xfffffffffffffd90 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-620ll /* 0xfffffffffffffd94 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-619ll /* 0xfffffffffffffd95 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-616ll /* 0xfffffffffffffd98 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-615ll /* 0xfffffffffffffd99 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-613ll /* 0xfffffffffffffd9b */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 3}, /* shl2add r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-612ll /* 0xfffffffffffffd9c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-611ll /* 0xfffffffffffffd9d */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-609ll /* 0xfffffffffffffd9f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-608ll /* 0xfffffffffffffda0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-607ll /* 0xfffffffffffffda1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-604ll /* 0xfffffffffffffda4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-603ll /* 0xfffffffffffffda5 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-600ll /* 0xfffffffffffffda8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-599ll /* 0xfffffffffffffda9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-595ll /* 0xfffffffffffffdad */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-594ll /* 0xfffffffffffffdae */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-593ll /* 0xfffffffffffffdaf */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-592ll /* 0xfffffffffffffdb0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-591ll /* 0xfffffffffffffdb1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-589ll /* 0xfffffffffffffdb3 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-588ll /* 0xfffffffffffffdb4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 3}, /* shl2add r4, r3, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-585ll /* 0xfffffffffffffdb7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-584ll /* 0xfffffffffffffdb8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-583ll /* 0xfffffffffffffdb9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-581ll /* 0xfffffffffffffdbb */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {4, 3, 3}, /* shl2add r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-580ll /* 0xfffffffffffffdbc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-579ll /* 0xfffffffffffffdbd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-578ll /* 0xfffffffffffffdbe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-577ll /* 0xfffffffffffffdbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-576ll /* 0xfffffffffffffdc0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {-575ll /* 0xfffffffffffffdc1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-574ll /* 0xfffffffffffffdc2 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-573ll /* 0xfffffffffffffdc3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-572ll /* 0xfffffffffffffdc4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-571ll /* 0xfffffffffffffdc5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-569ll /* 0xfffffffffffffdc7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-568ll /* 0xfffffffffffffdc8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-567ll /* 0xfffffffffffffdc9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-566ll /* 0xfffffffffffffdca */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-565ll /* 0xfffffffffffffdcb */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-564ll /* 0xfffffffffffffdcc */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-563ll /* 0xfffffffffffffdcd */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-561ll /* 0xfffffffffffffdcf */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-560ll /* 0xfffffffffffffdd0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-559ll /* 0xfffffffffffffdd1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-558ll /* 0xfffffffffffffdd2 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-557ll /* 0xfffffffffffffdd3 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-556ll /* 0xfffffffffffffdd4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-555ll /* 0xfffffffffffffdd5 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-553ll /* 0xfffffffffffffdd7 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-552ll /* 0xfffffffffffffdd8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-551ll /* 0xfffffffffffffdd9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-549ll /* 0xfffffffffffffddb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-548ll /* 0xfffffffffffffddc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-547ll /* 0xfffffffffffffddd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-546ll /* 0xfffffffffffffdde */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-545ll /* 0xfffffffffffffddf */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-544ll /* 0xfffffffffffffde0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-543ll /* 0xfffffffffffffde1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-542ll /* 0xfffffffffffffde2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-540ll /* 0xfffffffffffffde4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-539ll /* 0xfffffffffffffde5 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-536ll /* 0xfffffffffffffde8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-535ll /* 0xfffffffffffffde9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-533ll /* 0xfffffffffffffdeb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-532ll /* 0xfffffffffffffdec */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-531ll /* 0xfffffffffffffded */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-530ll /* 0xfffffffffffffdee */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-529ll /* 0xfffffffffffffdef */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-528ll /* 0xfffffffffffffdf0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-527ll /* 0xfffffffffffffdf1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-526ll /* 0xfffffffffffffdf2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-525ll /* 0xfffffffffffffdf3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-524ll /* 0xfffffffffffffdf4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-523ll /* 0xfffffffffffffdf5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-522ll /* 0xfffffffffffffdf6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-521ll /* 0xfffffffffffffdf7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-520ll /* 0xfffffffffffffdf8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-519ll /* 0xfffffffffffffdf9 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-518ll /* 0xfffffffffffffdfa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-517ll /* 0xfffffffffffffdfb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-516ll /* 0xfffffffffffffdfc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-515ll /* 0xfffffffffffffdfd */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-514ll /* 0xfffffffffffffdfe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-513ll /* 0xfffffffffffffdff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-512ll /* 0xfffffffffffffe00 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {-511ll /* 0xfffffffffffffe01 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-510ll /* 0xfffffffffffffe02 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-509ll /* 0xfffffffffffffe03 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-508ll /* 0xfffffffffffffe04 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-507ll /* 0xfffffffffffffe05 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-506ll /* 0xfffffffffffffe06 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-505ll /* 0xfffffffffffffe07 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-504ll /* 0xfffffffffffffe08 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-503ll /* 0xfffffffffffffe09 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-502ll /* 0xfffffffffffffe0a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-501ll /* 0xfffffffffffffe0b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-500ll /* 0xfffffffffffffe0c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-499ll /* 0xfffffffffffffe0d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-498ll /* 0xfffffffffffffe0e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-497ll /* 0xfffffffffffffe0f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-496ll /* 0xfffffffffffffe10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-495ll /* 0xfffffffffffffe11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-494ll /* 0xfffffffffffffe12 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-493ll /* 0xfffffffffffffe13 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 1}} /* shl1add r5, r4, r1 */
- },
- {-492ll /* 0xfffffffffffffe14 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-491ll /* 0xfffffffffffffe15 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-489ll /* 0xfffffffffffffe17 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-488ll /* 0xfffffffffffffe18 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-487ll /* 0xfffffffffffffe19 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-485ll /* 0xfffffffffffffe1b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-484ll /* 0xfffffffffffffe1c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 1, 3}, /* shl2add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-483ll /* 0xfffffffffffffe1d */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 1}, /* shl1add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-482ll /* 0xfffffffffffffe1e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-481ll /* 0xfffffffffffffe1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-480ll /* 0xfffffffffffffe20 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-479ll /* 0xfffffffffffffe21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-478ll /* 0xfffffffffffffe22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-477ll /* 0xfffffffffffffe23 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-476ll /* 0xfffffffffffffe24 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-475ll /* 0xfffffffffffffe25 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-472ll /* 0xfffffffffffffe28 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-471ll /* 0xfffffffffffffe29 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-468ll /* 0xfffffffffffffe2c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-467ll /* 0xfffffffffffffe2d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-465ll /* 0xfffffffffffffe2f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {-464ll /* 0xfffffffffffffe30 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-463ll /* 0xfffffffffffffe31 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-462ll /* 0xfffffffffffffe32 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-460ll /* 0xfffffffffffffe34 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-457ll /* 0xfffffffffffffe37 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-456ll /* 0xfffffffffffffe38 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-455ll /* 0xfffffffffffffe39 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {-454ll /* 0xfffffffffffffe3a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-453ll /* 0xfffffffffffffe3b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-452ll /* 0xfffffffffffffe3c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-451ll /* 0xfffffffffffffe3d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-450ll /* 0xfffffffffffffe3e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-449ll /* 0xfffffffffffffe3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-448ll /* 0xfffffffffffffe40 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-447ll /* 0xfffffffffffffe41 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-446ll /* 0xfffffffffffffe42 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-445ll /* 0xfffffffffffffe43 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-444ll /* 0xfffffffffffffe44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-443ll /* 0xfffffffffffffe45 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-442ll /* 0xfffffffffffffe46 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-441ll /* 0xfffffffffffffe47 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-440ll /* 0xfffffffffffffe48 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {-439ll /* 0xfffffffffffffe49 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-438ll /* 0xfffffffffffffe4a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-436ll /* 0xfffffffffffffe4c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* shl2add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-433ll /* 0xfffffffffffffe4f */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-432ll /* 0xfffffffffffffe50 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-431ll /* 0xfffffffffffffe51 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-429ll /* 0xfffffffffffffe53 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-428ll /* 0xfffffffffffffe54 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-424ll /* 0xfffffffffffffe58 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-423ll /* 0xfffffffffffffe59 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-419ll /* 0xfffffffffffffe5d */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-418ll /* 0xfffffffffffffe5e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {-417ll /* 0xfffffffffffffe5f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-416ll /* 0xfffffffffffffe60 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-415ll /* 0xfffffffffffffe61 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-413ll /* 0xfffffffffffffe63 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-412ll /* 0xfffffffffffffe64 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-411ll /* 0xfffffffffffffe65 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-409ll /* 0xfffffffffffffe67 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-408ll /* 0xfffffffffffffe68 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-407ll /* 0xfffffffffffffe69 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-405ll /* 0xfffffffffffffe6b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-404ll /* 0xfffffffffffffe6c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-403ll /* 0xfffffffffffffe6d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-401ll /* 0xfffffffffffffe6f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-400ll /* 0xfffffffffffffe70 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-399ll /* 0xfffffffffffffe71 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-397ll /* 0xfffffffffffffe73 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-396ll /* 0xfffffffffffffe74 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-395ll /* 0xfffffffffffffe75 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-393ll /* 0xfffffffffffffe77 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-392ll /* 0xfffffffffffffe78 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-391ll /* 0xfffffffffffffe79 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-390ll /* 0xfffffffffffffe7a */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-389ll /* 0xfffffffffffffe7b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-388ll /* 0xfffffffffffffe7c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-387ll /* 0xfffffffffffffe7d */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* shl1add r5, r4, r4 */
- },
- {-386ll /* 0xfffffffffffffe7e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-385ll /* 0xfffffffffffffe7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-384ll /* 0xfffffffffffffe80 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-383ll /* 0xfffffffffffffe81 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-382ll /* 0xfffffffffffffe82 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-381ll /* 0xfffffffffffffe83 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-380ll /* 0xfffffffffffffe84 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {-379ll /* 0xfffffffffffffe85 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-378ll /* 0xfffffffffffffe86 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-377ll /* 0xfffffffffffffe87 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-376ll /* 0xfffffffffffffe88 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-375ll /* 0xfffffffffffffe89 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-373ll /* 0xfffffffffffffe8b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-372ll /* 0xfffffffffffffe8c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-371ll /* 0xfffffffffffffe8d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-369ll /* 0xfffffffffffffe8f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-368ll /* 0xfffffffffffffe90 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-367ll /* 0xfffffffffffffe91 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-365ll /* 0xfffffffffffffe93 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 1, 3}, /* shl3add r4, r1, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-364ll /* 0xfffffffffffffe94 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-361ll /* 0xfffffffffffffe97 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-360ll /* 0xfffffffffffffe98 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-359ll /* 0xfffffffffffffe99 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-357ll /* 0xfffffffffffffe9b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-356ll /* 0xfffffffffffffe9c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-355ll /* 0xfffffffffffffe9d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}, /* shli r4, r3, 3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-353ll /* 0xfffffffffffffe9f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-352ll /* 0xfffffffffffffea0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-351ll /* 0xfffffffffffffea1 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-349ll /* 0xfffffffffffffea3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-348ll /* 0xfffffffffffffea4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-347ll /* 0xfffffffffffffea5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-344ll /* 0xfffffffffffffea8 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-343ll /* 0xfffffffffffffea9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-341ll /* 0xfffffffffffffeab */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-340ll /* 0xfffffffffffffeac */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-339ll /* 0xfffffffffffffead */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-337ll /* 0xfffffffffffffeaf */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-336ll /* 0xfffffffffffffeb0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-335ll /* 0xfffffffffffffeb1 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-333ll /* 0xfffffffffffffeb3 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-332ll /* 0xfffffffffffffeb4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-331ll /* 0xfffffffffffffeb5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-330ll /* 0xfffffffffffffeb6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-329ll /* 0xfffffffffffffeb7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-328ll /* 0xfffffffffffffeb8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-327ll /* 0xfffffffffffffeb9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-325ll /* 0xfffffffffffffebb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-324ll /* 0xfffffffffffffebc */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-323ll /* 0xfffffffffffffebd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-322ll /* 0xfffffffffffffebe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-321ll /* 0xfffffffffffffebf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-320ll /* 0xfffffffffffffec0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {-319ll /* 0xfffffffffffffec1 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-318ll /* 0xfffffffffffffec2 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-317ll /* 0xfffffffffffffec3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-316ll /* 0xfffffffffffffec4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-315ll /* 0xfffffffffffffec5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-314ll /* 0xfffffffffffffec6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-313ll /* 0xfffffffffffffec7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-312ll /* 0xfffffffffffffec8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-311ll /* 0xfffffffffffffec9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-310ll /* 0xfffffffffffffeca */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-309ll /* 0xfffffffffffffecb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-307ll /* 0xfffffffffffffecd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-306ll /* 0xfffffffffffffece */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-305ll /* 0xfffffffffffffecf */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-304ll /* 0xfffffffffffffed0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-303ll /* 0xfffffffffffffed1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-301ll /* 0xfffffffffffffed3 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-300ll /* 0xfffffffffffffed4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-299ll /* 0xfffffffffffffed5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-297ll /* 0xfffffffffffffed7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-296ll /* 0xfffffffffffffed8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-295ll /* 0xfffffffffffffed9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-293ll /* 0xfffffffffffffedb */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-292ll /* 0xfffffffffffffedc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-291ll /* 0xfffffffffffffedd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-290ll /* 0xfffffffffffffede */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {-289ll /* 0xfffffffffffffedf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-288ll /* 0xfffffffffffffee0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {-287ll /* 0xfffffffffffffee1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-286ll /* 0xfffffffffffffee2 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-285ll /* 0xfffffffffffffee3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-284ll /* 0xfffffffffffffee4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-283ll /* 0xfffffffffffffee5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-281ll /* 0xfffffffffffffee7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-280ll /* 0xfffffffffffffee8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-279ll /* 0xfffffffffffffee9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-278ll /* 0xfffffffffffffeea */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-277ll /* 0xfffffffffffffeeb */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-276ll /* 0xfffffffffffffeec */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-275ll /* 0xfffffffffffffeed */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-274ll /* 0xfffffffffffffeee */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-273ll /* 0xfffffffffffffeef */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-272ll /* 0xfffffffffffffef0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-271ll /* 0xfffffffffffffef1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-270ll /* 0xfffffffffffffef2 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-269ll /* 0xfffffffffffffef3 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-268ll /* 0xfffffffffffffef4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-267ll /* 0xfffffffffffffef5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-266ll /* 0xfffffffffffffef6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-265ll /* 0xfffffffffffffef7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-264ll /* 0xfffffffffffffef8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-263ll /* 0xfffffffffffffef9 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-262ll /* 0xfffffffffffffefa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-261ll /* 0xfffffffffffffefb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-260ll /* 0xfffffffffffffefc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-259ll /* 0xfffffffffffffefd */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-258ll /* 0xfffffffffffffefe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-257ll /* 0xfffffffffffffeff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-256ll /* 0xffffffffffffff00 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {-255ll /* 0xffffffffffffff01 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-254ll /* 0xffffffffffffff02 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-253ll /* 0xffffffffffffff03 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-252ll /* 0xffffffffffffff04 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-251ll /* 0xffffffffffffff05 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-250ll /* 0xffffffffffffff06 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-249ll /* 0xffffffffffffff07 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-248ll /* 0xffffffffffffff08 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-247ll /* 0xffffffffffffff09 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-246ll /* 0xffffffffffffff0a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-245ll /* 0xffffffffffffff0b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-244ll /* 0xffffffffffffff0c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-243ll /* 0xffffffffffffff0d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-242ll /* 0xffffffffffffff0e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-241ll /* 0xffffffffffffff0f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-240ll /* 0xffffffffffffff10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-239ll /* 0xffffffffffffff11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-238ll /* 0xffffffffffffff12 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-237ll /* 0xffffffffffffff13 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 1}} /* shl1add r5, r4, r1 */
- },
- {-236ll /* 0xffffffffffffff14 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-235ll /* 0xffffffffffffff15 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-234ll /* 0xffffffffffffff16 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-233ll /* 0xffffffffffffff17 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-232ll /* 0xffffffffffffff18 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-231ll /* 0xffffffffffffff19 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {-230ll /* 0xffffffffffffff1a */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-229ll /* 0xffffffffffffff1b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-228ll /* 0xffffffffffffff1c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-227ll /* 0xffffffffffffff1d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-226ll /* 0xffffffffffffff1e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-225ll /* 0xffffffffffffff1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-224ll /* 0xffffffffffffff20 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-223ll /* 0xffffffffffffff21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-222ll /* 0xffffffffffffff22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-221ll /* 0xffffffffffffff23 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-220ll /* 0xffffffffffffff24 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-219ll /* 0xffffffffffffff25 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-218ll /* 0xffffffffffffff26 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-217ll /* 0xffffffffffffff27 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-216ll /* 0xffffffffffffff28 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {-215ll /* 0xffffffffffffff29 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-214ll /* 0xffffffffffffff2a */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-213ll /* 0xffffffffffffff2b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}, /* shli r4, r3, 3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-212ll /* 0xffffffffffffff2c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* shl2add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-211ll /* 0xffffffffffffff2d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-210ll /* 0xffffffffffffff2e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {-209ll /* 0xffffffffffffff2f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-208ll /* 0xffffffffffffff30 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-207ll /* 0xffffffffffffff31 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-205ll /* 0xffffffffffffff33 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-204ll /* 0xffffffffffffff34 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-203ll /* 0xffffffffffffff35 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-202ll /* 0xffffffffffffff36 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-201ll /* 0xffffffffffffff37 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-200ll /* 0xffffffffffffff38 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-199ll /* 0xffffffffffffff39 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-198ll /* 0xffffffffffffff3a */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-197ll /* 0xffffffffffffff3b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-196ll /* 0xffffffffffffff3c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-195ll /* 0xffffffffffffff3d */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* shl1add r5, r4, r4 */
- },
- {-194ll /* 0xffffffffffffff3e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-193ll /* 0xffffffffffffff3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-192ll /* 0xffffffffffffff40 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-191ll /* 0xffffffffffffff41 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-190ll /* 0xffffffffffffff42 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-189ll /* 0xffffffffffffff43 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-188ll /* 0xffffffffffffff44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {-187ll /* 0xffffffffffffff45 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-186ll /* 0xffffffffffffff46 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-185ll /* 0xffffffffffffff47 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-184ll /* 0xffffffffffffff48 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-183ll /* 0xffffffffffffff49 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-181ll /* 0xffffffffffffff4b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-180ll /* 0xffffffffffffff4c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-179ll /* 0xffffffffffffff4d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-178ll /* 0xffffffffffffff4e */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-177ll /* 0xffffffffffffff4f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-176ll /* 0xffffffffffffff50 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-175ll /* 0xffffffffffffff51 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-173ll /* 0xffffffffffffff53 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-172ll /* 0xffffffffffffff54 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-171ll /* 0xffffffffffffff55 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-170ll /* 0xffffffffffffff56 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-169ll /* 0xffffffffffffff57 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-168ll /* 0xffffffffffffff58 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-167ll /* 0xffffffffffffff59 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-165ll /* 0xffffffffffffff5b */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-164ll /* 0xffffffffffffff5c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-163ll /* 0xffffffffffffff5d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-162ll /* 0xffffffffffffff5e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-161ll /* 0xffffffffffffff5f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-160ll /* 0xffffffffffffff60 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {-159ll /* 0xffffffffffffff61 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-158ll /* 0xffffffffffffff62 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-157ll /* 0xffffffffffffff63 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-156ll /* 0xffffffffffffff64 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-155ll /* 0xffffffffffffff65 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-154ll /* 0xffffffffffffff66 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-153ll /* 0xffffffffffffff67 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {-152ll /* 0xffffffffffffff68 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-151ll /* 0xffffffffffffff69 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-150ll /* 0xffffffffffffff6a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-149ll /* 0xffffffffffffff6b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-148ll /* 0xffffffffffffff6c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {-147ll /* 0xffffffffffffff6d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-146ll /* 0xffffffffffffff6e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-145ll /* 0xffffffffffffff6f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-144ll /* 0xffffffffffffff70 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {-143ll /* 0xffffffffffffff71 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-142ll /* 0xffffffffffffff72 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-141ll /* 0xffffffffffffff73 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-140ll /* 0xffffffffffffff74 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-139ll /* 0xffffffffffffff75 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-138ll /* 0xffffffffffffff76 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-137ll /* 0xffffffffffffff77 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-136ll /* 0xffffffffffffff78 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {-135ll /* 0xffffffffffffff79 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134ll /* 0xffffffffffffff7a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-133ll /* 0xffffffffffffff7b */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-132ll /* 0xffffffffffffff7c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-131ll /* 0xffffffffffffff7d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-130ll /* 0xffffffffffffff7e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-129ll /* 0xffffffffffffff7f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-128ll /* 0xffffffffffffff80 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {-127ll /* 0xffffffffffffff81 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-126ll /* 0xffffffffffffff82 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-125ll /* 0xffffffffffffff83 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-124ll /* 0xffffffffffffff84 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-123ll /* 0xffffffffffffff85 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-122ll /* 0xffffffffffffff86 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-121ll /* 0xffffffffffffff87 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-120ll /* 0xffffffffffffff88 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-119ll /* 0xffffffffffffff89 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-118ll /* 0xffffffffffffff8a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-117ll /* 0xffffffffffffff8b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-116ll /* 0xffffffffffffff8c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-115ll /* 0xffffffffffffff8d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-114ll /* 0xffffffffffffff8e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-113ll /* 0xffffffffffffff8f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-112ll /* 0xffffffffffffff90 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-111ll /* 0xffffffffffffff91 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-110ll /* 0xffffffffffffff92 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-109ll /* 0xffffffffffffff93 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-108ll /* 0xffffffffffffff94 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-107ll /* 0xffffffffffffff95 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {-106ll /* 0xffffffffffffff96 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {-105ll /* 0xffffffffffffff97 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-104ll /* 0xffffffffffffff98 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {-103ll /* 0xffffffffffffff99 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {-102ll /* 0xffffffffffffff9a */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {-101ll /* 0xffffffffffffff9b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-100ll /* 0xffffffffffffff9c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-99ll /* 0xffffffffffffff9d */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* shl1add r5, r4, r4 */
- },
- {-98ll /* 0xffffffffffffff9e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-97ll /* 0xffffffffffffff9f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-96ll /* 0xffffffffffffffa0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-95ll /* 0xffffffffffffffa1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-94ll /* 0xffffffffffffffa2 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-93ll /* 0xffffffffffffffa3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-92ll /* 0xffffffffffffffa4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {-91ll /* 0xffffffffffffffa5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-90ll /* 0xffffffffffffffa6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-89ll /* 0xffffffffffffffa7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-88ll /* 0xffffffffffffffa8 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-87ll /* 0xffffffffffffffa9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-86ll /* 0xffffffffffffffaa */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-85ll /* 0xffffffffffffffab */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {-84ll /* 0xffffffffffffffac */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-83ll /* 0xffffffffffffffad */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-82ll /* 0xffffffffffffffae */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {-81ll /* 0xffffffffffffffaf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {-80ll /* 0xffffffffffffffb0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {-79ll /* 0xffffffffffffffb1 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-78ll /* 0xffffffffffffffb2 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-77ll /* 0xffffffffffffffb3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-76ll /* 0xffffffffffffffb4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-75ll /* 0xffffffffffffffb5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-74ll /* 0xffffffffffffffb6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-73ll /* 0xffffffffffffffb7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {-72ll /* 0xffffffffffffffb8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {-71ll /* 0xffffffffffffffb9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-70ll /* 0xffffffffffffffba */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-69ll /* 0xffffffffffffffbb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {-68ll /* 0xffffffffffffffbc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {-67ll /* 0xffffffffffffffbd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-66ll /* 0xffffffffffffffbe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-65ll /* 0xffffffffffffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-64ll /* 0xffffffffffffffc0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {-63ll /* 0xffffffffffffffc1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-62ll /* 0xffffffffffffffc2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-61ll /* 0xffffffffffffffc3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-60ll /* 0xffffffffffffffc4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-59ll /* 0xffffffffffffffc5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-58ll /* 0xffffffffffffffc6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-57ll /* 0xffffffffffffffc7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-56ll /* 0xffffffffffffffc8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-55ll /* 0xffffffffffffffc9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-54ll /* 0xffffffffffffffca */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-53ll /* 0xffffffffffffffcb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {-52ll /* 0xffffffffffffffcc */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-51ll /* 0xffffffffffffffcd */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* shl1add r5, r4, r4 */
- },
- {-50ll /* 0xffffffffffffffce */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-49ll /* 0xffffffffffffffcf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-48ll /* 0xffffffffffffffd0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-47ll /* 0xffffffffffffffd1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-46ll /* 0xffffffffffffffd2 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-45ll /* 0xffffffffffffffd3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-44ll /* 0xffffffffffffffd4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {-43ll /* 0xffffffffffffffd5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {-42ll /* 0xffffffffffffffd6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-41ll /* 0xffffffffffffffd7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {-40ll /* 0xffffffffffffffd8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {-39ll /* 0xffffffffffffffd9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-38ll /* 0xffffffffffffffda */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-37ll /* 0xffffffffffffffdb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {-36ll /* 0xffffffffffffffdc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {-35ll /* 0xffffffffffffffdd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34ll /* 0xffffffffffffffde */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {-33ll /* 0xffffffffffffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32ll /* 0xffffffffffffffe0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {-31ll /* 0xffffffffffffffe1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-30ll /* 0xffffffffffffffe2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-29ll /* 0xffffffffffffffe3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-28ll /* 0xffffffffffffffe4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-27ll /* 0xffffffffffffffe5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-26ll /* 0xffffffffffffffe6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-25ll /* 0xffffffffffffffe7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-24ll /* 0xffffffffffffffe8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-23ll /* 0xffffffffffffffe9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-22ll /* 0xffffffffffffffea */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-21ll /* 0xffffffffffffffeb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-20ll /* 0xffffffffffffffec */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {-19ll /* 0xffffffffffffffed */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-18ll /* 0xffffffffffffffee */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {-17ll /* 0xffffffffffffffef */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16ll /* 0xfffffffffffffff0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {-15ll /* 0xfffffffffffffff1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-14ll /* 0xfffffffffffffff2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-13ll /* 0xfffffffffffffff3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-12ll /* 0xfffffffffffffff4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-11ll /* 0xfffffffffffffff5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-10ll /* 0xfffffffffffffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9ll /* 0xfffffffffffffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}} /* shl3add r3, r2, r2 */
- },
- {-8ll /* 0xfffffffffffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {-7ll /* 0xfffffffffffffff9 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-6ll /* 0xfffffffffffffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-5ll /* 0xfffffffffffffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}} /* shl2add r3, r2, r2 */
- },
- {-4ll /* 0xfffffffffffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {-3ll /* 0xfffffffffffffffd */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2ll /* 0xfffffffffffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {-1ll /* 0xffffffffffffffff */ ,
- {{2, 0, 1}} /* sub r2, zero, r1 */
- },
- {2ll /* 0x2 */ ,
- {{6, 1, 1}} /* shli r2, r1, 1 */
- },
- {3ll /* 0x3 */ ,
- {{3, 1, 1}} /* shl1add r2, r1, r1 */
- },
- {4ll /* 0x4 */ ,
- {{6, 1, 2}} /* shli r2, r1, 2 */
- },
- {5ll /* 0x5 */ ,
- {{4, 1, 1}} /* shl2add r2, r1, r1 */
- },
- {6ll /* 0x6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {7ll /* 0x7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8ll /* 0x8 */ ,
- {{6, 1, 3}} /* shli r2, r1, 3 */
- },
- {9ll /* 0x9 */ ,
- {{5, 1, 1}} /* shl3add r2, r1, r1 */
- },
- {10ll /* 0xa */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {11ll /* 0xb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}} /* shl1add r3, r2, r1 */
- },
- {12ll /* 0xc */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {13ll /* 0xd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}} /* shl2add r3, r2, r1 */
- },
- {14ll /* 0xe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {15ll /* 0xf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {16ll /* 0x10 */ ,
- {{6, 1, 4}} /* shli r2, r1, 4 */
- },
- {17ll /* 0x11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {18ll /* 0x12 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {19ll /* 0x13 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}} /* shl1add r3, r2, r1 */
- },
- {20ll /* 0x14 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {21ll /* 0x15 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}} /* shl2add r3, r2, r1 */
- },
- {22ll /* 0x16 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {23ll /* 0x17 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {24ll /* 0x18 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {25ll /* 0x19 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}} /* shl3add r3, r2, r1 */
- },
- {26ll /* 0x1a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {27ll /* 0x1b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}} /* shl3add r3, r2, r2 */
- },
- {28ll /* 0x1c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {29ll /* 0x1d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {30ll /* 0x1e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {31ll /* 0x1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {32ll /* 0x20 */ ,
- {{6, 1, 5}} /* shli r2, r1, 5 */
- },
- {33ll /* 0x21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {34ll /* 0x22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {35ll /* 0x23 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36ll /* 0x24 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {37ll /* 0x25 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}} /* shl2add r3, r2, r1 */
- },
- {38ll /* 0x26 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {39ll /* 0x27 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {40ll /* 0x28 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {41ll /* 0x29 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}} /* shl3add r3, r2, r1 */
- },
- {42ll /* 0x2a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {43ll /* 0x2b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {44ll /* 0x2c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {45ll /* 0x2d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}} /* shl3add r3, r2, r2 */
- },
- {46ll /* 0x2e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {47ll /* 0x2f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {48ll /* 0x30 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {49ll /* 0x31 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {50ll /* 0x32 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {51ll /* 0x33 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {52ll /* 0x34 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {53ll /* 0x35 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {54ll /* 0x36 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {55ll /* 0x37 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {56ll /* 0x38 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {57ll /* 0x39 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {58ll /* 0x3a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {59ll /* 0x3b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {60ll /* 0x3c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {61ll /* 0x3d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {62ll /* 0x3e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {63ll /* 0x3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {64ll /* 0x40 */ ,
- {{6, 1, 6}} /* shli r2, r1, 6 */
- },
- {65ll /* 0x41 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {66ll /* 0x42 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {67ll /* 0x43 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68ll /* 0x44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {69ll /* 0x45 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70ll /* 0x46 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {71ll /* 0x47 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {72ll /* 0x48 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {73ll /* 0x49 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}} /* shl3add r3, r2, r1 */
- },
- {74ll /* 0x4a */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {75ll /* 0x4b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {76ll /* 0x4c */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {77ll /* 0x4d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {78ll /* 0x4e */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {79ll /* 0x4f */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {80ll /* 0x50 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {81ll /* 0x51 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}} /* shl3add r3, r2, r2 */
- },
- {82ll /* 0x52 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {83ll /* 0x53 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 1}} /* shl1add r4, r3, r1 */
- },
- {84ll /* 0x54 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {85ll /* 0x55 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {86ll /* 0x56 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {87ll /* 0x57 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {88ll /* 0x58 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {89ll /* 0x59 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {90ll /* 0x5a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {91ll /* 0x5b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {3, 3, 1}} /* shl1add r4, r3, r1 */
- },
- {92ll /* 0x5c */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {93ll /* 0x5d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {94ll /* 0x5e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {95ll /* 0x5f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {96ll /* 0x60 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {97ll /* 0x61 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {98ll /* 0x62 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {99ll /* 0x63 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {100ll /* 0x64 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {101ll /* 0x65 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 1}} /* shl2add r4, r3, r1 */
- },
- {102ll /* 0x66 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {103ll /* 0x67 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {104ll /* 0x68 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {105ll /* 0x69 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {106ll /* 0x6a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {107ll /* 0x6b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {108ll /* 0x6c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {109ll /* 0x6d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 1}} /* shl2add r4, r3, r1 */
- },
- {110ll /* 0x6e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {111ll /* 0x6f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {112ll /* 0x70 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {113ll /* 0x71 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {114ll /* 0x72 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {115ll /* 0x73 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {116ll /* 0x74 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {117ll /* 0x75 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {118ll /* 0x76 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {119ll /* 0x77 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {120ll /* 0x78 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {121ll /* 0x79 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {122ll /* 0x7a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {123ll /* 0x7b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {124ll /* 0x7c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {125ll /* 0x7d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {126ll /* 0x7e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {127ll /* 0x7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {128ll /* 0x80 */ ,
- {{6, 1, 7}} /* shli r2, r1, 7 */
- },
- {129ll /* 0x81 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {130ll /* 0x82 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {131ll /* 0x83 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {132ll /* 0x84 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {133ll /* 0x85 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134ll /* 0x86 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {135ll /* 0x87 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {136ll /* 0x88 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {137ll /* 0x89 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {138ll /* 0x8a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {139ll /* 0x8b */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {140ll /* 0x8c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {141ll /* 0x8d */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {142ll /* 0x8e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {143ll /* 0x8f */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {144ll /* 0x90 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {145ll /* 0x91 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {146ll /* 0x92 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {147ll /* 0x93 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 1}} /* shl1add r4, r3, r1 */
- },
- {148ll /* 0x94 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {149ll /* 0x95 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 1}} /* shl2add r4, r3, r1 */
- },
- {150ll /* 0x96 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {151ll /* 0x97 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {152ll /* 0x98 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {153ll /* 0x99 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {154ll /* 0x9a */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {155ll /* 0x9b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {156ll /* 0x9c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {157ll /* 0x9d */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {158ll /* 0x9e */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {159ll /* 0x9f */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {160ll /* 0xa0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {161ll /* 0xa1 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {162ll /* 0xa2 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {163ll /* 0xa3 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {3, 3, 1}} /* shl1add r4, r3, r1 */
- },
- {164ll /* 0xa4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {165ll /* 0xa5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {166ll /* 0xa6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {167ll /* 0xa7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {168ll /* 0xa8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {169ll /* 0xa9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {170ll /* 0xaa */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {171ll /* 0xab */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {172ll /* 0xac */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {173ll /* 0xad */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {174ll /* 0xae */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {175ll /* 0xaf */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {176ll /* 0xb0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {177ll /* 0xb1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {178ll /* 0xb2 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {179ll /* 0xb3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {180ll /* 0xb4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {181ll /* 0xb5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 1}} /* shl2add r4, r3, r1 */
- },
- {182ll /* 0xb6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {183ll /* 0xb7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {184ll /* 0xb8 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {185ll /* 0xb9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {186ll /* 0xba */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {187ll /* 0xbb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {188ll /* 0xbc */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {189ll /* 0xbd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {190ll /* 0xbe */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {191ll /* 0xbf */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {192ll /* 0xc0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {193ll /* 0xc1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {194ll /* 0xc2 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {195ll /* 0xc3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {196ll /* 0xc4 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {197ll /* 0xc5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {198ll /* 0xc6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {199ll /* 0xc7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {200ll /* 0xc8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {201ll /* 0xc9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {202ll /* 0xca */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {203ll /* 0xcb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {204ll /* 0xcc */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {205ll /* 0xcd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {206ll /* 0xce */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {207ll /* 0xcf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {208ll /* 0xd0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {209ll /* 0xd1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {210ll /* 0xd2 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {211ll /* 0xd3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {212ll /* 0xd4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {213ll /* 0xd5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {214ll /* 0xd6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {215ll /* 0xd7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {216ll /* 0xd8 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {217ll /* 0xd9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {218ll /* 0xda */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {219ll /* 0xdb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {220ll /* 0xdc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {221ll /* 0xdd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {222ll /* 0xde */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {223ll /* 0xdf */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {224ll /* 0xe0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {225ll /* 0xe1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {226ll /* 0xe2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {227ll /* 0xe3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {228ll /* 0xe4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {229ll /* 0xe5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {230ll /* 0xe6 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {231ll /* 0xe7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 8}, /* shli r4, r1, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {232ll /* 0xe8 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {233ll /* 0xe9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {234ll /* 0xea */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {235ll /* 0xeb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {236ll /* 0xec */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {237ll /* 0xed */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {238ll /* 0xee */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {239ll /* 0xef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {240ll /* 0xf0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {241ll /* 0xf1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {242ll /* 0xf2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {243ll /* 0xf3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {244ll /* 0xf4 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {245ll /* 0xf5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {246ll /* 0xf6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {247ll /* 0xf7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {248ll /* 0xf8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {249ll /* 0xf9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {250ll /* 0xfa */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {251ll /* 0xfb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {252ll /* 0xfc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {253ll /* 0xfd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {254ll /* 0xfe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {255ll /* 0xff */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {256ll /* 0x100 */ ,
- {{6, 1, 8}} /* shli r2, r1, 8 */
- },
- {257ll /* 0x101 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {258ll /* 0x102 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {259ll /* 0x103 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {260ll /* 0x104 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {261ll /* 0x105 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262ll /* 0x106 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {263ll /* 0x107 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {264ll /* 0x108 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {265ll /* 0x109 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {266ll /* 0x10a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {267ll /* 0x10b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {268ll /* 0x10c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {269ll /* 0x10d */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {270ll /* 0x10e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {271ll /* 0x10f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {272ll /* 0x110 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {273ll /* 0x111 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {274ll /* 0x112 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {275ll /* 0x113 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {276ll /* 0x114 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {277ll /* 0x115 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {278ll /* 0x116 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {279ll /* 0x117 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {280ll /* 0x118 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {281ll /* 0x119 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {282ll /* 0x11a */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {283ll /* 0x11b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {284ll /* 0x11c */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {285ll /* 0x11d */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {286ll /* 0x11e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {287ll /* 0x11f */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {288ll /* 0x120 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {289ll /* 0x121 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {290ll /* 0x122 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {291ll /* 0x123 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {292ll /* 0x124 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {293ll /* 0x125 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 1}} /* shl2add r4, r3, r1 */
- },
- {294ll /* 0x126 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {295ll /* 0x127 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {296ll /* 0x128 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {297ll /* 0x129 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {298ll /* 0x12a */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {299ll /* 0x12b */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {300ll /* 0x12c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {301ll /* 0x12d */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {302ll /* 0x12e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {303ll /* 0x12f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {304ll /* 0x130 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {305ll /* 0x131 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {306ll /* 0x132 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {307ll /* 0x133 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {308ll /* 0x134 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {309ll /* 0x135 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {310ll /* 0x136 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {311ll /* 0x137 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {312ll /* 0x138 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {313ll /* 0x139 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {314ll /* 0x13a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {315ll /* 0x13b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {316ll /* 0x13c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {317ll /* 0x13d */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {318ll /* 0x13e */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {319ll /* 0x13f */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {320ll /* 0x140 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {321ll /* 0x141 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {322ll /* 0x142 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {323ll /* 0x143 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {324ll /* 0x144 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {325ll /* 0x145 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {326ll /* 0x146 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {327ll /* 0x147 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {328ll /* 0x148 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {329ll /* 0x149 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {330ll /* 0x14a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {331ll /* 0x14b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {332ll /* 0x14c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {333ll /* 0x14d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {334ll /* 0x14e */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {335ll /* 0x14f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {336ll /* 0x150 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {337ll /* 0x151 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {338ll /* 0x152 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {339ll /* 0x153 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {340ll /* 0x154 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {341ll /* 0x155 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {342ll /* 0x156 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {343ll /* 0x157 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {344ll /* 0x158 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {345ll /* 0x159 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {346ll /* 0x15a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {347ll /* 0x15b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {348ll /* 0x15c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 2}, /* shli r4, r2, 2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {349ll /* 0x15d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {350ll /* 0x15e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {351ll /* 0x15f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {352ll /* 0x160 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {353ll /* 0x161 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {354ll /* 0x162 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {355ll /* 0x163 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {356ll /* 0x164 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {357ll /* 0x165 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {358ll /* 0x166 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {359ll /* 0x167 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {360ll /* 0x168 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {361ll /* 0x169 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {362ll /* 0x16a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {363ll /* 0x16b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {364ll /* 0x16c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 2}, /* shli r4, r1, 2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {365ll /* 0x16d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {366ll /* 0x16e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {367ll /* 0x16f */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {368ll /* 0x170 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {369ll /* 0x171 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {370ll /* 0x172 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {371ll /* 0x173 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {372ll /* 0x174 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {373ll /* 0x175 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {374ll /* 0x176 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {375ll /* 0x177 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {376ll /* 0x178 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {377ll /* 0x179 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {378ll /* 0x17a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {379ll /* 0x17b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {380ll /* 0x17c */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {381ll /* 0x17d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {382ll /* 0x17e */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {383ll /* 0x17f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {384ll /* 0x180 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {385ll /* 0x181 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {386ll /* 0x182 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {387ll /* 0x183 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {388ll /* 0x184 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {389ll /* 0x185 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {390ll /* 0x186 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {391ll /* 0x187 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {392ll /* 0x188 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {393ll /* 0x189 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {394ll /* 0x18a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {395ll /* 0x18b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {396ll /* 0x18c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {397ll /* 0x18d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {398ll /* 0x18e */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {399ll /* 0x18f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {400ll /* 0x190 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {401ll /* 0x191 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {402ll /* 0x192 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {403ll /* 0x193 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {404ll /* 0x194 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {4, 1, 2}, /* shl2add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {405ll /* 0x195 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {406ll /* 0x196 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {407ll /* 0x197 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {408ll /* 0x198 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {409ll /* 0x199 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {410ll /* 0x19a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {411ll /* 0x19b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {412ll /* 0x19c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {413ll /* 0x19d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {414ll /* 0x19e */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {415ll /* 0x19f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {416ll /* 0x1a0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {417ll /* 0x1a1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {418ll /* 0x1a2 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {419ll /* 0x1a3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {420ll /* 0x1a4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {421ll /* 0x1a5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {422ll /* 0x1a6 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {423ll /* 0x1a7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {424ll /* 0x1a8 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {425ll /* 0x1a9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {426ll /* 0x1aa */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {427ll /* 0x1ab */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {428ll /* 0x1ac */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {429ll /* 0x1ad */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {430ll /* 0x1ae */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {431ll /* 0x1af */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {432ll /* 0x1b0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {433ll /* 0x1b1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {434ll /* 0x1b2 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {435ll /* 0x1b3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {436ll /* 0x1b4 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {437ll /* 0x1b5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {438ll /* 0x1b6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {439ll /* 0x1b7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {440ll /* 0x1b8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {441ll /* 0x1b9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {442ll /* 0x1ba */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {443ll /* 0x1bb */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {444ll /* 0x1bc */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {445ll /* 0x1bd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {446ll /* 0x1be */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {447ll /* 0x1bf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {448ll /* 0x1c0 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {449ll /* 0x1c1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {450ll /* 0x1c2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {451ll /* 0x1c3 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {452ll /* 0x1c4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {453ll /* 0x1c5 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {454ll /* 0x1c6 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {455ll /* 0x1c7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {456ll /* 0x1c8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {457ll /* 0x1c9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {458ll /* 0x1ca */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {459ll /* 0x1cb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {460ll /* 0x1cc */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {461ll /* 0x1cd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {462ll /* 0x1ce */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {463ll /* 0x1cf */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {464ll /* 0x1d0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {465ll /* 0x1d1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {467ll /* 0x1d3 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {468ll /* 0x1d4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {469ll /* 0x1d5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {470ll /* 0x1d6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {471ll /* 0x1d7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {472ll /* 0x1d8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {473ll /* 0x1d9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {475ll /* 0x1db */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {476ll /* 0x1dc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {477ll /* 0x1dd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {478ll /* 0x1de */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {479ll /* 0x1df */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {480ll /* 0x1e0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {481ll /* 0x1e1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {482ll /* 0x1e2 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {483ll /* 0x1e3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {484ll /* 0x1e4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {485ll /* 0x1e5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {486ll /* 0x1e6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {487ll /* 0x1e7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {488ll /* 0x1e8 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {489ll /* 0x1e9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {490ll /* 0x1ea */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {491ll /* 0x1eb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {492ll /* 0x1ec */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {493ll /* 0x1ed */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {494ll /* 0x1ee */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {495ll /* 0x1ef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {496ll /* 0x1f0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {497ll /* 0x1f1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {498ll /* 0x1f2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {499ll /* 0x1f3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {500ll /* 0x1f4 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {501ll /* 0x1f5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {502ll /* 0x1f6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {503ll /* 0x1f7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {504ll /* 0x1f8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {505ll /* 0x1f9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {506ll /* 0x1fa */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {507ll /* 0x1fb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {508ll /* 0x1fc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {509ll /* 0x1fd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {510ll /* 0x1fe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {511ll /* 0x1ff */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {512ll /* 0x200 */ ,
- {{6, 1, 9}} /* shli r2, r1, 9 */
- },
- {513ll /* 0x201 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {514ll /* 0x202 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {515ll /* 0x203 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {516ll /* 0x204 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {517ll /* 0x205 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {518ll /* 0x206 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {519ll /* 0x207 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {520ll /* 0x208 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {521ll /* 0x209 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {522ll /* 0x20a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {523ll /* 0x20b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {524ll /* 0x20c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {525ll /* 0x20d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {526ll /* 0x20e */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {527ll /* 0x20f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {528ll /* 0x210 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {529ll /* 0x211 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {530ll /* 0x212 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {531ll /* 0x213 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {532ll /* 0x214 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {533ll /* 0x215 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {534ll /* 0x216 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {535ll /* 0x217 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {536ll /* 0x218 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {537ll /* 0x219 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {538ll /* 0x21a */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {539ll /* 0x21b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {540ll /* 0x21c */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {541ll /* 0x21d */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {542ll /* 0x21e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {543ll /* 0x21f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {544ll /* 0x220 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {545ll /* 0x221 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {546ll /* 0x222 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {547ll /* 0x223 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {548ll /* 0x224 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {549ll /* 0x225 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {550ll /* 0x226 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {551ll /* 0x227 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {552ll /* 0x228 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {553ll /* 0x229 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {554ll /* 0x22a */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {555ll /* 0x22b */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {556ll /* 0x22c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {557ll /* 0x22d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {558ll /* 0x22e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {559ll /* 0x22f */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {560ll /* 0x230 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {561ll /* 0x231 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {562ll /* 0x232 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {563ll /* 0x233 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {564ll /* 0x234 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {565ll /* 0x235 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {566ll /* 0x236 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {567ll /* 0x237 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {568ll /* 0x238 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {569ll /* 0x239 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {570ll /* 0x23a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {571ll /* 0x23b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {572ll /* 0x23c */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {573ll /* 0x23d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {574ll /* 0x23e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {575ll /* 0x23f */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {576ll /* 0x240 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {577ll /* 0x241 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {578ll /* 0x242 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {579ll /* 0x243 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {580ll /* 0x244 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {581ll /* 0x245 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {582ll /* 0x246 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {583ll /* 0x247 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {584ll /* 0x248 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {585ll /* 0x249 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {586ll /* 0x24a */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {587ll /* 0x24b */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {588ll /* 0x24c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {589ll /* 0x24d */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {590ll /* 0x24e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {591ll /* 0x24f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {592ll /* 0x250 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {593ll /* 0x251 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {594ll /* 0x252 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {595ll /* 0x253 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {596ll /* 0x254 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {597ll /* 0x255 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {598ll /* 0x256 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {599ll /* 0x257 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {600ll /* 0x258 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {601ll /* 0x259 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {602ll /* 0x25a */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {603ll /* 0x25b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {604ll /* 0x25c */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {605ll /* 0x25d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {606ll /* 0x25e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {607ll /* 0x25f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {608ll /* 0x260 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {609ll /* 0x261 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {610ll /* 0x262 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {611ll /* 0x263 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {612ll /* 0x264 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {613ll /* 0x265 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {614ll /* 0x266 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {615ll /* 0x267 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {616ll /* 0x268 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {617ll /* 0x269 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {619ll /* 0x26b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {620ll /* 0x26c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {621ll /* 0x26d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {623ll /* 0x26f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {624ll /* 0x270 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {625ll /* 0x271 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {626ll /* 0x272 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {627ll /* 0x273 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {628ll /* 0x274 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {629ll /* 0x275 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {630ll /* 0x276 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {631ll /* 0x277 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {632ll /* 0x278 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {633ll /* 0x279 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {634ll /* 0x27a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {635ll /* 0x27b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {636ll /* 0x27c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {637ll /* 0x27d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {638ll /* 0x27e */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {639ll /* 0x27f */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {640ll /* 0x280 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {641ll /* 0x281 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {642ll /* 0x282 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {643ll /* 0x283 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {644ll /* 0x284 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {645ll /* 0x285 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {646ll /* 0x286 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {647ll /* 0x287 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {648ll /* 0x288 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {649ll /* 0x289 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {650ll /* 0x28a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {651ll /* 0x28b */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {652ll /* 0x28c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {653ll /* 0x28d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {654ll /* 0x28e */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {655ll /* 0x28f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {656ll /* 0x290 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {657ll /* 0x291 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {658ll /* 0x292 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {659ll /* 0x293 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {660ll /* 0x294 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {661ll /* 0x295 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {662ll /* 0x296 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {663ll /* 0x297 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {664ll /* 0x298 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {665ll /* 0x299 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {666ll /* 0x29a */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {667ll /* 0x29b */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {668ll /* 0x29c */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {669ll /* 0x29d */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 1}, /* shl1add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {670ll /* 0x29e */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {671ll /* 0x29f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {672ll /* 0x2a0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {673ll /* 0x2a1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {674ll /* 0x2a2 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {675ll /* 0x2a3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {676ll /* 0x2a4 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {677ll /* 0x2a5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {679ll /* 0x2a7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 2, 4}} /* shl3add r5, r2, r4 */
- },
- {680ll /* 0x2a8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {681ll /* 0x2a9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {682ll /* 0x2aa */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {684ll /* 0x2ac */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 2}, /* shli r4, r2, 2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {685ll /* 0x2ad */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {688ll /* 0x2b0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 1, 1}, /* shl2add r3, r1, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {689ll /* 0x2b1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {690ll /* 0x2b2 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {692ll /* 0x2b4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {693ll /* 0x2b5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 1}, /* shl3add r3, r1, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {694ll /* 0x2b6 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 3}, /* shl2add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {695ll /* 0x2b7 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {696ll /* 0x2b8 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {697ll /* 0x2b9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {699ll /* 0x2bb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {700ll /* 0x2bc */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {701ll /* 0x2bd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {702ll /* 0x2be */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {703ll /* 0x2bf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {704ll /* 0x2c0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {705ll /* 0x2c1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {706ll /* 0x2c2 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {707ll /* 0x2c3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {708ll /* 0x2c4 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {709ll /* 0x2c5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {710ll /* 0x2c6 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {711ll /* 0x2c7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {712ll /* 0x2c8 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {713ll /* 0x2c9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {714ll /* 0x2ca */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 3}, /* shl2add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {715ll /* 0x2cb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {716ll /* 0x2cc */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {717ll /* 0x2cd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {719ll /* 0x2cf */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 4, 1}} /* sub r5, r4, r1 */
- },
- {720ll /* 0x2d0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {721ll /* 0x2d1 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {722ll /* 0x2d2 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {723ll /* 0x2d3 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {724ll /* 0x2d4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {725ll /* 0x2d5 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {726ll /* 0x2d6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {727ll /* 0x2d7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {728ll /* 0x2d8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {729ll /* 0x2d9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}} /* shl3add r4, r3, r3 */
- },
- {730ll /* 0x2da */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {731ll /* 0x2db */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {3, 4, 1}} /* shl1add r5, r4, r1 */
- },
- {733ll /* 0x2dd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {735ll /* 0x2df */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {736ll /* 0x2e0 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {737ll /* 0x2e1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {738ll /* 0x2e2 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {739ll /* 0x2e3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {740ll /* 0x2e4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {741ll /* 0x2e5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {743ll /* 0x2e7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {744ll /* 0x2e8 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {745ll /* 0x2e9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {747ll /* 0x2eb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {748ll /* 0x2ec */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {749ll /* 0x2ed */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {750ll /* 0x2ee */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {752ll /* 0x2f0 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {753ll /* 0x2f1 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {755ll /* 0x2f3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {756ll /* 0x2f4 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {757ll /* 0x2f5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {758ll /* 0x2f6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {759ll /* 0x2f7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {760ll /* 0x2f8 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {761ll /* 0x2f9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {762ll /* 0x2fa */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {763ll /* 0x2fb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {764ll /* 0x2fc */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {765ll /* 0x2fd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {766ll /* 0x2fe */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {767ll /* 0x2ff */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {768ll /* 0x300 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {769ll /* 0x301 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {770ll /* 0x302 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {771ll /* 0x303 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {772ll /* 0x304 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {773ll /* 0x305 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {774ll /* 0x306 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {775ll /* 0x307 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {776ll /* 0x308 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {777ll /* 0x309 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {778ll /* 0x30a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {779ll /* 0x30b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {780ll /* 0x30c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {781ll /* 0x30d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {782ll /* 0x30e */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {783ll /* 0x30f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {784ll /* 0x310 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {785ll /* 0x311 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 1, 2}, /* shl3add r4, r1, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {786ll /* 0x312 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {787ll /* 0x313 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 1, 3}, /* shl1add r4, r1, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {788ll /* 0x314 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {789ll /* 0x315 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 2, 4}} /* shl3add r5, r2, r4 */
- },
- {790ll /* 0x316 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {791ll /* 0x317 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {792ll /* 0x318 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {793ll /* 0x319 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {794ll /* 0x31a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {795ll /* 0x31b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {796ll /* 0x31c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {797ll /* 0x31d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {798ll /* 0x31e */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {799ll /* 0x31f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {800ll /* 0x320 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {801ll /* 0x321 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {802ll /* 0x322 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {803ll /* 0x323 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {804ll /* 0x324 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {4, 1, 2}, /* shl2add r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {805ll /* 0x325 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {806ll /* 0x326 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {807ll /* 0x327 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {808ll /* 0x328 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {809ll /* 0x329 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}, /* shl2add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {810ll /* 0x32a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {811ll /* 0x32b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {812ll /* 0x32c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {813ll /* 0x32d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {815ll /* 0x32f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {816ll /* 0x330 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {817ll /* 0x331 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {818ll /* 0x332 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {819ll /* 0x333 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {820ll /* 0x334 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {821ll /* 0x335 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {822ll /* 0x336 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {823ll /* 0x337 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {824ll /* 0x338 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {825ll /* 0x339 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {827ll /* 0x33b */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {828ll /* 0x33c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {829ll /* 0x33d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {831ll /* 0x33f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {832ll /* 0x340 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {833ll /* 0x341 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {834ll /* 0x342 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 2}, /* shl1add r4, r2, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {835ll /* 0x343 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {836ll /* 0x344 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* shl3add r4, r2, r2 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {837ll /* 0x345 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {838ll /* 0x346 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {840ll /* 0x348 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {841ll /* 0x349 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {842ll /* 0x34a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {843ll /* 0x34b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {844ll /* 0x34c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {845ll /* 0x34d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {846ll /* 0x34e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {848ll /* 0x350 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 2, 2}, /* shl2add r4, r2, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {849ll /* 0x351 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {850ll /* 0x352 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {852ll /* 0x354 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {853ll /* 0x355 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {855ll /* 0x357 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {856ll /* 0x358 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {857ll /* 0x359 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {858ll /* 0x35a */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {859ll /* 0x35b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {861ll /* 0x35d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {862ll /* 0x35e */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {863ll /* 0x35f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 1}} /* sub r5, r4, r1 */
- },
- {864ll /* 0x360 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {865ll /* 0x361 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 1, 4}} /* add r5, r1, r4 */
- },
- {866ll /* 0x362 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {867ll /* 0x363 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {868ll /* 0x364 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {869ll /* 0x365 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {870ll /* 0x366 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {871ll /* 0x367 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {872ll /* 0x368 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {873ll /* 0x369 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {875ll /* 0x36b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {876ll /* 0x36c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {877ll /* 0x36d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {879ll /* 0x36f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {880ll /* 0x370 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {881ll /* 0x371 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 2}, /* shl1add r3, r2, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {882ll /* 0x372 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {884ll /* 0x374 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {885ll /* 0x375 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {888ll /* 0x378 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {889ll /* 0x379 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {890ll /* 0x37a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {891ll /* 0x37b */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {892ll /* 0x37c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {893ll /* 0x37d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {894ll /* 0x37e */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {895ll /* 0x37f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {896ll /* 0x380 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {897ll /* 0x381 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {898ll /* 0x382 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {899ll /* 0x383 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {900ll /* 0x384 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {901ll /* 0x385 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {902ll /* 0x386 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {903ll /* 0x387 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {904ll /* 0x388 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {905ll /* 0x389 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {906ll /* 0x38a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {908ll /* 0x38c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {3, 3, 3}, /* shl1add r4, r3, r3 */
- {3, 4, 2}} /* shl1add r5, r4, r2 */
- },
- {909ll /* 0x38d */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {910ll /* 0x38e */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {911ll /* 0x38f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {912ll /* 0x390 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {913ll /* 0x391 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* shl1add r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {915ll /* 0x393 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {916ll /* 0x394 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {917ll /* 0x395 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 3, 2}, /* shl3add r4, r3, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {918ll /* 0x396 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {919ll /* 0x397 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {920ll /* 0x398 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {924ll /* 0x39c */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {925ll /* 0x39d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {927ll /* 0x39f */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {4, 3, 2}, /* shl2add r4, r3, r2 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {928ll /* 0x3a0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {929ll /* 0x3a1 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* shl2add r4, r1, r2 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {932ll /* 0x3a4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {4, 4, 2}} /* shl2add r5, r4, r2 */
- },
- {935ll /* 0x3a7 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {936ll /* 0x3a8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}, /* shl3add r4, r2, r3 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {937ll /* 0x3a9 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {939ll /* 0x3ab */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {941ll /* 0x3ad */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {943ll /* 0x3af */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {944ll /* 0x3b0 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {945ll /* 0x3b1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {948ll /* 0x3b4 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {949ll /* 0x3b5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {950ll /* 0x3b6 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {951ll /* 0x3b7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {952ll /* 0x3b8 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {953ll /* 0x3b9 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {955ll /* 0x3bb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {4, 4, 4}} /* shl2add r5, r4, r4 */
- },
- {956ll /* 0x3bc */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {957ll /* 0x3bd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {958ll /* 0x3be */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {959ll /* 0x3bf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {960ll /* 0x3c0 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {961ll /* 0x3c1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {962ll /* 0x3c2 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {963ll /* 0x3c3 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {964ll /* 0x3c4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {4, 3, 4}} /* shl2add r5, r3, r4 */
- },
- {965ll /* 0x3c5 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {966ll /* 0x3c6 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 3, 2}, /* shl1add r4, r3, r2 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {967ll /* 0x3c7 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {968ll /* 0x3c8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {5, 3, 4}} /* shl3add r5, r3, r4 */
- },
- {969ll /* 0x3c9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* shl1add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {970ll /* 0x3ca */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {971ll /* 0x3cb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 2}, /* shl2add r3, r2, r2 */
- {5, 3, 1}, /* shl3add r4, r3, r1 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {972ll /* 0x3cc */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {973ll /* 0x3cd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {5, 3, 3}, /* shl3add r4, r3, r3 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {975ll /* 0x3cf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {976ll /* 0x3d0 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {979ll /* 0x3d3 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {980ll /* 0x3d4 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}, /* shl1add r4, r2, r3 */
- {3, 4, 3}} /* shl1add r5, r4, r3 */
- },
- {981ll /* 0x3d5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {4, 3, 1}, /* shl2add r4, r3, r1 */
- {5, 4, 4}} /* shl3add r5, r4, r4 */
- },
- {983ll /* 0x3d7 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {984ll /* 0x3d8 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {985ll /* 0x3d9 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* shl3add r5, r4, r1 */
- },
- {987ll /* 0x3db */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {988ll /* 0x3dc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {989ll /* 0x3dd */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {990ll /* 0x3de */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {991ll /* 0x3df */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {992ll /* 0x3e0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {993ll /* 0x3e1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {994ll /* 0x3e2 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* shl1add r5, r3, r4 */
- },
- {996ll /* 0x3e4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {997ll /* 0x3e5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* shl3add r4, r2, r1 */
- {4, 4, 3}} /* shl2add r5, r4, r3 */
- },
- {999ll /* 0x3e7 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1000ll /* 0x3e8 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {1001ll /* 0x3e9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* shl2add r4, r2, r1 */
- {5, 4, 3}} /* shl3add r5, r4, r3 */
- },
- {1003ll /* 0x3eb */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {1004ll /* 0x3ec */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {1005ll /* 0x3ed */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {1006ll /* 0x3ee */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1007ll /* 0x3ef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1008ll /* 0x3f0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1009ll /* 0x3f1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {1010ll /* 0x3f2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* shl3add r5, r4, r2 */
- },
- {1011ll /* 0x3f3 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1012ll /* 0x3f4 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {1013ll /* 0x3f5 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* shl2add r5, r4, r1 */
- },
- {1014ll /* 0x3f6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1015ll /* 0x3f7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1016ll /* 0x3f8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1017ll /* 0x3f9 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1018ll /* 0x3fa */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {1019ll /* 0x3fb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1020ll /* 0x3fc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1021ll /* 0x3fd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1022ll /* 0x3fe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1023ll /* 0x3ff */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1024ll /* 0x400 */ ,
- {{6, 1, 10}} /* shli r2, r1, 10 */
- },
- {1025ll /* 0x401 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1026ll /* 0x402 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {1027ll /* 0x403 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1028ll /* 0x404 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {1029ll /* 0x405 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1030ll /* 0x406 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1031ll /* 0x407 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {1032ll /* 0x408 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {1033ll /* 0x409 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1034ll /* 0x40a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1036ll /* 0x40c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {1040ll /* 0x410 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1041ll /* 0x411 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1042ll /* 0x412 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1044ll /* 0x414 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {1048ll /* 0x418 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {1056ll /* 0x420 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1057ll /* 0x421 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* shl2add r3, r1, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1060ll /* 0x424 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {1064ll /* 0x428 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {1088ll /* 0x440 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1089ll /* 0x441 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* shl3add r3, r1, r2 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1090ll /* 0x442 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {3, 3, 2}} /* shl1add r4, r3, r2 */
- },
- {1092ll /* 0x444 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {1096ll /* 0x448 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {1152ll /* 0x480 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {1280ll /* 0x500 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {1312ll /* 0x520 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {1320ll /* 0x528 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {1344ll /* 0x540 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {1536ll /* 0x600 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {1664ll /* 0x680 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 7}} /* shli r4, r3, 7 */
- },
- {2039ll /* 0x7f7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2040ll /* 0x7f8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2041ll /* 0x7f9 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {2043ll /* 0x7fb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2044ll /* 0x7fc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2045ll /* 0x7fd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2046ll /* 0x7fe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2047ll /* 0x7ff */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2048ll /* 0x800 */ ,
- {{6, 1, 11}} /* shli r2, r1, 11 */
- },
- {2049ll /* 0x801 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2050ll /* 0x802 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {2051ll /* 0x803 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2052ll /* 0x804 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {2053ll /* 0x805 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2054ll /* 0x806 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2055ll /* 0x807 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {2056ll /* 0x808 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {2057ll /* 0x809 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2058ll /* 0x80a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2064ll /* 0x810 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2080ll /* 0x820 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2112ll /* 0x840 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2176ll /* 0x880 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2184ll /* 0x888 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {2304ll /* 0x900 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {2320ll /* 0x910 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {5, 3, 2}} /* shl3add r4, r3, r2 */
- },
- {2560ll /* 0xa00 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {2592ll /* 0xa20 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {2880ll /* 0xb40 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {3072ll /* 0xc00 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {3328ll /* 0xd00 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 8}} /* shli r4, r3, 8 */
- },
- {4087ll /* 0xff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4088ll /* 0xff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4089ll /* 0xff9 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {4091ll /* 0xffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4092ll /* 0xffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4093ll /* 0xffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4094ll /* 0xffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4095ll /* 0xfff */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4096ll /* 0x1000 */ ,
- {{6, 1, 12}} /* shli r2, r1, 12 */
- },
- {4097ll /* 0x1001 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4098ll /* 0x1002 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {4099ll /* 0x1003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4100ll /* 0x1004 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {4101ll /* 0x1005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4102ll /* 0x1006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4103ll /* 0x1007 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {4104ll /* 0x1008 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {4105ll /* 0x1009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4106ll /* 0x100a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4108ll /* 0x100c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {4112ll /* 0x1010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4128ll /* 0x1020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4160ll /* 0x1040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4224ll /* 0x1080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4352ll /* 0x1100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4608ll /* 0x1200 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {4864ll /* 0x1300 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {3, 2, 1}, /* shl1add r3, r2, r1 */
- {6, 3, 8}} /* shli r4, r3, 8 */
- },
- {5120ll /* 0x1400 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {6144ll /* 0x1800 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {6400ll /* 0x1900 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 8}} /* shli r4, r3, 8 */
- },
- {6656ll /* 0x1a00 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {4, 2, 1}, /* shl2add r3, r2, r1 */
- {6, 3, 9}} /* shli r4, r3, 9 */
- },
- {7169ll /* 0x1c01 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* shl3add r4, r2, r3 */
- },
- {8183ll /* 0x1ff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8184ll /* 0x1ff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8185ll /* 0x1ff9 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {8187ll /* 0x1ffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8188ll /* 0x1ffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8189ll /* 0x1ffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8190ll /* 0x1ffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8191ll /* 0x1fff */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8192ll /* 0x2000 */ ,
- {{6, 1, 13}} /* shli r2, r1, 13 */
- },
- {8193ll /* 0x2001 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {8194ll /* 0x2002 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {8195ll /* 0x2003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8196ll /* 0x2004 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {8197ll /* 0x2005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8198ll /* 0x2006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8199ll /* 0x2007 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {8200ll /* 0x2008 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {8201ll /* 0x2009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8202ll /* 0x200a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8204ll /* 0x200c */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {4, 2, 3}} /* shl2add r4, r2, r3 */
- },
- {8208ll /* 0x2010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8224ll /* 0x2020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8256ll /* 0x2040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8320ll /* 0x2080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8448ll /* 0x2100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8704ll /* 0x2200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9216ll /* 0x2400 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {9217ll /* 0x2401 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {10240ll /* 0x2800 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {10248ll /* 0x2808 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {3, 1, 2}, /* shl1add r3, r1, r2 */
- {4, 3, 2}} /* shl2add r4, r3, r2 */
- },
- {10368ll /* 0x2880 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 7}} /* shli r4, r3, 7 */
- },
- {12288ll /* 0x3000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {16375ll /* 0x3ff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16376ll /* 0x3ff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16377ll /* 0x3ff9 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {16379ll /* 0x3ffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16380ll /* 0x3ffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16381ll /* 0x3ffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16382ll /* 0x3ffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16383ll /* 0x3fff */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {16384ll /* 0x4000 */ ,
- {{6, 1, 14}} /* shli r2, r1, 14 */
- },
- {16385ll /* 0x4001 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {16386ll /* 0x4002 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {16387ll /* 0x4003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16388ll /* 0x4004 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {16389ll /* 0x4005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16390ll /* 0x4006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {16391ll /* 0x4007 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {16392ll /* 0x4008 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {16393ll /* 0x4009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16394ll /* 0x400a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {16400ll /* 0x4010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16416ll /* 0x4020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16448ll /* 0x4040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16512ll /* 0x4080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16640ll /* 0x4100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16896ll /* 0x4200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17408ll /* 0x4400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18432ll /* 0x4800 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {20480ll /* 0x5000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {24576ll /* 0x6000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {25600ll /* 0x6400 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {5, 2, 1}, /* shl3add r3, r2, r1 */
- {6, 3, 10}} /* shli r4, r3, 10 */
- },
- {32759ll /* 0x7ff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32760ll /* 0x7ff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32761ll /* 0x7ff9 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {32763ll /* 0x7ffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32764ll /* 0x7ffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32765ll /* 0x7ffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32766ll /* 0x7ffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32767ll /* 0x7fff */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {32768ll /* 0x8000 */ ,
- {{6, 1, 15}} /* shli r2, r1, 15 */
- },
- {32769ll /* 0x8001 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {32770ll /* 0x8002 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {32771ll /* 0x8003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32772ll /* 0x8004 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {32773ll /* 0x8005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32774ll /* 0x8006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {32775ll /* 0x8007 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {32776ll /* 0x8008 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {32777ll /* 0x8009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32778ll /* 0x800a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {32784ll /* 0x8010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32800ll /* 0x8020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32832ll /* 0x8040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32896ll /* 0x8080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33024ll /* 0x8100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33280ll /* 0x8200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33792ll /* 0x8400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34816ll /* 0x8800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36864ll /* 0x9000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {40960ll /* 0xa000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {49152ll /* 0xc000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {65527ll /* 0xfff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65528ll /* 0xfff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65529ll /* 0xfff9 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {65531ll /* 0xfffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65532ll /* 0xfffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65533ll /* 0xfffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65534ll /* 0xfffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65535ll /* 0xffff */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {65536ll /* 0x10000 */ ,
- {{6, 1, 16}} /* shli r2, r1, 16 */
- },
- {65537ll /* 0x10001 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {65538ll /* 0x10002 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {65539ll /* 0x10003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65540ll /* 0x10004 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {65541ll /* 0x10005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65542ll /* 0x10006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {65543ll /* 0x10007 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {65544ll /* 0x10008 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {65545ll /* 0x10009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65546ll /* 0x1000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {65552ll /* 0x10010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65568ll /* 0x10020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65600ll /* 0x10040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65664ll /* 0x10080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65792ll /* 0x10100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {66048ll /* 0x10200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {66560ll /* 0x10400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67584ll /* 0x10800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {69632ll /* 0x11000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {73728ll /* 0x12000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {81920ll /* 0x14000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {98304ll /* 0x18000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {131063ll /* 0x1fff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131064ll /* 0x1fff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131065ll /* 0x1fff9 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {131067ll /* 0x1fffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131068ll /* 0x1fffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131069ll /* 0x1fffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131070ll /* 0x1fffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131071ll /* 0x1ffff */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {131072ll /* 0x20000 */ ,
- {{6, 1, 17}} /* shli r2, r1, 17 */
- },
- {131073ll /* 0x20001 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {131074ll /* 0x20002 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {131075ll /* 0x20003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131076ll /* 0x20004 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {131077ll /* 0x20005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131078ll /* 0x20006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {131079ll /* 0x20007 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {131080ll /* 0x20008 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {131081ll /* 0x20009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131082ll /* 0x2000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {131088ll /* 0x20010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131104ll /* 0x20020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131136ll /* 0x20040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131200ll /* 0x20080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131328ll /* 0x20100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131584ll /* 0x20200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {132096ll /* 0x20400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {133120ll /* 0x20800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {135168ll /* 0x21000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {139264ll /* 0x22000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {147456ll /* 0x24000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {163840ll /* 0x28000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {196608ll /* 0x30000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {262135ll /* 0x3fff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262136ll /* 0x3fff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262137ll /* 0x3fff9 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {262139ll /* 0x3fffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262140ll /* 0x3fffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262141ll /* 0x3fffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262142ll /* 0x3fffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262143ll /* 0x3ffff */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {262144ll /* 0x40000 */ ,
- {{6, 1, 18}} /* shli r2, r1, 18 */
- },
- {262145ll /* 0x40001 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {262146ll /* 0x40002 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {262147ll /* 0x40003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262148ll /* 0x40004 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {262149ll /* 0x40005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262150ll /* 0x40006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {262151ll /* 0x40007 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {262152ll /* 0x40008 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {262153ll /* 0x40009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262154ll /* 0x4000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {262160ll /* 0x40010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262176ll /* 0x40020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262208ll /* 0x40040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262272ll /* 0x40080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262400ll /* 0x40100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262656ll /* 0x40200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {263168ll /* 0x40400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {264192ll /* 0x40800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {266240ll /* 0x41000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {270336ll /* 0x42000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {278528ll /* 0x44000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {294912ll /* 0x48000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {327680ll /* 0x50000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {393216ll /* 0x60000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {524279ll /* 0x7fff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524280ll /* 0x7fff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524281ll /* 0x7fff9 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {524283ll /* 0x7fffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524284ll /* 0x7fffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524285ll /* 0x7fffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524286ll /* 0x7fffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524287ll /* 0x7ffff */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {524288ll /* 0x80000 */ ,
- {{6, 1, 19}} /* shli r2, r1, 19 */
- },
- {524289ll /* 0x80001 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {524290ll /* 0x80002 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {524291ll /* 0x80003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524292ll /* 0x80004 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {524293ll /* 0x80005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524294ll /* 0x80006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {524295ll /* 0x80007 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {524296ll /* 0x80008 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {524297ll /* 0x80009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524298ll /* 0x8000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {524304ll /* 0x80010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524320ll /* 0x80020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524352ll /* 0x80040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524416ll /* 0x80080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524544ll /* 0x80100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524800ll /* 0x80200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {525312ll /* 0x80400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {526336ll /* 0x80800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {528384ll /* 0x81000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {532480ll /* 0x82000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {540672ll /* 0x84000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {557056ll /* 0x88000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {589824ll /* 0x90000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {655360ll /* 0xa0000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {786432ll /* 0xc0000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {1048567ll /* 0xffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048568ll /* 0xffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048569ll /* 0xffff9 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1048571ll /* 0xffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048572ll /* 0xffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048573ll /* 0xffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048574ll /* 0xffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048575ll /* 0xfffff */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1048576ll /* 0x100000 */ ,
- {{6, 1, 20}} /* shli r2, r1, 20 */
- },
- {1048577ll /* 0x100001 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1048578ll /* 0x100002 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {1048579ll /* 0x100003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048580ll /* 0x100004 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {1048581ll /* 0x100005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048582ll /* 0x100006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1048583ll /* 0x100007 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {1048584ll /* 0x100008 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {1048585ll /* 0x100009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048586ll /* 0x10000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1048592ll /* 0x100010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048608ll /* 0x100020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048640ll /* 0x100040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048704ll /* 0x100080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048832ll /* 0x100100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1049088ll /* 0x100200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1049600ll /* 0x100400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1050624ll /* 0x100800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1052672ll /* 0x101000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1056768ll /* 0x102000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1064960ll /* 0x104000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1081344ll /* 0x108000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1114112ll /* 0x110000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1179648ll /* 0x120000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {1310720ll /* 0x140000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {1572864ll /* 0x180000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {2097143ll /* 0x1ffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097144ll /* 0x1ffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097145ll /* 0x1ffff9 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {2097147ll /* 0x1ffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097148ll /* 0x1ffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097149ll /* 0x1ffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097150ll /* 0x1ffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097151ll /* 0x1fffff */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2097152ll /* 0x200000 */ ,
- {{6, 1, 21}} /* shli r2, r1, 21 */
- },
- {2097153ll /* 0x200001 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2097154ll /* 0x200002 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {2097155ll /* 0x200003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097156ll /* 0x200004 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {2097157ll /* 0x200005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097158ll /* 0x200006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2097159ll /* 0x200007 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {2097160ll /* 0x200008 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {2097161ll /* 0x200009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097162ll /* 0x20000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2097168ll /* 0x200010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097184ll /* 0x200020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097216ll /* 0x200040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097280ll /* 0x200080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097408ll /* 0x200100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097664ll /* 0x200200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2098176ll /* 0x200400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2099200ll /* 0x200800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2101248ll /* 0x201000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2105344ll /* 0x202000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2113536ll /* 0x204000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2129920ll /* 0x208000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2162688ll /* 0x210000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2228224ll /* 0x220000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2359296ll /* 0x240000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {2621440ll /* 0x280000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {3145728ll /* 0x300000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {4194295ll /* 0x3ffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194296ll /* 0x3ffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194297ll /* 0x3ffff9 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {4194299ll /* 0x3ffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194300ll /* 0x3ffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194301ll /* 0x3ffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194302ll /* 0x3ffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194303ll /* 0x3fffff */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4194304ll /* 0x400000 */ ,
- {{6, 1, 22}} /* shli r2, r1, 22 */
- },
- {4194305ll /* 0x400001 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4194306ll /* 0x400002 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {4194307ll /* 0x400003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194308ll /* 0x400004 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {4194309ll /* 0x400005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194310ll /* 0x400006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4194311ll /* 0x400007 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {4194312ll /* 0x400008 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {4194313ll /* 0x400009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194314ll /* 0x40000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4194320ll /* 0x400010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194336ll /* 0x400020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194368ll /* 0x400040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194432ll /* 0x400080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194560ll /* 0x400100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194816ll /* 0x400200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4195328ll /* 0x400400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4196352ll /* 0x400800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4198400ll /* 0x401000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4202496ll /* 0x402000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4210688ll /* 0x404000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4227072ll /* 0x408000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4259840ll /* 0x410000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4325376ll /* 0x420000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4456448ll /* 0x440000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4718592ll /* 0x480000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {5242880ll /* 0x500000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {6291456ll /* 0x600000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {8388599ll /* 0x7ffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388600ll /* 0x7ffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388601ll /* 0x7ffff9 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {8388603ll /* 0x7ffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388604ll /* 0x7ffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388605ll /* 0x7ffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388606ll /* 0x7ffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388607ll /* 0x7fffff */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8388608ll /* 0x800000 */ ,
- {{6, 1, 23}} /* shli r2, r1, 23 */
- },
- {8388609ll /* 0x800001 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {8388610ll /* 0x800002 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {8388611ll /* 0x800003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388612ll /* 0x800004 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {8388613ll /* 0x800005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388614ll /* 0x800006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8388615ll /* 0x800007 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {8388616ll /* 0x800008 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {8388617ll /* 0x800009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388618ll /* 0x80000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8388624ll /* 0x800010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388640ll /* 0x800020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388672ll /* 0x800040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388736ll /* 0x800080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388864ll /* 0x800100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8389120ll /* 0x800200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8389632ll /* 0x800400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8390656ll /* 0x800800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8392704ll /* 0x801000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8396800ll /* 0x802000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8404992ll /* 0x804000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8421376ll /* 0x808000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8454144ll /* 0x810000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8519680ll /* 0x820000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8650752ll /* 0x840000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8912896ll /* 0x880000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9437184ll /* 0x900000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {10485760ll /* 0xa00000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {11796480ll /* 0xb40000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 18}} /* shli r4, r3, 18 */
- },
- {12582912ll /* 0xc00000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {16777207ll /* 0xfffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777208ll /* 0xfffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777209ll /* 0xfffff9 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {16777211ll /* 0xfffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777212ll /* 0xfffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777213ll /* 0xfffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777214ll /* 0xfffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777215ll /* 0xffffff */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {16777216ll /* 0x1000000 */ ,
- {{6, 1, 24}} /* shli r2, r1, 24 */
- },
- {16777217ll /* 0x1000001 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {16777218ll /* 0x1000002 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {16777219ll /* 0x1000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777220ll /* 0x1000004 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {16777221ll /* 0x1000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777222ll /* 0x1000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {16777223ll /* 0x1000007 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {16777224ll /* 0x1000008 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {16777225ll /* 0x1000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777226ll /* 0x100000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {16777232ll /* 0x1000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777248ll /* 0x1000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777280ll /* 0x1000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777344ll /* 0x1000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777472ll /* 0x1000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777728ll /* 0x1000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16778240ll /* 0x1000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16779264ll /* 0x1000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16781312ll /* 0x1001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16785408ll /* 0x1002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16793600ll /* 0x1004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16809984ll /* 0x1008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16842752ll /* 0x1010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16908288ll /* 0x1020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17039360ll /* 0x1040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17301504ll /* 0x1080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17825792ll /* 0x1100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18874368ll /* 0x1200000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {20971520ll /* 0x1400000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {23592960ll /* 0x1680000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {5, 2, 2}, /* shl3add r3, r2, r2 */
- {6, 3, 19}} /* shli r4, r3, 19 */
- },
- {25165824ll /* 0x1800000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {33554423ll /* 0x1fffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554424ll /* 0x1fffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554425ll /* 0x1fffff9 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {33554427ll /* 0x1fffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554428ll /* 0x1fffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554429ll /* 0x1fffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554430ll /* 0x1fffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554431ll /* 0x1ffffff */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {33554432ll /* 0x2000000 */ ,
- {{6, 1, 25}} /* shli r2, r1, 25 */
- },
- {33554433ll /* 0x2000001 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {33554434ll /* 0x2000002 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {33554435ll /* 0x2000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554436ll /* 0x2000004 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {33554437ll /* 0x2000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554438ll /* 0x2000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {33554439ll /* 0x2000007 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {33554440ll /* 0x2000008 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {33554441ll /* 0x2000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554442ll /* 0x200000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {33554448ll /* 0x2000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554464ll /* 0x2000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554496ll /* 0x2000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554560ll /* 0x2000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554688ll /* 0x2000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554944ll /* 0x2000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33555456ll /* 0x2000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33556480ll /* 0x2000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33558528ll /* 0x2001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33562624ll /* 0x2002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33570816ll /* 0x2004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33587200ll /* 0x2008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33619968ll /* 0x2010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33685504ll /* 0x2020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33816576ll /* 0x2040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34078720ll /* 0x2080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34603008ll /* 0x2100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35651584ll /* 0x2200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {37748736ll /* 0x2400000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {41943040ll /* 0x2800000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {50331648ll /* 0x3000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {67108855ll /* 0x3fffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108856ll /* 0x3fffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108857ll /* 0x3fffff9 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {67108859ll /* 0x3fffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108860ll /* 0x3fffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108861ll /* 0x3fffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108862ll /* 0x3fffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108863ll /* 0x3ffffff */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {67108864ll /* 0x4000000 */ ,
- {{6, 1, 26}} /* shli r2, r1, 26 */
- },
- {67108865ll /* 0x4000001 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {67108866ll /* 0x4000002 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {67108867ll /* 0x4000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108868ll /* 0x4000004 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {67108869ll /* 0x4000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108870ll /* 0x4000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {67108871ll /* 0x4000007 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {67108872ll /* 0x4000008 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {67108873ll /* 0x4000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108874ll /* 0x400000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {67108880ll /* 0x4000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108896ll /* 0x4000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108928ll /* 0x4000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108992ll /* 0x4000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67109120ll /* 0x4000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67109376ll /* 0x4000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67109888ll /* 0x4000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67110912ll /* 0x4000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67112960ll /* 0x4001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67117056ll /* 0x4002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67125248ll /* 0x4004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67141632ll /* 0x4008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67174400ll /* 0x4010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67239936ll /* 0x4020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67371008ll /* 0x4040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67633152ll /* 0x4080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68157440ll /* 0x4100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {69206016ll /* 0x4200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {71303168ll /* 0x4400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {75497472ll /* 0x4800000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {83886080ll /* 0x5000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {100663296ll /* 0x6000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {134217719ll /* 0x7fffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217720ll /* 0x7fffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217721ll /* 0x7fffff9 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {134217723ll /* 0x7fffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217724ll /* 0x7fffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217725ll /* 0x7fffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217726ll /* 0x7fffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217727ll /* 0x7ffffff */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {134217728ll /* 0x8000000 */ ,
- {{6, 1, 27}} /* shli r2, r1, 27 */
- },
- {134217729ll /* 0x8000001 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {134217730ll /* 0x8000002 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {134217731ll /* 0x8000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217732ll /* 0x8000004 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {134217733ll /* 0x8000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217734ll /* 0x8000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {134217735ll /* 0x8000007 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {134217736ll /* 0x8000008 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {134217737ll /* 0x8000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217738ll /* 0x800000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {134217744ll /* 0x8000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217760ll /* 0x8000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217792ll /* 0x8000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217856ll /* 0x8000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217984ll /* 0x8000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134218240ll /* 0x8000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134218752ll /* 0x8000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134219776ll /* 0x8000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134221824ll /* 0x8001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134225920ll /* 0x8002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134234112ll /* 0x8004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134250496ll /* 0x8008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134283264ll /* 0x8010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134348800ll /* 0x8020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134479872ll /* 0x8040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134742016ll /* 0x8080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {135266304ll /* 0x8100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {136314880ll /* 0x8200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {138412032ll /* 0x8400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {142606336ll /* 0x8800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {150994944ll /* 0x9000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {167772160ll /* 0xa000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {201326592ll /* 0xc000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {268435447ll /* 0xffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435448ll /* 0xffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435449ll /* 0xffffff9 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {268435451ll /* 0xffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435452ll /* 0xffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435453ll /* 0xffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435454ll /* 0xffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435455ll /* 0xfffffff */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {268435456ll /* 0x10000000 */ ,
- {{6, 1, 28}} /* shli r2, r1, 28 */
- },
- {268435457ll /* 0x10000001 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {268435458ll /* 0x10000002 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {268435459ll /* 0x10000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435460ll /* 0x10000004 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {268435461ll /* 0x10000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435462ll /* 0x10000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {268435463ll /* 0x10000007 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {268435464ll /* 0x10000008 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {268435465ll /* 0x10000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435466ll /* 0x1000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {268435472ll /* 0x10000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435488ll /* 0x10000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435520ll /* 0x10000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435584ll /* 0x10000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435712ll /* 0x10000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435968ll /* 0x10000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268436480ll /* 0x10000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268437504ll /* 0x10000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268439552ll /* 0x10001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268443648ll /* 0x10002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268451840ll /* 0x10004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268468224ll /* 0x10008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268500992ll /* 0x10010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268566528ll /* 0x10020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268697600ll /* 0x10040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268959744ll /* 0x10080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {269484032ll /* 0x10100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {270532608ll /* 0x10200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {272629760ll /* 0x10400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {276824064ll /* 0x10800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {285212672ll /* 0x11000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {301989888ll /* 0x12000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {335544320ll /* 0x14000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {402653184ll /* 0x18000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {536870903ll /* 0x1ffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870904ll /* 0x1ffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870905ll /* 0x1ffffff9 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {536870907ll /* 0x1ffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870908ll /* 0x1ffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870909ll /* 0x1ffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870910ll /* 0x1ffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870911ll /* 0x1fffffff */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {536870912ll /* 0x20000000 */ ,
- {{6, 1, 29}} /* shli r2, r1, 29 */
- },
- {536870913ll /* 0x20000001 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {536870914ll /* 0x20000002 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {536870915ll /* 0x20000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870916ll /* 0x20000004 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {536870917ll /* 0x20000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870918ll /* 0x20000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {536870919ll /* 0x20000007 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {536870920ll /* 0x20000008 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {536870921ll /* 0x20000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870922ll /* 0x2000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {536870928ll /* 0x20000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870944ll /* 0x20000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870976ll /* 0x20000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871040ll /* 0x20000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871168ll /* 0x20000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871424ll /* 0x20000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871936ll /* 0x20000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536872960ll /* 0x20000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536875008ll /* 0x20001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536879104ll /* 0x20002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536887296ll /* 0x20004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536903680ll /* 0x20008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536936448ll /* 0x20010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537001984ll /* 0x20020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537133056ll /* 0x20040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537395200ll /* 0x20080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537919488ll /* 0x20100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {538968064ll /* 0x20200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {541065216ll /* 0x20400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {545259520ll /* 0x20800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {553648128ll /* 0x21000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {570425344ll /* 0x22000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {603979776ll /* 0x24000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {671088640ll /* 0x28000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {805306368ll /* 0x30000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {1073741815ll /* 0x3ffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741816ll /* 0x3ffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741817ll /* 0x3ffffff9 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1073741819ll /* 0x3ffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741820ll /* 0x3ffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741821ll /* 0x3ffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741822ll /* 0x3ffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741823ll /* 0x3fffffff */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1073741824ll /* 0x40000000 */ ,
- {{6, 1, 30}} /* shli r2, r1, 30 */
- },
- {1073741825ll /* 0x40000001 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1073741826ll /* 0x40000002 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {1073741827ll /* 0x40000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741828ll /* 0x40000004 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {1073741829ll /* 0x40000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741830ll /* 0x40000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1073741831ll /* 0x40000007 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {1073741832ll /* 0x40000008 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {1073741833ll /* 0x40000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741834ll /* 0x4000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1073741840ll /* 0x40000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741856ll /* 0x40000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741888ll /* 0x40000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741952ll /* 0x40000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073742080ll /* 0x40000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073742336ll /* 0x40000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073742848ll /* 0x40000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073743872ll /* 0x40000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073745920ll /* 0x40001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073750016ll /* 0x40002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073758208ll /* 0x40004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073774592ll /* 0x40008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073807360ll /* 0x40010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073872896ll /* 0x40020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1074003968ll /* 0x40040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1074266112ll /* 0x40080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1074790400ll /* 0x40100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1075838976ll /* 0x40200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1077936128ll /* 0x40400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1082130432ll /* 0x40800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1090519040ll /* 0x41000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1107296256ll /* 0x42000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1140850688ll /* 0x44000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1207959552ll /* 0x48000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {1342177280ll /* 0x50000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {1610612736ll /* 0x60000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {2147483639ll /* 0x7ffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483640ll /* 0x7ffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483641ll /* 0x7ffffff9 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {2147483643ll /* 0x7ffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483644ll /* 0x7ffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483645ll /* 0x7ffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483646ll /* 0x7ffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483647ll /* 0x7fffffff */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2147483648ll /* 0x80000000 */ ,
- {{6, 1, 31}} /* shli r2, r1, 31 */
- },
- {2147483649ll /* 0x80000001 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2147483650ll /* 0x80000002 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {2147483651ll /* 0x80000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483652ll /* 0x80000004 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {2147483653ll /* 0x80000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483654ll /* 0x80000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2147483655ll /* 0x80000007 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {2147483656ll /* 0x80000008 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {2147483657ll /* 0x80000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483658ll /* 0x8000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2147483664ll /* 0x80000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483680ll /* 0x80000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483712ll /* 0x80000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483776ll /* 0x80000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147483904ll /* 0x80000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147484160ll /* 0x80000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147484672ll /* 0x80000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147485696ll /* 0x80000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147487744ll /* 0x80001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147491840ll /* 0x80002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147500032ll /* 0x80004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147516416ll /* 0x80008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147549184ll /* 0x80010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147614720ll /* 0x80020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2147745792ll /* 0x80040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2148007936ll /* 0x80080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2148532224ll /* 0x80100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2149580800ll /* 0x80200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2151677952ll /* 0x80400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2155872256ll /* 0x80800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2164260864ll /* 0x81000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2181038080ll /* 0x82000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2214592512ll /* 0x84000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2281701376ll /* 0x88000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2415919104ll /* 0x90000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {2684354560ll /* 0xa0000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {3221225472ll /* 0xc0000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 30}} /* shli r3, r2, 30 */
- },
- {4294967287ll /* 0xfffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4294967288ll /* 0xfffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4294967289ll /* 0xfffffff9 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {4294967291ll /* 0xfffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4294967292ll /* 0xfffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4294967293ll /* 0xfffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4294967294ll /* 0xfffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4294967295ll /* 0xffffffff */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4294967296ll /* 0x100000000 */ ,
- {{6, 1, 32}} /* shli r2, r1, 32 */
- },
- {4294967297ll /* 0x100000001 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4294967298ll /* 0x100000002 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {4294967299ll /* 0x100000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967300ll /* 0x100000004 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {4294967301ll /* 0x100000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967302ll /* 0x100000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4294967303ll /* 0x100000007 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {4294967304ll /* 0x100000008 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {4294967305ll /* 0x100000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967306ll /* 0x10000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4294967312ll /* 0x100000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967328ll /* 0x100000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967360ll /* 0x100000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967424ll /* 0x100000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967552ll /* 0x100000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294967808ll /* 0x100000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294968320ll /* 0x100000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294969344ll /* 0x100000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294971392ll /* 0x100001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294975488ll /* 0x100002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4294983680ll /* 0x100004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4295000064ll /* 0x100008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4295032832ll /* 0x100010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4295098368ll /* 0x100020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4295229440ll /* 0x100040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4295491584ll /* 0x100080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4296015872ll /* 0x100100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4297064448ll /* 0x100200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4299161600ll /* 0x100400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4303355904ll /* 0x100800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4311744512ll /* 0x101000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4328521728ll /* 0x102000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4362076160ll /* 0x104000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4429185024ll /* 0x108000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4563402752ll /* 0x110000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 32}, /* shli r3, r1, 32 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4831838208ll /* 0x120000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {5368709120ll /* 0x140000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 30}} /* shli r3, r2, 30 */
- },
- {6442450944ll /* 0x180000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 31}} /* shli r3, r2, 31 */
- },
- {8589934583ll /* 0x1fffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8589934584ll /* 0x1fffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8589934585ll /* 0x1fffffff9 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {8589934587ll /* 0x1fffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8589934588ll /* 0x1fffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8589934589ll /* 0x1fffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8589934590ll /* 0x1fffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8589934591ll /* 0x1ffffffff */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8589934592ll /* 0x200000000 */ ,
- {{6, 1, 33}} /* shli r2, r1, 33 */
- },
- {8589934593ll /* 0x200000001 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {8589934594ll /* 0x200000002 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {8589934595ll /* 0x200000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934596ll /* 0x200000004 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {8589934597ll /* 0x200000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934598ll /* 0x200000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8589934599ll /* 0x200000007 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {8589934600ll /* 0x200000008 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {8589934601ll /* 0x200000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934602ll /* 0x20000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8589934608ll /* 0x200000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934624ll /* 0x200000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934656ll /* 0x200000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934720ll /* 0x200000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589934848ll /* 0x200000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589935104ll /* 0x200000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589935616ll /* 0x200000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589936640ll /* 0x200000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589938688ll /* 0x200001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589942784ll /* 0x200002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589950976ll /* 0x200004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8589967360ll /* 0x200008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8590000128ll /* 0x200010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8590065664ll /* 0x200020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8590196736ll /* 0x200040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8590458880ll /* 0x200080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8590983168ll /* 0x200100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8592031744ll /* 0x200200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8594128896ll /* 0x200400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8598323200ll /* 0x200800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8606711808ll /* 0x201000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8623489024ll /* 0x202000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8657043456ll /* 0x204000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8724152320ll /* 0x208000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8858370048ll /* 0x210000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9126805504ll /* 0x220000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 33}, /* shli r3, r1, 33 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9663676416ll /* 0x240000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 30}} /* shli r3, r2, 30 */
- },
- {10737418240ll /* 0x280000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 31}} /* shli r3, r2, 31 */
- },
- {12884901888ll /* 0x300000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 32}} /* shli r3, r2, 32 */
- },
- {17179869175ll /* 0x3fffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17179869176ll /* 0x3fffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17179869177ll /* 0x3fffffff9 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {17179869179ll /* 0x3fffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17179869180ll /* 0x3fffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17179869181ll /* 0x3fffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17179869182ll /* 0x3fffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17179869183ll /* 0x3ffffffff */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {17179869184ll /* 0x400000000 */ ,
- {{6, 1, 34}} /* shli r2, r1, 34 */
- },
- {17179869185ll /* 0x400000001 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {17179869186ll /* 0x400000002 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {17179869187ll /* 0x400000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869188ll /* 0x400000004 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {17179869189ll /* 0x400000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869190ll /* 0x400000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {17179869191ll /* 0x400000007 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {17179869192ll /* 0x400000008 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {17179869193ll /* 0x400000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869194ll /* 0x40000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {17179869200ll /* 0x400000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869216ll /* 0x400000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869248ll /* 0x400000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869312ll /* 0x400000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869440ll /* 0x400000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179869696ll /* 0x400000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179870208ll /* 0x400000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179871232ll /* 0x400000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179873280ll /* 0x400001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179877376ll /* 0x400002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179885568ll /* 0x400004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179901952ll /* 0x400008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17179934720ll /* 0x400010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17180000256ll /* 0x400020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17180131328ll /* 0x400040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17180393472ll /* 0x400080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17180917760ll /* 0x400100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17181966336ll /* 0x400200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17184063488ll /* 0x400400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17188257792ll /* 0x400800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17196646400ll /* 0x401000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17213423616ll /* 0x402000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17246978048ll /* 0x404000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17314086912ll /* 0x408000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17448304640ll /* 0x410000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17716740096ll /* 0x420000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18253611008ll /* 0x440000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 34}, /* shli r3, r1, 34 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {19327352832ll /* 0x480000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 31}} /* shli r3, r2, 31 */
- },
- {21474836480ll /* 0x500000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 32}} /* shli r3, r2, 32 */
- },
- {25769803776ll /* 0x600000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 33}} /* shli r3, r2, 33 */
- },
- {34359738359ll /* 0x7fffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {34359738360ll /* 0x7fffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {34359738361ll /* 0x7fffffff9 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {34359738363ll /* 0x7fffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {34359738364ll /* 0x7fffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {34359738365ll /* 0x7fffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {34359738366ll /* 0x7fffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {34359738367ll /* 0x7ffffffff */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {34359738368ll /* 0x800000000 */ ,
- {{6, 1, 35}} /* shli r2, r1, 35 */
- },
- {34359738369ll /* 0x800000001 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {34359738370ll /* 0x800000002 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {34359738371ll /* 0x800000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738372ll /* 0x800000004 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {34359738373ll /* 0x800000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738374ll /* 0x800000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {34359738375ll /* 0x800000007 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {34359738376ll /* 0x800000008 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {34359738377ll /* 0x800000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738378ll /* 0x80000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {34359738384ll /* 0x800000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738400ll /* 0x800000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738432ll /* 0x800000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738496ll /* 0x800000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738624ll /* 0x800000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359738880ll /* 0x800000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359739392ll /* 0x800000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359740416ll /* 0x800000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359742464ll /* 0x800001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359746560ll /* 0x800002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359754752ll /* 0x800004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359771136ll /* 0x800008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359803904ll /* 0x800010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34359869440ll /* 0x800020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34360000512ll /* 0x800040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34360262656ll /* 0x800080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34360786944ll /* 0x800100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34361835520ll /* 0x800200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34363932672ll /* 0x800400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34368126976ll /* 0x800800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34376515584ll /* 0x801000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34393292800ll /* 0x802000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34426847232ll /* 0x804000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34493956096ll /* 0x808000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34628173824ll /* 0x810000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34896609280ll /* 0x820000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35433480192ll /* 0x840000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36507222016ll /* 0x880000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 35}, /* shli r3, r1, 35 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {38654705664ll /* 0x900000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 32}} /* shli r3, r2, 32 */
- },
- {42949672960ll /* 0xa00000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 33}} /* shli r3, r2, 33 */
- },
- {51539607552ll /* 0xc00000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 34}} /* shli r3, r2, 34 */
- },
- {68719476727ll /* 0xffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {68719476728ll /* 0xffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {68719476729ll /* 0xffffffff9 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {68719476731ll /* 0xffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {68719476732ll /* 0xffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {68719476733ll /* 0xffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {68719476734ll /* 0xffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {68719476735ll /* 0xfffffffff */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {68719476736ll /* 0x1000000000 */ ,
- {{6, 1, 36}} /* shli r2, r1, 36 */
- },
- {68719476737ll /* 0x1000000001 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {68719476738ll /* 0x1000000002 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {68719476739ll /* 0x1000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476740ll /* 0x1000000004 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {68719476741ll /* 0x1000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476742ll /* 0x1000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {68719476743ll /* 0x1000000007 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {68719476744ll /* 0x1000000008 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {68719476745ll /* 0x1000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476746ll /* 0x100000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {68719476752ll /* 0x1000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476768ll /* 0x1000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476800ll /* 0x1000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476864ll /* 0x1000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719476992ll /* 0x1000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719477248ll /* 0x1000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719477760ll /* 0x1000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719478784ll /* 0x1000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719480832ll /* 0x1000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719484928ll /* 0x1000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719493120ll /* 0x1000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719509504ll /* 0x1000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719542272ll /* 0x1000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719607808ll /* 0x1000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68719738880ll /* 0x1000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68720001024ll /* 0x1000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68720525312ll /* 0x1000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68721573888ll /* 0x1000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68723671040ll /* 0x1000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68727865344ll /* 0x1000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68736253952ll /* 0x1001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68753031168ll /* 0x1002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68786585600ll /* 0x1004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68853694464ll /* 0x1008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68987912192ll /* 0x1010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {69256347648ll /* 0x1020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {69793218560ll /* 0x1040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70866960384ll /* 0x1080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {73014444032ll /* 0x1100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 36}, /* shli r3, r1, 36 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {77309411328ll /* 0x1200000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 33}} /* shli r3, r2, 33 */
- },
- {85899345920ll /* 0x1400000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 34}} /* shli r3, r2, 34 */
- },
- {103079215104ll /* 0x1800000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 35}} /* shli r3, r2, 35 */
- },
- {137438953463ll /* 0x1ffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {137438953464ll /* 0x1ffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {137438953465ll /* 0x1ffffffff9 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {137438953467ll /* 0x1ffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {137438953468ll /* 0x1ffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {137438953469ll /* 0x1ffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {137438953470ll /* 0x1ffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {137438953471ll /* 0x1fffffffff */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {137438953472ll /* 0x2000000000 */ ,
- {{6, 1, 37}} /* shli r2, r1, 37 */
- },
- {137438953473ll /* 0x2000000001 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {137438953474ll /* 0x2000000002 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {137438953475ll /* 0x2000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953476ll /* 0x2000000004 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {137438953477ll /* 0x2000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953478ll /* 0x2000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {137438953479ll /* 0x2000000007 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {137438953480ll /* 0x2000000008 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {137438953481ll /* 0x2000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953482ll /* 0x200000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {137438953488ll /* 0x2000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953504ll /* 0x2000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953536ll /* 0x2000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953600ll /* 0x2000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953728ll /* 0x2000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438953984ll /* 0x2000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438954496ll /* 0x2000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438955520ll /* 0x2000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438957568ll /* 0x2000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438961664ll /* 0x2000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438969856ll /* 0x2000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137438986240ll /* 0x2000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137439019008ll /* 0x2000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137439084544ll /* 0x2000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137439215616ll /* 0x2000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137439477760ll /* 0x2000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137440002048ll /* 0x2000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137441050624ll /* 0x2000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137443147776ll /* 0x2000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137447342080ll /* 0x2000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137455730688ll /* 0x2001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137472507904ll /* 0x2002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137506062336ll /* 0x2004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137573171200ll /* 0x2008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137707388928ll /* 0x2010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {137975824384ll /* 0x2020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {138512695296ll /* 0x2040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {139586437120ll /* 0x2080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {141733920768ll /* 0x2100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {146028888064ll /* 0x2200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 37}, /* shli r3, r1, 37 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {154618822656ll /* 0x2400000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 34}} /* shli r3, r2, 34 */
- },
- {171798691840ll /* 0x2800000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 35}} /* shli r3, r2, 35 */
- },
- {206158430208ll /* 0x3000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 36}} /* shli r3, r2, 36 */
- },
- {274877906935ll /* 0x3ffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {274877906936ll /* 0x3ffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {274877906937ll /* 0x3ffffffff9 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {274877906939ll /* 0x3ffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {274877906940ll /* 0x3ffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {274877906941ll /* 0x3ffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {274877906942ll /* 0x3ffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {274877906943ll /* 0x3fffffffff */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {274877906944ll /* 0x4000000000 */ ,
- {{6, 1, 38}} /* shli r2, r1, 38 */
- },
- {274877906945ll /* 0x4000000001 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {274877906946ll /* 0x4000000002 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {274877906947ll /* 0x4000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877906948ll /* 0x4000000004 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {274877906949ll /* 0x4000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877906950ll /* 0x4000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {274877906951ll /* 0x4000000007 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {274877906952ll /* 0x4000000008 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {274877906953ll /* 0x4000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877906954ll /* 0x400000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {274877906960ll /* 0x4000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877906976ll /* 0x4000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877907008ll /* 0x4000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877907072ll /* 0x4000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877907200ll /* 0x4000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877907456ll /* 0x4000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877907968ll /* 0x4000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877908992ll /* 0x4000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877911040ll /* 0x4000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877915136ll /* 0x4000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877923328ll /* 0x4000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877939712ll /* 0x4000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274877972480ll /* 0x4000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274878038016ll /* 0x4000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274878169088ll /* 0x4000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274878431232ll /* 0x4000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274878955520ll /* 0x4000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274880004096ll /* 0x4000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274882101248ll /* 0x4000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274886295552ll /* 0x4000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274894684160ll /* 0x4001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274911461376ll /* 0x4002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {274945015808ll /* 0x4004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {275012124672ll /* 0x4008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {275146342400ll /* 0x4010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {275414777856ll /* 0x4020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {275951648768ll /* 0x4040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {277025390592ll /* 0x4080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {279172874240ll /* 0x4100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {283467841536ll /* 0x4200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {292057776128ll /* 0x4400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 38}, /* shli r3, r1, 38 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {309237645312ll /* 0x4800000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 35}} /* shli r3, r2, 35 */
- },
- {343597383680ll /* 0x5000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 36}} /* shli r3, r2, 36 */
- },
- {412316860416ll /* 0x6000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 37}} /* shli r3, r2, 37 */
- },
- {549755813879ll /* 0x7ffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {549755813880ll /* 0x7ffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {549755813881ll /* 0x7ffffffff9 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {549755813883ll /* 0x7ffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {549755813884ll /* 0x7ffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {549755813885ll /* 0x7ffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {549755813886ll /* 0x7ffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {549755813887ll /* 0x7fffffffff */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {549755813888ll /* 0x8000000000 */ ,
- {{6, 1, 39}} /* shli r2, r1, 39 */
- },
- {549755813889ll /* 0x8000000001 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {549755813890ll /* 0x8000000002 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {549755813891ll /* 0x8000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755813892ll /* 0x8000000004 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {549755813893ll /* 0x8000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755813894ll /* 0x8000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {549755813895ll /* 0x8000000007 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {549755813896ll /* 0x8000000008 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {549755813897ll /* 0x8000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755813898ll /* 0x800000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {549755813904ll /* 0x8000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755813920ll /* 0x8000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755813952ll /* 0x8000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755814016ll /* 0x8000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755814144ll /* 0x8000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755814400ll /* 0x8000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755814912ll /* 0x8000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755815936ll /* 0x8000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755817984ll /* 0x8000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755822080ll /* 0x8000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755830272ll /* 0x8000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755846656ll /* 0x8000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755879424ll /* 0x8000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549755944960ll /* 0x8000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549756076032ll /* 0x8000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549756338176ll /* 0x8000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549756862464ll /* 0x8000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549757911040ll /* 0x8000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549760008192ll /* 0x8000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549764202496ll /* 0x8000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549772591104ll /* 0x8001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549789368320ll /* 0x8002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549822922752ll /* 0x8004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {549890031616ll /* 0x8008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {550024249344ll /* 0x8010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {550292684800ll /* 0x8020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {550829555712ll /* 0x8040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {551903297536ll /* 0x8080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {554050781184ll /* 0x8100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {558345748480ll /* 0x8200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {566935683072ll /* 0x8400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {584115552256ll /* 0x8800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 39}, /* shli r3, r1, 39 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {618475290624ll /* 0x9000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 36}} /* shli r3, r2, 36 */
- },
- {687194767360ll /* 0xa000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 37}} /* shli r3, r2, 37 */
- },
- {824633720832ll /* 0xc000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 38}} /* shli r3, r2, 38 */
- },
- {1099511627767ll /* 0xfffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1099511627768ll /* 0xfffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1099511627769ll /* 0xfffffffff9 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1099511627771ll /* 0xfffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1099511627772ll /* 0xfffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1099511627773ll /* 0xfffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1099511627774ll /* 0xfffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1099511627775ll /* 0xffffffffff */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1099511627776ll /* 0x10000000000 */ ,
- {{6, 1, 40}} /* shli r2, r1, 40 */
- },
- {1099511627777ll /* 0x10000000001 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1099511627778ll /* 0x10000000002 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {1099511627779ll /* 0x10000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511627780ll /* 0x10000000004 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {1099511627781ll /* 0x10000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511627782ll /* 0x10000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1099511627783ll /* 0x10000000007 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {1099511627784ll /* 0x10000000008 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {1099511627785ll /* 0x10000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511627786ll /* 0x1000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1099511627792ll /* 0x10000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511627808ll /* 0x10000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511627840ll /* 0x10000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511627904ll /* 0x10000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511628032ll /* 0x10000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511628288ll /* 0x10000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511628800ll /* 0x10000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511629824ll /* 0x10000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511631872ll /* 0x10000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511635968ll /* 0x10000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511644160ll /* 0x10000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511660544ll /* 0x10000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511693312ll /* 0x10000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511758848ll /* 0x10000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099511889920ll /* 0x10000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099512152064ll /* 0x10000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099512676352ll /* 0x10000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099513724928ll /* 0x10000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099515822080ll /* 0x10000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099520016384ll /* 0x10000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099528404992ll /* 0x10001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099545182208ll /* 0x10002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099578736640ll /* 0x10004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099645845504ll /* 0x10008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1099780063232ll /* 0x10010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1100048498688ll /* 0x10020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1100585369600ll /* 0x10040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1101659111424ll /* 0x10080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1103806595072ll /* 0x10100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1108101562368ll /* 0x10200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1116691496960ll /* 0x10400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1133871366144ll /* 0x10800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1168231104512ll /* 0x11000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 40}, /* shli r3, r1, 40 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1236950581248ll /* 0x12000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 37}} /* shli r3, r2, 37 */
- },
- {1374389534720ll /* 0x14000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 38}} /* shli r3, r2, 38 */
- },
- {1649267441664ll /* 0x18000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 39}} /* shli r3, r2, 39 */
- },
- {2199023255543ll /* 0x1fffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2199023255544ll /* 0x1fffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2199023255545ll /* 0x1fffffffff9 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {2199023255547ll /* 0x1fffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2199023255548ll /* 0x1fffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2199023255549ll /* 0x1fffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2199023255550ll /* 0x1fffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2199023255551ll /* 0x1ffffffffff */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2199023255552ll /* 0x20000000000 */ ,
- {{6, 1, 41}} /* shli r2, r1, 41 */
- },
- {2199023255553ll /* 0x20000000001 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2199023255554ll /* 0x20000000002 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {2199023255555ll /* 0x20000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255556ll /* 0x20000000004 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {2199023255557ll /* 0x20000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255558ll /* 0x20000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2199023255559ll /* 0x20000000007 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {2199023255560ll /* 0x20000000008 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {2199023255561ll /* 0x20000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255562ll /* 0x2000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2199023255568ll /* 0x20000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255584ll /* 0x20000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255616ll /* 0x20000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255680ll /* 0x20000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023255808ll /* 0x20000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023256064ll /* 0x20000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023256576ll /* 0x20000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023257600ll /* 0x20000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023259648ll /* 0x20000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023263744ll /* 0x20000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023271936ll /* 0x20000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023288320ll /* 0x20000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023321088ll /* 0x20000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023386624ll /* 0x20000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023517696ll /* 0x20000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199023779840ll /* 0x20000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199024304128ll /* 0x20000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199025352704ll /* 0x20000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199027449856ll /* 0x20000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199031644160ll /* 0x20000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199040032768ll /* 0x20001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199056809984ll /* 0x20002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199090364416ll /* 0x20004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199157473280ll /* 0x20008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199291691008ll /* 0x20010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2199560126464ll /* 0x20020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2200096997376ll /* 0x20040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2201170739200ll /* 0x20080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2203318222848ll /* 0x20100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2207613190144ll /* 0x20200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2216203124736ll /* 0x20400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2233382993920ll /* 0x20800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2267742732288ll /* 0x21000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2336462209024ll /* 0x22000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 41}, /* shli r3, r1, 41 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2473901162496ll /* 0x24000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 38}} /* shli r3, r2, 38 */
- },
- {2748779069440ll /* 0x28000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 39}} /* shli r3, r2, 39 */
- },
- {3298534883328ll /* 0x30000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 40}} /* shli r3, r2, 40 */
- },
- {4398046511095ll /* 0x3fffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4398046511096ll /* 0x3fffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4398046511097ll /* 0x3fffffffff9 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {4398046511099ll /* 0x3fffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4398046511100ll /* 0x3fffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4398046511101ll /* 0x3fffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4398046511102ll /* 0x3fffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4398046511103ll /* 0x3ffffffffff */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4398046511104ll /* 0x40000000000 */ ,
- {{6, 1, 42}} /* shli r2, r1, 42 */
- },
- {4398046511105ll /* 0x40000000001 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4398046511106ll /* 0x40000000002 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {4398046511107ll /* 0x40000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511108ll /* 0x40000000004 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {4398046511109ll /* 0x40000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511110ll /* 0x40000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4398046511111ll /* 0x40000000007 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {4398046511112ll /* 0x40000000008 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {4398046511113ll /* 0x40000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511114ll /* 0x4000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4398046511120ll /* 0x40000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511136ll /* 0x40000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511168ll /* 0x40000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511232ll /* 0x40000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511360ll /* 0x40000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046511616ll /* 0x40000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046512128ll /* 0x40000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046513152ll /* 0x40000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046515200ll /* 0x40000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046519296ll /* 0x40000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046527488ll /* 0x40000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046543872ll /* 0x40000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046576640ll /* 0x40000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046642176ll /* 0x40000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398046773248ll /* 0x40000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398047035392ll /* 0x40000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398047559680ll /* 0x40000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398048608256ll /* 0x40000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398050705408ll /* 0x40000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398054899712ll /* 0x40000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398063288320ll /* 0x40001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398080065536ll /* 0x40002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398113619968ll /* 0x40004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398180728832ll /* 0x40008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398314946560ll /* 0x40010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4398583382016ll /* 0x40020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4399120252928ll /* 0x40040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4400193994752ll /* 0x40080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4402341478400ll /* 0x40100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4406636445696ll /* 0x40200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4415226380288ll /* 0x40400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4432406249472ll /* 0x40800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4466765987840ll /* 0x41000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4535485464576ll /* 0x42000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4672924418048ll /* 0x44000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 42}, /* shli r3, r1, 42 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4947802324992ll /* 0x48000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 39}} /* shli r3, r2, 39 */
- },
- {5497558138880ll /* 0x50000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 40}} /* shli r3, r2, 40 */
- },
- {6597069766656ll /* 0x60000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 41}} /* shli r3, r2, 41 */
- },
- {8796093022199ll /* 0x7fffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8796093022200ll /* 0x7fffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8796093022201ll /* 0x7fffffffff9 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {8796093022203ll /* 0x7fffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8796093022204ll /* 0x7fffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8796093022205ll /* 0x7fffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8796093022206ll /* 0x7fffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8796093022207ll /* 0x7ffffffffff */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8796093022208ll /* 0x80000000000 */ ,
- {{6, 1, 43}} /* shli r2, r1, 43 */
- },
- {8796093022209ll /* 0x80000000001 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {8796093022210ll /* 0x80000000002 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {8796093022211ll /* 0x80000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022212ll /* 0x80000000004 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {8796093022213ll /* 0x80000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022214ll /* 0x80000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8796093022215ll /* 0x80000000007 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {8796093022216ll /* 0x80000000008 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {8796093022217ll /* 0x80000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022218ll /* 0x8000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {8796093022224ll /* 0x80000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022240ll /* 0x80000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022272ll /* 0x80000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022336ll /* 0x80000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022464ll /* 0x80000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093022720ll /* 0x80000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093023232ll /* 0x80000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093024256ll /* 0x80000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093026304ll /* 0x80000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093030400ll /* 0x80000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093038592ll /* 0x80000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093054976ll /* 0x80000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093087744ll /* 0x80000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093153280ll /* 0x80000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093284352ll /* 0x80000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796093546496ll /* 0x80000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796094070784ll /* 0x80000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796095119360ll /* 0x80000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796097216512ll /* 0x80000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796101410816ll /* 0x80000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796109799424ll /* 0x80001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796126576640ll /* 0x80002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796160131072ll /* 0x80004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796227239936ll /* 0x80008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796361457664ll /* 0x80010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8796629893120ll /* 0x80020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8797166764032ll /* 0x80040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8798240505856ll /* 0x80080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8800387989504ll /* 0x80100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8804682956800ll /* 0x80200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8813272891392ll /* 0x80400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8830452760576ll /* 0x80800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8864812498944ll /* 0x81000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8933531975680ll /* 0x82000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9070970929152ll /* 0x84000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9345848836096ll /* 0x88000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 43}, /* shli r3, r1, 43 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9895604649984ll /* 0x90000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 40}} /* shli r3, r2, 40 */
- },
- {10995116277760ll /* 0xa0000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 41}} /* shli r3, r2, 41 */
- },
- {13194139533312ll /* 0xc0000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 42}} /* shli r3, r2, 42 */
- },
- {17592186044407ll /* 0xffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17592186044408ll /* 0xffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17592186044409ll /* 0xffffffffff9 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {17592186044411ll /* 0xffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17592186044412ll /* 0xffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17592186044413ll /* 0xffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17592186044414ll /* 0xffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {17592186044415ll /* 0xfffffffffff */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {17592186044416ll /* 0x100000000000 */ ,
- {{6, 1, 44}} /* shli r2, r1, 44 */
- },
- {17592186044417ll /* 0x100000000001 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {17592186044418ll /* 0x100000000002 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {17592186044419ll /* 0x100000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044420ll /* 0x100000000004 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {17592186044421ll /* 0x100000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044422ll /* 0x100000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {17592186044423ll /* 0x100000000007 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {17592186044424ll /* 0x100000000008 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {17592186044425ll /* 0x100000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044426ll /* 0x10000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {17592186044432ll /* 0x100000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044448ll /* 0x100000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044480ll /* 0x100000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044544ll /* 0x100000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044672ll /* 0x100000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186044928ll /* 0x100000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186045440ll /* 0x100000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186046464ll /* 0x100000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186048512ll /* 0x100000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186052608ll /* 0x100000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186060800ll /* 0x100000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186077184ll /* 0x100000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186109952ll /* 0x100000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186175488ll /* 0x100000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186306560ll /* 0x100000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592186568704ll /* 0x100000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592187092992ll /* 0x100000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592188141568ll /* 0x100000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592190238720ll /* 0x100000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592194433024ll /* 0x100000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592202821632ll /* 0x100001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592219598848ll /* 0x100002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592253153280ll /* 0x100004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592320262144ll /* 0x100008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592454479872ll /* 0x100010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17592722915328ll /* 0x100020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17593259786240ll /* 0x100040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17594333528064ll /* 0x100080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17596481011712ll /* 0x100100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17600775979008ll /* 0x100200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17609365913600ll /* 0x100400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17626545782784ll /* 0x100800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17660905521152ll /* 0x101000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17729624997888ll /* 0x102000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17867063951360ll /* 0x104000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18141941858304ll /* 0x108000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18691697672192ll /* 0x110000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 44}, /* shli r3, r1, 44 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {19791209299968ll /* 0x120000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 41}} /* shli r3, r2, 41 */
- },
- {21990232555520ll /* 0x140000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 42}} /* shli r3, r2, 42 */
- },
- {26388279066624ll /* 0x180000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 43}} /* shli r3, r2, 43 */
- },
- {35184372088823ll /* 0x1ffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {35184372088824ll /* 0x1ffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {35184372088825ll /* 0x1ffffffffff9 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {35184372088827ll /* 0x1ffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {35184372088828ll /* 0x1ffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {35184372088829ll /* 0x1ffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {35184372088830ll /* 0x1ffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {35184372088831ll /* 0x1fffffffffff */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {35184372088832ll /* 0x200000000000 */ ,
- {{6, 1, 45}} /* shli r2, r1, 45 */
- },
- {35184372088833ll /* 0x200000000001 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {35184372088834ll /* 0x200000000002 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {35184372088835ll /* 0x200000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372088836ll /* 0x200000000004 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {35184372088837ll /* 0x200000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372088838ll /* 0x200000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {35184372088839ll /* 0x200000000007 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {35184372088840ll /* 0x200000000008 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {35184372088841ll /* 0x200000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372088842ll /* 0x20000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {35184372088848ll /* 0x200000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372088864ll /* 0x200000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372088896ll /* 0x200000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372088960ll /* 0x200000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372089088ll /* 0x200000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372089344ll /* 0x200000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372089856ll /* 0x200000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372090880ll /* 0x200000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372092928ll /* 0x200000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372097024ll /* 0x200000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372105216ll /* 0x200000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372121600ll /* 0x200000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372154368ll /* 0x200000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372219904ll /* 0x200000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372350976ll /* 0x200000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184372613120ll /* 0x200000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184373137408ll /* 0x200000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184374185984ll /* 0x200000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184376283136ll /* 0x200000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184380477440ll /* 0x200000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184388866048ll /* 0x200001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184405643264ll /* 0x200002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184439197696ll /* 0x200004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184506306560ll /* 0x200008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184640524288ll /* 0x200010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35184908959744ll /* 0x200020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35185445830656ll /* 0x200040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35186519572480ll /* 0x200080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35188667056128ll /* 0x200100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35192962023424ll /* 0x200200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35201551958016ll /* 0x200400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35218731827200ll /* 0x200800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35253091565568ll /* 0x201000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35321811042304ll /* 0x202000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35459249995776ll /* 0x204000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35734127902720ll /* 0x208000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36283883716608ll /* 0x210000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {37383395344384ll /* 0x220000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 45}, /* shli r3, r1, 45 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {39582418599936ll /* 0x240000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 42}} /* shli r3, r2, 42 */
- },
- {43980465111040ll /* 0x280000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 43}} /* shli r3, r2, 43 */
- },
- {52776558133248ll /* 0x300000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 44}} /* shli r3, r2, 44 */
- },
- {70368744177655ll /* 0x3ffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {70368744177656ll /* 0x3ffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {70368744177657ll /* 0x3ffffffffff9 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {70368744177659ll /* 0x3ffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {70368744177660ll /* 0x3ffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {70368744177661ll /* 0x3ffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {70368744177662ll /* 0x3ffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {70368744177663ll /* 0x3fffffffffff */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {70368744177664ll /* 0x400000000000 */ ,
- {{6, 1, 46}} /* shli r2, r1, 46 */
- },
- {70368744177665ll /* 0x400000000001 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {70368744177666ll /* 0x400000000002 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {70368744177667ll /* 0x400000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177668ll /* 0x400000000004 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {70368744177669ll /* 0x400000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177670ll /* 0x400000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {70368744177671ll /* 0x400000000007 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {70368744177672ll /* 0x400000000008 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {70368744177673ll /* 0x400000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177674ll /* 0x40000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {70368744177680ll /* 0x400000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177696ll /* 0x400000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177728ll /* 0x400000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177792ll /* 0x400000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744177920ll /* 0x400000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744178176ll /* 0x400000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744178688ll /* 0x400000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744179712ll /* 0x400000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744181760ll /* 0x400000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744185856ll /* 0x400000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744194048ll /* 0x400000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744210432ll /* 0x400000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744243200ll /* 0x400000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744308736ll /* 0x400000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744439808ll /* 0x400000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368744701952ll /* 0x400000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368745226240ll /* 0x400000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368746274816ll /* 0x400000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368748371968ll /* 0x400000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368752566272ll /* 0x400000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368760954880ll /* 0x400001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368777732096ll /* 0x400002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368811286528ll /* 0x400004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70368878395392ll /* 0x400008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70369012613120ll /* 0x400010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70369281048576ll /* 0x400020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70369817919488ll /* 0x400040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70370891661312ll /* 0x400080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70373039144960ll /* 0x400100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70377334112256ll /* 0x400200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70385924046848ll /* 0x400400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70403103916032ll /* 0x400800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70437463654400ll /* 0x401000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70506183131136ll /* 0x402000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70643622084608ll /* 0x404000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70918499991552ll /* 0x408000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {71468255805440ll /* 0x410000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72567767433216ll /* 0x420000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {74766790688768ll /* 0x440000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 46}, /* shli r3, r1, 46 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {79164837199872ll /* 0x480000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 43}} /* shli r3, r2, 43 */
- },
- {87960930222080ll /* 0x500000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 44}} /* shli r3, r2, 44 */
- },
- {105553116266496ll /* 0x600000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 45}} /* shli r3, r2, 45 */
- },
- {140737488355319ll /* 0x7ffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {140737488355320ll /* 0x7ffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {140737488355321ll /* 0x7ffffffffff9 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {140737488355323ll /* 0x7ffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {140737488355324ll /* 0x7ffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {140737488355325ll /* 0x7ffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {140737488355326ll /* 0x7ffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {140737488355327ll /* 0x7fffffffffff */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {140737488355328ll /* 0x800000000000 */ ,
- {{6, 1, 47}} /* shli r2, r1, 47 */
- },
- {140737488355329ll /* 0x800000000001 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {140737488355330ll /* 0x800000000002 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {140737488355331ll /* 0x800000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355332ll /* 0x800000000004 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {140737488355333ll /* 0x800000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355334ll /* 0x800000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {140737488355335ll /* 0x800000000007 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {140737488355336ll /* 0x800000000008 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {140737488355337ll /* 0x800000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355338ll /* 0x80000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {140737488355344ll /* 0x800000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355360ll /* 0x800000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355392ll /* 0x800000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355456ll /* 0x800000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355584ll /* 0x800000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488355840ll /* 0x800000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488356352ll /* 0x800000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488357376ll /* 0x800000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488359424ll /* 0x800000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488363520ll /* 0x800000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488371712ll /* 0x800000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488388096ll /* 0x800000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488420864ll /* 0x800000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488486400ll /* 0x800000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488617472ll /* 0x800000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737488879616ll /* 0x800000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737489403904ll /* 0x800000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737490452480ll /* 0x800000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737492549632ll /* 0x800000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737496743936ll /* 0x800000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737505132544ll /* 0x800001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737521909760ll /* 0x800002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737555464192ll /* 0x800004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737622573056ll /* 0x800008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140737756790784ll /* 0x800010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140738025226240ll /* 0x800020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140738562097152ll /* 0x800040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140739635838976ll /* 0x800080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140741783322624ll /* 0x800100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140746078289920ll /* 0x800200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140754668224512ll /* 0x800400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140771848093696ll /* 0x800800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140806207832064ll /* 0x801000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {140874927308800ll /* 0x802000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {141012366262272ll /* 0x804000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {141287244169216ll /* 0x808000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {141836999983104ll /* 0x810000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {142936511610880ll /* 0x820000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {145135534866432ll /* 0x840000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {149533581377536ll /* 0x880000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 47}, /* shli r3, r1, 47 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {158329674399744ll /* 0x900000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 44}} /* shli r3, r2, 44 */
- },
- {175921860444160ll /* 0xa00000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 45}} /* shli r3, r2, 45 */
- },
- {211106232532992ll /* 0xc00000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 46}} /* shli r3, r2, 46 */
- },
- {281474976710647ll /* 0xfffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {281474976710648ll /* 0xfffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {281474976710649ll /* 0xfffffffffff9 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {281474976710651ll /* 0xfffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {281474976710652ll /* 0xfffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {281474976710653ll /* 0xfffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {281474976710654ll /* 0xfffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {281474976710655ll /* 0xffffffffffff */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {281474976710656ll /* 0x1000000000000 */ ,
- {{6, 1, 48}} /* shli r2, r1, 48 */
- },
- {281474976710657ll /* 0x1000000000001 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {281474976710658ll /* 0x1000000000002 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {281474976710659ll /* 0x1000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710660ll /* 0x1000000000004 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {281474976710661ll /* 0x1000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710662ll /* 0x1000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {281474976710663ll /* 0x1000000000007 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {281474976710664ll /* 0x1000000000008 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {281474976710665ll /* 0x1000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710666ll /* 0x100000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {281474976710672ll /* 0x1000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710688ll /* 0x1000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710720ll /* 0x1000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710784ll /* 0x1000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976710912ll /* 0x1000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976711168ll /* 0x1000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976711680ll /* 0x1000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976712704ll /* 0x1000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976714752ll /* 0x1000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976718848ll /* 0x1000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976727040ll /* 0x1000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976743424ll /* 0x1000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976776192ll /* 0x1000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976841728ll /* 0x1000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474976972800ll /* 0x1000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474977234944ll /* 0x1000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474977759232ll /* 0x1000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474978807808ll /* 0x1000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474980904960ll /* 0x1000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474985099264ll /* 0x1000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281474993487872ll /* 0x1000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281475010265088ll /* 0x1000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281475043819520ll /* 0x1000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281475110928384ll /* 0x1000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281475245146112ll /* 0x1000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281475513581568ll /* 0x1000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281476050452480ll /* 0x1000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281477124194304ll /* 0x1000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281479271677952ll /* 0x1000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281483566645248ll /* 0x1000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281492156579840ll /* 0x1000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281509336449024ll /* 0x1000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281543696187392ll /* 0x1001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281612415664128ll /* 0x1002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {281749854617600ll /* 0x1004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {282024732524544ll /* 0x1008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {282574488338432ll /* 0x1010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {283673999966208ll /* 0x1020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {285873023221760ll /* 0x1040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {290271069732864ll /* 0x1080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {299067162755072ll /* 0x1100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 48}, /* shli r3, r1, 48 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {316659348799488ll /* 0x1200000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 45}} /* shli r3, r2, 45 */
- },
- {351843720888320ll /* 0x1400000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 46}} /* shli r3, r2, 46 */
- },
- {422212465065984ll /* 0x1800000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 47}} /* shli r3, r2, 47 */
- },
- {562949953421303ll /* 0x1fffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {562949953421304ll /* 0x1fffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {562949953421305ll /* 0x1fffffffffff9 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {562949953421307ll /* 0x1fffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {562949953421308ll /* 0x1fffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {562949953421309ll /* 0x1fffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {562949953421310ll /* 0x1fffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {562949953421311ll /* 0x1ffffffffffff */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {562949953421312ll /* 0x2000000000000 */ ,
- {{6, 1, 49}} /* shli r2, r1, 49 */
- },
- {562949953421313ll /* 0x2000000000001 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {562949953421314ll /* 0x2000000000002 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {562949953421315ll /* 0x2000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421316ll /* 0x2000000000004 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {562949953421317ll /* 0x2000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421318ll /* 0x2000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {562949953421319ll /* 0x2000000000007 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {562949953421320ll /* 0x2000000000008 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {562949953421321ll /* 0x2000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421322ll /* 0x200000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {562949953421328ll /* 0x2000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421344ll /* 0x2000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421376ll /* 0x2000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421440ll /* 0x2000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421568ll /* 0x2000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953421824ll /* 0x2000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953422336ll /* 0x2000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953423360ll /* 0x2000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953425408ll /* 0x2000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953429504ll /* 0x2000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953437696ll /* 0x2000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953454080ll /* 0x2000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953486848ll /* 0x2000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953552384ll /* 0x2000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953683456ll /* 0x2000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949953945600ll /* 0x2000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949954469888ll /* 0x2000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949955518464ll /* 0x2000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949957615616ll /* 0x2000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949961809920ll /* 0x2000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949970198528ll /* 0x2000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562949986975744ll /* 0x2000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562950020530176ll /* 0x2000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562950087639040ll /* 0x2000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562950221856768ll /* 0x2000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562950490292224ll /* 0x2000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562951027163136ll /* 0x2000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562952100904960ll /* 0x2000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562954248388608ll /* 0x2000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562958543355904ll /* 0x2000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562967133290496ll /* 0x2000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {562984313159680ll /* 0x2000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {563018672898048ll /* 0x2001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {563087392374784ll /* 0x2002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {563224831328256ll /* 0x2004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {563499709235200ll /* 0x2008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {564049465049088ll /* 0x2010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {565148976676864ll /* 0x2020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {567347999932416ll /* 0x2040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {571746046443520ll /* 0x2080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {580542139465728ll /* 0x2100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {598134325510144ll /* 0x2200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 49}, /* shli r3, r1, 49 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {633318697598976ll /* 0x2400000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 46}} /* shli r3, r2, 46 */
- },
- {703687441776640ll /* 0x2800000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 47}} /* shli r3, r2, 47 */
- },
- {844424930131968ll /* 0x3000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 48}} /* shli r3, r2, 48 */
- },
- {1125899906842615ll /* 0x3fffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1125899906842616ll /* 0x3fffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1125899906842617ll /* 0x3fffffffffff9 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1125899906842619ll /* 0x3fffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1125899906842620ll /* 0x3fffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1125899906842621ll /* 0x3fffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1125899906842622ll /* 0x3fffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1125899906842623ll /* 0x3ffffffffffff */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1125899906842624ll /* 0x4000000000000 */ ,
- {{6, 1, 50}} /* shli r2, r1, 50 */
- },
- {1125899906842625ll /* 0x4000000000001 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1125899906842626ll /* 0x4000000000002 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {1125899906842627ll /* 0x4000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842628ll /* 0x4000000000004 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {1125899906842629ll /* 0x4000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842630ll /* 0x4000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1125899906842631ll /* 0x4000000000007 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {1125899906842632ll /* 0x4000000000008 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {1125899906842633ll /* 0x4000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842634ll /* 0x400000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1125899906842640ll /* 0x4000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842656ll /* 0x4000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842688ll /* 0x4000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842752ll /* 0x4000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906842880ll /* 0x4000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906843136ll /* 0x4000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906843648ll /* 0x4000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906844672ll /* 0x4000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906846720ll /* 0x4000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906850816ll /* 0x4000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906859008ll /* 0x4000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906875392ll /* 0x4000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906908160ll /* 0x4000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899906973696ll /* 0x4000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899907104768ll /* 0x4000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899907366912ll /* 0x4000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899907891200ll /* 0x4000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899908939776ll /* 0x4000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899911036928ll /* 0x4000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899915231232ll /* 0x4000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899923619840ll /* 0x4000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899940397056ll /* 0x4000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125899973951488ll /* 0x4000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125900041060352ll /* 0x4000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125900175278080ll /* 0x4000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125900443713536ll /* 0x4000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125900980584448ll /* 0x4000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125902054326272ll /* 0x4000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125904201809920ll /* 0x4000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125908496777216ll /* 0x4000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125917086711808ll /* 0x4000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125934266580992ll /* 0x4000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1125968626319360ll /* 0x4001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1126037345796096ll /* 0x4002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1126174784749568ll /* 0x4004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1126449662656512ll /* 0x4008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1126999418470400ll /* 0x4010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1128098930098176ll /* 0x4020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1130297953353728ll /* 0x4040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1134695999864832ll /* 0x4080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1143492092887040ll /* 0x4100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1161084278931456ll /* 0x4200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1196268651020288ll /* 0x4400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 50}, /* shli r3, r1, 50 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1266637395197952ll /* 0x4800000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 47}} /* shli r3, r2, 47 */
- },
- {1407374883553280ll /* 0x5000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 48}} /* shli r3, r2, 48 */
- },
- {1688849860263936ll /* 0x6000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 49}} /* shli r3, r2, 49 */
- },
- {2251799813685239ll /* 0x7fffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2251799813685240ll /* 0x7fffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2251799813685241ll /* 0x7fffffffffff9 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {2251799813685243ll /* 0x7fffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2251799813685244ll /* 0x7fffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2251799813685245ll /* 0x7fffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2251799813685246ll /* 0x7fffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2251799813685247ll /* 0x7ffffffffffff */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2251799813685248ll /* 0x8000000000000 */ ,
- {{6, 1, 51}} /* shli r2, r1, 51 */
- },
- {2251799813685249ll /* 0x8000000000001 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2251799813685250ll /* 0x8000000000002 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {2251799813685251ll /* 0x8000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685252ll /* 0x8000000000004 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {2251799813685253ll /* 0x8000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685254ll /* 0x8000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2251799813685255ll /* 0x8000000000007 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {2251799813685256ll /* 0x8000000000008 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {2251799813685257ll /* 0x8000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685258ll /* 0x800000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2251799813685264ll /* 0x8000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685280ll /* 0x8000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685312ll /* 0x8000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685376ll /* 0x8000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685504ll /* 0x8000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813685760ll /* 0x8000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813686272ll /* 0x8000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813687296ll /* 0x8000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813689344ll /* 0x8000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813693440ll /* 0x8000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813701632ll /* 0x8000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813718016ll /* 0x8000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813750784ll /* 0x8000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813816320ll /* 0x8000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799813947392ll /* 0x8000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799814209536ll /* 0x8000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799814733824ll /* 0x8000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799815782400ll /* 0x8000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799817879552ll /* 0x8000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799822073856ll /* 0x8000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799830462464ll /* 0x8000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799847239680ll /* 0x8000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799880794112ll /* 0x8000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251799947902976ll /* 0x8000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251800082120704ll /* 0x8000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251800350556160ll /* 0x8000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251800887427072ll /* 0x8000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251801961168896ll /* 0x8000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251804108652544ll /* 0x8000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251808403619840ll /* 0x8000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251816993554432ll /* 0x8000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251834173423616ll /* 0x8000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251868533161984ll /* 0x8001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2251937252638720ll /* 0x8002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2252074691592192ll /* 0x8004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2252349569499136ll /* 0x8008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2252899325313024ll /* 0x8010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2253998836940800ll /* 0x8020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2256197860196352ll /* 0x8040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2260595906707456ll /* 0x8080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2269391999729664ll /* 0x8100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2286984185774080ll /* 0x8200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2322168557862912ll /* 0x8400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2392537302040576ll /* 0x8800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 51}, /* shli r3, r1, 51 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2533274790395904ll /* 0x9000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 48}} /* shli r3, r2, 48 */
- },
- {2814749767106560ll /* 0xa000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 49}} /* shli r3, r2, 49 */
- },
- {3377699720527872ll /* 0xc000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 50}} /* shli r3, r2, 50 */
- },
- {4503599627370487ll /* 0xffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4503599627370488ll /* 0xffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4503599627370489ll /* 0xffffffffffff9 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {4503599627370491ll /* 0xffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4503599627370492ll /* 0xffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4503599627370493ll /* 0xffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4503599627370494ll /* 0xffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4503599627370495ll /* 0xfffffffffffff */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4503599627370496ll /* 0x10000000000000 */ ,
- {{6, 1, 52}} /* shli r2, r1, 52 */
- },
- {4503599627370497ll /* 0x10000000000001 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4503599627370498ll /* 0x10000000000002 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {4503599627370499ll /* 0x10000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370500ll /* 0x10000000000004 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {4503599627370501ll /* 0x10000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370502ll /* 0x10000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4503599627370503ll /* 0x10000000000007 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {4503599627370504ll /* 0x10000000000008 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {4503599627370505ll /* 0x10000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370506ll /* 0x1000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4503599627370512ll /* 0x10000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370528ll /* 0x10000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370560ll /* 0x10000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370624ll /* 0x10000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627370752ll /* 0x10000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627371008ll /* 0x10000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627371520ll /* 0x10000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627372544ll /* 0x10000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627374592ll /* 0x10000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627378688ll /* 0x10000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627386880ll /* 0x10000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627403264ll /* 0x10000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627436032ll /* 0x10000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627501568ll /* 0x10000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627632640ll /* 0x10000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599627894784ll /* 0x10000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599628419072ll /* 0x10000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599629467648ll /* 0x10000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599631564800ll /* 0x10000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599635759104ll /* 0x10000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599644147712ll /* 0x10000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599660924928ll /* 0x10000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599694479360ll /* 0x10000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599761588224ll /* 0x10000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503599895805952ll /* 0x10000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503600164241408ll /* 0x10000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503600701112320ll /* 0x10000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503601774854144ll /* 0x10000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503603922337792ll /* 0x10000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503608217305088ll /* 0x10000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503616807239680ll /* 0x10000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503633987108864ll /* 0x10000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503668346847232ll /* 0x10001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503737066323968ll /* 0x10002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4503874505277440ll /* 0x10004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4504149383184384ll /* 0x10008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4504699138998272ll /* 0x10010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4505798650626048ll /* 0x10020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4507997673881600ll /* 0x10040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4512395720392704ll /* 0x10080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4521191813414912ll /* 0x10100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4538783999459328ll /* 0x10200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4573968371548160ll /* 0x10400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4644337115725824ll /* 0x10800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4785074604081152ll /* 0x11000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 52}, /* shli r3, r1, 52 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {5066549580791808ll /* 0x12000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 49}} /* shli r3, r2, 49 */
- },
- {5629499534213120ll /* 0x14000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 50}} /* shli r3, r2, 50 */
- },
- {6755399441055744ll /* 0x18000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 51}} /* shli r3, r2, 51 */
- },
- {9007199254740983ll /* 0x1ffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9007199254740984ll /* 0x1ffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9007199254740985ll /* 0x1ffffffffffff9 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {9007199254740987ll /* 0x1ffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9007199254740988ll /* 0x1ffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9007199254740989ll /* 0x1ffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9007199254740990ll /* 0x1ffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9007199254740991ll /* 0x1fffffffffffff */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {9007199254740992ll /* 0x20000000000000 */ ,
- {{6, 1, 53}} /* shli r2, r1, 53 */
- },
- {9007199254740993ll /* 0x20000000000001 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {9007199254740994ll /* 0x20000000000002 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {9007199254740995ll /* 0x20000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254740996ll /* 0x20000000000004 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {9007199254740997ll /* 0x20000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254740998ll /* 0x20000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {9007199254740999ll /* 0x20000000000007 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {9007199254741000ll /* 0x20000000000008 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {9007199254741001ll /* 0x20000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254741002ll /* 0x2000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {9007199254741008ll /* 0x20000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254741024ll /* 0x20000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254741056ll /* 0x20000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254741120ll /* 0x20000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254741248ll /* 0x20000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254741504ll /* 0x20000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254742016ll /* 0x20000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254743040ll /* 0x20000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254745088ll /* 0x20000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254749184ll /* 0x20000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254757376ll /* 0x20000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254773760ll /* 0x20000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254806528ll /* 0x20000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199254872064ll /* 0x20000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199255003136ll /* 0x20000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199255265280ll /* 0x20000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199255789568ll /* 0x20000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199256838144ll /* 0x20000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199258935296ll /* 0x20000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199263129600ll /* 0x20000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199271518208ll /* 0x20000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199288295424ll /* 0x20000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199321849856ll /* 0x20000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199388958720ll /* 0x20000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199523176448ll /* 0x20000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007199791611904ll /* 0x20000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007200328482816ll /* 0x20000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007201402224640ll /* 0x20000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007203549708288ll /* 0x20000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007207844675584ll /* 0x20000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007216434610176ll /* 0x20000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007233614479360ll /* 0x20000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007267974217728ll /* 0x20001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007336693694464ll /* 0x20002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007474132647936ll /* 0x20004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9007749010554880ll /* 0x20008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9008298766368768ll /* 0x20010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9009398277996544ll /* 0x20020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9011597301252096ll /* 0x20040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9015995347763200ll /* 0x20080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9024791440785408ll /* 0x20100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9042383626829824ll /* 0x20200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9077567998918656ll /* 0x20400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9147936743096320ll /* 0x20800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9288674231451648ll /* 0x21000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9570149208162304ll /* 0x22000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 53}, /* shli r3, r1, 53 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {10133099161583616ll /* 0x24000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 50}} /* shli r3, r2, 50 */
- },
- {11258999068426240ll /* 0x28000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 51}} /* shli r3, r2, 51 */
- },
- {13510798882111488ll /* 0x30000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 52}} /* shli r3, r2, 52 */
- },
- {18014398509481975ll /* 0x3ffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {18014398509481976ll /* 0x3ffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {18014398509481977ll /* 0x3ffffffffffff9 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {18014398509481979ll /* 0x3ffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {18014398509481980ll /* 0x3ffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {18014398509481981ll /* 0x3ffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {18014398509481982ll /* 0x3ffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {18014398509481983ll /* 0x3fffffffffffff */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {18014398509481984ll /* 0x40000000000000 */ ,
- {{6, 1, 54}} /* shli r2, r1, 54 */
- },
- {18014398509481985ll /* 0x40000000000001 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {18014398509481986ll /* 0x40000000000002 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {18014398509481987ll /* 0x40000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509481988ll /* 0x40000000000004 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {18014398509481989ll /* 0x40000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509481990ll /* 0x40000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {18014398509481991ll /* 0x40000000000007 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {18014398509481992ll /* 0x40000000000008 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {18014398509481993ll /* 0x40000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509481994ll /* 0x4000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {18014398509482000ll /* 0x40000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509482016ll /* 0x40000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509482048ll /* 0x40000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509482112ll /* 0x40000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509482240ll /* 0x40000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509482496ll /* 0x40000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509483008ll /* 0x40000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509484032ll /* 0x40000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509486080ll /* 0x40000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509490176ll /* 0x40000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509498368ll /* 0x40000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509514752ll /* 0x40000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509547520ll /* 0x40000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509613056ll /* 0x40000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398509744128ll /* 0x40000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398510006272ll /* 0x40000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398510530560ll /* 0x40000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398511579136ll /* 0x40000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398513676288ll /* 0x40000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398517870592ll /* 0x40000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398526259200ll /* 0x40000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398543036416ll /* 0x40000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398576590848ll /* 0x40000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398643699712ll /* 0x40000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014398777917440ll /* 0x40000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014399046352896ll /* 0x40000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014399583223808ll /* 0x40000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014400656965632ll /* 0x40000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014402804449280ll /* 0x40000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014407099416576ll /* 0x40000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014415689351168ll /* 0x40000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014432869220352ll /* 0x40000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014467228958720ll /* 0x40001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014535948435456ll /* 0x40002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014673387388928ll /* 0x40004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18014948265295872ll /* 0x40008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18015498021109760ll /* 0x40010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18016597532737536ll /* 0x40020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18018796555993088ll /* 0x40040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18023194602504192ll /* 0x40080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18031990695526400ll /* 0x40100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18049582881570816ll /* 0x40200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18084767253659648ll /* 0x40400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18155135997837312ll /* 0x40800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18295873486192640ll /* 0x41000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18577348462903296ll /* 0x42000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {19140298416324608ll /* 0x44000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 54}, /* shli r3, r1, 54 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {20266198323167232ll /* 0x48000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 51}} /* shli r3, r2, 51 */
- },
- {22517998136852480ll /* 0x50000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 52}} /* shli r3, r2, 52 */
- },
- {27021597764222976ll /* 0x60000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 53}} /* shli r3, r2, 53 */
- },
- {36028797018963959ll /* 0x7ffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {36028797018963960ll /* 0x7ffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {36028797018963961ll /* 0x7ffffffffffff9 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {36028797018963963ll /* 0x7ffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {36028797018963964ll /* 0x7ffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {36028797018963965ll /* 0x7ffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {36028797018963966ll /* 0x7ffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {36028797018963967ll /* 0x7fffffffffffff */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {36028797018963968ll /* 0x80000000000000 */ ,
- {{6, 1, 55}} /* shli r2, r1, 55 */
- },
- {36028797018963969ll /* 0x80000000000001 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {36028797018963970ll /* 0x80000000000002 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {36028797018963971ll /* 0x80000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018963972ll /* 0x80000000000004 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {36028797018963973ll /* 0x80000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018963974ll /* 0x80000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {36028797018963975ll /* 0x80000000000007 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {36028797018963976ll /* 0x80000000000008 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {36028797018963977ll /* 0x80000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018963978ll /* 0x8000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {36028797018963984ll /* 0x80000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018964000ll /* 0x80000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018964032ll /* 0x80000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018964096ll /* 0x80000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018964224ll /* 0x80000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018964480ll /* 0x80000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018964992ll /* 0x80000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018966016ll /* 0x80000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018968064ll /* 0x80000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018972160ll /* 0x80000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018980352ll /* 0x80000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797018996736ll /* 0x80000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797019029504ll /* 0x80000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797019095040ll /* 0x80000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797019226112ll /* 0x80000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797019488256ll /* 0x80000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797020012544ll /* 0x80000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797021061120ll /* 0x80000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797023158272ll /* 0x80000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797027352576ll /* 0x80000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797035741184ll /* 0x80000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797052518400ll /* 0x80000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797086072832ll /* 0x80000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797153181696ll /* 0x80000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797287399424ll /* 0x80000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028797555834880ll /* 0x80000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028798092705792ll /* 0x80000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028799166447616ll /* 0x80000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028801313931264ll /* 0x80000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028805608898560ll /* 0x80000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028814198833152ll /* 0x80000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028831378702336ll /* 0x80000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028865738440704ll /* 0x80001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36028934457917440ll /* 0x80002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36029071896870912ll /* 0x80004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36029346774777856ll /* 0x80008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36029896530591744ll /* 0x80010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36030996042219520ll /* 0x80020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36033195065475072ll /* 0x80040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36037593111986176ll /* 0x80080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36046389205008384ll /* 0x80100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36063981391052800ll /* 0x80200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36099165763141632ll /* 0x80400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36169534507319296ll /* 0x80800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36310271995674624ll /* 0x81000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36591746972385280ll /* 0x82000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {37154696925806592ll /* 0x84000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {38280596832649216ll /* 0x88000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 55}, /* shli r3, r1, 55 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {40532396646334464ll /* 0x90000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 52}} /* shli r3, r2, 52 */
- },
- {45035996273704960ll /* 0xa0000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 53}} /* shli r3, r2, 53 */
- },
- {54043195528445952ll /* 0xc0000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 54}} /* shli r3, r2, 54 */
- },
- {72057594037927927ll /* 0xfffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {72057594037927928ll /* 0xfffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {72057594037927929ll /* 0xfffffffffffff9 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {72057594037927931ll /* 0xfffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {72057594037927932ll /* 0xfffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {72057594037927933ll /* 0xfffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {72057594037927934ll /* 0xfffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {72057594037927935ll /* 0xffffffffffffff */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {72057594037927936ll /* 0x100000000000000 */ ,
- {{6, 1, 56}} /* shli r2, r1, 56 */
- },
- {72057594037927937ll /* 0x100000000000001 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {72057594037927938ll /* 0x100000000000002 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {72057594037927939ll /* 0x100000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037927940ll /* 0x100000000000004 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {72057594037927941ll /* 0x100000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037927942ll /* 0x100000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {72057594037927943ll /* 0x100000000000007 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {72057594037927944ll /* 0x100000000000008 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {72057594037927945ll /* 0x100000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037927946ll /* 0x10000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {72057594037927952ll /* 0x100000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037927968ll /* 0x100000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037928000ll /* 0x100000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037928064ll /* 0x100000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037928192ll /* 0x100000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037928448ll /* 0x100000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037928960ll /* 0x100000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037929984ll /* 0x100000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037932032ll /* 0x100000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037936128ll /* 0x100000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037944320ll /* 0x100000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037960704ll /* 0x100000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594037993472ll /* 0x100000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594038059008ll /* 0x100000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594038190080ll /* 0x100000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594038452224ll /* 0x100000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594038976512ll /* 0x100000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594040025088ll /* 0x100000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594042122240ll /* 0x100000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594046316544ll /* 0x100000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594054705152ll /* 0x100000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594071482368ll /* 0x100000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594105036800ll /* 0x100000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594172145664ll /* 0x100000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594306363392ll /* 0x100000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057594574798848ll /* 0x100000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057595111669760ll /* 0x100000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057596185411584ll /* 0x100000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057598332895232ll /* 0x100000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057602627862528ll /* 0x100000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057611217797120ll /* 0x100000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057628397666304ll /* 0x100000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057662757404672ll /* 0x100001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057731476881408ll /* 0x100002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72057868915834880ll /* 0x100004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72058143793741824ll /* 0x100008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72058693549555712ll /* 0x100010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72059793061183488ll /* 0x100020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72061992084439040ll /* 0x100040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72066390130950144ll /* 0x100080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72075186223972352ll /* 0x100100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72092778410016768ll /* 0x100200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72127962782105600ll /* 0x100400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72198331526283264ll /* 0x100800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72339069014638592ll /* 0x101000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {72620543991349248ll /* 0x102000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {73183493944770560ll /* 0x104000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {74309393851613184ll /* 0x108000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {76561193665298432ll /* 0x110000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 56}, /* shli r3, r1, 56 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {81064793292668928ll /* 0x120000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 53}} /* shli r3, r2, 53 */
- },
- {90071992547409920ll /* 0x140000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 54}} /* shli r3, r2, 54 */
- },
- {108086391056891904ll /* 0x180000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 55}} /* shli r3, r2, 55 */
- },
- {144115188075855863ll /* 0x1fffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {144115188075855864ll /* 0x1fffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {144115188075855865ll /* 0x1fffffffffffff9 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {144115188075855867ll /* 0x1fffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {144115188075855868ll /* 0x1fffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {144115188075855869ll /* 0x1fffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {144115188075855870ll /* 0x1fffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {144115188075855871ll /* 0x1ffffffffffffff */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {144115188075855872ll /* 0x200000000000000 */ ,
- {{6, 1, 57}} /* shli r2, r1, 57 */
- },
- {144115188075855873ll /* 0x200000000000001 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {144115188075855874ll /* 0x200000000000002 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {144115188075855875ll /* 0x200000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075855876ll /* 0x200000000000004 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {144115188075855877ll /* 0x200000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075855878ll /* 0x200000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {144115188075855879ll /* 0x200000000000007 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {144115188075855880ll /* 0x200000000000008 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {144115188075855881ll /* 0x200000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075855882ll /* 0x20000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {144115188075855888ll /* 0x200000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075855904ll /* 0x200000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075855936ll /* 0x200000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075856000ll /* 0x200000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075856128ll /* 0x200000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075856384ll /* 0x200000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075856896ll /* 0x200000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075857920ll /* 0x200000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075859968ll /* 0x200000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075864064ll /* 0x200000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075872256ll /* 0x200000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075888640ll /* 0x200000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075921408ll /* 0x200000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188075986944ll /* 0x200000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188076118016ll /* 0x200000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188076380160ll /* 0x200000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188076904448ll /* 0x200000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188077953024ll /* 0x200000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188080050176ll /* 0x200000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188084244480ll /* 0x200000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188092633088ll /* 0x200000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188109410304ll /* 0x200000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188142964736ll /* 0x200000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188210073600ll /* 0x200000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188344291328ll /* 0x200000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115188612726784ll /* 0x200000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115189149597696ll /* 0x200000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115190223339520ll /* 0x200000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115192370823168ll /* 0x200000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115196665790464ll /* 0x200000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115205255725056ll /* 0x200000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115222435594240ll /* 0x200000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115256795332608ll /* 0x200001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115325514809344ll /* 0x200002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115462953762816ll /* 0x200004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144115737831669760ll /* 0x200008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144116287587483648ll /* 0x200010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144117387099111424ll /* 0x200020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144119586122366976ll /* 0x200040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144123984168878080ll /* 0x200080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144132780261900288ll /* 0x200100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144150372447944704ll /* 0x200200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144185556820033536ll /* 0x200400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144255925564211200ll /* 0x200800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144396663052566528ll /* 0x201000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {144678138029277184ll /* 0x202000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {145241087982698496ll /* 0x204000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {146366987889541120ll /* 0x208000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {148618787703226368ll /* 0x210000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {153122387330596864ll /* 0x220000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 57}, /* shli r3, r1, 57 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {162129586585337856ll /* 0x240000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 54}} /* shli r3, r2, 54 */
- },
- {180143985094819840ll /* 0x280000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 55}} /* shli r3, r2, 55 */
- },
- {216172782113783808ll /* 0x300000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 56}} /* shli r3, r2, 56 */
- },
- {288230376151711735ll /* 0x3fffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {288230376151711736ll /* 0x3fffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {288230376151711737ll /* 0x3fffffffffffff9 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {288230376151711739ll /* 0x3fffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {288230376151711740ll /* 0x3fffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {288230376151711741ll /* 0x3fffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {288230376151711742ll /* 0x3fffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {288230376151711743ll /* 0x3ffffffffffffff */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {288230376151711744ll /* 0x400000000000000 */ ,
- {{6, 1, 58}} /* shli r2, r1, 58 */
- },
- {288230376151711745ll /* 0x400000000000001 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {288230376151711746ll /* 0x400000000000002 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {288230376151711747ll /* 0x400000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151711748ll /* 0x400000000000004 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {288230376151711749ll /* 0x400000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151711750ll /* 0x400000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {288230376151711751ll /* 0x400000000000007 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {288230376151711752ll /* 0x400000000000008 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {288230376151711753ll /* 0x400000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151711754ll /* 0x40000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {288230376151711760ll /* 0x400000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151711776ll /* 0x400000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151711808ll /* 0x400000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151711872ll /* 0x400000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151712000ll /* 0x400000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151712256ll /* 0x400000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151712768ll /* 0x400000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151713792ll /* 0x400000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151715840ll /* 0x400000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151719936ll /* 0x400000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151728128ll /* 0x400000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151744512ll /* 0x400000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151777280ll /* 0x400000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151842816ll /* 0x400000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376151973888ll /* 0x400000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376152236032ll /* 0x400000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376152760320ll /* 0x400000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376153808896ll /* 0x400000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376155906048ll /* 0x400000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376160100352ll /* 0x400000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376168488960ll /* 0x400000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376185266176ll /* 0x400000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376218820608ll /* 0x400000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376285929472ll /* 0x400000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376420147200ll /* 0x400000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230376688582656ll /* 0x400000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230377225453568ll /* 0x400000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230378299195392ll /* 0x400000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230380446679040ll /* 0x400000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230384741646336ll /* 0x400000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230393331580928ll /* 0x400000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230410511450112ll /* 0x400000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230444871188480ll /* 0x400001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230513590665216ll /* 0x400002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230651029618688ll /* 0x400004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288230925907525632ll /* 0x400008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288231475663339520ll /* 0x400010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288232575174967296ll /* 0x400020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288234774198222848ll /* 0x400040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288239172244733952ll /* 0x400080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288247968337756160ll /* 0x400100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288265560523800576ll /* 0x400200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288300744895889408ll /* 0x400400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288371113640067072ll /* 0x400800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288511851128422400ll /* 0x401000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {288793326105133056ll /* 0x402000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {289356276058554368ll /* 0x404000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {290482175965396992ll /* 0x408000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {292733975779082240ll /* 0x410000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {297237575406452736ll /* 0x420000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {306244774661193728ll /* 0x440000000000000 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {6, 1, 58}, /* shli r3, r1, 58 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {324259173170675712ll /* 0x480000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 55}} /* shli r3, r2, 55 */
- },
- {360287970189639680ll /* 0x500000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 56}} /* shli r3, r2, 56 */
- },
- {432345564227567616ll /* 0x600000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 57}} /* shli r3, r2, 57 */
- },
- {576460752303423479ll /* 0x7fffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {576460752303423480ll /* 0x7fffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {576460752303423481ll /* 0x7fffffffffffff9 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {576460752303423483ll /* 0x7fffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {576460752303423484ll /* 0x7fffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {576460752303423485ll /* 0x7fffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {576460752303423486ll /* 0x7fffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {576460752303423487ll /* 0x7ffffffffffffff */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {576460752303423488ll /* 0x800000000000000 */ ,
- {{6, 1, 59}} /* shli r2, r1, 59 */
- },
- {576460752303423489ll /* 0x800000000000001 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {576460752303423490ll /* 0x800000000000002 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {576460752303423491ll /* 0x800000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423492ll /* 0x800000000000004 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {576460752303423493ll /* 0x800000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423494ll /* 0x800000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {576460752303423495ll /* 0x800000000000007 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {576460752303423496ll /* 0x800000000000008 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {576460752303423497ll /* 0x800000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423498ll /* 0x80000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {576460752303423504ll /* 0x800000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423520ll /* 0x800000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423552ll /* 0x800000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423616ll /* 0x800000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303423744ll /* 0x800000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303424000ll /* 0x800000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303424512ll /* 0x800000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303425536ll /* 0x800000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303427584ll /* 0x800000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303431680ll /* 0x800000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303439872ll /* 0x800000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303456256ll /* 0x800000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303489024ll /* 0x800000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303554560ll /* 0x800000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303685632ll /* 0x800000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752303947776ll /* 0x800000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752304472064ll /* 0x800000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752305520640ll /* 0x800000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752307617792ll /* 0x800000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752311812096ll /* 0x800000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752320200704ll /* 0x800000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752336977920ll /* 0x800000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752370532352ll /* 0x800000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752437641216ll /* 0x800000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752571858944ll /* 0x800000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460752840294400ll /* 0x800000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460753377165312ll /* 0x800000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460754450907136ll /* 0x800000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460756598390784ll /* 0x800000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460760893358080ll /* 0x800000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460769483292672ll /* 0x800000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460786663161856ll /* 0x800000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460821022900224ll /* 0x800001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576460889742376960ll /* 0x800002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576461027181330432ll /* 0x800004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576461302059237376ll /* 0x800008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576461851815051264ll /* 0x800010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576462951326679040ll /* 0x800020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576465150349934592ll /* 0x800040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576469548396445696ll /* 0x800080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576478344489467904ll /* 0x800100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576495936675512320ll /* 0x800200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576531121047601152ll /* 0x800400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576601489791778816ll /* 0x800800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {576742227280134144ll /* 0x801000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {577023702256844800ll /* 0x802000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {577586652210266112ll /* 0x804000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {578712552117108736ll /* 0x808000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {580964351930793984ll /* 0x810000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {585467951558164480ll /* 0x820000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {594475150812905472ll /* 0x840000000000000 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {612489549322387456ll /* 0x880000000000000 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {6, 1, 59}, /* shli r3, r1, 59 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {648518346341351424ll /* 0x900000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 56}} /* shli r3, r2, 56 */
- },
- {720575940379279360ll /* 0xa00000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 57}} /* shli r3, r2, 57 */
- },
- {864691128455135232ll /* 0xc00000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 58}} /* shli r3, r2, 58 */
- },
- {1152921504606846967ll /* 0xffffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1152921504606846968ll /* 0xffffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1152921504606846969ll /* 0xffffffffffffff9 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {1152921504606846971ll /* 0xffffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1152921504606846972ll /* 0xffffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1152921504606846973ll /* 0xffffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1152921504606846974ll /* 0xffffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1152921504606846975ll /* 0xfffffffffffffff */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1152921504606846976ll /* 0x1000000000000000 */ ,
- {{6, 1, 60}} /* shli r2, r1, 60 */
- },
- {1152921504606846977ll /* 0x1000000000000001 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1152921504606846978ll /* 0x1000000000000002 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {1152921504606846979ll /* 0x1000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606846980ll /* 0x1000000000000004 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {1152921504606846981ll /* 0x1000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606846982ll /* 0x1000000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1152921504606846983ll /* 0x1000000000000007 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {1152921504606846984ll /* 0x1000000000000008 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {1152921504606846985ll /* 0x1000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606846986ll /* 0x100000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {1152921504606846992ll /* 0x1000000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606847008ll /* 0x1000000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606847040ll /* 0x1000000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606847104ll /* 0x1000000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606847232ll /* 0x1000000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606847488ll /* 0x1000000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606848000ll /* 0x1000000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606849024ll /* 0x1000000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606851072ll /* 0x1000000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606855168ll /* 0x1000000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606863360ll /* 0x1000000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606879744ll /* 0x1000000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606912512ll /* 0x1000000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504606978048ll /* 0x1000000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504607109120ll /* 0x1000000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504607371264ll /* 0x1000000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504607895552ll /* 0x1000000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504608944128ll /* 0x1000000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504611041280ll /* 0x1000000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504615235584ll /* 0x1000000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504623624192ll /* 0x1000000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504640401408ll /* 0x1000000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504673955840ll /* 0x1000000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504741064704ll /* 0x1000000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921504875282432ll /* 0x1000000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921505143717888ll /* 0x1000000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921505680588800ll /* 0x1000000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921506754330624ll /* 0x1000000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921508901814272ll /* 0x1000000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921513196781568ll /* 0x1000000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921521786716160ll /* 0x1000000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921538966585344ll /* 0x1000000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921573326323712ll /* 0x1000001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921642045800448ll /* 0x1000002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152921779484753920ll /* 0x1000004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152922054362660864ll /* 0x1000008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152922604118474752ll /* 0x1000010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152923703630102528ll /* 0x1000020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152925902653358080ll /* 0x1000040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152930300699869184ll /* 0x1000080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152939096792891392ll /* 0x1000100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152956688978935808ll /* 0x1000200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1152991873351024640ll /* 0x1000400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1153062242095202304ll /* 0x1000800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1153202979583557632ll /* 0x1001000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1153484454560268288ll /* 0x1002000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1154047404513689600ll /* 0x1004000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1155173304420532224ll /* 0x1008000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1157425104234217472ll /* 0x1010000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1161928703861587968ll /* 0x1020000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1170935903116328960ll /* 0x1040000000000000 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1188950301625810944ll /* 0x1080000000000000 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1224979098644774912ll /* 0x1100000000000000 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {6, 1, 60}, /* shli r3, r1, 60 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1297036692682702848ll /* 0x1200000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 57}} /* shli r3, r2, 57 */
- },
- {1441151880758558720ll /* 0x1400000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 58}} /* shli r3, r2, 58 */
- },
- {1729382256910270464ll /* 0x1800000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 59}} /* shli r3, r2, 59 */
- },
- {2305843009213693943ll /* 0x1ffffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2305843009213693944ll /* 0x1ffffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2305843009213693945ll /* 0x1ffffffffffffff9 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {2305843009213693947ll /* 0x1ffffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2305843009213693948ll /* 0x1ffffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2305843009213693949ll /* 0x1ffffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2305843009213693950ll /* 0x1ffffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2305843009213693951ll /* 0x1fffffffffffffff */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2305843009213693952ll /* 0x2000000000000000 */ ,
- {{6, 1, 61}} /* shli r2, r1, 61 */
- },
- {2305843009213693953ll /* 0x2000000000000001 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2305843009213693954ll /* 0x2000000000000002 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {2305843009213693955ll /* 0x2000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213693956ll /* 0x2000000000000004 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {2305843009213693957ll /* 0x2000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213693958ll /* 0x2000000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2305843009213693959ll /* 0x2000000000000007 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {2305843009213693960ll /* 0x2000000000000008 */ ,
- {{6, 1, 61}, /* shli r2, r1, 61 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {2305843009213693961ll /* 0x2000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213693962ll /* 0x200000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {2305843009213693968ll /* 0x2000000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213693984ll /* 0x2000000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213694016ll /* 0x2000000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213694080ll /* 0x2000000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213694208ll /* 0x2000000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213694464ll /* 0x2000000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213694976ll /* 0x2000000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213696000ll /* 0x2000000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213698048ll /* 0x2000000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213702144ll /* 0x2000000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213710336ll /* 0x2000000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213726720ll /* 0x2000000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213759488ll /* 0x2000000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213825024ll /* 0x2000000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009213956096ll /* 0x2000000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009214218240ll /* 0x2000000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009214742528ll /* 0x2000000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009215791104ll /* 0x2000000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009217888256ll /* 0x2000000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009222082560ll /* 0x2000000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009230471168ll /* 0x2000000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009247248384ll /* 0x2000000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009280802816ll /* 0x2000000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009347911680ll /* 0x2000000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009482129408ll /* 0x2000000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843009750564864ll /* 0x2000000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843010287435776ll /* 0x2000000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843011361177600ll /* 0x2000000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843013508661248ll /* 0x2000000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843017803628544ll /* 0x2000000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843026393563136ll /* 0x2000000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843043573432320ll /* 0x2000000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843077933170688ll /* 0x2000001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843146652647424ll /* 0x2000002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843284091600896ll /* 0x2000004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305843558969507840ll /* 0x2000008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305844108725321728ll /* 0x2000010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305845208236949504ll /* 0x2000020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305847407260205056ll /* 0x2000040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305851805306716160ll /* 0x2000080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305860601399738368ll /* 0x2000100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305878193585782784ll /* 0x2000200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305913377957871616ll /* 0x2000400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2305983746702049280ll /* 0x2000800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2306124484190404608ll /* 0x2001000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2306405959167115264ll /* 0x2002000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2306968909120536576ll /* 0x2004000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2308094809027379200ll /* 0x2008000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2310346608841064448ll /* 0x2010000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2314850208468434944ll /* 0x2020000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2323857407723175936ll /* 0x2040000000000000 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2341871806232657920ll /* 0x2080000000000000 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2377900603251621888ll /* 0x2100000000000000 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2449958197289549824ll /* 0x2200000000000000 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {6, 1, 61}, /* shli r3, r1, 61 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2594073385365405696ll /* 0x2400000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 58}} /* shli r3, r2, 58 */
- },
- {2882303761517117440ll /* 0x2800000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 59}} /* shli r3, r2, 59 */
- },
- {3458764513820540928ll /* 0x3000000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 60}} /* shli r3, r2, 60 */
- },
- {4611686018427387895ll /* 0x3ffffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4611686018427387896ll /* 0x3ffffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4611686018427387897ll /* 0x3ffffffffffffff9 */ ,
- {{6, 1, 59}, /* shli r2, r1, 59 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {4611686018427387899ll /* 0x3ffffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4611686018427387900ll /* 0x3ffffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4611686018427387901ll /* 0x3ffffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4611686018427387902ll /* 0x3ffffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4611686018427387903ll /* 0x3fffffffffffffff */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4611686018427387904ll /* 0x4000000000000000 */ ,
- {{6, 1, 62}} /* shli r2, r1, 62 */
- },
- {4611686018427387905ll /* 0x4000000000000001 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4611686018427387906ll /* 0x4000000000000002 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {3, 1, 2}} /* shl1add r3, r1, r2 */
- },
- {4611686018427387907ll /* 0x4000000000000003 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427387908ll /* 0x4000000000000004 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {4, 1, 2}} /* shl2add r3, r1, r2 */
- },
- {4611686018427387909ll /* 0x4000000000000005 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427387910ll /* 0x4000000000000006 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4611686018427387911ll /* 0x4000000000000007 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* shl3add r4, r1, r3 */
- },
- {4611686018427387912ll /* 0x4000000000000008 */ ,
- {{6, 1, 62}, /* shli r2, r1, 62 */
- {5, 1, 2}} /* shl3add r3, r1, r2 */
- },
- {4611686018427387913ll /* 0x4000000000000009 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427387914ll /* 0x400000000000000a */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {3, 2, 3}} /* shl1add r4, r2, r3 */
- },
- {4611686018427387920ll /* 0x4000000000000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427387936ll /* 0x4000000000000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427387968ll /* 0x4000000000000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427388032ll /* 0x4000000000000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427388160ll /* 0x4000000000000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427388416ll /* 0x4000000000000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427388928ll /* 0x4000000000000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427389952ll /* 0x4000000000000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427392000ll /* 0x4000000000001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427396096ll /* 0x4000000000002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427404288ll /* 0x4000000000004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427420672ll /* 0x4000000000008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427453440ll /* 0x4000000000010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427518976ll /* 0x4000000000020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427650048ll /* 0x4000000000040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018427912192ll /* 0x4000000000080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018428436480ll /* 0x4000000000100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018429485056ll /* 0x4000000000200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018431582208ll /* 0x4000000000400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018435776512ll /* 0x4000000000800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018444165120ll /* 0x4000000001000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018460942336ll /* 0x4000000002000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018494496768ll /* 0x4000000004000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018561605632ll /* 0x4000000008000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018695823360ll /* 0x4000000010000000 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686018964258816ll /* 0x4000000020000000 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686019501129728ll /* 0x4000000040000000 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686020574871552ll /* 0x4000000080000000 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686022722355200ll /* 0x4000000100000000 */ ,
- {{6, 1, 32}, /* shli r2, r1, 32 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686027017322496ll /* 0x4000000200000000 */ ,
- {{6, 1, 33}, /* shli r2, r1, 33 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686035607257088ll /* 0x4000000400000000 */ ,
- {{6, 1, 34}, /* shli r2, r1, 34 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686052787126272ll /* 0x4000000800000000 */ ,
- {{6, 1, 35}, /* shli r2, r1, 35 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686087146864640ll /* 0x4000001000000000 */ ,
- {{6, 1, 36}, /* shli r2, r1, 36 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686155866341376ll /* 0x4000002000000000 */ ,
- {{6, 1, 37}, /* shli r2, r1, 37 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686293305294848ll /* 0x4000004000000000 */ ,
- {{6, 1, 38}, /* shli r2, r1, 38 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611686568183201792ll /* 0x4000008000000000 */ ,
- {{6, 1, 39}, /* shli r2, r1, 39 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611687117939015680ll /* 0x4000010000000000 */ ,
- {{6, 1, 40}, /* shli r2, r1, 40 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611688217450643456ll /* 0x4000020000000000 */ ,
- {{6, 1, 41}, /* shli r2, r1, 41 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611690416473899008ll /* 0x4000040000000000 */ ,
- {{6, 1, 42}, /* shli r2, r1, 42 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611694814520410112ll /* 0x4000080000000000 */ ,
- {{6, 1, 43}, /* shli r2, r1, 43 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611703610613432320ll /* 0x4000100000000000 */ ,
- {{6, 1, 44}, /* shli r2, r1, 44 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611721202799476736ll /* 0x4000200000000000 */ ,
- {{6, 1, 45}, /* shli r2, r1, 45 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611756387171565568ll /* 0x4000400000000000 */ ,
- {{6, 1, 46}, /* shli r2, r1, 46 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611826755915743232ll /* 0x4000800000000000 */ ,
- {{6, 1, 47}, /* shli r2, r1, 47 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4611967493404098560ll /* 0x4001000000000000 */ ,
- {{6, 1, 48}, /* shli r2, r1, 48 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4612248968380809216ll /* 0x4002000000000000 */ ,
- {{6, 1, 49}, /* shli r2, r1, 49 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4612811918334230528ll /* 0x4004000000000000 */ ,
- {{6, 1, 50}, /* shli r2, r1, 50 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4613937818241073152ll /* 0x4008000000000000 */ ,
- {{6, 1, 51}, /* shli r2, r1, 51 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4616189618054758400ll /* 0x4010000000000000 */ ,
- {{6, 1, 52}, /* shli r2, r1, 52 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4620693217682128896ll /* 0x4020000000000000 */ ,
- {{6, 1, 53}, /* shli r2, r1, 53 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4629700416936869888ll /* 0x4040000000000000 */ ,
- {{6, 1, 54}, /* shli r2, r1, 54 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4647714815446351872ll /* 0x4080000000000000 */ ,
- {{6, 1, 55}, /* shli r2, r1, 55 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4683743612465315840ll /* 0x4100000000000000 */ ,
- {{6, 1, 56}, /* shli r2, r1, 56 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4755801206503243776ll /* 0x4200000000000000 */ ,
- {{6, 1, 57}, /* shli r2, r1, 57 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4899916394579099648ll /* 0x4400000000000000 */ ,
- {{6, 1, 58}, /* shli r2, r1, 58 */
- {6, 1, 62}, /* shli r3, r1, 62 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {5188146770730811392ll /* 0x4800000000000000 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 2, 59}} /* shli r3, r2, 59 */
- },
- {5764607523034234880ll /* 0x5000000000000000 */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 2, 60}} /* shli r3, r2, 60 */
- },
- {6917529027641081855ll /* 0x5fffffffffffffff */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 61}, /* shli r3, r2, 61 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {6917529027641081856ll /* 0x6000000000000000 */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 2, 61}} /* shli r3, r2, 61 */
- },
- {9223372036854775799ll /* 0x7ffffffffffffff7 */ ,
- {{5, 1, 1}, /* shl3add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9223372036854775800ll /* 0x7ffffffffffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9223372036854775801ll /* 0x7ffffffffffffff9 */ ,
- {{6, 1, 60}, /* shli r2, r1, 60 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* shl3add r4, r3, r1 */
- },
- {9223372036854775803ll /* 0x7ffffffffffffffb */ ,
- {{4, 1, 1}, /* shl2add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9223372036854775804ll /* 0x7ffffffffffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9223372036854775805ll /* 0x7ffffffffffffffd */ ,
- {{3, 1, 1}, /* shl1add r2, r1, r1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9223372036854775806ll /* 0x7ffffffffffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 63}, /* shli r3, r1, 63 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {9223372036854775807ll /* 0x7fffffffffffffff */ ,
- {{6, 1, 63}, /* shli r2, r1, 63 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- }
-};
-
-const int tilegx_multiply_insn_seq_table_size =
- (int) (sizeof tilegx_multiply_insn_seq_table
- / sizeof tilegx_multiply_insn_seq_table[0]);
diff --git a/gcc/config/tilegx/predicates.md b/gcc/config/tilegx/predicates.md
deleted file mode 100644
index f21ddab..0000000
--- a/gcc/config/tilegx/predicates.md
+++ /dev/null
@@ -1,290 +0,0 @@
-;; Predicate definitions for Tilera TILE-Gx.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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/>.
-
-;; Return true if OP is the zero constant for MODE.
-(define_predicate "const_zero_operand"
- (and (match_code "const_int,const_double,const_vector")
- (match_test "op == CONST0_RTX (mode)")))
-
-;; Returns true if OP is either the constant zero or a register.
-(define_predicate "reg_or_0_operand"
- (and (ior (match_operand 0 "register_operand")
- (match_operand 0 "const_zero_operand"))
- (match_test "GET_MODE_SIZE (mode) <= UNITS_PER_WORD")))
-
-; Return 1 if OP is a valid Pmode pointer.
-(define_predicate "pointer_operand"
- (and (match_operand 0 "address_operand")
- (ior (match_operand 0 "pmode_register_operand")
- (match_operand 0 "const_zero_operand"))))
-
-; Return 1 if OP is a network register identifier.
-(define_predicate "netreg_operand"
- (and (match_code "const_int")
- (match_test "IN_RANGE (INTVAL (op), 0, 5)")))
-
-; Return 1 if OP is an unsigned 6-bit constant.
-(define_predicate "u6bit_cint_operand"
- (and (match_code "const_int")
- (match_test "INTVAL (op) == (INTVAL (op) & 0x3F)")))
-
-;; Return 1 if OP is an unsigned 16-bit constant.
-(define_predicate "u16bit_cint_operand"
- (and (match_code "const_int")
- (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 16)")))
-
-;; Return 1 if OP is a signed 8-bit constant.
-(define_predicate "s8bit_cint_operand"
- (and (match_code "const_int")
- (match_test "satisfies_constraint_I (op)")))
-
-;; Return 1 if OP is a signed 16-bit constant.
-(define_predicate "s16bit_cint_operand"
- (and (match_code "const_int")
- (match_test "satisfies_constraint_J (op)")))
-
-;; Return 1 if OP is an unsigned 14-bit constant.
-(define_predicate "u14bit_cint_operand"
- (and (match_code "const_int")
- (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 14)")))
-
-;; Return 1 if OP is a constant or any register.
-(define_predicate "reg_or_cint_operand"
- (ior (match_operand 0 "register_operand")
- (match_operand 0 "const_int_operand")))
-
-;; Returns 1 if OP is a "last" unspec wrapper for a symbol, got, or
-;; tls reference.
-(define_predicate "const_last_symbolic_operand"
- (and (match_code "const")
- (match_test "GET_CODE (XEXP (op,0)) == UNSPEC")
- (ior (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_LAST")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW2_LAST")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_PCREL")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW2_LAST_PCREL")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_LAST_GOT")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_GOT")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_TLS_GD")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_TLS_IE")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_TLS_LE")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_PLT_PCREL")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW2_LAST_PLT_PCREL"))))
-
-;; Returns 1 if OP is an unspec wrapper for a symbol, got, or tls
-;; reference.
-(define_predicate "const_symbolic_operand"
- (and (match_code "const")
- (match_test "GET_CODE (XEXP (op,0)) == UNSPEC")
- (ior (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW2")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW3")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_PCREL")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_PCREL")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_GOT")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_TLS_GD")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_TLS_IE")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_TLS_LE")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_PLT_PCREL")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_PLT_PCREL"))))
-
-;; Return 1 if OP is a 8-element vector constant with identical signed
-;; 8-bit elements or any register.
-(define_predicate "reg_or_v8s8bit_operand"
- (ior (match_operand 0 "register_operand")
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 8
- && (satisfies_constraint_I
- (unwrap_const_vec_duplicate (op)))"))))
-
-;; Return 1 if OP is a 4-element vector constant with identical signed
-;; 8-bit elements or any register.
-(define_predicate "reg_or_v4s8bit_operand"
- (ior (match_operand 0 "register_operand")
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 4
- && (satisfies_constraint_I
- (unwrap_const_vec_duplicate (op)))"))))
-
-;; Return 1 if the operand is a valid second operand to an add insn.
-(define_predicate "add_operand"
- (if_then_else (match_code "const_int")
- (match_test "satisfies_constraint_J (op)")
- (ior (match_operand 0 "register_operand")
- (match_operand 0 "const_last_symbolic_operand"))))
-
-;; Return 1 if the operand is a register or signed 8-bit immediate operand.
-(define_predicate "reg_or_s8bit_operand"
- (if_then_else (match_code "const_int")
- (match_test "satisfies_constraint_I (op)")
- (match_operand 0 "register_operand")))
-
-;; Return 1 if the operand is a register or unsigned 5-bit immediate operand.
-(define_predicate "reg_or_u5bit_operand"
- (if_then_else (match_code "const_int")
- (match_test "INTVAL (op) == (INTVAL (op) & 0x1F)")
- (match_operand 0 "register_operand")))
-
-;; Return 1 if the operand is a register or unsigned 6-bit immediate operand.
-(define_predicate "reg_or_u6bit_operand"
- (if_then_else (match_code "const_int")
- (match_test "INTVAL (op) == (INTVAL (op) & 0x3F)")
- (match_operand 0 "register_operand")))
-
-;; Return 1 for an operand suitable for ANDing with a register.
-(define_predicate "and_operand"
- (if_then_else (match_code "const_int")
- (match_test "satisfies_constraint_I (op) || satisfies_constraint_M (op)")
- (match_operand 0 "register_operand")))
-
-; Return 1 if the operand is 2, 4 or 8.
-(define_predicate "cint_248_operand"
- (and (match_code "const_int")
- (match_test
- "INTVAL (op) == 2 || INTVAL (op) == 4 || INTVAL (op) == 8")))
-
-;; Return true if OP is a TLS symbolic operand.
-(define_predicate "tls_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) != TLS_MODEL_NONE")))
-
-;; Return true if OP is a symbolic operand for the TLS Global Dynamic model.
-(define_predicate "tls_gd_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_GLOBAL_DYNAMIC")))
-
-;; Return true if OP is a symbolic operand for the TLS Local Dynamic model.
-(define_predicate "tls_ld_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_DYNAMIC")))
-
-;; Return true if OP is a symbolic operand that can be used for the
-;; TLS Initial Exec model.
-(define_predicate "tls_ie_symbolic_operand"
- (and (match_code "symbol_ref")
- (ior (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_INITIAL_EXEC")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC"))))
-
-;; Return true if OP is a symbolic operand for the TLS Local Exec model.
-(define_predicate "tls_le_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC")))
-
-;; Returns true if OP is any general operand except for an
-;; auto-incrementing address operand.
-(define_predicate "nonautoinc_operand"
- (and (match_operand 0 "general_operand")
- (not (ior (match_code "pre_dec") (match_code "pre_inc")
- (match_code "post_dec") (match_code "post_inc")
- (match_code "post_modify") (match_code "pre_modify")))))
-
-;; Returns true if OP is a non-auto-incrementing memory operand.
-(define_predicate "nonautoincmem_operand"
- (match_operand 0 "memory_operand")
-{
- return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
-})
-
-;; Returns true if OP is a non-auto-incrementing memory, general
-;; operand.
-(define_predicate "nonautoincmem_general_operand"
- (match_operand 0 "general_operand")
-{
- if (memory_operand (op, mode))
- return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
- else
- return true;
-})
-
-;; Returns true if OP is a non-auto-incrementing memory, non-immediate
-;; operand.
-(define_predicate "nonautoincmem_nonimmediate_operand"
- (match_operand 0 "nonimmediate_operand")
-{
- if (memory_operand (op, mode))
- return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
- else
- return true;
-})
-
-;; Return true if OP is a valid operand for the source of a move insn.
-(define_predicate "move_operand"
- (match_operand 0 "general_operand")
-{
- /* If both modes are non-void they must be the same. */
- if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))
- return false;
-
- switch (GET_CODE (op))
- {
- case CONST_INT:
- return (satisfies_constraint_J (op)
- || satisfies_constraint_K (op)
- || (mode == DImode &&
- (satisfies_constraint_N (op)
- || satisfies_constraint_P (op))));
-
- case MEM:
- return memory_address_p (mode, XEXP (op, 0));
-
- case CONST:
- return const_last_symbolic_operand (op, mode);
-
- default:
- return register_operand (op, mode);
- }
-})
-
-;; Returns 1 if OP is a symbolic operand, i.e. a symbol_ref or a label_ref,
-;; possibly with an offset.
-(define_predicate "symbolic_operand"
- (ior (match_code "symbol_ref,label_ref")
- (and (match_code "const")
- (match_test "GET_CODE (XEXP (op,0)) == PLUS
- && (GET_CODE (XEXP (XEXP (op,0), 0)) == SYMBOL_REF
- || GET_CODE (XEXP (XEXP (op,0), 0)) == LABEL_REF)
- && CONST_INT_P (XEXP (XEXP (op,0), 1))"))))
-
-;; Return 1 for an unsigned 16 bit or a const symbolc operand.
-(define_predicate "u16bit_or_const_symbolic_operand"
- (ior (match_operand 0 "u16bit_cint_operand")
- (match_operand 0 "const_symbolic_operand")))
-
-;; Return true if OP is an address suitable for a call insn.
-;; Call insn on TILE can take a PC-relative constant address
-;; or any regular memory address.
-(define_predicate "call_address_operand"
- (ior (match_operand 0 "symbolic_operand")
- (match_test "memory_address_p (Pmode, op)")))
-
-;; Return true if OP is an operand suitable for a call insn.
-(define_predicate "call_operand"
- (and (match_code "mem")
- (match_test "call_address_operand (XEXP (op, 0), mode)")))
-
-;; Return 1 if OP is a signed comparison operation.
-;; We can use these directly in compares against zero.
-(define_predicate "signed_comparison_operator"
- (match_code "eq,ne,le,lt,ge,gt"))
-
-;; Return 1 if OP is a equal or not-equal operation.
-(define_predicate "eqne_operator"
- (match_code "eq,ne"))
diff --git a/gcc/config/tilegx/sync.md b/gcc/config/tilegx/sync.md
deleted file mode 100644
index 74be4c9..0000000
--- a/gcc/config/tilegx/sync.md
+++ /dev/null
@@ -1,227 +0,0 @@
-;; GCC machine description for Tilera TILE-Gx synchronization
-;; instructions.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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_code_iterator fetchop [plus ior and])
-(define_code_attr fetchop_name [(plus "add") (ior "or") (and "and")])
-
-(define_insn "mtspr_cmpexch<mode>"
- [(set (reg:I48MODE TILEGX_CMPEXCH_REG)
- (unspec_volatile:I48MODE
- [(match_operand:I48MODE 0 "reg_or_0_operand" "rO")]
- UNSPEC_SPR_MOVE))]
- ""
- "mtspr\tCMPEXCH_VALUE, %r0"
- [(set_attr "type" "X1")])
-
-
-(define_expand "atomic_compare_and_swap<mode>"
- [(match_operand:DI 0 "register_operand" "") ;; bool output
- (match_operand:I48MODE 1 "register_operand" "") ;; val output
- (match_operand:I48MODE 2 "nonautoincmem_operand" "") ;; memory
- (match_operand:I48MODE 3 "reg_or_0_operand" "") ;; expected value
- (match_operand:I48MODE 4 "reg_or_0_operand" "") ;; desired value
- (match_operand:SI 5 "const_int_operand" "") ;; is_weak
- (match_operand:SI 6 "const_int_operand" "") ;; mod_s
- (match_operand:SI 7 "const_int_operand" "")] ;; mod_f
- ""
-{
- enum memmodel mod_s = (enum memmodel) INTVAL (operands[6]);
-
- if (operands[3] != const0_rtx)
- operands[3] = force_reg (<MODE>mode, operands[3]);
- if (operands[4] != const0_rtx)
- operands[4] = force_reg (<MODE>mode, operands[4]);
-
- tilegx_pre_atomic_barrier (mod_s);
- emit_insn (gen_mtspr_cmpexch<mode> (operands[3]));
- emit_insn (gen_atomic_compare_and_swap_bare<mode> (operands[1], operands[2],
- operands[4]));
- tilegx_post_atomic_barrier (mod_s);
- emit_insn (gen_insn_cmpeq_<mode>di (operands[0], operands[1], operands[3]));
- DONE;
-})
-
-
-(define_insn "atomic_compare_and_swap_bare<mode>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (match_operand:I48MODE 1 "nonautoincmem_operand" "+U"))
- (set (match_dup 1)
- (unspec_volatile:I48MODE
- [(match_dup 1)
- (reg:I48MODE TILEGX_CMPEXCH_REG)
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
- UNSPEC_CMPXCHG))]
- ""
- "cmpexch<four_if_si>\t%0, %1, %r2"
- [(set_attr "type" "X1_remote")])
-
-
-(define_expand "atomic_exchange<mode>"
- [(match_operand:I48MODE 0 "register_operand" "") ;; result
- (match_operand:I48MODE 1 "nonautoincmem_operand" "") ;; memory
- (match_operand:I48MODE 2 "reg_or_0_operand" "") ;; input
- (match_operand:SI 3 "const_int_operand" "")] ;; model
- ""
-{
- enum memmodel model = (enum memmodel) INTVAL (operands[3]);
-
- tilegx_pre_atomic_barrier (model);
- emit_insn (gen_atomic_exchange_bare<mode> (operands[0], operands[1],
- operands[2]));
- tilegx_post_atomic_barrier (model);
- DONE;
-})
-
-
-(define_insn "atomic_exchange_bare<mode>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (match_operand:I48MODE 1 "nonautoincmem_operand" "+U"))
- (set (match_dup 1)
- (unspec_volatile:I48MODE
- [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
- UNSPEC_XCHG))]
- ""
- "exch<four_if_si>\t%0, %1, %r2"
- [(set_attr "type" "X1_remote")])
-
-
-(define_expand "atomic_fetch_<fetchop_name><mode>"
- [(match_operand:I48MODE 0 "register_operand" "") ;; result
- (match_operand:I48MODE 1 "nonautoincmem_operand" "") ;; memory
- (unspec_volatile:I48MODE
- [(fetchop:I48MODE
- (match_dup 1)
- (match_operand:I48MODE 2 "reg_or_0_operand" ""))] ;; value
- UNSPEC_ATOMIC)
- (match_operand:SI 3 "const_int_operand" "")] ;; model
- ""
-{
- enum memmodel model = (enum memmodel) INTVAL (operands[3]);
-
- tilegx_pre_atomic_barrier (model);
- emit_insn (gen_atomic_fetch_<fetchop_name>_bare<mode> (operands[0],
- operands[1],
- operands[2]));
- tilegx_post_atomic_barrier (model);
- DONE;
-})
-
-
-(define_insn "atomic_fetch_<fetchop_name>_bare<mode>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (match_operand:I48MODE 1 "nonautoincmem_operand" "+U"))
- (set (match_dup 1)
- (unspec_volatile:I48MODE
- [(fetchop:I48MODE
- (match_dup 1)
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO"))]
- UNSPEC_ATOMIC))]
- ""
- "fetch<fetchop_name><four_if_si>\t%0, %1, %r2"
- [(set_attr "type" "X1_remote")])
-
-
-(define_expand "atomic_fetch_sub<mode>"
- [(match_operand:I48MODE 0 "register_operand" "") ;; result
- (match_operand:I48MODE 1 "nonautoincmem_operand" "") ;; memory
- (unspec_volatile:I48MODE
- [(minus:I48MODE
- (match_dup 1)
- (match_operand:I48MODE 2 "reg_or_0_operand" ""))] ;; value
- UNSPEC_ATOMIC)
- (match_operand:SI 3 "const_int_operand" "")] ;; model
- ""
-{
- rtx addend;
- enum memmodel model = (enum memmodel) INTVAL (operands[3]);
-
- if (operands[2] != const0_rtx)
- {
- addend = gen_reg_rtx (<MODE>mode);
- emit_move_insn (addend,
- gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
- }
- else
- addend = operands[2];
-
- tilegx_pre_atomic_barrier (model);
- emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
- operands[1],
- addend));
- tilegx_post_atomic_barrier (model);
- DONE;
-})
-
-
-(define_expand "atomic_test_and_set"
- [(match_operand:QI 0 "register_operand" "") ;; bool output
- (match_operand:QI 1 "nonautoincmem_operand" "+U") ;; memory
- (match_operand:SI 2 "const_int_operand" "")] ;; model
- ""
-{
- rtx addr, aligned_addr, aligned_mem, offset, word, shmt, tmp;
- rtx result = operands[0];
- rtx mem = operands[1];
- enum memmodel model = (enum memmodel) INTVAL (operands[2]);
-
- addr = force_reg (Pmode, XEXP (mem, 0));
-
- aligned_addr = gen_reg_rtx (Pmode);
- emit_move_insn (aligned_addr, gen_rtx_AND (Pmode, addr, GEN_INT (-8)));
-
- aligned_mem = change_address (mem, DImode, aligned_addr);
- set_mem_alias_set (aligned_mem, 0);
-
- tmp = gen_reg_rtx (Pmode);
- if (BYTES_BIG_ENDIAN)
- {
- emit_move_insn (gen_lowpart (DImode, tmp),
- gen_rtx_NOT (DImode, gen_lowpart (DImode, addr)));
- }
- else
- {
- tmp = addr;
- }
-
- offset = gen_reg_rtx (DImode);
- emit_move_insn (offset, gen_rtx_AND (DImode, gen_lowpart (DImode, tmp),
- GEN_INT (7)));
-
- tmp = gen_reg_rtx (DImode);
- emit_move_insn (tmp, GEN_INT (1));
-
- shmt = gen_reg_rtx (DImode);
- emit_move_insn (shmt, gen_rtx_ASHIFT (DImode, offset, GEN_INT (3)));
-
- word = gen_reg_rtx (DImode);
- emit_move_insn (word, gen_rtx_ASHIFT (DImode, tmp,
- gen_lowpart (SImode, shmt)));
-
- tmp = gen_reg_rtx (DImode);
- tilegx_pre_atomic_barrier (model);
- emit_insn (gen_atomic_fetch_or_baredi (tmp, aligned_mem, word));
- tilegx_post_atomic_barrier (model);
-
- emit_move_insn (gen_lowpart (DImode, result),
- gen_rtx_LSHIFTRT (DImode, tmp,
- gen_lowpart (SImode, shmt)));
- DONE;
-})
diff --git a/gcc/config/tilegx/t-tilegx b/gcc/config/tilegx/t-tilegx
deleted file mode 100644
index f357194..0000000
--- a/gcc/config/tilegx/t-tilegx
+++ /dev/null
@@ -1,21 +0,0 @@
-MULTILIB_OPTIONS = m64/m32
-MULTILIB_DIRNAMES = 64 32
-MULTILIB_OSDIRNAMES = ../lib ../lib32
-
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
-
-tilegx-c.o: $(srcdir)/config/tilegx/tilegx-c.cc \
- $(CONFIG_H) $(SYSTEM_H) coretypes.h $(MACHMODE_H) \
- $(TM_H) $(TM_P_H) $(CPPLIB_H) $(TREE_H) $(C_COMMON_H)
- $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
-
-$(srcdir)/config/tilegx/mul-tables.cc: \
- $(srcdir)/config/tilepro/gen-mul-tables.cc
- $(CXX_FOR_BUILD) $(BUILD_CPPFLAGS) -O2 -o gen-mul-tables $<;
- ./gen-mul-tables > $@
-
-mul-tables.o: $(srcdir)/config/tilegx/mul-tables.cc \
- $(CONFIG_H) $(SYSTEM_H) coretypes.h $(EXPR_H) $(OPTABS_H) \
- $(srcdir)/config/tilegx/tilegx-multiply.h
- $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff --git a/gcc/config/tilegx/tilegx-builtins.h b/gcc/config/tilegx/tilegx-builtins.h
deleted file mode 100644
index 22fdf84..0000000
--- a/gcc/config/tilegx/tilegx-builtins.h
+++ /dev/null
@@ -1,325 +0,0 @@
-/* Enum for builtin intrinsics for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef GCC_TILEGX_BUILTINS_H
-#define GCC_TILEGX_BUILTINS_H
-
-enum tilegx_builtin
-{
- TILEGX_INSN_ADD,
- TILEGX_INSN_ADDX,
- TILEGX_INSN_ADDXSC,
- TILEGX_INSN_AND,
- TILEGX_INSN_BFEXTS,
- TILEGX_INSN_BFEXTU,
- TILEGX_INSN_BFINS,
- TILEGX_INSN_CLZ,
- TILEGX_INSN_CMOVEQZ,
- TILEGX_INSN_CMOVNEZ,
- TILEGX_INSN_CMPEQ,
- TILEGX_INSN_CMPEXCH,
- TILEGX_INSN_CMPEXCH4,
- TILEGX_INSN_CMPLES,
- TILEGX_INSN_CMPLEU,
- TILEGX_INSN_CMPLTS,
- TILEGX_INSN_CMPLTU,
- TILEGX_INSN_CMPNE,
- TILEGX_INSN_CMUL,
- TILEGX_INSN_CMULA,
- TILEGX_INSN_CMULAF,
- TILEGX_INSN_CMULF,
- TILEGX_INSN_CMULFR,
- TILEGX_INSN_CMULH,
- TILEGX_INSN_CMULHR,
- TILEGX_INSN_CRC32_32,
- TILEGX_INSN_CRC32_8,
- TILEGX_INSN_CTZ,
- TILEGX_INSN_DBLALIGN,
- TILEGX_INSN_DBLALIGN2,
- TILEGX_INSN_DBLALIGN4,
- TILEGX_INSN_DBLALIGN6,
- TILEGX_INSN_DRAIN,
- TILEGX_INSN_DTLBPR,
- TILEGX_INSN_EXCH,
- TILEGX_INSN_EXCH4,
- TILEGX_INSN_FDOUBLE_ADD_FLAGS,
- TILEGX_INSN_FDOUBLE_ADDSUB,
- TILEGX_INSN_FDOUBLE_MUL_FLAGS,
- TILEGX_INSN_FDOUBLE_PACK1,
- TILEGX_INSN_FDOUBLE_PACK2,
- TILEGX_INSN_FDOUBLE_SUB_FLAGS,
- TILEGX_INSN_FDOUBLE_UNPACK_MAX,
- TILEGX_INSN_FDOUBLE_UNPACK_MIN,
- TILEGX_INSN_FETCHADD,
- TILEGX_INSN_FETCHADD4,
- TILEGX_INSN_FETCHADDGEZ,
- TILEGX_INSN_FETCHADDGEZ4,
- TILEGX_INSN_FETCHAND,
- TILEGX_INSN_FETCHAND4,
- TILEGX_INSN_FETCHOR,
- TILEGX_INSN_FETCHOR4,
- TILEGX_INSN_FINV,
- TILEGX_INSN_FLUSH,
- TILEGX_INSN_FLUSHWB,
- TILEGX_INSN_FNOP,
- TILEGX_INSN_FSINGLE_ADD1,
- TILEGX_INSN_FSINGLE_ADDSUB2,
- TILEGX_INSN_FSINGLE_MUL1,
- TILEGX_INSN_FSINGLE_MUL2,
- TILEGX_INSN_FSINGLE_PACK1,
- TILEGX_INSN_FSINGLE_PACK2,
- TILEGX_INSN_FSINGLE_SUB1,
- TILEGX_INSN_ICOH,
- TILEGX_INSN_ILL,
- TILEGX_INSN_INFO,
- TILEGX_INSN_INFOL,
- TILEGX_INSN_INV,
- TILEGX_INSN_LD,
- TILEGX_INSN_LD1S,
- TILEGX_INSN_LD1U,
- TILEGX_INSN_LD2S,
- TILEGX_INSN_LD2U,
- TILEGX_INSN_LD4S,
- TILEGX_INSN_LD4U,
- TILEGX_INSN_LDNA,
- TILEGX_INSN_LDNT,
- TILEGX_INSN_LDNT1S,
- TILEGX_INSN_LDNT1U,
- TILEGX_INSN_LDNT2S,
- TILEGX_INSN_LDNT2U,
- TILEGX_INSN_LDNT4S,
- TILEGX_INSN_LDNT4U,
- TILEGX_INSN_LD_L2,
- TILEGX_INSN_LD1S_L2,
- TILEGX_INSN_LD1U_L2,
- TILEGX_INSN_LD2S_L2,
- TILEGX_INSN_LD2U_L2,
- TILEGX_INSN_LD4S_L2,
- TILEGX_INSN_LD4U_L2,
- TILEGX_INSN_LDNA_L2,
- TILEGX_INSN_LDNT_L2,
- TILEGX_INSN_LDNT1S_L2,
- TILEGX_INSN_LDNT1U_L2,
- TILEGX_INSN_LDNT2S_L2,
- TILEGX_INSN_LDNT2U_L2,
- TILEGX_INSN_LDNT4S_L2,
- TILEGX_INSN_LDNT4U_L2,
- TILEGX_INSN_LD_MISS,
- TILEGX_INSN_LD1S_MISS,
- TILEGX_INSN_LD1U_MISS,
- TILEGX_INSN_LD2S_MISS,
- TILEGX_INSN_LD2U_MISS,
- TILEGX_INSN_LD4S_MISS,
- TILEGX_INSN_LD4U_MISS,
- TILEGX_INSN_LDNA_MISS,
- TILEGX_INSN_LDNT_MISS,
- TILEGX_INSN_LDNT1S_MISS,
- TILEGX_INSN_LDNT1U_MISS,
- TILEGX_INSN_LDNT2S_MISS,
- TILEGX_INSN_LDNT2U_MISS,
- TILEGX_INSN_LDNT4S_MISS,
- TILEGX_INSN_LDNT4U_MISS,
- TILEGX_INSN_LNK,
- TILEGX_INSN_MF,
- TILEGX_INSN_MFSPR,
- TILEGX_INSN_MM,
- TILEGX_INSN_MNZ,
- TILEGX_INSN_MOVE,
- TILEGX_INSN_MTSPR,
- TILEGX_INSN_MUL_HS_HS,
- TILEGX_INSN_MUL_HS_HU,
- TILEGX_INSN_MUL_HS_LS,
- TILEGX_INSN_MUL_HS_LU,
- TILEGX_INSN_MUL_HU_HU,
- TILEGX_INSN_MUL_HU_LS,
- TILEGX_INSN_MUL_HU_LU,
- TILEGX_INSN_MUL_LS_LS,
- TILEGX_INSN_MUL_LS_LU,
- TILEGX_INSN_MUL_LU_LU,
- TILEGX_INSN_MULA_HS_HS,
- TILEGX_INSN_MULA_HS_HU,
- TILEGX_INSN_MULA_HS_LS,
- TILEGX_INSN_MULA_HS_LU,
- TILEGX_INSN_MULA_HU_HU,
- TILEGX_INSN_MULA_HU_LS,
- TILEGX_INSN_MULA_HU_LU,
- TILEGX_INSN_MULA_LS_LS,
- TILEGX_INSN_MULA_LS_LU,
- TILEGX_INSN_MULA_LU_LU,
- TILEGX_INSN_MULAX,
- TILEGX_INSN_MULX,
- TILEGX_INSN_MZ,
- TILEGX_INSN_NAP,
- TILEGX_INSN_NOP,
- TILEGX_INSN_NOR,
- TILEGX_INSN_OR,
- TILEGX_INSN_PCNT,
- TILEGX_INSN_PREFETCH_L1,
- TILEGX_INSN_PREFETCH_L1_FAULT,
- TILEGX_INSN_PREFETCH_L2,
- TILEGX_INSN_PREFETCH_L2_FAULT,
- TILEGX_INSN_PREFETCH_L3,
- TILEGX_INSN_PREFETCH_L3_FAULT,
- TILEGX_INSN_REVBITS,
- TILEGX_INSN_REVBYTES,
- TILEGX_INSN_ROTL,
- TILEGX_INSN_SHL,
- TILEGX_INSN_SHL16INSLI,
- TILEGX_INSN_SHL1ADD,
- TILEGX_INSN_SHL1ADDX,
- TILEGX_INSN_SHL2ADD,
- TILEGX_INSN_SHL2ADDX,
- TILEGX_INSN_SHL3ADD,
- TILEGX_INSN_SHL3ADDX,
- TILEGX_INSN_SHLX,
- TILEGX_INSN_SHRS,
- TILEGX_INSN_SHRU,
- TILEGX_INSN_SHRUX,
- TILEGX_INSN_SHUFFLEBYTES,
- TILEGX_INSN_SHUFFLEBYTES1,
- TILEGX_INSN_ST,
- TILEGX_INSN_ST1,
- TILEGX_INSN_ST2,
- TILEGX_INSN_ST4,
- TILEGX_INSN_STNT,
- TILEGX_INSN_STNT1,
- TILEGX_INSN_STNT2,
- TILEGX_INSN_STNT4,
- TILEGX_INSN_SUB,
- TILEGX_INSN_SUBX,
- TILEGX_INSN_SUBXSC,
- TILEGX_INSN_TBLIDXB0,
- TILEGX_INSN_TBLIDXB1,
- TILEGX_INSN_TBLIDXB2,
- TILEGX_INSN_TBLIDXB3,
- TILEGX_INSN_V1ADD,
- TILEGX_INSN_V1ADDI,
- TILEGX_INSN_V1ADDUC,
- TILEGX_INSN_V1ADIFFU,
- TILEGX_INSN_V1AVGU,
- TILEGX_INSN_V1CMPEQ,
- TILEGX_INSN_V1CMPEQI,
- TILEGX_INSN_V1CMPLES,
- TILEGX_INSN_V1CMPLEU,
- TILEGX_INSN_V1CMPLTS,
- TILEGX_INSN_V1CMPLTSI,
- TILEGX_INSN_V1CMPLTU,
- TILEGX_INSN_V1CMPLTUI,
- TILEGX_INSN_V1CMPNE,
- TILEGX_INSN_V1DDOTPU,
- TILEGX_INSN_V1DDOTPUA,
- TILEGX_INSN_V1DDOTPUS,
- TILEGX_INSN_V1DDOTPUSA,
- TILEGX_INSN_V1DOTP,
- TILEGX_INSN_V1DOTPA,
- TILEGX_INSN_V1DOTPU,
- TILEGX_INSN_V1DOTPUA,
- TILEGX_INSN_V1DOTPUS,
- TILEGX_INSN_V1DOTPUSA,
- TILEGX_INSN_V1INT_H,
- TILEGX_INSN_V1INT_L,
- TILEGX_INSN_V1MAXU,
- TILEGX_INSN_V1MAXUI,
- TILEGX_INSN_V1MINU,
- TILEGX_INSN_V1MINUI,
- TILEGX_INSN_V1MNZ,
- TILEGX_INSN_V1MULTU,
- TILEGX_INSN_V1MULU,
- TILEGX_INSN_V1MULUS,
- TILEGX_INSN_V1MZ,
- TILEGX_INSN_V1SADAU,
- TILEGX_INSN_V1SADU,
- TILEGX_INSN_V1SHL,
- TILEGX_INSN_V1SHLI,
- TILEGX_INSN_V1SHRS,
- TILEGX_INSN_V1SHRSI,
- TILEGX_INSN_V1SHRU,
- TILEGX_INSN_V1SHRUI,
- TILEGX_INSN_V1SUB,
- TILEGX_INSN_V1SUBUC,
- TILEGX_INSN_V2ADD,
- TILEGX_INSN_V2ADDI,
- TILEGX_INSN_V2ADDSC,
- TILEGX_INSN_V2ADIFFS,
- TILEGX_INSN_V2AVGS,
- TILEGX_INSN_V2CMPEQ,
- TILEGX_INSN_V2CMPEQI,
- TILEGX_INSN_V2CMPLES,
- TILEGX_INSN_V2CMPLEU,
- TILEGX_INSN_V2CMPLTS,
- TILEGX_INSN_V2CMPLTSI,
- TILEGX_INSN_V2CMPLTU,
- TILEGX_INSN_V2CMPLTUI,
- TILEGX_INSN_V2CMPNE,
- TILEGX_INSN_V2DOTP,
- TILEGX_INSN_V2DOTPA,
- TILEGX_INSN_V2INT_H,
- TILEGX_INSN_V2INT_L,
- TILEGX_INSN_V2MAXS,
- TILEGX_INSN_V2MAXSI,
- TILEGX_INSN_V2MINS,
- TILEGX_INSN_V2MINSI,
- TILEGX_INSN_V2MNZ,
- TILEGX_INSN_V2MULFSC,
- TILEGX_INSN_V2MULS,
- TILEGX_INSN_V2MULTS,
- TILEGX_INSN_V2MZ,
- TILEGX_INSN_V2PACKH,
- TILEGX_INSN_V2PACKL,
- TILEGX_INSN_V2PACKUC,
- TILEGX_INSN_V2SADAS,
- TILEGX_INSN_V2SADAU,
- TILEGX_INSN_V2SADS,
- TILEGX_INSN_V2SADU,
- TILEGX_INSN_V2SHL,
- TILEGX_INSN_V2SHLI,
- TILEGX_INSN_V2SHLSC,
- TILEGX_INSN_V2SHRS,
- TILEGX_INSN_V2SHRSI,
- TILEGX_INSN_V2SHRU,
- TILEGX_INSN_V2SHRUI,
- TILEGX_INSN_V2SUB,
- TILEGX_INSN_V2SUBSC,
- TILEGX_INSN_V4ADD,
- TILEGX_INSN_V4ADDSC,
- TILEGX_INSN_V4INT_H,
- TILEGX_INSN_V4INT_L,
- TILEGX_INSN_V4PACKSC,
- TILEGX_INSN_V4SHL,
- TILEGX_INSN_V4SHLSC,
- TILEGX_INSN_V4SHRS,
- TILEGX_INSN_V4SHRU,
- TILEGX_INSN_V4SUB,
- TILEGX_INSN_V4SUBSC,
- TILEGX_INSN_WH64,
- TILEGX_INSN_XOR,
- TILEGX_NETWORK_BARRIER,
- TILEGX_IDN0_RECEIVE,
- TILEGX_IDN1_RECEIVE,
- TILEGX_IDN_SEND,
- TILEGX_UDN0_RECEIVE,
- TILEGX_UDN1_RECEIVE,
- TILEGX_UDN2_RECEIVE,
- TILEGX_UDN3_RECEIVE,
- TILEGX_UDN_SEND,
- TILEGX_BUILTIN_max
-};
-
-#endif /* !GCC_TILEGX_BUILTINS_H */
diff --git a/gcc/config/tilegx/tilegx-c.cc b/gcc/config/tilegx/tilegx-c.cc
deleted file mode 100644
index 6ef6808..0000000
--- a/gcc/config/tilegx/tilegx-c.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Definitions of C specific functions for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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 IN_TARGET_CODE 1
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "c-family/c-common.h"
-
-/* copy defines in c-cppbuiltin.cc */
-# define builtin_define(TXT) cpp_define (pfile, TXT)
-# define builtin_assert(TXT) cpp_assert (pfile, TXT)
-
-
-/* Implement TARGET_CPU_CPP_BUILTINS. */
-void
-tilegx_cpu_cpp_builtins (struct cpp_reader *pfile)
-{
- builtin_define ("__tile__");
- builtin_define ("__tilegx__");
- builtin_define ("__tile_chip__=10");
- builtin_define ("__tile_chip_rev__=0");
- builtin_assert ("cpu=tilegx");
- builtin_assert ("machine=tilegx");
-
- if (TARGET_32BIT)
- builtin_define ("__tilegx32__");
-
- builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
- builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
-
- TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
- GNU_USER_TARGET_OS_CPP_BUILTINS ();
-}
-
-
diff --git a/gcc/config/tilegx/tilegx-generic.md b/gcc/config/tilegx/tilegx-generic.md
deleted file mode 100644
index debfe9d..0000000
--- a/gcc/config/tilegx/tilegx-generic.md
+++ /dev/null
@@ -1,115 +0,0 @@
-;; Scheduling description for Tilera TILE-Gx chip.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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 "tile")
-
-; Make the scheduling automaton an ndfa.
-(automata_option "ndfa")
-
-; Name the three pipes.
-(define_cpu_unit "X0" "tile")
-(define_cpu_unit "X1" "tile")
-(define_cpu_unit "Y0" "tile")
-(define_cpu_unit "Y1" "tile")
-(define_cpu_unit "Y2" "tile")
-
-(define_insn_reservation "X0" 1
- (eq_attr "type" "X0")
- "X0")
-
-(define_insn_reservation "X0_2cycle" 2
- (eq_attr "type" "X0_2cycle")
- "X0,nothing")
-
-(define_insn_reservation "X1" 1
- (eq_attr "type" "X1,X1_branch")
- "X1")
-
-(define_insn_reservation "X1_2cycle" 2
- (eq_attr "type" "X1_2cycle")
- "X1,nothing")
-
-(define_insn_reservation "X1_L2" 11
- (eq_attr "type" "X1_L2")
- "X1")
-
-(define_insn_reservation "X1_remote" 50
- (eq_attr "type" "X1_remote")
- "X1")
-
-(define_insn_reservation "X1_miss" 80
- (eq_attr "type" "X1_miss")
- "X1")
-
-(define_insn_reservation "X01" 1
- (eq_attr "type" "X01")
- "X0|X1")
-
-(define_insn_reservation "Y0" 1
- (eq_attr "type" "Y0")
- "Y0|X0")
-
-(define_insn_reservation "Y0_2cycle" 2
- (eq_attr "type" "Y0_2cycle")
- "Y0|X0,nothing")
-
-(define_insn_reservation "Y1" 1
- (eq_attr "type" "Y1")
- "Y1|X1")
-
-(define_insn_reservation "Y2" 1
- (eq_attr "type" "Y2")
- "Y2|X1")
-
-(define_insn_reservation "Y2_2cycle" 2
- (eq_attr "type" "Y2_2cycle")
- "Y2|X1,nothing")
-
-(define_insn_reservation "Y2_L2" 11
- (eq_attr "type" "Y2_L2")
- "Y2|X1")
-
-(define_insn_reservation "Y2_miss" 80
- (eq_attr "type" "Y2_miss")
- "Y2|X1")
-
-(define_insn_reservation "Y01" 1
- (eq_attr "type" "Y01")
- "Y0|Y1|X0|X1")
-
-(define_insn_reservation "nothing" 0
- (eq_attr "type" "nothing")
- "nothing")
-
-(define_insn_reservation "cannot_bundle" 1
- (eq_attr "type" "cannot_bundle")
- "X0+X1")
-
-(define_insn_reservation "cannot_bundle_3cycle" 3
- (eq_attr "type" "cannot_bundle_3cycle")
- "X0+X1")
-
-(define_insn_reservation "cannot_bundle_4cycle" 4
- (eq_attr "type" "cannot_bundle_4cycle")
- "X0+X1")
-
-
-; A bundle must be in either X format or Y format.
-(exclusion_set "X0,X1" "Y0,Y1,Y2")
diff --git a/gcc/config/tilegx/tilegx-modes.def b/gcc/config/tilegx/tilegx-modes.def
deleted file mode 100644
index d5fa23a..0000000
--- a/gcc/config/tilegx/tilegx-modes.def
+++ /dev/null
@@ -1,37 +0,0 @@
-/* TILE-Gx extra machine modes.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-/* Extra modes for handling struct returns in up to 10 registers. */
-INT_MODE (R3I, 24);
-INT_MODE (R5I, 40);
-INT_MODE (R6I, 48);
-INT_MODE (R7I, 56);
-INT_MODE (R8I, 64);
-INT_MODE (R9I, 72);
-INT_MODE (R10I, 80);
-
-/* Vector modes. */
-VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI */
-VECTOR_MODE (INT, QI, 16); /* V16QI */
-VECTOR_MODE (INT, HI, 8); /* V8HI */
-VECTOR_MODE (INT, SI, 4); /* V4SI */
-VECTOR_MODE (INT, HI, 2); /* V2HI */
-
-VECTOR_MODE (INT, QI, 4); /* V4QI */
diff --git a/gcc/config/tilegx/tilegx-multiply.h b/gcc/config/tilegx/tilegx-multiply.h
deleted file mode 100644
index 766a638..0000000
--- a/gcc/config/tilegx/tilegx-multiply.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Header for constant multiple table for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef GCC_TILEGX_MULTIPLY_H
-#define GCC_TILEGX_MULTIPLY_H
-
-/* A node of a tilegx_multiply_insn_seq, corresponding to a single
- machine instruction such as 'add', 's1a', or an shl by a constant. */
-struct tilegx_multiply_insn_seq_entry
-{
- /* Which operation this node performs (e.g. an add or sub).
- Don't use this directly, call get_opcode() table to get a insn_code. */
- unsigned char compressed_opcode;
-
- /* The left-hand side of this expression tree.
- If equal to 0, it refers to 'zero'.
- If equal to 1, it refers to the original input to the multiply operation.
- Otherwise, subtract two and it is an index into the containing
- tilegx_multiply_insn_seq's 'op' array. Since it can only point to some
- value that has already been computed it will always point to an
- earlier entry in the array. */
- unsigned char lhs;
-
- /* This is like lhs, but for the right-hand side. However, for shift
- opcodes this is a shift count rather than an operand index. */
- unsigned char rhs;
-};
-
-/* Maximum size of op array. */
-#define tilegx_multiply_insn_seq_MAX_OPERATIONS 4
-
-/* This defines a DAG describing how to multiply by a constant in
- terms of one or more machine instructions. */
-struct tilegx_multiply_insn_seq
-{
- /* The constant factor by which this expression tree multiplies its input. */
- long long multiplier;
-
- /* The nodes of the parse tree. These are ordered so that instructions
- can be emitted in the same order that they appear in this array.
- Entry entry in this array can only refer to earlier entries in
- the array. */
- struct tilegx_multiply_insn_seq_entry
- op[tilegx_multiply_insn_seq_MAX_OPERATIONS];
-
-};
-
-/* A mapping from the compressed opcode to the corresponding enum
- insn_code. */
-extern const enum insn_code tilegx_multiply_insn_seq_decode_opcode[];
-
-/* Table mapping constant int multipliers to an expression
- tree that efficiently performs that multiplication.
- This is sorted by its 'multiplier' field so a binary search
- can look for matches. */
-extern const struct tilegx_multiply_insn_seq tilegx_multiply_insn_seq_table[];
-
-/* The number of elements in multiply_insn_seq_table. */
-extern const int tilegx_multiply_insn_seq_table_size;
-
-#endif /* !GCC_TILEGX_MULTIPLY_H */
diff --git a/gcc/config/tilegx/tilegx-opts.h b/gcc/config/tilegx/tilegx-opts.h
deleted file mode 100644
index ecc06e2..0000000
--- a/gcc/config/tilegx/tilegx-opts.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Definitions for option handling for TILE-Gx.
- Copyright (C) 2012-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef TILEGX_OPTS_H
-#define TILEGX_OPTS_H
-
-enum cmodel {
- CM_SMALL, /* Makes various assumpation about sizes of code and
- data fits. */
- CM_LARGE, /* No assumptions. */
- CM_SMALL_PIC, /* Makes various assumpation about sizes of code and
- data fits. */
- CM_LARGE_PIC /* No assumptions. */
-};
-
-#endif
diff --git a/gcc/config/tilegx/tilegx-protos.h b/gcc/config/tilegx/tilegx-protos.h
deleted file mode 100644
index 7263524..0000000
--- a/gcc/config/tilegx/tilegx-protos.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Prototypes of target machine for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef GCC_TILEGX_PROTOS_H
-#define GCC_TILEGX_PROTOS_H
-
-extern void tilegx_init_expanders (void);
-extern void tilegx_compute_pcrel_address (rtx, rtx);
-extern void tilegx_compute_pcrel_plt_address (rtx, rtx);
-extern bool tilegx_legitimate_pic_operand_p (rtx);
-extern rtx tilegx_simd_int (rtx, machine_mode);
-
-#ifdef RTX_CODE
-extern bool tilegx_bitfield_operand_p (HOST_WIDE_INT, int *, int *);
-extern void tilegx_expand_set_const64 (rtx, rtx);
-extern bool tilegx_expand_mov (machine_mode, rtx *);
-extern void tilegx_expand_unaligned_load (rtx, rtx, HOST_WIDE_INT,
- HOST_WIDE_INT, bool);
-extern void tilegx_expand_movmisalign (machine_mode, rtx *);
-extern void tilegx_allocate_stack (rtx, rtx);
-extern bool tilegx_expand_muldi (rtx, rtx, rtx);
-extern void tilegx_expand_smuldi3_highpart (rtx, rtx, rtx);
-extern void tilegx_expand_umuldi3_highpart (rtx, rtx, rtx);
-
-extern bool tilegx_emit_setcc (rtx[], machine_mode);
-extern void tilegx_emit_conditional_branch (rtx[], machine_mode);
-extern rtx tilegx_emit_conditional_move (rtx);
-extern const char *tilegx_output_cbranch_with_opcode (rtx_insn *, rtx *,
- const char *,
- const char *, int);
-extern const char *tilegx_output_cbranch (rtx_insn *, rtx *, bool);
-extern void tilegx_expand_tablejump (rtx, rtx);
-extern void tilegx_expand_builtin_vector_binop (rtx (*)(rtx, rtx, rtx),
- machine_mode, rtx,
- machine_mode, rtx, rtx,
- bool);
-extern void tilegx_pre_atomic_barrier (enum memmodel);
-extern void tilegx_post_atomic_barrier (enum memmodel);
-#endif /* RTX_CODE */
-
-extern bool tilegx_can_use_return_insn_p (void);
-extern void tilegx_expand_prologue (void);
-extern void tilegx_expand_epilogue (bool);
-extern int tilegx_initial_elimination_offset (int, int);
-extern rtx tilegx_return_addr (int, rtx);
-extern rtx tilegx_eh_return_handler_rtx (void);
-extern int tilegx_adjust_insn_length (rtx_insn *, int);
-
-extern int tilegx_asm_preferred_eh_data_format (int, int);
-extern void tilegx_final_prescan_insn (rtx_insn *);
-extern const char *tilegx_asm_output_opcode (FILE *, const char *);
-extern void tilegx_function_profiler (FILE *, int);
-
-/* Declare functions in tilegx-c.cc */
-
-extern void tilegx_cpu_cpp_builtins (struct cpp_reader *);
-
-#endif /* GCC_TILEGX_PROTOS_H */
diff --git a/gcc/config/tilegx/tilegx.cc b/gcc/config/tilegx/tilegx.cc
deleted file mode 100644
index c40fc74..0000000
--- a/gcc/config/tilegx/tilegx.cc
+++ /dev/null
@@ -1,5728 +0,0 @@
-/* Subroutines used for code generation on the Tilera TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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 IN_TARGET_CODE 1
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "memmodel.h"
-#include "backend.h"
-#include "target.h"
-#include "rtl.h"
-#include "tree.h"
-#include "gimple.h"
-#include "df.h"
-#include "tm_p.h"
-#include "stringpool.h"
-#include "attribs.h"
-#include "expmed.h"
-#include "optabs.h"
-#include "regs.h"
-#include "emit-rtl.h"
-#include "recog.h"
-#include "diagnostic.h"
-#include "output.h"
-#include "insn-attr.h"
-#include "alias.h"
-#include "explow.h"
-#include "calls.h"
-#include "varasm.h"
-#include "expr.h"
-#include "langhooks.h"
-#include "cfgrtl.h"
-#include "tm-constrs.h"
-#include "dwarf2.h"
-#include "fold-const.h"
-#include "stor-layout.h"
-#include "gimplify.h"
-#include "tilegx-builtins.h"
-#include "tilegx-multiply.h"
-#include "builtins.h"
-#include "opts.h"
-
-/* This file should be included last. */
-#include "target-def.h"
-
-/* SYMBOL_REF for GOT */
-static GTY(()) rtx g_got_symbol = NULL;
-
-/* Report whether we're printing out the first address fragment of a
- POST_INC or POST_DEC memory reference, from TARGET_PRINT_OPERAND to
- TARGET_PRINT_OPERAND_ADDRESS. */
-static bool output_memory_autoinc_first;
-
-
-
-/* Option handling */
-
-/* Implement TARGET_OPTION_OVERRIDE. */
-static void
-tilegx_option_override (void)
-{
- if (OPTION_SET_P (tilegx_cmodel))
- {
- switch (tilegx_cmodel)
- {
- case CM_SMALL:
- case CM_SMALL_PIC:
- if (flag_pic)
- tilegx_cmodel = CM_SMALL_PIC;
- break;
-
- case CM_LARGE:
- case CM_LARGE_PIC:
- if (flag_pic)
- tilegx_cmodel = CM_LARGE_PIC;
- break;
-
- default:
- gcc_unreachable ();
- }
- }
- else
- tilegx_cmodel = flag_pic ? CM_SMALL_PIC : CM_SMALL;
-
- /* When modulo scheduling is enabled, we still rely on regular
- scheduler for bundling. */
- if (flag_modulo_sched)
- flag_resched_modulo_sched = 1;
-}
-
-
-
-/* Implement TARGET_SCALAR_MODE_SUPPORTED_P. */
-static bool
-tilegx_scalar_mode_supported_p (scalar_mode mode)
-{
- switch (mode)
- {
- case E_QImode:
- case E_HImode:
- case E_SImode:
- case E_DImode:
- case E_TImode:
- return true;
-
- case E_SFmode:
- case E_DFmode:
- return true;
-
- default:
- return false;
- }
-}
-
-
-/* Implement TARGET_VECTOR_MODE_SUPPORTED_P. */
-static bool
-tilegx_vector_mode_supported_p (machine_mode mode)
-{
- return mode == V8QImode || mode == V4HImode || mode == V2SImode;
-}
-
-
-/* Implement TARGET_CANNOT_FORCE_CONST_MEM. */
-static bool
-tilegx_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED,
- rtx x ATTRIBUTE_UNUSED)
-{
- return true;
-}
-
-
-/* Implement TARGET_FUNCTION_OK_FOR_SIBCALL. */
-static bool
-tilegx_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
-{
- return (tilegx_cmodel != CM_LARGE && tilegx_cmodel != CM_LARGE_PIC
- && (decl != NULL));
-}
-
-
-/* Implement TARGET_PASS_BY_REFERENCE. Variable sized types are
- passed by reference. */
-static bool
-tilegx_pass_by_reference (cumulative_args_t, const function_arg_info &arg)
-{
- return (arg.type
- && TYPE_SIZE (arg.type)
- && TREE_CODE (TYPE_SIZE (arg.type)) != INTEGER_CST);
-}
-
-
-/* Implement TARGET_RETURN_IN_MSB. We return a value in the most
- significant part of a register if:
- - the target is big-endian; and
- - the value has an aggregate type (e.g., structure or union). */
-static bool
-tilegx_return_in_msb (const_tree valtype)
-{
- return (TARGET_BIG_ENDIAN && AGGREGATE_TYPE_P (valtype));
-}
-
-
-/* Implement TARGET_RETURN_IN_MEMORY. */
-static bool
-tilegx_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
-{
- return !IN_RANGE (int_size_in_bytes (type),
- 0, TILEGX_NUM_RETURN_REGS * UNITS_PER_WORD);
-}
-
-
-/* Implement TARGET_MODE_REP_EXTENDED. */
-static int
-tilegx_mode_rep_extended (scalar_int_mode mode, scalar_int_mode mode_rep)
-{
- /* SImode register values are sign-extended to DImode. */
- if (mode == SImode && mode_rep == DImode)
- return SIGN_EXTEND;
-
- return UNKNOWN;
-}
-
-
-/* Implement TARGET_FUNCTION_ARG_BOUNDARY. */
-static unsigned int
-tilegx_function_arg_boundary (machine_mode mode, const_tree type)
-{
- unsigned int alignment;
-
- alignment = type ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode);
- if (alignment < PARM_BOUNDARY)
- alignment = PARM_BOUNDARY;
- if (alignment > STACK_BOUNDARY)
- alignment = STACK_BOUNDARY;
- return alignment;
-}
-
-
-/* Implement TARGET_FUNCTION_ARG. */
-static rtx
-tilegx_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
-{
- CUMULATIVE_ARGS cum = *get_cumulative_args (cum_v);
- int byte_size = arg.promoted_size_in_bytes ();
- bool doubleword_aligned_p;
-
- if (cum >= TILEGX_NUM_ARG_REGS)
- return NULL_RTX;
-
- /* See whether the argument has doubleword alignment. */
- doubleword_aligned_p =
- tilegx_function_arg_boundary (arg.mode, arg.type) > BITS_PER_WORD;
-
- if (doubleword_aligned_p)
- cum += cum & 1;
-
- /* The ABI does not allow parameters to be passed partially in reg
- and partially in stack. */
- if ((cum + (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
- > TILEGX_NUM_ARG_REGS)
- return NULL_RTX;
-
- return gen_rtx_REG (arg.mode, cum);
-}
-
-
-/* Implement TARGET_FUNCTION_ARG_ADVANCE. */
-static void
-tilegx_function_arg_advance (cumulative_args_t cum_v,
- const function_arg_info &arg)
-{
- CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
-
- int byte_size = arg.promoted_size_in_bytes ();
- int word_size = (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
- bool doubleword_aligned_p;
-
- /* See whether the argument has doubleword alignment. */
- doubleword_aligned_p =
- tilegx_function_arg_boundary (arg.mode, arg.type) > BITS_PER_WORD;
-
- if (doubleword_aligned_p)
- *cum += *cum & 1;
-
- /* If the current argument does not fit in the pretend_args space,
- skip over it. */
- if (*cum < TILEGX_NUM_ARG_REGS
- && *cum + word_size > TILEGX_NUM_ARG_REGS)
- *cum = TILEGX_NUM_ARG_REGS;
-
- *cum += word_size;
-}
-
-
-/* Implement TARGET_FUNCTION_VALUE. */
-static rtx
-tilegx_function_value (const_tree valtype, const_tree fn_decl_or_type,
- bool outgoing ATTRIBUTE_UNUSED)
-{
- machine_mode mode;
- int unsigned_p;
-
- mode = TYPE_MODE (valtype);
- unsigned_p = TYPE_UNSIGNED (valtype);
-
- mode = promote_function_mode (valtype, mode, &unsigned_p,
- fn_decl_or_type, 1);
-
- return gen_rtx_REG (mode, 0);
-}
-
-
-/* Implement TARGET_LIBCALL_VALUE. */
-static rtx
-tilegx_libcall_value (machine_mode mode,
- const_rtx fun ATTRIBUTE_UNUSED)
-{
- return gen_rtx_REG (mode, 0);
-}
-
-
-/* Implement FUNCTION_VALUE_REGNO_P. */
-static bool
-tilegx_function_value_regno_p (const unsigned int regno)
-{
- return regno < TILEGX_NUM_RETURN_REGS;
-}
-
-
-/* Implement TARGET_BUILD_BUILTIN_VA_LIST. */
-static tree
-tilegx_build_builtin_va_list (void)
-{
- tree f_args, f_skip, record, type_decl;
- bool owp;
-
- record = lang_hooks.types.make_type (RECORD_TYPE);
-
- type_decl = build_decl (BUILTINS_LOCATION, TYPE_DECL,
- get_identifier ("__va_list_tag"), record);
-
- f_args = build_decl (BUILTINS_LOCATION, FIELD_DECL,
- get_identifier ("__args"), ptr_type_node);
- f_skip = build_decl (BUILTINS_LOCATION, FIELD_DECL,
- get_identifier ("__skip"), ptr_type_node);
-
- DECL_FIELD_CONTEXT (f_args) = record;
-
- DECL_FIELD_CONTEXT (f_skip) = record;
-
- TREE_CHAIN (record) = type_decl;
- TYPE_NAME (record) = type_decl;
- TYPE_FIELDS (record) = f_args;
- TREE_CHAIN (f_args) = f_skip;
-
- /* We know this is being padded and we want it too. It is an
- internal type so hide the warnings from the user. */
- owp = warn_padded;
- warn_padded = false;
-
- layout_type (record);
-
- warn_padded = owp;
-
- /* The correct type is an array type of one element. */
- return record;
-}
-
-
-/* Implement TARGET_EXPAND_BUILTIN_VA_START. */
-static void
-tilegx_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
-{
- tree f_args, f_skip;
- tree args, skip, t;
-
- f_args = TYPE_FIELDS (TREE_TYPE (valist));
- f_skip = TREE_CHAIN (f_args);
-
- args =
- build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
- skip =
- build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
-
- /* Find the __args area. */
- t = make_tree (TREE_TYPE (args), virtual_incoming_args_rtx);
- t = fold_build_pointer_plus_hwi (t,
- UNITS_PER_WORD *
- (crtl->args.info - TILEGX_NUM_ARG_REGS));
-
- if (crtl->args.pretend_args_size > 0)
- t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
-
- t = build2 (MODIFY_EXPR, TREE_TYPE (args), args, t);
- TREE_SIDE_EFFECTS (t) = 1;
- expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-
- /* Find the __skip area. */
- t = make_tree (TREE_TYPE (skip), virtual_incoming_args_rtx);
- t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
- t = build2 (MODIFY_EXPR, TREE_TYPE (skip), skip, t);
- TREE_SIDE_EFFECTS (t) = 1;
- expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-}
-
-
-/* Implement TARGET_SETUP_INCOMING_VARARGS. */
-static void
-tilegx_setup_incoming_varargs (cumulative_args_t cum,
- const function_arg_info &arg,
- int *pretend_args, int no_rtl)
-{
- CUMULATIVE_ARGS local_cum = *get_cumulative_args (cum);
- int first_reg;
-
- /* The caller has advanced CUM up to, but not beyond, the last named
- argument. Advance a local copy of CUM past the last "real" named
- argument, to find out how many registers are left over. */
- targetm.calls.function_arg_advance (pack_cumulative_args (&local_cum), arg);
- first_reg = local_cum;
-
- if (local_cum < TILEGX_NUM_ARG_REGS)
- {
- *pretend_args = UNITS_PER_WORD * (TILEGX_NUM_ARG_REGS - first_reg);
-
- if (!no_rtl)
- {
- alias_set_type set = get_varargs_alias_set ();
- rtx tmp =
- gen_rtx_MEM (BLKmode, plus_constant (Pmode,
- virtual_incoming_args_rtx,
- -STACK_POINTER_OFFSET -
- UNITS_PER_WORD *
- (TILEGX_NUM_ARG_REGS -
- first_reg)));
- MEM_NOTRAP_P (tmp) = 1;
- set_mem_alias_set (tmp, set);
- move_block_from_reg (first_reg, tmp,
- TILEGX_NUM_ARG_REGS - first_reg);
- }
- }
- else
- *pretend_args = 0;
-}
-
-
-/* Implement TARGET_GIMPLIFY_VA_ARG_EXPR. Gimplify va_arg by updating
- the va_list structure VALIST as required to retrieve an argument of
- type TYPE, and returning that argument.
-
- ret = va_arg(VALIST, TYPE);
-
- generates code equivalent to:
-
- paddedsize = (sizeof(TYPE) + 7) & -8;
- if ( (VALIST.__args + paddedsize > VALIST.__skip)
- & (VALIST.__args <= VALIST.__skip))
- addr = VALIST.__skip + STACK_POINTER_OFFSET;
- else
- addr = VALIST.__args;
- VALIST.__args = addr + paddedsize;
- if (BYTES_BIG_ENDIAN)
- ret = *(TYPE *)(addr + paddedsize - sizeof(TYPE));
- else
- ret = *(TYPE *)addr;
- */
-static tree
-tilegx_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
- gimple_seq *post_p ATTRIBUTE_UNUSED)
-{
- tree f_args, f_skip;
- tree args, skip;
- HOST_WIDE_INT size, rsize;
- tree addr, tmp;
- bool pass_by_reference_p;
-
- f_args = TYPE_FIELDS (va_list_type_node);
- f_skip = TREE_CHAIN (f_args);
-
- args =
- build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
- skip =
- build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
-
- addr = create_tmp_var (ptr_type_node, "va_arg");
-
- /* If an object is dynamically sized, a pointer to it is passed
- instead of the object itself. */
- pass_by_reference_p = pass_va_arg_by_reference (type);
-
- if (pass_by_reference_p)
- type = build_pointer_type (type);
-
- size = int_size_in_bytes (type);
- rsize = ((size + UNITS_PER_WORD - 1) / UNITS_PER_WORD) * UNITS_PER_WORD;
-
- /* If the alignment of the type is greater than the default for a
- parameter, align to the STACK_BOUNDARY. */
- if (TYPE_ALIGN (type) > PARM_BOUNDARY)
- {
- /* Assert the only case we generate code for: when
- stack boundary = 2 * parm boundary. */
- gcc_assert (STACK_BOUNDARY == PARM_BOUNDARY * 2);
-
- tmp = build2 (BIT_AND_EXPR, sizetype,
- fold_convert (sizetype, unshare_expr (args)),
- size_int (PARM_BOUNDARY / 8));
- tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node,
- unshare_expr (args), tmp);
-
- gimplify_assign (unshare_expr (args), tmp, pre_p);
- }
-
- /* Build conditional expression to calculate addr. The expression
- will be gimplified later. */
- tmp = fold_build_pointer_plus_hwi (unshare_expr (args), rsize);
- tmp = build2 (TRUTH_AND_EXPR, boolean_type_node,
- build2 (GT_EXPR, boolean_type_node, tmp, unshare_expr (skip)),
- build2 (LE_EXPR, boolean_type_node, unshare_expr (args),
- unshare_expr (skip)));
-
- tmp = build3 (COND_EXPR, ptr_type_node, tmp,
- build2 (POINTER_PLUS_EXPR, ptr_type_node, unshare_expr (skip),
- size_int (STACK_POINTER_OFFSET)),
- unshare_expr (args));
-
- /* Adjust the address of va_arg if it is in big endian mode. */
- if (BYTES_BIG_ENDIAN && rsize > size)
- tmp = fold_build_pointer_plus_hwi (tmp, rsize - size);
- gimplify_assign (addr, tmp, pre_p);
-
- /* Update VALIST.__args. */
-
- if (BYTES_BIG_ENDIAN && rsize > size)
- tmp = fold_build_pointer_plus_hwi (addr, size);
- else
- tmp = fold_build_pointer_plus_hwi (addr, rsize);
- gimplify_assign (unshare_expr (args), tmp, pre_p);
-
- addr = fold_convert (build_pointer_type (type), addr);
-
- if (pass_by_reference_p)
- addr = build_va_arg_indirect_ref (addr);
-
- return build_va_arg_indirect_ref (addr);
-}
-
-
-
-/* Implement TARGET_RTX_COSTS. */
-static bool
-tilegx_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno,
- int *total, bool speed)
-{
- int code = GET_CODE (x);
-
- switch (code)
- {
- case CONST_INT:
- /* If this is an 8-bit constant, return zero since it can be
- used nearly anywhere with no cost. If it is a valid operand
- for an ADD or AND, likewise return 0 if we know it will be
- used in that context. Otherwise, return 2 since it might be
- used there later. All other constants take at least two
- insns. */
- if (satisfies_constraint_I (x))
- {
- *total = 0;
- return true;
- }
- else if (outer_code == PLUS && add_operand (x, VOIDmode))
- {
- /* Slightly penalize large constants even though we can add
- them in one instruction, because it forces the use of
- 2-wide bundling mode. */
- *total = 1;
- return true;
- }
- else if (move_operand (x, SImode))
- {
- /* We can materialize in one move. */
- *total = COSTS_N_INSNS (1);
- return true;
- }
- else
- {
- /* We can materialize in two moves. */
- *total = COSTS_N_INSNS (2);
- return true;
- }
-
- return false;
-
- case CONST:
- case LABEL_REF:
- case SYMBOL_REF:
- *total = COSTS_N_INSNS (2);
- return true;
-
- case CONST_DOUBLE:
- *total = COSTS_N_INSNS (4);
- return true;
-
- case HIGH:
- *total = 0;
- return true;
-
- case MEM:
- /* If outer-code was a sign or zero extension, a cost of
- COSTS_N_INSNS (1) was already added in, so account for
- that. */
- if (outer_code == ZERO_EXTEND || outer_code == SIGN_EXTEND)
- *total = COSTS_N_INSNS (1);
- else
- *total = COSTS_N_INSNS (2);
- return true;
-
- case PLUS:
- /* Convey that shl[123]add are efficient. */
- if (GET_CODE (XEXP (x, 0)) == MULT
- && cint_248_operand (XEXP (XEXP (x, 0), 1), VOIDmode))
- {
- *total = (rtx_cost (XEXP (XEXP (x, 0), 0), mode,
- (enum rtx_code) outer_code, opno, speed)
- + rtx_cost (XEXP (x, 1), mode,
- (enum rtx_code) outer_code, opno, speed)
- + COSTS_N_INSNS (1));
- return true;
- }
- return false;
-
- case MULT:
- *total = COSTS_N_INSNS (2);
- return false;
-
- case DIV:
- case UDIV:
- case MOD:
- case UMOD:
- /* These are handled by software and are very expensive. */
- *total = COSTS_N_INSNS (100);
- return false;
-
- case UNSPEC:
- case UNSPEC_VOLATILE:
- {
- int num = XINT (x, 1);
-
- if (num <= TILEGX_LAST_LATENCY_1_INSN)
- *total = COSTS_N_INSNS (1);
- else if (num <= TILEGX_LAST_LATENCY_2_INSN)
- *total = COSTS_N_INSNS (2);
- else if (num > TILEGX_LAST_LATENCY_INSN)
- {
- if (num == UNSPEC_NON_TEMPORAL)
- {
- /* These are basically loads. */
- if (outer_code == ZERO_EXTEND || outer_code == SIGN_EXTEND)
- *total = COSTS_N_INSNS (1);
- else
- *total = COSTS_N_INSNS (2);
- }
- else
- {
- if (outer_code == PLUS)
- *total = 0;
- else
- *total = COSTS_N_INSNS (1);
- }
- }
- else
- {
- switch (num)
- {
- case UNSPEC_BLOCKAGE:
- case UNSPEC_NETWORK_BARRIER:
- case UNSPEC_ATOMIC:
- *total = 0;
- break;
-
- case UNSPEC_LNK_AND_LABEL:
- case UNSPEC_MF:
- case UNSPEC_MOV_PCREL_STEP3:
- case UNSPEC_NETWORK_RECEIVE:
- case UNSPEC_NETWORK_SEND:
- case UNSPEC_SPR_MOVE:
- case UNSPEC_TLS_GD_ADD:
- *total = COSTS_N_INSNS (1);
- break;
-
- case UNSPEC_TLS_IE_LOAD:
- case UNSPEC_XCHG:
- *total = COSTS_N_INSNS (2);
- break;
-
- case UNSPEC_SP_SET:
- *total = COSTS_N_INSNS (3);
- break;
-
- case UNSPEC_SP_TEST:
- *total = COSTS_N_INSNS (4);
- break;
-
- case UNSPEC_CMPXCHG:
- case UNSPEC_INSN_CMPEXCH:
- case UNSPEC_LATENCY_L2:
- *total = COSTS_N_INSNS (11);
- break;
-
- case UNSPEC_TLS_GD_CALL:
- *total = COSTS_N_INSNS (30);
- break;
-
- case UNSPEC_LATENCY_MISS:
- *total = COSTS_N_INSNS (80);
- break;
-
- default:
- *total = COSTS_N_INSNS (1);
- }
- }
- return true;
- }
-
- default:
- return false;
- }
-}
-
-
-
-/* Rtl lowering. */
-
-/* Create a temporary variable to hold a partial result, to enable
- CSE. */
-static rtx
-create_temp_reg_if_possible (machine_mode mode, rtx default_reg)
-{
- return can_create_pseudo_p () ? gen_reg_rtx (mode) : default_reg;
-}
-
-
-/* Functions to save and restore machine-specific function data. */
-static struct machine_function *
-tilegx_init_machine_status (void)
-{
- return ggc_cleared_alloc<machine_function> ();
-}
-
-
-/* Do anything needed before RTL is emitted for each function. */
-void
-tilegx_init_expanders (void)
-{
- /* Arrange to initialize and mark the machine per-function
- status. */
- init_machine_status = tilegx_init_machine_status;
-
- if (cfun && cfun->machine && flag_pic)
- {
- static int label_num = 0;
-
- char text_label_name[32];
-
- struct machine_function *machine = cfun->machine;
-
- ASM_GENERATE_INTERNAL_LABEL (text_label_name, "L_PICLNK", label_num++);
-
- machine->text_label_symbol =
- gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (text_label_name));
-
- machine->text_label_rtx =
- gen_rtx_REG (Pmode, TILEGX_PIC_TEXT_LABEL_REGNUM);
-
- machine->got_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
-
- machine->calls_tls_get_addr = false;
- }
-}
-
-
-/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
-static void
-tilegx_expand_to_rtl_hook (void)
-{
- /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
- only care about uses actually emitted. */
- crtl->uses_pic_offset_table = 0;
-}
-
-
-/* Implement TARGET_SHIFT_TRUNCATION_MASK. DImode shifts use the mode
- matching insns and therefore guarantee that the shift count is
- modulo 64. SImode shifts sometimes use the 64 bit version so do
- not hold such guarantee. */
-static unsigned HOST_WIDE_INT
-tilegx_shift_truncation_mask (machine_mode mode)
-{
- return mode == DImode ? 63 : 0;
-}
-
-
-/* Implement TARGET_INIT_LIBFUNCS. */
-static void
-tilegx_init_libfuncs (void)
-{
- /* We need to explicitly generate these libfunc's to support
- conversion of divide by constant to multiply (the divide stubs in
- tilegx.md exist also for this reason). Normally we'd expect gcc
- to lazily generate them when they are needed, but for some reason
- it's set up to only generate them if the mode is the word
- mode. */
- set_optab_libfunc (sdiv_optab, SImode, "__divsi3");
- set_optab_libfunc (udiv_optab, SImode, "__udivsi3");
- set_optab_libfunc (smod_optab, SImode, "__modsi3");
- set_optab_libfunc (umod_optab, SImode, "__umodsi3");
-}
-
-
-/* Return true if X contains a thread-local symbol. */
-static bool
-tilegx_tls_referenced_p (rtx x)
-{
- if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
- x = XEXP (XEXP (x, 0), 0);
-
- if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (x))
- return true;
-
- /* That's all we handle in tilegx_legitimize_tls_address for
- now. */
- return false;
-}
-
-
-/* Return true if X requires a scratch register. It is given that
- flag_pic is on and that X satisfies CONSTANT_P. */
-static int
-tilegx_pic_address_needs_scratch (rtx x)
-{
- if (GET_CODE (x) == CONST
- && GET_CODE (XEXP (x, 0)) == PLUS
- && (GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
- || GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF)
- && (CONST_INT_P (XEXP (XEXP (x, 0), 1))))
- return true;
-
- return false;
-}
-
-
-/* Implement TARGET_LEGITIMATE_CONSTANT_P. This is all constants for
- which we are willing to load the value into a register via a move
- pattern. TLS cannot be treated as a constant because it can
- include a function call. */
-static bool
-tilegx_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
-{
- switch (GET_CODE (x))
- {
- case CONST:
- case SYMBOL_REF:
- return !tilegx_tls_referenced_p (x);
-
- default:
- return true;
- }
-}
-
-
-/* Return true if the constant value X is a legitimate general operand
- when generating PIC code. It is given that flag_pic is on and that
- X satisfies CONSTANT_P. */
-bool
-tilegx_legitimate_pic_operand_p (rtx x)
-{
- if (tilegx_pic_address_needs_scratch (x))
- return false;
-
- if (tilegx_tls_referenced_p (x))
- return false;
-
- return true;
-}
-
-
-/* Return true if the rtx X can be used as an address operand. */
-static bool
-tilegx_legitimate_address_p (machine_mode ARG_UNUSED (mode), rtx x,
- bool strict)
-{
- if (GET_CODE (x) == SUBREG)
- x = SUBREG_REG (x);
-
- switch (GET_CODE (x))
- {
- case POST_INC:
- case POST_DEC:
- if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
- return false;
-
- x = XEXP (x, 0);
- break;
-
- case POST_MODIFY:
- if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
- return false;
-
- if (GET_CODE (XEXP (x, 1)) != PLUS)
- return false;
-
- if (!rtx_equal_p (XEXP (x, 0), XEXP (XEXP (x, 1), 0)))
- return false;
-
- if (!satisfies_constraint_I (XEXP (XEXP (x, 1), 1)))
- return false;
-
- x = XEXP (x, 0);
- break;
-
- case REG:
- break;
-
- default:
- return false;
- }
-
- /* Check if x is a valid reg. */
- if (!REG_P (x))
- return false;
-
- if (strict)
- return REGNO_OK_FOR_BASE_P (REGNO (x));
- else
- return true;
-}
-
-
-/* Return the rtx containing SYMBOL_REF to the text label. */
-static rtx
-tilegx_text_label_symbol (void)
-{
- return cfun->machine->text_label_symbol;
-}
-
-
-/* Return the register storing the value of the text label. */
-static rtx
-tilegx_text_label_rtx (void)
-{
- return cfun->machine->text_label_rtx;
-}
-
-
-/* Return the register storing the value of the global offset
- table. */
-static rtx
-tilegx_got_rtx (void)
-{
- return cfun->machine->got_rtx;
-}
-
-
-/* Return the SYMBOL_REF for _GLOBAL_OFFSET_TABLE_. */
-static rtx
-tilegx_got_symbol (void)
-{
- if (g_got_symbol == NULL)
- g_got_symbol = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
-
- return g_got_symbol;
-}
-
-
-/* Return a reference to the got to be used by tls references. */
-static rtx
-tilegx_tls_got (void)
-{
- rtx temp;
- if (flag_pic)
- {
- crtl->uses_pic_offset_table = 1;
- return tilegx_got_rtx ();
- }
-
- temp = gen_reg_rtx (Pmode);
- emit_move_insn (temp, tilegx_got_symbol ());
-
- return temp;
-}
-
-
-/* ADDR contains a thread-local SYMBOL_REF. Generate code to compute
- this (thread-local) address. */
-static rtx
-tilegx_legitimize_tls_address (rtx addr)
-{
- rtx ret;
-
- gcc_assert (can_create_pseudo_p ());
-
- if (GET_CODE (addr) == SYMBOL_REF)
- switch (SYMBOL_REF_TLS_MODEL (addr))
- {
- case TLS_MODEL_GLOBAL_DYNAMIC:
- case TLS_MODEL_LOCAL_DYNAMIC:
- {
- rtx r0, temp, temp2, temp3, got;
-
- ret = gen_reg_rtx (Pmode);
- r0 = gen_rtx_REG (Pmode, 0);
- temp = gen_reg_rtx (Pmode);
- temp2 = gen_reg_rtx (Pmode);
- temp3 = gen_reg_rtx (Pmode);
-
- got = tilegx_tls_got ();
- if (TARGET_32BIT)
- {
- emit_insn (gen_mov_tls_gd_step1_32bit (temp, addr));
- emit_insn (gen_mov_tls_gd_step2_32bit (temp2, temp, addr));
- emit_insn (gen_tls_add_32bit (temp2, got, temp2, addr));
- }
- else
- {
- emit_insn (gen_mov_tls_gd_step1 (temp, addr));
- emit_insn (gen_mov_tls_gd_step2 (temp2, temp, addr));
- emit_insn (gen_tls_add (temp2, got, temp2, addr));
- }
-
- emit_move_insn (r0, temp2);
-
- if (TARGET_32BIT)
- {
- emit_insn (gen_tls_gd_call_32bit (addr));
- }
- else
- {
- emit_insn (gen_tls_gd_call (addr));
- }
-
- emit_move_insn (temp3, r0);
-
- rtx_insn *last;
- if (TARGET_32BIT)
- last = emit_insn (gen_tls_gd_add_32bit (ret, temp3, addr));
- else
- last = emit_insn (gen_tls_gd_add (ret, temp3, addr));
-
- set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
- break;
- }
- case TLS_MODEL_INITIAL_EXEC:
- {
- rtx temp, temp2, temp3, got;
- rtx_insn *last;
-
- ret = gen_reg_rtx (Pmode);
- temp = gen_reg_rtx (Pmode);
- temp2 = gen_reg_rtx (Pmode);
- temp3 = gen_reg_rtx (Pmode);
-
- got = tilegx_tls_got ();
- if (TARGET_32BIT)
- {
- emit_insn (gen_mov_tls_ie_step1_32bit (temp, addr));
- emit_insn (gen_mov_tls_ie_step2_32bit (temp2, temp, addr));
- emit_insn (gen_tls_add_32bit (temp2, got, temp2, addr));
- emit_insn (gen_tls_ie_load_32bit (temp3, temp2, addr));
- }
- else
- {
- emit_insn (gen_mov_tls_ie_step1 (temp, addr));
- emit_insn (gen_mov_tls_ie_step2 (temp2, temp, addr));
- emit_insn (gen_tls_add (temp2, got, temp2, addr));
- emit_insn (gen_tls_ie_load (temp3, temp2, addr));
- }
-
- last =
- emit_move_insn(ret,
- gen_rtx_PLUS (Pmode,
- gen_rtx_REG (Pmode,
- THREAD_POINTER_REGNUM),
- temp3));
- set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
- break;
- }
- case TLS_MODEL_LOCAL_EXEC:
- {
- rtx temp, temp2;
- rtx_insn *last;
-
- ret = gen_reg_rtx (Pmode);
- temp = gen_reg_rtx (Pmode);
- temp2 = gen_reg_rtx (Pmode);
-
- if (TARGET_32BIT)
- {
- emit_insn (gen_mov_tls_le_step1_32bit (temp, addr));
- emit_insn (gen_mov_tls_le_step2_32bit (temp2, temp, addr));
- }
- else
- {
- emit_insn (gen_mov_tls_le_step1 (temp, addr));
- emit_insn (gen_mov_tls_le_step2 (temp2, temp, addr));
- }
-
- last =
- emit_move_insn (ret,
- gen_rtx_PLUS (Pmode,
- gen_rtx_REG (Pmode,
- THREAD_POINTER_REGNUM),
- temp2));
- set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
- break;
- }
- default:
- gcc_unreachable ();
- }
- else if (GET_CODE (addr) == CONST)
- {
- rtx base, offset;
-
- gcc_assert (GET_CODE (XEXP (addr, 0)) == PLUS);
-
- base = tilegx_legitimize_tls_address (XEXP (XEXP (addr, 0), 0));
- offset = XEXP (XEXP (addr, 0), 1);
-
- base = force_operand (base, NULL_RTX);
- ret = force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
- }
- else
- gcc_unreachable ();
-
- return ret;
-}
-
-
-/* Returns a register that points to ADDR, a symbolic address, by
- computing its address relative to tilegx_text_label_symbol. */
-void
-tilegx_compute_pcrel_address (rtx result, rtx addr)
-{
- rtx text_label_symbol = tilegx_text_label_symbol ();
- rtx text_label_rtx = tilegx_text_label_rtx ();
- rtx temp, temp2, temp3;
-
- temp = create_temp_reg_if_possible (Pmode, result);
- temp2 = create_temp_reg_if_possible (Pmode, result);
-
- if (TARGET_32BIT)
- {
- emit_insn (gen_mov_pcrel_step1_32bit (temp, addr, text_label_symbol));
- emit_insn (gen_mov_pcrel_step2_32bit (temp2, temp, addr,
- text_label_symbol));
- emit_insn (gen_mov_pcrel_step3_32bit (result, temp2,
- text_label_rtx,
- addr, text_label_symbol));
- }
- else if (tilegx_cmodel == CM_LARGE_PIC)
- {
- temp3 = create_temp_reg_if_possible (Pmode, result);
- emit_insn (gen_mov_large_pcrel_step1 (temp, addr, text_label_symbol));
- emit_insn (gen_mov_large_pcrel_step2 (temp2, temp, addr,
- text_label_symbol));
- emit_insn (gen_mov_large_pcrel_step3 (temp3, temp2, addr,
- text_label_symbol));
- emit_insn (gen_mov_large_pcrel_step4 (result, temp3,
- text_label_rtx,
- addr, text_label_symbol));
- }
- else
- {
- emit_insn (gen_mov_pcrel_step1 (temp, addr, text_label_symbol));
- emit_insn (gen_mov_pcrel_step2 (temp2, temp, addr, text_label_symbol));
- emit_insn (gen_mov_pcrel_step3 (result, temp2,
- text_label_rtx,
- addr, text_label_symbol));
- }
-}
-
-
-/* Returns a register that points to the plt entry of ADDR, a symbolic
- address, by computing its address relative to
- tilegx_text_label_symbol. */
-void
-tilegx_compute_pcrel_plt_address (rtx result, rtx addr)
-{
- rtx text_label_symbol = tilegx_text_label_symbol ();
- rtx text_label_rtx = tilegx_text_label_rtx ();
- rtx temp, temp2, temp3;
-
- temp = create_temp_reg_if_possible (Pmode, result);
- temp2 = create_temp_reg_if_possible (Pmode, result);
-
- if (TARGET_32BIT)
- {
- emit_insn (gen_mov_plt_pcrel_step1_32bit (temp, addr,
- text_label_symbol));
- emit_insn (gen_mov_plt_pcrel_step2_32bit (temp2, temp, addr,
- text_label_symbol));
- emit_move_insn (result, gen_rtx_PLUS (Pmode, temp2, text_label_rtx));
- }
- else
- {
- temp3 = create_temp_reg_if_possible (Pmode, result);
-
- emit_insn (gen_mov_plt_pcrel_step1 (temp, addr, text_label_symbol));
- emit_insn (gen_mov_plt_pcrel_step2 (temp2, temp, addr,
- text_label_symbol));
- emit_insn (gen_mov_plt_pcrel_step3 (temp3, temp2, addr,
- text_label_symbol));
- emit_move_insn (result, gen_rtx_PLUS (Pmode, temp3, text_label_rtx));
- }
-}
-
-
-/* Legitimize PIC addresses. If the address is already
- position-independent, we return ORIG. Newly generated
- position-independent addresses go into a reg. This is REG if
- nonzero, otherwise we allocate register(s) as necessary. */
-static rtx
-tilegx_legitimize_pic_address (rtx orig,
- machine_mode mode ATTRIBUTE_UNUSED,
- rtx reg)
-{
- if (GET_CODE (orig) == SYMBOL_REF)
- {
- rtx address, pic_ref;
-
- if (reg == 0)
- {
- gcc_assert (can_create_pseudo_p ());
- reg = gen_reg_rtx (Pmode);
- }
-
- if (SYMBOL_REF_LOCAL_P (orig))
- {
- /* If not during reload, allocate another temp reg here for
- loading in the address, so that these instructions can be
- optimized properly. */
- rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
- tilegx_compute_pcrel_address (temp_reg, orig);
-
- /* Note: this is conservative. We use the text_label but we
- don't use the pic_offset_table. However, in some cases
- we may need the pic_offset_table (see
- tilegx_fixup_pcrel_references). */
- crtl->uses_pic_offset_table = 1;
-
- address = temp_reg;
-
- emit_move_insn (reg, address);
- return reg;
- }
- else
- {
- /* If not during reload, allocate another temp reg here for
- loading in the address, so that these instructions can be
- optimized properly. */
- rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
-
- gcc_assert (flag_pic);
- if (flag_pic == 1)
- {
- if (TARGET_32BIT)
- {
- emit_insn (gen_add_got16_32bit (temp_reg,
- tilegx_got_rtx (),
- orig));
- }
- else
- {
- emit_insn (gen_add_got16 (temp_reg,
- tilegx_got_rtx (), orig));
- }
- }
- else
- {
- rtx temp_reg2 = create_temp_reg_if_possible (Pmode, reg);
- rtx temp_reg3 = create_temp_reg_if_possible (Pmode, reg);
- if (TARGET_32BIT)
- {
- emit_insn (gen_mov_got32_step1_32bit (temp_reg3, orig));
- emit_insn (gen_mov_got32_step2_32bit
- (temp_reg2, temp_reg3, orig));
- }
- else
- {
- emit_insn (gen_mov_got32_step1 (temp_reg3, orig));
- emit_insn (gen_mov_got32_step2 (temp_reg2, temp_reg3,
- orig));
- }
- emit_move_insn (temp_reg,
- gen_rtx_PLUS (Pmode,
- tilegx_got_rtx (), temp_reg2));
- }
-
- address = temp_reg;
-
- pic_ref = gen_const_mem (Pmode, address);
- crtl->uses_pic_offset_table = 1;
- emit_move_insn (reg, pic_ref);
- /* The following put a REG_EQUAL note on this insn, so that
- it can be optimized by loop. But it causes the label to
- be optimized away. */
- /* set_unique_reg_note (insn, REG_EQUAL, orig); */
- return reg;
- }
- }
- else if (GET_CODE (orig) == CONST)
- {
- rtx base, offset;
-
- if (GET_CODE (XEXP (orig, 0)) == PLUS
- && XEXP (XEXP (orig, 0), 0) == tilegx_got_rtx ())
- return orig;
-
- if (reg == 0)
- {
- gcc_assert (can_create_pseudo_p ());
- reg = gen_reg_rtx (Pmode);
- }
-
- gcc_assert (GET_CODE (XEXP (orig, 0)) == PLUS);
- base = tilegx_legitimize_pic_address (XEXP (XEXP (orig, 0), 0),
- Pmode, reg);
- offset = tilegx_legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode,
- base == reg ? 0 : reg);
-
- if (CONST_INT_P (offset))
- {
- if (can_create_pseudo_p ())
- offset = force_reg (Pmode, offset);
- else
- /* If we reach here, then something is seriously wrong. */
- gcc_unreachable ();
- }
-
- if (can_create_pseudo_p ())
- return force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
- else
- gcc_unreachable ();
- }
- else if (GET_CODE (orig) == LABEL_REF)
- {
- rtx address;
- rtx temp_reg;
-
- if (reg == 0)
- {
- gcc_assert (can_create_pseudo_p ());
- reg = gen_reg_rtx (Pmode);
- }
-
- /* If not during reload, allocate another temp reg here for
- loading in the address, so that these instructions can be
- optimized properly. */
- temp_reg = create_temp_reg_if_possible (Pmode, reg);
- tilegx_compute_pcrel_address (temp_reg, orig);
-
- /* Note: this is conservative. We use the text_label but we
- don't use the pic_offset_table. */
- crtl->uses_pic_offset_table = 1;
-
- address = temp_reg;
-
- emit_move_insn (reg, address);
-
- return reg;
- }
-
- return orig;
-}
-
-
-/* Implement TARGET_LEGITIMIZE_ADDRESS. */
-static rtx
-tilegx_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
- machine_mode mode)
-{
- if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
- && symbolic_operand (x, Pmode) && tilegx_tls_referenced_p (x))
- {
- return tilegx_legitimize_tls_address (x);
- }
- else if (flag_pic)
- {
- return tilegx_legitimize_pic_address (x, mode, 0);
- }
- else
- return x;
-}
-
-
-/* Implement TARGET_DELEGITIMIZE_ADDRESS. */
-static rtx
-tilegx_delegitimize_address (rtx x)
-{
- x = delegitimize_mem_from_attrs (x);
-
- if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == UNSPEC)
- {
- switch (XINT (XEXP (x, 0), 1))
- {
- case UNSPEC_HW0:
- case UNSPEC_HW1:
- case UNSPEC_HW2:
- case UNSPEC_HW3:
- case UNSPEC_HW0_LAST:
- case UNSPEC_HW1_LAST:
- case UNSPEC_HW2_LAST:
- case UNSPEC_HW0_PCREL:
- case UNSPEC_HW1_PCREL:
- case UNSPEC_HW1_LAST_PCREL:
- case UNSPEC_HW2_LAST_PCREL:
- case UNSPEC_HW0_PLT_PCREL:
- case UNSPEC_HW1_PLT_PCREL:
- case UNSPEC_HW1_LAST_PLT_PCREL:
- case UNSPEC_HW2_LAST_PLT_PCREL:
- case UNSPEC_HW0_GOT:
- case UNSPEC_HW0_LAST_GOT:
- case UNSPEC_HW1_LAST_GOT:
- case UNSPEC_HW0_TLS_GD:
- case UNSPEC_HW1_LAST_TLS_GD:
- case UNSPEC_HW0_TLS_IE:
- case UNSPEC_HW1_LAST_TLS_IE:
- case UNSPEC_HW0_TLS_LE:
- case UNSPEC_HW1_LAST_TLS_LE:
- x = XVECEXP (XEXP (x, 0), 0, 0);
- break;
- }
- }
-
- return x;
-}
-
-
-/* Emit code to load the PIC register. */
-static void
-load_pic_register (bool delay_pic_helper ATTRIBUTE_UNUSED)
-{
- int orig_flag_pic = flag_pic;
-
- rtx got_symbol = tilegx_got_symbol ();
- rtx text_label_symbol = tilegx_text_label_symbol ();
- rtx text_label_rtx = tilegx_text_label_rtx ();
- flag_pic = 0;
-
- if (TARGET_32BIT)
- {
- emit_insn (gen_insn_lnk_and_label_32bit (text_label_rtx,
- text_label_symbol));
- }
- else
- {
- emit_insn (gen_insn_lnk_and_label (text_label_rtx, text_label_symbol));
- }
-
- tilegx_compute_pcrel_address (tilegx_got_rtx (), got_symbol);
-
- flag_pic = orig_flag_pic;
-
- /* Need to emit this whether or not we obey regdecls, since
- setjmp/longjmp can cause life info to screw up. ??? In the case
- where we don't obey regdecls, this is not sufficient since we may
- not fall out the bottom. */
- emit_use (tilegx_got_rtx ());
-}
-
-
-/* Return the simd variant of the constant NUM of mode MODE, by
- replicating it to fill an interger of mode DImode. NUM is first
- truncated to fit in MODE. */
-rtx
-tilegx_simd_int (rtx num, machine_mode mode)
-{
- HOST_WIDE_INT n = 0;
-
- gcc_assert (CONST_INT_P (num));
-
- n = INTVAL (num);
-
- switch (mode)
- {
- case E_QImode:
- n = 0x0101010101010101LL * (n & 0x000000FF);
- break;
- case E_HImode:
- n = 0x0001000100010001LL * (n & 0x0000FFFF);
- break;
- case E_SImode:
- n = 0x0000000100000001LL * (n & 0xFFFFFFFF);
- break;
- case E_DImode:
- break;
- default:
- gcc_unreachable ();
- }
-
- return GEN_INT (n);
-}
-
-
-/* Returns true iff VAL can be moved into a register in one
- instruction. And if it can, it emits the code to move the constant
- into DEST_REG.
-
- If THREE_WIDE_ONLY is true, this insists on an instruction that
- works in a bundle containing three instructions. */
-static bool
-expand_set_cint64_one_inst (rtx dest_reg,
- HOST_WIDE_INT val, bool three_wide_only)
-{
- if (val == trunc_int_for_mode (val, QImode))
- {
- /* Success! */
- emit_move_insn (dest_reg, GEN_INT (val));
- return true;
- }
- else if (!three_wide_only)
- {
- /* Test for the following constraints: J, K, N, P. We avoid
- generating an rtx and using existing predicates because we
- can be testing and rejecting a lot of constants, and GEN_INT
- is O(N). */
- if ((val >= -32768 && val <= 65535)
- || ((val == (val & 0xFF) * 0x0101010101010101LL))
- || (val == ((trunc_int_for_mode (val, QImode) & 0xFFFF)
- * 0x0001000100010001LL)))
- {
- emit_move_insn (dest_reg, GEN_INT (val));
- return true;
- }
- }
-
- return false;
-}
-
-
-/* Implement DImode rotatert. */
-static HOST_WIDE_INT
-rotate_right (HOST_WIDE_INT n, int count)
-{
- unsigned HOST_WIDE_INT x = n & 0xFFFFFFFFFFFFFFFFULL;
- if (count == 0)
- return x;
- return ((x >> count) | (x << (64 - count))) & 0xFFFFFFFFFFFFFFFFULL;
-}
-
-
-/* Return true iff n contains exactly one contiguous sequence of 1
- bits, possibly wrapping around from high bits to low bits. */
-bool
-tilegx_bitfield_operand_p (HOST_WIDE_INT n, int *first_bit, int *last_bit)
-{
- int i;
-
- if (n == 0)
- return false;
-
- for (i = 0; i < 64; i++)
- {
- unsigned HOST_WIDE_INT x = rotate_right (n, i);
- if (!(x & 1))
- continue;
-
- /* See if x is a power of two minus one, i.e. only consecutive 1
- bits starting from bit 0. */
- if ((x & (x + 1)) == 0)
- {
- if (first_bit != NULL)
- *first_bit = i;
- if (last_bit != NULL)
- *last_bit = (i + exact_log2 (x ^ (x >> 1))) & 63;
-
- return true;
- }
- }
-
- return false;
-}
-
-
-/* Create code to move the CONST_INT value in src_val to dest_reg. */
-static void
-expand_set_cint64 (rtx dest_reg, rtx src_val)
-{
- HOST_WIDE_INT val;
- int leading_zeroes, trailing_zeroes;
- int three_wide_only;
- int shift, ins_shift, zero_cluster_shift;
- rtx temp, subreg;
-
- gcc_assert (CONST_INT_P (src_val));
- val = trunc_int_for_mode (INTVAL (src_val), GET_MODE (dest_reg));
-
- /* See if we can generate the constant in one instruction. */
- if (expand_set_cint64_one_inst (dest_reg, val, false))
- return;
-
- /* Force the destination to DImode so we can use DImode instructions
- to create it. This both allows instructions like rotl, and
- certain efficient 3-wide instructions. */
- subreg = simplify_gen_subreg (DImode, dest_reg, GET_MODE (dest_reg), 0);
- gcc_assert (subreg != NULL);
- dest_reg = subreg;
-
- temp = create_temp_reg_if_possible (DImode, dest_reg);
-
- leading_zeroes = 63 - floor_log2 (val & 0xFFFFFFFFFFFFFFFFULL);
- trailing_zeroes = exact_log2 (val & -val);
-
- /* First try all three-wide instructions that generate a constant
- (i.e. movei) followed by various shifts and rotates. If none of
- those work, try various two-wide ways of generating a constant
- followed by various shifts and rotates. */
- for (three_wide_only = 1; three_wide_only >= 0; three_wide_only--)
- {
- int count;
-
- if (expand_set_cint64_one_inst (temp, val >> trailing_zeroes,
- three_wide_only))
- {
- /* 0xFFFFFFFFFFFFA500 becomes:
- movei temp, 0xFFFFFFFFFFFFFFA5
- shli dest, temp, 8 */
- emit_move_insn (dest_reg,
- gen_rtx_ASHIFT (DImode, temp,
- GEN_INT (trailing_zeroes)));
- return;
- }
-
- if (expand_set_cint64_one_inst (temp, val << leading_zeroes,
- three_wide_only))
- {
- /* 0x7FFFFFFFFFFFFFFF becomes:
- movei temp, -2
- shrui dest, temp, 1 */
- emit_move_insn (dest_reg,
- gen_rtx_LSHIFTRT (DImode, temp,
- GEN_INT (leading_zeroes)));
- return;
- }
-
- /* Try rotating a one-instruction immediate. */
- for (count = 1; count < 64; count++)
- {
- HOST_WIDE_INT r = rotate_right (val, count);
- if (expand_set_cint64_one_inst (temp, r, three_wide_only))
- {
- /* 0xFFFFFFFFFFA5FFFF becomes:
- movei temp, 0xFFFFFFFFFFFFFFA5
- rotli dest, temp, 16 */
- emit_move_insn (dest_reg,
- gen_rtx_ROTATE (DImode, temp, GEN_INT (count)));
- return;
- }
- }
- }
-
- /* There are two cases here to produce a large constant.
- In the most general case, we do this:
-
- moveli x, hw3(NUM)
- shl16insli x, x, hw2(NUM)
- shl16insli x, x, hw1(NUM)
- shl16insli x, x, hw0(NUM)
-
- However, we can sometimes do better. shl16insli is a poor way to
- insert 16 zero bits, because simply shifting left by 16 has more
- bundling freedom. So if we see any contiguous aligned sequence
- of 16 or more zero bits (below the highest set bit), it is always
- more efficient to materialize the bits above the zero bits, then
- left shift to put in the zeroes, then insert whatever bits
- remain. For example, we might end up with:
-
- movei x, NUM >> (37 + 16)
- shli x, x, 37
- shl16insli x, x, hw0(NUM) */
-
- zero_cluster_shift = -1;
-
- for (shift = 0; shift < 48 - leading_zeroes; shift += 16)
- {
- HOST_WIDE_INT x = val >> shift;
-
- /* Find the least significant group of 16 aligned zero bits. */
- if ((x & 0xFFFF) == 0x0000)
- {
- /* Grab any following zero bits as well. */
- zero_cluster_shift = exact_log2 (x & -x);
- shift += zero_cluster_shift;
- break;
- }
- }
-
- if (zero_cluster_shift >= 0)
- {
- unsigned HOST_WIDE_INT leftover;
-
- /* Recursively create the constant above the lowest 16 zero
- bits. */
- expand_set_cint64 (temp, GEN_INT (val >> shift));
-
- /* See if we can easily insert the remaining bits, or if we need
- to fall through to the more general case. */
- leftover = val - ((val >> shift) << shift);
- if (leftover == 0)
- {
- /* A simple left shift is enough. */
- emit_move_insn (dest_reg,
- gen_rtx_ASHIFT (DImode, temp, GEN_INT (shift)));
- return;
- }
- else if (leftover <= 32767)
- {
- /* Left shift into position then add in the leftover. */
- rtx temp2 = create_temp_reg_if_possible (DImode, temp);
- emit_move_insn (temp2,
- gen_rtx_ASHIFT (DImode, temp, GEN_INT (shift)));
- emit_move_insn (dest_reg,
- gen_rtx_PLUS (DImode, temp2, GEN_INT (leftover)));
- return;
- }
- else
- {
- /* Shift in the batch of >= 16 zeroes we detected earlier.
- After this, shift will be aligned mod 16 so the final
- loop can use shl16insli. */
- rtx temp2 = create_temp_reg_if_possible (DImode, temp);
- rtx shift_count_rtx = GEN_INT (zero_cluster_shift);
-
- emit_move_insn (temp2,
- gen_rtx_ASHIFT (DImode, temp, shift_count_rtx));
-
- shift -= zero_cluster_shift;
- temp = temp2;
- }
- }
- else
- {
- /* Set as many high 16-bit blocks as we can with a single
- instruction. We'll insert the remaining 16-bit blocks
- below. */
- for (shift = 16;; shift += 16)
- {
- gcc_assert (shift < 64);
- if (expand_set_cint64_one_inst (temp, val >> shift, false))
- break;
- }
- }
-
- /* At this point, temp == val >> shift, shift % 16 == 0, and we
- still need to insert any bits of 'val' below 'shift'. Those bits
- are guaranteed to not have 16 contiguous zeroes. */
-
- gcc_assert ((shift & 15) == 0);
-
- for (ins_shift = shift - 16; ins_shift >= 0; ins_shift -= 16)
- {
- rtx result;
- HOST_WIDE_INT bits = (val >> ins_shift) & 0xFFFF;
- gcc_assert (bits != 0);
-
- /* On the last iteration we need to store into dest_reg. */
- if (ins_shift == 0)
- result = dest_reg;
- else
- result = create_temp_reg_if_possible (DImode, dest_reg);
-
- emit_insn (gen_insn_shl16insli (result, temp, GEN_INT (bits)));
-
- temp = result;
- }
-}
-
-
-/* Load OP1, a 64-bit constant, into OP0, a register. We know it
- can't be done in one insn when we get here, the move expander
- guarantees this. */
-void
-tilegx_expand_set_const64 (rtx op0, rtx op1)
-{
- if (CONST_INT_P (op1))
- {
- /* TODO: I don't know if we want to split large constants
- now, or wait until later (with a define_split).
-
- Does splitting early help CSE? Does it harm other
- optimizations that might fold loads? */
- expand_set_cint64 (op0, op1);
- }
- else
- {
- rtx temp = create_temp_reg_if_possible (Pmode, op0);
-
- if (TARGET_32BIT)
- {
- /* Generate the 2-insn sequence to materialize a symbolic
- address. */
- emit_insn (gen_mov_address_32bit_step1 (temp, op1));
- emit_insn (gen_mov_address_32bit_step2 (op0, temp, op1));
- }
- else
- {
- /* Generate the 3-insn sequence to materialize a symbolic
- address. Note that this assumes that virtual addresses
- fit in 48 signed bits, which is currently true. */
- rtx temp2 = create_temp_reg_if_possible (Pmode, op0);
- emit_insn (gen_mov_address_step1 (temp, op1));
- emit_insn (gen_mov_address_step2 (temp2, temp, op1));
- emit_insn (gen_mov_address_step3 (op0, temp2, op1));
- }
- }
-}
-
-
-/* Expand a move instruction. Return true if all work is done. */
-bool
-tilegx_expand_mov (machine_mode mode, rtx *operands)
-{
- /* Handle sets of MEM first. */
- if (MEM_P (operands[0]))
- {
- if (can_create_pseudo_p ())
- operands[0] = validize_mem (operands[0]);
-
- if (reg_or_0_operand (operands[1], mode))
- return false;
-
- if (!reload_in_progress)
- operands[1] = force_reg (mode, operands[1]);
- }
-
- /* Fixup TLS cases. */
- if (CONSTANT_P (operands[1]) && tilegx_tls_referenced_p (operands[1]))
- {
- operands[1] = tilegx_legitimize_tls_address (operands[1]);
- return false;
- }
-
- /* Fixup PIC cases. */
- if (flag_pic && CONSTANT_P (operands[1]))
- {
- if (tilegx_pic_address_needs_scratch (operands[1]))
- operands[1] = tilegx_legitimize_pic_address (operands[1], mode, 0);
-
- if (symbolic_operand (operands[1], mode))
- {
- operands[1] = tilegx_legitimize_pic_address (operands[1],
- mode,
- (reload_in_progress ?
- operands[0] :
- NULL_RTX));
- return false;
- }
- }
-
- /* Accept non-constants and valid constants unmodified. */
- if (!CONSTANT_P (operands[1]) || move_operand (operands[1], mode))
- return false;
-
- /* Split large integers. */
- tilegx_expand_set_const64 (operands[0], operands[1]);
- return true;
-}
-
-
-/* Expand unaligned loads. */
-void
-tilegx_expand_unaligned_load (rtx dest_reg, rtx mem, HOST_WIDE_INT bitsize,
- HOST_WIDE_INT bit_offset, bool sign)
-{
- machine_mode mode;
- rtx addr_lo, addr_hi;
- rtx mem_lo, mem_hi, hi;
- rtx mema, wide_result;
- int last_byte_offset;
- HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
-
- mode = GET_MODE (dest_reg);
-
- if (bitsize == 2 * BITS_PER_UNIT && (bit_offset % BITS_PER_UNIT) == 0)
- {
- rtx mem_left, mem_right;
- rtx left = gen_reg_rtx (mode);
-
- /* When just loading a two byte value, we can load the two bytes
- individually and combine them efficiently. */
-
- mem_lo = adjust_address (mem, QImode, byte_offset);
- mem_hi = adjust_address (mem, QImode, byte_offset + 1);
-
- if (BYTES_BIG_ENDIAN)
- {
- mem_left = mem_lo;
- mem_right = mem_hi;
- }
- else
- {
- mem_left = mem_hi;
- mem_right = mem_lo;
- }
-
- if (sign)
- {
- /* Do a signed load of the second byte and use bfins to set
- the high bits of the result. */
- emit_insn (gen_zero_extendqidi2 (gen_lowpart (DImode, dest_reg),
- mem_right));
- emit_insn (gen_extendqidi2 (gen_lowpart (DImode, left), mem_left));
- emit_insn (gen_insv (gen_lowpart (DImode, dest_reg),
- GEN_INT (64 - 8), GEN_INT (8),
- gen_lowpart (DImode, left)));
- }
- else
- {
- /* Do two unsigned loads and use v1int_l to interleave
- them. */
- rtx right = gen_reg_rtx (mode);
- emit_insn (gen_zero_extendqidi2 (gen_lowpart (DImode, right),
- mem_right));
- emit_insn (gen_zero_extendqidi2 (gen_lowpart (DImode, left),
- mem_left));
- emit_insn (gen_insn_v1int_l (gen_lowpart (DImode, dest_reg),
- gen_lowpart (DImode, left),
- gen_lowpart (DImode, right)));
- }
-
- return;
- }
-
- mema = XEXP (mem, 0);
-
- /* AND addresses cannot be in any alias set, since they may
- implicitly alias surrounding code. Ideally we'd have some alias
- set that covered all types except those with alignment 8 or
- higher. */
- addr_lo = force_reg (Pmode, plus_constant (Pmode, mema, byte_offset));
- mem_lo = change_address (mem, mode,
- gen_rtx_AND (GET_MODE (mema), addr_lo,
- GEN_INT (-8)));
- set_mem_alias_set (mem_lo, 0);
-
- /* Load the high word at an address that will not fault if the low
- address is aligned and at the very end of a page. */
- last_byte_offset = (bit_offset + bitsize - 1) / BITS_PER_UNIT;
- addr_hi = force_reg (Pmode, plus_constant (Pmode, mema, last_byte_offset));
- mem_hi = change_address (mem, mode,
- gen_rtx_AND (GET_MODE (mema), addr_hi,
- GEN_INT (-8)));
- set_mem_alias_set (mem_hi, 0);
-
- if (bitsize == 64)
- {
- addr_lo = make_safe_from (addr_lo, dest_reg);
- wide_result = dest_reg;
- }
- else
- {
- wide_result = gen_reg_rtx (mode);
- }
-
- /* Load hi first in case dest_reg is used in mema. */
- hi = gen_reg_rtx (mode);
- emit_move_insn (hi, mem_hi);
- emit_move_insn (wide_result, mem_lo);
-
- emit_insn (gen_insn_dblalign (gen_lowpart (DImode, wide_result),
- gen_lowpart (DImode, wide_result),
- gen_lowpart (DImode, hi), addr_lo));
-
- if (bitsize != 64)
- {
- rtx extracted =
- extract_bit_field (gen_lowpart (DImode, wide_result),
- bitsize, bit_offset % BITS_PER_UNIT,
- !sign, gen_lowpart (DImode, dest_reg),
- DImode, DImode, false, NULL);
-
- if (extracted != dest_reg)
- emit_move_insn (dest_reg, gen_lowpart (DImode, extracted));
- }
-}
-
-
-/* Expand unaligned stores. */
-static void
-tilegx_expand_unaligned_store (rtx mem, rtx src, HOST_WIDE_INT bitsize,
- HOST_WIDE_INT bit_offset)
-{
- HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
- HOST_WIDE_INT bytesize = bitsize / BITS_PER_UNIT;
- HOST_WIDE_INT shift_init, shift_increment, shift_amt;
- HOST_WIDE_INT i;
- rtx mem_addr;
- rtx store_val;
-
- shift_init = BYTES_BIG_ENDIAN ? (bitsize - BITS_PER_UNIT) : 0;
- shift_increment = BYTES_BIG_ENDIAN ? -BITS_PER_UNIT : BITS_PER_UNIT;
-
- for (i = 0, shift_amt = shift_init;
- i < bytesize;
- i++, shift_amt += shift_increment)
- {
- mem_addr = adjust_address (mem, QImode, byte_offset + i);
-
- if (shift_amt)
- {
- store_val = expand_simple_binop (DImode, LSHIFTRT,
- gen_lowpart (DImode, src),
- GEN_INT (shift_amt), NULL, 1,
- OPTAB_LIB_WIDEN);
- store_val = gen_lowpart (QImode, store_val);
- }
- else
- {
- store_val = gen_lowpart (QImode, src);
- }
-
- emit_move_insn (mem_addr, store_val);
- }
-}
-
-
-/* Implement the movmisalign patterns. One of the operands is a
- memory that is not naturally aligned. Emit instructions to load
- it. */
-void
-tilegx_expand_movmisalign (machine_mode mode, rtx *operands)
-{
- if (MEM_P (operands[1]))
- {
- rtx tmp;
-
- if (register_operand (operands[0], mode))
- tmp = operands[0];
- else
- tmp = gen_reg_rtx (mode);
-
- tilegx_expand_unaligned_load (tmp, operands[1], GET_MODE_BITSIZE (mode),
- 0, true);
-
- if (tmp != operands[0])
- emit_move_insn (operands[0], tmp);
- }
- else if (MEM_P (operands[0]))
- {
- if (!reg_or_0_operand (operands[1], mode))
- operands[1] = force_reg (mode, operands[1]);
-
- tilegx_expand_unaligned_store (operands[0], operands[1],
- GET_MODE_BITSIZE (mode), 0);
- }
- else
- gcc_unreachable ();
-
-}
-
-
-/* Implement the allocate_stack pattern (alloca). */
-void
-tilegx_allocate_stack (rtx op0, rtx op1)
-{
- /* Technically the correct way to initialize chain_loc is with
- * gen_frame_mem() instead of gen_rtx_MEM(), but gen_frame_mem()
- * sets the alias_set to that of a frame reference. Some of our
- * tests rely on some unsafe assumption about when the chaining
- * update is done, we need to be conservative about reordering the
- * chaining instructions.
- */
- rtx fp_addr = gen_reg_rtx (Pmode);
- rtx fp_value = gen_reg_rtx (Pmode);
- rtx fp_loc;
-
- emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- GEN_INT (UNITS_PER_WORD)));
-
- fp_loc = gen_frame_mem (Pmode, fp_addr);
-
- emit_move_insn (fp_value, fp_loc);
-
- op1 = force_reg (Pmode, op1);
-
- emit_move_insn (stack_pointer_rtx,
- gen_rtx_MINUS (Pmode, stack_pointer_rtx, op1));
-
- emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- GEN_INT (UNITS_PER_WORD)));
-
- fp_loc = gen_frame_mem (Pmode, fp_addr);
-
- emit_move_insn (fp_loc, fp_value);
-
- emit_move_insn (op0, virtual_stack_dynamic_rtx);
-}
-
-
-
-/* Multiplies */
-
-
-/* Returns the insn_code in ENTRY. */
-static enum insn_code
-tilegx_multiply_get_opcode (const struct tilegx_multiply_insn_seq_entry
- *entry)
-{
- return tilegx_multiply_insn_seq_decode_opcode[entry->compressed_opcode];
-}
-
-
-/* Returns the length of the 'op' array. */
-static int
-tilegx_multiply_get_num_ops (const struct tilegx_multiply_insn_seq *seq)
-{
- /* The array either uses all of its allocated slots or is terminated
- by a bogus opcode. Either way, the array size is the index of the
- last valid opcode plus one. */
- int i;
- for (i = tilegx_multiply_insn_seq_MAX_OPERATIONS - 1; i >= 0; i--)
- if (tilegx_multiply_get_opcode (&seq->op[i]) != CODE_FOR_nothing)
- return i + 1;
-
- /* An empty array is not allowed. */
- gcc_unreachable ();
-}
-
-
-/* We precompute a number of expression trees for multiplying by
- constants. This generates code for such an expression tree by
- walking through the nodes in the tree (which are conveniently
- pre-linearized) and emitting an instruction for each one. */
-static void
-tilegx_expand_constant_multiply_given_sequence (rtx result, rtx src,
- const struct
- tilegx_multiply_insn_seq *seq)
-{
- int i;
- int num_ops;
-
- /* Keep track of the subexpressions computed so far, so later
- instructions can refer to them. We seed the array with zero and
- the value being multiplied. */
- int num_subexprs = 2;
- rtx subexprs[tilegx_multiply_insn_seq_MAX_OPERATIONS + 2];
- subexprs[0] = const0_rtx;
- subexprs[1] = src;
-
- /* Determine how many instructions we are going to generate. */
- num_ops = tilegx_multiply_get_num_ops (seq);
- gcc_assert (num_ops > 0
- && num_ops <= tilegx_multiply_insn_seq_MAX_OPERATIONS);
-
- for (i = 0; i < num_ops; i++)
- {
- const struct tilegx_multiply_insn_seq_entry *entry = &seq->op[i];
-
- /* Figure out where to store the output of this instruction. */
- const bool is_last_op = (i + 1 == num_ops);
- rtx out = is_last_op ? result : gen_reg_rtx (DImode);
-
- enum insn_code opcode = tilegx_multiply_get_opcode (entry);
- if (opcode == CODE_FOR_ashldi3)
- {
- /* Handle shift by immediate. This is a special case because
- the meaning of the second operand is a constant shift
- count rather than an operand index. */
-
- /* Make sure the shift count is in range. Zero should not
- happen. */
- const int shift_count = entry->rhs;
- gcc_assert (shift_count > 0 && shift_count < 64);
-
- /* Emit the actual instruction. */
- emit_insn (GEN_FCN (opcode)
- (out, subexprs[entry->lhs],
- gen_rtx_CONST_INT (DImode, shift_count)));
- }
- else
- {
- /* Handle a normal two-operand instruction, such as add or
- shl1add. */
-
- /* Make sure we are referring to a previously computed
- subexpression. */
- gcc_assert (entry->rhs < num_subexprs);
-
- /* Emit the actual instruction. */
- emit_insn (GEN_FCN (opcode)
- (out, subexprs[entry->lhs], subexprs[entry->rhs]));
- }
-
- /* Record this subexpression for use by later expressions. */
- subexprs[num_subexprs++] = out;
- }
-}
-
-
-/* bsearch helper function. */
-static int
-tilegx_compare_multipliers (const void *key, const void *t)
-{
- long long delta =
- (*(const long long *) key
- - ((const struct tilegx_multiply_insn_seq *) t)->multiplier);
- return (delta < 0) ? -1 : (delta > 0);
-}
-
-
-/* Returns the tilegx_multiply_insn_seq for multiplier, or NULL if none
- exists. */
-static const struct tilegx_multiply_insn_seq *
-tilegx_find_multiply_insn_seq_for_constant (long long multiplier)
-{
- return ((const struct tilegx_multiply_insn_seq *)
- bsearch (&multiplier, tilegx_multiply_insn_seq_table,
- tilegx_multiply_insn_seq_table_size,
- sizeof tilegx_multiply_insn_seq_table[0],
- tilegx_compare_multipliers));
-}
-
-
-/* Try to a expand constant multiply in DImode by looking it up in a
- precompiled table. OP0 is the result operand, OP1 is the source
- operand, and MULTIPLIER is the value of the constant. Return true
- if it succeeds. */
-static bool
-tilegx_expand_const_muldi (rtx op0, rtx op1, long long multiplier)
-{
- /* See if we have precomputed an efficient way to multiply by this
- constant. */
- const struct tilegx_multiply_insn_seq *seq =
- tilegx_find_multiply_insn_seq_for_constant (multiplier);
- if (seq != NULL)
- {
- tilegx_expand_constant_multiply_given_sequence (op0, op1, seq);
- return true;
- }
- else
- return false;
-}
-
-
-/* Expand the muldi pattern. */
-bool
-tilegx_expand_muldi (rtx op0, rtx op1, rtx op2)
-{
- if (CONST_INT_P (op2))
- {
- HOST_WIDE_INT n = trunc_int_for_mode (INTVAL (op2), DImode);
- return tilegx_expand_const_muldi (op0, op1, n);
- }
- return false;
-}
-
-
-/* Expand a high multiply pattern in DImode. RESULT, OP1, OP2 are the
- operands, and SIGN is true if it's a signed multiply, and false if
- it's an unsigned multiply. */
-static void
-tilegx_expand_high_multiply (rtx result, rtx op1, rtx op2, bool sign)
-{
- rtx tmp0 = gen_reg_rtx (DImode);
- rtx tmp1 = gen_reg_rtx (DImode);
- rtx tmp2 = gen_reg_rtx (DImode);
- rtx tmp3 = gen_reg_rtx (DImode);
- rtx tmp4 = gen_reg_rtx (DImode);
- rtx tmp5 = gen_reg_rtx (DImode);
- rtx tmp6 = gen_reg_rtx (DImode);
- rtx tmp7 = gen_reg_rtx (DImode);
- rtx tmp8 = gen_reg_rtx (DImode);
- rtx tmp9 = gen_reg_rtx (DImode);
- rtx tmp10 = gen_reg_rtx (DImode);
- rtx tmp11 = gen_reg_rtx (DImode);
- rtx tmp12 = gen_reg_rtx (DImode);
- rtx tmp13 = gen_reg_rtx (DImode);
- rtx result_lo = gen_reg_rtx (DImode);
-
- if (sign)
- {
- emit_insn (gen_insn_mul_hs_lu (tmp0, op1, op2));
- emit_insn (gen_insn_mul_hs_lu (tmp1, op2, op1));
- emit_insn (gen_insn_mul_lu_lu (tmp2, op1, op2));
- emit_insn (gen_insn_mul_hs_hs (tmp3, op1, op2));
- }
- else
- {
- emit_insn (gen_insn_mul_hu_lu (tmp0, op1, op2));
- emit_insn (gen_insn_mul_hu_lu (tmp1, op2, op1));
- emit_insn (gen_insn_mul_lu_lu (tmp2, op1, op2));
- emit_insn (gen_insn_mul_hu_hu (tmp3, op1, op2));
- }
-
- emit_move_insn (tmp4, (gen_rtx_ASHIFT (DImode, tmp0, GEN_INT (32))));
-
- emit_move_insn (tmp5, (gen_rtx_ASHIFT (DImode, tmp1, GEN_INT (32))));
-
- emit_move_insn (tmp6, (gen_rtx_PLUS (DImode, tmp4, tmp5)));
- emit_move_insn (result_lo, (gen_rtx_PLUS (DImode, tmp2, tmp6)));
-
- emit_move_insn (tmp7, gen_rtx_LTU (DImode, tmp6, tmp4));
- emit_move_insn (tmp8, gen_rtx_LTU (DImode, result_lo, tmp2));
-
- if (sign)
- {
- emit_move_insn (tmp9, (gen_rtx_ASHIFTRT (DImode, tmp0, GEN_INT (32))));
- emit_move_insn (tmp10, (gen_rtx_ASHIFTRT (DImode, tmp1, GEN_INT (32))));
- }
- else
- {
- emit_move_insn (tmp9, (gen_rtx_LSHIFTRT (DImode, tmp0, GEN_INT (32))));
- emit_move_insn (tmp10, (gen_rtx_LSHIFTRT (DImode, tmp1, GEN_INT (32))));
- }
-
- emit_move_insn (tmp11, (gen_rtx_PLUS (DImode, tmp3, tmp7)));
- emit_move_insn (tmp12, (gen_rtx_PLUS (DImode, tmp8, tmp9)));
- emit_move_insn (tmp13, (gen_rtx_PLUS (DImode, tmp11, tmp12)));
- emit_move_insn (result, (gen_rtx_PLUS (DImode, tmp13, tmp10)));
-}
-
-
-/* Implement smuldi3_highpart. */
-void
-tilegx_expand_smuldi3_highpart (rtx op0, rtx op1, rtx op2)
-{
- tilegx_expand_high_multiply (op0, op1, op2, true);
-}
-
-
-/* Implement umuldi3_highpart. */
-void
-tilegx_expand_umuldi3_highpart (rtx op0, rtx op1, rtx op2)
-{
- tilegx_expand_high_multiply (op0, op1, op2, false);
-}
-
-
-
-/* Compare and branches */
-
-/* Produce the rtx yielding a bool for a floating point
- comparison. */
-static bool
-tilegx_emit_fp_setcc (rtx res, enum rtx_code code, machine_mode mode,
- rtx op0, rtx op1)
-{
- /* TODO: Certain compares again constants can be done using entirely
- integer operations. But you have to get the special cases right
- e.g. NaN, +0 == -0, etc. */
-
- rtx flags;
- int flag_index;
- rtx a = force_reg (DImode, gen_lowpart (DImode, op0));
- rtx b = force_reg (DImode, gen_lowpart (DImode, op1));
-
- flags = gen_reg_rtx (DImode);
-
- if (mode == SFmode)
- {
- emit_insn (gen_insn_fsingle_add1 (flags, a, b));
- }
- else
- {
- gcc_assert (mode == DFmode);
- emit_insn (gen_insn_fdouble_add_flags (flags, a, b));
- }
-
- switch (code)
- {
- case EQ: flag_index = 30; break;
- case NE: flag_index = 31; break;
- case LE: flag_index = 27; break;
- case LT: flag_index = 26; break;
- case GE: flag_index = 29; break;
- case GT: flag_index = 28; break;
- default: gcc_unreachable ();
- }
-
- gcc_assert (GET_MODE (res) == DImode);
- emit_move_insn (res, gen_rtx_ZERO_EXTRACT (DImode, flags, GEN_INT (1),
- GEN_INT (flag_index)));
- return true;
-}
-
-
-/* Certain simplifications can be done to make invalid setcc
- operations valid. Return the final comparison, or NULL if we can't
- work. */
-static bool
-tilegx_emit_setcc_internal (rtx res, enum rtx_code code, rtx op0, rtx op1,
- machine_mode cmp_mode)
-{
- rtx tmp;
- bool swap = false;
-
- if (cmp_mode == SFmode || cmp_mode == DFmode)
- return tilegx_emit_fp_setcc (res, code, cmp_mode, op0, op1);
-
- /* The general case: fold the comparison code to the types of
- compares that we have, choosing the branch as necessary. */
-
- switch (code)
- {
- case EQ:
- case NE:
- case LE:
- case LT:
- case LEU:
- case LTU:
- /* We have these compares. */
- break;
-
- case GE:
- case GT:
- case GEU:
- case GTU:
- /* We do not have these compares, so we reverse the
- operands. */
- swap = true;
- break;
-
- default:
- /* We should not have called this with any other code. */
- gcc_unreachable ();
- }
-
- if (swap)
- {
- code = swap_condition (code);
- tmp = op0, op0 = op1, op1 = tmp;
- }
-
- if (!reg_or_0_operand (op0, cmp_mode))
- op0 = force_reg (cmp_mode, op0);
-
- if (!CONST_INT_P (op1) && !register_operand (op1, cmp_mode))
- op1 = force_reg (cmp_mode, op1);
-
- /* Return the setcc comparison. */
- emit_insn (gen_rtx_SET (res, gen_rtx_fmt_ee (code, DImode, op0, op1)));
-
- return true;
-}
-
-
-/* Implement cstore patterns. */
-bool
-tilegx_emit_setcc (rtx operands[], machine_mode cmp_mode)
-{
- return
- tilegx_emit_setcc_internal (operands[0], GET_CODE (operands[1]),
- operands[2], operands[3], cmp_mode);
-}
-
-
-/* Return whether CODE is a signed comparison. */
-static bool
-signed_compare_p (enum rtx_code code)
-{
- return (code == EQ || code == NE || code == LT || code == LE
- || code == GT || code == GE);
-}
-
-
-/* Generate the comparison for a DImode conditional branch. */
-static rtx
-tilegx_emit_cc_test (enum rtx_code code, rtx op0, rtx op1,
- machine_mode cmp_mode, bool eq_ne_only)
-{
- enum rtx_code branch_code;
- rtx temp;
-
- if (cmp_mode == SFmode || cmp_mode == DFmode)
- {
- /* Compute a boolean saying whether the comparison is true. */
- temp = gen_reg_rtx (DImode);
- tilegx_emit_setcc_internal (temp, code, op0, op1, cmp_mode);
-
- /* Test that flag. */
- return gen_rtx_fmt_ee (NE, VOIDmode, temp, const0_rtx);
- }
-
- /* Check for a compare against zero using a comparison we can do
- directly. */
- if (op1 == const0_rtx
- && (code == EQ || code == NE
- || (!eq_ne_only && signed_compare_p (code))))
- {
- op0 = force_reg (cmp_mode, op0);
- return gen_rtx_fmt_ee (code, VOIDmode, op0, const0_rtx);
- }
-
- /* The general case: fold the comparison code to the types of
- compares that we have, choosing the branch as necessary. */
- switch (code)
- {
- case EQ:
- case LE:
- case LT:
- case LEU:
- case LTU:
- /* We have these compares. */
- branch_code = NE;
- break;
-
- case NE:
- case GE:
- case GT:
- case GEU:
- case GTU:
- /* These must be reversed (except NE, but let's
- canonicalize). */
- code = reverse_condition (code);
- branch_code = EQ;
- break;
-
- default:
- gcc_unreachable ();
- }
-
- if (CONST_INT_P (op1) && (!satisfies_constraint_I (op1) || code == LEU))
- {
- HOST_WIDE_INT n = INTVAL (op1);
-
- switch (code)
- {
- case EQ:
- /* Subtract off the value we want to compare against and see
- if we get zero. This is cheaper than creating a constant
- in a register. Except that subtracting -128 is more
- expensive than seqi to -128, so we leave that alone. */
- /* ??? Don't do this when comparing against symbols,
- otherwise we'll reduce (&x == 0x1234) to (&x-0x1234 ==
- 0), which will be declared false out of hand (at least
- for non-weak). */
- if (n != -128
- && add_operand (GEN_INT (-n), DImode)
- && !(symbolic_operand (op0, VOIDmode)
- || (REG_P (op0) && REG_POINTER (op0))))
- {
- /* TODO: Use a SIMD add immediate to hit zero for tiled
- constants in a single instruction. */
- if (GET_MODE (op0) != DImode)
- {
- /* Convert to DImode so we can use addli. Note that
- this will not actually generate any code because
- sign extension from SI -> DI is a no-op. I don't
- know if it's safe just to make a paradoxical
- subreg here though. */
- rtx temp2 = gen_reg_rtx (DImode);
- emit_insn (gen_extendsidi2 (temp2, op0));
- op0 = temp2;
- }
- else
- {
- op0 = force_reg (DImode, op0);
- }
- temp = gen_reg_rtx (DImode);
- emit_move_insn (temp, gen_rtx_PLUS (DImode, op0, GEN_INT (-n)));
- return gen_rtx_fmt_ee (reverse_condition (branch_code),
- VOIDmode, temp, const0_rtx);
- }
- break;
-
- case LEU:
- if (n == -1)
- break;
- /* FALLTHRU */
-
- case LTU:
- /* Change ((unsigned)x < 0x1000) into !((int)x >> 12), etc.
- We use arithmetic shift right because it's a 3-wide op,
- while logical shift right is not. */
- {
- int first = exact_log2 (code == LTU ? n : n + 1);
- if (first != -1)
- {
- op0 = force_reg (cmp_mode, op0);
- temp = gen_reg_rtx (cmp_mode);
- emit_move_insn (temp,
- gen_rtx_ASHIFTRT (cmp_mode, op0,
- GEN_INT (first)));
- return gen_rtx_fmt_ee (reverse_condition (branch_code),
- VOIDmode, temp, const0_rtx);
- }
- }
- break;
-
- default:
- break;
- }
- }
-
- /* Compute a flag saying whether we should branch. */
- temp = gen_reg_rtx (DImode);
- tilegx_emit_setcc_internal (temp, code, op0, op1, cmp_mode);
-
- /* Return the branch comparison. */
- return gen_rtx_fmt_ee (branch_code, VOIDmode, temp, const0_rtx);
-}
-
-
-/* Generate the comparison for a conditional branch. */
-void
-tilegx_emit_conditional_branch (rtx operands[], machine_mode cmp_mode)
-{
- rtx cmp_rtx =
- tilegx_emit_cc_test (GET_CODE (operands[0]), operands[1], operands[2],
- cmp_mode, false);
- rtx branch_rtx = gen_rtx_SET (pc_rtx,
- gen_rtx_IF_THEN_ELSE (VOIDmode, cmp_rtx,
- gen_rtx_LABEL_REF
- (VOIDmode,
- operands[3]),
- pc_rtx));
- emit_jump_insn (branch_rtx);
-}
-
-
-/* Implement the mov<mode>cc pattern. */
-rtx
-tilegx_emit_conditional_move (rtx cmp)
-{
- return
- tilegx_emit_cc_test (GET_CODE (cmp), XEXP (cmp, 0), XEXP (cmp, 1),
- GET_MODE (XEXP (cmp, 0)), true);
-}
-
-
-/* Return true if INSN is annotated with a REG_BR_PROB note that
- indicates it's a branch that's predicted taken. */
-static bool
-cbranch_predicted_p (rtx_insn *insn)
-{
- rtx x = find_reg_note (insn, REG_BR_PROB, 0);
-
- if (x)
- {
- return profile_probability::from_reg_br_prob_note (XINT (x, 0))
- >= profile_probability::even ();
- }
-
- return false;
-}
-
-
-/* Output assembly code for a specific branch instruction, appending
- the branch prediction flag to the opcode if appropriate. */
-static const char *
-tilegx_output_simple_cbranch_with_opcode (rtx_insn *insn, const char *opcode,
- int regop, bool reverse_predicted)
-{
- static char buf[64];
- sprintf (buf, "%s%s\t%%r%d, %%l0", opcode,
- (cbranch_predicted_p (insn) ^ reverse_predicted) ? "t" : "",
- regop);
- return buf;
-}
-
-
-/* Output assembly code for a specific branch instruction, appending
- the branch prediction flag to the opcode if appropriate. */
-const char *
-tilegx_output_cbranch_with_opcode (rtx_insn *insn, rtx *operands,
- const char *opcode,
- const char *rev_opcode, int regop)
-{
- const char *branch_if_false;
- rtx taken, not_taken;
- bool is_simple_branch;
-
- gcc_assert (LABEL_P (operands[0]));
-
- is_simple_branch = true;
- if (INSN_ADDRESSES_SET_P ())
- {
- int from_addr = INSN_ADDRESSES (INSN_UID (insn));
- int to_addr = INSN_ADDRESSES (INSN_UID (operands[0]));
- int delta = to_addr - from_addr;
- is_simple_branch = IN_RANGE (delta, -524288, 524280);
- }
-
- if (is_simple_branch)
- {
- /* Just a simple conditional branch. */
- return
- tilegx_output_simple_cbranch_with_opcode (insn, opcode, regop, false);
- }
-
- /* Generate a reversed branch around a direct jump. This fallback
- does not use branch-likely instructions. */
- not_taken = gen_label_rtx ();
- taken = operands[0];
-
- /* Generate the reversed branch to NOT_TAKEN. */
- operands[0] = not_taken;
- branch_if_false =
- tilegx_output_simple_cbranch_with_opcode (insn, rev_opcode, regop, true);
- output_asm_insn (branch_if_false, operands);
-
- output_asm_insn ("j\t%l0", &taken);
-
- /* Output NOT_TAKEN. */
- targetm.asm_out.internal_label (asm_out_file, "L",
- CODE_LABEL_NUMBER (not_taken));
- return "";
-}
-
-
-/* Output assembly code for a conditional branch instruction. */
-const char *
-tilegx_output_cbranch (rtx_insn *insn, rtx *operands, bool reversed)
-{
- enum rtx_code code = GET_CODE (operands[1]);
- const char *opcode;
- const char *rev_opcode;
-
- if (reversed)
- code = reverse_condition (code);
-
- switch (code)
- {
- case NE:
- opcode = "bnez";
- rev_opcode = "beqz";
- break;
- case EQ:
- opcode = "beqz";
- rev_opcode = "bnez";
- break;
- case GE:
- opcode = "bgez";
- rev_opcode = "bltz";
- break;
- case GT:
- opcode = "bgtz";
- rev_opcode = "blez";
- break;
- case LE:
- opcode = "blez";
- rev_opcode = "bgtz";
- break;
- case LT:
- opcode = "bltz";
- rev_opcode = "bgez";
- break;
- default:
- gcc_unreachable ();
- }
-
- return tilegx_output_cbranch_with_opcode (insn, operands, opcode,
- rev_opcode, 2);
-}
-
-
-/* Implement the tablejump pattern. */
-void
-tilegx_expand_tablejump (rtx op0, rtx op1)
-{
- if (flag_pic)
- {
- rtx temp = gen_reg_rtx (Pmode);
- rtx temp2 = gen_reg_rtx (Pmode);
-
- tilegx_compute_pcrel_address (temp, gen_rtx_LABEL_REF (Pmode, op1));
- emit_move_insn (temp2,
- gen_rtx_PLUS (Pmode,
- convert_to_mode (Pmode, op0, false),
- temp));
- op0 = temp2;
- }
-
- emit_jump_insn (gen_tablejump_aux (op0, op1));
-}
-
-
-/* Emit barrier before an atomic, as needed for the memory MODEL. */
-void
-tilegx_pre_atomic_barrier (enum memmodel model)
-{
- if (need_atomic_barrier_p (model, true))
- emit_insn (gen_memory_barrier ());
-}
-
-
-/* Emit barrier after an atomic, as needed for the memory MODEL. */
-void
-tilegx_post_atomic_barrier (enum memmodel model)
-{
- if (need_atomic_barrier_p (model, false))
- emit_insn (gen_memory_barrier ());
-}
-
-
-
-/* Expand a builtin vector binary op, by calling gen function GEN with
- operands in the proper modes. DEST is converted to DEST_MODE, and
- src0 and src1 (if DO_SRC1 is true) is converted to SRC_MODE. */
-void
-tilegx_expand_builtin_vector_binop (rtx (*gen) (rtx, rtx, rtx),
- machine_mode dest_mode,
- rtx dest,
- machine_mode src_mode,
- rtx src0, rtx src1, bool do_src1)
-{
- dest = gen_lowpart (dest_mode, dest);
-
- if (src0 == const0_rtx)
- src0 = CONST0_RTX (src_mode);
- else
- src0 = gen_lowpart (src_mode, src0);
-
- if (do_src1)
- {
- if (src1 == const0_rtx)
- src1 = CONST0_RTX (src_mode);
- else
- src1 = gen_lowpart (src_mode, src1);
- }
-
- emit_insn ((*gen) (dest, src0, src1));
-}
-
-
-
-/* Intrinsics */
-
-
-struct tile_builtin_info
-{
- enum insn_code icode;
- tree fndecl;
-};
-
-static struct tile_builtin_info tilegx_builtin_info[TILEGX_BUILTIN_max] = {
- { CODE_FOR_adddi3, NULL }, /* add */
- { CODE_FOR_addsi3, NULL }, /* addx */
- { CODE_FOR_ssaddsi3, NULL }, /* addxsc */
- { CODE_FOR_anddi3, NULL }, /* and */
- { CODE_FOR_insn_bfexts, NULL }, /* bfexts */
- { CODE_FOR_insn_bfextu, NULL }, /* bfextu */
- { CODE_FOR_insn_bfins, NULL }, /* bfins */
- { CODE_FOR_clzdi2, NULL }, /* clz */
- { CODE_FOR_insn_cmoveqz, NULL }, /* cmoveqz */
- { CODE_FOR_insn_cmovnez, NULL }, /* cmovnez */
- { CODE_FOR_insn_cmpeq_didi, NULL }, /* cmpeq */
- { CODE_FOR_insn_cmpexch, NULL }, /* cmpexch */
- { CODE_FOR_insn_cmpexch4, NULL }, /* cmpexch4 */
- { CODE_FOR_insn_cmples_didi, NULL }, /* cmples */
- { CODE_FOR_insn_cmpleu_didi, NULL }, /* cmpleu */
- { CODE_FOR_insn_cmplts_didi, NULL }, /* cmplts */
- { CODE_FOR_insn_cmpltu_didi, NULL }, /* cmpltu */
- { CODE_FOR_insn_cmpne_didi, NULL }, /* cmpne */
- { CODE_FOR_insn_cmul, NULL }, /* cmul */
- { CODE_FOR_insn_cmula, NULL }, /* cmula */
- { CODE_FOR_insn_cmulaf, NULL }, /* cmulaf */
- { CODE_FOR_insn_cmulf, NULL }, /* cmulf */
- { CODE_FOR_insn_cmulfr, NULL }, /* cmulfr */
- { CODE_FOR_insn_cmulh, NULL }, /* cmulh */
- { CODE_FOR_insn_cmulhr, NULL }, /* cmulhr */
- { CODE_FOR_insn_crc32_32, NULL }, /* crc32_32 */
- { CODE_FOR_insn_crc32_8, NULL }, /* crc32_8 */
- { CODE_FOR_ctzdi2, NULL }, /* ctz */
- { CODE_FOR_insn_dblalign, NULL }, /* dblalign */
- { CODE_FOR_insn_dblalign2, NULL }, /* dblalign2 */
- { CODE_FOR_insn_dblalign4, NULL }, /* dblalign4 */
- { CODE_FOR_insn_dblalign6, NULL }, /* dblalign6 */
- { CODE_FOR_insn_drain, NULL }, /* drain */
- { CODE_FOR_insn_dtlbpr, NULL }, /* dtlbpr */
- { CODE_FOR_insn_exch, NULL }, /* exch */
- { CODE_FOR_insn_exch4, NULL }, /* exch4 */
- { CODE_FOR_insn_fdouble_add_flags, NULL }, /* fdouble_add_flags */
- { CODE_FOR_insn_fdouble_addsub, NULL }, /* fdouble_addsub */
- { CODE_FOR_insn_fdouble_mul_flags, NULL }, /* fdouble_mul_flags */
- { CODE_FOR_insn_fdouble_pack1, NULL }, /* fdouble_pack1 */
- { CODE_FOR_insn_fdouble_pack2, NULL }, /* fdouble_pack2 */
- { CODE_FOR_insn_fdouble_sub_flags, NULL }, /* fdouble_sub_flags */
- { CODE_FOR_insn_fdouble_unpack_max, NULL }, /* fdouble_unpack_max */
- { CODE_FOR_insn_fdouble_unpack_min, NULL }, /* fdouble_unpack_min */
- { CODE_FOR_insn_fetchadd, NULL }, /* fetchadd */
- { CODE_FOR_insn_fetchadd4, NULL }, /* fetchadd4 */
- { CODE_FOR_insn_fetchaddgez, NULL }, /* fetchaddgez */
- { CODE_FOR_insn_fetchaddgez4, NULL }, /* fetchaddgez4 */
- { CODE_FOR_insn_fetchand, NULL }, /* fetchand */
- { CODE_FOR_insn_fetchand4, NULL }, /* fetchand4 */
- { CODE_FOR_insn_fetchor, NULL }, /* fetchor */
- { CODE_FOR_insn_fetchor4, NULL }, /* fetchor4 */
- { CODE_FOR_insn_finv, NULL }, /* finv */
- { CODE_FOR_insn_flush, NULL }, /* flush */
- { CODE_FOR_insn_flushwb, NULL }, /* flushwb */
- { CODE_FOR_insn_fnop, NULL }, /* fnop */
- { CODE_FOR_insn_fsingle_add1, NULL }, /* fsingle_add1 */
- { CODE_FOR_insn_fsingle_addsub2, NULL }, /* fsingle_addsub2 */
- { CODE_FOR_insn_fsingle_mul1, NULL }, /* fsingle_mul1 */
- { CODE_FOR_insn_fsingle_mul2, NULL }, /* fsingle_mul2 */
- { CODE_FOR_insn_fsingle_pack1, NULL }, /* fsingle_pack1 */
- { CODE_FOR_insn_fsingle_pack2, NULL }, /* fsingle_pack2 */
- { CODE_FOR_insn_fsingle_sub1, NULL }, /* fsingle_sub1 */
- { CODE_FOR_insn_icoh, NULL }, /* icoh */
- { CODE_FOR_insn_ill, NULL }, /* ill */
- { CODE_FOR_insn_info, NULL }, /* info */
- { CODE_FOR_insn_infol, NULL }, /* infol */
- { CODE_FOR_insn_inv, NULL }, /* inv */
- { CODE_FOR_insn_ld, NULL }, /* ld */
- { CODE_FOR_insn_ld1s, NULL }, /* ld1s */
- { CODE_FOR_insn_ld1u, NULL }, /* ld1u */
- { CODE_FOR_insn_ld2s, NULL }, /* ld2s */
- { CODE_FOR_insn_ld2u, NULL }, /* ld2u */
- { CODE_FOR_insn_ld4s, NULL }, /* ld4s */
- { CODE_FOR_insn_ld4u, NULL }, /* ld4u */
- { CODE_FOR_insn_ldna, NULL }, /* ldna */
- { CODE_FOR_insn_ldnt, NULL }, /* ldnt */
- { CODE_FOR_insn_ldnt1s, NULL }, /* ldnt1s */
- { CODE_FOR_insn_ldnt1u, NULL }, /* ldnt1u */
- { CODE_FOR_insn_ldnt2s, NULL }, /* ldnt2s */
- { CODE_FOR_insn_ldnt2u, NULL }, /* ldnt2u */
- { CODE_FOR_insn_ldnt4s, NULL }, /* ldnt4s */
- { CODE_FOR_insn_ldnt4u, NULL }, /* ldnt4u */
- { CODE_FOR_insn_ld_L2, NULL }, /* ld_L2 */
- { CODE_FOR_insn_ld1s_L2, NULL }, /* ld1s_L2 */
- { CODE_FOR_insn_ld1u_L2, NULL }, /* ld1u_L2 */
- { CODE_FOR_insn_ld2s_L2, NULL }, /* ld2s_L2 */
- { CODE_FOR_insn_ld2u_L2, NULL }, /* ld2u_L2 */
- { CODE_FOR_insn_ld4s_L2, NULL }, /* ld4s_L2 */
- { CODE_FOR_insn_ld4u_L2, NULL }, /* ld4u_L2 */
- { CODE_FOR_insn_ldna_L2, NULL }, /* ldna_L2 */
- { CODE_FOR_insn_ldnt_L2, NULL }, /* ldnt_L2 */
- { CODE_FOR_insn_ldnt1s_L2, NULL }, /* ldnt1s_L2 */
- { CODE_FOR_insn_ldnt1u_L2, NULL }, /* ldnt1u_L2 */
- { CODE_FOR_insn_ldnt2s_L2, NULL }, /* ldnt2s_L2 */
- { CODE_FOR_insn_ldnt2u_L2, NULL }, /* ldnt2u_L2 */
- { CODE_FOR_insn_ldnt4s_L2, NULL }, /* ldnt4s_L2 */
- { CODE_FOR_insn_ldnt4u_L2, NULL }, /* ldnt4u_L2 */
- { CODE_FOR_insn_ld_miss, NULL }, /* ld_miss */
- { CODE_FOR_insn_ld1s_miss, NULL }, /* ld1s_miss */
- { CODE_FOR_insn_ld1u_miss, NULL }, /* ld1u_miss */
- { CODE_FOR_insn_ld2s_miss, NULL }, /* ld2s_miss */
- { CODE_FOR_insn_ld2u_miss, NULL }, /* ld2u_miss */
- { CODE_FOR_insn_ld4s_miss, NULL }, /* ld4s_miss */
- { CODE_FOR_insn_ld4u_miss, NULL }, /* ld4u_miss */
- { CODE_FOR_insn_ldna_miss, NULL }, /* ldna_miss */
- { CODE_FOR_insn_ldnt_miss, NULL }, /* ldnt_miss */
- { CODE_FOR_insn_ldnt1s_miss, NULL }, /* ldnt1s_miss */
- { CODE_FOR_insn_ldnt1u_miss, NULL }, /* ldnt1u_miss */
- { CODE_FOR_insn_ldnt2s_miss, NULL }, /* ldnt2s_miss */
- { CODE_FOR_insn_ldnt2u_miss, NULL }, /* ldnt2u_miss */
- { CODE_FOR_insn_ldnt4s_miss, NULL }, /* ldnt4s_miss */
- { CODE_FOR_insn_ldnt4u_miss, NULL }, /* ldnt4u_miss */
- { CODE_FOR_insn_lnk, NULL }, /* lnk */
- { CODE_FOR_memory_barrier, NULL }, /* mf */
- { CODE_FOR_insn_mfspr, NULL }, /* mfspr */
- { CODE_FOR_insn_mm, NULL }, /* mm */
- { CODE_FOR_insn_mnz, NULL }, /* mnz */
- { CODE_FOR_movdi, NULL }, /* move */
- { CODE_FOR_insn_mtspr, NULL }, /* mtspr */
- { CODE_FOR_insn_mul_hs_hs, NULL }, /* mul_hs_hs */
- { CODE_FOR_insn_mul_hs_hu, NULL }, /* mul_hs_hu */
- { CODE_FOR_insn_mul_hs_ls, NULL }, /* mul_hs_ls */
- { CODE_FOR_insn_mul_hs_lu, NULL }, /* mul_hs_lu */
- { CODE_FOR_insn_mul_hu_hu, NULL }, /* mul_hu_hu */
- { CODE_FOR_insn_mul_hu_ls, NULL }, /* mul_hu_ls */
- { CODE_FOR_insn_mul_hu_lu, NULL }, /* mul_hu_lu */
- { CODE_FOR_insn_mul_ls_ls, NULL }, /* mul_ls_ls */
- { CODE_FOR_insn_mul_ls_lu, NULL }, /* mul_ls_lu */
- { CODE_FOR_insn_mul_lu_lu, NULL }, /* mul_lu_lu */
- { CODE_FOR_insn_mula_hs_hs, NULL }, /* mula_hs_hs */
- { CODE_FOR_insn_mula_hs_hu, NULL }, /* mula_hs_hu */
- { CODE_FOR_insn_mula_hs_ls, NULL }, /* mula_hs_ls */
- { CODE_FOR_insn_mula_hs_lu, NULL }, /* mula_hs_lu */
- { CODE_FOR_insn_mula_hu_hu, NULL }, /* mula_hu_hu */
- { CODE_FOR_insn_mula_hu_ls, NULL }, /* mula_hu_ls */
- { CODE_FOR_insn_mula_hu_lu, NULL }, /* mula_hu_lu */
- { CODE_FOR_insn_mula_ls_ls, NULL }, /* mula_ls_ls */
- { CODE_FOR_insn_mula_ls_lu, NULL }, /* mula_ls_lu */
- { CODE_FOR_insn_mula_lu_lu, NULL }, /* mula_lu_lu */
- { CODE_FOR_insn_mulax, NULL }, /* mulax */
- { CODE_FOR_mulsi3, NULL }, /* mulx */
- { CODE_FOR_insn_mz, NULL }, /* mz */
- { CODE_FOR_insn_nap, NULL }, /* nap */
- { CODE_FOR_nop, NULL }, /* nop */
- { CODE_FOR_insn_nor_di, NULL }, /* nor */
- { CODE_FOR_iordi3, NULL }, /* or */
- { CODE_FOR_popcountdi2, NULL }, /* pcnt */
- { CODE_FOR_insn_prefetch_l1, NULL }, /* prefetch_l1 */
- { CODE_FOR_insn_prefetch_l1_fault, NULL }, /* prefetch_l1_fault */
- { CODE_FOR_insn_prefetch_l2, NULL }, /* prefetch_l2 */
- { CODE_FOR_insn_prefetch_l2_fault, NULL }, /* prefetch_l2_fault */
- { CODE_FOR_insn_prefetch_l3, NULL }, /* prefetch_l3 */
- { CODE_FOR_insn_prefetch_l3_fault, NULL }, /* prefetch_l3_fault */
- { CODE_FOR_insn_revbits, NULL }, /* revbits */
- { CODE_FOR_bswapdi2, NULL }, /* revbytes */
- { CODE_FOR_rotldi3, NULL }, /* rotl */
- { CODE_FOR_ashldi3, NULL }, /* shl */
- { CODE_FOR_insn_shl16insli, NULL }, /* shl16insli */
- { CODE_FOR_insn_shl1add, NULL }, /* shl1add */
- { CODE_FOR_insn_shl1addx, NULL }, /* shl1addx */
- { CODE_FOR_insn_shl2add, NULL }, /* shl2add */
- { CODE_FOR_insn_shl2addx, NULL }, /* shl2addx */
- { CODE_FOR_insn_shl3add, NULL }, /* shl3add */
- { CODE_FOR_insn_shl3addx, NULL }, /* shl3addx */
- { CODE_FOR_ashlsi3, NULL }, /* shlx */
- { CODE_FOR_ashrdi3, NULL }, /* shrs */
- { CODE_FOR_lshrdi3, NULL }, /* shru */
- { CODE_FOR_lshrsi3, NULL }, /* shrux */
- { CODE_FOR_insn_shufflebytes, NULL }, /* shufflebytes */
- { CODE_FOR_insn_shufflebytes1, NULL }, /* shufflebytes1 */
- { CODE_FOR_insn_st, NULL }, /* st */
- { CODE_FOR_insn_st1, NULL }, /* st1 */
- { CODE_FOR_insn_st2, NULL }, /* st2 */
- { CODE_FOR_insn_st4, NULL }, /* st4 */
- { CODE_FOR_insn_stnt, NULL }, /* stnt */
- { CODE_FOR_insn_stnt1, NULL }, /* stnt1 */
- { CODE_FOR_insn_stnt2, NULL }, /* stnt2 */
- { CODE_FOR_insn_stnt4, NULL }, /* stnt4 */
- { CODE_FOR_subdi3, NULL }, /* sub */
- { CODE_FOR_subsi3, NULL }, /* subx */
- { CODE_FOR_sssubsi3, NULL }, /* subxsc */
- { CODE_FOR_insn_tblidxb0, NULL }, /* tblidxb0 */
- { CODE_FOR_insn_tblidxb1, NULL }, /* tblidxb1 */
- { CODE_FOR_insn_tblidxb2, NULL }, /* tblidxb2 */
- { CODE_FOR_insn_tblidxb3, NULL }, /* tblidxb3 */
- { CODE_FOR_insn_v1add, NULL }, /* v1add */
- { CODE_FOR_insn_v1addi, NULL }, /* v1addi */
- { CODE_FOR_insn_v1adduc, NULL }, /* v1adduc */
- { CODE_FOR_insn_v1adiffu, NULL }, /* v1adiffu */
- { CODE_FOR_insn_v1avgu, NULL }, /* v1avgu */
- { CODE_FOR_insn_v1cmpeq, NULL }, /* v1cmpeq */
- { CODE_FOR_insn_v1cmpeqi, NULL }, /* v1cmpeqi */
- { CODE_FOR_insn_v1cmples, NULL }, /* v1cmples */
- { CODE_FOR_insn_v1cmpleu, NULL }, /* v1cmpleu */
- { CODE_FOR_insn_v1cmplts, NULL }, /* v1cmplts */
- { CODE_FOR_insn_v1cmpltsi, NULL }, /* v1cmpltsi */
- { CODE_FOR_insn_v1cmpltu, NULL }, /* v1cmpltu */
- { CODE_FOR_insn_v1cmpltui, NULL }, /* v1cmpltui */
- { CODE_FOR_insn_v1cmpne, NULL }, /* v1cmpne */
- { CODE_FOR_insn_v1ddotpu, NULL }, /* v1ddotpu */
- { CODE_FOR_insn_v1ddotpua, NULL }, /* v1ddotpua */
- { CODE_FOR_insn_v1ddotpus, NULL }, /* v1ddotpus */
- { CODE_FOR_insn_v1ddotpusa, NULL }, /* v1ddotpusa */
- { CODE_FOR_insn_v1dotp, NULL }, /* v1dotp */
- { CODE_FOR_insn_v1dotpa, NULL }, /* v1dotpa */
- { CODE_FOR_insn_v1dotpu, NULL }, /* v1dotpu */
- { CODE_FOR_insn_v1dotpua, NULL }, /* v1dotpua */
- { CODE_FOR_insn_v1dotpus, NULL }, /* v1dotpus */
- { CODE_FOR_insn_v1dotpusa, NULL }, /* v1dotpusa */
- { CODE_FOR_insn_v1int_h, NULL }, /* v1int_h */
- { CODE_FOR_insn_v1int_l, NULL }, /* v1int_l */
- { CODE_FOR_insn_v1maxu, NULL }, /* v1maxu */
- { CODE_FOR_insn_v1maxui, NULL }, /* v1maxui */
- { CODE_FOR_insn_v1minu, NULL }, /* v1minu */
- { CODE_FOR_insn_v1minui, NULL }, /* v1minui */
- { CODE_FOR_insn_v1mnz, NULL }, /* v1mnz */
- { CODE_FOR_insn_v1multu, NULL }, /* v1multu */
- { CODE_FOR_insn_v1mulu, NULL }, /* v1mulu */
- { CODE_FOR_insn_v1mulus, NULL }, /* v1mulus */
- { CODE_FOR_insn_v1mz, NULL }, /* v1mz */
- { CODE_FOR_insn_v1sadau, NULL }, /* v1sadau */
- { CODE_FOR_insn_v1sadu, NULL }, /* v1sadu */
- { CODE_FOR_insn_v1shl, NULL }, /* v1shl */
- { CODE_FOR_insn_v1shl, NULL }, /* v1shli */
- { CODE_FOR_insn_v1shrs, NULL }, /* v1shrs */
- { CODE_FOR_insn_v1shrs, NULL }, /* v1shrsi */
- { CODE_FOR_insn_v1shru, NULL }, /* v1shru */
- { CODE_FOR_insn_v1shru, NULL }, /* v1shrui */
- { CODE_FOR_insn_v1sub, NULL }, /* v1sub */
- { CODE_FOR_insn_v1subuc, NULL }, /* v1subuc */
- { CODE_FOR_insn_v2add, NULL }, /* v2add */
- { CODE_FOR_insn_v2addi, NULL }, /* v2addi */
- { CODE_FOR_insn_v2addsc, NULL }, /* v2addsc */
- { CODE_FOR_insn_v2adiffs, NULL }, /* v2adiffs */
- { CODE_FOR_insn_v2avgs, NULL }, /* v2avgs */
- { CODE_FOR_insn_v2cmpeq, NULL }, /* v2cmpeq */
- { CODE_FOR_insn_v2cmpeqi, NULL }, /* v2cmpeqi */
- { CODE_FOR_insn_v2cmples, NULL }, /* v2cmples */
- { CODE_FOR_insn_v2cmpleu, NULL }, /* v2cmpleu */
- { CODE_FOR_insn_v2cmplts, NULL }, /* v2cmplts */
- { CODE_FOR_insn_v2cmpltsi, NULL }, /* v2cmpltsi */
- { CODE_FOR_insn_v2cmpltu, NULL }, /* v2cmpltu */
- { CODE_FOR_insn_v2cmpltui, NULL }, /* v2cmpltui */
- { CODE_FOR_insn_v2cmpne, NULL }, /* v2cmpne */
- { CODE_FOR_insn_v2dotp, NULL }, /* v2dotp */
- { CODE_FOR_insn_v2dotpa, NULL }, /* v2dotpa */
- { CODE_FOR_insn_v2int_h, NULL }, /* v2int_h */
- { CODE_FOR_insn_v2int_l, NULL }, /* v2int_l */
- { CODE_FOR_insn_v2maxs, NULL }, /* v2maxs */
- { CODE_FOR_insn_v2maxsi, NULL }, /* v2maxsi */
- { CODE_FOR_insn_v2mins, NULL }, /* v2mins */
- { CODE_FOR_insn_v2minsi, NULL }, /* v2minsi */
- { CODE_FOR_insn_v2mnz, NULL }, /* v2mnz */
- { CODE_FOR_insn_v2mulfsc, NULL }, /* v2mulfsc */
- { CODE_FOR_insn_v2muls, NULL }, /* v2muls */
- { CODE_FOR_insn_v2mults, NULL }, /* v2mults */
- { CODE_FOR_insn_v2mz, NULL }, /* v2mz */
- { CODE_FOR_insn_v2packh, NULL }, /* v2packh */
- { CODE_FOR_insn_v2packl, NULL }, /* v2packl */
- { CODE_FOR_insn_v2packuc, NULL }, /* v2packuc */
- { CODE_FOR_insn_v2sadas, NULL }, /* v2sadas */
- { CODE_FOR_insn_v2sadau, NULL }, /* v2sadau */
- { CODE_FOR_insn_v2sads, NULL }, /* v2sads */
- { CODE_FOR_insn_v2sadu, NULL }, /* v2sadu */
- { CODE_FOR_insn_v2shl, NULL }, /* v2shl */
- { CODE_FOR_insn_v2shl, NULL }, /* v2shli */
- { CODE_FOR_insn_v2shlsc, NULL }, /* v2shlsc */
- { CODE_FOR_insn_v2shrs, NULL }, /* v2shrs */
- { CODE_FOR_insn_v2shrs, NULL }, /* v2shrsi */
- { CODE_FOR_insn_v2shru, NULL }, /* v2shru */
- { CODE_FOR_insn_v2shru, NULL }, /* v2shrui */
- { CODE_FOR_insn_v2sub, NULL }, /* v2sub */
- { CODE_FOR_insn_v2subsc, NULL }, /* v2subsc */
- { CODE_FOR_insn_v4add, NULL }, /* v4add */
- { CODE_FOR_insn_v4addsc, NULL }, /* v4addsc */
- { CODE_FOR_insn_v4int_h, NULL }, /* v4int_h */
- { CODE_FOR_insn_v4int_l, NULL }, /* v4int_l */
- { CODE_FOR_insn_v4packsc, NULL }, /* v4packsc */
- { CODE_FOR_insn_v4shl, NULL }, /* v4shl */
- { CODE_FOR_insn_v4shlsc, NULL }, /* v4shlsc */
- { CODE_FOR_insn_v4shrs, NULL }, /* v4shrs */
- { CODE_FOR_insn_v4shru, NULL }, /* v4shru */
- { CODE_FOR_insn_v4sub, NULL }, /* v4sub */
- { CODE_FOR_insn_v4subsc, NULL }, /* v4subsc */
- { CODE_FOR_insn_wh64, NULL }, /* wh64 */
- { CODE_FOR_xordi3, NULL }, /* xor */
- { CODE_FOR_tilegx_network_barrier, NULL }, /* network_barrier */
- { CODE_FOR_tilegx_idn0_receive, NULL }, /* idn0_receive */
- { CODE_FOR_tilegx_idn1_receive, NULL }, /* idn1_receive */
- { CODE_FOR_tilegx_idn_send, NULL }, /* idn_send */
- { CODE_FOR_tilegx_udn0_receive, NULL }, /* udn0_receive */
- { CODE_FOR_tilegx_udn1_receive, NULL }, /* udn1_receive */
- { CODE_FOR_tilegx_udn2_receive, NULL }, /* udn2_receive */
- { CODE_FOR_tilegx_udn3_receive, NULL }, /* udn3_receive */
- { CODE_FOR_tilegx_udn_send, NULL }, /* udn_send */
-};
-
-
-struct tilegx_builtin_def
-{
- const char *name;
- enum tilegx_builtin code;
- bool is_const;
- /* The first character is the return type. Subsequent characters
- are the argument types. See char_to_type. */
- const char *type;
-};
-
-
-static const struct tilegx_builtin_def tilegx_builtins[] = {
- { "__insn_add", TILEGX_INSN_ADD, true, "lll" },
- { "__insn_addi", TILEGX_INSN_ADD, true, "lll" },
- { "__insn_addli", TILEGX_INSN_ADD, true, "lll" },
- { "__insn_addx", TILEGX_INSN_ADDX, true, "iii" },
- { "__insn_addxi", TILEGX_INSN_ADDX, true, "iii" },
- { "__insn_addxli", TILEGX_INSN_ADDX, true, "iii" },
- { "__insn_addxsc", TILEGX_INSN_ADDXSC, true, "iii" },
- { "__insn_and", TILEGX_INSN_AND, true, "lll" },
- { "__insn_andi", TILEGX_INSN_AND, true, "lll" },
- { "__insn_bfexts", TILEGX_INSN_BFEXTS, true, "llll" },
- { "__insn_bfextu", TILEGX_INSN_BFEXTU, true, "llll" },
- { "__insn_bfins", TILEGX_INSN_BFINS, true, "lllll"},
- { "__insn_clz", TILEGX_INSN_CLZ, true, "ll" },
- { "__insn_cmoveqz", TILEGX_INSN_CMOVEQZ, true, "llll" },
- { "__insn_cmovnez", TILEGX_INSN_CMOVNEZ, true, "llll" },
- { "__insn_cmpeq", TILEGX_INSN_CMPEQ, true, "lll" },
- { "__insn_cmpeqi", TILEGX_INSN_CMPEQ, true, "lll" },
- { "__insn_cmpexch", TILEGX_INSN_CMPEXCH, false, "lpl" },
- { "__insn_cmpexch4", TILEGX_INSN_CMPEXCH4, false, "ipi" },
- { "__insn_cmples", TILEGX_INSN_CMPLES, true, "lll" },
- { "__insn_cmpleu", TILEGX_INSN_CMPLEU, true, "lll" },
- { "__insn_cmplts", TILEGX_INSN_CMPLTS, true, "lll" },
- { "__insn_cmpltsi", TILEGX_INSN_CMPLTS, true, "lll" },
- { "__insn_cmpltu", TILEGX_INSN_CMPLTU, true, "lll" },
- { "__insn_cmpltui", TILEGX_INSN_CMPLTU, true, "lll" },
- { "__insn_cmpne", TILEGX_INSN_CMPNE, true, "lll" },
- { "__insn_cmul", TILEGX_INSN_CMUL, true, "lll" },
- { "__insn_cmula", TILEGX_INSN_CMULA, true, "llll" },
- { "__insn_cmulaf", TILEGX_INSN_CMULAF, true, "llll" },
- { "__insn_cmulf", TILEGX_INSN_CMULF, true, "lll" },
- { "__insn_cmulfr", TILEGX_INSN_CMULFR, true, "lll" },
- { "__insn_cmulh", TILEGX_INSN_CMULH, true, "lll" },
- { "__insn_cmulhr", TILEGX_INSN_CMULHR, true, "lll" },
- { "__insn_crc32_32", TILEGX_INSN_CRC32_32, true, "lll" },
- { "__insn_crc32_8", TILEGX_INSN_CRC32_8, true, "lll" },
- { "__insn_ctz", TILEGX_INSN_CTZ, true, "ll" },
- { "__insn_dblalign", TILEGX_INSN_DBLALIGN, true, "lllk" },
- { "__insn_dblalign2", TILEGX_INSN_DBLALIGN2, true, "lll" },
- { "__insn_dblalign4", TILEGX_INSN_DBLALIGN4, true, "lll" },
- { "__insn_dblalign6", TILEGX_INSN_DBLALIGN6, true, "lll" },
- { "__insn_drain", TILEGX_INSN_DRAIN, false, "v" },
- { "__insn_dtlbpr", TILEGX_INSN_DTLBPR, false, "vl" },
- { "__insn_exch", TILEGX_INSN_EXCH, false, "lpl" },
- { "__insn_exch4", TILEGX_INSN_EXCH4, false, "ipi" },
- { "__insn_fdouble_add_flags", TILEGX_INSN_FDOUBLE_ADD_FLAGS, true, "lll" },
- { "__insn_fdouble_addsub", TILEGX_INSN_FDOUBLE_ADDSUB, true, "llll" },
- { "__insn_fdouble_mul_flags", TILEGX_INSN_FDOUBLE_MUL_FLAGS, true, "lll" },
- { "__insn_fdouble_pack1", TILEGX_INSN_FDOUBLE_PACK1, true, "lll" },
- { "__insn_fdouble_pack2", TILEGX_INSN_FDOUBLE_PACK2, true, "llll" },
- { "__insn_fdouble_sub_flags", TILEGX_INSN_FDOUBLE_SUB_FLAGS, true, "lll" },
- { "__insn_fdouble_unpack_max", TILEGX_INSN_FDOUBLE_UNPACK_MAX, true, "lll" },
- { "__insn_fdouble_unpack_min", TILEGX_INSN_FDOUBLE_UNPACK_MIN, true, "lll" },
- { "__insn_fetchadd", TILEGX_INSN_FETCHADD, false, "lpl" },
- { "__insn_fetchadd4", TILEGX_INSN_FETCHADD4, false, "ipi" },
- { "__insn_fetchaddgez", TILEGX_INSN_FETCHADDGEZ, false, "lpl" },
- { "__insn_fetchaddgez4", TILEGX_INSN_FETCHADDGEZ4, false, "ipi" },
- { "__insn_fetchand", TILEGX_INSN_FETCHAND, false, "lpl" },
- { "__insn_fetchand4", TILEGX_INSN_FETCHAND4, false, "ipi" },
- { "__insn_fetchor", TILEGX_INSN_FETCHOR, false, "lpl" },
- { "__insn_fetchor4", TILEGX_INSN_FETCHOR4, false, "ipi" },
- { "__insn_finv", TILEGX_INSN_FINV, false, "vk" },
- { "__insn_flush", TILEGX_INSN_FLUSH, false, "vk" },
- { "__insn_flushwb", TILEGX_INSN_FLUSHWB, false, "v" },
- { "__insn_fnop", TILEGX_INSN_FNOP, false, "v" },
- { "__insn_fsingle_add1", TILEGX_INSN_FSINGLE_ADD1, true, "lll" },
- { "__insn_fsingle_addsub2", TILEGX_INSN_FSINGLE_ADDSUB2, true, "llll" },
- { "__insn_fsingle_mul1", TILEGX_INSN_FSINGLE_MUL1, true, "lll" },
- { "__insn_fsingle_mul2", TILEGX_INSN_FSINGLE_MUL2, true, "lll" },
- { "__insn_fsingle_pack1", TILEGX_INSN_FSINGLE_PACK1, true, "ll" },
- { "__insn_fsingle_pack2", TILEGX_INSN_FSINGLE_PACK2, true, "lll" },
- { "__insn_fsingle_sub1", TILEGX_INSN_FSINGLE_SUB1, true, "lll" },
- { "__insn_icoh", TILEGX_INSN_ICOH, false, "vk" },
- { "__insn_ill", TILEGX_INSN_ILL, false, "v" },
- { "__insn_info", TILEGX_INSN_INFO, false, "vl" },
- { "__insn_infol", TILEGX_INSN_INFOL, false, "vl" },
- { "__insn_inv", TILEGX_INSN_INV, false, "vp" },
- { "__insn_ld", TILEGX_INSN_LD, false, "lk" },
- { "__insn_ld1s", TILEGX_INSN_LD1S, false, "lk" },
- { "__insn_ld1u", TILEGX_INSN_LD1U, false, "lk" },
- { "__insn_ld2s", TILEGX_INSN_LD2S, false, "lk" },
- { "__insn_ld2u", TILEGX_INSN_LD2U, false, "lk" },
- { "__insn_ld4s", TILEGX_INSN_LD4S, false, "lk" },
- { "__insn_ld4u", TILEGX_INSN_LD4U, false, "lk" },
- { "__insn_ldna", TILEGX_INSN_LDNA, false, "lk" },
- { "__insn_ldnt", TILEGX_INSN_LDNT, false, "lk" },
- { "__insn_ldnt1s", TILEGX_INSN_LDNT1S, false, "lk" },
- { "__insn_ldnt1u", TILEGX_INSN_LDNT1U, false, "lk" },
- { "__insn_ldnt2s", TILEGX_INSN_LDNT2S, false, "lk" },
- { "__insn_ldnt2u", TILEGX_INSN_LDNT2U, false, "lk" },
- { "__insn_ldnt4s", TILEGX_INSN_LDNT4S, false, "lk" },
- { "__insn_ldnt4u", TILEGX_INSN_LDNT4U, false, "lk" },
- { "__insn_ld_L2", TILEGX_INSN_LD_L2, false, "lk" },
- { "__insn_ld1s_L2", TILEGX_INSN_LD1S_L2, false, "lk" },
- { "__insn_ld1u_L2", TILEGX_INSN_LD1U_L2, false, "lk" },
- { "__insn_ld2s_L2", TILEGX_INSN_LD2S_L2, false, "lk" },
- { "__insn_ld2u_L2", TILEGX_INSN_LD2U_L2, false, "lk" },
- { "__insn_ld4s_L2", TILEGX_INSN_LD4S_L2, false, "lk" },
- { "__insn_ld4u_L2", TILEGX_INSN_LD4U_L2, false, "lk" },
- { "__insn_ldna_L2", TILEGX_INSN_LDNA_L2, false, "lk" },
- { "__insn_ldnt_L2", TILEGX_INSN_LDNT_L2, false, "lk" },
- { "__insn_ldnt1s_L2", TILEGX_INSN_LDNT1S_L2, false, "lk" },
- { "__insn_ldnt1u_L2", TILEGX_INSN_LDNT1U_L2, false, "lk" },
- { "__insn_ldnt2s_L2", TILEGX_INSN_LDNT2S_L2, false, "lk" },
- { "__insn_ldnt2u_L2", TILEGX_INSN_LDNT2U_L2, false, "lk" },
- { "__insn_ldnt4s_L2", TILEGX_INSN_LDNT4S_L2, false, "lk" },
- { "__insn_ldnt4u_L2", TILEGX_INSN_LDNT4U_L2, false, "lk" },
- { "__insn_ld_miss", TILEGX_INSN_LD_MISS, false, "lk" },
- { "__insn_ld1s_miss", TILEGX_INSN_LD1S_MISS, false, "lk" },
- { "__insn_ld1u_miss", TILEGX_INSN_LD1U_MISS, false, "lk" },
- { "__insn_ld2s_miss", TILEGX_INSN_LD2S_MISS, false, "lk" },
- { "__insn_ld2u_miss", TILEGX_INSN_LD2U_MISS, false, "lk" },
- { "__insn_ld4s_miss", TILEGX_INSN_LD4S_MISS, false, "lk" },
- { "__insn_ld4u_miss", TILEGX_INSN_LD4U_MISS, false, "lk" },
- { "__insn_ldna_miss", TILEGX_INSN_LDNA_MISS, false, "lk" },
- { "__insn_ldnt_miss", TILEGX_INSN_LDNT_MISS, false, "lk" },
- { "__insn_ldnt1s_miss", TILEGX_INSN_LDNT1S_MISS, false, "lk" },
- { "__insn_ldnt1u_miss", TILEGX_INSN_LDNT1U_MISS, false, "lk" },
- { "__insn_ldnt2s_miss", TILEGX_INSN_LDNT2S_MISS, false, "lk" },
- { "__insn_ldnt2u_miss", TILEGX_INSN_LDNT2U_MISS, false, "lk" },
- { "__insn_ldnt4s_miss", TILEGX_INSN_LDNT4S_MISS, false, "lk" },
- { "__insn_ldnt4u_miss", TILEGX_INSN_LDNT4U_MISS, false, "lk" },
- { "__insn_lnk", TILEGX_INSN_LNK, true, "l" },
- { "__insn_mf", TILEGX_INSN_MF, false, "v" },
- { "__insn_mfspr", TILEGX_INSN_MFSPR, false, "ll" },
- { "__insn_mm", TILEGX_INSN_MM, true, "lllll"},
- { "__insn_mnz", TILEGX_INSN_MNZ, true, "lll" },
- { "__insn_move", TILEGX_INSN_MOVE, true, "ll" },
- { "__insn_movei", TILEGX_INSN_MOVE, true, "ll" },
- { "__insn_moveli", TILEGX_INSN_MOVE, true, "ll" },
- { "__insn_mtspr", TILEGX_INSN_MTSPR, false, "vll" },
- { "__insn_mul_hs_hs", TILEGX_INSN_MUL_HS_HS, true, "lll" },
- { "__insn_mul_hs_hu", TILEGX_INSN_MUL_HS_HU, true, "lll" },
- { "__insn_mul_hs_ls", TILEGX_INSN_MUL_HS_LS, true, "lll" },
- { "__insn_mul_hs_lu", TILEGX_INSN_MUL_HS_LU, true, "lll" },
- { "__insn_mul_hu_hu", TILEGX_INSN_MUL_HU_HU, true, "lll" },
- { "__insn_mul_hu_ls", TILEGX_INSN_MUL_HU_LS, true, "lll" },
- { "__insn_mul_hu_lu", TILEGX_INSN_MUL_HU_LU, true, "lll" },
- { "__insn_mul_ls_ls", TILEGX_INSN_MUL_LS_LS, true, "lll" },
- { "__insn_mul_ls_lu", TILEGX_INSN_MUL_LS_LU, true, "lll" },
- { "__insn_mul_lu_lu", TILEGX_INSN_MUL_LU_LU, true, "lll" },
- { "__insn_mula_hs_hs", TILEGX_INSN_MULA_HS_HS, true, "llll" },
- { "__insn_mula_hs_hu", TILEGX_INSN_MULA_HS_HU, true, "llll" },
- { "__insn_mula_hs_ls", TILEGX_INSN_MULA_HS_LS, true, "llll" },
- { "__insn_mula_hs_lu", TILEGX_INSN_MULA_HS_LU, true, "llll" },
- { "__insn_mula_hu_hu", TILEGX_INSN_MULA_HU_HU, true, "llll" },
- { "__insn_mula_hu_ls", TILEGX_INSN_MULA_HU_LS, true, "llll" },
- { "__insn_mula_hu_lu", TILEGX_INSN_MULA_HU_LU, true, "llll" },
- { "__insn_mula_ls_ls", TILEGX_INSN_MULA_LS_LS, true, "llll" },
- { "__insn_mula_ls_lu", TILEGX_INSN_MULA_LS_LU, true, "llll" },
- { "__insn_mula_lu_lu", TILEGX_INSN_MULA_LU_LU, true, "llll" },
- { "__insn_mulax", TILEGX_INSN_MULAX, true, "iiii" },
- { "__insn_mulx", TILEGX_INSN_MULX, true, "iii" },
- { "__insn_mz", TILEGX_INSN_MZ, true, "lll" },
- { "__insn_nap", TILEGX_INSN_NAP, false, "v" },
- { "__insn_nop", TILEGX_INSN_NOP, true, "v" },
- { "__insn_nor", TILEGX_INSN_NOR, true, "lll" },
- { "__insn_or", TILEGX_INSN_OR, true, "lll" },
- { "__insn_ori", TILEGX_INSN_OR, true, "lll" },
- { "__insn_pcnt", TILEGX_INSN_PCNT, true, "ll" },
- { "__insn_prefetch", TILEGX_INSN_PREFETCH_L1, false, "vk" },
- { "__insn_prefetch_l1", TILEGX_INSN_PREFETCH_L1, false, "vk" },
- { "__insn_prefetch_l1_fault", TILEGX_INSN_PREFETCH_L1_FAULT, false, "vk" },
- { "__insn_prefetch_l2", TILEGX_INSN_PREFETCH_L2, false, "vk" },
- { "__insn_prefetch_l2_fault", TILEGX_INSN_PREFETCH_L2_FAULT, false, "vk" },
- { "__insn_prefetch_l3", TILEGX_INSN_PREFETCH_L3, false, "vk" },
- { "__insn_prefetch_l3_fault", TILEGX_INSN_PREFETCH_L3_FAULT, false, "vk" },
- { "__insn_revbits", TILEGX_INSN_REVBITS, true, "ll" },
- { "__insn_revbytes", TILEGX_INSN_REVBYTES, true, "ll" },
- { "__insn_rotl", TILEGX_INSN_ROTL, true, "lli" },
- { "__insn_rotli", TILEGX_INSN_ROTL, true, "lli" },
- { "__insn_shl", TILEGX_INSN_SHL, true, "lli" },
- { "__insn_shl16insli", TILEGX_INSN_SHL16INSLI, true, "lll" },
- { "__insn_shl1add", TILEGX_INSN_SHL1ADD, true, "lll" },
- { "__insn_shl1addx", TILEGX_INSN_SHL1ADDX, true, "iii" },
- { "__insn_shl2add", TILEGX_INSN_SHL2ADD, true, "lll" },
- { "__insn_shl2addx", TILEGX_INSN_SHL2ADDX, true, "iii" },
- { "__insn_shl3add", TILEGX_INSN_SHL3ADD, true, "lll" },
- { "__insn_shl3addx", TILEGX_INSN_SHL3ADDX, true, "iii" },
- { "__insn_shli", TILEGX_INSN_SHL, true, "lli" },
- { "__insn_shlx", TILEGX_INSN_SHLX, true, "iii" },
- { "__insn_shlxi", TILEGX_INSN_SHLX, true, "iii" },
- { "__insn_shrs", TILEGX_INSN_SHRS, true, "lli" },
- { "__insn_shrsi", TILEGX_INSN_SHRS, true, "lli" },
- { "__insn_shru", TILEGX_INSN_SHRU, true, "lli" },
- { "__insn_shrui", TILEGX_INSN_SHRU, true, "lli" },
- { "__insn_shrux", TILEGX_INSN_SHRUX, true, "iii" },
- { "__insn_shruxi", TILEGX_INSN_SHRUX, true, "iii" },
- { "__insn_shufflebytes", TILEGX_INSN_SHUFFLEBYTES, true, "llll" },
- { "__insn_shufflebytes1", TILEGX_INSN_SHUFFLEBYTES1, true, "lll" },
- { "__insn_st", TILEGX_INSN_ST, false, "vpl" },
- { "__insn_st1", TILEGX_INSN_ST1, false, "vpl" },
- { "__insn_st2", TILEGX_INSN_ST2, false, "vpl" },
- { "__insn_st4", TILEGX_INSN_ST4, false, "vpl" },
- { "__insn_stnt", TILEGX_INSN_STNT, false, "vpl" },
- { "__insn_stnt1", TILEGX_INSN_STNT1, false, "vpl" },
- { "__insn_stnt2", TILEGX_INSN_STNT2, false, "vpl" },
- { "__insn_stnt4", TILEGX_INSN_STNT4, false, "vpl" },
- { "__insn_sub", TILEGX_INSN_SUB, true, "lll" },
- { "__insn_subx", TILEGX_INSN_SUBX, true, "iii" },
- { "__insn_subxsc", TILEGX_INSN_SUBXSC, true, "iii" },
- { "__insn_tblidxb0", TILEGX_INSN_TBLIDXB0, true, "lll" },
- { "__insn_tblidxb1", TILEGX_INSN_TBLIDXB1, true, "lll" },
- { "__insn_tblidxb2", TILEGX_INSN_TBLIDXB2, true, "lll" },
- { "__insn_tblidxb3", TILEGX_INSN_TBLIDXB3, true, "lll" },
- { "__insn_v1add", TILEGX_INSN_V1ADD, true, "lll" },
- { "__insn_v1addi", TILEGX_INSN_V1ADDI, true, "lll" },
- { "__insn_v1adduc", TILEGX_INSN_V1ADDUC, true, "lll" },
- { "__insn_v1adiffu", TILEGX_INSN_V1ADIFFU, true, "lll" },
- { "__insn_v1avgu", TILEGX_INSN_V1AVGU, true, "lll" },
- { "__insn_v1cmpeq", TILEGX_INSN_V1CMPEQ, true, "lll" },
- { "__insn_v1cmpeqi", TILEGX_INSN_V1CMPEQI, true, "lll" },
- { "__insn_v1cmples", TILEGX_INSN_V1CMPLES, true, "lll" },
- { "__insn_v1cmpleu", TILEGX_INSN_V1CMPLEU, true, "lll" },
- { "__insn_v1cmplts", TILEGX_INSN_V1CMPLTS, true, "lll" },
- { "__insn_v1cmpltsi", TILEGX_INSN_V1CMPLTSI, true, "lll" },
- { "__insn_v1cmpltu", TILEGX_INSN_V1CMPLTU, true, "lll" },
- { "__insn_v1cmpltui", TILEGX_INSN_V1CMPLTUI, true, "lll" },
- { "__insn_v1cmpne", TILEGX_INSN_V1CMPNE, true, "lll" },
- { "__insn_v1ddotpu", TILEGX_INSN_V1DDOTPU, true, "lll" },
- { "__insn_v1ddotpua", TILEGX_INSN_V1DDOTPUA, true, "llll" },
- { "__insn_v1ddotpus", TILEGX_INSN_V1DDOTPUS, true, "lll" },
- { "__insn_v1ddotpusa", TILEGX_INSN_V1DDOTPUSA, true, "llll" },
- { "__insn_v1dotp", TILEGX_INSN_V1DOTP, true, "lll" },
- { "__insn_v1dotpa", TILEGX_INSN_V1DOTPA, true, "llll" },
- { "__insn_v1dotpu", TILEGX_INSN_V1DOTPU, true, "lll" },
- { "__insn_v1dotpua", TILEGX_INSN_V1DOTPUA, true, "llll" },
- { "__insn_v1dotpus", TILEGX_INSN_V1DOTPUS, true, "lll" },
- { "__insn_v1dotpusa", TILEGX_INSN_V1DOTPUSA, true, "llll" },
- { "__insn_v1int_h", TILEGX_INSN_V1INT_H, true, "lll" },
- { "__insn_v1int_l", TILEGX_INSN_V1INT_L, true, "lll" },
- { "__insn_v1maxu", TILEGX_INSN_V1MAXU, true, "lll" },
- { "__insn_v1maxui", TILEGX_INSN_V1MAXUI, true, "lll" },
- { "__insn_v1minu", TILEGX_INSN_V1MINU, true, "lll" },
- { "__insn_v1minui", TILEGX_INSN_V1MINUI, true, "lll" },
- { "__insn_v1mnz", TILEGX_INSN_V1MNZ, true, "lll" },
- { "__insn_v1multu", TILEGX_INSN_V1MULTU, true, "lll" },
- { "__insn_v1mulu", TILEGX_INSN_V1MULU, true, "lll" },
- { "__insn_v1mulus", TILEGX_INSN_V1MULUS, true, "lll" },
- { "__insn_v1mz", TILEGX_INSN_V1MZ, true, "lll" },
- { "__insn_v1sadau", TILEGX_INSN_V1SADAU, true, "llll" },
- { "__insn_v1sadu", TILEGX_INSN_V1SADU, true, "lll" },
- { "__insn_v1shl", TILEGX_INSN_V1SHL, true, "lll" },
- { "__insn_v1shli", TILEGX_INSN_V1SHLI, true, "lll" },
- { "__insn_v1shrs", TILEGX_INSN_V1SHRS, true, "lll" },
- { "__insn_v1shrsi", TILEGX_INSN_V1SHRSI, true, "lll" },
- { "__insn_v1shru", TILEGX_INSN_V1SHRU, true, "lll" },
- { "__insn_v1shrui", TILEGX_INSN_V1SHRUI, true, "lll" },
- { "__insn_v1sub", TILEGX_INSN_V1SUB, true, "lll" },
- { "__insn_v1subuc", TILEGX_INSN_V1SUBUC, true, "lll" },
- { "__insn_v2add", TILEGX_INSN_V2ADD, true, "lll" },
- { "__insn_v2addi", TILEGX_INSN_V2ADDI, true, "lll" },
- { "__insn_v2addsc", TILEGX_INSN_V2ADDSC, true, "lll" },
- { "__insn_v2adiffs", TILEGX_INSN_V2ADIFFS, true, "lll" },
- { "__insn_v2avgs", TILEGX_INSN_V2AVGS, true, "lll" },
- { "__insn_v2cmpeq", TILEGX_INSN_V2CMPEQ, true, "lll" },
- { "__insn_v2cmpeqi", TILEGX_INSN_V2CMPEQI, true, "lll" },
- { "__insn_v2cmples", TILEGX_INSN_V2CMPLES, true, "lll" },
- { "__insn_v2cmpleu", TILEGX_INSN_V2CMPLEU, true, "lll" },
- { "__insn_v2cmplts", TILEGX_INSN_V2CMPLTS, true, "lll" },
- { "__insn_v2cmpltsi", TILEGX_INSN_V2CMPLTSI, true, "lll" },
- { "__insn_v2cmpltu", TILEGX_INSN_V2CMPLTU, true, "lll" },
- { "__insn_v2cmpltui", TILEGX_INSN_V2CMPLTUI, true, "lll" },
- { "__insn_v2cmpne", TILEGX_INSN_V2CMPNE, true, "lll" },
- { "__insn_v2dotp", TILEGX_INSN_V2DOTP, true, "lll" },
- { "__insn_v2dotpa", TILEGX_INSN_V2DOTPA, true, "llll" },
- { "__insn_v2int_h", TILEGX_INSN_V2INT_H, true, "lll" },
- { "__insn_v2int_l", TILEGX_INSN_V2INT_L, true, "lll" },
- { "__insn_v2maxs", TILEGX_INSN_V2MAXS, true, "lll" },
- { "__insn_v2maxsi", TILEGX_INSN_V2MAXSI, true, "lll" },
- { "__insn_v2mins", TILEGX_INSN_V2MINS, true, "lll" },
- { "__insn_v2minsi", TILEGX_INSN_V2MINSI, true, "lll" },
- { "__insn_v2mnz", TILEGX_INSN_V2MNZ, true, "lll" },
- { "__insn_v2mulfsc", TILEGX_INSN_V2MULFSC, true, "lll" },
- { "__insn_v2muls", TILEGX_INSN_V2MULS, true, "lll" },
- { "__insn_v2mults", TILEGX_INSN_V2MULTS, true, "lll" },
- { "__insn_v2mz", TILEGX_INSN_V2MZ, true, "lll" },
- { "__insn_v2packh", TILEGX_INSN_V2PACKH, true, "lll" },
- { "__insn_v2packl", TILEGX_INSN_V2PACKL, true, "lll" },
- { "__insn_v2packuc", TILEGX_INSN_V2PACKUC, true, "lll" },
- { "__insn_v2sadas", TILEGX_INSN_V2SADAS, true, "llll" },
- { "__insn_v2sadau", TILEGX_INSN_V2SADAU, true, "llll" },
- { "__insn_v2sads", TILEGX_INSN_V2SADS, true, "lll" },
- { "__insn_v2sadu", TILEGX_INSN_V2SADU, true, "lll" },
- { "__insn_v2shl", TILEGX_INSN_V2SHL, true, "lll" },
- { "__insn_v2shli", TILEGX_INSN_V2SHLI, true, "lll" },
- { "__insn_v2shlsc", TILEGX_INSN_V2SHLSC, true, "lll" },
- { "__insn_v2shrs", TILEGX_INSN_V2SHRS, true, "lll" },
- { "__insn_v2shrsi", TILEGX_INSN_V2SHRSI, true, "lll" },
- { "__insn_v2shru", TILEGX_INSN_V2SHRU, true, "lll" },
- { "__insn_v2shrui", TILEGX_INSN_V2SHRUI, true, "lll" },
- { "__insn_v2sub", TILEGX_INSN_V2SUB, true, "lll" },
- { "__insn_v2subsc", TILEGX_INSN_V2SUBSC, true, "lll" },
- { "__insn_v4add", TILEGX_INSN_V4ADD, true, "lll" },
- { "__insn_v4addsc", TILEGX_INSN_V4ADDSC, true, "lll" },
- { "__insn_v4int_h", TILEGX_INSN_V4INT_H, true, "lll" },
- { "__insn_v4int_l", TILEGX_INSN_V4INT_L, true, "lll" },
- { "__insn_v4packsc", TILEGX_INSN_V4PACKSC, true, "lll" },
- { "__insn_v4shl", TILEGX_INSN_V4SHL, true, "lll" },
- { "__insn_v4shlsc", TILEGX_INSN_V4SHLSC, true, "lll" },
- { "__insn_v4shrs", TILEGX_INSN_V4SHRS, true, "lll" },
- { "__insn_v4shru", TILEGX_INSN_V4SHRU, true, "lll" },
- { "__insn_v4sub", TILEGX_INSN_V4SUB, true, "lll" },
- { "__insn_v4subsc", TILEGX_INSN_V4SUBSC, true, "lll" },
- { "__insn_wh64", TILEGX_INSN_WH64, false, "vp" },
- { "__insn_xor", TILEGX_INSN_XOR, true, "lll" },
- { "__insn_xori", TILEGX_INSN_XOR, true, "lll" },
- { "__tile_network_barrier", TILEGX_NETWORK_BARRIER, false, "v" },
- { "__tile_idn0_receive", TILEGX_IDN0_RECEIVE, false, "l" },
- { "__tile_idn1_receive", TILEGX_IDN1_RECEIVE, false, "l" },
- { "__tile_idn_send", TILEGX_IDN_SEND, false, "vl" },
- { "__tile_udn0_receive", TILEGX_UDN0_RECEIVE, false, "l" },
- { "__tile_udn1_receive", TILEGX_UDN1_RECEIVE, false, "l" },
- { "__tile_udn2_receive", TILEGX_UDN2_RECEIVE, false, "l" },
- { "__tile_udn3_receive", TILEGX_UDN3_RECEIVE, false, "l" },
- { "__tile_udn_send", TILEGX_UDN_SEND, false, "vl" },
-};
-
-
-/* Convert a character in a builtin type string to a tree type. */
-static tree
-char_to_type (char c)
-{
- static tree volatile_ptr_type_node = NULL;
- static tree volatile_const_ptr_type_node = NULL;
-
- if (volatile_ptr_type_node == NULL)
- {
- volatile_ptr_type_node =
- build_pointer_type (build_qualified_type (void_type_node,
- TYPE_QUAL_VOLATILE));
- volatile_const_ptr_type_node =
- build_pointer_type (build_qualified_type (void_type_node,
- TYPE_QUAL_CONST
- | TYPE_QUAL_VOLATILE));
- }
-
- switch (c)
- {
- case 'v':
- return void_type_node;
- case 'i':
- return unsigned_type_node;
- case 'l':
- return long_long_unsigned_type_node;
- case 'p':
- return volatile_ptr_type_node;
- case 'k':
- return volatile_const_ptr_type_node;
- default:
- gcc_unreachable ();
- }
-}
-
-
-/* Implement TARGET_INIT_BUILTINS. */
-static void
-tilegx_init_builtins (void)
-{
- size_t i;
-
- for (i = 0; i < ARRAY_SIZE (tilegx_builtins); i++)
- {
- const struct tilegx_builtin_def *p = &tilegx_builtins[i];
- tree ftype, ret_type, arg_type_list = void_list_node;
- tree decl;
- int j;
-
- for (j = strlen (p->type) - 1; j > 0; j--)
- {
- arg_type_list =
- tree_cons (NULL_TREE, char_to_type (p->type[j]), arg_type_list);
- }
-
- ret_type = char_to_type (p->type[0]);
-
- ftype = build_function_type (ret_type, arg_type_list);
-
- decl = add_builtin_function (p->name, ftype, p->code, BUILT_IN_MD,
- NULL, NULL);
-
- if (p->is_const)
- TREE_READONLY (decl) = 1;
- TREE_NOTHROW (decl) = 1;
-
- if (tilegx_builtin_info[p->code].fndecl == NULL)
- tilegx_builtin_info[p->code].fndecl = decl;
- }
-}
-
-
-/* Implement TARGET_EXPAND_BUILTIN. */
-static rtx
-tilegx_expand_builtin (tree exp,
- rtx target,
- rtx subtarget ATTRIBUTE_UNUSED,
- machine_mode mode ATTRIBUTE_UNUSED,
- int ignore ATTRIBUTE_UNUSED)
-{
-#define MAX_BUILTIN_ARGS 4
-
- tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
- unsigned int fcode = DECL_MD_FUNCTION_CODE (fndecl);
- tree arg;
- call_expr_arg_iterator iter;
- enum insn_code icode;
- rtx op[MAX_BUILTIN_ARGS + 1], pat;
- int opnum;
- bool nonvoid;
- insn_gen_fn fn;
-
- if (fcode >= TILEGX_BUILTIN_max)
- internal_error ("bad builtin fcode");
- icode = tilegx_builtin_info[fcode].icode;
- if (icode == 0)
- internal_error ("bad builtin icode");
-
- nonvoid = TREE_TYPE (TREE_TYPE (fndecl)) != void_type_node;
-
- opnum = nonvoid;
- FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
- {
- const struct insn_operand_data *insn_op;
-
- if (arg == error_mark_node)
- return NULL_RTX;
- if (opnum > MAX_BUILTIN_ARGS)
- return NULL_RTX;
-
- insn_op = &insn_data[icode].operand[opnum];
-
- op[opnum] = expand_expr (arg, NULL_RTX, insn_op->mode, EXPAND_NORMAL);
-
- if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
- {
- machine_mode opmode = insn_op->mode;
-
- /* pointer_operand and pmode_register_operand operands do
- not specify a mode, so use the operand's mode instead
- (which should always be right by the time we get here,
- except for constants, which are VOIDmode). */
- if (opmode == VOIDmode)
- {
- machine_mode m = GET_MODE (op[opnum]);
- gcc_assert (m == Pmode || m == VOIDmode);
- opmode = Pmode;
- }
-
- op[opnum] = copy_to_mode_reg (opmode, op[opnum]);
- }
-
- if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
- {
- /* We still failed to meet the predicate even after moving
- into a register. Assume we needed an immediate. */
- error_at (EXPR_LOCATION (exp),
- "operand must be an immediate of the right size");
- return const0_rtx;
- }
-
- opnum++;
- }
-
- if (nonvoid)
- {
- machine_mode tmode = insn_data[icode].operand[0].mode;
- if (!target
- || GET_MODE (target) != tmode
- || !(*insn_data[icode].operand[0].predicate) (target, tmode))
- {
- if (tmode == VOIDmode)
- {
- /* get the mode from the return type. */
- tmode = TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl)));
- }
- target = gen_reg_rtx (tmode);
- }
- op[0] = target;
- }
-
- fn = GEN_FCN (icode);
- switch (opnum)
- {
- case 0:
- pat = fn (NULL_RTX);
- break;
- case 1:
- pat = fn (op[0]);
- break;
- case 2:
- pat = fn (op[0], op[1]);
- break;
- case 3:
- pat = fn (op[0], op[1], op[2]);
- break;
- case 4:
- pat = fn (op[0], op[1], op[2], op[3]);
- break;
- case 5:
- pat = fn (op[0], op[1], op[2], op[3], op[4]);
- break;
- default:
- gcc_unreachable ();
- }
- if (!pat)
- return NULL_RTX;
-
- /* If we are generating a prefetch, tell the scheduler not to move
- it around. */
- if (GET_CODE (pat) == PREFETCH)
- PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
-
- emit_insn (pat);
-
- if (nonvoid)
- return target;
- else
- return const0_rtx;
-}
-
-
-/* Implement TARGET_BUILTIN_DECL. */
-static tree
-tilegx_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
-{
- if (code >= TILEGX_BUILTIN_max)
- return error_mark_node;
-
- return tilegx_builtin_info[code].fndecl;
-}
-
-
-
-/* Stack frames */
-
-/* Return whether REGNO needs to be saved in the stack frame. */
-static bool
-need_to_save_reg (unsigned int regno)
-{
- if (!call_used_or_fixed_reg_p (regno)
- && df_regs_ever_live_p (regno))
- return true;
-
- if (flag_pic
- && (regno == PIC_OFFSET_TABLE_REGNUM
- || regno == TILEGX_PIC_TEXT_LABEL_REGNUM)
- && (crtl->uses_pic_offset_table || crtl->saves_all_registers))
- return true;
-
- if (crtl->calls_eh_return)
- {
- unsigned i;
- for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM; i++)
- {
- if (regno == EH_RETURN_DATA_REGNO (i))
- return true;
- }
- }
-
- return false;
-}
-
-
-/* Return the size of the register savev area. This function is only
- correct starting with local register allocation */
-static int
-tilegx_saved_regs_size (void)
-{
- int reg_save_size = 0;
- int regno;
- int offset_to_frame;
- int align_mask;
-
- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- if (need_to_save_reg (regno))
- reg_save_size += UNITS_PER_WORD;
-
- /* Pad out the register save area if necessary to make
- frame_pointer_rtx be as aligned as the stack pointer. */
- offset_to_frame = crtl->args.pretend_args_size + reg_save_size;
- align_mask = (STACK_BOUNDARY / BITS_PER_UNIT) - 1;
- reg_save_size += (-offset_to_frame) & align_mask;
-
- return reg_save_size;
-}
-
-
-/* Round up frame size SIZE. */
-static int
-round_frame_size (int size)
-{
- return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
- & -STACK_BOUNDARY / BITS_PER_UNIT);
-}
-
-
-/* Emit a store in the stack frame to save REGNO at address ADDR, and
- emit the corresponding REG_CFA_OFFSET note described by CFA and
- CFA_OFFSET. Return the emitted insn. */
-static rtx
-frame_emit_store (int regno, int regno_note, rtx addr, rtx cfa,
- int cfa_offset)
-{
- rtx reg = gen_rtx_REG (DImode, regno);
- rtx mem = gen_frame_mem (DImode, addr);
- rtx mov = gen_movdi (mem, reg);
-
- /* Describe what just happened in a way that dwarf understands. We
- use temporary registers to hold the address to make scheduling
- easier, and use the REG_CFA_OFFSET to describe the address as an
- offset from the CFA. */
- rtx reg_note = gen_rtx_REG (DImode, regno_note);
- rtx cfa_relative_addr = gen_rtx_PLUS (Pmode, cfa, GEN_INT (cfa_offset));
- rtx cfa_relative_mem = gen_frame_mem (DImode, cfa_relative_addr);
- rtx real = gen_rtx_SET (cfa_relative_mem, reg_note);
- add_reg_note (mov, REG_CFA_OFFSET, real);
-
- return emit_insn (mov);
-}
-
-
-/* Emit a load in the stack frame to load REGNO from address ADDR.
- Add a REG_CFA_RESTORE note to CFA_RESTORES if CFA_RESTORES is
- non-null. Return the emitted insn. */
-static rtx_insn *
-frame_emit_load (int regno, rtx addr, rtx *cfa_restores)
-{
- rtx reg = gen_rtx_REG (DImode, regno);
- rtx mem = gen_frame_mem (DImode, addr);
- if (cfa_restores)
- *cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, *cfa_restores);
- return emit_insn (gen_movdi (reg, mem));
-}
-
-
-/* Helper function to set RTX_FRAME_RELATED_P on instructions,
- including sequences. */
-static rtx
-set_frame_related_p (void)
-{
- rtx_insn *seq = get_insns ();
- rtx_insn *insn;
-
- end_sequence ();
-
- if (!seq)
- return NULL_RTX;
-
- if (INSN_P (seq))
- {
- insn = seq;
- while (insn != NULL_RTX)
- {
- RTX_FRAME_RELATED_P (insn) = 1;
- insn = NEXT_INSN (insn);
- }
- seq = emit_insn (seq);
- }
- else
- {
- seq = emit_insn (seq);
- RTX_FRAME_RELATED_P (seq) = 1;
- }
- return seq;
-}
-
-
-#define FRP(exp) (start_sequence (), exp, set_frame_related_p ())
-
-/* This emits code for 'sp += offset'.
-
- The ABI only allows us to modify 'sp' in a single 'addi' or
- 'addli', so the backtracer understands it. Larger amounts cannot
- use those instructions, so are added by placing the offset into a
- large register and using 'add'.
-
- This happens after reload, so we need to expand it ourselves. */
-static rtx_insn *
-emit_sp_adjust (int offset, int *next_scratch_regno, bool frame_related,
- rtx reg_notes)
-{
- rtx to_add;
- rtx imm_rtx = GEN_INT (offset);
- rtx pat;
- rtx_insn *insn;
-
- if (satisfies_constraint_J (imm_rtx))
- {
- /* We can add this using a single immediate add. */
- to_add = imm_rtx;
- }
- else
- {
- rtx tmp = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
- tilegx_expand_set_const64 (tmp, imm_rtx);
- to_add = tmp;
- }
-
- /* Actually adjust the stack pointer. */
- if (TARGET_32BIT)
- pat = gen_sp_adjust_32bit (stack_pointer_rtx, stack_pointer_rtx, to_add);
- else
- pat = gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx, to_add);
-
- insn = emit_insn (pat);
- REG_NOTES (insn) = reg_notes;
-
- /* Describe what just happened in a way that dwarf understands. */
- if (frame_related)
- {
- rtx real = gen_rtx_SET (stack_pointer_rtx,
- gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- imm_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
- add_reg_note (insn, REG_CFA_ADJUST_CFA, real);
- }
-
- return insn;
-}
-
-
-/* Return whether the current function is leaf. This takes into
- account whether the function calls tls_get_addr. */
-static bool
-tilegx_current_function_is_leaf (void)
-{
- return crtl->is_leaf && !cfun->machine->calls_tls_get_addr;
-}
-
-
-/* Return the frame size. */
-static int
-compute_total_frame_size (void)
-{
- int total_size = (get_frame_size () + tilegx_saved_regs_size ()
- + crtl->outgoing_args_size
- + crtl->args.pretend_args_size);
-
- if (!tilegx_current_function_is_leaf () || cfun->calls_alloca)
- {
- /* Make room for save area in callee. */
- total_size += STACK_POINTER_OFFSET;
- }
-
- return round_frame_size (total_size);
-}
-
-
-/* Return nonzero if this function is known to have a null epilogue.
- This allows the optimizer to omit jumps to jumps if no stack was
- created. */
-bool
-tilegx_can_use_return_insn_p (void)
-{
- return (reload_completed
- && !cfun->static_chain_decl
- && !compute_total_frame_size ()
- && tilegx_current_function_is_leaf ()
- && !crtl->profile && !df_regs_ever_live_p (TILEGX_LINK_REGNUM));
-}
-
-
-/* Returns an rtx for a stack slot at 'FP + offset_from_fp'. If there
- is a frame pointer, it computes the value relative to
- that. Otherwise it uses the stack pointer. */
-static rtx
-compute_frame_addr (int offset_from_fp, int *next_scratch_regno)
-{
- rtx base_reg_rtx, tmp_reg_rtx, offset_rtx;
- int offset_from_base;
-
- if (frame_pointer_needed)
- {
- base_reg_rtx = hard_frame_pointer_rtx;
- offset_from_base = offset_from_fp;
- }
- else
- {
- int offset_from_sp = compute_total_frame_size () + offset_from_fp;
- offset_from_base = offset_from_sp;
- base_reg_rtx = stack_pointer_rtx;
- }
-
- if (offset_from_base == 0)
- return base_reg_rtx;
-
- /* Compute the new value of the stack pointer. */
- tmp_reg_rtx = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
- offset_rtx = GEN_INT (offset_from_base);
-
- if (!add_operand (offset_rtx, Pmode))
- {
- expand_set_cint64 (tmp_reg_rtx, offset_rtx);
- offset_rtx = tmp_reg_rtx;
- }
-
- emit_insn (gen_rtx_SET (tmp_reg_rtx,
- gen_rtx_PLUS (Pmode, base_reg_rtx, offset_rtx)));
-
- return tmp_reg_rtx;
-}
-
-
-/* The stack frame looks like this:
- +-------------+
- | ... |
- | incoming |
- | stack args |
- AP -> +-------------+
- | caller's HFP|
- +-------------+
- | lr save |
- HFP -> +-------------+
- | var args |
- | reg save | crtl->args.pretend_args_size bytes
- +-------------+
- | ... |
- | saved regs | tilegx_saved_regs_size() bytes
- FP -> +-------------+
- | ... |
- | vars | get_frame_size() bytes
- +-------------+
- | ... |
- | outgoing |
- | stack args | crtl->outgoing_args_size bytes
- +-------------+
- | HFP | ptr_size bytes (only here if nonleaf / alloca)
- +-------------+
- | callee lr | ptr_size bytes (only here if nonleaf / alloca)
- | save |
- SP -> +-------------+
-
- HFP == incoming SP.
-
- For functions with a frame larger than 32767 bytes, or which use
- alloca (), r52 is used as a frame pointer. Otherwise there is no
- frame pointer.
-
- FP is saved at SP+ptr_size before calling a subroutine so the callee
- can chain. */
-void
-tilegx_expand_prologue (void)
-{
-#define ROUND_ROBIN_SIZE 4
- /* We round-robin through four scratch registers to hold temporary
- addresses for saving registers, to make instruction scheduling
- easier. */
- rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
- NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
- };
- rtx insn, cfa;
- unsigned int which_scratch;
- int offset, start_offset, regno;
-
- /* A register that holds a copy of the incoming fp. */
- int fp_copy_regno = -1;
-
- /* A register that holds a copy of the incoming sp. */
- int sp_copy_regno = -1;
-
- /* Next scratch register number to hand out (postdecrementing). */
- int next_scratch_regno = 29;
-
- int total_size = compute_total_frame_size ();
-
- if (flag_stack_usage_info)
- current_function_static_stack_size = total_size;
-
- /* Save lr first in its special location because code after this
- might use the link register as a scratch register. */
- if (df_regs_ever_live_p (TILEGX_LINK_REGNUM) || crtl->calls_eh_return)
- {
- FRP (frame_emit_store (TILEGX_LINK_REGNUM, TILEGX_LINK_REGNUM,
- stack_pointer_rtx, stack_pointer_rtx, 0));
- emit_insn (gen_blockage ());
- }
-
- if (total_size == 0)
- {
- /* Load the PIC register if needed. */
- if (flag_pic && crtl->uses_pic_offset_table)
- load_pic_register (false);
-
- return;
- }
-
- cfa = stack_pointer_rtx;
-
- if (frame_pointer_needed)
- {
- fp_copy_regno = next_scratch_regno--;
-
- /* Copy the old frame pointer aside so we can save it later. */
- insn =
- FRP (emit_move_insn (gen_rtx_REG (word_mode, fp_copy_regno),
- gen_lowpart (word_mode, hard_frame_pointer_rtx)));
- add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX);
-
- /* Set up the frame pointer. */
- insn = FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx));
- add_reg_note (insn, REG_CFA_DEF_CFA, hard_frame_pointer_rtx);
- cfa = hard_frame_pointer_rtx;
- REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY;
-
- /* fp holds a copy of the incoming sp, in case we need to store
- it. */
- sp_copy_regno = HARD_FRAME_POINTER_REGNUM;
- }
- else if (!tilegx_current_function_is_leaf ())
- {
- /* Copy the old stack pointer aside so we can save it later. */
- sp_copy_regno = next_scratch_regno--;
- emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno),
- stack_pointer_rtx);
- }
-
- if (tilegx_current_function_is_leaf ())
- {
- /* No need to store chain pointer to caller's frame. */
- emit_sp_adjust (-total_size, &next_scratch_regno,
- !frame_pointer_needed, NULL_RTX);
- }
- else
- {
- /* Save the frame pointer (incoming sp value) to support
- backtracing. First we need to create an rtx with the store
- address. */
- rtx chain_addr = gen_rtx_REG (Pmode, next_scratch_regno--);
- rtx size_rtx = GEN_INT (-(total_size - UNITS_PER_WORD));
-
- if (add_operand (size_rtx, Pmode))
- {
- /* Expose more parallelism by computing this value from the
- original stack pointer, not the one after we have pushed
- the frame. */
- rtx p = gen_rtx_PLUS (Pmode, stack_pointer_rtx, size_rtx);
- emit_insn (gen_rtx_SET (chain_addr, p));
- emit_sp_adjust (-total_size, &next_scratch_regno,
- !frame_pointer_needed, NULL_RTX);
- }
- else
- {
- /* The stack frame is large, so just store the incoming sp
- value at *(new_sp + UNITS_PER_WORD). */
- rtx p;
- emit_sp_adjust (-total_size, &next_scratch_regno,
- !frame_pointer_needed, NULL_RTX);
- p = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- GEN_INT (UNITS_PER_WORD));
- emit_insn (gen_rtx_SET (chain_addr, p));
- }
-
- /* Save our frame pointer for backtrace chaining. */
- emit_insn (gen_movdi (gen_frame_mem (DImode, chain_addr),
- gen_rtx_REG (DImode, sp_copy_regno)));
- }
-
- /* Compute where to start storing registers we need to save. */
- start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
- offset = start_offset;
-
- /* Store all registers that need saving. */
- which_scratch = 0;
- for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
- if (need_to_save_reg (regno))
- {
- rtx r = reg_save_addr[which_scratch];
- int from_regno;
- int cfa_offset = frame_pointer_needed ? offset : total_size + offset;
-
- if (r == NULL_RTX)
- {
- int prev_scratch_regno = next_scratch_regno;
- r = compute_frame_addr (offset, &next_scratch_regno);
- if (prev_scratch_regno != next_scratch_regno)
- reg_save_addr[which_scratch] = r;
- }
- else
- {
- /* Advance to the next stack slot to store this
- register. */
- int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
- rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
- emit_insn (gen_rtx_SET (r, p));
- }
-
- /* Save this register to the stack (but use the old fp value
- we copied aside if appropriate). */
- from_regno =
- (fp_copy_regno >= 0 && regno == HARD_FRAME_POINTER_REGNUM)
- ? fp_copy_regno : regno;
- FRP (frame_emit_store (from_regno, regno, r, cfa, cfa_offset));
-
- offset -= UNITS_PER_WORD;
- which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
- }
-
- /* If profiling, force that to happen after the frame is set up. */
- if (crtl->profile)
- emit_insn (gen_blockage ());
-
- /* Load the PIC register if needed. */
- if (flag_pic && crtl->uses_pic_offset_table)
- load_pic_register (false);
-}
-
-
-/* Implement the epilogue and sibcall_epilogue patterns. SIBCALL_P is
- true for a sibcall_epilogue pattern, and false for an epilogue
- pattern. */
-void
-tilegx_expand_epilogue (bool sibcall_p)
-{
- /* We round-robin through four scratch registers to hold temporary
- addresses for saving registers, to make instruction scheduling
- easier. */
- rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
- NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
- };
- rtx_insn *last_insn, *insn;
- unsigned int which_scratch;
- int offset, start_offset, regno;
- rtx cfa_restores = NULL_RTX;
-
- /* A register that holds a copy of the incoming fp. */
- int fp_copy_regno = -1;
-
- /* Next scratch register number to hand out (postdecrementing). */
- int next_scratch_regno = 29;
-
- int total_size = compute_total_frame_size ();
-
- last_insn = get_last_insn ();
-
- /* Load lr first since we are going to need it first. */
- insn = NULL;
- if (df_regs_ever_live_p (TILEGX_LINK_REGNUM))
- {
- insn = frame_emit_load (TILEGX_LINK_REGNUM,
- compute_frame_addr (0, &next_scratch_regno),
- &cfa_restores);
- }
-
- if (total_size == 0)
- {
- if (insn)
- {
- RTX_FRAME_RELATED_P (insn) = 1;
- REG_NOTES (insn) = cfa_restores;
- }
- goto done;
- }
-
- /* Compute where to start restoring registers. */
- start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
- offset = start_offset;
-
- if (frame_pointer_needed)
- fp_copy_regno = next_scratch_regno--;
-
- /* Restore all callee-saved registers. */
- which_scratch = 0;
- for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
- if (need_to_save_reg (regno))
- {
- rtx r = reg_save_addr[which_scratch];
- if (r == NULL_RTX)
- {
- r = compute_frame_addr (offset, &next_scratch_regno);
- reg_save_addr[which_scratch] = r;
- }
- else
- {
- /* Advance to the next stack slot to store this register. */
- int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
- rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
- emit_insn (gen_rtx_SET (r, p));
- }
-
- if (fp_copy_regno >= 0 && regno == HARD_FRAME_POINTER_REGNUM)
- frame_emit_load (fp_copy_regno, r, NULL);
- else
- frame_emit_load (regno, r, &cfa_restores);
-
- offset -= UNITS_PER_WORD;
- which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
- }
-
- if (!tilegx_current_function_is_leaf ())
- cfa_restores =
- alloc_reg_note (REG_CFA_RESTORE, stack_pointer_rtx, cfa_restores);
-
- emit_insn (gen_blockage ());
-
- if (frame_pointer_needed)
- {
- /* Restore the old stack pointer by copying from the frame
- pointer. */
- if (TARGET_32BIT)
- {
- insn = emit_insn (gen_sp_restore_32bit (stack_pointer_rtx,
- hard_frame_pointer_rtx));
- }
- else
- {
- insn = emit_insn (gen_sp_restore (stack_pointer_rtx,
- hard_frame_pointer_rtx));
- }
- RTX_FRAME_RELATED_P (insn) = 1;
- REG_NOTES (insn) = cfa_restores;
- add_reg_note (insn, REG_CFA_DEF_CFA, stack_pointer_rtx);
- }
- else
- {
- insn = emit_sp_adjust (total_size, &next_scratch_regno, true,
- cfa_restores);
- }
-
- if (crtl->calls_eh_return)
- {
- if (TARGET_32BIT)
- emit_insn (gen_sp_adjust_32bit (stack_pointer_rtx, stack_pointer_rtx,
- EH_RETURN_STACKADJ_RTX));
- else
- emit_insn (gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx,
- EH_RETURN_STACKADJ_RTX));
- }
-
- /* Restore the old frame pointer. */
- if (frame_pointer_needed)
- {
- insn = emit_move_insn (gen_lowpart (DImode, hard_frame_pointer_rtx),
- gen_rtx_REG (DImode, fp_copy_regno));
- add_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx);
- }
-
- /* Mark the pic registers as live outside of the function. */
- if (flag_pic)
- {
- emit_use (cfun->machine->text_label_rtx);
- emit_use (cfun->machine->got_rtx);
- }
-
-done:
- if (!sibcall_p)
- {
- emit_jump_insn (gen__return ());
- }
- else
- {
- emit_use (gen_rtx_REG (Pmode, TILEGX_LINK_REGNUM));
- }
-
- /* Mark all insns we just emitted as frame-related. */
- for (; last_insn != NULL_RTX; last_insn = next_insn (last_insn))
- RTX_FRAME_RELATED_P (last_insn) = 1;
-}
-
-#undef ROUND_ROBIN_SIZE
-
-
-/* Implement INITIAL_ELIMINATION_OFFSET. */
-int
-tilegx_initial_elimination_offset (int from, int to)
-{
- int total_size = compute_total_frame_size ();
-
- if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- {
- return (total_size - crtl->args.pretend_args_size
- - tilegx_saved_regs_size ());
- }
- else if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
- {
- return -(crtl->args.pretend_args_size + tilegx_saved_regs_size ());
- }
- else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- {
- return STACK_POINTER_OFFSET + total_size;
- }
- else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
- {
- return STACK_POINTER_OFFSET;
- }
- else
- gcc_unreachable ();
-}
-
-
-/* Return an RTX indicating where the return address to the calling
- function can be found. */
-rtx
-tilegx_return_addr (int count, rtx frame ATTRIBUTE_UNUSED)
-{
- if (count != 0)
- return const0_rtx;
-
- return get_hard_reg_initial_val (Pmode, TILEGX_LINK_REGNUM);
-}
-
-
-/* Implement EH_RETURN_HANDLER_RTX. The MEM needs to be volatile to
- prevent it from being deleted. */
-rtx
-tilegx_eh_return_handler_rtx (void)
-{
- rtx tmp = gen_frame_mem (Pmode, hard_frame_pointer_rtx);
- MEM_VOLATILE_P (tmp) = true;
- return tmp;
-}
-
-
-
-/* Registers */
-
-/* Implemnet TARGET_CONDITIONAL_REGISTER_USAGE. */
-static void
-tilegx_conditional_register_usage (void)
-{
- global_regs[TILEGX_NETORDER_REGNUM] = 1;
- /* TILEGX_PIC_TEXT_LABEL_REGNUM is conditionally used. */
- if (TILEGX_PIC_TEXT_LABEL_REGNUM != INVALID_REGNUM)
- fixed_regs[TILEGX_PIC_TEXT_LABEL_REGNUM] = 1;
- if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
- fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
-}
-
-
-/* Implement TARGET_FRAME_POINTER_REQUIRED. */
-static bool
-tilegx_frame_pointer_required (void)
-{
- return crtl->calls_eh_return || cfun->calls_alloca;
-}
-
-
-
-/* Scheduling and reorg */
-
-/* Return the length of INSN. LENGTH is the initial length computed
- by attributes in the machine-description file. This is where we
- account for bundles. */
-int
-tilegx_adjust_insn_length (rtx_insn *insn, int length)
-{
- machine_mode mode = GET_MODE (insn);
-
- /* A non-termininating instruction in a bundle has length 0. */
- if (mode == SImode)
- return 0;
-
- /* By default, there is not length adjustment. */
- return length;
-}
-
-
-/* Implement TARGET_SCHED_ISSUE_RATE. */
-static int
-tilegx_issue_rate (void)
-{
- return 3;
-}
-
-
-/* Return the rtx for the jump target. */
-static rtx
-get_jump_target (rtx branch)
-{
- if (CALL_P (branch))
- {
- rtx call;
- call = PATTERN (branch);
-
- if (GET_CODE (call) == PARALLEL)
- call = XVECEXP (call, 0, 0);
-
- if (GET_CODE (call) == SET)
- call = SET_SRC (call);
-
- if (GET_CODE (call) == CALL)
- return XEXP (XEXP (call, 0), 0);
- }
- return 0;
-}
-
-
-/* Implement TARGET_SCHED_ADJUST_COST. */
-static int
-tilegx_sched_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn,
- int cost, unsigned int)
-{
- /* If we have a true dependence, INSN is a call, and DEP_INSN
- defines a register that is needed by the call (argument or stack
- pointer) , set its latency to 0 so that it can be bundled with
- the call. Explicitly check for and exclude the case when
- DEP_INSN defines the target of the jump. */
- if (CALL_P (insn) && dep_type == REG_DEP_TRUE)
- {
- rtx target = get_jump_target (insn);
- if (!REG_P (target) || !set_of (target, dep_insn))
- return 0;
- }
-
- return cost;
-}
-
-
-/* Skip over irrelevant NOTEs and such and look for the next insn we
- would consider bundling. */
-static rtx_insn *
-next_insn_to_bundle (rtx_insn *r, rtx_insn *end)
-{
- for (; r != end; r = NEXT_INSN (r))
- {
- if (NONDEBUG_INSN_P (r)
- && GET_CODE (PATTERN (r)) != USE
- && GET_CODE (PATTERN (r)) != CLOBBER)
- return r;
- }
-
- return NULL;
-}
-
-
-/* Go through all insns, and use the information generated during
- scheduling to generate SEQUENCEs to represent bundles of
- instructions issued simultaneously. */
-static void
-tilegx_gen_bundles (void)
-{
- basic_block bb;
- FOR_EACH_BB_FN (bb, cfun)
- {
- rtx_insn *insn, *next, *prev;
- rtx_insn *end = NEXT_INSN (BB_END (bb));
-
- prev = NULL;
- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
- {
- next = next_insn_to_bundle (NEXT_INSN (insn), end);
-
- /* Never wrap {} around inline asm. */
- if (GET_CODE (PATTERN (insn)) != ASM_INPUT)
- {
- if (next == NULL_RTX || GET_MODE (next) == TImode
- /* NOTE: The scheduler incorrectly believes a call
- insn can execute in the same cycle as the insn
- after the call. This is of course impossible.
- Really we need to fix the scheduler somehow, so
- the code after the call gets scheduled
- optimally. */
- || CALL_P (insn))
- {
- /* Mark current insn as the end of a bundle. */
- PUT_MODE (insn, QImode);
- }
- else
- {
- /* Mark it as part of a bundle. */
- PUT_MODE (insn, SImode);
- }
- }
-
- /* Delete barrier insns, because they can mess up the
- emitting of bundle braces. If it is end-of-bundle, then
- the previous insn must be marked end-of-bundle. */
- if (get_attr_type (insn) == TYPE_NOTHING) {
- if (GET_MODE (insn) == QImode && prev != NULL
- && GET_MODE (prev) == SImode)
- {
- PUT_MODE (prev, QImode);
- }
- delete_insn (insn);
-
- // Note: prev remains the same for next iteration.
- }
- else
- prev = insn;
- }
- }
-}
-
-
-/* Replace OLD_INSN with NEW_INSN. */
-static void
-replace_insns (rtx_insn *old_insn, rtx_insn *new_insns)
-{
- if (new_insns)
- emit_insn_before (new_insns, old_insn);
-
- delete_insn (old_insn);
-}
-
-
-/* Returns true if INSN is the first instruction of a pc-relative
- address compuatation. */
-static bool
-match_pcrel_step1 (rtx insn)
-{
- rtx pattern = PATTERN (insn);
- rtx src;
-
- if (GET_CODE (pattern) != SET)
- return false;
-
- src = SET_SRC (pattern);
-
- return (GET_CODE (src) == CONST
- && GET_CODE (XEXP (src, 0)) == UNSPEC
- && XINT (XEXP (src, 0), 1) == UNSPEC_HW1_LAST_PCREL);
-}
-
-
-/* Do the first replacement step in tilegx_fixup_pcrel_references. */
-static void
-replace_mov_pcrel_step1 (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx unspec;
- rtx opnds[2];
- rtx_insn *new_insns;
-
- gcc_assert (GET_CODE (pattern) == SET);
- opnds[0] = SET_DEST (pattern);
-
- gcc_assert (GET_CODE (SET_SRC (pattern)) == CONST);
-
- unspec = XEXP (SET_SRC (pattern), 0);
- gcc_assert (GET_CODE (unspec) == UNSPEC);
- gcc_assert (XINT (unspec, 1) == UNSPEC_HW1_LAST_PCREL);
- opnds[1] = XVECEXP (unspec, 0, 0);
-
- /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */
- if (GET_CODE (opnds[1]) != SYMBOL_REF)
- return;
-
- start_sequence ();
-
- if (flag_pic != 1)
- {
- if (TARGET_32BIT)
- emit_insn (gen_mov_got32_step1_32bit (opnds[0], opnds[1]));
- else
- emit_insn (gen_mov_got32_step1 (opnds[0], opnds[1]));
- }
-
- new_insns = get_insns ();
- end_sequence ();
-
- replace_insns (insn, new_insns);
-}
-
-
-/* Returns true if INSN is the second instruction of a pc-relative
- address compuatation. */
-static bool
-match_pcrel_step2 (rtx_insn *insn)
-{
- rtx unspec;
- rtx addr;
-
- if (TARGET_32BIT)
- {
- if (recog_memoized (insn) != CODE_FOR_insn_addr_shl16insli_32bit)
- return false;
- }
- else
- {
- if (recog_memoized (insn) != CODE_FOR_insn_addr_shl16insli)
- return false;
- }
-
- unspec = SET_SRC (PATTERN (insn));
- addr = XVECEXP (unspec, 0, 1);
-
- return (GET_CODE (addr) == CONST
- && GET_CODE (XEXP (addr, 0)) == UNSPEC
- && XINT (XEXP (addr, 0), 1) == UNSPEC_HW0_PCREL);
-}
-
-
-/* Do the second replacement step in tilegx_fixup_pcrel_references. */
-static void
-replace_mov_pcrel_step2 (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx unspec;
- rtx addr;
- rtx opnds[3];
- rtx_insn *new_insns;
- rtx got_rtx = tilegx_got_rtx ();
-
- gcc_assert (GET_CODE (pattern) == SET);
- opnds[0] = SET_DEST (pattern);
-
- unspec = SET_SRC (pattern);
- gcc_assert (GET_CODE (unspec) == UNSPEC);
- gcc_assert (XINT (unspec, 1) == UNSPEC_INSN_ADDR_SHL16INSLI);
-
- opnds[1] = XVECEXP (unspec, 0, 0);
-
- addr = XVECEXP (unspec, 0, 1);
- gcc_assert (GET_CODE (addr) == CONST);
-
- unspec = XEXP (addr, 0);
- gcc_assert (GET_CODE (unspec) == UNSPEC);
- gcc_assert (XINT (unspec, 1) == UNSPEC_HW0_PCREL);
- opnds[2] = XVECEXP (unspec, 0, 0);
-
- /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */
- if (GET_CODE (opnds[2]) != SYMBOL_REF)
- return;
-
- start_sequence ();
-
- if (flag_pic == 1)
- {
- if (TARGET_32BIT)
- emit_insn (gen_add_got16_32bit (opnds[0], got_rtx, opnds[2]));
- else
- emit_insn (gen_add_got16 (opnds[0], got_rtx, opnds[2]));
- }
- else
- {
- if (TARGET_32BIT)
- emit_insn (gen_mov_got32_step2_32bit
- (opnds[0], opnds[1], opnds[2]));
- else
- emit_insn (gen_mov_got32_step2 (opnds[0], opnds[1], opnds[2]));
- }
-
- new_insns = get_insns ();
- end_sequence ();
-
- replace_insns (insn, new_insns);
-}
-
-
-/* Do the third replacement step in tilegx_fixup_pcrel_references. */
-static void
-replace_mov_pcrel_step3 (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx unspec;
- rtx opnds[4];
- rtx_insn *new_insns;
- rtx got_rtx = tilegx_got_rtx ();
- rtx text_label_rtx = tilegx_text_label_rtx ();
-
- gcc_assert (GET_CODE (pattern) == SET);
- opnds[0] = SET_DEST (pattern);
-
- unspec = SET_SRC (pattern);
- gcc_assert (GET_CODE (unspec) == UNSPEC);
- gcc_assert (XINT (unspec, 1) == UNSPEC_MOV_PCREL_STEP3);
-
- opnds[1] = got_rtx;
-
- if (XVECEXP (unspec, 0, 0) == text_label_rtx)
- opnds[2] = XVECEXP (unspec, 0, 1);
- else
- {
- gcc_assert (XVECEXP (unspec, 0, 1) == text_label_rtx);
- opnds[2] = XVECEXP (unspec, 0, 0);
- }
-
- opnds[3] = XVECEXP (unspec, 0, 2);
-
- /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */
- if (GET_CODE (opnds[3]) != SYMBOL_REF)
- return;
-
- start_sequence ();
-
- if (flag_pic == 1)
- {
- emit_move_insn (opnds[0], gen_const_mem (Pmode, opnds[2]));
- }
- else
- {
- emit_move_insn (opnds[0], gen_rtx_PLUS (Pmode, opnds[1], opnds[2]));
- emit_move_insn (opnds[0], gen_const_mem (Pmode, opnds[0]));
- }
-
- new_insns = get_insns ();
- end_sequence ();
-
- replace_insns (insn, new_insns);
-}
-
-
-/* We generate PC relative SYMBOL_REFs as an optimization, to avoid
- going through the GOT when the symbol is local to the compilation
- unit. But such a symbol requires that the common text_label that
- we generate at the beginning of the function be in the same section
- as the reference to the SYMBOL_REF. This may not be true if we
- generate hot/cold sections. This function looks for such cases and
- replaces such references with the longer sequence going through the
- GOT.
-
- We expect following instruction sequence:
- moveli tmp1, hw1_last(x-.L_PICLNK) [1]
- shl16insli tmp2, tmp1, hw0(x-.L_PICLNK) [2]
- add<x> tmp3, txt_label_reg, tmp2 [3]
-
- If we're compiling -fpic, we replace with the following sequence
- (the numbers in brackets match the instructions they're replacing
- above).
-
- add<x>li tmp2, got_reg, hw0_last_got(x) [2]
- ld<4> tmp3, tmp2 [3]
-
- If we're compiling -fPIC, we replace the first instruction with:
-
- moveli tmp1, hw1_last_got(x) [1]
- shl16insli tmp2, tmp1, hw0_got(x) [2]
- add<x> tmp3, got_reg, tmp2 [3]
- ld<4> tmp3, tmp3 [3]
-
- Note that we're careful to disturb the instruction sequence as
- little as possible, since it's very late in the compilation
- process. */
-static void
-tilegx_fixup_pcrel_references (void)
-{
- rtx_insn *insn, *next_insn;
- bool same_section_as_entry = true;
-
- for (insn = get_insns (); insn; insn = next_insn)
- {
- next_insn = NEXT_INSN (insn);
-
- if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
- {
- same_section_as_entry = !same_section_as_entry;
- continue;
- }
-
- if (same_section_as_entry)
- continue;
-
- if (!(INSN_P (insn)
- && GET_CODE (PATTERN (insn)) != USE
- && GET_CODE (PATTERN (insn)) != CLOBBER))
- continue;
-
- if (TARGET_32BIT)
- {
- if (match_pcrel_step1 (insn))
- replace_mov_pcrel_step1 (insn);
- else if (match_pcrel_step2 (insn))
- replace_mov_pcrel_step2 (insn);
- else if (recog_memoized (insn) == CODE_FOR_mov_pcrel_step3_32bit)
- replace_mov_pcrel_step3 (insn);
- }
- else
- {
- if (match_pcrel_step1 (insn))
- replace_mov_pcrel_step1 (insn);
- else if (match_pcrel_step2 (insn))
- replace_mov_pcrel_step2 (insn);
- else if (recog_memoized (insn) == CODE_FOR_mov_pcrel_step3)
- replace_mov_pcrel_step3 (insn);
- }
- }
-}
-
-
-/* Ensure that no var tracking notes are emitted in the middle of a
- three-instruction bundle. */
-static void
-reorder_var_tracking_notes (void)
-{
- basic_block bb;
- FOR_EACH_BB_FN (bb, cfun)
- {
- rtx_insn *insn, *next;
- rtx_insn *queue = NULL;
- bool in_bundle = false;
-
- for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = next)
- {
- next = NEXT_INSN (insn);
-
- if (INSN_P (insn))
- {
- /* Emit queued up notes at the last instruction of a
- bundle. */
- if (GET_MODE (insn) == QImode)
- {
- while (queue)
- {
- rtx_insn *next_queue = PREV_INSN (queue);
- SET_PREV_INSN (NEXT_INSN (insn)) = queue;
- SET_NEXT_INSN (queue) = NEXT_INSN (insn);
- SET_NEXT_INSN (insn) = queue;
- SET_PREV_INSN (queue) = insn;
- queue = next_queue;
- }
- in_bundle = false;
- }
- else if (GET_MODE (insn) == SImode)
- in_bundle = true;
- }
- else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
- {
- if (in_bundle)
- {
- rtx_insn *prev = PREV_INSN (insn);
- SET_PREV_INSN (next) = prev;
- SET_NEXT_INSN (prev) = next;
-
- SET_PREV_INSN (insn) = queue;
- queue = insn;
- }
- }
- }
- }
-}
-
-
-/* Perform machine dependent operations on the rtl chain INSNS. */
-static void
-tilegx_reorg (void)
-{
- /* We are freeing block_for_insn in the toplev to keep compatibility
- with old MDEP_REORGS that are not CFG based. Recompute it
- now. */
- compute_bb_for_insn ();
-
- if (flag_reorder_blocks_and_partition)
- {
- tilegx_fixup_pcrel_references ();
- }
-
- if (flag_schedule_insns_after_reload)
- {
- split_all_insns ();
-
- timevar_push (TV_SCHED2);
- schedule_insns ();
- timevar_pop (TV_SCHED2);
-
- /* Examine the schedule to group into bundles. */
- tilegx_gen_bundles ();
- }
-
- df_analyze ();
-
- if (flag_var_tracking)
- {
- timevar_push (TV_VAR_TRACKING);
- variable_tracking_main ();
- reorder_var_tracking_notes ();
- timevar_pop (TV_VAR_TRACKING);
- }
-
- df_finish_pass (false);
-}
-
-
-
-/* Assembly */
-
-/* Select a format to encode pointers in exception handling data.
- CODE is 0 for data, 1 for code labels, 2 for function pointers.
- GLOBAL is true if the symbol may be affected by dynamic
- relocations. */
-int
-tilegx_asm_preferred_eh_data_format (int code ATTRIBUTE_UNUSED, int global)
-{
- int type = TARGET_32BIT ? DW_EH_PE_sdata4 : DW_EH_PE_sdata8;
- return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type;
-}
-
-
-/* Implement TARGET_ASM_OUTPUT_MI_THUNK. */
-static void
-tilegx_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
- HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
- tree function)
-{
- const char *fnname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (thunk_fndecl));
- rtx this_rtx, funexp, addend;
- rtx_insn *insn;
-
- /* Pretend to be a post-reload pass while generating rtl. */
- reload_completed = 1;
-
- /* Mark the end of the (empty) prologue. */
- emit_note (NOTE_INSN_PROLOGUE_END);
-
- /* Find the "this" pointer. If the function returns a structure,
- the structure return pointer is in $1. */
- if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
- this_rtx = gen_rtx_REG (Pmode, 1);
- else
- this_rtx = gen_rtx_REG (Pmode, 0);
-
- /* Add DELTA to THIS_RTX. */
- if (!(delta >= -32868 && delta <= 32767))
- {
- addend = gen_rtx_REG (Pmode, 29);
- emit_move_insn (addend, GEN_INT (delta));
- }
- else
- addend = GEN_INT (delta);
-
- if (TARGET_32BIT)
- emit_insn (gen_addsi3 (this_rtx, this_rtx, addend));
- else
- emit_insn (gen_adddi3 (this_rtx, this_rtx, addend));
-
- /* If needed, add *(*THIS_RTX + VCALL_OFFSET) to THIS_RTX. */
- if (vcall_offset)
- {
- rtx tmp;
-
- tmp = gen_rtx_REG (Pmode, 29);
- emit_move_insn (tmp, gen_rtx_MEM (Pmode, this_rtx));
-
- if (!(vcall_offset >= -32868 && vcall_offset <= 32767))
- {
- addend = gen_rtx_REG (Pmode, 28);
- emit_move_insn (addend, GEN_INT (vcall_offset));
- }
- else
- addend = GEN_INT (vcall_offset);
-
- if (TARGET_32BIT)
- emit_insn (gen_addsi3 (tmp, tmp, addend));
- else
- emit_insn (gen_adddi3 (tmp, tmp, addend));
-
- emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp));
-
- if (TARGET_32BIT)
- emit_insn (gen_addsi3 (this_rtx, this_rtx, tmp));
- else
- emit_insn (gen_adddi3 (this_rtx, this_rtx, tmp));
- }
-
- /* Generate a tail call to the target function. */
- if (!TREE_USED (function))
- {
- assemble_external (function);
- TREE_USED (function) = 1;
- }
- funexp = XEXP (DECL_RTL (function), 0);
- funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
- insn = emit_call_insn (gen_sibcall (funexp, const0_rtx));
- SIBLING_CALL_P (insn) = 1;
-
- /* Run just enough of rest_of_compilation to get the insns emitted.
- There's not really enough bulk here to make other passes such as
- instruction scheduling worth while.
-
- We don't currently bundle, but the instruciton sequence is all
- serial except for the tail call, so we're only wasting one cycle.
- */
- insn = get_insns ();
- shorten_branches (insn);
- assemble_start_function (thunk_fndecl, fnname);
- final_start_function (insn, file, 1);
- final (insn, file, 1);
- final_end_function ();
- assemble_end_function (thunk_fndecl, fnname);
-
- /* Stop pretending to be a post-reload pass. */
- reload_completed = 0;
-}
-
-
-/* Implement TARGET_ASM_TRAMPOLINE_TEMPLATE. */
-static void
-tilegx_asm_trampoline_template (FILE *file)
-{
- int ptr_mode_size = GET_MODE_SIZE (ptr_mode);
- if (TARGET_32BIT)
- {
- fprintf (file, "\tlnk r10\n");
- fprintf (file, "\taddxi r10, r10, 32\n");
- fprintf (file, "\tld4s_add r11, r10, %d\n", ptr_mode_size);
- fprintf (file, "\tld4s r10, r10\n");
- fprintf (file, "\tjr r11\n");
- fprintf (file, "\t.word 0 # <function address>\n");
- fprintf (file, "\t.word 0 # <static chain value>\n");
- }
- else
- {
- fprintf (file, "\tlnk r10\n");
- fprintf (file, "\taddi r10, r10, 32\n");
- fprintf (file, "\tld_add r11, r10, %d\n", ptr_mode_size);
- fprintf (file, "\tld r10, r10\n");
- fprintf (file, "\tjr r11\n");
- fprintf (file, "\t.quad 0 # <function address>\n");
- fprintf (file, "\t.quad 0 # <static chain value>\n");
- }
-}
-
-
-/* Implement TARGET_TRAMPOLINE_INIT. */
-static void
-tilegx_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
-{
- rtx fnaddr, chaddr;
- rtx mem;
- rtx begin_addr, end_addr;
- int ptr_mode_size = GET_MODE_SIZE (ptr_mode);
-
- fnaddr = copy_to_reg (XEXP (DECL_RTL (fndecl), 0));
- chaddr = copy_to_reg (static_chain);
-
- emit_block_move (m_tramp, assemble_trampoline_template (),
- GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
-
- mem = adjust_address (m_tramp, ptr_mode,
- TRAMPOLINE_SIZE - 2 * ptr_mode_size);
- emit_move_insn (mem, fnaddr);
- mem = adjust_address (m_tramp, ptr_mode,
- TRAMPOLINE_SIZE - ptr_mode_size);
- emit_move_insn (mem, chaddr);
-
- /* Get pointers to the beginning and end of the code block. */
- begin_addr = force_reg (Pmode, XEXP (m_tramp, 0));
- end_addr = force_reg (Pmode, plus_constant (Pmode, XEXP (m_tramp, 0),
- TRAMPOLINE_SIZE));
-
- maybe_emit_call_builtin___clear_cache (begin_addr, end_addr);
-}
-
-
-/* Implement TARGET_PRINT_OPERAND. */
-static void
-tilegx_print_operand (FILE *file, rtx x, int code)
-{
- switch (code)
- {
- case 'c':
- /* Print the compare operator opcode for conditional moves. */
- switch (GET_CODE (x))
- {
- case EQ:
- fputs ("z", file);
- break;
- case NE:
- fputs ("nz", file);
- break;
- default:
- output_operand_lossage ("invalid %%c operand");
- }
- return;
-
- case 'C':
- /* Print the compare operator opcode for conditional moves. */
- switch (GET_CODE (x))
- {
- case EQ:
- fputs ("nz", file);
- break;
- case NE:
- fputs ("z", file);
- break;
- default:
- output_operand_lossage ("invalid %%C operand");
- }
- return;
-
- case 'd':
- {
- /* Print the compare operator opcode for conditional moves. */
- switch (GET_CODE (x))
- {
- case EQ:
- fputs ("eq", file);
- break;
- case NE:
- fputs ("ne", file);
- break;
- default:
- output_operand_lossage ("invalid %%d operand");
- }
- return;
- }
-
- case 'D':
- {
- /* Print the compare operator opcode for conditional moves. */
- switch (GET_CODE (x))
- {
- case EQ:
- fputs ("ne", file);
- break;
- case NE:
- fputs ("eq", file);
- break;
- default:
- output_operand_lossage ("invalid %%D operand");
- }
- return;
- }
-
- case 'H':
- {
- if (GET_CODE (x) == CONST
- && GET_CODE (XEXP (x, 0)) == UNSPEC)
- {
- rtx addr = XVECEXP (XEXP (x, 0), 0, 0);
- int unspec = XINT (XEXP (x, 0), 1);
- const char *opstr = NULL;
- switch (unspec)
- {
- case UNSPEC_HW0:
- case UNSPEC_HW0_PCREL:
- opstr = "hw0";
- break;
- case UNSPEC_HW1:
- case UNSPEC_HW1_PCREL:
- opstr = "hw1";
- break;
- case UNSPEC_HW2:
- opstr = "hw2";
- break;
- case UNSPEC_HW3:
- opstr = "hw3";
- break;
- case UNSPEC_HW0_LAST:
- opstr = "hw0_last";
- break;
- case UNSPEC_HW1_LAST:
- case UNSPEC_HW1_LAST_PCREL:
- opstr = "hw1_last";
- break;
- case UNSPEC_HW2_LAST:
- case UNSPEC_HW2_LAST_PCREL:
- opstr = "hw2_last";
- break;
- case UNSPEC_HW0_GOT:
- opstr = "hw0_got";
- break;
- case UNSPEC_HW0_LAST_GOT:
- opstr = "hw0_last_got";
- break;
- case UNSPEC_HW1_LAST_GOT:
- opstr = "hw1_last_got";
- break;
- case UNSPEC_HW0_TLS_GD:
- opstr = "hw0_tls_gd";
- break;
- case UNSPEC_HW1_LAST_TLS_GD:
- opstr = "hw1_last_tls_gd";
- break;
- case UNSPEC_HW0_TLS_IE:
- opstr = "hw0_tls_ie";
- break;
- case UNSPEC_HW1_LAST_TLS_IE:
- opstr = "hw1_last_tls_ie";
- break;
- case UNSPEC_HW0_TLS_LE:
- opstr = "hw0_tls_le";
- break;
- case UNSPEC_HW1_LAST_TLS_LE:
- opstr = "hw1_last_tls_le";
- break;
- case UNSPEC_HW0_PLT_PCREL:
- opstr = "hw0_plt";
- break;
- case UNSPEC_HW1_PLT_PCREL:
- opstr = "hw1_plt";
- break;
- case UNSPEC_HW1_LAST_PLT_PCREL:
- opstr = "hw1_last_plt";
- break;
- case UNSPEC_HW2_LAST_PLT_PCREL:
- opstr = "hw2_last_plt";
- break;
- default:
- output_operand_lossage ("invalid %%H specifier");
- }
-
- fputs (opstr, file);
- fputc ('(', file);
- output_addr_const (file, addr);
-
- if (unspec == UNSPEC_HW0_PCREL
- || unspec == UNSPEC_HW1_PCREL
- || unspec == UNSPEC_HW1_LAST_PCREL
- || unspec == UNSPEC_HW2_LAST_PCREL
- || unspec == UNSPEC_HW0_PLT_PCREL
- || unspec == UNSPEC_HW1_PLT_PCREL
- || unspec == UNSPEC_HW1_LAST_PLT_PCREL
- || unspec == UNSPEC_HW2_LAST_PLT_PCREL)
- {
- rtx addr2 = XVECEXP (XEXP (x, 0), 0, 1);
- fputs (" - " , file);
- output_addr_const (file, addr2);
- }
-
- fputc (')', file);
- return;
- }
- else if (symbolic_operand (x, VOIDmode))
- {
- output_addr_const (file, x);
- return;
- }
- }
- /* FALLTHRU */
-
- case 'h':
- {
- /* Print the low 16 bits of a constant. */
- HOST_WIDE_INT i;
- if (CONST_INT_P (x))
- i = INTVAL (x);
- else if (GET_CODE (x) == CONST_DOUBLE)
- i = CONST_DOUBLE_LOW (x);
- else
- {
- output_operand_lossage ("invalid %%h operand");
- return;
- }
- i = trunc_int_for_mode (i, HImode);
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
- return;
- }
-
- case 'I':
- /* Print an auto-inc memory operand. */
- if (!MEM_P (x))
- {
- output_operand_lossage ("invalid %%I operand");
- return;
- }
-
- output_memory_autoinc_first = true;
- output_address (GET_MODE (x), XEXP (x, 0));
- return;
-
- case 'i':
- /* Print an auto-inc memory operand. */
- if (!MEM_P (x))
- {
- output_operand_lossage ("invalid %%i operand");
- return;
- }
-
- output_memory_autoinc_first = false;
- output_address (GET_MODE (x), XEXP (x, 0));
- return;
-
- case 'j':
- {
- /* Print the low 8 bits of a constant. */
- HOST_WIDE_INT i;
- if (CONST_INT_P (x))
- i = INTVAL (x);
- else if (GET_CODE (x) == CONST_DOUBLE)
- i = CONST_DOUBLE_LOW (x);
- else if (GET_CODE (x) == CONST_VECTOR
- && CONST_INT_P (CONST_VECTOR_ELT (x, 0)))
- i = INTVAL (CONST_VECTOR_ELT (x, 0));
- else
- {
- output_operand_lossage ("invalid %%j operand");
- return;
- }
- i = trunc_int_for_mode (i, QImode);
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
- return;
- }
-
- case 'P':
- {
- /* Print a constant plus one. */
- if (!CONST_INT_P (x))
- {
- output_operand_lossage ("invalid %%P operand");
- return;
- }
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) + 1);
- return;
- }
-
- case 'm':
- case 'M':
- {
- /* Print a bfextu-style bit range. */
- int first_bit, last_bit;
- HOST_WIDE_INT flip = (code == 'm') ? ~0 : 0;
-
- if (!CONST_INT_P (x)
- || !tilegx_bitfield_operand_p (INTVAL (x) ^ flip,
- &first_bit, &last_bit))
- {
- output_operand_lossage ("invalid %%%c operand", code);
- return;
- }
-
- fprintf (file, "%d, %d", first_bit, last_bit);
- return;
- }
-
- case 'N':
- {
- const char *reg = NULL;
-
- /* Print a network register. */
- if (!CONST_INT_P (x))
- {
- output_operand_lossage ("invalid %%N operand");
- return;
- }
-
- switch (INTVAL (x))
- {
- case TILEGX_NETREG_IDN0: reg = "idn0"; break;
- case TILEGX_NETREG_IDN1: reg = "idn1"; break;
- case TILEGX_NETREG_UDN0: reg = "udn0"; break;
- case TILEGX_NETREG_UDN1: reg = "udn1"; break;
- case TILEGX_NETREG_UDN2: reg = "udn2"; break;
- case TILEGX_NETREG_UDN3: reg = "udn3"; break;
- default:
- gcc_unreachable ();
- }
-
- fprintf (file, reg);
- return;
- }
-
- case 'p':
- if (GET_CODE (x) == SYMBOL_REF)
- {
- if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
- fprintf (file, "plt(");
- output_addr_const (file, x);
- if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
- fprintf (file, ")");
- }
- else
- output_addr_const (file, x);
- return;
-
- case 'r':
- /* In this case we need a register. Use 'zero' if the operand
- is const0_rtx. */
- if (x == const0_rtx
- || (GET_MODE (x) != VOIDmode && x == CONST0_RTX (GET_MODE (x))))
- {
- fputs ("zero", file);
- return;
- }
- else if (!REG_P (x))
- {
- output_operand_lossage ("invalid operand for 'r' specifier");
- return;
- }
- /* FALLTHRU */
-
- case 0:
- if (REG_P (x))
- {
- fprintf (file, "%s", reg_names[REGNO (x)]);
- return;
- }
- else if (MEM_P (x))
- {
- output_address (VOIDmode, XEXP (x, 0));
- return;
- }
- else
- {
- output_addr_const (file, x);
- return;
- }
- }
-
- debug_rtx (x);
- output_operand_lossage ("unable to print out operand yet; code == %d (%c)",
- code, code);
-}
-
-
-/* Implement TARGET_PRINT_OPERAND_ADDRESS. */
-static void
-tilegx_print_operand_address (FILE *file, machine_mode mode, rtx addr)
-{
- if (GET_CODE (addr) == POST_DEC
- || GET_CODE (addr) == POST_INC)
- {
- int offset = GET_MODE_SIZE (mode);
-
- gcc_assert (mode != VOIDmode);
-
- if (output_memory_autoinc_first)
- fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
- else
- fprintf (file, "%d",
- GET_CODE (addr) == POST_DEC ? -offset : offset);
- }
- else if (GET_CODE (addr) == POST_MODIFY)
- {
- gcc_assert (mode != VOIDmode);
-
- gcc_assert (GET_CODE (XEXP (addr, 1)) == PLUS);
-
- if (output_memory_autoinc_first)
- fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
- else
- fprintf (file, HOST_WIDE_INT_PRINT_DEC,
- INTVAL (XEXP (XEXP (addr, 1), 1)));
- }
- else
- tilegx_print_operand (file, addr, 'r');
-}
-
-
-/* Machine mode of current insn, for determining curly brace
- placement. */
-static machine_mode insn_mode;
-
-
-/* Implement FINAL_PRESCAN_INSN. This is used to emit bundles. */
-void
-tilegx_final_prescan_insn (rtx_insn *insn)
-{
- /* Record this for tilegx_asm_output_opcode to examine. */
- insn_mode = GET_MODE (insn);
-}
-
-
-/* While emitting asm, are we currently inside '{' for a bundle? */
-static bool tilegx_in_bundle = false;
-
-/* Implement ASM_OUTPUT_OPCODE. Prepend/append curly braces as
- appropriate given the bundling information recorded by
- tilegx_gen_bundles. */
-const char *
-tilegx_asm_output_opcode (FILE *stream, const char *code)
-{
- bool pseudo = !strcmp (code, "pseudo");
-
- if (!tilegx_in_bundle && insn_mode == SImode)
- {
- /* Start a new bundle. */
- fprintf (stream, "{\n\t");
- tilegx_in_bundle = true;
- }
-
- if (tilegx_in_bundle && insn_mode == QImode)
- {
- /* Close an existing bundle. */
- static char buf[100];
-
- gcc_assert (strlen (code) + 3 + 1 < sizeof (buf));
-
- strcpy (buf, pseudo ? "" : code);
- strcat (buf, "\n\t}");
- tilegx_in_bundle = false;
-
- return buf;
- }
- else
- {
- return pseudo ? "" : code;
- }
-}
-
-
-/* Output assembler code to FILE to increment profiler label # LABELNO
- for profiling a function entry. */
-void
-tilegx_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
-{
- if (tilegx_in_bundle)
- {
- fprintf (file, "\t}\n");
- }
-
- if (cfun->static_chain_decl)
- {
- fprintf (file,
- "\t{\n"
- "\taddi\tsp, sp, -16\n"
- "\tst\tsp, r10\n"
- "\t}\n");
- }
-
- if (flag_pic)
- {
- fprintf (file,
- "\t{\n"
- "\tmove\tr10, lr\n"
- "\tjal\tplt(%s)\n"
- "\t}\n", MCOUNT_NAME);
- }
- else
- {
- fprintf (file,
- "\t{\n"
- "\tmove\tr10, lr\n"
- "\tjal\t%s\n"
- "\t}\n", MCOUNT_NAME);
- }
-
- if (cfun->static_chain_decl)
- {
- fprintf (file,
- "\taddi\tsp, sp, 16\n"
- "\tld\tr10, sp\n");
- }
-
- tilegx_in_bundle = false;
-}
-
-
-/* Implement TARGET_ASM_FILE_END. */
-static void
-tilegx_file_end (void)
-{
- if (NEED_INDICATE_EXEC_STACK)
- file_end_indicate_exec_stack ();
-}
-
-/* Implement TARGET_TRULY_NOOP_TRUNCATION. We represent all SI values
- as sign-extended DI values in registers. */
-
-static bool
-tilegx_truly_noop_truncation (poly_uint64 outprec, poly_uint64 inprec)
-{
- return inprec <= 32 || outprec > 32;
-}
-
-#undef TARGET_HAVE_TLS
-#define TARGET_HAVE_TLS HAVE_AS_TLS
-
-#undef TARGET_OPTION_OVERRIDE
-#define TARGET_OPTION_OVERRIDE tilegx_option_override
-
-#ifdef TARGET_THREAD_SSP_OFFSET
-#undef TARGET_STACK_PROTECT_GUARD
-#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
-#endif
-
-#undef TARGET_SCALAR_MODE_SUPPORTED_P
-#define TARGET_SCALAR_MODE_SUPPORTED_P tilegx_scalar_mode_supported_p
-
-#undef TARGET_VECTOR_MODE_SUPPORTED_P
-#define TARGET_VECTOR_MODE_SUPPORTED_P tilegx_vector_mode_supported_p
-
-#undef TARGET_CANNOT_FORCE_CONST_MEM
-#define TARGET_CANNOT_FORCE_CONST_MEM tilegx_cannot_force_const_mem
-
-#undef TARGET_FUNCTION_OK_FOR_SIBCALL
-#define TARGET_FUNCTION_OK_FOR_SIBCALL tilegx_function_ok_for_sibcall
-
-#undef TARGET_PASS_BY_REFERENCE
-#define TARGET_PASS_BY_REFERENCE tilegx_pass_by_reference
-
-#undef TARGET_RETURN_IN_MSB
-#define TARGET_RETURN_IN_MSB tilegx_return_in_msb
-
-#undef TARGET_RETURN_IN_MEMORY
-#define TARGET_RETURN_IN_MEMORY tilegx_return_in_memory
-
-#undef TARGET_MODE_REP_EXTENDED
-#define TARGET_MODE_REP_EXTENDED tilegx_mode_rep_extended
-
-#undef TARGET_FUNCTION_ARG_BOUNDARY
-#define TARGET_FUNCTION_ARG_BOUNDARY tilegx_function_arg_boundary
-
-#undef TARGET_FUNCTION_ARG
-#define TARGET_FUNCTION_ARG tilegx_function_arg
-
-#undef TARGET_FUNCTION_ARG_ADVANCE
-#define TARGET_FUNCTION_ARG_ADVANCE tilegx_function_arg_advance
-
-#undef TARGET_FUNCTION_VALUE
-#define TARGET_FUNCTION_VALUE tilegx_function_value
-
-#undef TARGET_LIBCALL_VALUE
-#define TARGET_LIBCALL_VALUE tilegx_libcall_value
-
-#undef TARGET_FUNCTION_VALUE_REGNO_P
-#define TARGET_FUNCTION_VALUE_REGNO_P tilegx_function_value_regno_p
-
-#undef TARGET_PROMOTE_FUNCTION_MODE
-#define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote
-
-#undef TARGET_PROMOTE_PROTOTYPES
-#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_false
-
-#undef TARGET_BUILD_BUILTIN_VA_LIST
-#define TARGET_BUILD_BUILTIN_VA_LIST tilegx_build_builtin_va_list
-
-#undef TARGET_EXPAND_BUILTIN_VA_START
-#define TARGET_EXPAND_BUILTIN_VA_START tilegx_va_start
-
-#undef TARGET_SETUP_INCOMING_VARARGS
-#define TARGET_SETUP_INCOMING_VARARGS tilegx_setup_incoming_varargs
-
-#undef TARGET_GIMPLIFY_VA_ARG_EXPR
-#define TARGET_GIMPLIFY_VA_ARG_EXPR tilegx_gimplify_va_arg_expr
-
-#undef TARGET_RTX_COSTS
-#define TARGET_RTX_COSTS tilegx_rtx_costs
-
-#undef TARGET_EXPAND_TO_RTL_HOOK
-#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
-
-#undef TARGET_SHIFT_TRUNCATION_MASK
-#define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
-
-#undef TARGET_INIT_LIBFUNCS
-#define TARGET_INIT_LIBFUNCS tilegx_init_libfuncs
-
-/* Limit to what we can reach in one addli. */
-#undef TARGET_MIN_ANCHOR_OFFSET
-#define TARGET_MIN_ANCHOR_OFFSET -32768
-#undef TARGET_MAX_ANCHOR_OFFSET
-#define TARGET_MAX_ANCHOR_OFFSET 32767
-
-#undef TARGET_LEGITIMATE_CONSTANT_P
-#define TARGET_LEGITIMATE_CONSTANT_P tilegx_legitimate_constant_p
-
-#undef TARGET_LRA_P
-#define TARGET_LRA_P hook_bool_void_false
-
-#undef TARGET_LEGITIMATE_ADDRESS_P
-#define TARGET_LEGITIMATE_ADDRESS_P tilegx_legitimate_address_p
-
-#undef TARGET_LEGITIMIZE_ADDRESS
-#define TARGET_LEGITIMIZE_ADDRESS tilegx_legitimize_address
-
-#undef TARGET_DELEGITIMIZE_ADDRESS
-#define TARGET_DELEGITIMIZE_ADDRESS tilegx_delegitimize_address
-
-#undef TARGET_INIT_BUILTINS
-#define TARGET_INIT_BUILTINS tilegx_init_builtins
-
-#undef TARGET_BUILTIN_DECL
-#define TARGET_BUILTIN_DECL tilegx_builtin_decl
-
-#undef TARGET_EXPAND_BUILTIN
-#define TARGET_EXPAND_BUILTIN tilegx_expand_builtin
-
-#undef TARGET_CONDITIONAL_REGISTER_USAGE
-#define TARGET_CONDITIONAL_REGISTER_USAGE tilegx_conditional_register_usage
-
-#undef TARGET_FRAME_POINTER_REQUIRED
-#define TARGET_FRAME_POINTER_REQUIRED tilegx_frame_pointer_required
-
-#undef TARGET_DELAY_SCHED2
-#define TARGET_DELAY_SCHED2 true
-
-#undef TARGET_DELAY_VARTRACK
-#define TARGET_DELAY_VARTRACK true
-
-#undef TARGET_SCHED_ISSUE_RATE
-#define TARGET_SCHED_ISSUE_RATE tilegx_issue_rate
-
-#undef TARGET_SCHED_ADJUST_COST
-#define TARGET_SCHED_ADJUST_COST tilegx_sched_adjust_cost
-
-#undef TARGET_MACHINE_DEPENDENT_REORG
-#define TARGET_MACHINE_DEPENDENT_REORG tilegx_reorg
-
-#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
-#define TARGET_ASM_CAN_OUTPUT_MI_THUNK \
- hook_bool_const_tree_hwi_hwi_const_tree_true
-
-#undef TARGET_ASM_OUTPUT_MI_THUNK
-#define TARGET_ASM_OUTPUT_MI_THUNK tilegx_output_mi_thunk
-
-#undef TARGET_ASM_TRAMPOLINE_TEMPLATE
-#define TARGET_ASM_TRAMPOLINE_TEMPLATE tilegx_asm_trampoline_template
-
-#undef TARGET_TRAMPOLINE_INIT
-#define TARGET_TRAMPOLINE_INIT tilegx_trampoline_init
-
-#undef TARGET_PRINT_OPERAND
-#define TARGET_PRINT_OPERAND tilegx_print_operand
-
-#undef TARGET_PRINT_OPERAND_ADDRESS
-#define TARGET_PRINT_OPERAND_ADDRESS tilegx_print_operand_address
-
-#undef TARGET_ASM_FILE_END
-#define TARGET_ASM_FILE_END tilegx_file_end
-
-#undef TARGET_ASM_ALIGNED_DI_OP
-#define TARGET_ASM_ALIGNED_DI_OP "\t.quad\t"
-
-#undef TARGET_CAN_USE_DOLOOP_P
-#define TARGET_CAN_USE_DOLOOP_P can_use_doloop_if_innermost
-
-#undef TARGET_TRULY_NOOP_TRUNCATION
-#define TARGET_TRULY_NOOP_TRUNCATION tilegx_truly_noop_truncation
-
-#undef TARGET_CONSTANT_ALIGNMENT
-#define TARGET_CONSTANT_ALIGNMENT constant_alignment_word_strings
-
-struct gcc_target targetm = TARGET_INITIALIZER;
-
-#include "gt-tilegx.h"
diff --git a/gcc/config/tilegx/tilegx.h b/gcc/config/tilegx/tilegx.h
deleted file mode 100644
index 3f1c25d..0000000
--- a/gcc/config/tilegx/tilegx.h
+++ /dev/null
@@ -1,530 +0,0 @@
-/* Definitions of target machine for GNU compiler for TILE-Gx.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-/* Default target_flags if no switches are specified */
-#ifndef TARGET_DEFAULT
-#define TARGET_DEFAULT 0
-#endif
-
-#ifndef TARGET_BIG_ENDIAN_DEFAULT
-#define TARGET_BIG_ENDIAN_DEFAULT 0
-#endif
-
-#ifndef TARGET_ENDIAN_DEFAULT
-#if TARGET_BIG_ENDIAN_DEFAULT
-#define TARGET_ENDIAN_DEFAULT MASK_BIG_ENDIAN
-#else
-#define TARGET_ENDIAN_DEFAULT 0
-#endif
-#endif
-
-/* This is used by tilegx_cpu_cpp_builtins to indicate the byte order
- we're compiling for. */
-#define TILEGX_CPU_CPP_ENDIAN_BUILTINS() \
- do \
- { \
- if (TARGET_BIG_ENDIAN) \
- builtin_define ("__BIG_ENDIAN__"); \
- else \
- builtin_define ("__LITTLE_ENDIAN__"); \
- } \
- while (0)
-
-#include "config/tilegx/tilegx-opts.h"
-
-
-/* Target CPU builtins. */
-#define TARGET_CPU_CPP_BUILTINS() \
- tilegx_cpu_cpp_builtins (pfile)
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE (TARGET_32BIT ? "int" : "long int")
-
-#undef SIZE_TYPE
-#define SIZE_TYPE (TARGET_32BIT ? "unsigned int" : "long unsigned int")
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE 32
-
-
-/* Target machine storage layout */
-
-#define BITS_BIG_ENDIAN 0
-#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
-#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
-#define FLOAT_WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
-
-#define UNITS_PER_WORD 8
-#define PARM_BOUNDARY BITS_PER_WORD
-#define STACK_BOUNDARY 128
-#define FUNCTION_BOUNDARY 64
-#define BIGGEST_ALIGNMENT 128
-#define STRICT_ALIGNMENT 1
-
-#define INT_TYPE_SIZE 32
-#define LONG_TYPE_SIZE (TARGET_32BIT ? 32 : 64)
-#define LONG_LONG_TYPE_SIZE 64
-#define FLOAT_TYPE_SIZE 32
-#define DOUBLE_TYPE_SIZE 64
-#define LONG_DOUBLE_TYPE_SIZE 64
-#define POINTER_SIZE LONG_TYPE_SIZE
-
-#define PCC_BITFIELD_TYPE_MATTERS 1
-#define FASTEST_ALIGNMENT 64
-#define BIGGEST_FIELD_ALIGNMENT 128
-#define WIDEST_HARDWARE_FP_SIZE 64
-
-/* Make arrays of chars word-aligned for the same reasons. */
-#define DATA_ALIGNMENT(TYPE, ALIGN) \
- (TREE_CODE (TYPE) == ARRAY_TYPE \
- && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
- && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
-
-/* Make local arrays of chars word-aligned for the same reasons. */
-#define LOCAL_ALIGNMENT(TYPE, ALIGN) DATA_ALIGNMENT (TYPE, ALIGN)
-
-
-/* Standard register usage. */
-
-#define FIRST_PSEUDO_REGISTER (64 + 4)
-
-#define FIXED_REGISTERS \
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1}
-#define CALL_REALLY_USED_REGISTERS \
- {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1}
-
-#define REG_ALLOC_ORDER { \
- 10, 11, 12, 13, 14, /* call used */ \
- 15, 16, 17, 18, 19, \
- 20, 21, 22, 23, 24, \
- 25, 26, 27, 28, 29, \
- \
- 9, 8, 7, 6, 5, /* argument */ \
- 4, 3, 2, 1, 0, \
- \
- 55, /* return address */ \
- \
- 30, 31, 32, 33, 34, /* call saved registers */ \
- 35, 36, 37, 38, 39, \
- 40, 41, 42, 43, 44, \
- 45, 46, 47, 48, 49, \
- 50, 51, \
- \
- 52, /* hard frame pointer */ \
- 53, 54, /* tp, sp */ \
- \
- 56, 57, 58, 59, 60, /* special purpose */ \
- 61, 62, 63, 64, 65, /* or fake registers */ \
- 66, 67 \
-}
-
-/* Register that holds an address into the text segment that can be
- used by pic code. */
-#define TILEGX_PIC_TEXT_LABEL_REGNUM (flag_pic ? 50 : INVALID_REGNUM)
-#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 51 : INVALID_REGNUM)
-#define HARD_FRAME_POINTER_REGNUM 52
-#define THREAD_POINTER_REGNUM 53
-#define STACK_POINTER_REGNUM 54
-#define TILEGX_LINK_REGNUM 55
-#define FRAME_POINTER_REGNUM 64
-#define ARG_POINTER_REGNUM 65
-/* SPR storing the comparison value for compare and exchange. */
-#define TILEGX_CMPEXCH_REGNUM 66
-/* Pseudo registers used to enforce order between instructions that
- touch the networks. */
-#define TILEGX_NETORDER_REGNUM 67
-#define STATIC_CHAIN_REGNUM 10
-
-
-enum reg_class
-{
- NO_REGS,
- R0_REGS,
- R1_REGS,
- R2_REGS,
- R3_REGS,
- R4_REGS,
- R5_REGS,
- R6_REGS,
- R7_REGS,
- R8_REGS,
- R9_REGS,
- R10_REGS,
- ALL_REGS,
- LIM_REG_CLASSES
-};
-
-#define N_REG_CLASSES (int) LIM_REG_CLASSES
-
-/* Since GENERAL_REGS is the same class as ALL_REGS, don't give it a
- different class number; just make it an alias. */
-#define GENERAL_REGS ALL_REGS
-
-#define REG_CLASS_NAMES \
- { \
- "NO_REGS", \
- "R0_REGS", \
- "R1_REGS", \
- "R2_REGS", \
- "R3_REGS", \
- "R4_REGS", \
- "R5_REGS", \
- "R6_REGS", \
- "R7_REGS", \
- "R8_REGS", \
- "R9_REGS", \
- "R10_REGS", \
- "ALL_REGS" \
- }
-
-#define REG_CLASS_CONTENTS \
- { \
- { 0 }, \
- { 1 << 0 }, \
- { 1 << 1 }, \
- { 1 << 2 }, \
- { 1 << 3 }, \
- { 1 << 4 }, \
- { 1 << 5 }, \
- { 1 << 6 }, \
- { 1 << 7 }, \
- { 1 << 8 }, \
- { 1 << 9 }, \
- { 1 << 10 }, \
- { 0xffffffff, 0xffffffff } \
- }
-
-#define REGNO_REG_CLASS(REGNO) \
- ((unsigned)(REGNO) <= 10 ? \
- (enum reg_class)(R0_REGS + (REGNO)) : ALL_REGS)
-
-#define INDEX_REG_CLASS NO_REGS
-#define BASE_REG_CLASS ALL_REGS
-
-#define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS)
-
-#define CLASS_MAX_NREGS(CLASS, MODE) \
- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-
-
-/* Stack layout; function entry, exit and calling. */
-
-#define STACK_GROWS_DOWNWARD 1
-#define FRAME_GROWS_DOWNWARD 1
-
-#define DYNAMIC_CHAIN_ADDRESS(FRAME) \
- plus_constant (Pmode, (FRAME), UNITS_PER_WORD)
-
-#define FIRST_PARM_OFFSET(FNDECL) 0
-
-#define ACCUMULATE_OUTGOING_ARGS 1
-
-#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
-
-#define INCOMING_FRAME_SP_OFFSET 0
-
-#define STACK_POINTER_OFFSET (2 * UNITS_PER_WORD)
-
-#define ARG_POINTER_CFA_OFFSET(FNDECL) (-STACK_POINTER_OFFSET)
-
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* The first 10 registers may hold return value. */
-#define TILEGX_NUM_RETURN_REGS 10
-
-/* The first 10 registers hold function arguments. */
-#define TILEGX_NUM_ARG_REGS 10
-
-#define FUNCTION_ARG_REGNO_P(N) ((N) < TILEGX_NUM_ARG_REGS)
-
-/* The type used to store the number of words of arguments scanned so
- far during argument scanning. This includes any space that is
- skipped. */
-#define CUMULATIVE_ARGS int
-
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
- ((CUM) = 0)
-
-
-#define ELIMINABLE_REGS \
- {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
- {ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
- {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
- {FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
-
-#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
- ((OFFSET) = tilegx_initial_elimination_offset((FROM),(TO)))
-
-#define PROFILE_BEFORE_PROLOGUE 1
-
-#define FUNCTION_PROFILER(FILE, LABELNO) \
- tilegx_function_profiler (FILE, LABELNO)
-
-#define TRAMPOLINE_SIZE (TARGET_32BIT ? 48 : 56)
-#define TRAMPOLINE_ALIGNMENT 64
-#define TRAMPOLINE_SECTION text_section
-
-
-/* Call frame debugging information. */
-
-#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, TILEGX_LINK_REGNUM)
-
-#define RETURN_ADDR_RTX tilegx_return_addr
-
-#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (TILEGX_LINK_REGNUM)
-
-#define DWARF_ZERO_REG 63
-
-#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N + 12) : INVALID_REGNUM)
-#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 11)
-#define EH_RETURN_HANDLER_RTX tilegx_eh_return_handler_rtx ()
-
-#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
- tilegx_asm_preferred_eh_data_format ((CODE), (GLOBAL))
-
-
-/* Addressing modes, and classification of registers for them. */
-
-#define HAVE_POST_INCREMENT 1
-#define HAVE_POST_DECREMENT 1
-#define HAVE_POST_MODIFY_DISP 1
-
-#define REGNO_OK_FOR_INDEX_P(regno) 0
-#define REGNO_OK_FOR_BASE_P(regno) \
- ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
-
-#define MAX_REGS_PER_ADDRESS 1
-
-#define CONSTANT_ADDRESS_P(X) 0
-
-#define LEGITIMATE_PIC_OPERAND_P(X) tilegx_legitimate_pic_operand_p (X)
-
-
-#define CASE_VECTOR_MODE Pmode
-#define CASE_VECTOR_PC_RELATIVE 0
-#define JUMP_TABLES_IN_TEXT_SECTION 0
-
-#define DEFAULT_SIGNED_CHAR 1
-
-#define MOVE_MAX UNITS_PER_WORD
-
-/* Use a value of 11 for MOVE_RATIO and friends, because TILEPro
- returns structs as large as 10 words in registers. Because of some
- some code generation inefficiency, we never get smaller code for
- turning that into a memcpy, so pick a value that guarantees this
- doesn't happen. */
-#define TILEGX_CALL_RATIO 11
-#define MOVE_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
-#define CLEAR_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
-#define SET_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
-
-#define WORD_REGISTER_OPERATIONS 1
-
-#define LOAD_EXTEND_OP(MODE) ((MODE) == SImode ? SIGN_EXTEND : ZERO_EXTEND)
-
-#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
- if (GET_MODE_CLASS (MODE) == MODE_INT \
- && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
- { \
- if ((MODE) == SImode) \
- (UNSIGNEDP) = 0; \
- (MODE) = DImode; \
- }
-
-/* Define SLOW_BYTE_ACCESS to avoid making a QI or HI mode
- register. */
-#define SLOW_BYTE_ACCESS 1
-
-#define SHIFT_COUNT_TRUNCATED 0
-
-#define SHORT_IMMEDIATES_SIGN_EXTEND 1
-
-#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 1)
-#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 1)
-
-#define Pmode (TARGET_32BIT ? SImode : DImode)
-
-#define STACK_SIZE_MODE Pmode
-
-#define STORE_FLAG_VALUE 1
-
-#define FUNCTION_MODE DImode
-
-#define NO_FUNCTION_CSE 1
-
-#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
- ((LENGTH) = tilegx_adjust_insn_length ((INSN), (LENGTH)))
-
-#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT
-
-#define BRANCH_COST(speed_p, predictable_p) ((predictable_p) ? 2 : 6)
-
-
-/* Control the assembler format that we output. */
-
-#undef NO_DOLLAR_IN_LABEL
-
-#define ASM_COMMENT_START "##"
-
-#define TEXT_SECTION_ASM_OP "\t.text"
-
-#define DATA_SECTION_ASM_OP "\t.data"
-
-#undef READONLY_DATA_SECTION_ASM_OP
-#define READONLY_DATA_SECTION_ASM_OP "\t.section\t.rodata, \"a\""
-
-#undef BSS_SECTION_ASM_OP
-#define BSS_SECTION_ASM_OP "\t.section\t.bss, \"wa\""
-
-#undef INIT_SECTION_ASM_OP
-#define INIT_SECTION_ASM_OP "\t.section\t.init, \"ax\""
-
-#undef FINI_SECTION_ASM_OP
-#define FINI_SECTION_ASM_OP "\t.section\t.fini, \"ax\""
-
-#define GLOBAL_ASM_OP ".global "
-
-#define SUPPORTS_WEAK 1
-
-#define USER_LABEL_PREFIX ""
-
-#define REGISTER_PREFIX ""
-#define REGISTER_NAMES \
- { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
- "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
- "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \
- "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", \
- "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", \
- "r48", "r49", "r50", "r51", "r52", "tp", "sp", "lr", \
- "?r56?","idn0", "idn1", "udn0", "udn1", "udn2", "udn3", "zero", \
- "?FRAME?", "?ARG?", "?CMPEXCH?", "?NET?" }
-
-#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
- tilegx_final_prescan_insn (insn)
-
-#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
- (PTR = tilegx_asm_output_opcode (STREAM, PTR))
-
-#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
- do \
- { \
- char label[256]; \
- ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
- fprintf (FILE, "%s ", \
- integer_asm_op (GET_MODE_SIZE (Pmode), TRUE)); \
- assemble_name (FILE, label); \
- fprintf (FILE, "\n"); \
- } \
- while (0)
-
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- do \
- { \
- char label[256]; \
- ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
- fprintf (FILE, "%s ", \
- integer_asm_op (GET_MODE_SIZE (Pmode), TRUE)); \
- assemble_name (FILE, label); \
- ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \
- fprintf (FILE, "-"); \
- assemble_name (FILE, label); \
- fprintf (FILE, "\n"); \
- } \
- while (0)
-
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
-
-#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
- ( fputs (".comm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
-
-#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
- ( fputs (".lcomm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
-
-#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
-static void __attribute__((__used__)) \
-call_ ## FUNC (void) \
-{ \
- asm (SECTION_OP); \
- asm ("{ moveli r0, hw2_last(" #FUNC " - . - 8); lnk r1 }\n"); \
- asm ("shl16insli r0, r0, hw1(" #FUNC " - .)\n"); \
- asm ("shl16insli r0, r0, hw0(" #FUNC " - . + 8)\n"); \
- asm ("add r0, r1, r0\n"); \
- asm ("jalr r0\n"); \
- asm (TEXT_SECTION_ASM_OP); \
-}
-
-
-
-#define INIT_EXPANDERS tilegx_init_expanders ()
-
-/* A C structure for machine-specific, per-function data. This is
- added to the cfun structure. */
-typedef struct GTY(()) machine_function
-{
- /* Symbol for the text label used for pic. */
- rtx text_label_symbol;
-
- /* Register for the text label. */
- rtx text_label_rtx;
-
- /* Register for the pic offset table. */
- rtx got_rtx;
-
- /* The function calls tls_get_addr. */
- int calls_tls_get_addr;
-} machine_function;
-
-#ifndef HAVE_AS_TLS
-#define HAVE_AS_TLS 0
-#endif
-
-#ifndef ENDIAN_SPEC
-#if TARGET_BIG_ENDIAN_DEFAULT
-#define ENDIAN_SPEC \
- "%{!mlittle-endian:-EB} \
- %{mlittle-endian:%{mbig-endian: \
- %e-mbig-endian and -mlittle-endian may not be used together}-EL}"
-#else
-#define ENDIAN_SPEC \
- "%{!mbig-endian:-EL} \
- %{mbig-endian:%{mlittle-endian: \
- %e-mbig-endian and -mlittle-endian may not be used together}-EB}"
-#endif
-#endif
-
-#define EXTRA_SPECS \
- { "endian_spec", ENDIAN_SPEC }
diff --git a/gcc/config/tilegx/tilegx.md b/gcc/config/tilegx/tilegx.md
deleted file mode 100644
index 7f89ae5..0000000
--- a/gcc/config/tilegx/tilegx.md
+++ /dev/null
@@ -1,5664 +0,0 @@
-;; Machine description for Tilera TILE-Gx chip for GCC.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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_constants [
- ;;
- ;; The following represent intrinsic insns, organized by latency.
- ;;
-
- ;; single cycle
- (UNSPEC_INSN_ADDR_SHL16INSLI 1)
- (UNSPEC_INSN_BFEXTS 2)
- (UNSPEC_INSN_BFEXTU 3)
- (UNSPEC_INSN_BFINS 4)
- (UNSPEC_INSN_CRC32_32 5)
- (UNSPEC_INSN_CRC32_8 6)
- (UNSPEC_INSN_DBLALIGN 7)
- (UNSPEC_INSN_DBLALIGN2 8)
- (UNSPEC_INSN_DBLALIGN4 9)
- (UNSPEC_INSN_DBLALIGN6 10)
- (UNSPEC_INSN_DRAIN 11)
- (UNSPEC_INSN_DTLBPR 12)
- (UNSPEC_INSN_FINV 13)
- (UNSPEC_INSN_FLUSH 14)
- (UNSPEC_INSN_FLUSHWB 15)
- (UNSPEC_INSN_FNOP 16)
- (UNSPEC_INSN_ICOH 17)
- (UNSPEC_INSN_ILL 18)
- (UNSPEC_INSN_INFO 19)
- (UNSPEC_INSN_INFOL 20)
- (UNSPEC_INSN_INV 21)
- (UNSPEC_INSN_LNK 22)
- (UNSPEC_INSN_MFSPR 23)
- (UNSPEC_INSN_MM 24)
- (UNSPEC_INSN_MTSPR 25)
- (UNSPEC_INSN_NAP 26)
- (UNSPEC_INSN_PREFETCH_L1_FAULT 27)
- (UNSPEC_INSN_PREFETCH_L2_FAULT 28)
- (UNSPEC_INSN_PREFETCH_L3_FAULT 29)
- (UNSPEC_INSN_REVBITS 30)
- (UNSPEC_INSN_SHUFFLEBYTES 31)
- (UNSPEC_INSN_TBLIDXB0 32)
- (UNSPEC_INSN_TBLIDXB1 33)
- (UNSPEC_INSN_TBLIDXB2 34)
- (UNSPEC_INSN_TBLIDXB3 35)
- (UNSPEC_INSN_V1AVGU 36)
- (UNSPEC_INSN_V2AVGS 37)
- (UNSPEC_INSN_WH64 38)
-
- ;; 2 cycles
- (UNSPEC_INSN_CMUL 100)
- (UNSPEC_INSN_CMULA 101)
- (UNSPEC_INSN_CMULAF 102)
- (UNSPEC_INSN_CMULFR 103)
- (UNSPEC_INSN_CMULHR 104)
- (UNSPEC_INSN_CMULF 105)
- (UNSPEC_INSN_CMULH 106)
- (UNSPEC_INSN_EXCH 107)
- (UNSPEC_INSN_FDOUBLE_ADDSUB 108)
- (UNSPEC_INSN_FDOUBLE_ADD_FLAGS 109)
- (UNSPEC_INSN_FDOUBLE_MUL_FLAGS 110)
- (UNSPEC_INSN_FDOUBLE_PACK1 111)
- (UNSPEC_INSN_FDOUBLE_PACK2 112)
- (UNSPEC_INSN_FDOUBLE_SUB_FLAGS 113)
- (UNSPEC_INSN_FDOUBLE_UNPACK_MAX 114)
- (UNSPEC_INSN_FDOUBLE_UNPACK_MIN 115)
- (UNSPEC_INSN_FETCHADDGEZ 116)
- (UNSPEC_INSN_FSINGLE_ADD1 117)
- (UNSPEC_INSN_FSINGLE_ADDSUB2 118)
- (UNSPEC_INSN_FSINGLE_MUL1 119)
- (UNSPEC_INSN_FSINGLE_MUL2 120)
- (UNSPEC_INSN_FSINGLE_PACK1 121)
- (UNSPEC_INSN_FSINGLE_PACK2 122)
- (UNSPEC_INSN_FSINGLE_SUB1 123)
- (UNSPEC_INSN_MULAX 124)
- (UNSPEC_INSN_MULA_HS_HS 125)
- (UNSPEC_INSN_MULA_HS_HU 126)
- (UNSPEC_INSN_MULA_HS_LS 127)
- (UNSPEC_INSN_MULA_HS_LU 128)
- (UNSPEC_INSN_MULA_HU_HU 129)
- (UNSPEC_INSN_MULA_HU_LS 130)
- (UNSPEC_INSN_MULA_HU_LU 131)
- (UNSPEC_INSN_MULA_LS_LS 132)
- (UNSPEC_INSN_MULA_LS_LU 133)
- (UNSPEC_INSN_MULA_LU_LU 134)
- (UNSPEC_INSN_MUL_HS_HS 135)
- (UNSPEC_INSN_MUL_HS_HU 136)
- (UNSPEC_INSN_MUL_HS_LS 137)
- (UNSPEC_INSN_MUL_HS_LU 138)
- (UNSPEC_INSN_MUL_HU_HU 139)
- (UNSPEC_INSN_MUL_HU_LS 140)
- (UNSPEC_INSN_MUL_HU_LU 141)
- (UNSPEC_INSN_MUL_LS_LS 142)
- (UNSPEC_INSN_MUL_LS_LU 143)
- (UNSPEC_INSN_MUL_LU_LU 144)
- (UNSPEC_INSN_V1ADIFFU 145)
- (UNSPEC_INSN_V1DDOTPU 146)
- (UNSPEC_INSN_V1DDOTPUA 147)
- (UNSPEC_INSN_V1DDOTPUS 148)
- (UNSPEC_INSN_V1DDOTPUSA 149)
- (UNSPEC_INSN_V1DOTP 150)
- (UNSPEC_INSN_V1DOTPA 151)
- (UNSPEC_INSN_V1DOTPU 152)
- (UNSPEC_INSN_V1DOTPUA 153)
- (UNSPEC_INSN_V1DOTPUS 154)
- (UNSPEC_INSN_V1DOTPUSA 155)
- (UNSPEC_INSN_V1SADAU 156)
- (UNSPEC_INSN_V1SADU 157)
- (UNSPEC_INSN_V2ADIFFS 158)
- (UNSPEC_INSN_V2DOTP 159)
- (UNSPEC_INSN_V2DOTPA 160)
- (UNSPEC_INSN_V2MULFSC 161)
- (UNSPEC_INSN_V2SADAS 162)
- (UNSPEC_INSN_V2SADAU 163)
- (UNSPEC_INSN_V2SADS 164)
- (UNSPEC_INSN_V2SADU 165)
-
- ;; 11 cycles
- (UNSPEC_INSN_CMPEXCH 200)
-
- ;;
- ;; The following are special insns.
- ;;
-
- ;; Blockage
- (UNSPEC_BLOCKAGE 201)
-
- ;; Lnk and its label
- (UNSPEC_LNK_AND_LABEL 202)
-
- ;; Memory fence
- (UNSPEC_MF 203)
-
- ;; Insns generating difference of two labels
- (UNSPEC_MOV_PCREL_STEP3 204)
- (UNSPEC_MOV_LARGE_PCREL_STEP4 205)
-
- ;; Latency specifying loads.
- (UNSPEC_LATENCY_L2 206)
- (UNSPEC_LATENCY_MISS 207)
-
- ;; A pseudo-op that prevents network operations from being ordered.
- (UNSPEC_NETWORK_BARRIER 208)
-
- ;; Operations that access network registers.
- (UNSPEC_NETWORK_RECEIVE 209)
- (UNSPEC_NETWORK_SEND 210)
-
- ;; Stack protector operations
- (UNSPEC_SP_SET 211)
- (UNSPEC_SP_TEST 212)
-
- ;; This is used to move a value to a SPR.
- (UNSPEC_SPR_MOVE 213)
-
- ;; A call to __tls_get_addr
- (UNSPEC_TLS_GD_CALL 214)
-
- ;; An opaque TLS "add" operation for TLS general dynamic model
- ;; access.
- (UNSPEC_TLS_GD_ADD 215)
-
- ;; An opaque TLS "load" operation for TLS initial exec model access.
- (UNSPEC_TLS_IE_LOAD 216)
-
- ;; An opaque TLS "add" operation for TLS access.
- (UNSPEC_TLS_ADD 217)
-
- ;; Atomics
- (UNSPEC_ATOMIC 218)
- (UNSPEC_CMPXCHG 219)
- (UNSPEC_XCHG 220)
-
- ;;
- ;; The following are operands.
- ;;
- (UNSPEC_HW0 300)
- (UNSPEC_HW1 301)
- (UNSPEC_HW2 302)
- (UNSPEC_HW3 303)
- (UNSPEC_HW0_LAST 304)
- (UNSPEC_HW1_LAST 305)
- (UNSPEC_HW2_LAST 306)
-
- (UNSPEC_HW0_PCREL 307)
- (UNSPEC_HW1_PCREL 308)
- (UNSPEC_HW1_LAST_PCREL 309)
- (UNSPEC_HW2_LAST_PCREL 310)
-
- (UNSPEC_HW0_GOT 311)
- (UNSPEC_HW0_LAST_GOT 312)
- (UNSPEC_HW1_LAST_GOT 313)
-
- (UNSPEC_HW0_TLS_GD 314)
- (UNSPEC_HW1_LAST_TLS_GD 315)
-
- (UNSPEC_HW0_TLS_IE 316)
- (UNSPEC_HW1_LAST_TLS_IE 317)
-
- (UNSPEC_HW0_TLS_LE 318)
- (UNSPEC_HW1_LAST_TLS_LE 319)
-
- (UNSPEC_HW0_PLT_PCREL 320)
- (UNSPEC_HW1_PLT_PCREL 321)
-
- (UNSPEC_HW1_LAST_PLT_PCREL 322)
- (UNSPEC_HW2_LAST_PLT_PCREL 323)
-
- ;; This is used to wrap around the addresses of non-temporal load/store
- ;; intrinsics.
- (UNSPEC_NON_TEMPORAL 324)
-])
-
-;; Mark the last instruction of various latencies, used to
-;; determine the rtx costs of unspec insns.
-(define_constants [
- (TILEGX_LAST_LATENCY_1_INSN 99)
- (TILEGX_LAST_LATENCY_2_INSN 199)
- (TILEGX_LAST_LATENCY_INSN 299)
-])
-
-(define_constants [
- (TILEGX_NETREG_IDN0 0)
- (TILEGX_NETREG_IDN1 1)
- (TILEGX_NETREG_UDN0 2)
- (TILEGX_NETREG_UDN1 3)
- (TILEGX_NETREG_UDN2 4)
- (TILEGX_NETREG_UDN3 5)
-])
-
-(define_constants [
- (TILEGX_CMPEXCH_REG 66)
- (TILEGX_NETORDER_REG 67)
-])
-
-
-;; Operand and operator predicates and constraints
-
-(include "predicates.md")
-(include "constraints.md")
-(include "tilegx-generic.md")
-
-;; Define an insn type attribute. This defines what pipes things can go in.
-(define_attr "type"
- "X0,X0_2cycle,X1,X1_branch,X1_2cycle,X1_L2,X1_remote,X1_miss,X01,Y0,Y0_2cycle,Y1,Y2,Y2_2cycle,Y2_L2,Y2_miss,Y01,cannot_bundle,cannot_bundle_3cycle,cannot_bundle_4cycle,nothing"
- (const_string "Y01"))
-
-(define_attr "length" ""
- (cond [(eq_attr "type" "X1_branch")
- (if_then_else
- (and (le (minus (match_dup 0) (pc)) (const_int 524280))
- (le (minus (pc) (match_dup 0)) (const_int 524288)))
- (const_int 8)
- (const_int 16))
- ]
- (const_int 8)))
-
-
-;; Define some iterators.
-(define_mode_iterator IVMODE [SI DI V8QI V4HI V2SI])
-(define_mode_iterator IVNMODE [SI V8QI V4HI V2SI])
-(define_mode_iterator I48MODE [SI DI])
-(define_mode_iterator I48MODE2 [SI DI])
-(define_mode_iterator I124MODE [QI HI SI])
-(define_mode_iterator FI48MODE [SF DF SI DI])
-(define_mode_iterator VEC48MODE [V8QI V4HI])
-(define_mode_iterator VEC248MODE [V8QI V4HI V2SI])
-
-(define_mode_attr n [(QI "1") (HI "2") (SI "4") (DI "")
- (V8QI "1") (V4HI "2") (V2SI "4")])
-(define_mode_attr x [(SI "x") (DI "")])
-(define_mode_attr bitsuffix [(SI "_32bit") (DI "")])
-(define_mode_attr four_if_si [(SI "4") (DI "")])
-(define_mode_attr four_s_if_si [(SI "4s") (DI "")])
-(define_mode_attr nbits [(SI "5") (DI "6")])
-(define_mode_attr shift_pipe [(SI "X01") (DI "*")])
-
-;; Code iterator for either extend.
-(define_code_iterator any_extend [sign_extend zero_extend])
-
-;; Code iterator for all three shifts.
-(define_code_iterator any_shift [ashift ashiftrt lshiftrt])
-
-;; Code iterator for all byte ops without immediate variants.
-(define_code_iterator v1op [us_minus us_plus minus ne le leu mult])
-
-;; Code iterator for all 2-byte vector ops without immediate variants.
-(define_code_iterator v2op [ss_minus ss_plus minus ne le leu])
-
-;; Code iterator for all 4-byte vector ops without immediate variants.
-(define_code_iterator v4op [ss_minus ss_plus minus plus])
-
-;; Code iterator for all byte vector ops with immediate variants.
-(define_code_iterator v1op_immed [plus umax umin eq lt ltu])
-
-;; Code iterator for all 2-byte vector ops with immediate variants.
-(define_code_iterator v2op_immed [plus smax smin eq lt ltu])
-
-;; Code iterator for all 2-byte vector shifts without immediate variants.
-(define_code_iterator v2shift [ss_ashift])
-
-;; Code iterator for all 4-byte vector shifts without immediate variants.
-(define_code_iterator v4shift [ashift ashiftrt lshiftrt ss_ashift])
-
-;; <optab> expands to the name of the optab for a particular code.
-(define_code_attr optab [(ashift "ashl")
- (ashiftrt "ashr")
- (lshiftrt "lshr")
- (ss_ashift "ssashl")
- (eq "seq")
- (ne "sne")
- (lt "slt")
- (ltu "sltu")
- (le "sle")
- (leu "sleu")
- (minus "sub")
- (plus "add")
- (mult "mul")
- (smax "smax")
- (smin "smin")
- (ss_minus "sssub")
- (ss_plus "ssadd")
- (umax "umax")
- (umin "umin")
- (us_minus "ussub")
- (us_plus "usadd")
- ])
-
-;; <insn> expands to the name of the insn that implements a particular
-;; code.
-(define_code_attr insn [(ashift "shl")
- (ashiftrt "shrs")
- (lshiftrt "shru")
- (ss_ashift "shlsc")
- (eq "cmpeq")
- (ne "cmpne")
- (lt "cmplts")
- (ltu "cmpltu")
- (le "cmples")
- (leu "cmpleu")
- (minus "sub")
- (plus "add")
- (mult "multu")
- (smax "maxs")
- (smin "mins")
- (umax "maxu")
- (umin "minu")
- (ss_minus "subsc")
- (ss_plus "addsc")
- (us_minus "subuc")
- (us_plus "adduc")
- ])
-
-;; <pipe> expands to the pipeline resource that contains the
-;; particular code.
-(define_code_attr pipe [(ashift "X01")
- (ashiftrt "X01")
- (lshiftrt "X01")
- (ss_ashift "X01")
- (eq "X01")
- (ne "X01")
- (lt "X01")
- (ltu "X01")
- (le "X01")
- (leu "X01")
- (minus "X01")
- (plus "X01")
- (mult "X0_2cycle")
- (smax "X01")
- (smin "X01")
- (umax "X01")
- (umin "X01")
- (ss_minus "X01")
- (ss_plus "X01")
- (us_minus "X01")
- (us_plus "X01")
- ])
-
-;; <comm> indicates whether a particular code is commutative, using
-;; the "%" commutative opterator constraint.
-(define_code_attr comm [(ashift "")
- (ashiftrt "")
- (lshiftrt "")
- (ss_ashift "")
- (eq "%")
- (ne "%")
- (lt "")
- (ltu "")
- (le "")
- (leu "")
- (minus "")
- (plus "%")
- (mult "%")
- (smin "%")
- (umin "%")
- (smax "%")
- (umax "%")
- (ss_plus "%")
- (us_plus "%")
- (ss_minus "")
- (us_minus "")
- ])
-
-;; <s> is the load/store extension suffix.
-(define_code_attr s [(zero_extend "u")
- (sign_extend "s")])
-
-;; Code for packing two 2-byte vectors.
-(define_code_iterator v2pack [truncate us_truncate])
-
-;; <pack_optab> expands to the part of the optab name describing how
-;; two vectors are packed.
-(define_code_attr pack_optab [(truncate "trunc")
- (us_truncate "usat")
- (ss_truncate "ssat")])
-
-;; <pack_insn> expands to the insn that implements a particular vector
-;; packing code.
-(define_code_attr pack_insn [(truncate "packl")
- (us_truncate "packuc")
- (ss_truncate "packsc")])
-
-;;
-;; The basic data move insns.
-;;
-
-(define_expand "movqi"
- [(set (match_operand:QI 0 "nonimmediate_operand" "")
- (match_operand:QI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilegx_expand_mov (QImode, operands))
- DONE;
-})
-
-(define_insn "*movqi_insn"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,U,m")
- (match_operand:QI 1 "move_operand" "r,I,U,m,rO,rO"))]
- "(register_operand (operands[0], QImode)
- || reg_or_0_operand (operands[1], QImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- ld1u\t%0, %1
- ld1u_add\t%0, %I1, %i1
- st1\t%0, %r1
- st1_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "movhi"
- [(set (match_operand:HI 0 "nonimmediate_operand" "")
- (match_operand:HI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilegx_expand_mov (HImode, operands))
- DONE;
-})
-
-(define_insn "*movhi_insn"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,r,U,m")
- (match_operand:HI 1 "move_operand" "r,I,JT,U,m,rO,rO"))]
- "(register_operand (operands[0], HImode)
- || reg_or_0_operand (operands[1], HImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- moveli\t%0, %H1
- ld2u\t%0, %1
- ld2u_add\t%0, %I1, %i1
- st2\t%0, %r1
- st2_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "movsi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "")
- (match_operand:SI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilegx_expand_mov (SImode, operands))
- DONE;
-})
-
-(define_insn "*movsi_insn"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,U,m")
- (match_operand:SI 1 "move_operand" "r,I,JT,K,U,m,rO,rO"))]
- "(register_operand (operands[0], SImode)
- || reg_or_0_operand (operands[1], SImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- moveli\t%0, %H1
- shl16insli\t%0, zero, %h1
- ld4s\t%0, %1
- ld4s_add\t%0, %I1, %i1
- st4\t%0, %r1
- st4_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,X01,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "movdi"
- [(set (match_operand:DI 0 "nonimmediate_operand" "")
- (match_operand:DI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilegx_expand_mov (DImode, operands))
- DONE;
-})
-
-(define_insn "*movdi_insn"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,r,U,m")
- (match_operand:DI 1 "move_operand" "r,I,JT,K,N,P,U,m,rO,rO"))]
- "(register_operand (operands[0], DImode)
- || reg_or_0_operand (operands[1], DImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- moveli\t%0, %H1
- shl16insli\t%0, zero, %h1
- v1addi\t%0, zero, %j1
- v2addi\t%0, zero, %h1
- ld\t%0, %1
- ld_add\t%0, %I1, %i1
- st\t%0, %r1
- st_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,X01,X01,X01,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "movmisalign<mode>"
- [(set (match_operand:VEC248MODE 0 "nonautoincmem_nonimmediate_operand" "")
- (match_operand:VEC248MODE 1 "nonautoincmem_general_operand" ""))]
- ""
-{
- tilegx_expand_movmisalign (<MODE>mode, operands);
- DONE;
-})
-
-(define_expand "movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "")
- (match_operand:SF 1 "general_operand" ""))]
- ""
-{
- /* Materialize immediates using clever SImode code, but don't
- do this after reload starts, since gen_lowpart will choke
- during reload if given an illegitimate address. */
- if (immediate_operand (operands[1], SFmode)
- && operands[1] != const0_rtx
- && (register_operand (operands[0], SFmode)
- || (!reload_in_progress && !reload_completed)))
- {
- emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
- gen_lowpart (SImode, operands[1])));
- DONE;
- }
-})
-
-(define_insn "*movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,U,m")
- (match_operand:SF 1 "general_operand" "rO,U,m,rO,rO"))]
- ""
- "@
- move\t%0, %r1
- ld4s\t%0, %1
- ld4s_add\t%0, %I1, %i1
- st4\t%0, %r1
- st4_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "movdf"
- [(set (match_operand:DF 0 "nonimmediate_operand" "")
- (match_operand:DF 1 "general_operand" ""))]
- ""
-{
- /* Materialize immediates using clever DImode code, but don't
- do this after reload starts, since gen_lowpart will choke
- during reload if given an illegitimate address. */
- if (immediate_operand (operands[1], DFmode)
- && operands[1] != const0_rtx
- && (register_operand (operands[0], DFmode)
- || (!reload_in_progress && !reload_completed)))
- {
- emit_insn (gen_movdi (gen_lowpart (DImode, operands[0]),
- gen_lowpart (DImode, operands[1])));
- DONE;
- }
-})
-
-(define_insn "*movdf"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,r,U,m")
- (match_operand:DF 1 "general_operand" "rO,U,m,rO,rO"))]
- ""
- "@
- move\t%0, %r1
- ld\t%0, %1
- ld_add\t%0, %I1, %i1
- st\t%0, %r1
- st_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "mov<mode>"
- [(set (match_operand:VEC248MODE 0 "nonimmediate_operand" "")
- (match_operand:VEC248MODE 1 "general_operand" ""))]
- ""
-{
- /* Materialize immediates using clever DImode code, but don't
- do this after reload starts, since gen_lowpart will choke
- during reload if given an illegitimate address. */
- if (immediate_operand (operands[1], <MODE>mode)
- && operands[1] != const0_rtx
- && (register_operand (operands[0], <MODE>mode)
- || (!reload_in_progress && !reload_completed)))
- {
- emit_insn (gen_movdi (gen_lowpart (DImode, operands[0]),
- gen_lowpart (DImode, operands[1])));
- DONE;
- }
-})
-
-(define_insn "*mov<mode>"
- [(set (match_operand:VEC248MODE 0 "nonimmediate_operand" "=r,r,r,U,m")
- (match_operand:VEC248MODE 1 "general_operand" "rO,U,m,rO,rO"))]
- ""
- "@
- move\t%0, %r1
- ld\t%0, %1
- ld_add\t%0, %I1, %i1
- st\t%0, %r1
- st_add\t%I0, %r1, %i0"
- [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_insn "movstrictqi"
- [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
- (match_operand:QI 1 "reg_or_0_operand" "rO"))]
- ""
- "bfins\t%0, %r1, 0, 7"
- [(set_attr "type" "X0")])
-
-(define_insn "movstricthi"
- [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
- (match_operand:HI 1 "reg_or_0_operand" "rO"))]
- ""
- "bfins\t%0, %r1, 0, 15"
- [(set_attr "type" "X0")])
-
-(define_insn "movstrictsi"
- [(set (strict_low_part (match_operand:SI 0 "register_operand" "+r"))
- (match_operand:SI 1 "reg_or_0_operand" "rO"))]
- ""
- "bfins\t%0, %r1, 0, 31"
- [(set_attr "type" "X0")])
-
-
-;;
-;; Bit-field extracts/inserts
-;;
-
-(define_expand "insv"
- [(set (zero_extract:DI (match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "u6bit_cint_operand" "")
- (match_operand:DI 2 "u6bit_cint_operand" ""))
- (match_operand:DI 3 "reg_or_cint_operand" ""))]
- ""
-{
- rtx first_rtx = operands[2];
- HOST_WIDE_INT first = INTVAL (first_rtx);
- HOST_WIDE_INT width = INTVAL (operands[1]);
- rtx v = operands[3];
-
- if (CONST_INT_P (v))
- {
- /* Which bits are we affecting? */
- HOST_WIDE_INT mask = ((((HOST_WIDE_INT) 1) << width) - 1) << first;
-
- /* Extract just the bits we need, sign extending them to make the
- constant easier to materialize in a register. */
- int shift = sizeof(HOST_WIDE_INT) * 8 - width;
- HOST_WIDE_INT n = (INTVAL (v) << shift) >> shift;
-
- if (n == 0)
- {
- /* We are setting every bit in the bitfield to zero. Try to use
- andi instead, since that is more efficient. */
- rtx mask_rtx = GEN_INT (~mask);
- if (satisfies_constraint_I (mask_rtx))
- {
- emit_insn (gen_anddi3 (operands[0], operands[0], mask_rtx));
- DONE;
- }
-
- operands[3] = const0_rtx;
- }
- else
- {
- if (n == -1)
- {
- /* We are setting every bit in the bitfield to one. Try to use
- ori instead, since that is more efficient. */
- rtx mask_rtx = GEN_INT (mask);
- if (satisfies_constraint_I (mask_rtx))
- {
- emit_insn (gen_iordi3 (operands[0], operands[0], mask_rtx));
- DONE;
- }
- }
-
- if (!can_create_pseudo_p ())
- FAIL;
-
- operands[3] = force_reg (DImode, GEN_INT (n));
- }
- }
-})
-
-(define_insn "*insv_tblidxb0"
- [(set (zero_extract:DI
- (match_operand:DI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (match_operand:DI 1 "register_operand" "rO"))]
- ""
- "tblidxb0\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_tblidxb1"
- [(set (zero_extract:DI
- (match_operand:DI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (zero_extract:DI
- (const_int 8)
- (const_int 8)
- (match_operand:DI 1 "register_operand" "rO")))]
- ""
- "tblidxb1\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_tblidxb2"
- [(set (zero_extract:DI
- (match_operand:DI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (zero_extract:DI
- (const_int 8)
- (const_int 16)
- (match_operand:DI 1 "register_operand" "rO")))]
- ""
- "tblidxb2\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_tblidxb3"
- [(set (zero_extract:DI
- (match_operand:DI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (zero_extract:DI
- (const_int 8)
- (const_int 24)
- (match_operand:DI 1 "register_operand" "rO")))]
- ""
- "tblidxb3\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_bfins"
- [(set (zero_extract:DI
- (match_operand:DI 0 "register_operand" "+r")
- (match_operand:DI 1 "u6bit_cint_operand" "n")
- (match_operand:DI 2 "u6bit_cint_operand" "n"))
- (match_operand:DI 3 "reg_or_cint_operand" "rO"))]
- ""
- "bfins\t%0, %r3, %2, %2+%1-1"
- [(set_attr "type" "X0")])
-
-(define_insn "*insv_mm"
- [(set (zero_extract:DI
- (match_operand:DI 0 "register_operand" "+r")
- (match_operand:DI 1 "u6bit_cint_operand" "n")
- (match_operand:DI 2 "u6bit_cint_operand" "n"))
- (zero_extract:DI
- (match_operand:DI 3 "register_operand" "rO")
- (match_dup 1)
- (match_dup 2)))]
- ""
-{
- int n;
-
- operands[1] = GEN_INT (INTVAL (operands[1]) + INTVAL (operands[2]));
-
- n = INTVAL (operands[2]);
- n = (n == 0) ? 63 : n - 1;
- operands[2] = GEN_INT (n);
-
- return "mm\t%0, %r3, %1, %2";
-}
- [(set_attr "type" "X0")])
-
-(define_expand "extv"
- [(set (match_operand:DI 0 "register_operand" "")
- (sign_extract:DI (match_operand 1 "nonautoincmem_general_operand" "")
- (match_operand:DI 2 "immediate_operand" "")
- (match_operand:DI 3 "immediate_operand" "")))]
- ""
-{
- if (MEM_P (operands[1]))
- {
- HOST_WIDE_INT bit_offset, bit_width;
- HOST_WIDE_INT first_byte_offset, last_byte_offset;
-
- if (GET_MODE (operands[1]) != QImode)
- FAIL;
-
- bit_width = INTVAL (operands[2]);
- bit_offset = INTVAL (operands[3]);
-
- /* NOTE: bit_offset is relative to the mode of operand
- 1 (QImode). It will be negative in big-endian mode
- here. Convert that back to the real offset. */
- if (BYTES_BIG_ENDIAN)
- bit_offset = GET_MODE_BITSIZE (QImode) - bit_width - bit_offset;
-
- /* Reject bitfields that can be done with a normal load. */
- if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
- FAIL;
-
- /* The value in memory cannot span more than 8 bytes. */
- first_byte_offset = bit_offset / BITS_PER_UNIT;
- last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
- if (last_byte_offset - first_byte_offset > 7)
- FAIL;
-
- tilegx_expand_unaligned_load (operands[0], operands[1],
- bit_width, bit_offset, 1);
-
- DONE;
- }
-
- operands[1] = force_reg (DImode, operands[1]);
-})
-
-(define_expand "extzv"
- [(set (match_operand:DI 0 "register_operand" "")
- (zero_extract:DI (match_operand 1 "nonautoincmem_general_operand" "")
- (match_operand:DI 2 "immediate_operand" "")
- (match_operand:DI 3 "immediate_operand" "")))]
- ""
-{
- HOST_WIDE_INT bit_width = INTVAL (operands[2]);
- HOST_WIDE_INT bit_offset = INTVAL (operands[3]);
-
- if (MEM_P (operands[1]))
- {
- HOST_WIDE_INT first_byte_offset, last_byte_offset;
-
- if (GET_MODE (operands[1]) != QImode)
- FAIL;
-
- /* NOTE: bit_offset is relative to the mode of operand
- 1 (QImode). It will be negative in big-endian mode
- here. */
- if (BYTES_BIG_ENDIAN)
- bit_offset = GET_MODE_BITSIZE (QImode) - bit_width - bit_offset;
-
- /* Reject bitfields that can be done with a normal load. */
- if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
- FAIL;
-
- /* The value in memory cannot span more than 8 bytes. */
- first_byte_offset = bit_offset / BITS_PER_UNIT;
- last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
- if (last_byte_offset - first_byte_offset > 7)
- FAIL;
-
- tilegx_expand_unaligned_load (operands[0], operands[1],
- bit_width, bit_offset, 0);
-
- DONE;
- }
-
- operands[1] = force_reg (DImode, operands[1]);
-
- if (bit_offset == 0)
- {
- /* Extracting the low bits is just a bitwise AND. */
- HOST_WIDE_INT mask = ((HOST_WIDE_INT)1 << bit_width) - 1;
- emit_insn (gen_anddi3 (operands[0], operands[1], GEN_INT (mask)));
- DONE;
- }
-})
-
-
-;;
-;; Addresses
-;;
-
-;; The next three patterns are used to materialize a position
-;; independent address by adding the difference of two labels to a base
-;; label in the text segment, assuming that the difference fits in 32
-;; signed bits.
-(define_expand "mov_address_step1"
- [(set (match_operand:DI 0 "register_operand" "")
- (const:DI (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
- UNSPEC_HW2_LAST)))])
-
-(define_expand "mov_address_step2"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI
- [(match_operand:DI 1 "reg_or_0_operand" "")
- (const:DI (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
- UNSPEC_HW1))]
- UNSPEC_INSN_ADDR_SHL16INSLI))])
-
-(define_expand "mov_address_step3"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI
- [(match_operand:DI 1 "reg_or_0_operand" "")
- (const:DI (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
- UNSPEC_HW0))]
- UNSPEC_INSN_ADDR_SHL16INSLI))])
-
-;; First step of the 2-insn sequence to materialize a 32-bit symbolic
-;; address.
-(define_expand "mov_address_32bit_step1"
- [(set (match_operand:SI 0 "register_operand" "")
- (const:SI (unspec:SI [(match_operand:SI 1 "symbolic_operand" "")]
- UNSPEC_HW1_LAST)))])
-
-;; Second step of the 2-insn sequence to materialize a 32-bit symbolic
-;; address.
-(define_expand "mov_address_32bit_step2"
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec:SI
- [(match_operand:SI 1 "reg_or_0_operand" "")
- (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
- UNSPEC_HW0))]
- UNSPEC_INSN_ADDR_SHL16INSLI))])
-
-
-;;
-;; pic related instructions
-;;
-
-;; NOTE: We compute the label in this unusual way because if we place
-;; the label after the lnk, whether it is at the same address as the
-;; lnk will vary depending on whether the optimization level chooses
-;; to insert bundling braces.
-(define_insn "insn_lnk_and_label<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec_volatile:I48MODE
- [(match_operand:I48MODE 1 "symbolic_operand" "")]
- UNSPEC_LNK_AND_LABEL))]
- ""
- "%1 = . + 8\n\tlnk\t%0"
- [(set_attr "type" "Y1")])
-
-;; The next three patterns are used to materialize a position
-;; independent address by adding the difference of two labels to a
-;; base label in the text segment, assuming that the difference fits
-;; in 32 signed bits.
-(define_expand "mov_pcrel_step1<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (const:I48MODE (unspec:I48MODE
- [(match_operand:I48MODE 1 "symbolic_operand" "")
- (match_operand:I48MODE 2 "symbolic_operand" "")]
- UNSPEC_HW1_LAST_PCREL)))]
- "flag_pic")
-
-(define_expand "mov_pcrel_step2<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (unspec:I48MODE
- [(match_operand:I48MODE 1 "reg_or_0_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 2 "symbolic_operand" "")
- (match_operand:I48MODE 3 "symbolic_operand" "")]
- UNSPEC_HW0_PCREL))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic")
-
-(define_insn "mov_pcrel_step3<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec:I48MODE [(match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")
- (match_operand:I48MODE 3 "symbolic_operand" "in")
- (match_operand:I48MODE 4 "symbolic_operand" "in")]
- UNSPEC_MOV_PCREL_STEP3))]
- "flag_pic"
- "add<x>\t%0, %r1, %r2")
-
-;; The next three patterns are used to materialize a position
-;; independent 64-bit address by adding the difference of two labels to
-;; a base label in the text segment, without any limitation on the size
-;; of the difference.
-(define_expand "mov_large_pcrel_step1"
- [(set (match_operand:DI 0 "register_operand" "")
- (const:DI (unspec:DI
- [(match_operand:DI 1 "symbolic_operand" "")
- (match_operand:DI 2 "symbolic_operand" "")]
- UNSPEC_HW2_LAST_PCREL)))]
- "flag_pic")
-
-(define_expand "mov_large_pcrel_step2"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI
- [(match_operand:DI 1 "reg_or_0_operand" "")
- (const:DI
- (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")
- (match_operand:DI 3 "symbolic_operand" "")]
- UNSPEC_HW1_PCREL))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic")
-
-;; Note: step 3 is same as move_pcrel_step2.
-(define_expand "mov_large_pcrel_step3"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI
- [(match_operand:DI 1 "reg_or_0_operand" "")
- (const:DI
- (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")
- (match_operand:DI 3 "symbolic_operand" "")]
- UNSPEC_HW0_PCREL))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic")
-
-(define_insn "mov_large_pcrel_step4"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "symbolic_operand" "in")
- (match_operand:DI 4 "symbolic_operand" "in")]
- UNSPEC_MOV_LARGE_PCREL_STEP4))]
- "flag_pic"
- "add\t%0, %r1, %r2")
-
-;; The next three patterns are used to materialize a position
-;; independent 64-bit plt address by adding the difference of two
-;; labels to a base label in the text segment.
-(define_expand "mov_plt_pcrel_step1"
- [(set (match_operand:DI 0 "register_operand" "")
- (const:DI (unspec:DI
- [(match_operand:DI 1 "symbolic_operand" "")
- (match_operand:DI 2 "symbolic_operand" "")]
- UNSPEC_HW2_LAST_PLT_PCREL)))]
- "flag_pic")
-
-(define_expand "mov_plt_pcrel_step2"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI
- [(match_operand:DI 1 "reg_or_0_operand" "")
- (const:DI
- (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")
- (match_operand:DI 3 "symbolic_operand" "")]
- UNSPEC_HW1_PLT_PCREL))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic")
-
-(define_expand "mov_plt_pcrel_step3"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI
- [(match_operand:DI 1 "reg_or_0_operand" "")
- (const:DI
- (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")
- (match_operand:DI 3 "symbolic_operand" "")]
- UNSPEC_HW0_PLT_PCREL))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic")
-
-;; The next two patterns are used to materialize a position independent
-;; 32-bit plt address by adding the difference of two labels to a base
-;; label in the text segment.
-(define_expand "mov_plt_pcrel_step1_32bit"
- [(set (match_operand:SI 0 "register_operand" "")
- (const:SI (unspec:SI
- [(match_operand:SI 1 "symbolic_operand" "")
- (match_operand:SI 2 "symbolic_operand" "")]
- UNSPEC_HW1_LAST_PLT_PCREL)))]
- "flag_pic")
-
-(define_expand "mov_plt_pcrel_step2_32bit"
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec:SI
- [(match_operand:SI 1 "reg_or_0_operand" "")
- (const:SI
- (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")
- (match_operand:SI 3 "symbolic_operand" "")]
- UNSPEC_HW0_PLT_PCREL))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic")
-
-(define_expand "add_got16<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (plus:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 2 "symbolic_operand" "")]
- UNSPEC_HW0_LAST_GOT))))]
- "flag_pic == 1")
-
-(define_expand "mov_got32_step1<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 1 "symbolic_operand" "")]
- UNSPEC_HW1_LAST_GOT)))]
- "flag_pic == 2")
-
-(define_expand "mov_got32_step2<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (unspec:I48MODE
- [(match_operand:I48MODE 1 "reg_or_0_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 2 "symbolic_operand" "")]
- UNSPEC_HW0_GOT))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "flag_pic == 2")
-
-
-;;
-;; TLS
-;;
-
-(define_expand "mov_tls_gd_step1<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 1 "tls_symbolic_operand" "")]
- UNSPEC_HW1_LAST_TLS_GD)))]
- "HAVE_AS_TLS")
-
-(define_expand "mov_tls_gd_step2<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (unspec:I48MODE
- [(match_operand:I48MODE 1 "reg_or_0_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 2 "tls_symbolic_operand" "")]
- UNSPEC_HW0_TLS_GD))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "HAVE_AS_TLS")
-
-(define_expand "mov_tls_ie_step1<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 1 "tls_symbolic_operand" "")]
- UNSPEC_HW1_LAST_TLS_IE)))]
- "HAVE_AS_TLS")
-
-(define_expand "mov_tls_ie_step2<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (unspec:I48MODE
- [(match_operand:I48MODE 1 "reg_or_0_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 2 "tls_symbolic_operand" "")]
- UNSPEC_HW0_TLS_IE))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "HAVE_AS_TLS")
-
-(define_expand "mov_tls_le_step1<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 1 "tls_symbolic_operand" "")]
- UNSPEC_HW1_LAST_TLS_LE)))]
- "HAVE_AS_TLS")
-
-(define_expand "mov_tls_le_step2<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (unspec:I48MODE
- [(match_operand:I48MODE 1 "reg_or_0_operand" "")
- (const:I48MODE
- (unspec:I48MODE [(match_operand:I48MODE 2 "tls_symbolic_operand" "")]
- UNSPEC_HW0_TLS_LE))]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- "HAVE_AS_TLS")
-
-(define_expand "tls_gd_call<bitsuffix>"
- [(parallel
- [(set (reg:I48MODE 0)
- (unspec:I48MODE [(match_operand:I48MODE 0 "tls_symbolic_operand" "")
- (reg:I48MODE 0)]
- UNSPEC_TLS_GD_CALL))
- (clobber (reg:I48MODE 25))
- (clobber (reg:I48MODE 26))
- (clobber (reg:I48MODE 27))
- (clobber (reg:I48MODE 28))
- (clobber (reg:I48MODE 29))
- (clobber (reg:I48MODE 55))])]
- ""
-{
- cfun->machine->calls_tls_get_addr = true;
-})
-
-(define_insn "*tls_gd_call<bitsuffix>"
- [(set (reg:I48MODE 0)
- (unspec:I48MODE [(match_operand:I48MODE 0 "tls_symbolic_operand" "")
- (reg:I48MODE 0)]
- UNSPEC_TLS_GD_CALL))
- (clobber (reg:I48MODE 25))
- (clobber (reg:I48MODE 26))
- (clobber (reg:I48MODE 27))
- (clobber (reg:I48MODE 28))
- (clobber (reg:I48MODE 29))
- (clobber (reg:I48MODE 55))]
- ""
- "jal\ttls_gd_call(%0)"
- [(set_attr "type" "X1")])
-
-(define_insn "tls_gd_add<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec:I48MODE [(match_operand:I48MODE 1 "register_operand" "r")
- (match_operand:I48MODE 2 "tls_symbolic_operand" "")]
- UNSPEC_TLS_GD_ADD))]
- "HAVE_AS_TLS"
- "add<x>i\t%0, %1, tls_gd_add(%2)")
-
-(define_insn "tls_add<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec:I48MODE [(match_operand:I48MODE 1 "register_operand" "r")
- (match_operand:I48MODE 2 "register_operand" "0")
- (match_operand:I48MODE 3 "tls_symbolic_operand" "")]
- UNSPEC_TLS_ADD))]
- "HAVE_AS_TLS"
- "add<x>i\t%0, %1, tls_add(%3)")
-
-(define_insn "tls_ie_load<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec:I48MODE [(match_operand:I48MODE 1 "register_operand" "r")
- (match_operand:I48MODE 2 "tls_symbolic_operand" "")]
- UNSPEC_TLS_IE_LOAD))]
- "HAVE_AS_TLS"
- "ld<four_s_if_si>_tls\t%0, %1, tls_ie_load(%2)"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn_and_split "*zero_extract<mode>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (zero_extract:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "r")
- (match_operand:I48MODE 2 "u6bit_cint_operand" "n")
- (match_operand:I48MODE 3 "u6bit_cint_operand" "n")))]
- ""
- "bfextu\t%0, %r1, %3, %3+%2-1"
- "&& reload_completed"
- [(set (match_dup 0) (zero_extract:I48MODE
- (match_dup 1)
- (match_dup 2)
- (match_dup 3)))]
-{
- HOST_WIDE_INT bit_width = INTVAL (operands[2]);
- HOST_WIDE_INT bit_offset = INTVAL (operands[3]);
-
- if (bit_offset + bit_width > 64)
- operands[2] = GEN_INT (64 - bit_offset);
-}
- [(set_attr "type" "X0")])
-
-(define_insn "*sign_extract_low32"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (sign_extract:DI
- (match_operand:DI 1 "reg_or_0_operand" "r")
- (match_operand:DI 2 "u6bit_cint_operand" "n")
- (match_operand:DI 3 "u6bit_cint_operand" "n")))]
- "INTVAL (operands[3]) == 0 && INTVAL (operands[2]) == 32"
- "addxi\t%0, %r1, 0")
-
-(define_insn_and_split "*sign_extract"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (sign_extract:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "r")
- (match_operand:I48MODE 2 "u6bit_cint_operand" "n")
- (match_operand:I48MODE 3 "u6bit_cint_operand" "n")))]
- ""
- "bfexts\t%0, %r1, %3, %3+%2-1"
- "&& reload_completed"
- [(set (match_dup 0) (sign_extract:I48MODE
- (match_dup 1)
- (match_dup 2)
- (match_dup 3)))]
-{
- HOST_WIDE_INT bit_width = INTVAL (operands[2]);
- HOST_WIDE_INT bit_offset = INTVAL (operands[3]);
-
- if (bit_offset + bit_width > 64)
- operands[2] = GEN_INT (64 - bit_offset);
-}
- [(set_attr "type" "X0")])
-
-
-;;
-;; Arithmetic ops
-;;
-
-(define_insn "add<mode>3"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
- (plus:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "%rO,rO,rO")
- (match_operand:I48MODE 2 "add_operand" "r,I,JT")))]
- ""
- "@
- add<x>\t%0, %r1, %r2
- add<x>i\t%0, %r1, %2
- add<x>li\t%0, %r1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-(define_insn "*addsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r")
- (sign_extend:DI
- (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO")
- (match_operand:SI 2 "add_operand" "r,I,JT"))))]
- ""
- "@
- addx\t%0, %r1, %r2
- addxi\t%0, %r1, %2
- addxli\t%0, %r1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-(define_insn "sub<mode>3"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (minus:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
- ""
- "sub<x>\t%0, %r1, %r2")
-
-(define_insn "*subsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (sign_extend:DI
- (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "subx\t%0, %r1, %r2")
-
-(define_insn "neg<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (neg:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "rO")))]
- ""
- "sub<x>\t%0, zero, %r1")
-
-(define_insn "*negsi2_sext"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (sign_extend:DI
- (neg:SI (match_operand:SI 1 "reg_or_0_operand" "rO"))))]
- ""
- "subx\t%0, zero, %r1")
-
-(define_insn "ssaddsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ss_plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "addxsc\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "*ssaddsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (sign_extend:DI
- (ss_plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "addxsc\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "sssubsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ss_minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "subxsc\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "*sssubsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (sign_extend:DI
- (ss_minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "subxsc\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "addsf3"
- [(set (match_operand:SF 0 "register_operand" "")
- (plus:SF (match_operand:SF 1 "register_operand" "")
- (match_operand:SF 2 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
- rtx b = gen_lowpart (DImode, operands[2]);
-
- rtx tmp = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
-
- emit_insn (gen_insn_fsingle_add1 (tmp, a, b));
- emit_insn (gen_insn_fsingle_addsub2 (tmp, tmp, a, b));
- emit_insn (gen_insn_fsingle_pack1 (flags, tmp));
- emit_insn (gen_insn_fsingle_pack2 (result, tmp, flags));
-
- DONE;
-})
-
-(define_expand "subsf3"
- [(set (match_operand:SF 0 "register_operand" "")
- (minus:SF (match_operand:SF 1 "register_operand" "")
- (match_operand:SF 2 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
- rtx b = gen_lowpart (DImode, operands[2]);
-
- rtx tmp = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
-
- emit_insn (gen_insn_fsingle_sub1 (tmp, a, b));
- emit_insn (gen_insn_fsingle_addsub2 (tmp, tmp, a, b));
- emit_insn (gen_insn_fsingle_pack1 (flags, tmp));
- emit_insn (gen_insn_fsingle_pack2 (result, tmp, flags));
-
- DONE;
-})
-
-(define_expand "mulsf3"
- [(set (match_operand:SF 0 "register_operand" "")
- (mult:SF (match_operand:SF 1 "register_operand" "")
- (match_operand:SF 2 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
- rtx b = gen_lowpart (DImode, operands[2]);
-
- rtx tmp1 = gen_reg_rtx (DImode);
- rtx tmp2 = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
-
- emit_insn (gen_insn_fsingle_mul1 (tmp1, a, b));
- emit_insn (gen_insn_fsingle_mul2 (tmp2, tmp1, b));
- emit_insn (gen_insn_fsingle_pack1 (flags, tmp2));
- emit_insn (gen_insn_fsingle_pack2 (result, tmp2, flags));
-
- DONE;
-})
-
-(define_expand "adddf3"
- [(set (match_operand:DF 0 "register_operand" "")
- (plus:DF (match_operand:DF 1 "register_operand" "")
- (match_operand:DF 2 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
- rtx b = gen_lowpart (DImode, operands[2]);
-
- rtx min = gen_reg_rtx (DImode);
- rtx max = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
-
- emit_insn (gen_insn_fdouble_unpack_min (min, a, b));
- emit_insn (gen_insn_fdouble_unpack_max (max, a, b));
- emit_insn (gen_insn_fdouble_add_flags (flags, a, b));
- emit_insn (gen_insn_fdouble_addsub (max, max, min, flags));
- emit_insn (gen_insn_fdouble_pack1 (result, max, flags));
- emit_insn (gen_insn_fdouble_pack2 (result, result, max, const0_rtx));
-
- DONE;
-})
-
-(define_expand "subdf3"
- [(set (match_operand:DF 0 "register_operand" "")
- (minus:DF (match_operand:DF 1 "register_operand" "")
- (match_operand:DF 2 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
- rtx b = gen_lowpart (DImode, operands[2]);
-
- rtx min = gen_reg_rtx (DImode);
- rtx max = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
-
- emit_insn (gen_insn_fdouble_unpack_min (min, a, b));
- emit_insn (gen_insn_fdouble_unpack_max (max, a, b));
- emit_insn (gen_insn_fdouble_sub_flags (flags, a, b));
- emit_insn (gen_insn_fdouble_addsub (max, max, min, flags));
- emit_insn (gen_insn_fdouble_pack1 (result, max, flags));
- emit_insn (gen_insn_fdouble_pack2 (result, result, max, const0_rtx));
-
- DONE;
-})
-
-(define_expand "muldf3"
- [(set (match_operand:DF 0 "register_operand" "")
- (mult:DF (match_operand:DF 1 "register_operand" "")
- (match_operand:DF 2 "register_operand" "")))]
- ""
- ;; TODO: Decide if we should not inline this with -Os.
- ;; "optimize_function_for_speed_p (cfun)"
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
- rtx b = gen_lowpart (DImode, operands[2]);
-
- rtx a_unpacked = gen_reg_rtx (DImode);
- rtx b_unpacked = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
-
- rtx low1 = gen_reg_rtx (DImode);
- rtx low = gen_reg_rtx (DImode);
- rtx low_carry = gen_reg_rtx (DImode);
-
- rtx mid = gen_reg_rtx (DImode);
- rtx mid_l32 = gen_reg_rtx (DImode);
- rtx mid_r32 = gen_reg_rtx (DImode);
-
- rtx high1 = gen_reg_rtx (DImode);
- rtx high = gen_reg_rtx (DImode);
- rtx high1_plus_mid_r32 = gen_reg_rtx (DImode);
-
- /* NOTE: We compute using max(a, 0) and max(b, 0) rather than
- min(a, b) and max(a, b) because for multiply we just need to unpack,
- we don't actually care which is min and which is max. And this
- formulation gives the scheduler more freedom in case one of a or b
- would stall at the start of this code sequence. */
- emit_insn (gen_insn_fdouble_unpack_max (a_unpacked, a, const0_rtx));
- emit_insn (gen_insn_fdouble_unpack_max (b_unpacked, b, const0_rtx));
- emit_insn (gen_insn_fdouble_mul_flags (flags, a, b));
-
- /* This depends on the fact that the high few bits of the unpacked
- mantissa are zero, so we can't have a carry out from the mid sum. */
- emit_insn (gen_insn_mul_lu_lu (low1, a_unpacked, b_unpacked));
- emit_insn (gen_insn_mul_hu_lu (mid, a_unpacked, b_unpacked));
- emit_insn (gen_insn_mula_hu_lu (mid, mid, b_unpacked, a_unpacked));
- emit_insn (gen_insn_mul_hu_hu (high1, a_unpacked, b_unpacked));
-
- emit_insn (gen_ashldi3 (mid_l32, mid, GEN_INT (32)));
- emit_insn (gen_lshrdi3 (mid_r32, mid, GEN_INT (32)));
-
- emit_insn (gen_adddi3 (high1_plus_mid_r32, high1, mid_r32));
-
- emit_insn (gen_adddi3 (low, low1, mid_l32));
- emit_insn (gen_insn_cmpltu_didi (low_carry, low, mid_l32));
-
- emit_insn (gen_adddi3 (high, high1_plus_mid_r32, low_carry));
-
- emit_insn (gen_insn_fdouble_pack1 (result, high, flags));
- emit_insn (gen_insn_fdouble_pack2 (result, result, high, low));
-
- DONE;
-})
-
-
-;;
-;; Shifts
-;;
-
-(define_insn "ashl<mode>3"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
- (ashift:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u<nbits>bit_operand" "I,rO")))]
- ""
- "@
- shl<x>i\t%0, %r1, %2
- shl<x>\t%0, %r1, %r2"
- [(set_attr "type" "<shift_pipe>,<shift_pipe>")])
-
-(define_insn "*ashlsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (sign_extend:DI
- (ashift:SI
- (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO"))))]
- ""
- "@
- shlxi\t%0, %r1, %2
- shlx\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_insn "ashr<mode>3"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
- (ashiftrt:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u<nbits>bit_operand" "I,rO")))]
- ""
- "@
- shrsi\t%0, %r1, %2
- shrs\t%0, %r1, %r2")
-
-(define_insn "*ashrsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (sign_extend:DI
- (ashiftrt:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO"))))]
- ""
- "@
- shrsi\t%0, %r1, %2
- shrs\t%0, %r1, %r2")
-
-(define_insn "lshr<mode>3"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
- (lshiftrt:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u<nbits>bit_operand" "I,rO")))]
- ""
- "@
- shru<x>i\t%0, %r1, %2
- shru<x>\t%0, %r1, %r2"
- [(set_attr "type" "<shift_pipe>,<shift_pipe>")])
-
-(define_insn "*lshrsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (sign_extend:DI
- (lshiftrt:SI
- (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO"))))]
- ""
- "@
- shruxi\t%0, %r1, %2
- shrux\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_insn "rotldi3"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (rotate:DI (match_operand:DI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u6bit_operand" "I,rO")))]
- ""
- "@
- rotli\t%0, %r1, %2
- rotl\t%0, %r1, %r2")
-
-(define_insn "insn_shl16insli"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (ior:DI
- (ashift:DI
- (match_operand:DI 1 "reg_or_0_operand" "rO,rO")
- (const_int 16))
- (match_operand:DI 2 "u16bit_or_const_symbolic_operand" "O,KT")))]
- ""
- "@
- shli\t%0, %r1, 16
- shl16insli\t%0, %r1, %H2"
- [(set_attr "type" "*,X01")])
-
-(define_insn "insn_addr_shl16insli<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec:I48MODE
- [(match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (match_operand:I48MODE 2 "const_symbolic_operand" "T")]
- UNSPEC_INSN_ADDR_SHL16INSLI))]
- ""
- "shl16insli\t%0, %r1, %H2"
- [(set_attr "type" "X01")])
-
-
-;;
-;; Compares
-;;
-
-(define_expand "cstore<mode>4"
- [(set (match_operand:DI 0 "register_operand" "")
- (match_operator:DI 1 "ordered_comparison_operator"
- [(match_operand:FI48MODE 2 "reg_or_cint_operand" "")
- (match_operand:FI48MODE 3 "reg_or_cint_operand" "")]))]
- ""
-{
- if (!tilegx_emit_setcc (operands, GET_MODE (operands[2])))
- FAIL;
- else
- DONE;
-})
-
-
-(define_insn "insn_cmpne_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r")
- (ne:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "rO")))]
- ""
- "cmpne\t%0, %r1, %r2")
-
-(define_insn "insn_cmpeq_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
- (eq:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
- ""
- "@
- cmpeqi\t%0, %r1, %2
- cmpeq\t%0, %r1, %r2")
-
-(define_insn "insn_cmplts_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
- (lt:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
- ""
- "@
- cmpltsi\t%0, %r1, %2
- cmplts\t%0, %r1, %r2")
-
-(define_insn "insn_cmpltu_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
- (ltu:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
- ""
- "@
- cmpltui\t%0, %r1, %2
- cmpltu\t%0, %r1, %r2"
- [(set_attr "type" "X01,*")])
-
-(define_insn "insn_cmples_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
- (le:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "L,rO")))]
- ""
- "@
- cmpltsi\t%0, %r1, %P2
- cmples\t%0, %r1, %r2")
-
-(define_insn "insn_cmpleu_<I48MODE:mode><I48MODE2:mode>"
- [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
- (leu:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
- (match_operand:I48MODE 2 "reg_or_cint_operand" "Q,rO")))]
- ""
- "@
- cmpltui\t%0, %r1, %P2
- cmpleu\t%0, %r1, %r2"
- [(set_attr "type" "X01,*")])
-
-
-;;
-;; Logical ops
-;;
-
-(define_insn "and<mode>3"
- [(set (match_operand:IVNMODE 0 "register_operand" "=r,r,r,r")
- (and:IVNMODE (match_operand:IVNMODE 1 "reg_or_0_operand" "%rO,rO,0,rO")
- (match_operand:IVNMODE 2 "and_operand" "I,S,M,rO")))]
- ""
- "@
- andi\t%0, %r1, %2
- bfextu\t%0, %r1, %M2
- bfins\t%0, zero, %m2
- and\t%0, %r1, %r2"
- [(set_attr "type" "*,X0,X0,*")])
-
-(define_insn "*andsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r,r")
- (sign_extend:DI
- (and:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,0,rO")
- (match_operand:SI 2 "and_operand" "I,S,M,rO"))))]
- ""
- "@
- andi\t%0, %r1, %2
- bfextu\t%0, %r1, %M2
- bfins\t%0, zero, %m2
- and\t%0, %r1, %r2"
- [(set_attr "type" "*,X0,X0,*")])
-
-(define_insn "anddi3"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r,r,r,r")
- (and:DI (match_operand:DI 1 "reg_or_0_operand" "%rO,rO,rO,rO,0,rO")
- (match_operand:DI 2 "and_operand" "I,Z0,Z1,S,M,rO")))]
- ""
- "@
- andi\t%0, %r1, %2
- v4int_l\t%0, zero, %r1
- v4int_h\t%0, %r1, zero
- bfextu\t%0, %r1, %M2
- bfins\t%0, zero, %m2
- and\t%0, %r1, %r2"
- [(set_attr "type" "*,X01,X01,X0,X0,*")])
-
-(define_insn "ior<mode>3"
- [(set (match_operand:IVMODE 0 "register_operand" "=r,r")
- (ior:IVMODE (match_operand:IVMODE 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:IVMODE 2 "reg_or_s8bit_operand" "rO,I")))]
- ""
- "@
- or\t%0, %r1, %r2
- ori\t%0, %r1, %2"
- [(set_attr "type" "*,X01")])
-
-(define_insn "*iorsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (sign_extend:DI
- (ior:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:SI 2 "reg_or_s8bit_operand" "rO,I"))))]
- ""
- "@
- or\t%0, %r1, %r2
- ori\t%0, %r1, %2"
- [(set_attr "type" "*,X01")])
-
-(define_insn "xor<mode>3"
- [(set (match_operand:IVMODE 0 "register_operand" "=r,r")
- (xor:IVMODE (match_operand:IVMODE 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:IVMODE 2 "reg_or_s8bit_operand" "rO,I")))]
- ""
- "@
- xor\t%0, %r1, %r2
- xori\t%0, %r1, %2"
- [(set_attr "type" "*,X01")])
-
-(define_insn "*xorsi3_sext"
- [(set (match_operand:DI 0 "register_operand" "=r,r")
- (sign_extend:DI
- (xor:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:SI 2 "reg_or_s8bit_operand" "rO,I"))))]
- ""
- "@
- xor\t%0, %r1, %r2
- xori\t%0, %r1, %2"
- [(set_attr "type" "*,X01")])
-
-(define_insn "clzdi2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (clz:DI (match_operand:DI 1 "reg_or_0_operand" "rO")))]
- ""
- "clz\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_expand "clzsi2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (clz:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
- ""
- {
- rtx tmp1 = gen_reg_rtx (DImode);
- rtx tmp2 = gen_reg_rtx (DImode);
- rtx tmp3 = gen_reg_rtx (DImode);
-
- emit_insn (gen_zero_extendsidi2 (tmp1, operands[1]));
- emit_insn (gen_ashldi3 (tmp2, tmp1, (GEN_INT (32))));
- emit_insn (gen_clzdi2 (tmp3, tmp2));
- emit_move_insn (operands[0], gen_lowpart (SImode, tmp3));
- DONE;
- })
-
-(define_insn "ctz<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (ctz:I48MODE (match_operand:DI 1 "reg_or_0_operand" "rO")))]
- ""
- "ctz\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "popcount<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (popcount:I48MODE (match_operand:DI 1 "reg_or_0_operand" "rO")))]
- ""
- "pcnt\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_expand "parity<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (parity:I48MODE (match_operand:DI 1 "reg_or_0_operand" "")))]
- ""
- {
- rtx tmp = gen_reg_rtx (<MODE>mode);
- emit_insn (gen_popcount<mode>2 (tmp, operands[1]));
- emit_insn (gen_and<mode>3 (operands[0], tmp, const1_rtx));
- DONE;
- })
-
-(define_insn "bswapdi2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (bswap:DI (match_operand:DI 1 "reg_or_0_operand" "rO")))]
- ""
- "revbytes\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_expand "bswapsi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (bswap:SI (match_operand:SI 1 "reg_or_0_operand" "")))]
- ""
- {
- rtx tmp = gen_reg_rtx (DImode);
- emit_insn (gen_bswapdi2 (tmp, gen_lowpart (DImode, operands[1])));
- emit_insn (gen_ashrdi3 (gen_lowpart (DImode, operands[0]),
- tmp, GEN_INT (32)));
- DONE;
- })
-
-(define_insn "one_cmpl<mode>2"
- [(set (match_operand:IVMODE 0 "register_operand" "=r")
- (not:IVMODE (match_operand:IVMODE 1 "reg_or_0_operand" "rO")))]
- ""
- "nor\t%0, %r1, zero")
-
-
-;;
-;; Conditional moves
-;;
-
-(define_expand "mov<mode>cc"
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (if_then_else:I48MODE
- (match_operand 1 "comparison_operator" "")
- (match_operand:I48MODE 2 "reg_or_0_operand" "")
- (match_operand:I48MODE 3 "reg_or_0_operand" "")))]
- ""
- { operands[1] = tilegx_emit_conditional_move (operands[1]); })
-
-(define_insn "movcc_insn_<I48MODE2:mode><I48MODE:mode>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r,r")
- (if_then_else:I48MODE
- (match_operator 4 "eqne_operator"
- [(match_operand:I48MODE2 1 "reg_or_0_operand" "rO,rO,rO,rO")
- (const_int 0)])
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO,O,rO,0")
- (match_operand:I48MODE 3 "reg_or_0_operand" "O,rO,0,rO")))]
- ""
- "@
- m%c4\t%0, %r1, %r2
- m%C4\t%0, %r1, %r3
- cmov%d4z\t%0, %r1, %r2
- cmov%D4z\t%0, %r1, %r3"
- [(set_attr "type" "*,*,Y0,Y0")])
-
-(define_expand "insn_mz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:DI
- (eq (match_operand:DI 1 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:DI 2 "reg_or_0_operand" "")
- (const_int 0)))])
-
-(define_expand "insn_mnz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:DI
- (ne (match_operand:DI 1 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:DI 2 "reg_or_0_operand" "")
- (const_int 0)))])
-
-(define_expand "insn_cmoveqz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:DI
- (eq (match_operand:DI 2 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:DI 3 "reg_or_0_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")))])
-
-(define_expand "insn_cmovnez"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:DI
- (ne (match_operand:DI 2 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:DI 3 "reg_or_0_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")))])
-
-
-;;
-;; Conversions
-;;
-
-(define_insn "zero_extendqi<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
- (zero_extend:I48MODE (match_operand:QI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- bfextu\t%0, %r1, 0, 7
- ld1u\t%0, %1
- ld1u_add\t%0, %I1, %i1"
- [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
-
-(define_insn "zero_extendhi<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
- (zero_extend:I48MODE (match_operand:HI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- bfextu\t%0, %r1, 0, 15
- ld2u\t%0, %1
- ld2u_add\t%0, %I1, %i1"
- [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
-
-(define_insn "zero_extendsidi2"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r")
- (zero_extend:DI (match_operand:SI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- v4int_l\t%0, zero, %r1
- ld4u\t%0, %1
- ld4u_add\t%0, %I1, %i1"
- [(set_attr "type" "X01,Y2_2cycle,X1_2cycle")])
-
-(define_insn "extendqi<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
- (sign_extend:I48MODE (match_operand:QI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- bfexts\t%0, %r1, 0, 7
- ld1s\t%0, %1
- ld1s_add\t%0, %I1, %i1"
- [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
-
-(define_insn "extendhi<mode>2"
- [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
- (sign_extend:I48MODE (match_operand:HI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- bfexts\t%0, %r1, 0, 15
- ld2s\t%0, %1
- ld2s_add\t%0, %I1, %i1"
- [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
-
-;; All SImode integer registers should already be in sign-extended form
-;; (see TARGET_TRULY_NOOP_TRUNCATION and truncdisi2). We can therefore
-;; get rid of register->register instructions if we constrain the
-;; source to be in the same register as the destination.
-(define_insn_and_split "extendsidi2"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r")
- (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "0,U,m")))]
- ""
- "@
- #
- ld4s\t%0, %1
- ld4s_add\t%0, %I1, %i1"
- "&& reload_completed && register_operand (operands[1], VOIDmode)"
- [(const_int 0)]
-{
- emit_note (NOTE_INSN_DELETED);
- DONE;
-}
- [(set_attr "type" "*,Y2_2cycle,X1_2cycle")])
-
-;; Integer truncation patterns. Truncating SImode values to smaller
-;; modes is a no-op, as it is for most other GCC ports. Truncating
-;; DImode values to SImode is not a no-op since we
-;; need to make sure that the lower 32 bits are properly sign-extended
-;; (see TARGET_TRULY_NOOP_TRUNCATION). Truncating DImode values into modes
-;; smaller than SImode is equivalent to two separate truncations:
-;;
-;; A B
-;; DI ---> HI == DI ---> SI ---> HI
-;; DI ---> QI == DI ---> SI ---> QI
-;;
-;; Step A needs a real instruction but step B does not.
-
-(define_insn "truncdisi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,U,m")
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO,rO,rO")))]
- ""
- "@
- addxi\t%0, %r1, 0
- st4\t%0, %r1
- st4_add\t%I0, %r1, %i0"
- [(set_attr "type" "Y01,Y2,X1")])
-
-(define_insn "truncdihi2"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=r,U,m")
- (truncate:HI (match_operand:DI 1 "reg_or_0_operand" "rO,rO,rO")))]
- ""
- "@
- addxi\t%0, %r1, 0
- st2\t%0, %r1
- st2_add\t%I0, %r1, %i0"
- [(set_attr "type" "Y01,Y2,X1")])
-
-(define_insn "truncdiqi2"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=r,U,m")
- (truncate:QI (match_operand:DI 1 "reg_or_0_operand" "rO,rO,rO")))]
- ""
- "@
- addxi\t%0, %r1, 0
- st1\t%0, %r1
- st1_add\t%I0, %r1, %i0"
- [(set_attr "type" "Y01,Y2,X1")])
-
-;; Combiner patterns to optimize away unnecessary truncates.
-
-(define_insn "*zero_extendsidi_truncdisi"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (zero_extend:DI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))))]
- ""
- "v4int_l\t%0, zero, %r1"
- [(set_attr "type" "X01")])
-
-(define_insn "*addsi_truncdisi"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
- (plus:SI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "%rO,rO,rO"))
- (match_operand:SI 2 "add_operand" "r,I,JT")))]
- ""
- "@
- addx\t%0, %r1, %r2
- addxi\t%0, %r1, %2
- addxli\t%0, %r1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-(define_insn "*addsi_truncdisi2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))
- (truncate:SI (match_operand:DI 2 "reg_or_0_operand" "rO"))))]
- ""
- "addx\t%0, %r1, %r2")
-
-(define_insn "*ashldi_truncdisi"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (ashift:DI
- (match_operand:DI 1 "reg_or_0_operand" "rO")
- (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
- ""
- "shl\t%0, %r1, %r2")
-
-(define_insn "*ashlsi_truncdisi"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (ashift:SI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO,rO"))
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- shlxi\t%0, %r1, %2
- shlx\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_insn "*ashlsi_truncdisi2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ashift:SI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))
- (truncate:SI (match_operand:DI 2 "reg_or_0_operand" "rO"))))]
- ""
- "shlx\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "*ashrdi3_truncdisi"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (ashiftrt:DI
- (match_operand:DI 1 "reg_or_0_operand" "rO")
- (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
- ""
- "shrs\t%0, %r1, %r2")
-
-(define_insn "*lshrsi_truncdisi"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (lshiftrt:SI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO,rO"))
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- shruxi\t%0, %r1, %2
- shrux\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_insn "*lshrsi_truncdisi2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (lshiftrt:SI
- (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))
- (truncate:SI (match_operand:DI 2 "reg_or_0_operand" "rO"))))]
- ""
- "shrux\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "*lshrdi_truncdisi"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (lshiftrt:DI
- (match_operand:DI 1 "reg_or_0_operand" "rO")
- (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
- ""
- "shru\t%0, %r1, %r2")
-
-(define_insn "*rotldi_truncdisi"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (rotate:DI
- (match_operand:DI 1 "reg_or_0_operand" "rO")
- (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
- ""
- "rotl\t%0, %r1, %r2")
-
-;; Integer to floating point conversions
-
-(define_expand "floatsisf2"
- [(set (match_operand:SF 0 "register_operand" "")
- (float:SI (match_operand:SI 1 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = operands[1];
-
- rtx nega = gen_reg_rtx (SImode);
- rtx exp = gen_reg_rtx (DImode);
- rtx sign = gen_reg_rtx (DImode);
- rtx abs = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
- rtx tmp1 = gen_reg_rtx (DImode);
- rtx tmp2 = gen_reg_rtx (DImode);
-
- emit_move_insn (exp, GEN_INT (0x9e));
-
- emit_insn (gen_negsi2 (nega, a));
-
- emit_insn (gen_insn_cmplts_sisi (gen_lowpart (SImode, sign), a, const0_rtx));
- emit_insn (gen_insn_cmoveqz (abs, gen_lowpart (DImode, nega), sign,
- gen_lowpart (DImode, a)));
-
- emit_insn (gen_insn_bfins (tmp1, exp, sign, GEN_INT (10), GEN_INT (10)));
- emit_insn (gen_insn_bfins (tmp2, tmp1, abs, GEN_INT (32), GEN_INT (63)));
- emit_insn (gen_insn_fsingle_pack1 (flags, tmp2));
- emit_insn (gen_insn_fsingle_pack2 (result, tmp2, flags));
- DONE;
-})
-
-(define_expand "floatunssisf2"
- [(set (match_operand:SF 0 "register_operand" "")
- (float:SI (match_operand:SI 1 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = operands[1];
-
- rtx exp = gen_reg_rtx (DImode);
- rtx flags = gen_reg_rtx (DImode);
- rtx tmp = gen_reg_rtx (DImode);
-
- emit_move_insn (exp, GEN_INT (0x9e));
- emit_insn (gen_insn_bfins (tmp, exp, gen_lowpart (DImode, a),
- GEN_INT (32), GEN_INT (63)));
- emit_insn (gen_insn_fsingle_pack1 (flags, tmp));
- emit_insn (gen_insn_fsingle_pack2 (result, tmp, flags));
- DONE;
-})
-
-(define_expand "floatsidf2"
- [(set (match_operand:DF 0 "register_operand" "")
- (float:SI (match_operand:SI 1 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
-
- rtx nega = gen_reg_rtx (DImode);
- rtx exp = gen_reg_rtx (DImode);
- rtx sign = gen_reg_rtx (DImode);
- rtx abs = gen_reg_rtx (DImode);
- rtx tmp1 = gen_reg_rtx (DImode);
- rtx tmp2 = gen_reg_rtx (DImode);
- rtx tmp3 = gen_reg_rtx (DImode);
-
- emit_move_insn (exp, GEN_INT (0x21b00));
-
- emit_insn (gen_negdi2 (nega, a));
-
- emit_insn (gen_insn_cmplts_didi (sign, a, const0_rtx));
- emit_insn (gen_insn_cmovnez (abs, a, sign, nega));
-
- emit_insn (gen_ashldi3 (tmp1, abs, GEN_INT (4)));
- emit_insn (gen_insn_bfins (tmp2, exp, sign, GEN_INT (20), GEN_INT (20)));
- emit_insn (gen_insn_fdouble_pack1 (tmp3, tmp1, tmp2));
- emit_insn (gen_insn_fdouble_pack2 (result, tmp3, tmp1, const0_rtx));
- DONE;
-})
-
-(define_expand "floatunssidf2"
- [(set (match_operand:DF 0 "register_operand" "")
- (float:SI (match_operand:SI 1 "register_operand" "")))]
- ""
-{
- rtx result = gen_lowpart (DImode, operands[0]);
- rtx a = gen_lowpart (DImode, operands[1]);
-
- rtx exp = gen_reg_rtx (DImode);
- rtx tmp1 = gen_reg_rtx (DImode);
- rtx tmp2 = gen_reg_rtx (DImode);
-
- emit_move_insn (exp, GEN_INT (0x21b00));
- emit_insn (gen_insn_bfins (tmp1, const0_rtx, a, GEN_INT (4), GEN_INT (35)));
- emit_insn (gen_insn_fdouble_pack1 (tmp2, tmp1, exp));
- emit_insn (gen_insn_fdouble_pack2 (result, tmp2, tmp1, const0_rtx));
- DONE;
-})
-
-
-;;
-;; Multiplies
-;;
-
-(define_insn "mulsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "mulx\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "mulsidi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (sign_extend:DI
- (match_operand:SI 1 "reg_or_0_operand" "%rO"))
- (sign_extend:DI
- (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mul_ls_ls\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "umulsidi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (zero_extend:DI
- (match_operand:SI 1 "reg_or_0_operand" "%rO"))
- (zero_extend:DI
- (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mul_lu_lu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_expand "muldi3"
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec:DI [(match_operand:DI 1 "nonmemory_operand" "")
- (match_operand:DI 2 "nonmemory_operand" "")]
- UNSPEC_INSN_MUL_HU_LU))
- (set (match_dup 0)
- (unspec:DI [(match_dup 0) (match_dup 2) (match_dup 1)]
- UNSPEC_INSN_MULA_HU_LU))
- (set (match_dup 0)
- (ashift:DI (match_dup 0) (const_int 32)))
- (set (match_dup 0)
- (unspec:DI [(match_dup 0) (match_dup 2) (match_dup 1)]
- UNSPEC_INSN_MULA_LU_LU))]
- ""
- {
- operands[1] = force_reg (DImode, operands[1]);
- operands[1] = make_safe_from (operands[1], operands[0]);
-
- if (tilegx_expand_muldi (operands[0], operands[1], operands[2]))
- DONE;
- else
- {
- operands[2] = force_reg (DImode, operands[2]);
- operands[2] = make_safe_from (operands[2], operands[0]);
- }
- })
-
-(define_insn "usmulsidi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (zero_extend:DI
- (match_operand:SI 1 "reg_or_0_operand" "rO"))
- (sign_extend:DI
- (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mul_ls_lu\t%0, %r2, %r1"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "maddsidi4"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (plus:DI
- (mult:DI (sign_extend:DI
- (match_operand:SI 1 "reg_or_0_operand" "rO"))
- (sign_extend:DI
- (match_operand:SI 2 "reg_or_0_operand" "rO")))
- (match_operand:DI 3 "register_operand" "0")))]
- ""
- "mula_ls_ls\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "umaddsidi4"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (plus:DI
- (mult:DI (zero_extend:DI
- (match_operand:SI 1 "reg_or_0_operand" "rO"))
- (zero_extend:DI
- (match_operand:SI 2 "reg_or_0_operand" "rO")))
- (match_operand:DI 3 "register_operand" "0")))]
- ""
- "mula_lu_lu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_expand "smulsi3_highpart"
- [(set (match_dup 3)
- (mult:DI (sign_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
- (sign_extend:DI (match_operand:SI 2 "reg_or_0_operand" ""))))
- (set (match_dup 4)
- (ashiftrt:DI (match_dup 3) (const_int 32)))
- (set (match_operand:SI 0 "register_operand" "")
- (truncate:SI (match_dup 4)))]
- ""
- {
- operands[3] = gen_reg_rtx (DImode);
- operands[4] = gen_reg_rtx (DImode);
- })
-
-(define_expand "umulsi3_highpart"
- [(set (match_dup 3)
- (mult:DI (zero_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
- (zero_extend:DI (match_operand:SI 2 "reg_or_0_operand" ""))))
- (set (match_dup 4)
- (lshiftrt:DI (match_dup 3) (const_int 32)))
- (set (match_operand:SI 0 "register_operand" "")
- (truncate:SI (match_dup 4)))]
- ""
- {
- operands[3] = gen_reg_rtx (DImode);
- operands[4] = gen_reg_rtx (DImode);
- })
-
-(define_expand "smuldi3_highpart"
- [(set (match_operand:DI 0 "register_operand" "")
- (truncate:DI
- (ashiftrt:TI
- (mult:TI (sign_extend:TI (match_operand:DI 1 "reg_or_0_operand" ""))
- (sign_extend:TI (match_operand:DI 2 "reg_or_0_operand" "")))
- (const_int 64))))]
- ""
- {
- tilegx_expand_smuldi3_highpart (operands[0], operands[1], operands[2]);
- DONE;
- })
-
-(define_expand "umuldi3_highpart"
- [(set (match_operand:DI 0 "register_operand" "")
- (truncate:DI
- (lshiftrt:TI
- (mult:TI (zero_extend:TI (match_operand:DI 1 "reg_or_0_operand" ""))
- (zero_extend:TI (match_operand:DI 2 "reg_or_0_operand" "")))
- (const_int 64))))]
- ""
-{
- tilegx_expand_umuldi3_highpart (operands[0], operands[1], operands[2]);
- DONE;
-})
-
-
-;;
-;; Divide stubs. These exist to work around a bug in expmed.cc, which
-;; will not attempt to convert a divide by constant into a multiply
-;; unless there is a pattern for a divide of the same mode. The end
-;; result is a 32-bit divide turns into 64-bit multiply.
-;;
-
-(define_expand "divsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (div:SI (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- FAIL;
-})
-
-(define_expand "udivsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (udiv:SI (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- FAIL;
-})
-
-
-;;
-;; Loops
-;;
-
-;; Define the subtract-one-and-jump insns so loop.c knows what to
-;; generate.
-(define_expand "doloop_end"
- [(use (match_operand 0 "" "")) ;; loop pseudo
- (use (match_operand 1 "" ""))] ;; label
- ""
-{
- if (optimize > 0 && flag_modulo_sched)
- {
- rtx s0;
- rtx bcomp;
- rtx loc_ref;
- machine_mode mode = GET_MODE (operands[0]);
-
- /* only deal with loop counters in SImode or DImode */
- if (mode != SImode && mode != DImode)
- FAIL;
-
- s0 = operands [0];
- emit_move_insn (s0, gen_rtx_PLUS (mode, s0, GEN_INT (-1)));
- bcomp = gen_rtx_NE(mode, s0, const0_rtx);
- loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [1]);
- emit_jump_insn (gen_rtx_SET (pc_rtx,
- gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
- loc_ref, pc_rtx)));
- DONE;
- }
- else
- FAIL;
-
-})
-
-;;
-;; Prologue/epilogue
-;;
-(define_expand "prologue"
- [(const_int 0)]
- ""
-{
- tilegx_expand_prologue ();
- DONE;
-})
-
-(define_expand "epilogue"
- [(const_int 0)]
- ""
-{
- tilegx_expand_epilogue (false);
- DONE;
-})
-
-(define_expand "sibcall_epilogue"
- [(const_int 0)]
- ""
-{
- tilegx_expand_epilogue (true);
- DONE;
-})
-
-;;
-;; Stack manipulations
-;;
-
-;; An insn to allocate new stack space for dynamic use (e.g., alloca).
-(define_expand "allocate_stack"
- [(set (match_operand 0 "register_operand" "")
- (minus (reg 54) (match_operand 1 "nonmemory_operand" "")))
- (set (reg 54)
- (minus (reg 54) (match_dup 1)))]
- ""
- "tilegx_allocate_stack (operands[0], operands[1]); DONE;")
-
-;;
-;; Branches
-;;
-
-(define_expand "call"
- [(parallel [(call (match_operand:DI 0 "call_operand" "")
- (match_operand 1 "" ""))
- (use (reg:DI 54))
- (clobber (reg:DI 55))])]
- ""
-{
- rtx orig_addr = XEXP (operands[0], 0);
- rtx addr;
- if (GET_CODE (orig_addr) == SYMBOL_REF)
- {
- if (tilegx_cmodel == CM_LARGE)
- {
- addr = gen_reg_rtx (Pmode);
- tilegx_expand_set_const64 (addr, orig_addr);
- operands[0] = gen_rtx_MEM (DImode, addr);
- }
- else if (tilegx_cmodel == CM_LARGE_PIC)
- {
- crtl->uses_pic_offset_table = 1;
- addr = gen_reg_rtx (Pmode);
- if (SYMBOL_REF_LOCAL_P (orig_addr))
- tilegx_compute_pcrel_address (addr, orig_addr);
- else
- tilegx_compute_pcrel_plt_address (addr, orig_addr);
- operands[0] = gen_rtx_MEM (DImode, addr);
- }
- }
-})
-
-(define_insn "*call_insn"
- [(call (mem:DI (match_operand:I48MODE 0 "call_address_operand" "rO,i"))
- (match_operand 1 "" ""))
- (use (reg:DI 54))
- (clobber (reg:DI 55))]
- ""
- "@
- jalr\t%r0
- jal\t%p0"
- [(set_attr "type" "Y1,X1")])
-
-(define_expand "call_value"
- [(parallel [(set (match_operand 0 "register_operand" "")
- (call (match_operand:DI 1 "call_operand" "")
- (match_operand 2 "" "")))
- (use (reg:DI 54))
- (clobber (reg:DI 55))])]
- ""
-{
- rtx orig_addr = XEXP (operands[1], 0);
- rtx addr;
- if (GET_CODE (orig_addr) == SYMBOL_REF)
- {
- if (tilegx_cmodel == CM_LARGE)
- {
- addr = gen_reg_rtx (Pmode);
- tilegx_expand_set_const64 (addr, orig_addr);
- operands[1] = gen_rtx_MEM (DImode, addr);
- }
- else if (tilegx_cmodel == CM_LARGE_PIC)
- {
- crtl->uses_pic_offset_table = 1;
- addr = gen_reg_rtx (Pmode);
- if (SYMBOL_REF_LOCAL_P (orig_addr))
- tilegx_compute_pcrel_address (addr, orig_addr);
- else
- tilegx_compute_pcrel_plt_address (addr, orig_addr);
- operands[1] = gen_rtx_MEM (DImode, addr);
- }
- }
-})
-
-(define_insn "*call_value_insn"
- [(set (match_operand 0 "register_operand" "=r,r")
- (call (mem:DI (match_operand:I48MODE 1 "call_address_operand" "rO,i"))
- (match_operand 2 "" "")))
- (use (reg:DI 54))
- (clobber (reg:DI 55))]
- ""
- "@
- jalr\t%r1
- jal\t%p1"
- [(set_attr "type" "Y1,X1")])
-
-(define_expand "sibcall"
- [(parallel [(call (match_operand:DI 0 "call_operand" "")
- (match_operand 1 "" ""))
- (use (reg:DI 54))])]
- ""
- "")
-
-(define_insn "*sibcall_insn"
- [(call (mem:DI (match_operand:I48MODE 0 "call_address_operand" "rO,i"))
- (match_operand 1 "" ""))
- (use (reg:DI 54))]
- "SIBLING_CALL_P(insn)"
- "@
- jr\t%r0
- j\t%p0"
- [(set_attr "type" "Y1,X1")])
-
-(define_expand "sibcall_value"
- [(parallel [(set (match_operand 0 "" "")
- (call (match_operand:DI 1 "call_operand" "")
- (match_operand 2 "" "")))
- (use (reg:DI 54))])]
- ""
- "")
-
-(define_insn "*sibcall_value"
- [(set (match_operand 0 "" "")
- (call (mem:DI (match_operand:I48MODE 1 "call_address_operand" "rO,i"))
- (match_operand 2 "" "")))
- (use (reg:DI 54))]
- "SIBLING_CALL_P(insn)"
- "@
- jr\t%r1
- j\t%p1"
- [(set_attr "type" "Y1,X1")])
-
-(define_insn "jump"
- [(set (pc) (label_ref (match_operand 0 "" "")))]
- ""
- "j\t%l0"
- [(set_attr "type" "X1")])
-
-(define_insn "indirect_jump"
- [(set (pc) (match_operand 0 "pointer_operand" "rO"))]
- ""
- "jr\t%r0"
- [(set_attr "type" "Y1")])
-
-(define_expand "return"
- [(parallel
- [(return)
- (use (reg:DI 55))])]
- "tilegx_can_use_return_insn_p ()"
- "")
-
-(define_insn "_return"
- [(return)
- (use (reg:DI 55))]
- "reload_completed"
- "jrp\tlr"
- [(set_attr "type" "Y1")])
-
-(define_expand "tablejump"
- [(set (pc) (match_operand 0 "pointer_operand" ""))
- (use (label_ref (match_operand 1 "" "")))]
- ""
-{
- tilegx_expand_tablejump (operands[0], operands[1]);
- DONE;
-})
-
-(define_insn "tablejump_aux"
- [(set (pc) (match_operand 0 "pointer_operand" "rO"))
- (use (label_ref (match_operand 1 "" "")))]
- ""
- "jr\t%r0"
- [(set_attr "type" "Y1")])
-
-;; Call subroutine returning any type.
-(define_expand "untyped_call"
- [(parallel [(call (match_operand 0 "" "")
- (const_int 0))
- (match_operand 1 "" "")
- (match_operand 2 "" "")])]
- ""
-{
- int i;
-
- emit_call_insn (gen_call (operands[0], const0_rtx));
-
- for (i = 0; i < XVECLEN (operands[2], 0); i++)
- {
- rtx set = XVECEXP (operands[2], 0, i);
- emit_move_insn (SET_DEST (set), SET_SRC (set));
- }
-
- /* The optimizer does not know that the call sets the function value
- registers we stored in the result block. We avoid problems by
- claiming that all hard registers are used and clobbered at this
- point. */
- emit_insn (gen_blockage ());
-
- DONE;
-})
-
-;; UNSPEC_VOLATILE is considered to use and clobber all hard registers
-;; and all of memory. This blocks insns from being moved across this
-;; point.
-(define_insn "blockage"
- [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)]
- ""
- "pseudo"
- [(set_attr "type" "nothing")
- (set_attr "length" "0")])
-
-;; Internal expanders to prevent memory ops from moving around frame
-;; allocation/deallocation.
-;;
-;; TODO: really this clobber should just clobber the frame memory. Is
-;; this possibly by clobbering memory @ the sp reg (as alpha does?)
-;; or by explicitly setting the alias set to the frame?
-(define_insn "sp_adjust"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r")
- (plus:DI
- (match_operand:DI 1 "register_operand" "%r,r,r")
- (match_operand:DI 2 "add_operand" "r,I,JT")))
- (clobber (mem:BLK (scratch)))]
- ""
- "@
- add\t%0, %1, %2
- addi\t%0, %1, %2
- addli\t%0, %1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-(define_insn "sp_adjust_32bit"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
- (plus:SI
- (match_operand:SI 1 "register_operand" "%r,r,r")
- (match_operand:SI 2 "add_operand" "r,I,JT")))
- (clobber (mem:BLK (scratch)))]
- ""
- "@
- addx\t%0, %1, %2
- addxi\t%0, %1, %2
- addxli\t%0, %1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-;; Used for move sp, r52, to pop a stack frame. We need to make sure
-;; that stack frame memory operations have been issued before we do
-;; this. TODO: see above TODO.
-(define_insn "sp_restore<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (match_operand:I48MODE 1 "register_operand" "r"))
- (clobber (mem:BLK (scratch)))]
- ""
- "move\t%0, %1")
-
-(define_insn "nop"
- [(const_int 0)]
- ""
- "nop"
- [(set_attr "type" "Y01")])
-
-(define_insn "trap"
- [(trap_if (const_int 1) (const_int 0))]
- ""
- "raise; moveli zero, 6"
- [(set_attr "type" "cannot_bundle")])
-
-
-;;
-;; Conditional branches
-;;
-
-(define_expand "cbranch<mode>4"
- [(set (pc)
- (if_then_else (match_operator 0 "ordered_comparison_operator"
- [(match_operand:FI48MODE 1 "reg_or_cint_operand")
- (match_operand:FI48MODE 2 "reg_or_cint_operand")])
- (label_ref (match_operand 3 ""))
- (pc)))]
- ""
-{
- tilegx_emit_conditional_branch (operands, GET_MODE (operands[1]));
- DONE;
-})
-
-(define_insn "*bcc_normal<mode>"
- [(set (pc)
- (if_then_else
- (match_operator 1 "signed_comparison_operator"
- [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")
- (const_int 0)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- { return tilegx_output_cbranch (insn, operands, false); }
- [(set_attr "type" "X1_branch")])
-
-(define_insn "*bcc_reverse<mode>"
- [(set (pc)
- (if_then_else
- (match_operator 1 "signed_comparison_operator"
- [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")
- (const_int 0)])
- (pc)
- (label_ref (match_operand 0 "" ""))))]
- ""
- { return tilegx_output_cbranch (insn, operands, true); }
- [(set_attr "type" "X1_branch")])
-
-(define_insn "*blbs_normal<mode>"
- [(set (pc)
- (if_then_else
- (ne (zero_extract:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (const_int 1)
- (const_int 0))
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- { return tilegx_output_cbranch_with_opcode (insn, operands, "blbs", "blbc",
- 1); }
- [(set_attr "type" "X1_branch")])
-
-(define_insn "*blbc_normal<mode>"
- [(set (pc)
- (if_then_else
- (eq (zero_extract:I48MODE
- (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
- (const_int 1)
- (const_int 0))
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- { return tilegx_output_cbranch_with_opcode (insn, operands, "blbc", "blbs",
- 1); }
- [(set_attr "type" "X1_branch")])
-
-;; Note that __insn_mf() expands to this.
-(define_expand "memory_barrier"
- [(set (match_dup 0)
- (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
- ""
-{
- operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
- MEM_VOLATILE_P (operands[0]) = 1;
-})
-
-(define_insn "*memory_barrier"
- [(set (match_operand:BLK 0 "" "")
- (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
- ""
- "mf"
- [(set_attr "type" "X1")])
-
-(define_insn "prefetch"
- [(prefetch (match_operand 0 "address_operand" "rO")
- (match_operand 1 "const_int_operand" "")
- (match_operand 2 "const_int_operand" ""))]
- ""
-{
- switch (INTVAL (operands[2]))
- {
- case 0:
- case 1: return "prefetch_l3\t%r0";
- case 2: return "prefetch_l2\t%r0";
- case 3: return "prefetch_l1\t%r0";
- default: gcc_unreachable ();
- }
-}
- [(set_attr "type" "Y2")])
-
-
-;;
-;; "__insn" Intrinsics (some expand directly to normal patterns above).
-;;
-
-(define_insn "insn_bfexts"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "u6bit_cint_operand" "n")
- (match_operand:DI 3 "u6bit_cint_operand" "n")]
- UNSPEC_INSN_BFEXTS))]
- ""
- "bfexts\t%0, %r1, %2, %3"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_bfextu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "u6bit_cint_operand" "n")
- (match_operand:DI 3 "u6bit_cint_operand" "n")]
- UNSPEC_INSN_BFEXTU))]
- ""
- "bfextu\t%0, %r1, %2, %3"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_bfins"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "u6bit_cint_operand" "n")
- (match_operand:DI 4 "u6bit_cint_operand" "n")]
- UNSPEC_INSN_BFINS))]
- ""
- "bfins\t%0, %r2, %3, %4"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_cmpexch<four_if_si>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (mem:I48MODE (match_operand 1 "pointer_operand" "rO")))
- (set (mem:I48MODE (match_dup 1))
- (unspec_volatile:I48MODE
- [(mem:I48MODE (match_dup 1))
- (reg:I48MODE TILEGX_CMPEXCH_REG)
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMPEXCH))]
- ""
- "cmpexch<four_if_si>\t%0, %r1, %r2"
- [(set_attr "type" "X1_remote")])
-
-(define_insn "insn_cmul"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMUL))]
- ""
- "cmul\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_cmula"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMULA))]
- ""
- "cmula\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_cmulaf"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMULAF))]
- ""
- "cmulaf\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_cmulf"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMULF))]
- ""
- "cmulf\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_cmulfr"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMULFR))]
- ""
- "cmulfr\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_cmulh"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMULH))]
- ""
- "cmulh\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_cmulhr"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CMULHR))]
- ""
- "cmulhr\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_crc32_32"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CRC32_32))]
- ""
- "crc32_32\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_crc32_8"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CRC32_8))]
- ""
- "crc32_8\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_dblalign"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand 3 "pointer_operand" "rO")]
- UNSPEC_INSN_DBLALIGN))]
- ""
- "dblalign\t%0, %r2, %r3"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_dblalign2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_DBLALIGN2))]
- ""
- "dblalign2\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_dblalign4"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_DBLALIGN4))]
- ""
- "dblalign4\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_dblalign6"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_DBLALIGN6))]
- ""
- "dblalign6\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_dtlbpr"
- [(unspec_volatile:VOID [(match_operand:DI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_DTLBPR)]
- ""
- "dtlbpr\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_exch<four_if_si>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (mem:I48MODE (match_operand 1 "pointer_operand" "rO")))
- (set (mem:I48MODE (match_dup 1))
- (unspec_volatile:I48MODE
- [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_EXCH))]
- ""
- "exch<four_if_si>\t%0, %r1, %r2"
- [(set_attr "type" "X1_remote")])
-
-(define_insn "insn_fdouble_add_flags"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_ADD_FLAGS))]
- ""
- "fdouble_add_flags\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_addsub"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_ADDSUB))]
- ""
- "fdouble_addsub\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_mul_flags"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_MUL_FLAGS))]
- ""
- "fdouble_mul_flags\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_pack1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_PACK1))]
- ""
- "fdouble_pack1\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_pack2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_PACK2))]
- ""
- "fdouble_pack2\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_sub_flags"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_SUB_FLAGS))]
- ""
- "fdouble_sub_flags\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_unpack_max"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_UNPACK_MAX))]
- ""
- "fdouble_unpack_max\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fdouble_unpack_min"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FDOUBLE_UNPACK_MIN))]
- ""
- "fdouble_unpack_min\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fetchadd<four_if_si>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec_volatile:I48MODE
- [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_ATOMIC))
- (set (mem:I48MODE (match_dup 1))
- (plus:I48MODE (mem:I48MODE (match_dup 1))
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
- ""
- "fetchadd<four_if_si>\t%0, %r1, %r2"
- [(set_attr "type" "X1_remote")])
-
-(define_insn "insn_fetchaddgez<four_if_si>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec_volatile:I48MODE
- [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_ATOMIC))
- (set (mem:I48MODE (match_dup 1))
- (unspec:I48MODE [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")
- (mem:I48MODE (match_dup 1))]
- UNSPEC_INSN_FETCHADDGEZ))]
- ""
- "fetchaddgez<four_if_si>\t%0, %r1, %r2"
- [(set_attr "type" "X1_remote")])
-
-(define_insn "insn_fetchand<four_if_si>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec_volatile:I48MODE
- [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_ATOMIC))
- (set (mem:I48MODE (match_dup 1))
- (and:I48MODE (mem:I48MODE (match_dup 1))
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
- ""
- "fetchand<four_if_si>\t%0, %r1, %r2"
- [(set_attr "type" "X1_remote")])
-
-(define_insn "insn_fetchor<four_if_si>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (unspec_volatile:I48MODE
- [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_ATOMIC))
- (set (mem:I48MODE (match_dup 1))
- (ior:I48MODE (mem:I48MODE (match_dup 1))
- (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
- ""
- "fetchor<four_if_si>\t%0, %r1, %r2"
- [(set_attr "type" "X1_remote")])
-
-(define_insn "insn_finv"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_FINV)]
- ""
- "finv\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_flush"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_FLUSH)]
- ""
- "flush\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_flushwb"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_FLUSHWB)]
- ""
- "flushwb"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_fnop"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_FNOP)]
- ""
- "fnop")
-
-(define_insn "insn_fsingle_add1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_ADD1))]
- ""
- "fsingle_add1\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_fsingle_addsub2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_ADDSUB2))]
- ""
- "fsingle_addsub2\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fsingle_mul1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_MUL1))]
- ""
- "fsingle_mul1\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_fsingle_mul2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_MUL2))]
- ""
- "fsingle_mul2\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fsingle_pack1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_PACK1))]
- ""
- "fsingle_pack1\t%0, %r1"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_fsingle_pack2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_PACK2))]
- ""
- "fsingle_pack2\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_fsingle_sub1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FSINGLE_SUB1))]
- ""
- "fsingle_sub1\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_drain"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_DRAIN)]
- ""
- "drain"
- [(set_attr "type" "cannot_bundle")])
-
-(define_insn "insn_icoh"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_ICOH)]
- ""
- "icoh\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_ill"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_ILL)]
- ""
- "ill"
- [(set_attr "type" "cannot_bundle")])
-
-(define_insn "insn_info"
- [(unspec_volatile:VOID [(match_operand:DI 0 "s8bit_cint_operand" "i")]
- UNSPEC_INSN_INFO)]
- ""
- "info\t%0")
-
-(define_insn "insn_infol"
- [(unspec_volatile:VOID [(match_operand:DI 0 "s16bit_cint_operand" "i")]
- UNSPEC_INSN_INFOL)]
- ""
- "infol\t%0"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_inv"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_INV)]
- ""
- "inv\t%r0"
- [(set_attr "type" "X1")])
-
-;; loads
-
-(define_expand "insn_ld"
- [(set (match_operand:DI 0 "register_operand" "")
- (mem:DI (match_operand 1 "pointer_operand" "")))]
- "")
-
-(define_insn "insn_ld_add<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (mem:DI (match_dup 3)))]
- ""
- "ld_add\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_ldna"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mem:DI (and:DI (match_operand 1 "pointer_operand" "rO")
- (const_int -8))))]
- ""
- "ldna\t%0, %r1"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_ldna_add<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (mem:DI (and:DI (match_dup 3) (const_int -8))))]
- ""
- "ldna_add\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_expand "insn_ld<n><s>"
- [(set (match_operand:DI 0 "register_operand" "")
- (any_extend:DI
- (mem:I124MODE (match_operand 1 "pointer_operand" ""))))]
- "")
-
-(define_insn "insn_ld<I124MODE:n><s>_add<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI (mem:I124MODE (match_dup 3))))]
- ""
- "ld<I124MODE:n><s>_add\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-;; non temporal loads
-
-(define_insn "insn_ldnt"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_NON_TEMPORAL))]
- ""
- "ldnt\t%0, %r1"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_ldnt_add<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (match_dup 3))]
- UNSPEC_NON_TEMPORAL))]
- ""
- "ldnt_add\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_ldnt<n><s>"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE
- [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_NON_TEMPORAL)))]
- ""
- "ldnt<n><s>\t%0, %r1"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_ldnt<I124MODE:n><s>_add<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI (unspec:I124MODE [(mem:I124MODE (match_dup 3))]
- UNSPEC_NON_TEMPORAL)))]
- ""
- "ldnt<I124MODE:n><s>_add\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-;; L2 hits
-
-(define_insn "insn_ld_L2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_LATENCY_L2))]
- ""
- "ld\t%0, %r1"
- [(set_attr "type" "Y2_L2")])
-
-(define_insn "insn_ld_add_L2<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (match_dup 3))]
- UNSPEC_LATENCY_L2))]
- ""
- "ld_add\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_ldna_L2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (and:DI (match_operand 1 "pointer_operand" "rO")
- (const_int -8)))]
- UNSPEC_LATENCY_L2))]
- ""
- "ldna\t%0, %r1"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_ldna_add_L2<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (and:DI (match_dup 3) (const_int -8)))]
- UNSPEC_LATENCY_L2))]
- ""
- "ldna_add\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_ld<n><s>_L2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE
- [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_LATENCY_L2)))]
- ""
- "ld<n><s>\t%0, %r1"
- [(set_attr "type" "Y2_L2")])
-
-(define_insn "insn_ld<I124MODE:n><s>_add_L2<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI (unspec:I124MODE [(mem:I124MODE (match_dup 3))]
- UNSPEC_LATENCY_L2)))]
- ""
- "ld<I124MODE:n><s>_add\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-;; L2 hits, non temporal loads
-
-(define_insn "insn_ldnt_L2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(unspec:DI
- [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_L2))]
- ""
- "ldnt\t%0, %r1"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_ldnt_add_L2<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(unspec:DI
- [(mem:DI (match_dup 3))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_L2))]
- ""
- "ldnt_add\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_ldnt<n><s>_L2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE
- [(unspec:I124MODE
- [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_L2)))]
- ""
- "ldnt<n><s>\t%0, %r1"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_ldnt<I124MODE:n><s>_add_L2<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE [(unspec:I124MODE
- [(mem:I124MODE (match_dup 3))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_L2)))]
- ""
- "ldnt<I124MODE:n><s>_add\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-;; L2 miss
-
-(define_insn "insn_ld_miss"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_LATENCY_MISS))]
- ""
- "ld\t%0, %r1"
- [(set_attr "type" "Y2_miss")])
-
-(define_insn "insn_ld_add_miss<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (match_dup 3))]
- UNSPEC_LATENCY_MISS))]
- ""
- "ld_add\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_ldna_miss"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (and:DI (match_operand 1 "pointer_operand" "rO")
- (const_int -8)))]
- UNSPEC_LATENCY_MISS))]
- ""
- "ldna\t%0, %r1"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_ldna_add_miss<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(mem:DI (and:DI (match_dup 3) (const_int -8)))]
- UNSPEC_LATENCY_MISS))]
- ""
- "ldna_add\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_ld<n><s>_miss"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE
- [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_LATENCY_MISS)))]
- ""
- "ld<n><s>\t%0, %r1"
- [(set_attr "type" "Y2_miss")])
-
-(define_insn "insn_ld<I124MODE:n><s>_add_miss<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI (unspec:I124MODE [(mem:I124MODE (match_dup 3))]
- UNSPEC_LATENCY_MISS)))]
- ""
- "ld<I124MODE:n><s>_add\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-;; L2 miss, non temporal loads
-
-(define_insn "insn_ldnt_miss"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(unspec:DI
- [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_MISS))]
- ""
- "ldnt\t%0, %r1"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_ldnt_add_miss<bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(unspec:DI
- [(mem:DI (match_dup 3))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_MISS))]
- ""
- "ldnt_add\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_ldnt<n><s>_miss"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE
- [(unspec:I124MODE
- [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_MISS)))]
- ""
- "ldnt<n><s>\t%0, %r1"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_ldnt<I124MODE:n><s>_add_miss<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 1 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "1")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (match_operand:DI 0 "register_operand" "=r")
- (any_extend:DI
- (unspec:I124MODE [(unspec:I124MODE
- [(mem:I124MODE (match_dup 3))]
- UNSPEC_NON_TEMPORAL)]
- UNSPEC_LATENCY_MISS)))]
- ""
- "ldnt<I124MODE:n><s>_add\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-;; end loads
-
-(define_insn "insn_lnk"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(const_int 0)] UNSPEC_INSN_LNK))]
- ""
- "lnk\t%0"
- [(set_attr "type" "Y1")])
-
-(define_insn "insn_mfspr"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec_volatile:DI [(match_operand:DI 1 "u14bit_cint_operand" "i")]
- UNSPEC_INSN_MFSPR))
- (clobber (mem:BLK (const_int 0)))]
- ""
- "mfspr\t%0, %1"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_mtspr"
- [(unspec_volatile:DI [(match_operand:DI 0 "u14bit_cint_operand" "i")
- (match_operand:DI 1 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MTSPR)
- (clobber (mem:BLK (const_int 0)))]
- ""
- "mtspr\t%0, %r1"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_mm"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "u6bit_cint_operand" "i")
- (match_operand:DI 4 "u6bit_cint_operand" "i")]
- UNSPEC_INSN_MM))]
- ""
- "mm\t%0, %r2, %3, %4"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_mul_hs_hs"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HS_HS))]
- ""
- "mul_hs_hs\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mul_hs_hu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HS_HU))]
- ""
- "mul_hs_hu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mul_hs_ls"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HS_LS))]
- ""
- "mul_hs_ls\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mul_hs_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HS_LU))]
- ""
- "mul_hs_lu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mul_hu_hu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HU_HU))]
- ""
- "mul_hu_hu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mul_hu_ls"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HU_LS))]
- ""
- "mul_hu_ls\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mul_hu_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_HU_LU))]
- ""
- "mul_hu_lu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mul_ls_ls"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_LS_LS))]
- ""
- "mul_ls_ls\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mul_ls_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_LS_LU))]
- ""
- "mul_ls_lu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mul_lu_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MUL_LU_LU))]
- ""
- "mul_lu_lu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mula_hs_hs"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HS_HS))]
- ""
- "mula_hs_hs\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mula_hs_hu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HS_HU))]
- ""
- "mula_hs_hu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mula_hs_ls"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HS_LS))]
- ""
- "mula_hs_ls\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mula_hs_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HS_LU))]
- ""
- "mula_hs_lu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mula_hu_hu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HU_HU))]
- ""
- "mula_hu_hu\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mula_hu_ls"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HU_LS))]
- ""
- "mula_hu_ls\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mula_hu_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_HU_LU))]
- ""
- "mula_hu_lu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mula_ls_ls"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_LS_LS))]
- ""
- "mula_ls_ls\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mula_ls_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_LS_LU))]
- ""
- "mula_ls_lu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mula_lu_lu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULA_LU_LU))]
- ""
- "mula_lu_lu\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulax"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULAX))]
- ""
- "mulax\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_nap"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_NAP)]
- ""
- "nap"
- [(set_attr "type" "cannot_bundle")])
-
-(define_insn "insn_nor_<mode>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (and:I48MODE
- (not:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "rO"))
- (not:I48MODE (match_operand:I48MODE 2 "reg_or_0_operand" "rO"))))]
- ""
- "nor\t%0, %r1, %r2")
-
-(define_expand "insn_prefetch_l1"
- [(prefetch (match_operand 0 "pointer_operand" "")
- (const_int 0)
- (const_int 3))]
- "")
-
-(define_expand "insn_prefetch_l2"
- [(prefetch (match_operand 0 "pointer_operand" "")
- (const_int 0)
- (const_int 2))]
- "")
-
-(define_expand "insn_prefetch_l3"
- [(prefetch (match_operand 0 "pointer_operand" "")
- (const_int 0)
- (const_int 1))]
- "")
-
-(define_insn "insn_prefetch_l1_fault"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_PREFETCH_L1_FAULT)]
- ""
- "prefetch_l1_fault\t%r0"
- [(set_attr "type" "Y2")])
-
-(define_insn "insn_prefetch_l2_fault"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_PREFETCH_L2_FAULT)]
- ""
- "prefetch_l2_fault\t%r0"
- [(set_attr "type" "Y2")])
-
-(define_insn "insn_prefetch_l3_fault"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_PREFETCH_L3_FAULT)]
- ""
- "prefetch_l3_fault\t%r0"
- [(set_attr "type" "Y2")])
-
-(define_insn "insn_revbits"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_REVBITS))]
- ""
- "revbits\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_shl1add"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rO")
- (const_int 2))
- (match_operand:DI 2 "reg_or_0_operand" "rO")))]
- ""
- "shl1add\t%0, %r1, %r2")
-
-(define_insn "insn_shl1addx"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (const_int 2))
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "shl1addx\t%0, %r1, %r2")
-
-(define_insn "insn_shl2add"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rO")
- (const_int 4))
- (match_operand:DI 2 "reg_or_0_operand" "rO")))]
- ""
- "shl2add\t%0, %r1, %r2")
-
-(define_insn "insn_shl2addx"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (const_int 4))
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "shl2addx\t%0, %r1, %r2")
-
-(define_insn "insn_shl3add"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rO")
- (const_int 8))
- (match_operand:DI 2 "reg_or_0_operand" "rO")))]
- ""
- "shl3add\t%0, %r1, %r2")
-
-(define_insn "insn_shl3addx"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (const_int 8))
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "shl3addx\t%0, %r1, %r2")
-
-(define_insn "insn_shufflebytes"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SHUFFLEBYTES))]
- ""
- "shufflebytes\t%0, %r2, %r3"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_shufflebytes1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SHUFFLEBYTES))]
- ""
- "shufflebytes\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-;; stores
-
-(define_expand "insn_st"
- [(set (mem:DI (match_operand 0 "pointer_operand" ""))
- (match_operand:DI 1 "reg_or_0_operand" ""))]
- "")
-
-(define_insn "insn_st_add<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "0")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (mem:DI (match_dup 3))
- (match_operand:DI 1 "reg_or_0_operand" "rO"))]
- ""
- "st_add\t%0, %r1, %2"
- [(set_attr "type" "X1")])
-
-(define_expand "insn_st<n>"
- [(set (mem:I124MODE (match_operand 0 "pointer_operand" ""))
- (match_operand:DI 1 "reg_or_0_operand" ""))]
- ""
-{
- operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], DImode,
- BYTES_BIG_ENDIAN
- ? UNITS_PER_WORD - <n> : 0);
-})
-
-(define_expand "insn_st<I124MODE:n>_add<I48MODE:bitsuffix>"
- [(parallel
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "")))
- (set (mem:I124MODE (match_dup 3))
- (match_operand:DI 1 "reg_or_0_operand" ""))])]
- ""
-{
- operands[1] = simplify_gen_subreg (<I124MODE:MODE>mode, operands[1],
- DImode,
- BYTES_BIG_ENDIAN
- ? UNITS_PER_WORD - <I124MODE:n> : 0);
-})
-
-(define_insn "*insn_st<I124MODE:n>_add<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "0")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (mem:I124MODE (match_dup 3))
- (match_operand:I124MODE 1 "reg_or_0_operand" "rO"))]
- ""
- "st<I124MODE:n>_add\t%0, %r1, %2"
- [(set_attr "type" "X1")])
-
-;; non-temporal stores
-
-(define_insn "insn_stnt"
- [(set (mem:DI (unspec [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_NON_TEMPORAL))
- (match_operand:DI 1 "reg_or_0_operand" "rO"))]
- ""
- "stnt\t%0, %r1"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_stnt_add<bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "0")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (mem:DI (unspec:I48MODE [(match_dup 3)] UNSPEC_NON_TEMPORAL))
- (match_operand:DI 1 "reg_or_0_operand" "rO"))]
- ""
- "stnt_add\t%0, %r1, %2"
- [(set_attr "type" "X1")])
-
-(define_expand "insn_stnt<n>"
- [(set (mem:I124MODE (unspec [(match_operand 0 "pointer_operand" "")]
- UNSPEC_NON_TEMPORAL))
- (match_operand:DI 1 "reg_or_0_operand" ""))]
- ""
-{
- operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], DImode,
- BYTES_BIG_ENDIAN
- ? UNITS_PER_WORD - <n> : 0);
-})
-
-(define_insn "*insn_stnt<n>"
- [(set (mem:I124MODE (unspec [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_NON_TEMPORAL))
- (match_operand:I124MODE 1 "reg_or_0_operand" "rO"))]
- ""
- "stnt<n>\t%0, %r1"
- [(set_attr "type" "X1")])
-
-(define_expand "insn_stnt<I124MODE:n>_add<I48MODE:bitsuffix>"
- [(parallel
- [(set (match_operand:I48MODE 0 "register_operand" "")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "")))
- (set (mem:I124MODE (unspec:I48MODE [(match_dup 3)] UNSPEC_NON_TEMPORAL))
- (match_operand:DI 1 "reg_or_0_operand" "rO"))])]
- ""
-{
- operands[1] = simplify_gen_subreg (<I124MODE:MODE>mode, operands[1],
- DImode,
- BYTES_BIG_ENDIAN
- ? UNITS_PER_WORD - <I124MODE:n> : 0);
-})
-
-(define_insn "*insn_stnt<I124MODE:n>_add<I48MODE:bitsuffix>"
- [(set (match_operand:I48MODE 0 "register_operand" "=r")
- (plus:I48MODE (match_operand:I48MODE 3 "register_operand" "0")
- (match_operand:I48MODE 2 "s8bit_cint_operand" "i")))
- (set (mem:I124MODE (unspec:I48MODE [(match_dup 3)] UNSPEC_NON_TEMPORAL))
- (match_operand:I124MODE 1 "reg_or_0_operand" "rO"))]
- ""
- "stnt<I124MODE:n>_add\t%0, %r1, %2"
- [(set_attr "type" "X1")])
-
-;; end stores
-
-(define_insn "insn_tblidxb0"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB0))]
- ""
- "tblidxb0\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_tblidxb1"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB1))]
- ""
- "tblidxb1\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_tblidxb2"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB2))]
- ""
- "tblidxb2\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_tblidxb3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB3))]
- ""
- "tblidxb3\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-;; insn_v1add
-;; insn_v1addi
-;; insn_v1cmpeq
-;; insn_v1cmpeqi
-;; insn_v1cmplts
-;; insn_v1cmpltsi
-;; insn_v1cmpltu
-;; insn_v1cmpltui
-;; insn_v1maxu
-;; insn_v1maxui
-;; insn_v1minu
-;; insn_v1minui
-(define_insn "<optab>v8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=r,r")
- (v1op_immed:V8QI
- (match_operand:V8QI 1 "reg_or_0_operand" "<comm>rO,rO")
- (match_operand:V8QI 2 "reg_or_v8s8bit_operand" "W,rO")))]
- ""
- "@
- v1<insn>i\t%0, %r1, %j2
- v1<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>,<pipe>")])
-
-(define_expand "insn_v1<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v1op_immed:V8QI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
- V8QImode, operands[1], operands[2], true);
- DONE;
-})
-
-(define_expand "insn_v1<insn>i"
- [(set (match_operand:DI 0 "register_operand" "")
- (v1op_immed:V8QI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "s8bit_cint_operand" "")))]
- ""
-{
- /* Tile out immediate and expand to general case. */
- rtx n = tilegx_simd_int (operands[2], QImode);
- tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
- V8QImode, operands[1], n, true);
- DONE;
-})
-
-;; insn_v1shl
-;; insn_v1shli
-;; insn_v1shrs
-;; insn_v1shrsi
-;; insn_v1shru
-;; insn_v1shrui
-(define_insn "<optab>v8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=r,r")
- (any_shift:V8QI
- (match_operand:V8QI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:DI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- v1<insn>i\t%0, %r1, %2
- v1<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>,<pipe>")])
-
-(define_expand "insn_v1<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (any_shift:V8QI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_u5bit_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
- V8QImode, operands[1], operands[2], false);
- DONE;
-})
-
-;; insn_v2add
-;; insn_v2addi
-;; insn_v2maxs
-;; insn_v2maxsi
-;; insn_v2mins
-;; insn_v2minsi
-;; insn_v2cmpeq
-;; insn_v2cmpeqi
-;; insn_v2cmplts
-;; insn_v2cmpltsi
-;; insn_v2cmpltu
-;; insn_v2cmpltui
-(define_insn "<optab>v4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=r,r")
- (v2op_immed:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "<comm>rO,rO")
- (match_operand:V4HI 2 "reg_or_v4s8bit_operand" "Y,rO")))]
- ""
- "@
- v2<insn>i\t%0, %r1, %j2
- v2<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>,<pipe>")])
-
-(define_expand "insn_v2<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v2op_immed:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
- V4HImode, operands[1], operands[2], true);
- DONE;
-})
-
-(define_expand "insn_v2<insn>i"
- [(set (match_operand:DI 0 "register_operand" "")
- (v2op_immed:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "s8bit_cint_operand" "")))]
- ""
-{
- /* Tile out immediate and expand to general case. */
- rtx n = tilegx_simd_int (operands[2], HImode);
- tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
- V4HImode, operands[1], n, true);
- DONE;
-})
-
-;; insn_v2shl
-;; insn_v2shli
-;; insn_v2shrs
-;; insn_v2shrsi
-;; insn_v2shru
-;; insn_v2shrui
-(define_insn "<optab>v4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=r,r")
- (any_shift:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:DI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- v2<insn>i\t%0, %r1, %2
- v2<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>,<pipe>")])
-
-(define_expand "insn_v2<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (any_shift:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_u5bit_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
- V4HImode, operands[1], operands[2], false);
- DONE;
-})
-
-;; insn_v1adduc
-;; insn_v1subuc
-;; insn_v1sub
-;; insn_v1cmpne
-;; insn_v1cmples
-;; insn_v1cmpleu
-;; insn_v1multu
-(define_insn "<optab>v8qi3"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (v1op:V8QI
- (match_operand:V8QI 1 "reg_or_0_operand" "<comm>rO")
- (match_operand:V8QI 2 "reg_or_0_operand" "rO")))]
- ""
- "v1<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>")])
-
-(define_expand "insn_v1<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v1op:V8QI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
- V8QImode, operands[1], operands[2], true);
- DONE;
-})
-
-;; insn_v2addsc
-;; insn_v2subsc
-;; insn_v2sub
-;; insn_v2cmpne
-;; insn_v2cmples
-;; insn_v2cmpleu
-(define_insn "<optab>v4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (v2op:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "<comm>rO")
- (match_operand:V4HI 2 "reg_or_0_operand" "rO")))]
- ""
- "v2<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>")])
-
-(define_expand "insn_v2<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v2op:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
- V4HImode, operands[1], operands[2], true);
- DONE;
-})
-
-;; insn_v2mults
-(define_insn "mulv4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (mult:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "%rO")
- (match_operand:V4HI 2 "reg_or_0_operand" "rO")))]
- ""
- "v2mults\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_expand "insn_v2mults"
- [(set (match_operand:DI 0 "register_operand" "")
- (mult:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_mulv4hi3, V4HImode, operands[0],
- V4HImode, operands[1], operands[2], true);
- DONE;
-})
-
-;; insn_v2shlsc
-(define_insn "<optab>v4hi3"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (v2shift:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")))]
- ""
- "v2<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>")])
-
-(define_expand "insn_v2<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v2shift:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
- V4HImode, operands[1], operands[2], false);
- DONE;
-})
-
-;; insn_v4addsc
-;; insn_v4subsc
-;; insn_v4add
-;; insn_v4sub
-(define_insn "<optab>v2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (v4op:V2SI
- (match_operand:V2SI 1 "reg_or_0_operand" "<comm>rO")
- (match_operand:V2SI 2 "reg_or_0_operand" "rO")))]
- ""
- "v4<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>")])
-
-(define_expand "insn_v4<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v4op:V2SI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v2si3, V2SImode, operands[0],
- V2SImode, operands[1], operands[2], true);
- DONE;
-})
-
-;; insn_v4shl
-;; insn_v4shrs
-;; insn_v4shru
-;; insn_v4shlsc
-(define_insn "<optab>v2si3"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (v4shift:V2SI
- (match_operand:V2SI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")))]
- ""
- "v4<insn>\t%0, %r1, %r2"
- [(set_attr "type" "<pipe>")])
-
-(define_expand "insn_v4<insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (v4shift:V2SI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_<optab>v2si3, V2SImode, operands[0],
- V2SImode, operands[1], operands[2], false);
- DONE;
-})
-
-;; Byte ordering of these vectors is endian dependent. gcc concats
-;; right-to-left for little endian, and left-to-right for big endian.
-;; So we need different patterns that depend on endianness. Our
-;; instructions concat and interleave the way a big-endian target would
-;; work in gcc, so for little endian, we need to reverse the source
-;; operands.
-
-;; insn_v1int_h
-;; {B7,B6,B5,B4,B3,B2,B1,B0} {A7,A6,A5,A4,A3,A2,A1,A0}
-;; => {A7,A6,A5,A4,A3,A2,A1,A0,B7,B6,B5,B4,B3,B2,B1,B0}
-;; => {A7,B7,A6,B6,A5,B5,A4,B4}
-(define_expand "vec_interleave_highv8qi"
- [(match_operand:V8QI 0 "register_operand" "")
- (match_operand:V8QI 1 "reg_or_0_operand" "")
- (match_operand:V8QI 2 "reg_or_0_operand" "")]
- ""
-{
- if (BYTES_BIG_ENDIAN)
- emit_insn (gen_vec_interleave_highv8qi_be (operands[0], operands[1],
- operands[2]));
- else
- emit_insn (gen_vec_interleave_highv8qi_le (operands[0], operands[1],
- operands[2]));
- DONE;
-})
-
-(define_insn "vec_interleave_highv8qi_be"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (vec_select:V8QI
- (vec_concat:V16QI (match_operand:V8QI 1 "reg_or_0_operand" "rO")
- (match_operand:V8QI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 8)
- (const_int 1) (const_int 9)
- (const_int 2) (const_int 10)
- (const_int 3) (const_int 11)])))]
- "BYTES_BIG_ENDIAN"
- "v1int_h\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "vec_interleave_highv8qi_le"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (vec_select:V8QI
- (vec_concat:V16QI (match_operand:V8QI 1 "reg_or_0_operand" "rO")
- (match_operand:V8QI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 4) (const_int 12)
- (const_int 5) (const_int 13)
- (const_int 6) (const_int 14)
- (const_int 7) (const_int 15)])))]
- "!BYTES_BIG_ENDIAN"
- "v1int_h\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v1int_h"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")]
- ""
-{
- /* For little endian, our instruction interleaves opposite of the
- way vec_interleave works, so we need to reverse the source
- operands. */
- rtx opnd1 = BYTES_BIG_ENDIAN ? operands[1] : operands[2];
- rtx opnd2 = BYTES_BIG_ENDIAN ? operands[2] : operands[1];
- tilegx_expand_builtin_vector_binop (gen_vec_interleave_highv8qi, V8QImode,
- operands[0], V8QImode, opnd1, opnd2,
- true);
- DONE;
-})
-
-;; insn_v1int_l
-;; {B7,B6,B5,B4,B3,B2,B1,B0} {A7,A6,A5,A4,A3,A2,A1,A0}
-;; => {A7,A6,A5,A4,A3,A2,A1,A0,B7,B6,B5,B4,B3,B2,B1,B0}
-;; => {A3,B3,A2,B2,A1,B1,A0,B0}
-(define_expand "vec_interleave_lowv8qi"
- [(match_operand:V8QI 0 "register_operand" "")
- (match_operand:V8QI 1 "reg_or_0_operand" "")
- (match_operand:V8QI 2 "reg_or_0_operand" "")]
- ""
-{
- if (BYTES_BIG_ENDIAN)
- emit_insn (gen_vec_interleave_lowv8qi_be (operands[0], operands[1],
- operands[2]));
- else
- emit_insn (gen_vec_interleave_lowv8qi_le (operands[0], operands[1],
- operands[2]));
- DONE;
-})
-
-(define_insn "vec_interleave_lowv8qi_be"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (vec_select:V8QI
- (vec_concat:V16QI (match_operand:V8QI 1 "reg_or_0_operand" "rO")
- (match_operand:V8QI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 4) (const_int 12)
- (const_int 5) (const_int 13)
- (const_int 6) (const_int 14)
- (const_int 7) (const_int 15)])))]
- "BYTES_BIG_ENDIAN"
- "v1int_l\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "vec_interleave_lowv8qi_le"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (vec_select:V8QI
- (vec_concat:V16QI (match_operand:V8QI 1 "reg_or_0_operand" "rO")
- (match_operand:V8QI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 8)
- (const_int 1) (const_int 9)
- (const_int 2) (const_int 10)
- (const_int 3) (const_int 11)])))]
- "!BYTES_BIG_ENDIAN"
- "v1int_l\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v1int_l"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")]
- ""
-{
- /* For little endian, our instruction interleaves opposite of the
- way vec_interleave works, so we need to reverse the source
- operands. */
- rtx opnd1 = BYTES_BIG_ENDIAN ? operands[1] : operands[2];
- rtx opnd2 = BYTES_BIG_ENDIAN ? operands[2] : operands[1];
- tilegx_expand_builtin_vector_binop (gen_vec_interleave_lowv8qi, V8QImode,
- operands[0], V8QImode, opnd1, opnd2,
- true);
- DONE;
-})
-
-;; insn_v2int_h
-;; {B3,B2,B1,B0} {A3,A2,A1,A0}
-;; => {A3,A2,A1,A0,B3,B2,B1,B0}
-;; => {A3,B3,A2,B2}
-(define_expand "vec_interleave_highv4hi"
- [(match_operand:V4HI 0 "register_operand" "")
- (match_operand:V4HI 1 "reg_or_0_operand" "")
- (match_operand:V4HI 2 "reg_or_0_operand" "")]
- ""
-{
- if (BYTES_BIG_ENDIAN)
- emit_insn (gen_vec_interleave_highv4hi_be (operands[0], operands[1],
- operands[2]));
- else
- emit_insn (gen_vec_interleave_highv4hi_le (operands[0], operands[1],
- operands[2]));
- DONE;
-})
-
-(define_insn "vec_interleave_highv4hi_be"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (vec_select:V4HI
- (vec_concat:V8HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (match_operand:V4HI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 4)
- (const_int 1) (const_int 5)])))]
- "BYTES_BIG_ENDIAN"
- "v2int_h\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "vec_interleave_highv4hi_le"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (vec_select:V4HI
- (vec_concat:V8HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (match_operand:V4HI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 2) (const_int 6)
- (const_int 3) (const_int 7)])))]
- "!BYTES_BIG_ENDIAN"
- "v2int_h\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v2int_h"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")]
- ""
-{
- /* For little endian, our instruction interleaves opposite of the
- way vec_interleave works, so we need to reverse the source
- operands. */
- rtx opnd1 = BYTES_BIG_ENDIAN ? operands[1] : operands[2];
- rtx opnd2 = BYTES_BIG_ENDIAN ? operands[2] : operands[1];
- tilegx_expand_builtin_vector_binop (gen_vec_interleave_highv4hi, V4HImode,
- operands[0], V4HImode, opnd1, opnd2,
- true);
- DONE;
-})
-
-;; insn_v2int_l
-;; {B3,B2,B1,B0} {A3,A2,A1,A0}
-;; => {A3,A2,A1,A0,B3,B2,B1,B0}
-;; => {A1,B1,A0,B0}
-(define_expand "vec_interleave_lowv4hi"
- [(match_operand:V4HI 0 "register_operand" "")
- (match_operand:V4HI 1 "reg_or_0_operand" "")
- (match_operand:V4HI 2 "reg_or_0_operand" "")]
- ""
-{
- if (BYTES_BIG_ENDIAN)
- emit_insn (gen_vec_interleave_lowv4hi_be (operands[0], operands[1],
- operands[2]));
- else
- emit_insn (gen_vec_interleave_lowv4hi_le (operands[0], operands[1],
- operands[2]));
- DONE;
-})
-
-(define_insn "vec_interleave_lowv4hi_be"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (vec_select:V4HI
- (vec_concat:V8HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (match_operand:V4HI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 2) (const_int 6)
- (const_int 3) (const_int 7)])))]
- "BYTES_BIG_ENDIAN"
- "v2int_l\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "vec_interleave_lowv4hi_le"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (vec_select:V4HI
- (vec_concat:V8HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (match_operand:V4HI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 4)
- (const_int 1) (const_int 5)])))]
- "!BYTES_BIG_ENDIAN"
- "v2int_l\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v2int_l"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")]
- ""
-{
- /* For little endian, our instruction interleaves opposite of the
- way vec_interleave works, so we need to reverse the source
- operands. */
- rtx opnd1 = BYTES_BIG_ENDIAN ? operands[1] : operands[2];
- rtx opnd2 = BYTES_BIG_ENDIAN ? operands[2] : operands[1];
- tilegx_expand_builtin_vector_binop (gen_vec_interleave_lowv4hi, V4HImode,
- operands[0], V4HImode, opnd1, opnd2,
- true);
- DONE;
-})
-
-;; insn_v4int_h
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-;; => {A1,B1}
-(define_expand "vec_interleave_highv2si"
- [(match_operand:V2SI 0 "register_operand" "")
- (match_operand:V2SI 1 "reg_or_0_operand" "")
- (match_operand:V2SI 2 "reg_or_0_operand" "")]
- ""
-{
- if (BYTES_BIG_ENDIAN)
- emit_insn (gen_vec_interleave_highv2si_be (operands[0], operands[1],
- operands[2]));
- else
- emit_insn (gen_vec_interleave_highv2si_le (operands[0], operands[1],
- operands[2]));
- DONE;
-})
-
-(define_insn "vec_interleave_highv2si_be"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (vec_select:V2SI
- (vec_concat:V4SI (match_operand:V2SI 1 "reg_or_0_operand" "rO")
- (match_operand:V2SI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 2)])))]
- "BYTES_BIG_ENDIAN"
- "v4int_h\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "vec_interleave_highv2si_le"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (vec_select:V2SI
- (vec_concat:V4SI (match_operand:V2SI 1 "reg_or_0_operand" "rO")
- (match_operand:V2SI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 1) (const_int 3)])))]
- "!BYTES_BIG_ENDIAN"
- "v4int_h\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v4int_h"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")]
- ""
-{
- /* For little endian, our instruction interleaves opposite of the
- way vec_interleave works, so we need to reverse the source
- operands. */
- rtx opnd1 = BYTES_BIG_ENDIAN ? operands[1] : operands[2];
- rtx opnd2 = BYTES_BIG_ENDIAN ? operands[2] : operands[1];
- tilegx_expand_builtin_vector_binop (gen_vec_interleave_highv2si, V2SImode,
- operands[0], V2SImode, opnd1, opnd2,
- true);
- DONE;
-})
-
-;; insn_v4int_l
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-;; => {A0,B0}
-(define_expand "vec_interleave_lowv2si"
- [(match_operand:V2SI 0 "register_operand" "")
- (match_operand:V2SI 1 "reg_or_0_operand" "")
- (match_operand:V2SI 2 "reg_or_0_operand" "")]
- ""
-{
- if (BYTES_BIG_ENDIAN)
- emit_insn (gen_vec_interleave_lowv2si_be (operands[0], operands[1],
- operands[2]));
- else
- emit_insn (gen_vec_interleave_lowv2si_le (operands[0], operands[1],
- operands[2]));
- DONE;
-})
-
-(define_insn "vec_interleave_lowv2si_be"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (vec_select:V2SI
- (vec_concat:V4SI (match_operand:V2SI 1 "reg_or_0_operand" "rO")
- (match_operand:V2SI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 1) (const_int 3)])))]
- "BYTES_BIG_ENDIAN"
- "v4int_l\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "vec_interleave_lowv2si_le"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (vec_select:V2SI
- (vec_concat:V4SI (match_operand:V2SI 1 "reg_or_0_operand" "rO")
- (match_operand:V2SI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 2)])))]
- "!BYTES_BIG_ENDIAN"
- "v4int_l\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v4int_l"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "reg_or_0_operand" "")
- (match_operand:DI 2 "reg_or_0_operand" "")]
- ""
-{
- /* For little endian, our instruction interleaves opposite of the
- way vec_interleave works, so we need to reverse the source
- operands. */
- rtx opnd1 = BYTES_BIG_ENDIAN ? operands[1] : operands[2];
- rtx opnd2 = BYTES_BIG_ENDIAN ? operands[2] : operands[1];
- tilegx_expand_builtin_vector_binop (gen_vec_interleave_lowv2si, V2SImode,
- operands[0], V2SImode, opnd1, opnd2,
- true);
- DONE;
-})
-
-;; insn_v1mnz
-;; insn_v1mz
-;; insn_v2mnz
-;; insn_v2mz
-(define_insn "insn_mnz_v8qi"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (if_then_else:V8QI
- (ne:V8QI
- (match_operand:V8QI 1 "reg_or_0_operand" "rO")
- (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)]))
- (match_operand:V8QI 2 "reg_or_0_operand" "rO")
- (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)])))]
- ""
- "v1mnz\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v1mnz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:V8QI
- (ne:V8QI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (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)])
- )
- (match_operand:DI 2 "reg_or_0_operand" "")
- (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)])))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_insn_mnz_v8qi, V8QImode,
- operands[0], V8QImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-(define_insn "insn_mz_v8qi"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (if_then_else:V8QI
- (ne:V8QI
- (match_operand:V8QI 1 "reg_or_0_operand" "rO")
- (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)]))
- (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)])
- (match_operand:V8QI 2 "reg_or_0_operand" "rO")))]
- ""
- "v1mz\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v1mz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:V8QI
- (ne:V8QI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (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)]))
- (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)])
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_insn_mz_v8qi, V8QImode,
- operands[0], V8QImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-(define_insn "insn_mnz_v4hi"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (if_then_else:V4HI
- (ne:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)]))
- (match_operand:V4HI 2 "reg_or_0_operand" "rO")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)])))]
- ""
- "v2mnz\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v2mnz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:V4HI
- (ne:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)]))
- (match_operand:DI 2 "reg_or_0_operand" "")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)])))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_insn_mnz_v4hi, V4HImode,
- operands[0], V4HImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-(define_insn "insn_mz_v4hi"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (if_then_else:V4HI
- (ne:V4HI
- (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)]))
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)])
- (match_operand:V4HI 2 "reg_or_0_operand" "rO")))]
- ""
- "v2mz\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v2mz"
- [(set (match_operand:DI 0 "register_operand" "")
- (if_then_else:V4HI
- (ne:V4HI
- (match_operand:DI 1 "reg_or_0_operand" "")
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)]))
- (const_vector:V4HI [(const_int 0) (const_int 0)
- (const_int 0) (const_int 0)])
- (match_operand:DI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_insn_mz_v4hi, V4HImode,
- operands[0], V4HImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-;; insn_v1mulu
-(define_insn "vec_widen_umult_lo_v8qi"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (mult:V4HI
- (zero_extend:V4HI
- (vec_select:V4QI
- (match_operand:V8QI 1 "register_operand" "r")
- (parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)])))
- (zero_extend:V4HI
- (vec_select:V4QI
- (match_operand:V8QI 2 "register_operand" "r")
- (parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)])))))]
- ""
- "v1mulu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_expand "insn_v1mulu"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_vec_widen_umult_lo_v8qi, V4HImode,
- operands[0], V8QImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-;; insn_v1mulus
-(define_insn "vec_widen_usmult_lo_v8qi"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (mult:V4HI
- (zero_extend:V4HI
- (vec_select:V4QI
- (match_operand:V8QI 1 "register_operand" "r")
- (parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)])))
- (sign_extend:V4HI
- (vec_select:V4QI
- (match_operand:V8QI 2 "register_operand" "r")
- (parallel [(const_int 0) (const_int 1)
- (const_int 2) (const_int 3)])))))]
- ""
- "v1mulus\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_expand "insn_v1mulus"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_vec_widen_usmult_lo_v8qi, V4HImode,
- operands[0], V8QImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-;; insn_v2muls
-(define_insn "vec_widen_smult_lo_v4qi"
- [(set (match_operand:V2SI 0 "register_operand" "=r")
- (mult:V2SI
- (sign_extend:V2SI
- (vec_select:V2HI
- (match_operand:V4HI 1 "register_operand" "r")
- (parallel [(const_int 0) (const_int 1)])))
- (sign_extend:V2SI
- (vec_select:V2HI
- (match_operand:V4HI 2 "register_operand" "r")
- (parallel [(const_int 0) (const_int 1)])))))]
- ""
- "v2muls\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_expand "insn_v2muls"
- [(match_operand:DI 0 "register_operand" "")
- (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "register_operand" "")]
- ""
-{
- tilegx_expand_builtin_vector_binop (gen_vec_widen_smult_lo_v4qi, V2SImode,
- operands[0], V4HImode, operands[1],
- operands[2], true);
- DONE;
-})
-
-;; v2packl
-;; v2packuc
-;; {B3,B2,B1,B0} {A3,A2,A1,A0}
-;; => {A3,A2,A1,A0,B3,B2,B1,B0}
-(define_insn "vec_pack_<pack_optab>_v4hi"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (vec_concat:V8QI
- (v2pack:V4QI (match_operand:V4HI 1 "reg_or_0_operand" "rO"))
- (v2pack:V4QI (match_operand:V4HI 2 "reg_or_0_operand" "rO"))))]
- ""
- "v2<pack_insn>\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v2<pack_insn>"
- [(set (match_operand:DI 0 "register_operand" "")
- (vec_concat:V8QI
- (v2pack:V4QI (match_operand:DI 2 "reg_or_0_operand" ""))
- (v2pack:V4QI (match_operand:DI 1 "reg_or_0_operand" ""))))]
- ""
-{
- /* Our instruction concats opposite of the way vec_pack works, so we
- need to reverse the source operands. */
- tilegx_expand_builtin_vector_binop (gen_vec_pack_<pack_optab>_v4hi,
- V8QImode, operands[0], V4HImode,
- operands[2], operands[1], true);
- DONE;
-})
-
-;; v2packh
-;; {B3,B2,B1,B0} {A3,A2,A1,A0}
-;; => {A3_hi,A2_hi,A1_hi,A0_hi,B3_hi,B2_hi,B1_hi,B0_hi}
-(define_insn "vec_pack_hipart_v4hi"
- [(set (match_operand:V8QI 0 "register_operand" "=r")
- (vec_concat:V8QI
- (truncate:V4QI
- (ashiftrt:V4HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
- (const_int 8)))
- (truncate:V4QI
- (ashiftrt:V4HI (match_operand:V4HI 2 "reg_or_0_operand" "rO")
- (const_int 8)))))]
- ""
- "v2packh\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v2packh"
- [(set (match_operand:DI 0 "register_operand" "")
- (vec_concat:V8QI
- (truncate:V4QI
- (ashiftrt:V4HI (match_operand:DI 2 "reg_or_0_operand" "")
- (const_int 8)))
- (truncate:V4QI
- (ashiftrt:V4HI (match_operand:DI 1 "reg_or_0_operand" "")
- (const_int 8)))))]
- ""
-{
- /* Our instruction concats opposite of the way vec_pack works, so we
- need to reverse the source operands. */
- tilegx_expand_builtin_vector_binop (gen_vec_pack_hipart_v4hi, V8QImode,
- operands[0], V4HImode, operands[2],
- operands[1], true);
- DONE;
-})
-
-;; v4packsc
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-(define_insn "vec_pack_ssat_v2si"
- [(set (match_operand:V4HI 0 "register_operand" "=r")
- (vec_concat:V4HI
- (us_truncate:V2HI (match_operand:V2SI 1 "reg_or_0_operand" "rO"))
- (us_truncate:V2HI (match_operand:V2SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "v4packsc\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_v4packsc"
- [(set (match_operand:DI 0 "register_operand" "")
- (vec_concat:V4HI
- (us_truncate:V2HI (match_operand:DI 2 "reg_or_0_operand" ""))
- (us_truncate:V2HI (match_operand:DI 1 "reg_or_0_operand" ""))))]
- ""
-{
- /* Our instruction concats opposite of the way vec_pack works, so we
- need to reverse the source operands. */
- tilegx_expand_builtin_vector_binop (gen_vec_pack_ssat_v2si, V4HImode,
- operands[0], V2SImode, operands[2],
- operands[1], true);
- DONE;
-})
-
-;; Rest of the vector intrinsics
-(define_insn "insn_v1adiffu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1ADIFFU))]
- ""
- "v1adiffu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1avgu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1AVGU))]
- ""
- "v1avgu\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_v1ddotpu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DDOTPU))]
- ""
- "v1ddotpu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1ddotpua"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DDOTPUA))]
- ""
- "v1ddotpua\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1ddotpus"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DDOTPUS))]
- ""
- "v1ddotpus\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1ddotpusa"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DDOTPUSA))]
- ""
- "v1ddotpusa\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1dotp"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DOTP))]
- ""
- "v1dotp\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1dotpa"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DOTPA))]
- ""
- "v1dotpa\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1dotpu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DOTPU))]
- ""
- "v1dotpu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1dotpua"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DOTPUA))]
- ""
- "v1dotpua\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1dotpus"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DOTPUS))]
- ""
- "v1dotpus\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1dotpusa"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1DOTPUSA))]
- ""
- "v1dotpusa\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1sadau"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1SADAU))]
- ""
- "v1sadau\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v1sadu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1SADU))]
- ""
- "v1sadu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "*insn_v1sadu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (truncate:SI
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V1SADU)))]
- ""
- "v1sadu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2adiffs"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2ADIFFS))]
- ""
- "v2adiffs\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2avgs"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2AVGS))]
- ""
- "v2avgs\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_v2dotp"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2DOTP))]
- ""
- "v2dotp\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2dotpa"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2DOTPA))]
- ""
- "v2dotpa\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2mulfsc"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2MULFSC))]
- ""
- "v2mulfsc\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2sadas"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2SADAS))]
- ""
- "v2sadas\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2sadau"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
- (match_operand:DI 2 "reg_or_0_operand" "rO")
- (match_operand:DI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2SADAU))]
- ""
- "v2sadau\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2sads"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2SADS))]
- ""
- "v2sads\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "*insn_v2sads"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (truncate:SI
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2SADS)))]
- ""
- "v2sads\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_v2sadu"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2SADU))]
- ""
- "v2sadu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "*insn_v2sadu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (truncate:SI
- (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
- (match_operand:DI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_V2SADU)))]
- ""
- "v2sadu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_wh64"
- [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
- UNSPEC_INSN_WH64)
- (clobber (mem:BLK (const_int 0)))]
- ""
- "wh64\t%r0"
- [(set_attr "type" "X1")])
-
-
-;; Network intrinsics
-
-;; Note the this barrier is of type "nothing," which is deleted after
-;; the final scheduling pass so that nothing is emitted for it.
-(define_insn "tilegx_network_barrier"
- [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
- ""
- "pseudo"
- [(set_attr "type" "nothing")
- (set_attr "length" "0")])
-
-(define_insn "*netreg_receive"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,U,m")
- (unspec_volatile:DI [(match_operand:DI 1 "netreg_operand" "i,i,i")
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))]
-
- ""
- "@
- move\t%0, %N1
- st\t%0, %N1
- st_add\t%I0, %N1, %i0"
- [(set_attr "type" "*,Y2,X1")])
-
-(define_insn "*netreg_send"
- [(unspec_volatile:DI
- [(match_operand:DI 0 "netreg_operand" "i,i,i,i,i,i")
- (match_operand:DI 1 "reg_or_cint_operand" "r,I,J,K,N,P")
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:DI TILEGX_NETORDER_REG))]
- ""
- "@
- move\t%N0, %r1
- movei\t%N0, %1
- moveli\t%N0, %1
- shl16insli\t%N0, zero, %h1
- v1addi\t%N0, zero, %j1
- v2addi\t%N0, zero, %h1"
- [(set_attr "type" "*,*,X01,X01,X01,X01")])
-
-(define_expand "tilegx_idn0_receive"
- [(parallel
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec_volatile:DI [(const_int TILEGX_NETREG_IDN0)
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_idn1_receive"
- [(parallel
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec_volatile:DI [(const_int TILEGX_NETREG_IDN1)
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_idn_send"
- [(parallel
- [(unspec_volatile:DI [(const_int TILEGX_NETREG_IDN0)
- (match_operand:DI 0 "reg_or_cint_operand" "")
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_udn0_receive"
- [(parallel
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN0)
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_udn1_receive"
- [(parallel
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN1)
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_udn2_receive"
- [(parallel
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN2)
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_udn3_receive"
- [(parallel
- [(set (match_operand:DI 0 "register_operand" "")
- (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN3)
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_expand "tilegx_udn_send"
- [(parallel
- [(unspec_volatile:DI [(const_int TILEGX_NETREG_UDN0)
- (match_operand:DI 0 "reg_or_cint_operand" "")
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:DI TILEGX_NETORDER_REG))])]
- "")
-
-(define_insn "*netreg_adddi_to_network"
- [(unspec_volatile:DI
- [(match_operand:DI 0 "netreg_operand" "i,i,i")
- (plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rO,rO,rO")
- (match_operand:DI 2 "add_operand" "r,I,JT"))
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:DI TILEGX_NETORDER_REG))]
- ""
- "@
- add\t%N0, %r1, %2
- addi\t%N0, %r1, %2
- addli\t%N0, %r1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-(define_insn "*netreg_adddi_from_network"
- [(set (match_operand:DI 0 "register_operand" "=r,r,r")
- (plus:DI (unspec_volatile:DI
- [(match_operand:DI 1 "netreg_operand" "%i,i,i")
- (reg:DI TILEGX_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:DI 2 "add_operand" "rO,I,JT")))
- (clobber (reg:DI TILEGX_NETORDER_REG))]
- ""
- "@
- add\t%0, %N1, %r2
- addi\t%0, %N1, %2
- addli\t%0, %N1, %H2"
- [(set_attr "type" "*,*,X01")])
-
-
-;;
-;; Stack protector instructions.
-;;
-
-(define_expand "stack_protect_set"
- [(set (match_operand 0 "nonautoincmem_operand" "")
- (match_operand 1 "nonautoincmem_operand" ""))]
- ""
-{
-#ifdef TARGET_THREAD_SSP_OFFSET
- rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
- rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
- rtx ssp = gen_reg_rtx (Pmode);
-
- emit_insn (gen_rtx_SET (ssp, ssp_addr));
-
- operands[1] = gen_rtx_MEM (Pmode, ssp);
-#endif
-
- if (TARGET_32BIT)
- emit_insn (gen_stack_protect_setsi (operands[0], operands[1]));
- else
- emit_insn (gen_stack_protect_setdi (operands[0], operands[1]));
-
- DONE;
-})
-
-(define_insn "stack_protect_setsi"
- [(set (match_operand:SI 0 "nonautoincmem_operand" "=U")
- (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")]
- UNSPEC_SP_SET))
- (set (match_scratch:SI 2 "=&r") (const_int 0))]
- ""
- "ld4s\t%2, %1; { st4\t%0, %2; move\t%2, zero }"
- [(set_attr "length" "16")
- (set_attr "type" "cannot_bundle_3cycle")])
-
-(define_insn "stack_protect_setdi"
- [(set (match_operand:DI 0 "nonautoincmem_operand" "=U")
- (unspec:DI [(match_operand:DI 1 "nonautoincmem_operand" "U")]
- UNSPEC_SP_SET))
- (set (match_scratch:DI 2 "=&r") (const_int 0))]
- ""
- "ld\t%2, %1; { st\t%0, %2; move\t%2, zero }"
- [(set_attr "length" "16")
- (set_attr "type" "cannot_bundle_3cycle")])
-
-(define_expand "stack_protect_test"
- [(match_operand 0 "nonautoincmem_operand" "")
- (match_operand 1 "nonautoincmem_operand" "")
- (match_operand 2 "" "")]
- ""
-{
- rtx compare_result;
- rtx bcomp, loc_ref;
-
-#ifdef TARGET_THREAD_SSP_OFFSET
- rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
- rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
- rtx ssp = gen_reg_rtx (Pmode);
-
- emit_insn (gen_rtx_SET (ssp, ssp_addr));
-
- operands[1] = gen_rtx_MEM (Pmode, ssp);
-#endif
-
- compare_result = gen_reg_rtx (Pmode);
-
- if (TARGET_32BIT)
- emit_insn (gen_stack_protect_testsi (compare_result, operands[0],
- operands[1]));
- else
- emit_insn (gen_stack_protect_testdi (compare_result, operands[0],
- operands[1]));
-
- bcomp = gen_rtx_NE (SImode, compare_result, const0_rtx);
-
- loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[2]);
-
- emit_jump_insn (gen_rtx_SET (pc_rtx,
- gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
- loc_ref, pc_rtx)));
-
- DONE;
-})
-
-(define_insn "stack_protect_testsi"
- [(set (match_operand:SI 0 "register_operand" "=&r")
- (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")
- (match_operand:SI 2 "nonautoincmem_operand" "U")]
- UNSPEC_SP_TEST))
- (set (match_scratch:SI 3 "=&r") (const_int 0))]
- ""
- "ld4s\t%0, %1; ld4s\t%3, %2; { cmpeq\t%0, %0, %3; move\t%3, zero }"
- [(set_attr "length" "24")
- (set_attr "type" "cannot_bundle_4cycle")])
-
-(define_insn "stack_protect_testdi"
- [(set (match_operand:DI 0 "register_operand" "=&r")
- (unspec:DI [(match_operand:DI 1 "nonautoincmem_operand" "U")
- (match_operand:DI 2 "nonautoincmem_operand" "U")]
- UNSPEC_SP_TEST))
- (set (match_scratch:DI 3 "=&r") (const_int 0))]
- ""
- "ld\t%0, %1; ld\t%3, %2; { cmpeq\t%0, %0, %3; move\t%3, zero }"
- [(set_attr "length" "24")
- (set_attr "type" "cannot_bundle_4cycle")])
-
-(include "sync.md")
diff --git a/gcc/config/tilegx/tilegx.opt b/gcc/config/tilegx/tilegx.opt
deleted file mode 100644
index 6a01aea..0000000
--- a/gcc/config/tilegx/tilegx.opt
+++ /dev/null
@@ -1,63 +0,0 @@
-; Options for the TILE-Gx port of the compiler.
-; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-; Contributed by Walter Lee (walt@tilera.com)
-;
-; 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/>.
-
-HeaderInclude
-config/tilegx/tilegx-opts.h
-
-mcpu=
-Target RejectNegative Joined Enum(tilegx_cpu) Var(tilegx_cpu) Init(0)
--mcpu=CPU Use features of and schedule code for given CPU.
-
-Enum
-Name(tilegx_cpu) Type(int)
-Known TILE-Gx CPUs (for use with the -mcpu= option):
-
-EnumValue
-Enum(tilegx_cpu) String(tilegx) Value(0)
-
-m32
-Target RejectNegative Negative(m64) Mask(32BIT)
-Compile with 32 bit longs and pointers.
-
-m64
-Target RejectNegative Negative(m32) InverseMask(32BIT, 64BIT)
-Compile with 64 bit longs and pointers.
-
-mbig-endian
-Target RejectNegative Mask(BIG_ENDIAN)
-Use big-endian byte order.
-
-mlittle-endian
-Target RejectNegative InverseMask(BIG_ENDIAN)
-Use little-endian byte order.
-
-mcmodel=
-Target RejectNegative Joined Enum(cmodel) Var(tilegx_cmodel) Init(CM_SMALL)
-Use given TILE-Gx code model.
-
-Enum
-Name(cmodel) Type(enum cmodel)
-Known code models (for use with the -mcmodel= option):
-
-EnumValue
-Enum(cmodel) String(small) Value(CM_SMALL)
-
-EnumValue
-Enum(cmodel) String(large) Value(CM_LARGE)
diff --git a/gcc/config/tilepro/constraints.md b/gcc/config/tilepro/constraints.md
deleted file mode 100644
index 6976aed..0000000
--- a/gcc/config/tilepro/constraints.md
+++ /dev/null
@@ -1,99 +0,0 @@
-;; Constraint definitions for Tilera TILEPro chip.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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_register_constraint "R00" "R0_REGS" "r0")
-(define_register_constraint "R01" "R1_REGS" "r1")
-(define_register_constraint "R02" "R2_REGS" "r2")
-(define_register_constraint "R03" "R3_REGS" "r3")
-(define_register_constraint "R04" "R4_REGS" "r4")
-(define_register_constraint "R05" "R5_REGS" "r5")
-(define_register_constraint "R06" "R6_REGS" "r6")
-(define_register_constraint "R07" "R7_REGS" "r7")
-(define_register_constraint "R08" "R8_REGS" "r8")
-(define_register_constraint "R09" "R9_REGS" "r9")
-(define_register_constraint "R10" "R10_REGS" "r10")
-
-(define_constraint "I"
- "A signed 8 bit constant"
- (and (match_code "const_int")
- (match_test "ival >= -128 && ival <= 127")))
-
-(define_constraint "J"
- "Signed 16-bit integer constant"
- (and (match_code "const_int")
- (match_test "ival >= -32768 && ival <= 32767")))
-
-(define_constraint "K"
- "Nonzero integer constant with low 16 bits zero"
- (and (match_code "const_int")
- (match_test "ival && (ival & 0xFFFF) == 0")))
-
-(define_constraint "L"
- "Integer constant that fits in one signed byte when incremented"
- (and (match_code "const_int")
- (match_test "ival >= -129 && ival <= 126")))
-
-(define_constraint "M"
- "A bit mask suitable for 'mm'"
- (and (match_code "const_int")
- (match_test "tilepro_bitfield_operand_p (ival, NULL, NULL)")))
-
-(define_constraint "N"
- "Integer constant that is a byte tiled out four times"
- (and (match_code "const_int")
- (match_test "(ival & 0xFFFFFFFF) == (ival & 0xFF) * 0x01010101")))
-
-(define_constraint "O"
- "The integer zero constant"
- (and (match_code "const_int")
- (match_test "ival == 0")))
-
-(define_constraint "P"
- "Integer constant that is a sign-extended byte tiled out as two shorts"
- (and (match_code "const_int")
- (match_test "((ival & 0xFFFFFFFF)
- == ((trunc_int_for_mode (ival, QImode) & 0xFFFF)
- * 0x00010001))")))
-
-(define_constraint "Q"
- "Integer constant that fits in one signed byte when incremented, but not -1"
- (and (match_code "const_int")
- (match_test "ival >= -129 && ival <= 126 && ival != -1")))
-
-(define_constraint "T"
- "A const symbolc operand"
- (match_operand 0 "const_symbolic_operand"))
-
-(define_memory_constraint "U"
- "Non-auto-incrementing memory"
- (and (match_code "mem")
- (match_test "GET_RTX_CLASS (GET_CODE (XEXP (op, 0))) != RTX_AUTOINC")))
-
-(define_constraint "W"
- "A 4-element vector constant with identical elements"
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 4")
- (match_test "const_vec_duplicate_p (op)")))
-
-(define_constraint "Y"
- "A 2-element vector constant with identical elements"
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 2")
- (match_test "const_vec_duplicate_p (op)")))
diff --git a/gcc/config/tilepro/feedback.h b/gcc/config/tilepro/feedback.h
deleted file mode 100644
index 34e48ed..0000000
--- a/gcc/config/tilepro/feedback.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _FEEDBACK_H
-#define _FEEDBACK_H 1
-
-#ifdef __ASSEMBLER__
-
-/* Stub defines for feedback instrumentation. */
-#define FEEDBACK_ENTER_EXPLICIT(FUNCNAME, SECNAME, SIZE)
-#define FEEDBACK_ENTER(FUNCNAME)
-#define FEEDBACK_REENTER(FUNCNAME)
-#define FEEDBACK_ENTRY(FUNCNAME, SECNAME, SIZE)
-
-#endif /* __ASSEMBLER__ */
-
-#endif /* _FEEDBACK_H */
diff --git a/gcc/config/tilepro/gen-mul-tables.cc b/gcc/config/tilepro/gen-mul-tables.cc
deleted file mode 100644
index 5218398..0000000
--- a/gcc/config/tilepro/gen-mul-tables.cc
+++ /dev/null
@@ -1,1369 +0,0 @@
-/* Multiply table generator for tile.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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 program creates a table used to compile multiply by constant
- efficiently.
-
- This program should be compiled by a c++ compiler. If it's
- compiled with -DTILEPRO, it generates the multiply table for
- TILEPro; otherwise it generates the multiply table for TILE-Gx.
- Running the program produces the table in stdout.
-
- The program works by generating every possible combination of up to
- MAX_INSTRUCTIONS linear operators (such as add, sub, s2a, left
- shift) and computing the multiplier computed by those instructions.
- For example,
-
- s2a r2,r1,r1
- s2a r3,r2,r2
-
- multiplies r1 by 25.
-
- There are usually multiple instruction sequences to multiply by a
- given constant. This program keeps only the cheapest one.
- "Cheapest" is defined first by the minimum theoretical schedule
- length, and if those are equal then by the number of instructions,
- and if those are equal then by which instructions we "prefer"
- (e.g. because we think one might take infinitesimally less power
- than another, or simply because we arbitrarily pick one to be more
- canonical).
-
- Once this program has determined the best instruction sequence for
- each multiplier, it emits them in a table sorted by the multiplier
- so the user can binary-search it to look for a match. The table is
- pruned based on various criteria to keep its sizes reasonable. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#define __STDC_LIMIT_MACROS
-#include <stdint.h>
-
-#include <map>
-
-#ifdef TILEPRO
-
-/* The string representing the architecture. */
-#define ARCH "tilepro"
-
-/* The type for the multiplication. */
-typedef int MUL_TYPE;
-
-#else
-
-/* The string representing the architecture. */
-#define ARCH "tilegx"
-
-/* The type for the multiplication. */
-typedef long long MUL_TYPE;
-
-#endif
-
-/* Longest instruction sequence this will produce. With the current
- stupid algorithm runtime grows very quickly with this number. */
-#define MAX_INSTRUCTIONS 4
-
-/* Maximum number of subexpressions in the expression DAG being
- generated. This is the same as the number of instructions, except
- that zero and the original register we'd like to multiply by a
- constant are also thrown into the mix. */
-#define MAX_SUBEXPRS (2 + MAX_INSTRUCTIONS)
-
-#define MIN(x, y) ((x) <= (y) ? (x) : (y))
-#define MAX(x, y) ((x) >= (y) ? (x) : (y))
-
-#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
-
-/* For this program a unary op is one which has only one nonconstant
- operand. So shift left by 5 is considered unary. */
-typedef MUL_TYPE (*unary_op_func) (MUL_TYPE);
-typedef MUL_TYPE (*binary_op_func) (MUL_TYPE, MUL_TYPE);
-
-/* This describes an operation like 'add two registers' or 'left-shift
- by 7'.
-
- We call something a 'unary' operator if it only takes in one
- register as input, even though it might have an implicit second
- constant operand. Currently this is used for left-shift by
- constant. */
-class Operator
-{
-public:
- /* Construct for a binary operator. */
- Operator (const char *pattern, const char *name, binary_op_func func,
- int cost)
- : m_pattern (pattern), m_name (name), m_top_index (-1),
- m_unary_func (0), m_binary_func (func), m_cost (cost),
- m_rhs_if_unary (0)
- {
- }
-
- /* Construct for a unary operator. */
- Operator (const char *pattern, const char *name, unary_op_func func,
- int rhs_if_unary, int cost)
- : m_pattern (pattern), m_name (name), m_top_index (-1),
- m_unary_func (func), m_binary_func (0), m_cost (cost),
- m_rhs_if_unary (rhs_if_unary)
- {
- }
-
- bool is_unary () const
- {
- return m_binary_func == NULL;
- }
-
- /* Name of the pattern for this operation, e.g. CODE_FOR_addsi3. */
- const char *m_pattern;
-
- /* Name of the opcode for this operation, e.g. add. */
- const char *m_name;
-
- /* We don't have enough bits in our output representation to store
- the original insn_code value, so we store a compressed form
- instead. These values are decoded back into insn_code via the
- machine-generated multiply_insn_seq_decode_opcode lookup
- table. */
- int m_top_index;
-
- /* Unary operator to apply, or NULL if this is a binary operator. */
- unary_op_func m_unary_func;
-
- /* Binary operator to apply, or NULL if this is a unary operator. */
- binary_op_func m_binary_func;
-
- /* Function of how expensive we consider this operator. Higher is
- worse. */
- int m_cost;
-
- /* the RHS value to write into the C file if unary; used for shift
- count. */
- int m_rhs_if_unary;
-};
-
-
-/* An entry in an expression DAG. */
-class Expr
-{
-public:
- Expr () : m_op (NULL), m_lhs (0), m_rhs (0), m_produced_val (0),
- m_critical_path_length (0)
- {
- }
-
- /* The operator being applied to the operands. */
- const Operator *m_op;
-
- /* The index of the left-hand operand in the array of subexpressions
- already computed. */
- int m_lhs;
-
- /* For binary ops ,this is the index of the left-hand operand in the
- array of subexpressions already computed. For unary ops, it is
- specific to the op (e.g. it might hold a constant shift
- count). */
- int m_rhs;
-
- /* The multiplier produced by this expression tree. For example, for
- the tree ((x << 5) + x), the value would be 33. */
- MUL_TYPE m_produced_val;
-
- /* How far is this expression from the root, i.e. how many cycles
- minimum will it take to compute this? */
- int m_critical_path_length;
-};
-
-
-/* Make function pointers for the various linear operators we can
- apply to compute a multiplicative value. */
-
-static MUL_TYPE
-add (MUL_TYPE n1, MUL_TYPE n2)
-{
- return n1 + n2;
-}
-
-static MUL_TYPE
-sub (MUL_TYPE n1, MUL_TYPE n2)
-{
- return n1 - n2;
-}
-
-static MUL_TYPE
-s1a (MUL_TYPE n1, MUL_TYPE n2)
-{
- return n1 * 2 + n2;
-}
-
-static MUL_TYPE
-s2a (MUL_TYPE n1, MUL_TYPE n2)
-{
- return n1 * 4 + n2;
-}
-
-static MUL_TYPE
-s3a (MUL_TYPE n1, MUL_TYPE n2)
-{
- return n1 * 8 + n2;
-}
-
-#define SHIFT(count) \
-static MUL_TYPE \
-shift##count(MUL_TYPE n) \
-{ \
- return n << (count); \
-}
-
-SHIFT (1);
-SHIFT (2);
-SHIFT (3);
-SHIFT (4);
-SHIFT (5);
-SHIFT (6);
-SHIFT (7);
-SHIFT (8);
-SHIFT (9);
-SHIFT (10);
-SHIFT (11);
-SHIFT (12);
-SHIFT (13);
-SHIFT (14);
-SHIFT (15);
-SHIFT (16);
-SHIFT (17);
-SHIFT (18);
-SHIFT (19);
-SHIFT (20);
-SHIFT (21);
-SHIFT (22);
-SHIFT (23);
-SHIFT (24);
-SHIFT (25);
-SHIFT (26);
-SHIFT (27);
-SHIFT (28);
-SHIFT (29);
-SHIFT (30);
-SHIFT (31);
-#ifndef TILEPRO
-SHIFT (32);
-SHIFT (33);
-SHIFT (34);
-SHIFT (35);
-SHIFT (36);
-SHIFT (37);
-SHIFT (38);
-SHIFT (39);
-SHIFT (40);
-SHIFT (41);
-SHIFT (42);
-SHIFT (43);
-SHIFT (44);
-SHIFT (45);
-SHIFT (46);
-SHIFT (47);
-SHIFT (48);
-SHIFT (49);
-SHIFT (50);
-SHIFT (51);
-SHIFT (52);
-SHIFT (53);
-SHIFT (54);
-SHIFT (55);
-SHIFT (56);
-SHIFT (57);
-SHIFT (58);
-SHIFT (59);
-SHIFT (60);
-SHIFT (61);
-SHIFT (62);
-SHIFT (63);
-#endif
-
-#ifdef TILEPRO
-static Operator ops[] = {
- Operator ("CODE_FOR_addsi3", "add", add, 1040),
- Operator ("CODE_FOR_subsi3", "sub", sub, 1041),
- Operator ("CODE_FOR_insn_s1a", "s1a", s1a, 1042),
- Operator ("CODE_FOR_insn_s2a", "s2a", s2a, 1043),
- Operator ("CODE_FOR_insn_s3a", "s3a", s3a, 1044),
- /* Note: shl by 1 is not necessary, since adding a value to itself
- produces the same result. But the architecture team thinks
- left-shift may use slightly less power, so we might as well
- prefer it. */
- Operator ("CODE_FOR_ashlsi3", "shli", shift1, 1, 1001),
- Operator ("CODE_FOR_ashlsi3", "shli", shift2, 2, 1002),
- Operator ("CODE_FOR_ashlsi3", "shli", shift3, 3, 1003),
- Operator ("CODE_FOR_ashlsi3", "shli", shift4, 4, 1004),
- Operator ("CODE_FOR_ashlsi3", "shli", shift5, 5, 1005),
- Operator ("CODE_FOR_ashlsi3", "shli", shift6, 6, 1006),
- Operator ("CODE_FOR_ashlsi3", "shli", shift7, 7, 1007),
- Operator ("CODE_FOR_ashlsi3", "shli", shift8, 8, 1008),
- Operator ("CODE_FOR_ashlsi3", "shli", shift9, 9, 1009),
- Operator ("CODE_FOR_ashlsi3", "shli", shift10, 10, 1010),
- Operator ("CODE_FOR_ashlsi3", "shli", shift11, 11, 1011),
- Operator ("CODE_FOR_ashlsi3", "shli", shift12, 12, 1012),
- Operator ("CODE_FOR_ashlsi3", "shli", shift13, 13, 1013),
- Operator ("CODE_FOR_ashlsi3", "shli", shift14, 14, 1014),
- Operator ("CODE_FOR_ashlsi3", "shli", shift15, 15, 1015),
- Operator ("CODE_FOR_ashlsi3", "shli", shift16, 16, 1016),
- Operator ("CODE_FOR_ashlsi3", "shli", shift17, 17, 1017),
- Operator ("CODE_FOR_ashlsi3", "shli", shift18, 18, 1018),
- Operator ("CODE_FOR_ashlsi3", "shli", shift19, 19, 1019),
- Operator ("CODE_FOR_ashlsi3", "shli", shift20, 20, 1020),
- Operator ("CODE_FOR_ashlsi3", "shli", shift21, 21, 1021),
- Operator ("CODE_FOR_ashlsi3", "shli", shift22, 22, 1022),
- Operator ("CODE_FOR_ashlsi3", "shli", shift23, 23, 1023),
- Operator ("CODE_FOR_ashlsi3", "shli", shift24, 24, 1024),
- Operator ("CODE_FOR_ashlsi3", "shli", shift25, 25, 1025),
- Operator ("CODE_FOR_ashlsi3", "shli", shift26, 26, 1026),
- Operator ("CODE_FOR_ashlsi3", "shli", shift27, 27, 1027),
- Operator ("CODE_FOR_ashlsi3", "shli", shift28, 28, 1028),
- Operator ("CODE_FOR_ashlsi3", "shli", shift29, 29, 1029),
- Operator ("CODE_FOR_ashlsi3", "shli", shift30, 30, 1030),
- Operator ("CODE_FOR_ashlsi3", "shli", shift31, 31, 1031)
-};
-#else
-static Operator ops[] = {
- Operator ("CODE_FOR_adddi3", "add", add, 1070),
- Operator ("CODE_FOR_subdi3", "sub", sub, 1071),
- Operator ("CODE_FOR_insn_shl1add", "shl1add", s1a, 1072),
- Operator ("CODE_FOR_insn_shl2add", "shl2add", s2a, 1073),
- Operator ("CODE_FOR_insn_shl3add", "shl3add", s3a, 1074),
- // Note: shl by 1 is not necessary, since adding a value to itself
- // produces the same result. But the architecture team thinks left-shift
- // may use slightly less power, so we might as well prefer it.
- Operator ("CODE_FOR_ashldi3", "shli", shift1, 1, 1001),
- Operator ("CODE_FOR_ashldi3", "shli", shift2, 2, 1002),
- Operator ("CODE_FOR_ashldi3", "shli", shift3, 3, 1003),
- Operator ("CODE_FOR_ashldi3", "shli", shift4, 4, 1004),
- Operator ("CODE_FOR_ashldi3", "shli", shift5, 5, 1005),
- Operator ("CODE_FOR_ashldi3", "shli", shift6, 6, 1006),
- Operator ("CODE_FOR_ashldi3", "shli", shift7, 7, 1007),
- Operator ("CODE_FOR_ashldi3", "shli", shift8, 8, 1008),
- Operator ("CODE_FOR_ashldi3", "shli", shift9, 9, 1009),
- Operator ("CODE_FOR_ashldi3", "shli", shift10, 10, 1010),
- Operator ("CODE_FOR_ashldi3", "shli", shift11, 11, 1011),
- Operator ("CODE_FOR_ashldi3", "shli", shift12, 12, 1012),
- Operator ("CODE_FOR_ashldi3", "shli", shift13, 13, 1013),
- Operator ("CODE_FOR_ashldi3", "shli", shift14, 14, 1014),
- Operator ("CODE_FOR_ashldi3", "shli", shift15, 15, 1015),
- Operator ("CODE_FOR_ashldi3", "shli", shift16, 16, 1016),
- Operator ("CODE_FOR_ashldi3", "shli", shift17, 17, 1017),
- Operator ("CODE_FOR_ashldi3", "shli", shift18, 18, 1018),
- Operator ("CODE_FOR_ashldi3", "shli", shift19, 19, 1019),
- Operator ("CODE_FOR_ashldi3", "shli", shift20, 20, 1020),
- Operator ("CODE_FOR_ashldi3", "shli", shift21, 21, 1021),
- Operator ("CODE_FOR_ashldi3", "shli", shift22, 22, 1022),
- Operator ("CODE_FOR_ashldi3", "shli", shift23, 23, 1023),
- Operator ("CODE_FOR_ashldi3", "shli", shift24, 24, 1024),
- Operator ("CODE_FOR_ashldi3", "shli", shift25, 25, 1025),
- Operator ("CODE_FOR_ashldi3", "shli", shift26, 26, 1026),
- Operator ("CODE_FOR_ashldi3", "shli", shift27, 27, 1027),
- Operator ("CODE_FOR_ashldi3", "shli", shift28, 28, 1028),
- Operator ("CODE_FOR_ashldi3", "shli", shift29, 29, 1029),
- Operator ("CODE_FOR_ashldi3", "shli", shift30, 30, 1030),
- Operator ("CODE_FOR_ashldi3", "shli", shift31, 31, 1031),
- Operator ("CODE_FOR_ashldi3", "shli", shift32, 32, 1032),
- Operator ("CODE_FOR_ashldi3", "shli", shift33, 33, 1033),
- Operator ("CODE_FOR_ashldi3", "shli", shift34, 34, 1034),
- Operator ("CODE_FOR_ashldi3", "shli", shift35, 35, 1035),
- Operator ("CODE_FOR_ashldi3", "shli", shift36, 36, 1036),
- Operator ("CODE_FOR_ashldi3", "shli", shift37, 37, 1037),
- Operator ("CODE_FOR_ashldi3", "shli", shift38, 38, 1038),
- Operator ("CODE_FOR_ashldi3", "shli", shift39, 39, 1039),
- Operator ("CODE_FOR_ashldi3", "shli", shift40, 40, 1040),
- Operator ("CODE_FOR_ashldi3", "shli", shift41, 41, 1041),
- Operator ("CODE_FOR_ashldi3", "shli", shift42, 42, 1042),
- Operator ("CODE_FOR_ashldi3", "shli", shift43, 43, 1043),
- Operator ("CODE_FOR_ashldi3", "shli", shift44, 44, 1044),
- Operator ("CODE_FOR_ashldi3", "shli", shift45, 45, 1045),
- Operator ("CODE_FOR_ashldi3", "shli", shift46, 46, 1046),
- Operator ("CODE_FOR_ashldi3", "shli", shift47, 47, 1047),
- Operator ("CODE_FOR_ashldi3", "shli", shift48, 48, 1048),
- Operator ("CODE_FOR_ashldi3", "shli", shift49, 49, 1049),
- Operator ("CODE_FOR_ashldi3", "shli", shift50, 50, 1050),
- Operator ("CODE_FOR_ashldi3", "shli", shift51, 51, 1051),
- Operator ("CODE_FOR_ashldi3", "shli", shift52, 52, 1052),
- Operator ("CODE_FOR_ashldi3", "shli", shift53, 53, 1053),
- Operator ("CODE_FOR_ashldi3", "shli", shift54, 54, 1054),
- Operator ("CODE_FOR_ashldi3", "shli", shift55, 55, 1055),
- Operator ("CODE_FOR_ashldi3", "shli", shift56, 56, 1056),
- Operator ("CODE_FOR_ashldi3", "shli", shift57, 57, 1057),
- Operator ("CODE_FOR_ashldi3", "shli", shift58, 58, 1058),
- Operator ("CODE_FOR_ashldi3", "shli", shift59, 59, 1059),
- Operator ("CODE_FOR_ashldi3", "shli", shift60, 60, 1060),
- Operator ("CODE_FOR_ashldi3", "shli", shift61, 61, 1061),
- Operator ("CODE_FOR_ashldi3", "shli", shift62, 62, 1062),
- Operator ("CODE_FOR_ashldi3", "shli", shift63, 63, 1063)
-};
-#endif
-
-/* An ExpressionTree is an expression DAG. */
-class ExpressionTree
-{
-public:
- ExpressionTree () : m_num_vals (2)
- {
- m_exprs[0].m_produced_val = 0;
- m_exprs[1].m_produced_val = 1;
- }
-
- void copy_technique_from (ExpressionTree * other)
- {
- /* TODO: write this; other can compute the same products with less
- cost. We update this ExpressionTree object because some int is
- already mapped to it. */
- }
-
- int m_num_vals;
- Expr m_exprs[MAX_SUBEXPRS];
-
- int cost () const
- {
- int cost = 0;
- for (int j = 2; j < m_num_vals; j++)
- cost += m_exprs[j].m_op->m_cost;
- return cost + m_exprs[m_num_vals - 1].m_critical_path_length * 1000000;
- }
-};
-
-
-typedef std::map<MUL_TYPE, ExpressionTree *> ExpressionTreeMap;
-
-
-static void
-find_sequences (ExpressionTree &s, ExpressionTreeMap &best_solution)
-{
- /* Don't look more if we can't add any new values to the expression
- tree. */
- const int num_vals = s.m_num_vals;
- if (num_vals == MAX_SUBEXPRS)
- return;
-
- /* Grow array to make room for new values added as we loop. */
- s.m_num_vals = num_vals + 1;
-
- const Operator *const prev_op = s.m_exprs[num_vals - 1].m_op;
- const int prev_top_index = (prev_op != NULL) ? prev_op->m_top_index : -1;
-
- for (size_t f = 0; f < ARRAY_SIZE (ops); f++)
- {
- const Operator *const op = &ops[f];
-
- for (int i = 0; i < num_vals; i++)
- {
- /* Only allow zero as the first operand to sub, otherwise
- it is useless. */
- if (i == 0 && op->m_binary_func != sub)
- continue;
-
- /* Unary ops don't actually use the second operand, so as a
- big hack we trick it into only looping once in the inner
- loop. */
- const int j_end = op->is_unary () ? 2 : num_vals;
-
- /* We never allow zero as the second operand, as it is
- always useless. */
- for (int j = 1; j < j_end; j++)
- {
- /* Does this expression use the immediately previous
- expression? */
- const bool uses_prev_value =
- (i == num_vals - 1
- || (!op->is_unary () && j == num_vals - 1));
-
- if (!uses_prev_value)
- {
- /* For search efficiency, prune redundant
- instruction orderings.
-
- This op does not take the immediately preceding
- value as input, which means we could have done it
- in the previous slot. If its opcode is less than
- the previous instruction's, we'll declare this
- instruction order non-canonical and not pursue
- this branch of the search. */
- if (op->m_top_index < prev_top_index)
- continue;
- }
-
- MUL_TYPE n;
- if (op->is_unary ())
- {
- n = op->m_unary_func (s.m_exprs[i].m_produced_val);
- }
- else
- {
- n = op->m_binary_func (s.m_exprs[i].m_produced_val,
- s.m_exprs[j].m_produced_val);
- }
-
- bool duplicate = false;
- for (int k = 0; k < num_vals; k++)
- if (n == s.m_exprs[j].m_produced_val)
- {
- duplicate = true;
- break;
- }
-
- if (duplicate)
- continue;
-
- /* See if we found the best solution for n. */
- Expr *e = &s.m_exprs[num_vals];
- e->m_op = op;
- e->m_lhs = i;
- e->m_rhs = op->is_unary () ? op->m_rhs_if_unary : j;
- e->m_produced_val = n;
- e->m_critical_path_length =
- 1 + MAX (s.m_exprs[i].m_critical_path_length,
- s.m_exprs[j].m_critical_path_length);
-
- ExpressionTreeMap::iterator best (best_solution.find (n));
- if (best == best_solution.end ()
- || (*best).second->cost () > s.cost ())
- best_solution[n] = new ExpressionTree (s);
-
- /* Recurse and find more. */
- find_sequences (s, best_solution);
- }
- }
- }
-
- /* Restore old size. */
- s.m_num_vals = num_vals;
-}
-
-
-/* For each insn_code used by an operator, choose a compact number so
- it takes less space in the output data structure. This prints out a
- lookup table used to map the compactified number back to an
- insn_code. */
-static void
-create_insn_code_compression_table ()
-{
- int next_index = 1;
-
- /* Entry 0 must hold CODE_FOR_nothing to mean "end of array". */
- printf ("const enum insn_code %s_multiply_insn_seq_decode_opcode[] = {\n"
- " CODE_FOR_nothing /* must be first */ ", ARCH);
-
- for (size_t i = 0; i < ARRAY_SIZE (ops); i++)
- {
- Operator *op = &ops[i];
- int index = -1;
-
- /* See if some previous Operator was using the same insn_code.
- If so, reuse its table entry. */
- for (size_t j = 0; j < i; j++)
- {
- Operator *old = &ops[j];
- if (strcmp (old->m_pattern, op->m_pattern) == 0)
- {
- index = old->m_top_index;
- break;
- }
- }
-
- if (index == -1)
- {
- /* We need to make a new entry in the table. */
- printf (",\n %s", op->m_pattern);
- index = next_index++;
- }
-
- op->m_top_index = index;
- }
-
- printf ("\n};\n\n");
-}
-
-
-/* These are constants we've seen in code, that we want to keep table
- entries for. */
-static int multiply_constants_used[] = {
- -11796480,
- -27439,
- -25148,
- -22820,
- -21709,
- -20995,
- -20284,
- -20239,
- -19595,
- -19447,
- -19183,
- -19165,
- -18730,
- -17828,
- -17799,
- -17237,
- -17036,
- -16549,
- -16423,
- -16294,
- -16244,
- -16069,
- -15137,
- -15083,
- -15038,
- -14924,
- -14905,
- -14752,
- -14731,
- -14529,
- -14273,
- -14090,
- -14084,
- -14043,
- -13850,
- -13802,
- -13631,
- -13455,
- -13275,
- -12879,
- -12700,
- -12534,
- -12399,
- -12131,
- -12112,
- -12054,
- -12019,
- -11759,
- -11585,
- -11467,
- -11395,
- -11295,
- -11248,
- -11148,
- -11116,
- -11086,
- -11059,
- -11018,
- -10811,
- -10538,
- -10258,
- -10217,
- -10033,
- -9766,
- -9754,
- -9534,
- -9527,
- -9467,
- -9262,
- -9232,
- -9222,
- -9198,
- -9191,
- -9113,
- -8825,
- -8756,
- -8697,
- -8693,
- -8565,
- -8342,
- -8208,
- -8200,
- -8170,
- -8102,
- -7770,
- -7678,
- -7562,
- -7376,
- -7373,
- -7221,
- -7121,
- -6835,
- -6810,
- -6626,
- -6581,
- -6461,
- -6278,
- -6263,
- -6163,
- -6029,
- -5816,
- -5540,
- -5461,
- -5384,
- -5329,
- -4985,
- -4926,
- -4815,
- -4788,
- -4758,
- -4433,
- -4229,
- -4209,
- -4176,
- -4104,
- -4095,
- -4078,
- -3941,
- -3818,
- -3600,
- -3474,
- -3314,
- -3264,
- -3196,
- -3072,
- -2912,
- -2836,
- -2773,
- -2269,
- -2184,
- -2100,
- -1730,
- -1512,
- -1500,
- -1396,
- -1344,
- -1312,
- -1297,
- -1059,
- -1058,
- 1027,
- 1049,
- 1059,
- 1100,
- 1104,
- 1108,
- 1136,
- 1200,
- 1204,
- 1242,
- 1292,
- 1304,
- 1312,
- 1320,
- 1336,
- 1344,
- 1348,
- 1360,
- 1364,
- 1395,
- 1448,
- 1460,
- 1461,
- 1472,
- 1488,
- 1500,
- 1512,
- 1568,
- 1576,
- 1649,
- 1664,
- 1684,
- 1696,
- 1744,
- 1812,
- 1822,
- 1884,
- 1963,
- 1978,
- 2000,
- 2012,
- 2014,
- 2037,
- 2039,
- 2100,
- 2139,
- 2144,
- 2184,
- 2237,
- 2260,
- 2320,
- 2408,
- 2446,
- 2447,
- 2499,
- 2531,
- 2578,
- 2592,
- 2611,
- 2633,
- 2704,
- 2730,
- 2773,
- 2880,
- 2896,
- 2998,
- 3000,
- 3001,
- 3021,
- 3079,
- 3112,
- 3150,
- 3179,
- 3192,
- 3240,
- 3264,
- 3271,
- 3283,
- 3328,
- 3363,
- 3367,
- 3453,
- 3529,
- 3570,
- 3580,
- 3600,
- 3624,
- 3707,
- 3783,
- 3826,
- 3897,
- 3941,
- 3962,
- 3989,
- 4000,
- 4025,
- 4073,
- 4093,
- 4099,
- 4108,
- 4184,
- 4209,
- 4369,
- 4376,
- 4416,
- 4433,
- 4434,
- 4482,
- 4582,
- 4712,
- 4717,
- 4813,
- 4815,
- 4864,
- 5000,
- 5027,
- 5040,
- 5091,
- 5195,
- 5243,
- 5260,
- 5285,
- 5329,
- 5331,
- 5350,
- 5361,
- 5387,
- 5461,
- 5492,
- 5529,
- 5573,
- 5793,
- 5819,
- 5915,
- 5946,
- 5992,
- 6000,
- 6164,
- 6205,
- 6262,
- 6263,
- 6269,
- 6270,
- 6387,
- 6400,
- 6406,
- 6476,
- 6541,
- 6565,
- 6568,
- 6626,
- 6656,
- 6732,
- 6810,
- 6817,
- 6859,
- 7040,
- 7053,
- 7141,
- 7169,
- 7221,
- 7223,
- 7274,
- 7282,
- 7350,
- 7369,
- 7373,
- 7442,
- 7447,
- 7471,
- 7518,
- 7542,
- 7566,
- 7587,
- 7663,
- 7678,
- 7682,
- 7748,
- 7752,
- 7791,
- 8000,
- 8026,
- 8048,
- 8170,
- 8203,
- 8204,
- 8290,
- 8368,
- 8520,
- 8640,
- 8666,
- 8672,
- 8697,
- 8716,
- 8728,
- 8756,
- 8820,
- 8875,
- 8918,
- 8956,
- 9058,
- 9154,
- 9175,
- 9191,
- 9217,
- 9262,
- 9321,
- 9373,
- 9434,
- 9465,
- 9514,
- 9534,
- 9633,
- 9746,
- 9810,
- 9850,
- 9947,
- 9973,
- 10000,
- 10009,
- 10033,
- 10055,
- 10217,
- 10248,
- 10298,
- 10310,
- 10323,
- 10368,
- 10438,
- 10456,
- 10486,
- 10538,
- 10664,
- 10695,
- 10700,
- 10703,
- 10832,
- 10887,
- 10935,
- 10958,
- 11018,
- 11059,
- 11061,
- 11086,
- 11116,
- 11148,
- 11190,
- 11249,
- 11314,
- 11332,
- 11363,
- 11409,
- 11415,
- 11443,
- 11467,
- 11512,
- 11522,
- 11529,
- 11585,
- 11759,
- 11768,
- 11795,
- 11893,
- 11997,
- 12131,
- 12299,
- 12536,
- 12543,
- 12893,
- 12945,
- 12998,
- 13109,
- 13213,
- 13685,
- 13930,
- 14023,
- 14024,
- 14271,
- 14564,
- 14647,
- 15326,
- 15850,
- 15855,
- 15929,
- 16000,
- 16154,
- 16496,
- 16807,
- 16819,
- 16984,
- 17203,
- 17223,
- 17333,
- 17760,
- 17799,
- 17837,
- 18029,
- 18068,
- 18336,
- 18515,
- 19595,
- 20017,
- 20131,
- 20862,
- 20995,
- 21709,
- 22554,
- 25000,
- 25172,
- 25600,
- 25733,
- 27439,
- 38470,
- 46802,
- 50000,
- 11796480,
- 16843009,
- 23592960,
-};
-
-
-const int num_mult_constants_used =
- (int)(sizeof multiply_constants_used
- / sizeof multiply_constants_used[0]);
-
-
-#define XSIZE (sizeof multiply_constants_used / \
- sizeof multiply_constants_used[0] + 32) / 32
-unsigned multiply_constants_avail[XSIZE];
-#undef XSIZE
-
-
-/* bsearch helper function. */
-static int
-compare_constants (const void *key, const void *t)
-{
- return (*(int*)key) - *((int*)t);
-}
-
-
-static int *
-find_mult_constants_used (int multiplier)
-{
- return (int *) bsearch (&multiplier, multiply_constants_used,
- num_mult_constants_used,
- sizeof multiply_constants_used[0],
- compare_constants);
-}
-
-
-int num_ops (ExpressionTree *s)
-{
- int n = 0;
- for (int i = 0; i < s->m_num_vals; i++)
- {
- Expr *e = &s->m_exprs[i];
- if (e->m_op != NULL)
- n++;
- }
- return n;
-}
-
-
-#ifdef TILEPRO
-bool
-tilepro_emit (int multiplier, int num_ops)
-{
- int abs_multiplier = (multiplier >= 0) ? multiplier : -multiplier;
-
- /* Keep constants in range [-1024, 1024]. */
- if (abs_multiplier <= 1024)
- return true;
-
- /* Keep constants near powers of two. */
- int prev_pow2 = 1 << (31 - __builtin_clz (abs_multiplier));
- int next_pow2 = prev_pow2 << 1;
-
- if ((abs_multiplier - prev_pow2 <= 10)
- || (next_pow2 - abs_multiplier <= 10))
- return true;
-
- /* Keep constants near powers of ten. */
- {
- long long j = 1;
- long long prev_pow10;
- long long next_pow10;
-
- while (((j * 10) < abs_multiplier)
- && (j < (j * 10)))
- j = j * 10;
-
- prev_pow10 = j;
- next_pow10 = j * 10;
-
- if ((abs_multiplier - prev_pow10 <= 10)
- || (next_pow10 - abs_multiplier <= 10))
- return true;
- }
-
- /* Keep short sequences that have two or fewer ops. */
- if (num_ops <= 2)
- return true;
-
- /* Keep constants that are mostly 0's or mostly 1's. */
- if (__builtin_popcount (multiplier) <= 2 ||
- __builtin_popcount (multiplier) >= 30)
- return true;
-
- /* Keep constants seen in actual code. */
- if ((find_mult_constants_used (multiplier)))
- return true;
-
- return false;
-}
-#else
-bool
-tilegx_emit (long long multiplier, int num_ops)
-{
- long long abs_multiplier = (multiplier >= 0) ? multiplier : - multiplier;
-
- /* Keep constants in range [-1024, 1024]. */
- if (abs_multiplier <= 1024)
- return true;
-
- /* Otherwise exclude sequences with four ops. */
- if (num_ops > 3)
- return false;
-
- /* Keep constants near powers of two. */
- {
- unsigned long long prev_pow2 =
- 1LL << (63 - __builtin_clzll (abs_multiplier));
- unsigned long long next_pow2 = prev_pow2 << 1;
-
- /* handle overflow case. */
- if (next_pow2 == 0)
- {
- if (prev_pow2 - abs_multiplier <= 10)
- return true;
- }
- else if ((abs_multiplier - prev_pow2 <= 10)
- || (next_pow2 - abs_multiplier <= 10))
- return true;
- }
-
- /* Keep constants near powers of ten. */
- {
- long long j = 1;
- long long prev_pow10;
- long long next_pow10;
-
- while (((j * 10) < abs_multiplier)
- && (j < (INTMAX_MAX / 10)))
- j = j * 10;
-
- prev_pow10 = j;
- next_pow10 = (j > (INTMAX_MAX / 10)) ? 0 : j * 10;
-
- if ((abs_multiplier - prev_pow10 <= 100)
- || (next_pow10
- && (next_pow10 - abs_multiplier <= 100)))
- return true;
- }
-
- if (num_ops <= 2)
- return true;
-
- /* Keep constants that are mostly 0's or mostly 1's. */
- if (__builtin_popcountll (multiplier) <= 2 ||
- __builtin_popcountll (multiplier) >= 62)
- return true;
-
- /* Keep constants seen in actual code. */
- if (find_mult_constants_used (multiplier))
- return true;
-
- return false;
-}
-#endif
-
-
-int
-main ()
-{
- ExpressionTreeMap best_solution;
- ExpressionTree s;
-
-#ifdef TILEPRO
- printf ("/* Constant multiply table for TILEPro.\n");
-#else
- printf ("/* Constant multiply table for TILE-Gx.\n");
-#endif
- printf (" Copyright (C) 2011-2022 Free Software Foundation, Inc.\n");
- printf (" Contributed by Walter Lee (walt@tilera.com)\n");
- printf ("\n");
- printf (" This file is part of GCC.\n");
- printf ("\n");
- printf (" GCC is free software; you can redistribute it and/or modify it\n");
- printf (" under the terms of the GNU General Public License as published\n");
- printf (" by the Free Software Foundation; either version 3, or (at your\n");
- printf (" option) any later version.\n");
- printf ("\n");
- printf (" GCC is distributed in the hope that it will be useful, but WITHOUT\n");
- printf (" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n");
- printf (" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\n");
- printf (" License for more details.\n");
- printf ("\n");
- printf (" You should have received a copy of the GNU General Public License\n");
- printf (" along with GCC; see the file COPYING3. If not see\n");
- printf (" <http://www.gnu.org/licenses/>. */\n");
- printf ("\n");
- printf ("/* Note this file is auto-generated from gen-mul-tables.cc.\n");
- printf (" Make any required changes there. */\n");
- printf ("\n");
- printf ("#define IN_TARGET_CODE 1\n");
- printf ("\n");
- printf ("#include \"config.h\"\n");
- printf ("#include \"system.h\"\n");
- printf ("#include \"coretypes.h\"\n");
- printf ("#include \"backend.h\"\n");
- printf ("#include \"rtl.h\"\n");
- printf ("#include \"expmed.h\"\n");
- printf ("#include \"%s-multiply.h\"\n\n", ARCH);
- create_insn_code_compression_table ();
-
- /* Try all combinations of operators and see what constants we
- produce. For each possible constant, record the most efficient
- way to generate it. */
- find_sequences (s, best_solution);
-
- printf ("const struct %s_multiply_insn_seq "
- "%s_multiply_insn_seq_table[] = {\n",
- ARCH, ARCH);
-
- const char *comma_separator = "";
-
- ExpressionTreeMap::iterator i (best_solution.begin ());
- for (; i != best_solution.end (); ++i)
- {
- ExpressionTree *s = (*i).second;
- const MUL_TYPE n = (*i).first;
-
- if (n == 0 || n == 1)
- {
- /* Both of these require zero operations, so these entries
- are bogus and should never be used. */
- continue;
- }
-
- /* Prune the list of entries to keep the table to a reasonable
- size. */
-#ifdef TILEPRO
- if (!tilepro_emit (n, num_ops (s)))
- continue;
-#else
- if (!tilegx_emit (n, num_ops (s)))
- continue;
-#endif
-
- printf ("%s", comma_separator);
-
-#ifdef TILEPRO
- const MUL_TYPE int_min = INT32_MIN;
-#else
- const MUL_TYPE int_min = INT64_MIN;
-#endif
- if (n == int_min)
- {
- /* Handle C's woeful lack of unary negation. Without this,
- printing out INT_MIN in decimal will yield an unsigned
- int which could generate a compiler warning. */
-#ifdef TILEPRO
- printf (" {%d - 1 /* 0x%x */ ,\n {", n + 1,
- (unsigned) n);
-#else
- printf (" {%lldll - 1 /* 0x%llx */ ,\n {", n + 1,
- (unsigned MUL_TYPE) n);
-#endif
- }
- else
- {
-#ifdef TILEPRO
- printf (" {%d /* 0x%x */ ,\n {", n, (unsigned) n);
-#else
- printf (" {%lldll /* 0x%llx */ ,\n {", n, (unsigned MUL_TYPE) n);
-#endif
- }
-
- bool first = true;
- for (int j = 0; j < s->m_num_vals; j++)
- {
- Expr *e = &s->m_exprs[j];
-
- const Operator *op = e->m_op;
- if (op == NULL)
- continue;
-
- char buf[1024];
- snprintf (buf, sizeof buf, "%s{%d, %d, %d}%s",
- first ? "" : " ",
- op->m_top_index,
- e->m_lhs, e->m_rhs, (j + 1) == s->m_num_vals ? "}" : ",");
-
- char opnd0[10];
- if (e->m_lhs)
- snprintf (opnd0, sizeof opnd0, "r%d", e->m_lhs);
- else
- snprintf (opnd0, sizeof opnd0, "zero");
-
- printf ("%s\t\t\t/* %s r%d, %s, %s%d */\n",
- buf, op->m_name, j, opnd0,
- op->is_unary () ? "" : "r", e->m_rhs);
-
- first = false;
- }
- printf (" }");
- comma_separator = ",\n";
- }
-
- printf ("\n};\n\n");
- printf ("const int %s_multiply_insn_seq_table_size =\n"
- " (int) (sizeof %s_multiply_insn_seq_table\n"
- " / sizeof %s_multiply_insn_seq_table[0]);\n",
- ARCH, ARCH, ARCH);
-
- return EXIT_SUCCESS;
-}
diff --git a/gcc/config/tilepro/linux.h b/gcc/config/tilepro/linux.h
deleted file mode 100644
index 65a411e..0000000
--- a/gcc/config/tilepro/linux.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Definitions for TILEPro running Linux-based GNU systems with ELF.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#undef CPP_SPEC
-#define CPP_SPEC "%{pthread:-D_REENTRANT}"
-
-#undef LINK_SPEC
-#define LINK_SPEC "\
- %{shared:-shared} \
- %{!shared: \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- -dynamic-linker /lib/ld.so.1} \
- %{static:-static}}"
-
-#define NO_PROFILE_COUNTERS 1
-
-#undef MCOUNT_NAME
-#define MCOUNT_NAME "__mcount"
-
-#undef NEED_INDICATE_EXEC_STACK
-#define NEED_INDICATE_EXEC_STACK 1
-
-#ifdef TARGET_LIBC_PROVIDES_SSP
-/* TILEPro glibc provides __stack_chk_guard two pointer-size words before
- tp. */
-#define TARGET_THREAD_SSP_OFFSET (-2 * GET_MODE_SIZE (ptr_mode))
-#endif
-
-/* For __clear_cache in libgcc2.c. */
-#ifdef IN_LIBGCC2
-
-/* Use the minimum page size of 4K. Alternatively we can call
- getpagesize() but it introduces a libc dependence.
- See Linux arch/tile/include/uapi/arch/icache.h for more commentary. */
-#undef CLEAR_INSN_CACHE
-#define CLEAR_INSN_CACHE(BEG, END) \
-{ \
- long size = (long) (END) - (long) (BEG); \
- if (size) \
- { \
- const char *start = (const char *) ((unsigned long) (BEG) & -64L);\
- const char *end = start + (size < 16384 ? size : 16384) - 1; \
- long num_passes = 4; \
- __insn_mf (); \
- do \
- { \
- const char *p; \
- for (p = start; p <= end; p += 64) \
- __insn_icoh (p); \
- start += 4096; \
- end += 4096; \
- } \
- while (--num_passes > 0); \
- __insn_drain (); \
- } \
-}
-
-#else
-
-/* define CLEAR_INSN_CACHE so that gcc knows to expand __builtin__clear_cache
- to the libraray call. */
-#undef CLEAR_INSN_CACHE
-#define CLEAR_INSN_CACHE 1
-
-#endif
diff --git a/gcc/config/tilepro/mul-tables.cc b/gcc/config/tilepro/mul-tables.cc
deleted file mode 100644
index 35867b3..0000000
--- a/gcc/config/tilepro/mul-tables.cc
+++ /dev/null
@@ -1,17837 +0,0 @@
-/* Constant multiply table for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-/* Note this file is auto-generated from gen-mul-tables.cc.
- Make any required changes there. */
-
-#define IN_TARGET_CODE 1
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "backend.h"
-#include "rtl.h"
-#include "expmed.h"
-#include "tilepro-multiply.h"
-
-const enum insn_code tilepro_multiply_insn_seq_decode_opcode[] = {
- CODE_FOR_nothing /* must be first */ ,
- CODE_FOR_addsi3,
- CODE_FOR_subsi3,
- CODE_FOR_insn_s1a,
- CODE_FOR_insn_s2a,
- CODE_FOR_insn_s3a,
- CODE_FOR_ashlsi3
-};
-
-const struct tilepro_multiply_insn_seq tilepro_multiply_insn_seq_table[] = {
- {-2147483647 - 1 /* 0x80000000 */ ,
- {{6, 1, 31}} /* shli r2, r1, 31 */
- },
- {-2147483647 /* 0x80000001 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {-2147483646 /* 0x80000002 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {-2147483645 /* 0x80000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483644 /* 0x80000004 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {-2147483643 /* 0x80000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483642 /* 0x80000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-2147483641 /* 0x80000007 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {-2147483640 /* 0x80000008 */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {-2147483639 /* 0x80000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483638 /* 0x8000000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-2147483632 /* 0x80000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483616 /* 0x80000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483584 /* 0x80000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483520 /* 0x80000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483392 /* 0x80000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147483136 /* 0x80000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147482624 /* 0x80000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147481600 /* 0x80000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147479552 /* 0x80001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147475456 /* 0x80002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147467264 /* 0x80004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147450880 /* 0x80008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147418112 /* 0x80010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147352576 /* 0x80020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2147221504 /* 0x80040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2146959360 /* 0x80080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2146435072 /* 0x80100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2145386496 /* 0x80200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2143289344 /* 0x80400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2139095040 /* 0x80800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2130706432 /* 0x81000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2113929216 /* 0x82000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2080374784 /* 0x84000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-2013265920 /* 0x88000000 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {-1879048192 /* 0x90000000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {-1610612737 /* 0x9fffffff */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {-1610612736 /* 0xa0000000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {-1342177281 /* 0xafffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 28}, /* shli r4, r3, 28 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1207959553 /* 0xb7ffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 27}, /* shli r4, r3, 27 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1140850689 /* 0xbbffffff */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-1073741889 /* 0xbfffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1073741857 /* 0xbfffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1073741841 /* 0xbfffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-1073741834 /* 0xbffffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 30}, /* shli r4, r2, 30 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-1073741833 /* 0xbffffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1073741832 /* 0xbffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-1073741831 /* 0xbffffff9 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1073741830 /* 0xbffffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 30}, /* shli r4, r2, 30 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {-1073741829 /* 0xbffffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-1073741828 /* 0xbffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-1073741827 /* 0xbffffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {-1073741826 /* 0xbffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-1073741825 /* 0xbfffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741824 /* 0xc0000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 30}} /* shli r3, r2, 30 */
- },
- {-1073741823 /* 0xc0000001 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1073741822 /* 0xc0000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741821 /* 0xc0000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741820 /* 0xc0000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741819 /* 0xc0000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741818 /* 0xc0000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 30}, /* shli r3, r2, 30 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-1073741817 /* 0xc0000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 27}, /* shli r4, r2, 27 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1073741816 /* 0xc0000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741815 /* 0xc0000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1073741814 /* 0xc000000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-805306369 /* 0xcfffffff */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-671088641 /* 0xd7ffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 27}, /* shli r4, r3, 27 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-603979777 /* 0xdbffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 26}, /* shli r4, r3, 26 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-570425345 /* 0xddffffff */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-536870977 /* 0xdfffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-536870945 /* 0xdfffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-536870929 /* 0xdfffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-536870922 /* 0xdffffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 29}, /* shli r4, r2, 29 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-536870921 /* 0xdffffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-536870920 /* 0xdffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-536870919 /* 0xdffffff9 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-536870918 /* 0xdffffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-536870917 /* 0xdffffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-536870916 /* 0xdffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-536870915 /* 0xdffffffd */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-536870914 /* 0xdffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-536870913 /* 0xdfffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870912 /* 0xe0000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {-536870911 /* 0xe0000001 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-536870910 /* 0xe0000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870909 /* 0xe0000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870908 /* 0xe0000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870907 /* 0xe0000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870906 /* 0xe0000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-536870905 /* 0xe0000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 26}, /* shli r4, r2, 26 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-536870904 /* 0xe0000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870903 /* 0xe0000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-536870902 /* 0xe000000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-402653185 /* 0xe7ffffff */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-335544321 /* 0xebffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 26}, /* shli r4, r3, 26 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-301989889 /* 0xedffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 25}, /* shli r4, r3, 25 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-285212673 /* 0xeeffffff */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-268435521 /* 0xefffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-268435489 /* 0xefffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-268435473 /* 0xefffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-268435466 /* 0xeffffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 28}, /* shli r4, r2, 28 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-268435465 /* 0xeffffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-268435464 /* 0xeffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}, /* shli r3, r2, 28 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-268435463 /* 0xeffffff9 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-268435462 /* 0xeffffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-268435461 /* 0xeffffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-268435460 /* 0xeffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}, /* shli r3, r2, 28 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-268435459 /* 0xeffffffd */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-268435458 /* 0xeffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}, /* shli r3, r2, 28 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-268435457 /* 0xefffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435456 /* 0xf0000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {-268435455 /* 0xf0000001 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-268435454 /* 0xf0000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435453 /* 0xf0000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435452 /* 0xf0000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435451 /* 0xf0000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435450 /* 0xf0000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-268435449 /* 0xf0000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 25}, /* shli r4, r2, 25 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-268435448 /* 0xf0000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435447 /* 0xf0000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-268435446 /* 0xf000000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-201326593 /* 0xf3ffffff */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-167772161 /* 0xf5ffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 25}, /* shli r4, r3, 25 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-150994945 /* 0xf6ffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 24}, /* shli r4, r3, 24 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-142606337 /* 0xf77fffff */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-134217793 /* 0xf7ffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-134217761 /* 0xf7ffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-134217745 /* 0xf7ffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-134217738 /* 0xf7fffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 27}, /* shli r4, r2, 27 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-134217737 /* 0xf7fffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-134217736 /* 0xf7fffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-134217735 /* 0xf7fffff9 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-134217734 /* 0xf7fffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-134217733 /* 0xf7fffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-134217732 /* 0xf7fffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-134217731 /* 0xf7fffffd */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-134217730 /* 0xf7fffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}, /* shli r3, r2, 27 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-134217729 /* 0xf7ffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217728 /* 0xf8000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {-134217727 /* 0xf8000001 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-134217726 /* 0xf8000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217725 /* 0xf8000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217724 /* 0xf8000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217723 /* 0xf8000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217722 /* 0xf8000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-134217721 /* 0xf8000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 24}, /* shli r4, r2, 24 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-134217720 /* 0xf8000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217719 /* 0xf8000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134217718 /* 0xf800000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-100663297 /* 0xf9ffffff */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-83886081 /* 0xfaffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 24}, /* shli r4, r3, 24 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-75497473 /* 0xfb7fffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 23}, /* shli r4, r3, 23 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-71303169 /* 0xfbbfffff */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-67108929 /* 0xfbffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-67108897 /* 0xfbffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-67108881 /* 0xfbffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-67108874 /* 0xfbfffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 26}, /* shli r4, r2, 26 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-67108873 /* 0xfbfffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-67108872 /* 0xfbfffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-67108871 /* 0xfbfffff9 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-67108870 /* 0xfbfffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-67108869 /* 0xfbfffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-67108868 /* 0xfbfffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-67108867 /* 0xfbfffffd */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-67108866 /* 0xfbfffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}, /* shli r3, r2, 26 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-67108865 /* 0xfbffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108864 /* 0xfc000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {-67108863 /* 0xfc000001 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-67108862 /* 0xfc000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108861 /* 0xfc000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108860 /* 0xfc000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108859 /* 0xfc000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108858 /* 0xfc000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-67108857 /* 0xfc000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 23}, /* shli r4, r2, 23 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-67108856 /* 0xfc000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108855 /* 0xfc000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-67108854 /* 0xfc00000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-50331649 /* 0xfcffffff */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-41943041 /* 0xfd7fffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 23}, /* shli r4, r3, 23 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-37748737 /* 0xfdbfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 22}, /* shli r4, r3, 22 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-35651585 /* 0xfddfffff */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-33554497 /* 0xfdffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-33554465 /* 0xfdffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-33554449 /* 0xfdffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-33554442 /* 0xfdfffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 25}, /* shli r4, r2, 25 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-33554441 /* 0xfdfffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-33554440 /* 0xfdfffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-33554439 /* 0xfdfffff9 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-33554438 /* 0xfdfffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-33554437 /* 0xfdfffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-33554436 /* 0xfdfffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-33554435 /* 0xfdfffffd */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-33554434 /* 0xfdfffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}, /* shli r3, r2, 25 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-33554433 /* 0xfdffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554432 /* 0xfe000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {-33554431 /* 0xfe000001 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-33554430 /* 0xfe000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554429 /* 0xfe000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554428 /* 0xfe000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554427 /* 0xfe000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554426 /* 0xfe000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-33554425 /* 0xfe000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 22}, /* shli r4, r2, 22 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-33554424 /* 0xfe000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554423 /* 0xfe000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-33554422 /* 0xfe00000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-25165825 /* 0xfe7fffff */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-20971521 /* 0xfebfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 22}, /* shli r4, r3, 22 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-18874369 /* 0xfedfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 21}, /* shli r4, r3, 21 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-17825793 /* 0xfeefffff */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-16777281 /* 0xfeffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-16777249 /* 0xfeffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-16777233 /* 0xfeffffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-16777226 /* 0xfefffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 24}, /* shli r4, r2, 24 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-16777225 /* 0xfefffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-16777224 /* 0xfefffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-16777223 /* 0xfefffff9 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16777222 /* 0xfefffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-16777221 /* 0xfefffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-16777220 /* 0xfefffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-16777219 /* 0xfefffffd */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16777218 /* 0xfefffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}, /* shli r3, r2, 24 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-16777217 /* 0xfeffffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777216 /* 0xff000000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {-16777215 /* 0xff000001 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-16777214 /* 0xff000002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777213 /* 0xff000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777212 /* 0xff000004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777211 /* 0xff000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777210 /* 0xff000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-16777209 /* 0xff000007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 21}, /* shli r4, r2, 21 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-16777208 /* 0xff000008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777207 /* 0xff000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16777206 /* 0xff00000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-12582913 /* 0xff3fffff */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-11796480 /* 0xff4c0000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {6, 2, 22}, /* shli r4, r2, 22 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-10485761 /* 0xff5fffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 21}, /* shli r4, r3, 21 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-9437185 /* 0xff6fffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 20}, /* shli r4, r3, 20 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-8912897 /* 0xff77ffff */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-8388673 /* 0xff7fffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-8388641 /* 0xff7fffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-8388625 /* 0xff7fffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-8388618 /* 0xff7ffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 23}, /* shli r4, r2, 23 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-8388617 /* 0xff7ffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-8388616 /* 0xff7ffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-8388615 /* 0xff7ffff9 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8388614 /* 0xff7ffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-8388613 /* 0xff7ffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-8388612 /* 0xff7ffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-8388611 /* 0xff7ffffd */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8388610 /* 0xff7ffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}, /* shli r3, r2, 23 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-8388609 /* 0xff7fffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388608 /* 0xff800000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {-8388607 /* 0xff800001 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-8388606 /* 0xff800002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388605 /* 0xff800003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388604 /* 0xff800004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388603 /* 0xff800005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388602 /* 0xff800006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-8388601 /* 0xff800007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 20}, /* shli r4, r2, 20 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-8388600 /* 0xff800008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388599 /* 0xff800009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8388598 /* 0xff80000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-6291457 /* 0xff9fffff */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-5242881 /* 0xffafffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 20}, /* shli r4, r3, 20 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-4718593 /* 0xffb7ffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 19}, /* shli r4, r3, 19 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-4456449 /* 0xffbbffff */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-4194369 /* 0xffbfffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4194337 /* 0xffbfffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4194321 /* 0xffbfffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-4194314 /* 0xffbffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 22}, /* shli r4, r2, 22 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-4194313 /* 0xffbffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4194312 /* 0xffbffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-4194311 /* 0xffbffff9 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4194310 /* 0xffbffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-4194309 /* 0xffbffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-4194308 /* 0xffbffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-4194307 /* 0xffbffffd */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4194306 /* 0xffbffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}, /* shli r3, r2, 22 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-4194305 /* 0xffbfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194304 /* 0xffc00000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {-4194303 /* 0xffc00001 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4194302 /* 0xffc00002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194301 /* 0xffc00003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194300 /* 0xffc00004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194299 /* 0xffc00005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194298 /* 0xffc00006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-4194297 /* 0xffc00007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 19}, /* shli r4, r2, 19 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-4194296 /* 0xffc00008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194295 /* 0xffc00009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4194294 /* 0xffc0000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-3145729 /* 0xffcfffff */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2621441 /* 0xffd7ffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 19}, /* shli r4, r3, 19 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-2359297 /* 0xffdbffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 18}, /* shli r4, r3, 18 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-2228225 /* 0xffddffff */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-2097217 /* 0xffdfffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2097185 /* 0xffdfffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2097169 /* 0xffdfffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-2097162 /* 0xffdffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 21}, /* shli r4, r2, 21 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-2097161 /* 0xffdffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2097160 /* 0xffdffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-2097159 /* 0xffdffff9 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2097158 /* 0xffdffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-2097157 /* 0xffdffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-2097156 /* 0xffdffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-2097155 /* 0xffdffffd */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2097154 /* 0xffdffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}, /* shli r3, r2, 21 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-2097153 /* 0xffdfffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097152 /* 0xffe00000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {-2097151 /* 0xffe00001 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2097150 /* 0xffe00002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097149 /* 0xffe00003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097148 /* 0xffe00004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097147 /* 0xffe00005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097146 /* 0xffe00006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-2097145 /* 0xffe00007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 18}, /* shli r4, r2, 18 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-2097144 /* 0xffe00008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097143 /* 0xffe00009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2097142 /* 0xffe0000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1572865 /* 0xffe7ffff */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1310721 /* 0xffebffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 18}, /* shli r4, r3, 18 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1179649 /* 0xffedffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 17}, /* shli r4, r3, 17 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1114113 /* 0xffeeffff */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-1048641 /* 0xffefffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1048609 /* 0xffefffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1048593 /* 0xffefffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-1048586 /* 0xffeffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 20}, /* shli r4, r2, 20 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-1048585 /* 0xffeffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1048584 /* 0xffeffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-1048583 /* 0xffeffff9 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1048582 /* 0xffeffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1048581 /* 0xffeffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-1048580 /* 0xffeffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-1048579 /* 0xffeffffd */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1048578 /* 0xffeffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}, /* shli r3, r2, 20 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-1048577 /* 0xffefffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048576 /* 0xfff00000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {-1048575 /* 0xfff00001 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1048574 /* 0xfff00002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048573 /* 0xfff00003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048572 /* 0xfff00004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048571 /* 0xfff00005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048570 /* 0xfff00006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-1048569 /* 0xfff00007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 17}, /* shli r4, r2, 17 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1048568 /* 0xfff00008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048567 /* 0xfff00009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1048566 /* 0xfff0000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-786433 /* 0xfff3ffff */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-655361 /* 0xfff5ffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 17}, /* shli r4, r3, 17 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-589825 /* 0xfff6ffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 16}, /* shli r4, r3, 16 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-557057 /* 0xfff77fff */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-524353 /* 0xfff7ffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-524321 /* 0xfff7ffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-524305 /* 0xfff7ffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-524298 /* 0xfff7fff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 19}, /* shli r4, r2, 19 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-524297 /* 0xfff7fff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-524296 /* 0xfff7fff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-524295 /* 0xfff7fff9 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-524294 /* 0xfff7fffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-524293 /* 0xfff7fffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-524292 /* 0xfff7fffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-524291 /* 0xfff7fffd */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-524290 /* 0xfff7fffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}, /* shli r3, r2, 19 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-524289 /* 0xfff7ffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524288 /* 0xfff80000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {-524287 /* 0xfff80001 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-524286 /* 0xfff80002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524285 /* 0xfff80003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524284 /* 0xfff80004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524283 /* 0xfff80005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524282 /* 0xfff80006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-524281 /* 0xfff80007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 16}, /* shli r4, r2, 16 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-524280 /* 0xfff80008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524279 /* 0xfff80009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-524278 /* 0xfff8000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-393217 /* 0xfff9ffff */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-327681 /* 0xfffaffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 16}, /* shli r4, r3, 16 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-294913 /* 0xfffb7fff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 15}, /* shli r4, r3, 15 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-278529 /* 0xfffbbfff */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-262209 /* 0xfffbffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-262177 /* 0xfffbffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-262161 /* 0xfffbffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-262154 /* 0xfffbfff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 18}, /* shli r4, r2, 18 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-262153 /* 0xfffbfff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-262152 /* 0xfffbfff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-262151 /* 0xfffbfff9 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-262150 /* 0xfffbfffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-262149 /* 0xfffbfffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-262148 /* 0xfffbfffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-262147 /* 0xfffbfffd */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-262146 /* 0xfffbfffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}, /* shli r3, r2, 18 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-262145 /* 0xfffbffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262144 /* 0xfffc0000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {-262143 /* 0xfffc0001 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-262142 /* 0xfffc0002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262141 /* 0xfffc0003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262140 /* 0xfffc0004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262139 /* 0xfffc0005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262138 /* 0xfffc0006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-262137 /* 0xfffc0007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 15}, /* shli r4, r2, 15 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-262136 /* 0xfffc0008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262135 /* 0xfffc0009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-262134 /* 0xfffc000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-196609 /* 0xfffcffff */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-163841 /* 0xfffd7fff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 15}, /* shli r4, r3, 15 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-147457 /* 0xfffdbfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 14}, /* shli r4, r3, 14 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-139265 /* 0xfffddfff */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-131137 /* 0xfffdffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-131105 /* 0xfffdffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-131089 /* 0xfffdffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-131082 /* 0xfffdfff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 17}, /* shli r4, r2, 17 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-131081 /* 0xfffdfff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-131080 /* 0xfffdfff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-131079 /* 0xfffdfff9 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-131078 /* 0xfffdfffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-131077 /* 0xfffdfffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-131076 /* 0xfffdfffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-131075 /* 0xfffdfffd */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-131074 /* 0xfffdfffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}, /* shli r3, r2, 17 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-131073 /* 0xfffdffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131072 /* 0xfffe0000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {-131071 /* 0xfffe0001 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-131070 /* 0xfffe0002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131069 /* 0xfffe0003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131068 /* 0xfffe0004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131067 /* 0xfffe0005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131066 /* 0xfffe0006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-131065 /* 0xfffe0007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 14}, /* shli r4, r2, 14 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-131064 /* 0xfffe0008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131063 /* 0xfffe0009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-131062 /* 0xfffe000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-98305 /* 0xfffe7fff */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-81921 /* 0xfffebfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 14}, /* shli r4, r3, 14 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-73729 /* 0xfffedfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 13}, /* shli r4, r3, 13 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-69633 /* 0xfffeefff */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-65601 /* 0xfffeffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-65569 /* 0xfffeffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-65553 /* 0xfffeffef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-65546 /* 0xfffefff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 16}, /* shli r4, r2, 16 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-65545 /* 0xfffefff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-65544 /* 0xfffefff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-65543 /* 0xfffefff9 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-65542 /* 0xfffefffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-65541 /* 0xfffefffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-65540 /* 0xfffefffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-65539 /* 0xfffefffd */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-65538 /* 0xfffefffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}, /* shli r3, r2, 16 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-65537 /* 0xfffeffff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65536 /* 0xffff0000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {-65535 /* 0xffff0001 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-65534 /* 0xffff0002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65533 /* 0xffff0003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65532 /* 0xffff0004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65531 /* 0xffff0005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65530 /* 0xffff0006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-65529 /* 0xffff0007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 13}, /* shli r4, r2, 13 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-65528 /* 0xffff0008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65527 /* 0xffff0009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-65526 /* 0xffff000a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-49153 /* 0xffff3fff */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-40961 /* 0xffff5fff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 13}, /* shli r4, r3, 13 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-36865 /* 0xffff6fff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 12}, /* shli r4, r3, 12 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-34817 /* 0xffff77ff */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-32833 /* 0xffff7fbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-32801 /* 0xffff7fdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-32785 /* 0xffff7fef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-32778 /* 0xffff7ff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 15}, /* shli r4, r2, 15 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-32777 /* 0xffff7ff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-32776 /* 0xffff7ff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-32775 /* 0xffff7ff9 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-32774 /* 0xffff7ffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-32773 /* 0xffff7ffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-32772 /* 0xffff7ffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-32771 /* 0xffff7ffd */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-32770 /* 0xffff7ffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}, /* shli r3, r2, 15 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-32769 /* 0xffff7fff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32768 /* 0xffff8000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {-32767 /* 0xffff8001 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-32766 /* 0xffff8002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32765 /* 0xffff8003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32764 /* 0xffff8004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32763 /* 0xffff8005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32762 /* 0xffff8006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-32761 /* 0xffff8007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 12}, /* shli r4, r2, 12 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-32760 /* 0xffff8008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32759 /* 0xffff8009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32758 /* 0xffff800a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-24577 /* 0xffff9fff */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-20481 /* 0xffffafff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 12}, /* shli r4, r3, 12 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-19447 /* 0xffffb409 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 10}, /* shli r4, r3, 10 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-18433 /* 0xffffb7ff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 11}, /* shli r4, r3, 11 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-17409 /* 0xffffbbff */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-16449 /* 0xffffbfbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-16423 /* 0xffffbfd9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-16417 /* 0xffffbfdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-16401 /* 0xffffbfef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-16394 /* 0xffffbff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 14}, /* shli r4, r2, 14 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-16393 /* 0xffffbff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-16392 /* 0xffffbff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-16391 /* 0xffffbff9 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16390 /* 0xffffbffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-16389 /* 0xffffbffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-16388 /* 0xffffbffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-16387 /* 0xffffbffd */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-16386 /* 0xffffbffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}, /* shli r3, r2, 14 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-16385 /* 0xffffbfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16384 /* 0xffffc000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {-16383 /* 0xffffc001 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-16382 /* 0xffffc002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16381 /* 0xffffc003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16380 /* 0xffffc004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16379 /* 0xffffc005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16378 /* 0xffffc006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-16377 /* 0xffffc007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 11}, /* shli r4, r2, 11 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-16376 /* 0xffffc008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16375 /* 0xffffc009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16374 /* 0xffffc00a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-12289 /* 0xffffcfff */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-11248 /* 0xffffd410 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-10241 /* 0xffffd7ff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 11}, /* shli r4, r3, 11 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-9232 /* 0xffffdbf0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-9217 /* 0xffffdbff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 10}, /* shli r4, r3, 10 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-9198 /* 0xffffdc12 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-9191 /* 0xffffdc19 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-8705 /* 0xffffddff */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-8257 /* 0xffffdfbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-8225 /* 0xffffdfdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-8209 /* 0xffffdfef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-8208 /* 0xffffdff0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-8202 /* 0xffffdff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 13}, /* shli r4, r2, 13 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-8201 /* 0xffffdff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-8200 /* 0xffffdff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-8199 /* 0xffffdff9 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8198 /* 0xffffdffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-8197 /* 0xffffdffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-8196 /* 0xffffdffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-8195 /* 0xffffdffd */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-8194 /* 0xffffdffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}, /* shli r3, r2, 13 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-8193 /* 0xffffdfff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8192 /* 0xffffe000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {-8191 /* 0xffffe001 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-8190 /* 0xffffe002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8189 /* 0xffffe003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8188 /* 0xffffe004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8187 /* 0xffffe005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8186 /* 0xffffe006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-8185 /* 0xffffe007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-8184 /* 0xffffe008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8183 /* 0xffffe009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-8182 /* 0xffffe00a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-7678 /* 0xffffe202 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-6145 /* 0xffffe7ff */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-5121 /* 0xffffebff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 10}, /* shli r4, r3, 10 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-4609 /* 0xffffedff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 9}, /* shli r4, r3, 9 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-4353 /* 0xffffeeff */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-4161 /* 0xffffefbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4129 /* 0xffffefdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4113 /* 0xffffefef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-4106 /* 0xffffeff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 12}, /* shli r4, r2, 12 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-4105 /* 0xffffeff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4104 /* 0xffffeff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-4103 /* 0xffffeff9 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4102 /* 0xffffeffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-4101 /* 0xffffeffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-4100 /* 0xffffeffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-4099 /* 0xffffeffd */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-4098 /* 0xffffeffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}, /* shli r3, r2, 12 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-4097 /* 0xffffefff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4096 /* 0xfffff000 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {-4095 /* 0xfffff001 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-4094 /* 0xfffff002 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4093 /* 0xfffff003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4092 /* 0xfffff004 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4091 /* 0xfffff005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4090 /* 0xfffff006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-4089 /* 0xfffff007 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-4088 /* 0xfffff008 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4087 /* 0xfffff009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-4086 /* 0xfffff00a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-4078 /* 0xfffff012 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-3600 /* 0xfffff1f0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-3073 /* 0xfffff3ff */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-3072 /* 0xfffff400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2912 /* 0xfffff4a0 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2561 /* 0xfffff5ff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 9}, /* shli r4, r3, 9 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-2305 /* 0xfffff6ff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-2184 /* 0xfffff778 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-2177 /* 0xfffff77f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-2113 /* 0xfffff7bf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2081 /* 0xfffff7df */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2065 /* 0xfffff7ef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-2058 /* 0xfffff7f6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 11}, /* shli r4, r2, 11 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-2057 /* 0xfffff7f7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-2056 /* 0xfffff7f8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-2055 /* 0xfffff7f9 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2054 /* 0xfffff7fa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-2053 /* 0xfffff7fb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-2052 /* 0xfffff7fc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-2051 /* 0xfffff7fd */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-2050 /* 0xfffff7fe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}, /* shli r3, r2, 11 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-2049 /* 0xfffff7ff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2048 /* 0xfffff800 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {-2047 /* 0xfffff801 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2046 /* 0xfffff802 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2045 /* 0xfffff803 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2044 /* 0xfffff804 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2043 /* 0xfffff805 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2042 /* 0xfffff806 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-2041 /* 0xfffff807 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-2040 /* 0xfffff808 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2039 /* 0xfffff809 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-2038 /* 0xfffff80a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1537 /* 0xfffff9ff */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1512 /* 0xfffffa18 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1500 /* 0xfffffa24 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-1396 /* 0xfffffa8c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-1344 /* 0xfffffac0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1312 /* 0xfffffae0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-1281 /* 0xfffffaff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1153 /* 0xfffffb7f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1089 /* 0xfffffbbf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-1059 /* 0xfffffbdd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1057 /* 0xfffffbdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1041 /* 0xfffffbef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-1034 /* 0xfffffbf6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-1033 /* 0xfffffbf7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1032 /* 0xfffffbf8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-1031 /* 0xfffffbf9 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1030 /* 0xfffffbfa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1029 /* 0xfffffbfb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-1028 /* 0xfffffbfc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-1027 /* 0xfffffbfd */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-1026 /* 0xfffffbfe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-1025 /* 0xfffffbff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1024 /* 0xfffffc00 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {-1023 /* 0xfffffc01 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-1022 /* 0xfffffc02 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1021 /* 0xfffffc03 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1020 /* 0xfffffc04 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1019 /* 0xfffffc05 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1018 /* 0xfffffc06 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-1017 /* 0xfffffc07 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1016 /* 0xfffffc08 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1015 /* 0xfffffc09 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1014 /* 0xfffffc0a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1013 /* 0xfffffc0b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1012 /* 0xfffffc0c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-1011 /* 0xfffffc0d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-1010 /* 0xfffffc0e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1009 /* 0xfffffc0f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1008 /* 0xfffffc10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-1007 /* 0xfffffc11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-1006 /* 0xfffffc12 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-1005 /* 0xfffffc13 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 1}} /* s1a r5, r4, r1 */
- },
- {-1004 /* 0xfffffc14 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-1003 /* 0xfffffc15 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-1001 /* 0xfffffc17 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-1000 /* 0xfffffc18 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-999 /* 0xfffffc19 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-997 /* 0xfffffc1b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-996 /* 0xfffffc1c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 1, 3}, /* s2a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-994 /* 0xfffffc1e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-993 /* 0xfffffc1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-992 /* 0xfffffc20 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-991 /* 0xfffffc21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-990 /* 0xfffffc22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-988 /* 0xfffffc24 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-987 /* 0xfffffc25 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-984 /* 0xfffffc28 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-983 /* 0xfffffc29 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-979 /* 0xfffffc2d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-976 /* 0xfffffc30 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-975 /* 0xfffffc31 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {-969 /* 0xfffffc37 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-968 /* 0xfffffc38 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {5, 1, 3}, /* s3a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-967 /* 0xfffffc39 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-965 /* 0xfffffc3b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-964 /* 0xfffffc3c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {4, 1, 3}, /* s2a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-963 /* 0xfffffc3d */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 1}, /* s1a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-962 /* 0xfffffc3e */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-961 /* 0xfffffc3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-960 /* 0xfffffc40 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-959 /* 0xfffffc41 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-958 /* 0xfffffc42 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-957 /* 0xfffffc43 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-956 /* 0xfffffc44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-955 /* 0xfffffc45 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-953 /* 0xfffffc47 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-952 /* 0xfffffc48 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-951 /* 0xfffffc49 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-945 /* 0xfffffc4f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {-944 /* 0xfffffc50 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-943 /* 0xfffffc51 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-942 /* 0xfffffc52 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {-940 /* 0xfffffc54 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-936 /* 0xfffffc58 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-935 /* 0xfffffc59 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-929 /* 0xfffffc5f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-928 /* 0xfffffc60 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-925 /* 0xfffffc63 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-924 /* 0xfffffc64 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-920 /* 0xfffffc68 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-919 /* 0xfffffc69 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-916 /* 0xfffffc6c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-913 /* 0xfffffc6f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-912 /* 0xfffffc70 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-911 /* 0xfffffc71 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-910 /* 0xfffffc72 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-905 /* 0xfffffc77 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-904 /* 0xfffffc78 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-903 /* 0xfffffc79 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {-902 /* 0xfffffc7a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-901 /* 0xfffffc7b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-900 /* 0xfffffc7c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-899 /* 0xfffffc7d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-898 /* 0xfffffc7e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-897 /* 0xfffffc7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-896 /* 0xfffffc80 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-895 /* 0xfffffc81 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-894 /* 0xfffffc82 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-893 /* 0xfffffc83 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-892 /* 0xfffffc84 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-891 /* 0xfffffc85 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-890 /* 0xfffffc86 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-889 /* 0xfffffc87 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-888 /* 0xfffffc88 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {-887 /* 0xfffffc89 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-886 /* 0xfffffc8a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-884 /* 0xfffffc8c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* s2a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-881 /* 0xfffffc8f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-880 /* 0xfffffc90 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-879 /* 0xfffffc91 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 1}} /* s1a r5, r4, r1 */
- },
- {-873 /* 0xfffffc97 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-872 /* 0xfffffc98 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-868 /* 0xfffffc9c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-865 /* 0xfffffc9f */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-864 /* 0xfffffca0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-863 /* 0xfffffca1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-861 /* 0xfffffca3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-860 /* 0xfffffca4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-856 /* 0xfffffca8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-855 /* 0xfffffca9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-847 /* 0xfffffcb1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-837 /* 0xfffffcbb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-835 /* 0xfffffcbd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-834 /* 0xfffffcbe */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {-832 /* 0xfffffcc0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {-831 /* 0xfffffcc1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-829 /* 0xfffffcc3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-828 /* 0xfffffcc4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-827 /* 0xfffffcc5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-824 /* 0xfffffcc8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-823 /* 0xfffffcc9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-819 /* 0xfffffccd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-816 /* 0xfffffcd0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-815 /* 0xfffffcd1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-803 /* 0xfffffcdd */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-801 /* 0xfffffcdf */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-800 /* 0xfffffce0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-799 /* 0xfffffce1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-797 /* 0xfffffce3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-796 /* 0xfffffce4 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-795 /* 0xfffffce5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-793 /* 0xfffffce7 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-792 /* 0xfffffce8 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-791 /* 0xfffffce9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-789 /* 0xfffffceb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-788 /* 0xfffffcec */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-785 /* 0xfffffcef */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-784 /* 0xfffffcf0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-783 /* 0xfffffcf1 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-781 /* 0xfffffcf3 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-780 /* 0xfffffcf4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-779 /* 0xfffffcf5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-777 /* 0xfffffcf7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-776 /* 0xfffffcf8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-775 /* 0xfffffcf9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-774 /* 0xfffffcfa */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-773 /* 0xfffffcfb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-772 /* 0xfffffcfc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-771 /* 0xfffffcfd */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* s1a r5, r4, r4 */
- },
- {-770 /* 0xfffffcfe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-769 /* 0xfffffcff */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-768 /* 0xfffffd00 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-767 /* 0xfffffd01 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-766 /* 0xfffffd02 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-765 /* 0xfffffd03 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-764 /* 0xfffffd04 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {-763 /* 0xfffffd05 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-762 /* 0xfffffd06 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-761 /* 0xfffffd07 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-760 /* 0xfffffd08 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-759 /* 0xfffffd09 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-757 /* 0xfffffd0b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-756 /* 0xfffffd0c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-755 /* 0xfffffd0d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-753 /* 0xfffffd0f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-752 /* 0xfffffd10 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-751 /* 0xfffffd11 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-749 /* 0xfffffd13 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 1, 3}, /* s3a r4, r1, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-748 /* 0xfffffd14 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-744 /* 0xfffffd18 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-743 /* 0xfffffd19 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-741 /* 0xfffffd1b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-739 /* 0xfffffd1d */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-737 /* 0xfffffd1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-736 /* 0xfffffd20 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-735 /* 0xfffffd21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-732 /* 0xfffffd24 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-729 /* 0xfffffd27 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-728 /* 0xfffffd28 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-720 /* 0xfffffd30 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-719 /* 0xfffffd31 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-715 /* 0xfffffd35 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-712 /* 0xfffffd38 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-711 /* 0xfffffd39 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-708 /* 0xfffffd3c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-707 /* 0xfffffd3d */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-705 /* 0xfffffd3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-704 /* 0xfffffd40 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {-703 /* 0xfffffd41 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-701 /* 0xfffffd43 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-700 /* 0xfffffd44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-699 /* 0xfffffd45 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-695 /* 0xfffffd49 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-693 /* 0xfffffd4b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-692 /* 0xfffffd4c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-688 /* 0xfffffd50 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-680 /* 0xfffffd58 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-679 /* 0xfffffd59 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-675 /* 0xfffffd5d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-673 /* 0xfffffd5f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-672 /* 0xfffffd60 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-671 /* 0xfffffd61 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-667 /* 0xfffffd65 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-664 /* 0xfffffd68 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-660 /* 0xfffffd6c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-659 /* 0xfffffd6d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-657 /* 0xfffffd6f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-656 /* 0xfffffd70 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-655 /* 0xfffffd71 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-651 /* 0xfffffd75 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-650 /* 0xfffffd76 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-649 /* 0xfffffd77 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-648 /* 0xfffffd78 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-647 /* 0xfffffd79 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}, /* shli r4, r3, 3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-645 /* 0xfffffd7b */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-644 /* 0xfffffd7c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-643 /* 0xfffffd7d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-642 /* 0xfffffd7e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-641 /* 0xfffffd7f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-640 /* 0xfffffd80 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 7}} /* shli r4, r3, 7 */
- },
- {-639 /* 0xfffffd81 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-638 /* 0xfffffd82 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-637 /* 0xfffffd83 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-636 /* 0xfffffd84 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-635 /* 0xfffffd85 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-634 /* 0xfffffd86 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-633 /* 0xfffffd87 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-632 /* 0xfffffd88 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-631 /* 0xfffffd89 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-630 /* 0xfffffd8a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-629 /* 0xfffffd8b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-627 /* 0xfffffd8d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-625 /* 0xfffffd8f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-624 /* 0xfffffd90 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-620 /* 0xfffffd94 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-619 /* 0xfffffd95 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-616 /* 0xfffffd98 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-615 /* 0xfffffd99 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-613 /* 0xfffffd9b */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-612 /* 0xfffffd9c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-611 /* 0xfffffd9d */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-609 /* 0xfffffd9f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-608 /* 0xfffffda0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-607 /* 0xfffffda1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-604 /* 0xfffffda4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-603 /* 0xfffffda5 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-600 /* 0xfffffda8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-599 /* 0xfffffda9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-595 /* 0xfffffdad */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-594 /* 0xfffffdae */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-593 /* 0xfffffdaf */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-592 /* 0xfffffdb0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-591 /* 0xfffffdb1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-589 /* 0xfffffdb3 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-588 /* 0xfffffdb4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-585 /* 0xfffffdb7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-584 /* 0xfffffdb8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-583 /* 0xfffffdb9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-581 /* 0xfffffdbb */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-580 /* 0xfffffdbc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-579 /* 0xfffffdbd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-578 /* 0xfffffdbe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-577 /* 0xfffffdbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-576 /* 0xfffffdc0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {-575 /* 0xfffffdc1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-574 /* 0xfffffdc2 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-573 /* 0xfffffdc3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-572 /* 0xfffffdc4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-571 /* 0xfffffdc5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-569 /* 0xfffffdc7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-568 /* 0xfffffdc8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-567 /* 0xfffffdc9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-566 /* 0xfffffdca */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-565 /* 0xfffffdcb */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-564 /* 0xfffffdcc */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-563 /* 0xfffffdcd */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-561 /* 0xfffffdcf */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-560 /* 0xfffffdd0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-559 /* 0xfffffdd1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-558 /* 0xfffffdd2 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-557 /* 0xfffffdd3 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-556 /* 0xfffffdd4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-555 /* 0xfffffdd5 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-553 /* 0xfffffdd7 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-552 /* 0xfffffdd8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-551 /* 0xfffffdd9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-549 /* 0xfffffddb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-548 /* 0xfffffddc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-547 /* 0xfffffddd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-546 /* 0xfffffdde */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-545 /* 0xfffffddf */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-544 /* 0xfffffde0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-543 /* 0xfffffde1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-542 /* 0xfffffde2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-540 /* 0xfffffde4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-539 /* 0xfffffde5 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-536 /* 0xfffffde8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-535 /* 0xfffffde9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-533 /* 0xfffffdeb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-532 /* 0xfffffdec */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-531 /* 0xfffffded */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-530 /* 0xfffffdee */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-529 /* 0xfffffdef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-528 /* 0xfffffdf0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-527 /* 0xfffffdf1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-526 /* 0xfffffdf2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-525 /* 0xfffffdf3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-524 /* 0xfffffdf4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-523 /* 0xfffffdf5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-522 /* 0xfffffdf6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-521 /* 0xfffffdf7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-520 /* 0xfffffdf8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-519 /* 0xfffffdf9 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-518 /* 0xfffffdfa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-517 /* 0xfffffdfb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-516 /* 0xfffffdfc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-515 /* 0xfffffdfd */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-514 /* 0xfffffdfe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}, /* shli r3, r2, 9 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-513 /* 0xfffffdff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-512 /* 0xfffffe00 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {-511 /* 0xfffffe01 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-510 /* 0xfffffe02 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-509 /* 0xfffffe03 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-508 /* 0xfffffe04 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-507 /* 0xfffffe05 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-506 /* 0xfffffe06 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-505 /* 0xfffffe07 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-504 /* 0xfffffe08 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-503 /* 0xfffffe09 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-502 /* 0xfffffe0a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-501 /* 0xfffffe0b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-500 /* 0xfffffe0c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-499 /* 0xfffffe0d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-498 /* 0xfffffe0e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-497 /* 0xfffffe0f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-496 /* 0xfffffe10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-495 /* 0xfffffe11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-494 /* 0xfffffe12 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-493 /* 0xfffffe13 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 1}} /* s1a r5, r4, r1 */
- },
- {-492 /* 0xfffffe14 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-491 /* 0xfffffe15 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-489 /* 0xfffffe17 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-488 /* 0xfffffe18 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-487 /* 0xfffffe19 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-485 /* 0xfffffe1b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-484 /* 0xfffffe1c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 1, 3}, /* s2a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-483 /* 0xfffffe1d */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 1}, /* s1a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-482 /* 0xfffffe1e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-481 /* 0xfffffe1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-480 /* 0xfffffe20 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-479 /* 0xfffffe21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-478 /* 0xfffffe22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-477 /* 0xfffffe23 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-476 /* 0xfffffe24 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-475 /* 0xfffffe25 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-472 /* 0xfffffe28 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-471 /* 0xfffffe29 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-468 /* 0xfffffe2c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-467 /* 0xfffffe2d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-465 /* 0xfffffe2f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {-464 /* 0xfffffe30 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-463 /* 0xfffffe31 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-462 /* 0xfffffe32 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-460 /* 0xfffffe34 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-457 /* 0xfffffe37 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-456 /* 0xfffffe38 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-455 /* 0xfffffe39 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {-454 /* 0xfffffe3a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-453 /* 0xfffffe3b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-452 /* 0xfffffe3c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-451 /* 0xfffffe3d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-450 /* 0xfffffe3e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-449 /* 0xfffffe3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-448 /* 0xfffffe40 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-447 /* 0xfffffe41 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-446 /* 0xfffffe42 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-445 /* 0xfffffe43 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-444 /* 0xfffffe44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-443 /* 0xfffffe45 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-442 /* 0xfffffe46 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-441 /* 0xfffffe47 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-440 /* 0xfffffe48 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {-439 /* 0xfffffe49 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-438 /* 0xfffffe4a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-436 /* 0xfffffe4c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* s2a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-433 /* 0xfffffe4f */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-432 /* 0xfffffe50 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-431 /* 0xfffffe51 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-429 /* 0xfffffe53 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-428 /* 0xfffffe54 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-424 /* 0xfffffe58 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-423 /* 0xfffffe59 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-419 /* 0xfffffe5d */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-418 /* 0xfffffe5e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {-417 /* 0xfffffe5f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-416 /* 0xfffffe60 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-415 /* 0xfffffe61 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-413 /* 0xfffffe63 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-412 /* 0xfffffe64 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-411 /* 0xfffffe65 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-409 /* 0xfffffe67 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-408 /* 0xfffffe68 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-407 /* 0xfffffe69 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-405 /* 0xfffffe6b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-404 /* 0xfffffe6c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-403 /* 0xfffffe6d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-401 /* 0xfffffe6f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-400 /* 0xfffffe70 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-399 /* 0xfffffe71 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-397 /* 0xfffffe73 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-396 /* 0xfffffe74 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-395 /* 0xfffffe75 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-393 /* 0xfffffe77 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-392 /* 0xfffffe78 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-391 /* 0xfffffe79 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-390 /* 0xfffffe7a */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-389 /* 0xfffffe7b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-388 /* 0xfffffe7c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-387 /* 0xfffffe7d */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* s1a r5, r4, r4 */
- },
- {-386 /* 0xfffffe7e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-385 /* 0xfffffe7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-384 /* 0xfffffe80 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-383 /* 0xfffffe81 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-382 /* 0xfffffe82 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-381 /* 0xfffffe83 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-380 /* 0xfffffe84 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {-379 /* 0xfffffe85 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-378 /* 0xfffffe86 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-377 /* 0xfffffe87 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-376 /* 0xfffffe88 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-375 /* 0xfffffe89 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-373 /* 0xfffffe8b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-372 /* 0xfffffe8c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-371 /* 0xfffffe8d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-369 /* 0xfffffe8f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-368 /* 0xfffffe90 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-367 /* 0xfffffe91 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-365 /* 0xfffffe93 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 1, 3}, /* s3a r4, r1, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-364 /* 0xfffffe94 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-361 /* 0xfffffe97 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-360 /* 0xfffffe98 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-359 /* 0xfffffe99 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-357 /* 0xfffffe9b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-356 /* 0xfffffe9c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-355 /* 0xfffffe9d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}, /* shli r4, r3, 3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-353 /* 0xfffffe9f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-352 /* 0xfffffea0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {-351 /* 0xfffffea1 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-349 /* 0xfffffea3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-348 /* 0xfffffea4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-347 /* 0xfffffea5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-344 /* 0xfffffea8 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-343 /* 0xfffffea9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-341 /* 0xfffffeab */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-340 /* 0xfffffeac */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-339 /* 0xfffffead */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-337 /* 0xfffffeaf */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-336 /* 0xfffffeb0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-335 /* 0xfffffeb1 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-333 /* 0xfffffeb3 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-332 /* 0xfffffeb4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-331 /* 0xfffffeb5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-330 /* 0xfffffeb6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-329 /* 0xfffffeb7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-328 /* 0xfffffeb8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-327 /* 0xfffffeb9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-325 /* 0xfffffebb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-324 /* 0xfffffebc */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-323 /* 0xfffffebd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-322 /* 0xfffffebe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-321 /* 0xfffffebf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-320 /* 0xfffffec0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {-319 /* 0xfffffec1 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-318 /* 0xfffffec2 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-317 /* 0xfffffec3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-316 /* 0xfffffec4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-315 /* 0xfffffec5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-314 /* 0xfffffec6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-313 /* 0xfffffec7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-312 /* 0xfffffec8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-311 /* 0xfffffec9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-310 /* 0xfffffeca */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-309 /* 0xfffffecb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-307 /* 0xfffffecd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-306 /* 0xfffffece */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-305 /* 0xfffffecf */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-304 /* 0xfffffed0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-303 /* 0xfffffed1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-301 /* 0xfffffed3 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-300 /* 0xfffffed4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-299 /* 0xfffffed5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-297 /* 0xfffffed7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-296 /* 0xfffffed8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-295 /* 0xfffffed9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-293 /* 0xfffffedb */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-292 /* 0xfffffedc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-291 /* 0xfffffedd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-290 /* 0xfffffede */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {-289 /* 0xfffffedf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-288 /* 0xfffffee0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {-287 /* 0xfffffee1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-286 /* 0xfffffee2 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-285 /* 0xfffffee3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-284 /* 0xfffffee4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-283 /* 0xfffffee5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-281 /* 0xfffffee7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-280 /* 0xfffffee8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-279 /* 0xfffffee9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-278 /* 0xfffffeea */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-277 /* 0xfffffeeb */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-276 /* 0xfffffeec */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-275 /* 0xfffffeed */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-274 /* 0xfffffeee */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-273 /* 0xfffffeef */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-272 /* 0xfffffef0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-271 /* 0xfffffef1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-270 /* 0xfffffef2 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-269 /* 0xfffffef3 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-268 /* 0xfffffef4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-267 /* 0xfffffef5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-266 /* 0xfffffef6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-265 /* 0xfffffef7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-264 /* 0xfffffef8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-263 /* 0xfffffef9 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-262 /* 0xfffffefa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-261 /* 0xfffffefb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-260 /* 0xfffffefc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-259 /* 0xfffffefd */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-258 /* 0xfffffefe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-257 /* 0xfffffeff */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-256 /* 0xffffff00 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {-255 /* 0xffffff01 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-254 /* 0xffffff02 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-253 /* 0xffffff03 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-252 /* 0xffffff04 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-251 /* 0xffffff05 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-250 /* 0xffffff06 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-249 /* 0xffffff07 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-248 /* 0xffffff08 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-247 /* 0xffffff09 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-246 /* 0xffffff0a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-245 /* 0xffffff0b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-244 /* 0xffffff0c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-243 /* 0xffffff0d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-242 /* 0xffffff0e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-241 /* 0xffffff0f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-240 /* 0xffffff10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-239 /* 0xffffff11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-238 /* 0xffffff12 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-237 /* 0xffffff13 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 1}} /* s1a r5, r4, r1 */
- },
- {-236 /* 0xffffff14 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-235 /* 0xffffff15 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-234 /* 0xffffff16 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-233 /* 0xffffff17 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-232 /* 0xffffff18 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {-231 /* 0xffffff19 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {-230 /* 0xffffff1a */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-229 /* 0xffffff1b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-228 /* 0xffffff1c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-227 /* 0xffffff1d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-226 /* 0xffffff1e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-225 /* 0xffffff1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-224 /* 0xffffff20 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-223 /* 0xffffff21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-222 /* 0xffffff22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-221 /* 0xffffff23 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-220 /* 0xffffff24 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-219 /* 0xffffff25 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-218 /* 0xffffff26 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-217 /* 0xffffff27 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-216 /* 0xffffff28 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {-215 /* 0xffffff29 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-214 /* 0xffffff2a */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-213 /* 0xffffff2b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}, /* shli r4, r3, 3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-212 /* 0xffffff2c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* s2a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-211 /* 0xffffff2d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-210 /* 0xffffff2e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {-209 /* 0xffffff2f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-208 /* 0xffffff30 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-207 /* 0xffffff31 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-205 /* 0xffffff33 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-204 /* 0xffffff34 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-203 /* 0xffffff35 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-202 /* 0xffffff36 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-201 /* 0xffffff37 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-200 /* 0xffffff38 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-199 /* 0xffffff39 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-198 /* 0xffffff3a */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-197 /* 0xffffff3b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-196 /* 0xffffff3c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-195 /* 0xffffff3d */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* s1a r5, r4, r4 */
- },
- {-194 /* 0xffffff3e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-193 /* 0xffffff3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-192 /* 0xffffff40 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-191 /* 0xffffff41 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-190 /* 0xffffff42 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-189 /* 0xffffff43 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-188 /* 0xffffff44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {-187 /* 0xffffff45 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-186 /* 0xffffff46 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-185 /* 0xffffff47 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-184 /* 0xffffff48 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-183 /* 0xffffff49 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-181 /* 0xffffff4b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-180 /* 0xffffff4c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-179 /* 0xffffff4d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-178 /* 0xffffff4e */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-177 /* 0xffffff4f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-176 /* 0xffffff50 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {-175 /* 0xffffff51 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-173 /* 0xffffff53 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-172 /* 0xffffff54 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-171 /* 0xffffff55 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-170 /* 0xffffff56 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-169 /* 0xffffff57 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-168 /* 0xffffff58 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-167 /* 0xffffff59 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-165 /* 0xffffff5b */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-164 /* 0xffffff5c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-163 /* 0xffffff5d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-162 /* 0xffffff5e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-161 /* 0xffffff5f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-160 /* 0xffffff60 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {-159 /* 0xffffff61 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-158 /* 0xffffff62 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-157 /* 0xffffff63 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-156 /* 0xffffff64 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-155 /* 0xffffff65 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-154 /* 0xffffff66 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-153 /* 0xffffff67 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {-152 /* 0xffffff68 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-151 /* 0xffffff69 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-150 /* 0xffffff6a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-149 /* 0xffffff6b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-148 /* 0xffffff6c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {-147 /* 0xffffff6d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-146 /* 0xffffff6e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-145 /* 0xffffff6f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-144 /* 0xffffff70 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {-143 /* 0xffffff71 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-142 /* 0xffffff72 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-141 /* 0xffffff73 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-140 /* 0xffffff74 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-139 /* 0xffffff75 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-138 /* 0xffffff76 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-137 /* 0xffffff77 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-136 /* 0xffffff78 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {-135 /* 0xffffff79 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-134 /* 0xffffff7a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-133 /* 0xffffff7b */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-132 /* 0xffffff7c */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-131 /* 0xffffff7d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-130 /* 0xffffff7e */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-129 /* 0xffffff7f */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-128 /* 0xffffff80 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {-127 /* 0xffffff81 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-126 /* 0xffffff82 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-125 /* 0xffffff83 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-124 /* 0xffffff84 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-123 /* 0xffffff85 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-122 /* 0xffffff86 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-121 /* 0xffffff87 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-120 /* 0xffffff88 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-119 /* 0xffffff89 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-118 /* 0xffffff8a */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-117 /* 0xffffff8b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-116 /* 0xffffff8c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-115 /* 0xffffff8d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-114 /* 0xffffff8e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-113 /* 0xffffff8f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-112 /* 0xffffff90 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-111 /* 0xffffff91 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-110 /* 0xffffff92 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-109 /* 0xffffff93 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-108 /* 0xffffff94 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-107 /* 0xffffff95 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {-106 /* 0xffffff96 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {-105 /* 0xffffff97 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-104 /* 0xffffff98 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {-103 /* 0xffffff99 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {-102 /* 0xffffff9a */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {-101 /* 0xffffff9b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-100 /* 0xffffff9c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-99 /* 0xffffff9d */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* s1a r5, r4, r4 */
- },
- {-98 /* 0xffffff9e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-97 /* 0xffffff9f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-96 /* 0xffffffa0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-95 /* 0xffffffa1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-94 /* 0xffffffa2 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-93 /* 0xffffffa3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-92 /* 0xffffffa4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {-91 /* 0xffffffa5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-90 /* 0xffffffa6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-89 /* 0xffffffa7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-88 /* 0xffffffa8 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-87 /* 0xffffffa9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-86 /* 0xffffffaa */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {2, 1, 4}} /* sub r5, r1, r4 */
- },
- {-85 /* 0xffffffab */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {-84 /* 0xffffffac */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-83 /* 0xffffffad */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-82 /* 0xffffffae */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {-81 /* 0xffffffaf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {-80 /* 0xffffffb0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {-79 /* 0xffffffb1 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-78 /* 0xffffffb2 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-77 /* 0xffffffb3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 2, 4}} /* sub r5, r2, r4 */
- },
- {-76 /* 0xffffffb4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-75 /* 0xffffffb5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-74 /* 0xffffffb6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-73 /* 0xffffffb7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {-72 /* 0xffffffb8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {-71 /* 0xffffffb9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-70 /* 0xffffffba */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-69 /* 0xffffffbb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {-68 /* 0xffffffbc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {-67 /* 0xffffffbd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-66 /* 0xffffffbe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-65 /* 0xffffffbf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-64 /* 0xffffffc0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {-63 /* 0xffffffc1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-62 /* 0xffffffc2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-61 /* 0xffffffc3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-60 /* 0xffffffc4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-59 /* 0xffffffc5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-58 /* 0xffffffc6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {-57 /* 0xffffffc7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-56 /* 0xffffffc8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-55 /* 0xffffffc9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-54 /* 0xffffffca */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-53 /* 0xffffffcb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {-52 /* 0xffffffcc */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {-51 /* 0xffffffcd */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {3, 4, 4}} /* s1a r5, r4, r4 */
- },
- {-50 /* 0xffffffce */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-49 /* 0xffffffcf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-48 /* 0xffffffd0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-47 /* 0xffffffd1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-46 /* 0xffffffd2 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-45 /* 0xffffffd3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-44 /* 0xffffffd4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {-43 /* 0xffffffd5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {-42 /* 0xffffffd6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-41 /* 0xffffffd7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {-40 /* 0xffffffd8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {-39 /* 0xffffffd9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-38 /* 0xffffffda */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {-37 /* 0xffffffdb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {-36 /* 0xffffffdc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {-35 /* 0xffffffdd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-34 /* 0xffffffde */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {-33 /* 0xffffffdf */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-32 /* 0xffffffe0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {-31 /* 0xffffffe1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-30 /* 0xffffffe2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-29 /* 0xffffffe3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-28 /* 0xffffffe4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-27 /* 0xffffffe5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-26 /* 0xffffffe6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-25 /* 0xffffffe7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-24 /* 0xffffffe8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-23 /* 0xffffffe9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-22 /* 0xffffffea */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-21 /* 0xffffffeb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-20 /* 0xffffffec */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {-19 /* 0xffffffed */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {2, 1, 3}} /* sub r4, r1, r3 */
- },
- {-18 /* 0xffffffee */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {-17 /* 0xffffffef */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-16 /* 0xfffffff0 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {-15 /* 0xfffffff1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-14 /* 0xfffffff2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-13 /* 0xfffffff3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-12 /* 0xfffffff4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-11 /* 0xfffffff5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-10 /* 0xfffffff6 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-9 /* 0xfffffff7 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 2, 2}} /* s3a r3, r2, r2 */
- },
- {-8 /* 0xfffffff8 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {-7 /* 0xfffffff9 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-6 /* 0xfffffffa */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 3}, /* shli r3, r1, 3 */
- {2, 2, 3}} /* sub r4, r2, r3 */
- },
- {-5 /* 0xfffffffb */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 2, 2}} /* s2a r3, r2, r2 */
- },
- {-4 /* 0xfffffffc */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {-3 /* 0xfffffffd */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}} /* sub r3, r1, r2 */
- },
- {-2 /* 0xfffffffe */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {-1 /* 0xffffffff */ ,
- {{2, 0, 1}} /* sub r2, zero, r1 */
- },
- {2 /* 0x2 */ ,
- {{6, 1, 1}} /* shli r2, r1, 1 */
- },
- {3 /* 0x3 */ ,
- {{3, 1, 1}} /* s1a r2, r1, r1 */
- },
- {4 /* 0x4 */ ,
- {{6, 1, 2}} /* shli r2, r1, 2 */
- },
- {5 /* 0x5 */ ,
- {{4, 1, 1}} /* s2a r2, r1, r1 */
- },
- {6 /* 0x6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {7 /* 0x7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8 /* 0x8 */ ,
- {{6, 1, 3}} /* shli r2, r1, 3 */
- },
- {9 /* 0x9 */ ,
- {{5, 1, 1}} /* s3a r2, r1, r1 */
- },
- {10 /* 0xa */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {11 /* 0xb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}} /* s1a r3, r2, r1 */
- },
- {12 /* 0xc */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {13 /* 0xd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}} /* s2a r3, r2, r1 */
- },
- {14 /* 0xe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {15 /* 0xf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {16 /* 0x10 */ ,
- {{6, 1, 4}} /* shli r2, r1, 4 */
- },
- {17 /* 0x11 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {18 /* 0x12 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}} /* shli r3, r2, 1 */
- },
- {19 /* 0x13 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}} /* s1a r3, r2, r1 */
- },
- {20 /* 0x14 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {21 /* 0x15 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}} /* s2a r3, r2, r1 */
- },
- {22 /* 0x16 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {23 /* 0x17 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {24 /* 0x18 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {25 /* 0x19 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}} /* s3a r3, r2, r1 */
- },
- {26 /* 0x1a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {27 /* 0x1b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}} /* s3a r3, r2, r2 */
- },
- {28 /* 0x1c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {29 /* 0x1d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {30 /* 0x1e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {31 /* 0x1f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {32 /* 0x20 */ ,
- {{6, 1, 5}} /* shli r2, r1, 5 */
- },
- {33 /* 0x21 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {34 /* 0x22 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {35 /* 0x23 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36 /* 0x24 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 2}} /* shli r3, r2, 2 */
- },
- {37 /* 0x25 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}} /* s2a r3, r2, r1 */
- },
- {38 /* 0x26 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {39 /* 0x27 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {40 /* 0x28 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {41 /* 0x29 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}} /* s3a r3, r2, r1 */
- },
- {42 /* 0x2a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {43 /* 0x2b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {44 /* 0x2c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {45 /* 0x2d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}} /* s3a r3, r2, r2 */
- },
- {46 /* 0x2e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {47 /* 0x2f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {48 /* 0x30 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {49 /* 0x31 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {50 /* 0x32 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {51 /* 0x33 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {52 /* 0x34 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {53 /* 0x35 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {54 /* 0x36 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {55 /* 0x37 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {56 /* 0x38 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {57 /* 0x39 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {58 /* 0x3a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {59 /* 0x3b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {60 /* 0x3c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {61 /* 0x3d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {62 /* 0x3e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {63 /* 0x3f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {64 /* 0x40 */ ,
- {{6, 1, 6}} /* shli r2, r1, 6 */
- },
- {65 /* 0x41 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {66 /* 0x42 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {67 /* 0x43 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68 /* 0x44 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {69 /* 0x45 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {70 /* 0x46 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {71 /* 0x47 */ ,
- {{2, 0, 1}, /* sub r2, zero, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {72 /* 0x48 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 3}} /* shli r3, r2, 3 */
- },
- {73 /* 0x49 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}} /* s3a r3, r2, r1 */
- },
- {74 /* 0x4a */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {75 /* 0x4b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {76 /* 0x4c */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {77 /* 0x4d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {78 /* 0x4e */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {79 /* 0x4f */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {80 /* 0x50 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {81 /* 0x51 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}} /* s3a r3, r2, r2 */
- },
- {82 /* 0x52 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {83 /* 0x53 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 1}} /* s1a r4, r3, r1 */
- },
- {84 /* 0x54 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {85 /* 0x55 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {86 /* 0x56 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {87 /* 0x57 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {88 /* 0x58 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {89 /* 0x59 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {90 /* 0x5a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {91 /* 0x5b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {3, 3, 1}} /* s1a r4, r3, r1 */
- },
- {92 /* 0x5c */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {93 /* 0x5d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {94 /* 0x5e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {95 /* 0x5f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {96 /* 0x60 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {97 /* 0x61 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {98 /* 0x62 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {99 /* 0x63 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {100 /* 0x64 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {101 /* 0x65 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 1}} /* s2a r4, r3, r1 */
- },
- {102 /* 0x66 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {103 /* 0x67 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {104 /* 0x68 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {105 /* 0x69 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {106 /* 0x6a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {107 /* 0x6b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {108 /* 0x6c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {109 /* 0x6d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 1}} /* s2a r4, r3, r1 */
- },
- {110 /* 0x6e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {111 /* 0x6f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {112 /* 0x70 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {113 /* 0x71 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {114 /* 0x72 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {115 /* 0x73 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {116 /* 0x74 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {117 /* 0x75 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {118 /* 0x76 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {119 /* 0x77 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {120 /* 0x78 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {121 /* 0x79 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {122 /* 0x7a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {123 /* 0x7b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {124 /* 0x7c */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {125 /* 0x7d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {126 /* 0x7e */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {127 /* 0x7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {128 /* 0x80 */ ,
- {{6, 1, 7}} /* shli r2, r1, 7 */
- },
- {129 /* 0x81 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {130 /* 0x82 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {131 /* 0x83 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {132 /* 0x84 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {133 /* 0x85 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134 /* 0x86 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {135 /* 0x87 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {136 /* 0x88 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {137 /* 0x89 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {138 /* 0x8a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {139 /* 0x8b */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {140 /* 0x8c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {141 /* 0x8d */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {142 /* 0x8e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {143 /* 0x8f */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {144 /* 0x90 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}} /* shli r3, r2, 4 */
- },
- {145 /* 0x91 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {146 /* 0x92 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {147 /* 0x93 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 1}} /* s1a r4, r3, r1 */
- },
- {148 /* 0x94 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {149 /* 0x95 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 1}} /* s2a r4, r3, r1 */
- },
- {150 /* 0x96 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {151 /* 0x97 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {152 /* 0x98 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {153 /* 0x99 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {154 /* 0x9a */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {155 /* 0x9b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {156 /* 0x9c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {157 /* 0x9d */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {158 /* 0x9e */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {159 /* 0x9f */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {160 /* 0xa0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {161 /* 0xa1 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {162 /* 0xa2 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 1}} /* shli r4, r3, 1 */
- },
- {163 /* 0xa3 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {3, 3, 1}} /* s1a r4, r3, r1 */
- },
- {164 /* 0xa4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {165 /* 0xa5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {166 /* 0xa6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {167 /* 0xa7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {168 /* 0xa8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {169 /* 0xa9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {170 /* 0xaa */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {171 /* 0xab */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {172 /* 0xac */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {173 /* 0xad */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {174 /* 0xae */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {175 /* 0xaf */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {176 /* 0xb0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {177 /* 0xb1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {178 /* 0xb2 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {179 /* 0xb3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {180 /* 0xb4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 2}} /* shli r4, r3, 2 */
- },
- {181 /* 0xb5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 1}} /* s2a r4, r3, r1 */
- },
- {182 /* 0xb6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {183 /* 0xb7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {184 /* 0xb8 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {185 /* 0xb9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {186 /* 0xba */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {187 /* 0xbb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {188 /* 0xbc */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {189 /* 0xbd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {190 /* 0xbe */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {191 /* 0xbf */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {192 /* 0xc0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {193 /* 0xc1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {194 /* 0xc2 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {195 /* 0xc3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {196 /* 0xc4 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {197 /* 0xc5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {198 /* 0xc6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {199 /* 0xc7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {200 /* 0xc8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {201 /* 0xc9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {202 /* 0xca */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {203 /* 0xcb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {204 /* 0xcc */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {205 /* 0xcd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {206 /* 0xce */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {207 /* 0xcf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {208 /* 0xd0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {209 /* 0xd1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {210 /* 0xd2 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {211 /* 0xd3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {212 /* 0xd4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {213 /* 0xd5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {214 /* 0xd6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {215 /* 0xd7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {216 /* 0xd8 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {217 /* 0xd9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {218 /* 0xda */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {219 /* 0xdb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {220 /* 0xdc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {221 /* 0xdd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {222 /* 0xde */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {223 /* 0xdf */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {224 /* 0xe0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {225 /* 0xe1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {226 /* 0xe2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {227 /* 0xe3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {228 /* 0xe4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {229 /* 0xe5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {230 /* 0xe6 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {231 /* 0xe7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 8}, /* shli r4, r1, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {232 /* 0xe8 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {233 /* 0xe9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {234 /* 0xea */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {235 /* 0xeb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {236 /* 0xec */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {237 /* 0xed */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {238 /* 0xee */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {239 /* 0xef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {240 /* 0xf0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {241 /* 0xf1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {242 /* 0xf2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {243 /* 0xf3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {244 /* 0xf4 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {245 /* 0xf5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {246 /* 0xf6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {247 /* 0xf7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {248 /* 0xf8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {249 /* 0xf9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {250 /* 0xfa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {251 /* 0xfb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {252 /* 0xfc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {253 /* 0xfd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {254 /* 0xfe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {255 /* 0xff */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {256 /* 0x100 */ ,
- {{6, 1, 8}} /* shli r2, r1, 8 */
- },
- {257 /* 0x101 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {258 /* 0x102 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {259 /* 0x103 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {260 /* 0x104 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {261 /* 0x105 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262 /* 0x106 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {263 /* 0x107 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {264 /* 0x108 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {265 /* 0x109 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {266 /* 0x10a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {267 /* 0x10b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {268 /* 0x10c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {269 /* 0x10d */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {270 /* 0x10e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {271 /* 0x10f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {272 /* 0x110 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {273 /* 0x111 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {274 /* 0x112 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {275 /* 0x113 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {276 /* 0x114 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {277 /* 0x115 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {278 /* 0x116 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {279 /* 0x117 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {280 /* 0x118 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {281 /* 0x119 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {282 /* 0x11a */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {283 /* 0x11b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {284 /* 0x11c */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {285 /* 0x11d */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {286 /* 0x11e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {287 /* 0x11f */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {288 /* 0x120 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}} /* shli r3, r2, 5 */
- },
- {289 /* 0x121 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {290 /* 0x122 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {291 /* 0x123 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {292 /* 0x124 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {293 /* 0x125 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 1}} /* s2a r4, r3, r1 */
- },
- {294 /* 0x126 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {295 /* 0x127 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {296 /* 0x128 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {297 /* 0x129 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {298 /* 0x12a */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {299 /* 0x12b */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {300 /* 0x12c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {301 /* 0x12d */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {302 /* 0x12e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {303 /* 0x12f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {304 /* 0x130 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {305 /* 0x131 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {306 /* 0x132 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {307 /* 0x133 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {308 /* 0x134 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {309 /* 0x135 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {310 /* 0x136 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {311 /* 0x137 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {312 /* 0x138 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {313 /* 0x139 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {314 /* 0x13a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {315 /* 0x13b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {316 /* 0x13c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {317 /* 0x13d */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {318 /* 0x13e */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {319 /* 0x13f */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {320 /* 0x140 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {321 /* 0x141 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {322 /* 0x142 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {323 /* 0x143 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {324 /* 0x144 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {325 /* 0x145 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {326 /* 0x146 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {327 /* 0x147 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {328 /* 0x148 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {329 /* 0x149 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {330 /* 0x14a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {331 /* 0x14b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {332 /* 0x14c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {333 /* 0x14d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {334 /* 0x14e */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {335 /* 0x14f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {336 /* 0x150 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {337 /* 0x151 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {338 /* 0x152 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {339 /* 0x153 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {340 /* 0x154 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {341 /* 0x155 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {342 /* 0x156 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {343 /* 0x157 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {344 /* 0x158 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {345 /* 0x159 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {346 /* 0x15a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {347 /* 0x15b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {348 /* 0x15c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 2}, /* shli r4, r2, 2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {349 /* 0x15d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {350 /* 0x15e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {351 /* 0x15f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {352 /* 0x160 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {353 /* 0x161 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {354 /* 0x162 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {355 /* 0x163 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {356 /* 0x164 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {357 /* 0x165 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {358 /* 0x166 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {359 /* 0x167 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {360 /* 0x168 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {361 /* 0x169 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {362 /* 0x16a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 1}, /* shli r4, r1, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {363 /* 0x16b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {364 /* 0x16c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 2}, /* shli r4, r1, 2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {365 /* 0x16d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {366 /* 0x16e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {367 /* 0x16f */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {368 /* 0x170 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {369 /* 0x171 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {370 /* 0x172 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {371 /* 0x173 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {372 /* 0x174 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {373 /* 0x175 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {374 /* 0x176 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {375 /* 0x177 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {376 /* 0x178 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {377 /* 0x179 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {378 /* 0x17a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {379 /* 0x17b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {380 /* 0x17c */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {381 /* 0x17d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {382 /* 0x17e */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {383 /* 0x17f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {384 /* 0x180 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {385 /* 0x181 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {386 /* 0x182 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {387 /* 0x183 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {388 /* 0x184 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {389 /* 0x185 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {390 /* 0x186 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {391 /* 0x187 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {392 /* 0x188 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {393 /* 0x189 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {394 /* 0x18a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {395 /* 0x18b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {396 /* 0x18c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {397 /* 0x18d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {398 /* 0x18e */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {399 /* 0x18f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {400 /* 0x190 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {401 /* 0x191 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {402 /* 0x192 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {403 /* 0x193 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {404 /* 0x194 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {4, 1, 2}, /* s2a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {405 /* 0x195 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {406 /* 0x196 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {407 /* 0x197 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {408 /* 0x198 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {409 /* 0x199 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {410 /* 0x19a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {411 /* 0x19b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {412 /* 0x19c */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {413 /* 0x19d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {414 /* 0x19e */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {415 /* 0x19f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {416 /* 0x1a0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {417 /* 0x1a1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {418 /* 0x1a2 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {419 /* 0x1a3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {420 /* 0x1a4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {421 /* 0x1a5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {422 /* 0x1a6 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {423 /* 0x1a7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {424 /* 0x1a8 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {425 /* 0x1a9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {426 /* 0x1aa */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {427 /* 0x1ab */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {428 /* 0x1ac */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {429 /* 0x1ad */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {430 /* 0x1ae */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {431 /* 0x1af */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {432 /* 0x1b0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {433 /* 0x1b1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {434 /* 0x1b2 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {435 /* 0x1b3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {436 /* 0x1b4 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {437 /* 0x1b5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {438 /* 0x1b6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {439 /* 0x1b7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {440 /* 0x1b8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {441 /* 0x1b9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {442 /* 0x1ba */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {443 /* 0x1bb */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {444 /* 0x1bc */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {445 /* 0x1bd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {446 /* 0x1be */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {447 /* 0x1bf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {448 /* 0x1c0 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {449 /* 0x1c1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {450 /* 0x1c2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {451 /* 0x1c3 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {452 /* 0x1c4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {453 /* 0x1c5 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {454 /* 0x1c6 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {455 /* 0x1c7 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {456 /* 0x1c8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {457 /* 0x1c9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {458 /* 0x1ca */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {459 /* 0x1cb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {460 /* 0x1cc */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {461 /* 0x1cd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {462 /* 0x1ce */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {463 /* 0x1cf */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {464 /* 0x1d0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {465 /* 0x1d1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {467 /* 0x1d3 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {468 /* 0x1d4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {469 /* 0x1d5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {470 /* 0x1d6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {471 /* 0x1d7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {472 /* 0x1d8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {473 /* 0x1d9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {475 /* 0x1db */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {476 /* 0x1dc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {477 /* 0x1dd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {478 /* 0x1de */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {479 /* 0x1df */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {480 /* 0x1e0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {481 /* 0x1e1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {482 /* 0x1e2 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {483 /* 0x1e3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {484 /* 0x1e4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {485 /* 0x1e5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {486 /* 0x1e6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {487 /* 0x1e7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {488 /* 0x1e8 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {489 /* 0x1e9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {490 /* 0x1ea */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {491 /* 0x1eb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {492 /* 0x1ec */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {493 /* 0x1ed */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {494 /* 0x1ee */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {495 /* 0x1ef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {496 /* 0x1f0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {497 /* 0x1f1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {498 /* 0x1f2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {499 /* 0x1f3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 1, 9}, /* shli r4, r1, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {500 /* 0x1f4 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {501 /* 0x1f5 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {502 /* 0x1f6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {503 /* 0x1f7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {504 /* 0x1f8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {505 /* 0x1f9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {506 /* 0x1fa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {507 /* 0x1fb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {508 /* 0x1fc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {509 /* 0x1fd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {510 /* 0x1fe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {511 /* 0x1ff */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {512 /* 0x200 */ ,
- {{6, 1, 9}} /* shli r2, r1, 9 */
- },
- {513 /* 0x201 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {514 /* 0x202 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {515 /* 0x203 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {516 /* 0x204 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {517 /* 0x205 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {518 /* 0x206 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {519 /* 0x207 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {520 /* 0x208 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {521 /* 0x209 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {522 /* 0x20a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {523 /* 0x20b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {524 /* 0x20c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {525 /* 0x20d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {526 /* 0x20e */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {527 /* 0x20f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {528 /* 0x210 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {529 /* 0x211 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {530 /* 0x212 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {531 /* 0x213 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {532 /* 0x214 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {533 /* 0x215 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {534 /* 0x216 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {535 /* 0x217 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {536 /* 0x218 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {537 /* 0x219 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {538 /* 0x21a */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {539 /* 0x21b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {540 /* 0x21c */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {541 /* 0x21d */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {542 /* 0x21e */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {543 /* 0x21f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {544 /* 0x220 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {545 /* 0x221 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {546 /* 0x222 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {547 /* 0x223 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {548 /* 0x224 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {549 /* 0x225 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {550 /* 0x226 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {551 /* 0x227 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {552 /* 0x228 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {553 /* 0x229 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {554 /* 0x22a */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {555 /* 0x22b */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {556 /* 0x22c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {557 /* 0x22d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {558 /* 0x22e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {559 /* 0x22f */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {560 /* 0x230 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {561 /* 0x231 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {562 /* 0x232 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {563 /* 0x233 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {564 /* 0x234 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {565 /* 0x235 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {566 /* 0x236 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {567 /* 0x237 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {568 /* 0x238 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {569 /* 0x239 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {570 /* 0x23a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {571 /* 0x23b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {572 /* 0x23c */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {573 /* 0x23d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {574 /* 0x23e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {575 /* 0x23f */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {576 /* 0x240 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}} /* shli r3, r2, 6 */
- },
- {577 /* 0x241 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {578 /* 0x242 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {579 /* 0x243 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {580 /* 0x244 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {581 /* 0x245 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {582 /* 0x246 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {583 /* 0x247 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {584 /* 0x248 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {585 /* 0x249 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {586 /* 0x24a */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {587 /* 0x24b */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {588 /* 0x24c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {589 /* 0x24d */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {590 /* 0x24e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {591 /* 0x24f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {592 /* 0x250 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {593 /* 0x251 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {594 /* 0x252 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {595 /* 0x253 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {596 /* 0x254 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {597 /* 0x255 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {598 /* 0x256 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {599 /* 0x257 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {600 /* 0x258 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {601 /* 0x259 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {602 /* 0x25a */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {603 /* 0x25b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {604 /* 0x25c */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {605 /* 0x25d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {606 /* 0x25e */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {607 /* 0x25f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {608 /* 0x260 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {609 /* 0x261 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {610 /* 0x262 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {611 /* 0x263 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {612 /* 0x264 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {613 /* 0x265 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {614 /* 0x266 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {615 /* 0x267 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {616 /* 0x268 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {617 /* 0x269 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 2}, /* shli r3, r1, 2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {619 /* 0x26b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {620 /* 0x26c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {621 /* 0x26d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {623 /* 0x26f */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {624 /* 0x270 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {625 /* 0x271 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {626 /* 0x272 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {627 /* 0x273 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {628 /* 0x274 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {629 /* 0x275 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {630 /* 0x276 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {631 /* 0x277 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {632 /* 0x278 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {633 /* 0x279 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {634 /* 0x27a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {635 /* 0x27b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {636 /* 0x27c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {637 /* 0x27d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {638 /* 0x27e */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 1}, /* shli r3, r1, 1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {639 /* 0x27f */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {640 /* 0x280 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {641 /* 0x281 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {642 /* 0x282 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {643 /* 0x283 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {644 /* 0x284 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {645 /* 0x285 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {646 /* 0x286 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {647 /* 0x287 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {648 /* 0x288 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 3}} /* shli r4, r3, 3 */
- },
- {649 /* 0x289 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {650 /* 0x28a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {651 /* 0x28b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {652 /* 0x28c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {653 /* 0x28d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {654 /* 0x28e */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {655 /* 0x28f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {656 /* 0x290 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {657 /* 0x291 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {658 /* 0x292 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {659 /* 0x293 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {660 /* 0x294 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {661 /* 0x295 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {662 /* 0x296 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {663 /* 0x297 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {664 /* 0x298 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {665 /* 0x299 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {666 /* 0x29a */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 1}, /* shli r4, r2, 1 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {667 /* 0x29b */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {668 /* 0x29c */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {669 /* 0x29d */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 1}, /* s1a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {670 /* 0x29e */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {671 /* 0x29f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {672 /* 0x2a0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {673 /* 0x2a1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {674 /* 0x2a2 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {675 /* 0x2a3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {676 /* 0x2a4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {677 /* 0x2a5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {679 /* 0x2a7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 2, 4}} /* s3a r5, r2, r4 */
- },
- {680 /* 0x2a8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {681 /* 0x2a9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {682 /* 0x2aa */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {684 /* 0x2ac */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 2}, /* shli r4, r2, 2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {685 /* 0x2ad */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {688 /* 0x2b0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 1, 1}, /* s2a r3, r1, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {689 /* 0x2b1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {690 /* 0x2b2 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {692 /* 0x2b4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {693 /* 0x2b5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 1}, /* s3a r3, r1, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {694 /* 0x2b6 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {695 /* 0x2b7 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {696 /* 0x2b8 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {697 /* 0x2b9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {699 /* 0x2bb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {700 /* 0x2bc */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {701 /* 0x2bd */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {702 /* 0x2be */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {703 /* 0x2bf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {704 /* 0x2c0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {705 /* 0x2c1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {706 /* 0x2c2 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {707 /* 0x2c3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {708 /* 0x2c4 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {709 /* 0x2c5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {710 /* 0x2c6 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {711 /* 0x2c7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {712 /* 0x2c8 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {713 /* 0x2c9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 4}, /* shli r3, r1, 4 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {714 /* 0x2ca */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {715 /* 0x2cb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {716 /* 0x2cc */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {717 /* 0x2cd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {719 /* 0x2cf */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {2, 4, 1}} /* sub r5, r4, r1 */
- },
- {720 /* 0x2d0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}} /* shli r4, r3, 4 */
- },
- {721 /* 0x2d1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {722 /* 0x2d2 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {723 /* 0x2d3 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {724 /* 0x2d4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {725 /* 0x2d5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 4}, /* shli r4, r3, 4 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {726 /* 0x2d6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {727 /* 0x2d7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {728 /* 0x2d8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {729 /* 0x2d9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}} /* s3a r4, r3, r3 */
- },
- {730 /* 0x2da */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {731 /* 0x2db */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 1}} /* s1a r5, r4, r1 */
- },
- {733 /* 0x2dd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {735 /* 0x2df */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {736 /* 0x2e0 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {737 /* 0x2e1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {738 /* 0x2e2 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {739 /* 0x2e3 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {740 /* 0x2e4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {741 /* 0x2e5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {743 /* 0x2e7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {744 /* 0x2e8 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {745 /* 0x2e9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {747 /* 0x2eb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {748 /* 0x2ec */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {749 /* 0x2ed */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {750 /* 0x2ee */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {752 /* 0x2f0 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {753 /* 0x2f1 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {755 /* 0x2f3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {756 /* 0x2f4 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 2}, /* shli r3, r2, 2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {757 /* 0x2f5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {758 /* 0x2f6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {759 /* 0x2f7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {760 /* 0x2f8 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {761 /* 0x2f9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {762 /* 0x2fa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 1}, /* shli r3, r2, 1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {763 /* 0x2fb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {764 /* 0x2fc */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {765 /* 0x2fd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {766 /* 0x2fe */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {767 /* 0x2ff */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {768 /* 0x300 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {769 /* 0x301 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {770 /* 0x302 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {771 /* 0x303 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {772 /* 0x304 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {773 /* 0x305 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {774 /* 0x306 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {775 /* 0x307 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {776 /* 0x308 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {777 /* 0x309 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {778 /* 0x30a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {779 /* 0x30b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {780 /* 0x30c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {781 /* 0x30d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {782 /* 0x30e */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {783 /* 0x30f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {784 /* 0x310 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {3, 3, 2}} /* s1a r4, r3, r2 */
- },
- {785 /* 0x311 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 1, 2}, /* s3a r4, r1, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {786 /* 0x312 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {787 /* 0x313 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {3, 1, 3}, /* s1a r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {788 /* 0x314 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {789 /* 0x315 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 2, 4}} /* s3a r5, r2, r4 */
- },
- {790 /* 0x316 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {791 /* 0x317 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {792 /* 0x318 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {793 /* 0x319 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {794 /* 0x31a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {795 /* 0x31b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {796 /* 0x31c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {797 /* 0x31d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {798 /* 0x31e */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {799 /* 0x31f */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {800 /* 0x320 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {801 /* 0x321 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {802 /* 0x322 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {803 /* 0x323 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {804 /* 0x324 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {4, 1, 2}, /* s2a r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {805 /* 0x325 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {806 /* 0x326 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {807 /* 0x327 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {808 /* 0x328 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {809 /* 0x329 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {810 /* 0x32a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {811 /* 0x32b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {812 /* 0x32c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {813 /* 0x32d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {815 /* 0x32f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {816 /* 0x330 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {817 /* 0x331 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {818 /* 0x332 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {819 /* 0x333 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {820 /* 0x334 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {821 /* 0x335 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {822 /* 0x336 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {823 /* 0x337 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {824 /* 0x338 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {825 /* 0x339 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {827 /* 0x33b */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {828 /* 0x33c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {829 /* 0x33d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {831 /* 0x33f */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {832 /* 0x340 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {833 /* 0x341 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {834 /* 0x342 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 2}, /* s1a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {835 /* 0x343 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {836 /* 0x344 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 2}, /* s3a r4, r2, r2 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {837 /* 0x345 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {838 /* 0x346 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {840 /* 0x348 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {841 /* 0x349 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {842 /* 0x34a */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {843 /* 0x34b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {844 /* 0x34c */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {845 /* 0x34d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {846 /* 0x34e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {848 /* 0x350 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {849 /* 0x351 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {850 /* 0x352 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {852 /* 0x354 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {853 /* 0x355 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {855 /* 0x357 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {856 /* 0x358 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {857 /* 0x359 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {858 /* 0x35a */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {859 /* 0x35b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {861 /* 0x35d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {862 /* 0x35e */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {863 /* 0x35f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 1}} /* sub r5, r4, r1 */
- },
- {864 /* 0x360 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {865 /* 0x361 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 1, 4}} /* add r5, r1, r4 */
- },
- {866 /* 0x362 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {867 /* 0x363 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 2, 4}} /* add r5, r2, r4 */
- },
- {868 /* 0x364 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {869 /* 0x365 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {870 /* 0x366 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {871 /* 0x367 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {872 /* 0x368 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {873 /* 0x369 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {875 /* 0x36b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {876 /* 0x36c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {877 /* 0x36d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {879 /* 0x36f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {880 /* 0x370 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {881 /* 0x371 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 2}, /* s1a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {882 /* 0x372 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {884 /* 0x374 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {885 /* 0x375 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {888 /* 0x378 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {889 /* 0x379 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {2, 2, 1}, /* sub r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {890 /* 0x37a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {891 /* 0x37b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {892 /* 0x37c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {893 /* 0x37d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {894 /* 0x37e */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {895 /* 0x37f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {896 /* 0x380 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {897 /* 0x381 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {898 /* 0x382 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {899 /* 0x383 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {900 /* 0x384 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {901 /* 0x385 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {902 /* 0x386 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {903 /* 0x387 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {904 /* 0x388 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {905 /* 0x389 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {2, 1, 2}, /* sub r4, r1, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {906 /* 0x38a */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {908 /* 0x38c */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {909 /* 0x38d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {910 /* 0x38e */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {911 /* 0x38f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {912 /* 0x390 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {913 /* 0x391 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 1, 2}, /* s1a r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {915 /* 0x393 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {916 /* 0x394 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {917 /* 0x395 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {918 /* 0x396 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {919 /* 0x397 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {920 /* 0x398 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {924 /* 0x39c */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {925 /* 0x39d */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {2, 1, 3}, /* sub r4, r1, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {927 /* 0x39f */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {928 /* 0x3a0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {929 /* 0x3a1 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 1, 2}, /* s2a r4, r1, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {932 /* 0x3a4 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {935 /* 0x3a7 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {936 /* 0x3a8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {937 /* 0x3a9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {939 /* 0x3ab */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {941 /* 0x3ad */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {943 /* 0x3af */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {944 /* 0x3b0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {945 /* 0x3b1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 3, 4}} /* sub r5, r3, r4 */
- },
- {948 /* 0x3b4 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {949 /* 0x3b5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {950 /* 0x3b6 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {951 /* 0x3b7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {952 /* 0x3b8 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {953 /* 0x3b9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {955 /* 0x3bb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {4, 4, 4}} /* s2a r5, r4, r4 */
- },
- {956 /* 0x3bc */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {957 /* 0x3bd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {958 /* 0x3be */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {959 /* 0x3bf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {960 /* 0x3c0 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {961 /* 0x3c1 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {962 /* 0x3c2 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {963 /* 0x3c3 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {964 /* 0x3c4 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {965 /* 0x3c5 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {966 /* 0x3c6 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {967 /* 0x3c7 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {968 /* 0x3c8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {969 /* 0x3c9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {3, 2, 1}, /* s1a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {970 /* 0x3ca */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {971 /* 0x3cb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {972 /* 0x3cc */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {973 /* 0x3cd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {975 /* 0x3cf */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {6, 3, 6}, /* shli r4, r3, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {976 /* 0x3d0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {979 /* 0x3d3 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {980 /* 0x3d4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {981 /* 0x3d5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {983 /* 0x3d7 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {984 /* 0x3d8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {985 /* 0x3d9 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {987 /* 0x3db */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {988 /* 0x3dc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {989 /* 0x3dd */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {990 /* 0x3de */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {991 /* 0x3df */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {992 /* 0x3e0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {993 /* 0x3e1 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {994 /* 0x3e2 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {996 /* 0x3e4 */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {997 /* 0x3e5 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {999 /* 0x3e7 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1000 /* 0x3e8 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {1001 /* 0x3e9 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {4, 2, 1}, /* s2a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {1003 /* 0x3eb */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {1004 /* 0x3ec */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {1005 /* 0x3ed */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {1006 /* 0x3ee */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1007 /* 0x3ef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1008 /* 0x3f0 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1009 /* 0x3f1 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {1010 /* 0x3f2 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {1011 /* 0x3f3 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 1, 10}, /* shli r4, r1, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1012 /* 0x3f4 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 2}} /* shli r5, r4, 2 */
- },
- {1013 /* 0x3f5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {1014 /* 0x3f6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1015 /* 0x3f7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1016 /* 0x3f8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1017 /* 0x3f9 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {1018 /* 0x3fa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {1019 /* 0x3fb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1020 /* 0x3fc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1021 /* 0x3fd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1022 /* 0x3fe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1023 /* 0x3ff */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1024 /* 0x400 */ ,
- {{6, 1, 10}} /* shli r2, r1, 10 */
- },
- {1025 /* 0x401 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1026 /* 0x402 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {1027 /* 0x403 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1028 /* 0x404 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {1029 /* 0x405 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1030 /* 0x406 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {1031 /* 0x407 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {1032 /* 0x408 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {1033 /* 0x409 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1034 /* 0x40a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {1040 /* 0x410 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1049 /* 0x419 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {1056 /* 0x420 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1059 /* 0x423 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 2, 1}, /* s3a r4, r2, r1 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {1088 /* 0x440 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1100 /* 0x44c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {1104 /* 0x450 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {1108 /* 0x454 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {1136 /* 0x470 */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {1152 /* 0x480 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 7}} /* shli r3, r2, 7 */
- },
- {1200 /* 0x4b0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1204 /* 0x4b4 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {1242 /* 0x4da */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {1280 /* 0x500 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {1292 /* 0x50c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {1304 /* 0x518 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {1312 /* 0x520 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {1320 /* 0x528 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {1336 /* 0x538 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {1344 /* 0x540 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {1348 /* 0x544 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {1360 /* 0x550 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {1364 /* 0x554 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {1395 /* 0x573 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}, /* shli r4, r3, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1448 /* 0x5a8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {1460 /* 0x5b4 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {1461 /* 0x5b5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {1472 /* 0x5c0 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 5}, /* shli r3, r1, 5 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {1488 /* 0x5d0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1512 /* 0x5e8 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 3}, /* shli r3, r2, 3 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1536 /* 0x600 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {1568 /* 0x620 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {1576 /* 0x628 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {1649 /* 0x671 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {1664 /* 0x680 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 7}} /* shli r4, r3, 7 */
- },
- {1684 /* 0x694 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {3, 2, 3}, /* s1a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {1696 /* 0x6a0 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {4, 2, 2}, /* s2a r4, r2, r2 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {1744 /* 0x6d0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {1812 /* 0x714 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {2000 /* 0x7d0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {2012 /* 0x7dc */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2014 /* 0x7de */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2037 /* 0x7f5 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {4, 4, 1}} /* s2a r5, r4, r1 */
- },
- {2038 /* 0x7f6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2039 /* 0x7f7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2040 /* 0x7f8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2041 /* 0x7f9 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {2042 /* 0x7fa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {2043 /* 0x7fb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2044 /* 0x7fc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2045 /* 0x7fd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2046 /* 0x7fe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2047 /* 0x7ff */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2048 /* 0x800 */ ,
- {{6, 1, 11}} /* shli r2, r1, 11 */
- },
- {2049 /* 0x801 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2050 /* 0x802 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {2051 /* 0x803 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2052 /* 0x804 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {2053 /* 0x805 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2054 /* 0x806 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {2055 /* 0x807 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {2056 /* 0x808 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {2057 /* 0x809 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2058 /* 0x80a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {2064 /* 0x810 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2080 /* 0x820 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2100 /* 0x834 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 1, 11}, /* shli r4, r1, 11 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {2112 /* 0x840 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2144 /* 0x860 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {2176 /* 0x880 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2184 /* 0x888 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {2304 /* 0x900 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 8}} /* shli r3, r2, 8 */
- },
- {2320 /* 0x910 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {5, 3, 2}} /* s3a r4, r3, r2 */
- },
- {2408 /* 0x968 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {2560 /* 0xa00 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {2578 /* 0xa12 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {2592 /* 0xa20 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 5}} /* shli r4, r3, 5 */
- },
- {2633 /* 0xa49 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {2704 /* 0xa90 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {2730 /* 0xaaa */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 5}, /* shli r3, r2, 5 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {2880 /* 0xb40 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 6}} /* shli r4, r3, 6 */
- },
- {2896 /* 0xb50 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {3072 /* 0xc00 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {3079 /* 0xc07 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {3112 /* 0xc28 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {3192 /* 0xc78 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 2}, /* s2a r3, r2, r2 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {3240 /* 0xca8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {6, 4, 3}} /* shli r5, r4, 3 */
- },
- {3264 /* 0xcc0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {3328 /* 0xd00 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 8}} /* shli r4, r3, 8 */
- },
- {3453 /* 0xd7d */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {3529 /* 0xdc9 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}, /* s3a r4, r2, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {3580 /* 0xdfc */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {3600 /* 0xe10 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 2, 3}, /* sub r4, r2, r3 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {3624 /* 0xe28 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {4000 /* 0xfa0 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 5}} /* shli r5, r4, 5 */
- },
- {4025 /* 0xfb9 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {4073 /* 0xfe9 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 4, 1}} /* s3a r5, r4, r1 */
- },
- {4086 /* 0xff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {4087 /* 0xff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4088 /* 0xff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4089 /* 0xff9 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {4090 /* 0xffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 11}, /* shli r3, r1, 11 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {4091 /* 0xffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4092 /* 0xffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4093 /* 0xffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4094 /* 0xffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4095 /* 0xfff */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4096 /* 0x1000 */ ,
- {{6, 1, 12}} /* shli r2, r1, 12 */
- },
- {4097 /* 0x1001 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4098 /* 0x1002 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {4099 /* 0x1003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4100 /* 0x1004 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {4101 /* 0x1005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4102 /* 0x1006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {4103 /* 0x1007 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {4104 /* 0x1008 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {4105 /* 0x1009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4106 /* 0x100a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {4108 /* 0x100c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {4112 /* 0x1010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4128 /* 0x1020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4160 /* 0x1040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4184 /* 0x1058 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {4224 /* 0x1080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4352 /* 0x1100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4369 /* 0x1111 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {4376 /* 0x1118 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {4416 /* 0x1140 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {1, 2, 3}, /* add r4, r2, r3 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {4433 /* 0x1151 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {4482 /* 0x1182 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {5, 3, 1}, /* s3a r4, r3, r1 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {4608 /* 0x1200 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 9}} /* shli r3, r2, 9 */
- },
- {4712 /* 0x1268 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {5, 3, 4}} /* s3a r5, r3, r4 */
- },
- {4864 /* 0x1300 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {3, 2, 1}, /* s1a r3, r2, r1 */
- {6, 3, 8}} /* shli r4, r3, 8 */
- },
- {5000 /* 0x1388 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {5040 /* 0x13b0 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 4}, /* shli r3, r2, 4 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {5120 /* 0x1400 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {5243 /* 0x147b */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 7}, /* shli r4, r3, 7 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {5285 /* 0x14a5 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 7}, /* shli r3, r2, 7 */
- {4, 2, 3}, /* s2a r4, r2, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {5329 /* 0x14d1 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {6144 /* 0x1800 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {6164 /* 0x1814 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 11}, /* shli r4, r2, 11 */
- {4, 3, 4}} /* s2a r5, r3, r4 */
- },
- {6400 /* 0x1900 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 8}} /* shli r4, r3, 8 */
- },
- {6406 /* 0x1906 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {3, 3, 3}, /* s1a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {6656 /* 0x1a00 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {4, 2, 1}, /* s2a r3, r2, r1 */
- {6, 3, 9}} /* shli r4, r3, 9 */
- },
- {7040 /* 0x1b80 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 6}, /* shli r3, r1, 6 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 7}} /* shli r5, r4, 7 */
- },
- {7169 /* 0x1c01 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {5, 2, 3}} /* s3a r4, r2, r3 */
- },
- {7678 /* 0x1dfe */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {7682 /* 0x1e02 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 1, 2}, /* sub r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {3, 3, 4}} /* s1a r5, r3, r4 */
- },
- {8000 /* 0x1f40 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 6}} /* shli r5, r4, 6 */
- },
- {8048 /* 0x1f70 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 4}} /* shli r5, r4, 4 */
- },
- {8182 /* 0x1ff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {8183 /* 0x1ff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8184 /* 0x1ff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8185 /* 0x1ff9 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {8186 /* 0x1ffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 12}, /* shli r3, r1, 12 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {8187 /* 0x1ffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8188 /* 0x1ffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8189 /* 0x1ffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8190 /* 0x1ffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8191 /* 0x1fff */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8192 /* 0x2000 */ ,
- {{6, 1, 13}} /* shli r2, r1, 13 */
- },
- {8193 /* 0x2001 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {8194 /* 0x2002 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {8195 /* 0x2003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8196 /* 0x2004 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {8197 /* 0x2005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8198 /* 0x2006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {8199 /* 0x2007 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {8200 /* 0x2008 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {8201 /* 0x2009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8202 /* 0x200a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {8203 /* 0x200b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 10}, /* shli r3, r1, 10 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {8204 /* 0x200c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {4, 2, 3}} /* s2a r4, r2, r3 */
- },
- {8208 /* 0x2010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8224 /* 0x2020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8256 /* 0x2040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8320 /* 0x2080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8448 /* 0x2100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8520 /* 0x2148 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 8}, /* shli r3, r1, 8 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {8640 /* 0x21c0 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {8672 /* 0x21e0 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 3, 8}, /* shli r4, r3, 8 */
- {2, 4, 2}} /* sub r5, r4, r2 */
- },
- {8704 /* 0x2200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8716 /* 0x220c */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {4, 3, 2}, /* s2a r4, r3, r2 */
- {4, 4, 3}} /* s2a r5, r4, r3 */
- },
- {8728 /* 0x2218 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 9}, /* shli r3, r1, 9 */
- {3, 3, 2}, /* s1a r4, r3, r2 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {9216 /* 0x2400 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 10}} /* shli r3, r2, 10 */
- },
- {9217 /* 0x2401 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 10}, /* shli r3, r2, 10 */
- {1, 1, 3}} /* add r4, r1, r3 */
- },
- {9746 /* 0x2612 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {5, 3, 3}, /* s3a r4, r3, r3 */
- {3, 4, 2}} /* s1a r5, r4, r2 */
- },
- {9810 /* 0x2652 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 6}, /* shli r3, r2, 6 */
- {5, 3, 2}, /* s3a r4, r3, r2 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {10240 /* 0x2800 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {10248 /* 0x2808 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {4, 3, 2}} /* s2a r4, r3, r2 */
- },
- {10368 /* 0x2880 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 7}} /* shli r4, r3, 7 */
- },
- {10456 /* 0x28d8 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {5, 4, 2}} /* s3a r5, r4, r2 */
- },
- {10832 /* 0x2a50 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {4, 1, 2}, /* s2a r3, r1, r2 */
- {4, 3, 3}, /* s2a r4, r3, r3 */
- {4, 4, 2}} /* s2a r5, r4, r2 */
- },
- {11512 /* 0x2cf8 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {2, 3, 1}, /* sub r4, r3, r1 */
- {5, 4, 3}} /* s3a r5, r4, r3 */
- },
- {11522 /* 0x2d02 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {4, 3, 1}, /* s2a r4, r3, r1 */
- {3, 4, 3}} /* s1a r5, r4, r3 */
- },
- {11529 /* 0x2d09 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 8}, /* shli r3, r2, 8 */
- {1, 1, 3}, /* add r4, r1, r3 */
- {5, 4, 4}} /* s3a r5, r4, r4 */
- },
- {12288 /* 0x3000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {12299 /* 0x300b */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 1, 2}, /* s3a r3, r1, r2 */
- {6, 2, 12}, /* shli r4, r2, 12 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {16000 /* 0x3e80 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 7}, /* shli r3, r1, 7 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 7}} /* shli r5, r4, 7 */
- },
- {16374 /* 0x3ff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 11}, /* shli r4, r2, 11 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {16375 /* 0x3ff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16376 /* 0x3ff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16377 /* 0x3ff9 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {16378 /* 0x3ffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 13}, /* shli r3, r1, 13 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {16379 /* 0x3ffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16380 /* 0x3ffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16381 /* 0x3ffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16382 /* 0x3ffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16383 /* 0x3fff */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {16384 /* 0x4000 */ ,
- {{6, 1, 14}} /* shli r2, r1, 14 */
- },
- {16385 /* 0x4001 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {16386 /* 0x4002 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {16387 /* 0x4003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16388 /* 0x4004 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {16389 /* 0x4005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16390 /* 0x4006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {16391 /* 0x4007 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {16392 /* 0x4008 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {16393 /* 0x4009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16394 /* 0x400a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {16400 /* 0x4010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16416 /* 0x4020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16448 /* 0x4040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16496 /* 0x4070 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {5, 2, 4}} /* s3a r5, r2, r4 */
- },
- {16512 /* 0x4080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16640 /* 0x4100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16896 /* 0x4200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17408 /* 0x4400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18432 /* 0x4800 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 11}} /* shli r3, r2, 11 */
- },
- {20480 /* 0x5000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {24576 /* 0x6000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {25600 /* 0x6400 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {5, 2, 1}, /* s3a r3, r2, r1 */
- {6, 3, 10}} /* shli r4, r3, 10 */
- },
- {32758 /* 0x7ff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 12}, /* shli r4, r2, 12 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {32759 /* 0x7ff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32760 /* 0x7ff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32761 /* 0x7ff9 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {32762 /* 0x7ffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 14}, /* shli r3, r1, 14 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {32763 /* 0x7ffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32764 /* 0x7ffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32765 /* 0x7ffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32766 /* 0x7ffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {32767 /* 0x7fff */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {32768 /* 0x8000 */ ,
- {{6, 1, 15}} /* shli r2, r1, 15 */
- },
- {32769 /* 0x8001 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {32770 /* 0x8002 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {32771 /* 0x8003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32772 /* 0x8004 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {32773 /* 0x8005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32774 /* 0x8006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {32775 /* 0x8007 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {32776 /* 0x8008 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {32777 /* 0x8009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32778 /* 0x800a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {32784 /* 0x8010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32800 /* 0x8020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32832 /* 0x8040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {32896 /* 0x8080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33024 /* 0x8100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33280 /* 0x8200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33792 /* 0x8400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34816 /* 0x8800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {36864 /* 0x9000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 12}} /* shli r3, r2, 12 */
- },
- {40960 /* 0xa000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {49152 /* 0xc000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {65526 /* 0xfff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 13}, /* shli r4, r2, 13 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {65527 /* 0xfff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65528 /* 0xfff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65529 /* 0xfff9 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {65530 /* 0xfffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 15}, /* shli r3, r1, 15 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {65531 /* 0xfffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65532 /* 0xfffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65533 /* 0xfffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65534 /* 0xfffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {65535 /* 0xffff */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {65536 /* 0x10000 */ ,
- {{6, 1, 16}} /* shli r2, r1, 16 */
- },
- {65537 /* 0x10001 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {65538 /* 0x10002 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {65539 /* 0x10003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65540 /* 0x10004 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {65541 /* 0x10005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65542 /* 0x10006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {65543 /* 0x10007 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {65544 /* 0x10008 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {65545 /* 0x10009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65546 /* 0x1000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {65552 /* 0x10010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65568 /* 0x10020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65600 /* 0x10040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65664 /* 0x10080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {65792 /* 0x10100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {66048 /* 0x10200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {66560 /* 0x10400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67584 /* 0x10800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {69632 /* 0x11000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {73728 /* 0x12000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 13}} /* shli r3, r2, 13 */
- },
- {81920 /* 0x14000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {98304 /* 0x18000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {131062 /* 0x1fff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 14}, /* shli r4, r2, 14 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {131063 /* 0x1fff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131064 /* 0x1fff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131065 /* 0x1fff9 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {131066 /* 0x1fffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 16}, /* shli r3, r1, 16 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {131067 /* 0x1fffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131068 /* 0x1fffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131069 /* 0x1fffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131070 /* 0x1fffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {131071 /* 0x1ffff */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {131072 /* 0x20000 */ ,
- {{6, 1, 17}} /* shli r2, r1, 17 */
- },
- {131073 /* 0x20001 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {131074 /* 0x20002 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {131075 /* 0x20003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131076 /* 0x20004 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {131077 /* 0x20005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131078 /* 0x20006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {131079 /* 0x20007 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {131080 /* 0x20008 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {131081 /* 0x20009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131082 /* 0x2000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {131088 /* 0x20010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131104 /* 0x20020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131136 /* 0x20040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131200 /* 0x20080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131328 /* 0x20100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {131584 /* 0x20200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {132096 /* 0x20400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {133120 /* 0x20800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {135168 /* 0x21000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {139264 /* 0x22000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {147456 /* 0x24000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 14}} /* shli r3, r2, 14 */
- },
- {163840 /* 0x28000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {196608 /* 0x30000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {262134 /* 0x3fff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 15}, /* shli r4, r2, 15 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {262135 /* 0x3fff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262136 /* 0x3fff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262137 /* 0x3fff9 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {262138 /* 0x3fffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 17}, /* shli r3, r1, 17 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {262139 /* 0x3fffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262140 /* 0x3fffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262141 /* 0x3fffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262142 /* 0x3fffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {262143 /* 0x3ffff */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {262144 /* 0x40000 */ ,
- {{6, 1, 18}} /* shli r2, r1, 18 */
- },
- {262145 /* 0x40001 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {262146 /* 0x40002 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {262147 /* 0x40003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262148 /* 0x40004 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {262149 /* 0x40005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262150 /* 0x40006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {262151 /* 0x40007 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {262152 /* 0x40008 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {262153 /* 0x40009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262154 /* 0x4000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {262160 /* 0x40010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262176 /* 0x40020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262208 /* 0x40040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262272 /* 0x40080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262400 /* 0x40100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {262656 /* 0x40200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {263168 /* 0x40400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {264192 /* 0x40800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {266240 /* 0x41000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {270336 /* 0x42000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {278528 /* 0x44000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {294912 /* 0x48000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 15}} /* shli r3, r2, 15 */
- },
- {327680 /* 0x50000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {393216 /* 0x60000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {524278 /* 0x7fff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 16}, /* shli r4, r2, 16 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {524279 /* 0x7fff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524280 /* 0x7fff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524281 /* 0x7fff9 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {524282 /* 0x7fffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 18}, /* shli r3, r1, 18 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {524283 /* 0x7fffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524284 /* 0x7fffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524285 /* 0x7fffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524286 /* 0x7fffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {524287 /* 0x7ffff */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {524288 /* 0x80000 */ ,
- {{6, 1, 19}} /* shli r2, r1, 19 */
- },
- {524289 /* 0x80001 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {524290 /* 0x80002 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {524291 /* 0x80003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524292 /* 0x80004 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {524293 /* 0x80005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524294 /* 0x80006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {524295 /* 0x80007 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {524296 /* 0x80008 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {524297 /* 0x80009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524298 /* 0x8000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {524304 /* 0x80010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524320 /* 0x80020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524352 /* 0x80040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524416 /* 0x80080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524544 /* 0x80100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {524800 /* 0x80200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {525312 /* 0x80400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {526336 /* 0x80800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {528384 /* 0x81000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {532480 /* 0x82000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {540672 /* 0x84000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {557056 /* 0x88000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {589824 /* 0x90000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 16}} /* shli r3, r2, 16 */
- },
- {655360 /* 0xa0000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {786432 /* 0xc0000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {1048566 /* 0xffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 17}, /* shli r4, r2, 17 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1048567 /* 0xffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048568 /* 0xffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048569 /* 0xffff9 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {1048570 /* 0xffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 19}, /* shli r3, r1, 19 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {1048571 /* 0xffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048572 /* 0xffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048573 /* 0xffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048574 /* 0xffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1048575 /* 0xfffff */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1048576 /* 0x100000 */ ,
- {{6, 1, 20}} /* shli r2, r1, 20 */
- },
- {1048577 /* 0x100001 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1048578 /* 0x100002 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {1048579 /* 0x100003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048580 /* 0x100004 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {1048581 /* 0x100005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048582 /* 0x100006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {1048583 /* 0x100007 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {1048584 /* 0x100008 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {1048585 /* 0x100009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048586 /* 0x10000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {1048592 /* 0x100010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048608 /* 0x100020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048640 /* 0x100040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048704 /* 0x100080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1048832 /* 0x100100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1049088 /* 0x100200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1049600 /* 0x100400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1050624 /* 0x100800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1052672 /* 0x101000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1056768 /* 0x102000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1064960 /* 0x104000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1081344 /* 0x108000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1114112 /* 0x110000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1179648 /* 0x120000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 17}} /* shli r3, r2, 17 */
- },
- {1310720 /* 0x140000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {1572864 /* 0x180000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {2097142 /* 0x1ffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 18}, /* shli r4, r2, 18 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2097143 /* 0x1ffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097144 /* 0x1ffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097145 /* 0x1ffff9 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {2097146 /* 0x1ffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 20}, /* shli r3, r1, 20 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {2097147 /* 0x1ffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097148 /* 0x1ffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097149 /* 0x1ffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097150 /* 0x1ffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2097151 /* 0x1fffff */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {2097152 /* 0x200000 */ ,
- {{6, 1, 21}} /* shli r2, r1, 21 */
- },
- {2097153 /* 0x200001 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {2097154 /* 0x200002 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {2097155 /* 0x200003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097156 /* 0x200004 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {2097157 /* 0x200005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097158 /* 0x200006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {2097159 /* 0x200007 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {2097160 /* 0x200008 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {2097161 /* 0x200009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097162 /* 0x20000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {2097168 /* 0x200010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097184 /* 0x200020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097216 /* 0x200040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097280 /* 0x200080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097408 /* 0x200100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2097664 /* 0x200200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2098176 /* 0x200400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2099200 /* 0x200800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2101248 /* 0x201000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2105344 /* 0x202000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2113536 /* 0x204000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2129920 /* 0x208000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2162688 /* 0x210000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2228224 /* 0x220000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {2359296 /* 0x240000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 18}} /* shli r3, r2, 18 */
- },
- {2621440 /* 0x280000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {3145728 /* 0x300000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {4194294 /* 0x3ffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 19}, /* shli r4, r2, 19 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {4194295 /* 0x3ffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194296 /* 0x3ffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194297 /* 0x3ffff9 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {4194298 /* 0x3ffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 21}, /* shli r3, r1, 21 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {4194299 /* 0x3ffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194300 /* 0x3ffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194301 /* 0x3ffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194302 /* 0x3ffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {4194303 /* 0x3fffff */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {4194304 /* 0x400000 */ ,
- {{6, 1, 22}} /* shli r2, r1, 22 */
- },
- {4194305 /* 0x400001 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {4194306 /* 0x400002 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {4194307 /* 0x400003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194308 /* 0x400004 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {4194309 /* 0x400005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194310 /* 0x400006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {4194311 /* 0x400007 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {4194312 /* 0x400008 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {4194313 /* 0x400009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194314 /* 0x40000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {4194320 /* 0x400010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194336 /* 0x400020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194368 /* 0x400040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194432 /* 0x400080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194560 /* 0x400100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4194816 /* 0x400200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4195328 /* 0x400400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4196352 /* 0x400800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4198400 /* 0x401000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4202496 /* 0x402000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4210688 /* 0x404000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4227072 /* 0x408000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4259840 /* 0x410000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4325376 /* 0x420000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4456448 /* 0x440000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {4718592 /* 0x480000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 19}} /* shli r3, r2, 19 */
- },
- {5242880 /* 0x500000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {6291456 /* 0x600000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {8388598 /* 0x7ffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 20}, /* shli r4, r2, 20 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {8388599 /* 0x7ffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388600 /* 0x7ffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388601 /* 0x7ffff9 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {8388602 /* 0x7ffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 22}, /* shli r3, r1, 22 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {8388603 /* 0x7ffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388604 /* 0x7ffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388605 /* 0x7ffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388606 /* 0x7ffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {8388607 /* 0x7fffff */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {8388608 /* 0x800000 */ ,
- {{6, 1, 23}} /* shli r2, r1, 23 */
- },
- {8388609 /* 0x800001 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {8388610 /* 0x800002 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {8388611 /* 0x800003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388612 /* 0x800004 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {8388613 /* 0x800005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388614 /* 0x800006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {8388615 /* 0x800007 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {8388616 /* 0x800008 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {8388617 /* 0x800009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388618 /* 0x80000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {8388624 /* 0x800010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388640 /* 0x800020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388672 /* 0x800040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388736 /* 0x800080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8388864 /* 0x800100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8389120 /* 0x800200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8389632 /* 0x800400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8390656 /* 0x800800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8392704 /* 0x801000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8396800 /* 0x802000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8404992 /* 0x804000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8421376 /* 0x808000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8454144 /* 0x810000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8519680 /* 0x820000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8650752 /* 0x840000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {8912896 /* 0x880000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {9437184 /* 0x900000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 20}} /* shli r3, r2, 20 */
- },
- {10485760 /* 0xa00000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {11796480 /* 0xb40000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 18}} /* shli r4, r3, 18 */
- },
- {12582912 /* 0xc00000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {16777206 /* 0xfffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 21}, /* shli r4, r2, 21 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {16777207 /* 0xfffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777208 /* 0xfffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777209 /* 0xfffff9 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {16777210 /* 0xfffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 23}, /* shli r3, r1, 23 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {16777211 /* 0xfffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777212 /* 0xfffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777213 /* 0xfffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777214 /* 0xfffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {16777215 /* 0xffffff */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {16777216 /* 0x1000000 */ ,
- {{6, 1, 24}} /* shli r2, r1, 24 */
- },
- {16777217 /* 0x1000001 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {16777218 /* 0x1000002 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {16777219 /* 0x1000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777220 /* 0x1000004 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {16777221 /* 0x1000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777222 /* 0x1000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {16777223 /* 0x1000007 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {16777224 /* 0x1000008 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {16777225 /* 0x1000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777226 /* 0x100000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {16777232 /* 0x1000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777248 /* 0x1000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777280 /* 0x1000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777344 /* 0x1000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777472 /* 0x1000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16777728 /* 0x1000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16778240 /* 0x1000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16779264 /* 0x1000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16781312 /* 0x1001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16785408 /* 0x1002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16793600 /* 0x1004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16809984 /* 0x1008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16842752 /* 0x1010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {16843009 /* 0x1010101 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 3, 16}, /* shli r4, r3, 16 */
- {1, 3, 4}} /* add r5, r3, r4 */
- },
- {16908288 /* 0x1020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17039360 /* 0x1040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17301504 /* 0x1080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {17825792 /* 0x1100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {18874368 /* 0x1200000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 21}} /* shli r3, r2, 21 */
- },
- {20971520 /* 0x1400000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {23592960 /* 0x1680000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {5, 2, 2}, /* s3a r3, r2, r2 */
- {6, 3, 19}} /* shli r4, r3, 19 */
- },
- {25165824 /* 0x1800000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {33554422 /* 0x1fffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 22}, /* shli r4, r2, 22 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {33554423 /* 0x1fffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554424 /* 0x1fffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554425 /* 0x1fffff9 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {33554426 /* 0x1fffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 24}, /* shli r3, r1, 24 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {33554427 /* 0x1fffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554428 /* 0x1fffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554429 /* 0x1fffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554430 /* 0x1fffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {33554431 /* 0x1ffffff */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {33554432 /* 0x2000000 */ ,
- {{6, 1, 25}} /* shli r2, r1, 25 */
- },
- {33554433 /* 0x2000001 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {33554434 /* 0x2000002 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {33554435 /* 0x2000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554436 /* 0x2000004 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {33554437 /* 0x2000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554438 /* 0x2000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {33554439 /* 0x2000007 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {33554440 /* 0x2000008 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {33554441 /* 0x2000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554442 /* 0x200000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {33554448 /* 0x2000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554464 /* 0x2000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554496 /* 0x2000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554560 /* 0x2000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554688 /* 0x2000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33554944 /* 0x2000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33555456 /* 0x2000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33556480 /* 0x2000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33558528 /* 0x2001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33562624 /* 0x2002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33570816 /* 0x2004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33587200 /* 0x2008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33619968 /* 0x2010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33685504 /* 0x2020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {33816576 /* 0x2040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34078720 /* 0x2080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {34603008 /* 0x2100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {35651584 /* 0x2200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {37748736 /* 0x2400000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 22}} /* shli r3, r2, 22 */
- },
- {41943040 /* 0x2800000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {50331648 /* 0x3000000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {67108854 /* 0x3fffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 23}, /* shli r4, r2, 23 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {67108855 /* 0x3fffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108856 /* 0x3fffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108857 /* 0x3fffff9 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {67108858 /* 0x3fffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 25}, /* shli r3, r1, 25 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {67108859 /* 0x3fffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108860 /* 0x3fffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108861 /* 0x3fffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108862 /* 0x3fffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {67108863 /* 0x3ffffff */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {67108864 /* 0x4000000 */ ,
- {{6, 1, 26}} /* shli r2, r1, 26 */
- },
- {67108865 /* 0x4000001 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {67108866 /* 0x4000002 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {67108867 /* 0x4000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108868 /* 0x4000004 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {67108869 /* 0x4000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108870 /* 0x4000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {67108871 /* 0x4000007 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {67108872 /* 0x4000008 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {67108873 /* 0x4000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108874 /* 0x400000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {67108880 /* 0x4000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108896 /* 0x4000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108928 /* 0x4000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67108992 /* 0x4000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67109120 /* 0x4000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67109376 /* 0x4000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67109888 /* 0x4000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67110912 /* 0x4000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67112960 /* 0x4001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67117056 /* 0x4002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67125248 /* 0x4004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67141632 /* 0x4008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67174400 /* 0x4010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67239936 /* 0x4020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67371008 /* 0x4040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {67633152 /* 0x4080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {68157440 /* 0x4100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {69206016 /* 0x4200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {71303168 /* 0x4400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {75497472 /* 0x4800000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 23}} /* shli r3, r2, 23 */
- },
- {83886080 /* 0x5000000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {100663296 /* 0x6000000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {134217718 /* 0x7fffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 24}, /* shli r4, r2, 24 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {134217719 /* 0x7fffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217720 /* 0x7fffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217721 /* 0x7fffff9 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {134217722 /* 0x7fffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 26}, /* shli r3, r1, 26 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {134217723 /* 0x7fffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217724 /* 0x7fffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217725 /* 0x7fffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217726 /* 0x7fffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {134217727 /* 0x7ffffff */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {134217728 /* 0x8000000 */ ,
- {{6, 1, 27}} /* shli r2, r1, 27 */
- },
- {134217729 /* 0x8000001 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {134217730 /* 0x8000002 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {134217731 /* 0x8000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217732 /* 0x8000004 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {134217733 /* 0x8000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217734 /* 0x8000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {134217735 /* 0x8000007 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {134217736 /* 0x8000008 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {134217737 /* 0x8000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217738 /* 0x800000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {134217744 /* 0x8000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217760 /* 0x8000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217792 /* 0x8000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217856 /* 0x8000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134217984 /* 0x8000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134218240 /* 0x8000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134218752 /* 0x8000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134219776 /* 0x8000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134221824 /* 0x8001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134225920 /* 0x8002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134234112 /* 0x8004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134250496 /* 0x8008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134283264 /* 0x8010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134348800 /* 0x8020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134479872 /* 0x8040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {134742016 /* 0x8080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {135266304 /* 0x8100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {136314880 /* 0x8200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {138412032 /* 0x8400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {142606336 /* 0x8800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {150994944 /* 0x9000000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 24}} /* shli r3, r2, 24 */
- },
- {167772160 /* 0xa000000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {201326592 /* 0xc000000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {268435446 /* 0xffffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 25}, /* shli r4, r2, 25 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {268435447 /* 0xffffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435448 /* 0xffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435449 /* 0xffffff9 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {268435450 /* 0xffffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 27}, /* shli r3, r1, 27 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {268435451 /* 0xffffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435452 /* 0xffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435453 /* 0xffffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435454 /* 0xffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {268435455 /* 0xfffffff */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {268435456 /* 0x10000000 */ ,
- {{6, 1, 28}} /* shli r2, r1, 28 */
- },
- {268435457 /* 0x10000001 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {268435458 /* 0x10000002 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {268435459 /* 0x10000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435460 /* 0x10000004 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {268435461 /* 0x10000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435462 /* 0x10000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {268435463 /* 0x10000007 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {268435464 /* 0x10000008 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {268435465 /* 0x10000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435466 /* 0x1000000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {268435472 /* 0x10000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435488 /* 0x10000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435520 /* 0x10000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435584 /* 0x10000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435712 /* 0x10000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268435968 /* 0x10000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268436480 /* 0x10000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268437504 /* 0x10000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268439552 /* 0x10001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268443648 /* 0x10002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268451840 /* 0x10004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268468224 /* 0x10008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268500992 /* 0x10010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268566528 /* 0x10020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268697600 /* 0x10040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {268959744 /* 0x10080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {269484032 /* 0x10100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {270532608 /* 0x10200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {272629760 /* 0x10400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {276824064 /* 0x10800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {285212672 /* 0x11000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {301989888 /* 0x12000000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 25}} /* shli r3, r2, 25 */
- },
- {335544320 /* 0x14000000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {402653184 /* 0x18000000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {536870902 /* 0x1ffffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 26}, /* shli r4, r2, 26 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {536870903 /* 0x1ffffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870904 /* 0x1ffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870905 /* 0x1ffffff9 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {536870906 /* 0x1ffffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 28}, /* shli r3, r1, 28 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {536870907 /* 0x1ffffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870908 /* 0x1ffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870909 /* 0x1ffffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870910 /* 0x1ffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {536870911 /* 0x1fffffff */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {536870912 /* 0x20000000 */ ,
- {{6, 1, 29}} /* shli r2, r1, 29 */
- },
- {536870913 /* 0x20000001 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {536870914 /* 0x20000002 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {536870915 /* 0x20000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870916 /* 0x20000004 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {536870917 /* 0x20000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870918 /* 0x20000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {536870919 /* 0x20000007 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {536870920 /* 0x20000008 */ ,
- {{6, 1, 29}, /* shli r2, r1, 29 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {536870921 /* 0x20000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870922 /* 0x2000000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {536870928 /* 0x20000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870944 /* 0x20000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536870976 /* 0x20000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871040 /* 0x20000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871168 /* 0x20000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871424 /* 0x20000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536871936 /* 0x20000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536872960 /* 0x20000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536875008 /* 0x20001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536879104 /* 0x20002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536887296 /* 0x20004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536903680 /* 0x20008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {536936448 /* 0x20010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537001984 /* 0x20020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537133056 /* 0x20040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537395200 /* 0x20080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {537919488 /* 0x20100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {538968064 /* 0x20200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {541065216 /* 0x20400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {545259520 /* 0x20800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {553648128 /* 0x21000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {570425344 /* 0x22000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {603979776 /* 0x24000000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 26}} /* shli r3, r2, 26 */
- },
- {671088640 /* 0x28000000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {805306368 /* 0x30000000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {1073741814 /* 0x3ffffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 27}, /* shli r4, r2, 27 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {1073741815 /* 0x3ffffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741816 /* 0x3ffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741817 /* 0x3ffffff9 */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {1073741818 /* 0x3ffffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 29}, /* shli r3, r1, 29 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {1073741819 /* 0x3ffffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741820 /* 0x3ffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741821 /* 0x3ffffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741822 /* 0x3ffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {1073741823 /* 0x3fffffff */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- },
- {1073741824 /* 0x40000000 */ ,
- {{6, 1, 30}} /* shli r2, r1, 30 */
- },
- {1073741825 /* 0x40000001 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {1, 1, 2}} /* add r3, r1, r2 */
- },
- {1073741826 /* 0x40000002 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {3, 1, 2}} /* s1a r3, r1, r2 */
- },
- {1073741827 /* 0x40000003 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741828 /* 0x40000004 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {4, 1, 2}} /* s2a r3, r1, r2 */
- },
- {1073741829 /* 0x40000005 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741830 /* 0x40000006 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {1073741831 /* 0x40000007 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 1, 3}} /* s3a r4, r1, r3 */
- },
- {1073741832 /* 0x40000008 */ ,
- {{6, 1, 30}, /* shli r2, r1, 30 */
- {5, 1, 2}} /* s3a r3, r1, r2 */
- },
- {1073741833 /* 0x40000009 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741834 /* 0x4000000a */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {3, 2, 3}} /* s1a r4, r2, r3 */
- },
- {1073741840 /* 0x40000010 */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741856 /* 0x40000020 */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741888 /* 0x40000040 */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073741952 /* 0x40000080 */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073742080 /* 0x40000100 */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073742336 /* 0x40000200 */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073742848 /* 0x40000400 */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073743872 /* 0x40000800 */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073745920 /* 0x40001000 */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073750016 /* 0x40002000 */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073758208 /* 0x40004000 */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073774592 /* 0x40008000 */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073807360 /* 0x40010000 */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1073872896 /* 0x40020000 */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1074003968 /* 0x40040000 */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1074266112 /* 0x40080000 */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1074790400 /* 0x40100000 */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1075838976 /* 0x40200000 */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1077936128 /* 0x40400000 */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1082130432 /* 0x40800000 */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1090519040 /* 0x41000000 */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1107296256 /* 0x42000000 */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1140850688 /* 0x44000000 */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {1, 2, 3}} /* add r4, r2, r3 */
- },
- {1207959552 /* 0x48000000 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 2, 27}} /* shli r3, r2, 27 */
- },
- {1342177280 /* 0x50000000 */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 2, 28}} /* shli r3, r2, 28 */
- },
- {1610612735 /* 0x5fffffff */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 29}, /* shli r3, r2, 29 */
- {2, 3, 1}} /* sub r4, r3, r1 */
- },
- {1610612736 /* 0x60000000 */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 2, 29}} /* shli r3, r2, 29 */
- },
- {1879048191 /* 0x6fffffff */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 3}, /* shli r4, r2, 3 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2013265919 /* 0x77ffffff */ ,
- {{6, 1, 27}, /* shli r2, r1, 27 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 4}, /* shli r4, r2, 4 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2080374783 /* 0x7bffffff */ ,
- {{6, 1, 26}, /* shli r2, r1, 26 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 5}, /* shli r4, r2, 5 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2113929215 /* 0x7dffffff */ ,
- {{6, 1, 25}, /* shli r2, r1, 25 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 6}, /* shli r4, r2, 6 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2130706431 /* 0x7effffff */ ,
- {{6, 1, 24}, /* shli r2, r1, 24 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 7}, /* shli r4, r2, 7 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2139095039 /* 0x7f7fffff */ ,
- {{6, 1, 23}, /* shli r2, r1, 23 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 8}, /* shli r4, r2, 8 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2143289343 /* 0x7fbfffff */ ,
- {{6, 1, 22}, /* shli r2, r1, 22 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 9}, /* shli r4, r2, 9 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2145386495 /* 0x7fdfffff */ ,
- {{6, 1, 21}, /* shli r2, r1, 21 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 10}, /* shli r4, r2, 10 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2146435071 /* 0x7fefffff */ ,
- {{6, 1, 20}, /* shli r2, r1, 20 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 11}, /* shli r4, r2, 11 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2146959359 /* 0x7ff7ffff */ ,
- {{6, 1, 19}, /* shli r2, r1, 19 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 12}, /* shli r4, r2, 12 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147221503 /* 0x7ffbffff */ ,
- {{6, 1, 18}, /* shli r2, r1, 18 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 13}, /* shli r4, r2, 13 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147352575 /* 0x7ffdffff */ ,
- {{6, 1, 17}, /* shli r2, r1, 17 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 14}, /* shli r4, r2, 14 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147418111 /* 0x7ffeffff */ ,
- {{6, 1, 16}, /* shli r2, r1, 16 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 15}, /* shli r4, r2, 15 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147450879 /* 0x7fff7fff */ ,
- {{6, 1, 15}, /* shli r2, r1, 15 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 16}, /* shli r4, r2, 16 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147467263 /* 0x7fffbfff */ ,
- {{6, 1, 14}, /* shli r2, r1, 14 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 17}, /* shli r4, r2, 17 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147475455 /* 0x7fffdfff */ ,
- {{6, 1, 13}, /* shli r2, r1, 13 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 18}, /* shli r4, r2, 18 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147479551 /* 0x7fffefff */ ,
- {{6, 1, 12}, /* shli r2, r1, 12 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 19}, /* shli r4, r2, 19 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147481599 /* 0x7ffff7ff */ ,
- {{6, 1, 11}, /* shli r2, r1, 11 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 20}, /* shli r4, r2, 20 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147482623 /* 0x7ffffbff */ ,
- {{6, 1, 10}, /* shli r2, r1, 10 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 21}, /* shli r4, r2, 21 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483135 /* 0x7ffffdff */ ,
- {{6, 1, 9}, /* shli r2, r1, 9 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 22}, /* shli r4, r2, 22 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483391 /* 0x7ffffeff */ ,
- {{6, 1, 8}, /* shli r2, r1, 8 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 23}, /* shli r4, r2, 23 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483519 /* 0x7fffff7f */ ,
- {{6, 1, 7}, /* shli r2, r1, 7 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 24}, /* shli r4, r2, 24 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483583 /* 0x7fffffbf */ ,
- {{6, 1, 6}, /* shli r2, r1, 6 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 25}, /* shli r4, r2, 25 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483615 /* 0x7fffffdf */ ,
- {{6, 1, 5}, /* shli r2, r1, 5 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 26}, /* shli r4, r2, 26 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483631 /* 0x7fffffef */ ,
- {{6, 1, 4}, /* shli r2, r1, 4 */
- {1, 1, 2}, /* add r3, r1, r2 */
- {6, 2, 27}, /* shli r4, r2, 27 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483638 /* 0x7ffffff6 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {3, 1, 2}, /* s1a r3, r1, r2 */
- {6, 2, 28}, /* shli r4, r2, 28 */
- {2, 4, 3}} /* sub r5, r4, r3 */
- },
- {2147483639 /* 0x7ffffff7 */ ,
- {{5, 1, 1}, /* s3a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483640 /* 0x7ffffff8 */ ,
- {{6, 1, 3}, /* shli r2, r1, 3 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483641 /* 0x7ffffff9 */ ,
- {{6, 1, 28}, /* shli r2, r1, 28 */
- {2, 2, 1}, /* sub r3, r2, r1 */
- {5, 3, 1}} /* s3a r4, r3, r1 */
- },
- {2147483642 /* 0x7ffffffa */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 30}, /* shli r3, r1, 30 */
- {2, 3, 2}, /* sub r4, r3, r2 */
- {6, 4, 1}} /* shli r5, r4, 1 */
- },
- {2147483643 /* 0x7ffffffb */ ,
- {{4, 1, 1}, /* s2a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483644 /* 0x7ffffffc */ ,
- {{6, 1, 2}, /* shli r2, r1, 2 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483645 /* 0x7ffffffd */ ,
- {{3, 1, 1}, /* s1a r2, r1, r1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483646 /* 0x7ffffffe */ ,
- {{6, 1, 1}, /* shli r2, r1, 1 */
- {6, 1, 31}, /* shli r3, r1, 31 */
- {2, 3, 2}} /* sub r4, r3, r2 */
- },
- {2147483647 /* 0x7fffffff */ ,
- {{6, 1, 31}, /* shli r2, r1, 31 */
- {2, 2, 1}} /* sub r3, r2, r1 */
- }
-};
-
-const int tilepro_multiply_insn_seq_table_size =
- (int) (sizeof tilepro_multiply_insn_seq_table
- / sizeof tilepro_multiply_insn_seq_table[0]);
diff --git a/gcc/config/tilepro/predicates.md b/gcc/config/tilepro/predicates.md
deleted file mode 100644
index bc368c0..0000000
--- a/gcc/config/tilepro/predicates.md
+++ /dev/null
@@ -1,258 +0,0 @@
-;; Predicate definitions for Tilera TILEPro chip.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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/>.
-
-;; Return true if OP is the zero constant for MODE.
-(define_predicate "const_zero_operand"
- (and (match_code "const_int,const_double,const_vector")
- (match_test "op == CONST0_RTX (mode)")))
-
-;; Returns true if OP is either the constant zero or a register.
-(define_predicate "reg_or_0_operand"
- (and (ior (match_operand 0 "register_operand")
- (match_operand 0 "const_zero_operand"))
- (match_test "GET_MODE_SIZE (mode) <= UNITS_PER_WORD")))
-
-; Return 1 if OP is a network register identifier.
-(define_predicate "netreg_operand"
- (and (match_code "const_int")
- (match_test "IN_RANGE (INTVAL (op), 0, 6)")))
-
-; Return 1 if OP is an unsigned 5-bit constant.
-(define_predicate "u5bit_cint_operand"
- (and (match_code "const_int")
- (match_test "INTVAL (op) == (INTVAL (op) & 0x1F)")))
-
-;; Return 1 if OP is an unsigned 16-bit constant.
-(define_predicate "u16bit_cint_operand"
- (and (match_code "const_int")
- (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 16)")))
-
-;; Return 1 if OP is a signed 8-bit constant.
-(define_predicate "s8bit_cint_operand"
- (and (match_code "const_int")
- (match_test "satisfies_constraint_I (op)")))
-
-;; Return 1 if OP is a signed 16-bit constant.
-(define_predicate "s16bit_cint_operand"
- (and (match_code "const_int")
- (match_test "satisfies_constraint_J (op)")))
-
-;; Return 1 if OP is a nonzero integer constant whose low 16 bits are zero.
-(define_predicate "auli_cint_operand"
- (and (match_code "const_int")
- (match_test "satisfies_constraint_K (op)")))
-
-;; Return 1 if OP is an unsigned 15-bit constant.
-(define_predicate "u15bit_cint_operand"
- (and (match_code "const_int")
- (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 15)")))
-
-;; Return 1 if OP is a constant or any register.
-(define_predicate "reg_or_cint_operand"
- (ior (match_operand 0 "register_operand")
- (match_operand 0 "const_int_operand")))
-
-;; Return 1 if OP is a 4-element vector constant with identical signed
-;; 8-bit elements or any register.
-(define_predicate "reg_or_v4s8bit_operand"
- (ior (match_operand 0 "register_operand")
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 4
- && (satisfies_constraint_I
- (unwrap_const_vec_duplicate (op)))"))))
-
-;; Return 1 if OP is a 2-element vector constant with identical signed
-;; 8-bit elements or any register.
-(define_predicate "reg_or_v2s8bit_operand"
- (ior (match_operand 0 "register_operand")
- (and (match_code "const_vector")
- (match_test "CONST_VECTOR_NUNITS (op) == 2
- && (satisfies_constraint_I
- (unwrap_const_vec_duplicate (op)))"))))
-
-;; Return 1 if the operand is a valid second operand to an add insn.
-(define_predicate "add_operand"
- (if_then_else (match_code "const_int")
- (match_test "satisfies_constraint_J (op) || satisfies_constraint_K (op)")
- (match_operand 0 "register_operand")))
-
-;; Return 1 if the operand is a register or signed 8-bit immediate operand.
-(define_predicate "reg_or_s8bit_operand"
- (if_then_else (match_code "const_int")
- (match_test "satisfies_constraint_I (op)")
- (match_operand 0 "register_operand")))
-
-;; Return 1 for an operand suitable for ANDing with a register.
-(define_predicate "and_operand"
- (if_then_else (match_code "const_int")
- (match_test "satisfies_constraint_I (op) || satisfies_constraint_M (op)")
- (match_operand 0 "register_operand")))
-
-;; Return 1 if the operand is a register or unsigned 5-bit immediate operand.
-(define_predicate "reg_or_u5bit_operand"
- (if_then_else (match_code "const_int")
- (match_test "INTVAL (op) == (INTVAL (op) & 0x1F)")
- (match_operand 0 "register_operand")))
-
-; Return 1 if the operand is 2, 4 or 8.
-(define_predicate "cint_248_operand"
- (and (match_code "const_int")
- (match_test
- "INTVAL (op) == 2 || INTVAL (op) == 4 || INTVAL (op) == 8")))
-
-
-;; Return true if OP is a TLS symbolic operand.
-(define_predicate "tls_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) != TLS_MODEL_NONE")))
-
-;; Return true if OP is a symbolic operand for the TLS Global Dynamic model.
-(define_predicate "tls_gd_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_GLOBAL_DYNAMIC")))
-
-;; Return true if OP is a symbolic operand for the TLS Local Dynamic model.
-(define_predicate "tls_ld_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_DYNAMIC")))
-
-;; Return true if OP is a symbolic operand that can be used for the
-;; TLS Initial Exec model.
-(define_predicate "tls_ie_symbolic_operand"
- (and (match_code "symbol_ref")
- (ior (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_INITIAL_EXEC")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC"))))
-
-;; Return true if OP is a symbolic operand for the TLS Local Exec model.
-(define_predicate "tls_le_symbolic_operand"
- (and (match_code "symbol_ref")
- (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC")))
-
-;; Returns true if OP is any general operand except for an
-;; auto-incrementing address operand.
-(define_predicate "nonautoinc_operand"
- (and (match_operand 0 "general_operand")
- (not (ior (match_code "pre_dec") (match_code "pre_inc")
- (match_code "post_dec") (match_code "post_inc")
- (match_code "post_modify") (match_code "pre_modify")))))
-
-;; Returns true if OP is a non-auto-incrementing memory operand.
-(define_predicate "nonautoincmem_operand"
- (match_operand 0 "memory_operand")
-{
- return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
-})
-
-;; Returns true if OP is a non-auto-incrementing memory, general
-;; operand.
-(define_predicate "nonautoincmem_general_operand"
- (match_operand 0 "general_operand")
-{
- if (memory_operand (op, mode))
- return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
- else
- return true;
-})
-
-;; Returns true if OP is a non-auto-incrementing memory, non-immediate
-;; operand.
-(define_predicate "nonautoincmem_nonimmediate_operand"
- (match_operand 0 "nonimmediate_operand")
-{
- if (memory_operand (op, mode))
- return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
- else
- return true;
-})
-
-;; Return true if OP is a valid operand for the source of a move insn.
-(define_predicate "move_operand"
- (match_operand 0 "general_operand")
-{
- /* If both modes are non-void they must be the same. */
- if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))
- return false;
-
- if (GET_MODE_SIZE (mode) > 4)
- return false;
-
- switch (GET_CODE (op))
- {
- case CONST_INT:
- return (satisfies_constraint_J (op)
- || satisfies_constraint_K (op)
- || satisfies_constraint_N (op)
- || satisfies_constraint_P (op));
-
- case HIGH:
- return true;
-
- case MEM:
- return memory_address_p (mode, XEXP (op, 0));
-
- default:
- return register_operand (op, mode);
- }
-})
-
-;; Returns 1 if OP is a symbolic operand, i.e. a symbol_ref or a label_ref,
-;; possibly with an offset.
-(define_predicate "symbolic_operand"
- (ior (match_code "symbol_ref,label_ref")
- (and (match_code "const")
- (match_test "GET_CODE (XEXP (op,0)) == PLUS
- && (GET_CODE (XEXP (XEXP (op,0), 0)) == SYMBOL_REF
- || GET_CODE (XEXP (XEXP (op,0), 0)) == LABEL_REF)
- && CONST_INT_P (XEXP (XEXP (op,0), 1))"))))
-
-;; Returns 1 if OP is a symbolic operand, or a const unspec wrapper
-;; representing a got reference, a tls reference, or pc-relative
-;; reference.
-(define_predicate "const_symbolic_operand"
- (ior (match_operand 0 "symbolic_operand")
- (and (match_code "const")
- (match_test "GET_CODE (XEXP (op,0)) == UNSPEC")
- (ior (match_test "XINT (XEXP (op,0), 1) == UNSPEC_GOT16_SYM")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_GOT32_SYM")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_PCREL_SYM")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_TLS_GD")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_TLS_IE")
- (match_test "XINT (XEXP (op,0), 1) == UNSPEC_TLS_LE")))))
-
-;; Return true if OP is an address suitable for a call insn.
-;; Call insn on TILE can take a PC-relative constant address
-;; or any regular memory address.
-(define_predicate "call_address_operand"
- (ior (match_operand 0 "symbolic_operand")
- (match_test "memory_address_p (Pmode, op)")))
-
-;; Return true if OP is an operand suitable for a call insn.
-(define_predicate "call_operand"
- (and (match_code "mem")
- (match_test "call_address_operand (XEXP (op, 0), mode)")))
-
-;; Return 1 if OP is a signed comparison operation.
-;; We can use these directly in compares against zero.
-(define_predicate "signed_comparison_operator"
- (match_code "eq,ne,le,lt,ge,gt"))
-
-;; Return 1 if OP is a equal or not-equal operation.
-(define_predicate "eqne_operator"
- (match_code "eq,ne"))
diff --git a/gcc/config/tilepro/t-tilepro b/gcc/config/tilepro/t-tilepro
deleted file mode 100644
index f64fd12..0000000
--- a/gcc/config/tilepro/t-tilepro
+++ /dev/null
@@ -1,15 +0,0 @@
-tilepro-c.o: $(srcdir)/config/tilepro/tilepro-c.cc \
- $(CONFIG_H) $(SYSTEM_H) coretypes.h $(MACHMODE_H) \
- $(TM_H) $(TM_P_H) $(CPPLIB_H) $(TREE_H) $(C_COMMON_H)
- $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
-
-$(srcdir)/config/tilepro/mul-tables.cc: \
- $(srcdir)/config/tilepro/gen-mul-tables.cc
- $(CXX_FOR_BUILD) $(BUILD_CPPFLAGS) -O2 -DTILEPRO \
- -o gen-mul-tables $<;
- ./gen-mul-tables > $@
-
-mul-tables.o: $(srcdir)/config/tilepro/mul-tables.cc \
- $(CONFIG_H) $(SYSTEM_H) coretypes.h $(EXPR_H) $(OPTABS_H) \
- $(srcdir)/config/tilepro/tilepro-multiply.h
- $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff --git a/gcc/config/tilepro/tilepro-builtins.h b/gcc/config/tilepro/tilepro-builtins.h
deleted file mode 100644
index f18bdb5..0000000
--- a/gcc/config/tilepro/tilepro-builtins.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Enum for builtin intrinsics for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef GCC_TILEPRO_BUILTINS_H
-#define GCC_TILEPRO_BUILTINS_H
-
-enum tilepro_builtin
-{
- TILEPRO_INSN_ADD,
- TILEPRO_INSN_ADDB,
- TILEPRO_INSN_ADDBS_U,
- TILEPRO_INSN_ADDH,
- TILEPRO_INSN_ADDHS,
- TILEPRO_INSN_ADDIB,
- TILEPRO_INSN_ADDIH,
- TILEPRO_INSN_ADDLIS,
- TILEPRO_INSN_ADDS,
- TILEPRO_INSN_ADIFFB_U,
- TILEPRO_INSN_ADIFFH,
- TILEPRO_INSN_AND,
- TILEPRO_INSN_AULI,
- TILEPRO_INSN_AVGB_U,
- TILEPRO_INSN_AVGH,
- TILEPRO_INSN_BITX,
- TILEPRO_INSN_BYTEX,
- TILEPRO_INSN_CLZ,
- TILEPRO_INSN_CRC32_32,
- TILEPRO_INSN_CRC32_8,
- TILEPRO_INSN_CTZ,
- TILEPRO_INSN_DRAIN,
- TILEPRO_INSN_DTLBPR,
- TILEPRO_INSN_DWORD_ALIGN,
- TILEPRO_INSN_FINV,
- TILEPRO_INSN_FLUSH,
- TILEPRO_INSN_FNOP,
- TILEPRO_INSN_ICOH,
- TILEPRO_INSN_ILL,
- TILEPRO_INSN_INFO,
- TILEPRO_INSN_INFOL,
- TILEPRO_INSN_INTHB,
- TILEPRO_INSN_INTHH,
- TILEPRO_INSN_INTLB,
- TILEPRO_INSN_INTLH,
- TILEPRO_INSN_INV,
- TILEPRO_INSN_LB,
- TILEPRO_INSN_LB_U,
- TILEPRO_INSN_LH,
- TILEPRO_INSN_LH_U,
- TILEPRO_INSN_LNK,
- TILEPRO_INSN_LW,
- TILEPRO_INSN_LW_NA,
- TILEPRO_INSN_LB_L2,
- TILEPRO_INSN_LB_U_L2,
- TILEPRO_INSN_LH_L2,
- TILEPRO_INSN_LH_U_L2,
- TILEPRO_INSN_LW_L2,
- TILEPRO_INSN_LW_NA_L2,
- TILEPRO_INSN_LB_MISS,
- TILEPRO_INSN_LB_U_MISS,
- TILEPRO_INSN_LH_MISS,
- TILEPRO_INSN_LH_U_MISS,
- TILEPRO_INSN_LW_MISS,
- TILEPRO_INSN_LW_NA_MISS,
- TILEPRO_INSN_MAXB_U,
- TILEPRO_INSN_MAXH,
- TILEPRO_INSN_MAXIB_U,
- TILEPRO_INSN_MAXIH,
- TILEPRO_INSN_MF,
- TILEPRO_INSN_MFSPR,
- TILEPRO_INSN_MINB_U,
- TILEPRO_INSN_MINH,
- TILEPRO_INSN_MINIB_U,
- TILEPRO_INSN_MINIH,
- TILEPRO_INSN_MM,
- TILEPRO_INSN_MNZ,
- TILEPRO_INSN_MNZB,
- TILEPRO_INSN_MNZH,
- TILEPRO_INSN_MOVE,
- TILEPRO_INSN_MOVELIS,
- TILEPRO_INSN_MTSPR,
- TILEPRO_INSN_MULHH_SS,
- TILEPRO_INSN_MULHH_SU,
- TILEPRO_INSN_MULHH_UU,
- TILEPRO_INSN_MULHHA_SS,
- TILEPRO_INSN_MULHHA_SU,
- TILEPRO_INSN_MULHHA_UU,
- TILEPRO_INSN_MULHHSA_UU,
- TILEPRO_INSN_MULHL_SS,
- TILEPRO_INSN_MULHL_SU,
- TILEPRO_INSN_MULHL_US,
- TILEPRO_INSN_MULHL_UU,
- TILEPRO_INSN_MULHLA_SS,
- TILEPRO_INSN_MULHLA_SU,
- TILEPRO_INSN_MULHLA_US,
- TILEPRO_INSN_MULHLA_UU,
- TILEPRO_INSN_MULHLSA_UU,
- TILEPRO_INSN_MULLL_SS,
- TILEPRO_INSN_MULLL_SU,
- TILEPRO_INSN_MULLL_UU,
- TILEPRO_INSN_MULLLA_SS,
- TILEPRO_INSN_MULLLA_SU,
- TILEPRO_INSN_MULLLA_UU,
- TILEPRO_INSN_MULLLSA_UU,
- TILEPRO_INSN_MVNZ,
- TILEPRO_INSN_MVZ,
- TILEPRO_INSN_MZ,
- TILEPRO_INSN_MZB,
- TILEPRO_INSN_MZH,
- TILEPRO_INSN_NAP,
- TILEPRO_INSN_NOP,
- TILEPRO_INSN_NOR,
- TILEPRO_INSN_OR,
- TILEPRO_INSN_PACKBS_U,
- TILEPRO_INSN_PACKHB,
- TILEPRO_INSN_PACKHS,
- TILEPRO_INSN_PACKLB,
- TILEPRO_INSN_PCNT,
- TILEPRO_INSN_PREFETCH,
- TILEPRO_INSN_PREFETCH_L1,
- TILEPRO_INSN_RL,
- TILEPRO_INSN_S1A,
- TILEPRO_INSN_S2A,
- TILEPRO_INSN_S3A,
- TILEPRO_INSN_SADAB_U,
- TILEPRO_INSN_SADAH,
- TILEPRO_INSN_SADAH_U,
- TILEPRO_INSN_SADB_U,
- TILEPRO_INSN_SADH,
- TILEPRO_INSN_SADH_U,
- TILEPRO_INSN_SB,
- TILEPRO_INSN_SEQ,
- TILEPRO_INSN_SEQB,
- TILEPRO_INSN_SEQH,
- TILEPRO_INSN_SEQIB,
- TILEPRO_INSN_SEQIH,
- TILEPRO_INSN_SH,
- TILEPRO_INSN_SHL,
- TILEPRO_INSN_SHLB,
- TILEPRO_INSN_SHLH,
- TILEPRO_INSN_SHLIB,
- TILEPRO_INSN_SHLIH,
- TILEPRO_INSN_SHR,
- TILEPRO_INSN_SHRB,
- TILEPRO_INSN_SHRH,
- TILEPRO_INSN_SHRIB,
- TILEPRO_INSN_SHRIH,
- TILEPRO_INSN_SLT,
- TILEPRO_INSN_SLT_U,
- TILEPRO_INSN_SLTB,
- TILEPRO_INSN_SLTB_U,
- TILEPRO_INSN_SLTE,
- TILEPRO_INSN_SLTE_U,
- TILEPRO_INSN_SLTEB,
- TILEPRO_INSN_SLTEB_U,
- TILEPRO_INSN_SLTEH,
- TILEPRO_INSN_SLTEH_U,
- TILEPRO_INSN_SLTH,
- TILEPRO_INSN_SLTH_U,
- TILEPRO_INSN_SLTIB,
- TILEPRO_INSN_SLTIB_U,
- TILEPRO_INSN_SLTIH,
- TILEPRO_INSN_SLTIH_U,
- TILEPRO_INSN_SNE,
- TILEPRO_INSN_SNEB,
- TILEPRO_INSN_SNEH,
- TILEPRO_INSN_SRA,
- TILEPRO_INSN_SRAB,
- TILEPRO_INSN_SRAH,
- TILEPRO_INSN_SRAIB,
- TILEPRO_INSN_SRAIH,
- TILEPRO_INSN_SUB,
- TILEPRO_INSN_SUBB,
- TILEPRO_INSN_SUBBS_U,
- TILEPRO_INSN_SUBH,
- TILEPRO_INSN_SUBHS,
- TILEPRO_INSN_SUBS,
- TILEPRO_INSN_SW,
- TILEPRO_INSN_TBLIDXB0,
- TILEPRO_INSN_TBLIDXB1,
- TILEPRO_INSN_TBLIDXB2,
- TILEPRO_INSN_TBLIDXB3,
- TILEPRO_INSN_TNS,
- TILEPRO_INSN_WH64,
- TILEPRO_INSN_XOR,
- TILEPRO_NETWORK_BARRIER,
- TILEPRO_IDN0_RECEIVE,
- TILEPRO_IDN1_RECEIVE,
- TILEPRO_IDN_SEND,
- TILEPRO_SN_RECEIVE,
- TILEPRO_SN_SEND,
- TILEPRO_UDN0_RECEIVE,
- TILEPRO_UDN1_RECEIVE,
- TILEPRO_UDN2_RECEIVE,
- TILEPRO_UDN3_RECEIVE,
- TILEPRO_UDN_SEND,
- TILEPRO_BUILTIN_max
-};
-
-#endif /* !GCC_TILEPRO_BUILTINS_H */
diff --git a/gcc/config/tilepro/tilepro-c.cc b/gcc/config/tilepro/tilepro-c.cc
deleted file mode 100644
index ed91e710..0000000
--- a/gcc/config/tilepro/tilepro-c.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Definitions of C specific functions for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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 IN_TARGET_CODE 1
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "c-family/c-common.h"
-
-/* copy defines in c-cppbuiltin.cc */
-# define builtin_define(TXT) cpp_define (pfile, TXT)
-# define builtin_assert(TXT) cpp_assert (pfile, TXT)
-
-
-/* Implement TARGET_CPU_CPP_BUILTINS. */
-void
-tilepro_cpu_cpp_builtins (struct cpp_reader *pfile)
-{
- builtin_define ("__tile__");
- builtin_define ("__tilepro__");
- builtin_assert ("cpu=tile");
- builtin_assert ("machine=tile");
- builtin_define ("__tile_chip__=1");
- builtin_define ("__tile_chip_rev__=0");
-
- builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
- builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
- builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
- builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
-
- TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
- GNU_USER_TARGET_OS_CPP_BUILTINS ();
-}
-
-
diff --git a/gcc/config/tilepro/tilepro-generic.md b/gcc/config/tilepro/tilepro-generic.md
deleted file mode 100644
index 438c4d9..0000000
--- a/gcc/config/tilepro/tilepro-generic.md
+++ /dev/null
@@ -1,107 +0,0 @@
-;; Scheduling description for Tilera TILEPro chip.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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 "tile")
-
-; Make the scheduling automaton an ndfa.
-(automata_option "ndfa")
-
-; Name the three pipes.
-(define_cpu_unit "X0" "tile")
-(define_cpu_unit "X1" "tile")
-(define_cpu_unit "Y0" "tile")
-(define_cpu_unit "Y1" "tile")
-(define_cpu_unit "Y2" "tile")
-
-(define_insn_reservation "X0" 1
- (eq_attr "type" "X0")
- "X0")
-
-(define_insn_reservation "X0_2cycle" 2
- (eq_attr "type" "X0_2cycle")
- "X0,nothing")
-
-(define_insn_reservation "X1" 1
- (eq_attr "type" "X1,X1_branch")
- "X1")
-
-(define_insn_reservation "X1_2cycle" 2
- (eq_attr "type" "X1_2cycle")
- "X1,nothing")
-
-(define_insn_reservation "X1_L2" 8
- (eq_attr "type" "X1_L2")
- "X1")
-
-(define_insn_reservation "X1_miss" 80
- (eq_attr "type" "X1_miss")
- "X1")
-
-(define_insn_reservation "X01" 1
- (eq_attr "type" "X01")
- "X0|X1")
-
-(define_insn_reservation "Y0" 1
- (eq_attr "type" "Y0")
- "Y0|X0")
-
-(define_insn_reservation "Y0_2cycle" 2
- (eq_attr "type" "Y0_2cycle")
- "Y0|X0,nothing")
-
-(define_insn_reservation "Y2" 1
- (eq_attr "type" "Y2")
- "Y2|X1")
-
-(define_insn_reservation "Y2_2cycle" 2
- (eq_attr "type" "Y2_2cycle")
- "Y2|X1,nothing")
-
-(define_insn_reservation "Y2_L2" 8
- (eq_attr "type" "Y2_L2")
- "Y2|X1")
-
-(define_insn_reservation "Y2_miss" 80
- (eq_attr "type" "Y2_miss")
- "Y2|X1")
-
-(define_insn_reservation "Y01" 1
- (eq_attr "type" "Y01")
- "Y0|Y1|X0|X1")
-
-(define_insn_reservation "nothing" 0
- (eq_attr "type" "nothing")
- "nothing")
-
-(define_insn_reservation "cannot_bundle" 1
- (eq_attr "type" "cannot_bundle")
- "X0+X1")
-
-(define_insn_reservation "cannot_bundle_3cycle" 3
- (eq_attr "type" "cannot_bundle_3cycle")
- "X0+X1")
-
-(define_insn_reservation "cannot_bundle_4cycle" 4
- (eq_attr "type" "cannot_bundle_4cycle")
- "X0+X1")
-
-
-; A bundle must be in either X format or Y format.
-(exclusion_set "X0,X1" "Y0,Y1,Y2")
diff --git a/gcc/config/tilepro/tilepro-modes.def b/gcc/config/tilepro/tilepro-modes.def
deleted file mode 100644
index 1647895..0000000
--- a/gcc/config/tilepro/tilepro-modes.def
+++ /dev/null
@@ -1,34 +0,0 @@
-/* TILEPro extra machine modes.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-/* Extra modes for handling struct returns in up to 10 registers. */
-INT_MODE (R3I, 12);
-INT_MODE (R5I, 20);
-INT_MODE (R6I, 24);
-INT_MODE (R7I, 28);
-INT_MODE (R8I, 32);
-INT_MODE (R9I, 36);
-INT_MODE (R10I, 40);
-
-/* Vector modes. */
-VECTOR_MODES (INT, 4); /* V4QI V2HI */
-VECTOR_MODE (INT, QI, 8); /* V8QI */
-VECTOR_MODE (INT, HI, 4); /* V4HI */
-VECTOR_MODE (INT, QI, 2); /* V2QI */
diff --git a/gcc/config/tilepro/tilepro-multiply.h b/gcc/config/tilepro/tilepro-multiply.h
deleted file mode 100644
index dde9048..0000000
--- a/gcc/config/tilepro/tilepro-multiply.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Header for constant multiple table for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef GCC_TILEPRO_MULTIPLY_H
-#define GCC_TILEPRO_MULTIPLY_H
-
-/* A node of a tilepro_multiply_insn_seq, corresponding to a single
- machine instruction such as 'add', 's1a', or an shl by a
- constant. */
-struct tilepro_multiply_insn_seq_entry
-{
- /* Which operation this node performs (e.g. an add or sub). Don't
- use this directly, call get_opcode() table to get a
- insn_code. */
- unsigned char compressed_opcode;
-
- /* The left-hand side of this expression tree.
- If equal to 0, it refers to 'zero'.
- If equal to 1, it refers to the original input to the multiply
- operation.
- Otherwise, subtract two and it is an index into the containing
- tilepro_multiply_insn_seq's 'op' array. Since it can only point
- to some value that has already been computed it will always point
- to an earlier entry in the array. */
- unsigned char lhs;
-
- /* This is like lhs, but for the right-hand side. However, for shift
- opcodes this is a shift count rather than an operand index. */
- unsigned char rhs;
-};
-
-/* Maximum size of op array. */
-#define tilepro_multiply_insn_seq_MAX_OPERATIONS 4
-
-/* This defines a DAG describing how to multiply by a constant in
- terms of one or more machine instructions. */
-struct tilepro_multiply_insn_seq
-{
- /* The constant factor by which this expression tree multiplies its
- input. */
- int multiplier;
-
- /* The nodes of the parse tree. These are ordered so that
- instructions can be emitted in the same order that they appear in
- this array. Entry entry in this array can only refer to earlier
- entries in the array. */
- struct tilepro_multiply_insn_seq_entry
- op[tilepro_multiply_insn_seq_MAX_OPERATIONS];
-
-};
-
-/* A mapping from the compressed opcode to the corresponding enum
- insn_code. */
-extern const enum insn_code tilepro_multiply_insn_seq_decode_opcode[];
-
-/* Table mapping constant int multipliers to an expression tree that
- efficiently performs that multiplication. This is sorted by its
- 'multiplier' field so a binary search can look for matches. */
-extern const struct tilepro_multiply_insn_seq
- tilepro_multiply_insn_seq_table[];
-
-/* The number of elements in multiply_insn_seq_table. */
-extern const int tilepro_multiply_insn_seq_table_size;
-
-#endif /* !GCC_TILEPRO_MULTIPLY_H */
diff --git a/gcc/config/tilepro/tilepro-protos.h b/gcc/config/tilepro/tilepro-protos.h
deleted file mode 100644
index ba09fdd..0000000
--- a/gcc/config/tilepro/tilepro-protos.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Prototypes of target machine for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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/>. */
-
-#ifndef GCC__TILEPRO_PROTOS_H
-#define GCC__TILEPRO_PROTOS_H
-
-
-extern void tilepro_init_expanders (void);
-extern bool tilepro_legitimate_pic_operand_p (rtx);
-extern rtx tilepro_simd_int (rtx, machine_mode);
-
-#ifdef RTX_CODE
-extern void split_di (rtx[], int, rtx[], rtx[]);
-extern bool tilepro_bitfield_operand_p (HOST_WIDE_INT, int *, int *);
-extern void tilepro_expand_set_const32 (rtx, rtx);
-extern bool tilepro_expand_mov (machine_mode, rtx *);
-extern void tilepro_expand_insv (rtx operands[4]);
-extern void tilepro_expand_unaligned_load (rtx, rtx, HOST_WIDE_INT,
- HOST_WIDE_INT, bool);
-extern void tilepro_expand_movmisalign (machine_mode, rtx *);
-extern bool tilepro_expand_addsi (rtx, rtx, rtx);
-extern void tilepro_allocate_stack (rtx, rtx);
-extern bool tilepro_expand_mulsi (rtx, rtx, rtx);
-extern void tilepro_expand_smulsi3_highpart (rtx, rtx, rtx);
-extern void tilepro_expand_umulsi3_highpart (rtx, rtx, rtx);
-
-extern bool tilepro_emit_setcc (rtx[], machine_mode);
-extern void tilepro_emit_conditional_branch (rtx[], machine_mode);
-extern rtx tilepro_emit_conditional_move (rtx);
-extern const char *tilepro_output_cbranch_with_opcode (rtx_insn *, rtx *,
- const char *,
- const char *, int,
- bool);
-extern const char *tilepro_output_cbranch (rtx_insn *, rtx *, bool);
-extern void tilepro_expand_tablejump (rtx, rtx);
-extern void tilepro_expand_builtin_vector_binop (rtx (*)(rtx, rtx, rtx),
- machine_mode, rtx,
- machine_mode, rtx, rtx,
- bool);
-#endif /* RTX_CODE */
-
-extern bool tilepro_can_use_return_insn_p (void);
-extern void tilepro_expand_prologue (void);
-extern void tilepro_expand_epilogue (bool);
-extern int tilepro_initial_elimination_offset (int, int);
-extern rtx tilepro_return_addr (int, rtx);
-extern rtx tilepro_eh_return_handler_rtx (void);
-extern int tilepro_adjust_insn_length (rtx_insn *, int);
-
-extern int tilepro_asm_preferred_eh_data_format (int, int);
-extern void tilepro_final_prescan_insn (rtx_insn *);
-extern const char *tilepro_asm_output_opcode (FILE *, const char *);
-extern void tilepro_function_profiler (FILE *, int);
-
-/* Declare functions in tile-c.c */
-
-extern void tilepro_cpu_cpp_builtins (struct cpp_reader *);
-
-#endif /* GCC_TILEPRO_PROTOS_H */
diff --git a/gcc/config/tilepro/tilepro.cc b/gcc/config/tilepro/tilepro.cc
deleted file mode 100644
index 35a6b8c..0000000
--- a/gcc/config/tilepro/tilepro.cc
+++ /dev/null
@@ -1,5083 +0,0 @@
-/* Subroutines used for code generation on the Tilera TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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 IN_TARGET_CODE 1
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "backend.h"
-#include "target.h"
-#include "rtl.h"
-#include "tree.h"
-#include "gimple.h"
-#include "df.h"
-#include "memmodel.h"
-#include "tm_p.h"
-#include "stringpool.h"
-#include "attribs.h"
-#include "expmed.h"
-#include "optabs.h"
-#include "regs.h"
-#include "emit-rtl.h"
-#include "recog.h"
-#include "diagnostic.h"
-#include "output.h"
-#include "insn-attr.h"
-#include "alias.h"
-#include "explow.h"
-#include "calls.h"
-#include "varasm.h"
-#include "expr.h"
-#include "langhooks.h"
-#include "cfgrtl.h"
-#include "tm-constrs.h"
-#include "dwarf2.h"
-#include "fold-const.h"
-#include "stor-layout.h"
-#include "gimplify.h"
-#include "tilepro-builtins.h"
-#include "tilepro-multiply.h"
-#include "builtins.h"
-
-/* This file should be included last. */
-#include "target-def.h"
-
-/* SYMBOL_REF for GOT */
-static GTY(()) rtx g_got_symbol = NULL;
-
-/* Report whether we're printing out the first address fragment of a
- POST_INC or POST_DEC memory reference, from TARGET_PRINT_OPERAND to
- TARGET_PRINT_OPERAND_ADDRESS. */
-static bool output_memory_autoinc_first;
-
-
-
-/* Option handling */
-
-/* Implement TARGET_OPTION_OVERRIDE. */
-static void
-tilepro_option_override (void)
-{
- /* When modulo scheduling is enabled, we still rely on regular
- scheduler for bundling. */
- if (flag_modulo_sched)
- flag_resched_modulo_sched = 1;
-}
-
-
-
-/* Implement TARGET_SCALAR_MODE_SUPPORTED_P. */
-static bool
-tilepro_scalar_mode_supported_p (scalar_mode mode)
-{
- switch (mode)
- {
- case E_QImode:
- case E_HImode:
- case E_SImode:
- case E_DImode:
- return true;
-
- case E_SFmode:
- case E_DFmode:
- return true;
-
- default:
- return false;
- }
-}
-
-
-/* Implement TARGET_VECTOR_MODE_SUPPORTED_P. */
-static bool
-tile_vector_mode_supported_p (machine_mode mode)
-{
- return mode == V4QImode || mode == V2HImode;
-}
-
-
-/* Implement TARGET_CANNOT_FORCE_CONST_MEM. */
-static bool
-tilepro_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED,
- rtx x ATTRIBUTE_UNUSED)
-{
- return true;
-}
-
-
-/* Implement TARGET_FUNCTION_OK_FOR_SIBCALL. */
-static bool
-tilepro_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
-{
- return decl != NULL;
-}
-
-
-/* Implement TARGET_PASS_BY_REFERENCE. Variable sized types are
- passed by reference. */
-static bool
-tilepro_pass_by_reference (cumulative_args_t, const function_arg_info &arg)
-{
- return (arg.type
- && TYPE_SIZE (arg.type)
- && TREE_CODE (TYPE_SIZE (arg.type)) != INTEGER_CST);
-}
-
-
-/* Implement TARGET_RETURN_IN_MEMORY. */
-static bool
-tilepro_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
-{
- return !IN_RANGE (int_size_in_bytes (type),
- 0, TILEPRO_NUM_RETURN_REGS * UNITS_PER_WORD);
-}
-
-
-/* Implement TARGET_FUNCTION_ARG_BOUNDARY. */
-static unsigned int
-tilepro_function_arg_boundary (machine_mode mode, const_tree type)
-{
- unsigned int alignment;
-
- alignment = type ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode);
- if (alignment < PARM_BOUNDARY)
- alignment = PARM_BOUNDARY;
- if (alignment > STACK_BOUNDARY)
- alignment = STACK_BOUNDARY;
- return alignment;
-}
-
-
-/* Implement TARGET_FUNCTION_ARG. */
-static rtx
-tilepro_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
-{
- CUMULATIVE_ARGS cum = *get_cumulative_args (cum_v);
- int byte_size = arg.promoted_size_in_bytes ();
- bool doubleword_aligned_p;
-
- if (cum >= TILEPRO_NUM_ARG_REGS)
- return NULL_RTX;
-
- /* See whether the argument has doubleword alignment. */
- doubleword_aligned_p =
- tilepro_function_arg_boundary (arg.mode, arg.type) > BITS_PER_WORD;
-
- if (doubleword_aligned_p)
- cum += cum & 1;
-
- /* The ABI does not allow parameters to be passed partially in reg
- and partially in stack. */
- if ((cum + (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
- > TILEPRO_NUM_ARG_REGS)
- return NULL_RTX;
-
- return gen_rtx_REG (arg.mode, cum);
-}
-
-
-/* Implement TARGET_FUNCTION_ARG_ADVANCE. */
-static void
-tilepro_function_arg_advance (cumulative_args_t cum_v,
- const function_arg_info &arg)
-{
- CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
-
- int byte_size = arg.promoted_size_in_bytes ();
- int word_size = (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
- bool doubleword_aligned_p;
-
- /* See whether the argument has doubleword alignment. */
- doubleword_aligned_p =
- tilepro_function_arg_boundary (arg.mode, arg.type) > BITS_PER_WORD;
-
- if (doubleword_aligned_p)
- *cum += *cum & 1;
-
- /* If the current argument does not fit in the pretend_args space,
- skip over it. */
- if (*cum < TILEPRO_NUM_ARG_REGS
- && *cum + word_size > TILEPRO_NUM_ARG_REGS)
- *cum = TILEPRO_NUM_ARG_REGS;
-
- *cum += word_size;
-}
-
-
-/* Implement TARGET_FUNCTION_VALUE. */
-static rtx
-tilepro_function_value (const_tree valtype, const_tree fn_decl_or_type,
- bool outgoing ATTRIBUTE_UNUSED)
-{
- machine_mode mode;
- int unsigned_p;
-
- mode = TYPE_MODE (valtype);
- unsigned_p = TYPE_UNSIGNED (valtype);
-
- mode = promote_function_mode (valtype, mode, &unsigned_p,
- fn_decl_or_type, 1);
-
- return gen_rtx_REG (mode, 0);
-}
-
-
-/* Implement TARGET_LIBCALL_VALUE. */
-static rtx
-tilepro_libcall_value (machine_mode mode,
- const_rtx fun ATTRIBUTE_UNUSED)
-{
- return gen_rtx_REG (mode, 0);
-}
-
-
-/* Implement FUNCTION_VALUE_REGNO_P. */
-static bool
-tilepro_function_value_regno_p (const unsigned int regno)
-{
- return regno < TILEPRO_NUM_RETURN_REGS;
-}
-
-
-/* Implement TARGET_BUILD_BUILTIN_VA_LIST. */
-static tree
-tilepro_build_builtin_va_list (void)
-{
- tree f_args, f_skip, record, type_decl;
- bool owp;
-
- record = lang_hooks.types.make_type (RECORD_TYPE);
-
- type_decl = build_decl (BUILTINS_LOCATION, TYPE_DECL,
- get_identifier ("__va_list_tag"), record);
-
- f_args = build_decl (BUILTINS_LOCATION, FIELD_DECL,
- get_identifier ("__args"), ptr_type_node);
- f_skip = build_decl (BUILTINS_LOCATION, FIELD_DECL,
- get_identifier ("__skip"), ptr_type_node);
-
- DECL_FIELD_CONTEXT (f_args) = record;
-
- DECL_FIELD_CONTEXT (f_skip) = record;
-
- TREE_CHAIN (record) = type_decl;
- TYPE_NAME (record) = type_decl;
- TYPE_FIELDS (record) = f_args;
- TREE_CHAIN (f_args) = f_skip;
-
- /* We know this is being padded and we want it too. It is an
- internal type so hide the warnings from the user. */
- owp = warn_padded;
- warn_padded = false;
-
- layout_type (record);
-
- warn_padded = owp;
-
- /* The correct type is an array type of one element. */
- return record;
-}
-
-
-/* Implement TARGET_EXPAND_BUILTIN_VA_START. */
-static void
-tilepro_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
-{
- tree f_args, f_skip;
- tree args, skip, t;
-
- f_args = TYPE_FIELDS (TREE_TYPE (valist));
- f_skip = TREE_CHAIN (f_args);
-
- args =
- build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
- skip =
- build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
-
- /* Find the __args area. */
- t = make_tree (TREE_TYPE (args), virtual_incoming_args_rtx);
- t = fold_build_pointer_plus_hwi (t,
- UNITS_PER_WORD *
- (crtl->args.info - TILEPRO_NUM_ARG_REGS));
-
- if (crtl->args.pretend_args_size > 0)
- t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
-
- t = build2 (MODIFY_EXPR, TREE_TYPE (args), args, t);
- TREE_SIDE_EFFECTS (t) = 1;
- expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-
- /* Find the __skip area. */
- t = make_tree (TREE_TYPE (skip), virtual_incoming_args_rtx);
- t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
- t = build2 (MODIFY_EXPR, TREE_TYPE (skip), skip, t);
- TREE_SIDE_EFFECTS (t) = 1;
- expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-}
-
-
-/* Implement TARGET_SETUP_INCOMING_VARARGS. */
-static void
-tilepro_setup_incoming_varargs (cumulative_args_t cum,
- const function_arg_info &arg,
- int *pretend_args, int no_rtl)
-{
- CUMULATIVE_ARGS local_cum = *get_cumulative_args (cum);
- int first_reg;
-
- /* The caller has advanced CUM up to, but not beyond, the last named
- argument. Advance a local copy of CUM past the last "real" named
- argument, to find out how many registers are left over. */
- targetm.calls.function_arg_advance (pack_cumulative_args (&local_cum), arg);
- first_reg = local_cum;
-
- if (local_cum < TILEPRO_NUM_ARG_REGS)
- {
- *pretend_args = UNITS_PER_WORD * (TILEPRO_NUM_ARG_REGS - first_reg);
-
- if (!no_rtl)
- {
- alias_set_type set = get_varargs_alias_set ();
- rtx tmp =
- gen_rtx_MEM (BLKmode, plus_constant (Pmode, \
- virtual_incoming_args_rtx,
- -STACK_POINTER_OFFSET -
- UNITS_PER_WORD *
- (TILEPRO_NUM_ARG_REGS -
- first_reg)));
- MEM_NOTRAP_P (tmp) = 1;
- set_mem_alias_set (tmp, set);
- move_block_from_reg (first_reg, tmp,
- TILEPRO_NUM_ARG_REGS - first_reg);
- }
- }
- else
- *pretend_args = 0;
-}
-
-
-/* Implement TARGET_GIMPLIFY_VA_ARG_EXPR. Gimplify va_arg by updating
- the va_list structure VALIST as required to retrieve an argument of
- type TYPE, and returning that argument.
-
- ret = va_arg(VALIST, TYPE);
-
- generates code equivalent to:
-
- paddedsize = (sizeof(TYPE) + 3) & -4;
- if ((VALIST.__args + paddedsize > VALIST.__skip)
- & (VALIST.__args <= VALIST.__skip))
- addr = VALIST.__skip + STACK_POINTER_OFFSET;
- else
- addr = VALIST.__args;
- VALIST.__args = addr + paddedsize;
- ret = *(TYPE *)addr; */
-static tree
-tilepro_gimplify_va_arg_expr (tree valist, tree type, gimple_seq * pre_p,
- gimple_seq * post_p ATTRIBUTE_UNUSED)
-{
- tree f_args, f_skip;
- tree args, skip;
- HOST_WIDE_INT size, rsize;
- tree addr, tmp;
- bool pass_by_reference_p;
-
- f_args = TYPE_FIELDS (va_list_type_node);
- f_skip = TREE_CHAIN (f_args);
-
- args =
- build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
- skip =
- build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
-
- addr = create_tmp_var (ptr_type_node, "va_arg");
-
- /* if an object is dynamically sized, a pointer to it is passed
- instead of the object itself. */
- pass_by_reference_p = pass_va_arg_by_reference (type);
-
- if (pass_by_reference_p)
- type = build_pointer_type (type);
-
- size = int_size_in_bytes (type);
- rsize = ((size + UNITS_PER_WORD - 1) / UNITS_PER_WORD) * UNITS_PER_WORD;
-
- /* If the alignment of the type is greater than the default for a
- parameter, align to STACK_BOUNDARY. */
- if (TYPE_ALIGN (type) > PARM_BOUNDARY)
- {
- /* Assert the only case we generate code for: when
- stack boundary = 2 * parm boundary. */
- gcc_assert (STACK_BOUNDARY == PARM_BOUNDARY * 2);
-
- tmp = build2 (BIT_AND_EXPR, sizetype,
- fold_convert (sizetype, unshare_expr (args)),
- size_int (PARM_BOUNDARY / 8));
- tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node,
- unshare_expr (args), tmp);
-
- gimplify_assign (unshare_expr (args), tmp, pre_p);
- }
-
- /* Build conditional expression to calculate addr. The expression
- will be gimplified later. */
- tmp = fold_build_pointer_plus_hwi (unshare_expr (args), rsize);
- tmp = build2 (TRUTH_AND_EXPR, boolean_type_node,
- build2 (GT_EXPR, boolean_type_node, tmp, unshare_expr (skip)),
- build2 (LE_EXPR, boolean_type_node, unshare_expr (args),
- unshare_expr (skip)));
-
- tmp = build3 (COND_EXPR, ptr_type_node, tmp,
- build2 (POINTER_PLUS_EXPR, ptr_type_node, unshare_expr (skip),
- size_int (STACK_POINTER_OFFSET)),
- unshare_expr (args));
-
- gimplify_assign (addr, tmp, pre_p);
-
- /* Update VALIST.__args. */
- tmp = fold_build_pointer_plus_hwi (addr, rsize);
- gimplify_assign (unshare_expr (args), tmp, pre_p);
-
- addr = fold_convert (build_pointer_type (type), addr);
-
- if (pass_by_reference_p)
- addr = build_va_arg_indirect_ref (addr);
-
- return build_va_arg_indirect_ref (addr);
-}
-
-
-
-/* Implement TARGET_RTX_COSTS. */
-static bool
-tilepro_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno,
- int *total, bool speed)
-{
- int code = GET_CODE (x);
-
- switch (code)
- {
- case CONST_INT:
- /* If this is an 8-bit constant, return zero since it can be
- used nearly anywhere with no cost. If it is a valid operand
- for an ADD or AND, likewise return 0 if we know it will be
- used in that context. Otherwise, return 2 since it might be
- used there later. All other constants take at least two
- insns. */
- if (satisfies_constraint_I (x))
- {
- *total = 0;
- return true;
- }
- else if (outer_code == PLUS && add_operand (x, VOIDmode))
- {
- /* Slightly penalize large constants even though we can add
- them in one instruction, because it forces the use of
- 2-wide bundling mode. */
- *total = 1;
- return true;
- }
- else if (move_operand (x, SImode))
- {
- /* We can materialize in one move. */
- *total = COSTS_N_INSNS (1);
- return true;
- }
- else
- {
- /* We can materialize in two moves. */
- *total = COSTS_N_INSNS (2);
- return true;
- }
-
- return false;
-
- case CONST:
- case LABEL_REF:
- case SYMBOL_REF:
- *total = COSTS_N_INSNS (2);
- return true;
-
- case CONST_DOUBLE:
- *total = COSTS_N_INSNS (4);
- return true;
-
- case HIGH:
- *total = 0;
- return true;
-
- case MEM:
- /* If outer-code was a sign or zero extension, a cost of
- COSTS_N_INSNS (1) was already added in, so account for
- that. */
- if (outer_code == ZERO_EXTEND || outer_code == SIGN_EXTEND)
- *total = COSTS_N_INSNS (1);
- else
- *total = COSTS_N_INSNS (2);
- return true;
-
- case PLUS:
- /* Convey that s[123]a are efficient. */
- if (GET_CODE (XEXP (x, 0)) == MULT
- && cint_248_operand (XEXP (XEXP (x, 0), 1), VOIDmode))
- {
- *total = (rtx_cost (XEXP (XEXP (x, 0), 0), mode,
- (enum rtx_code) outer_code, opno, speed)
- + rtx_cost (XEXP (x, 1), mode,
- (enum rtx_code) outer_code, opno, speed)
- + COSTS_N_INSNS (1));
- return true;
- }
- return false;
-
- case MULT:
- *total = COSTS_N_INSNS (2);
- return false;
-
- case SIGN_EXTEND:
- case ZERO_EXTEND:
- if (outer_code == MULT)
- *total = 0;
- else
- *total = COSTS_N_INSNS (1);
- return false;
-
- case DIV:
- case UDIV:
- case MOD:
- case UMOD:
- /* These are handled by software and are very expensive. */
- *total = COSTS_N_INSNS (100);
- return false;
-
- case UNSPEC:
- case UNSPEC_VOLATILE:
- {
- int num = XINT (x, 1);
-
- if (num <= TILEPRO_LAST_LATENCY_1_INSN)
- *total = COSTS_N_INSNS (1);
- else if (num <= TILEPRO_LAST_LATENCY_2_INSN)
- *total = COSTS_N_INSNS (2);
- else if (num > TILEPRO_LAST_LATENCY_INSN)
- {
- if (outer_code == PLUS)
- *total = 0;
- else
- *total = COSTS_N_INSNS (1);
- }
- else
- {
- switch (num)
- {
- case UNSPEC_BLOCKAGE:
- case UNSPEC_NETWORK_BARRIER:
- *total = 0;
- break;
-
- case UNSPEC_LNK_AND_LABEL:
- case UNSPEC_MF:
- case UNSPEC_NETWORK_RECEIVE:
- case UNSPEC_NETWORK_SEND:
- case UNSPEC_TLS_GD_ADD:
- *total = COSTS_N_INSNS (1);
- break;
-
- case UNSPEC_TLS_IE_LOAD:
- *total = COSTS_N_INSNS (2);
- break;
-
- case UNSPEC_SP_SET:
- *total = COSTS_N_INSNS (3);
- break;
-
- case UNSPEC_SP_TEST:
- *total = COSTS_N_INSNS (4);
- break;
-
- case UNSPEC_LATENCY_L2:
- *total = COSTS_N_INSNS (8);
- break;
-
- case UNSPEC_TLS_GD_CALL:
- *total = COSTS_N_INSNS (30);
- break;
-
- case UNSPEC_LATENCY_MISS:
- *total = COSTS_N_INSNS (80);
- break;
-
- default:
- *total = COSTS_N_INSNS (1);
- }
- }
- return true;
- }
-
- default:
- return false;
- }
-}
-
-
-
-/* Returns an SImode integer rtx with value VAL. */
-static rtx
-gen_int_si (HOST_WIDE_INT val)
-{
- return gen_int_mode (val, SImode);
-}
-
-
-/* Create a temporary variable to hold a partial result, to enable
- CSE. */
-static rtx
-create_temp_reg_if_possible (machine_mode mode, rtx default_reg)
-{
- return can_create_pseudo_p ()? gen_reg_rtx (mode) : default_reg;
-}
-
-
-/* Functions to save and restore machine-specific function data. */
-static struct machine_function *
-tilepro_init_machine_status (void)
-{
- return ggc_cleared_alloc<machine_function> ();
-}
-
-
-/* Do anything needed before RTL is emitted for each function. */
-void
-tilepro_init_expanders (void)
-{
- /* Arrange to initialize and mark the machine per-function
- status. */
- init_machine_status = tilepro_init_machine_status;
-
- if (cfun && cfun->machine && flag_pic)
- {
- static int label_num = 0;
-
- char text_label_name[32];
-
- struct machine_function *machine = cfun->machine;
-
- ASM_GENERATE_INTERNAL_LABEL (text_label_name, "L_PICLNK", label_num++);
-
- machine->text_label_symbol =
- gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (text_label_name));
-
- machine->text_label_rtx =
- gen_rtx_REG (Pmode, TILEPRO_PIC_TEXT_LABEL_REGNUM);
-
- machine->got_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
-
- machine->calls_tls_get_addr = false;
- }
-}
-
-
-/* Return true if X contains a thread-local symbol. */
-static bool
-tilepro_tls_referenced_p (rtx x)
-{
- if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
- x = XEXP (XEXP (x, 0), 0);
-
- if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (x))
- return true;
-
- /* That's all we handle in tilepro_legitimize_tls_address for
- now. */
- return false;
-}
-
-
-/* Return true if X requires a scratch register. It is given that
- flag_pic is on and that X satisfies CONSTANT_P. */
-static int
-tilepro_pic_address_needs_scratch (rtx x)
-{
- if (GET_CODE (x) == CONST
- && GET_CODE (XEXP (x, 0)) == PLUS
- && (GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
- || GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF)
- && CONST_INT_P (XEXP (XEXP (x, 0), 1)))
- return true;
-
- return false;
-}
-
-
-/* Implement TARGET_LEGITIMATE_CONSTANT_P. This is all constants for
- which we are willing to load the value into a register via a move
- pattern. TLS cannot be treated as a constant because it can
- include a function call. */
-static bool
-tilepro_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
-{
- switch (GET_CODE (x))
- {
- case CONST:
- case SYMBOL_REF:
- return !tilepro_tls_referenced_p (x);
-
- default:
- return true;
- }
-}
-
-
-/* Return true if the constant value X is a legitimate general operand
- when generating PIC code. It is given that flag_pic is on and that
- X satisfies CONSTANT_P. */
-bool
-tilepro_legitimate_pic_operand_p (rtx x)
-{
- if (tilepro_pic_address_needs_scratch (x))
- return false;
-
- if (tilepro_tls_referenced_p (x))
- return false;
-
- return true;
-}
-
-
-/* Return true if the rtx X can be used as an address operand. */
-static bool
-tilepro_legitimate_address_p (machine_mode ARG_UNUSED (mode), rtx x,
- bool strict)
-{
- if (GET_CODE (x) == SUBREG)
- x = SUBREG_REG (x);
-
- switch (GET_CODE (x))
- {
- case POST_INC:
- case POST_DEC:
- if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
- return false;
-
- x = XEXP (x, 0);
- break;
-
- case POST_MODIFY:
- if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
- return false;
-
- if (GET_CODE (XEXP (x, 1)) != PLUS)
- return false;
-
- if (!rtx_equal_p (XEXP (x, 0), XEXP (XEXP (x, 1), 0)))
- return false;
-
- if (!satisfies_constraint_I (XEXP (XEXP (x, 1), 1)))
- return false;
-
- x = XEXP (x, 0);
- break;
-
- case REG:
- break;
-
- default:
- return false;
- }
-
- /* Check if x is a valid reg. */
- if (!REG_P (x))
- return false;
-
- if (strict)
- return REGNO_OK_FOR_BASE_P (REGNO (x));
- else
- return true;
-}
-
-
-/* Return the rtx containing SYMBOL_REF to the text label. */
-static rtx
-tilepro_text_label_symbol (void)
-{
- return cfun->machine->text_label_symbol;
-}
-
-
-/* Return the register storing the value of the text label. */
-static rtx
-tilepro_text_label_rtx (void)
-{
- return cfun->machine->text_label_rtx;
-}
-
-
-/* Return the register storing the value of the global offset
- table. */
-static rtx
-tilepro_got_rtx (void)
-{
- return cfun->machine->got_rtx;
-}
-
-
-/* Return the SYMBOL_REF for _GLOBAL_OFFSET_TABLE_. */
-static rtx
-tilepro_got_symbol (void)
-{
- if (g_got_symbol == NULL)
- g_got_symbol = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
-
- return g_got_symbol;
-}
-
-
-/* Return a reference to the got to be used by tls references. */
-static rtx
-tilepro_tls_got (void)
-{
- rtx temp;
- if (flag_pic)
- {
- crtl->uses_pic_offset_table = 1;
- return tilepro_got_rtx ();
- }
-
- temp = gen_reg_rtx (Pmode);
- emit_move_insn (temp, tilepro_got_symbol ());
-
- return temp;
-}
-
-
-/* ADDR contains a thread-local SYMBOL_REF. Generate code to compute
- this (thread-local) address. */
-static rtx
-tilepro_legitimize_tls_address (rtx addr)
-{
- rtx ret;
-
- gcc_assert (can_create_pseudo_p ());
-
- if (GET_CODE (addr) == SYMBOL_REF)
- switch (SYMBOL_REF_TLS_MODEL (addr))
- {
- case TLS_MODEL_GLOBAL_DYNAMIC:
- case TLS_MODEL_LOCAL_DYNAMIC:
- {
- rtx r0, temp1, temp2, temp3, got;
- rtx_insn *last;
-
- ret = gen_reg_rtx (Pmode);
- r0 = gen_rtx_REG (Pmode, 0);
- temp1 = gen_reg_rtx (Pmode);
- temp2 = gen_reg_rtx (Pmode);
- temp3 = gen_reg_rtx (Pmode);
-
- got = tilepro_tls_got ();
- emit_insn (gen_tls_gd_addhi (temp1, got, addr));
- emit_insn (gen_tls_gd_addlo (temp2, temp1, addr));
- emit_move_insn (r0, temp2);
- emit_insn (gen_tls_gd_call (addr));
- emit_move_insn (temp3, r0);
- last = emit_insn (gen_tls_gd_add (ret, temp3, addr));
- set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
- break;
- }
- case TLS_MODEL_INITIAL_EXEC:
- {
- rtx temp1, temp2, temp3, got;
- rtx_insn *last;
-
- ret = gen_reg_rtx (Pmode);
- temp1 = gen_reg_rtx (Pmode);
- temp2 = gen_reg_rtx (Pmode);
- temp3 = gen_reg_rtx (Pmode);
-
- got = tilepro_tls_got ();
- emit_insn (gen_tls_ie_addhi (temp1, got, addr));
- emit_insn (gen_tls_ie_addlo (temp2, temp1, addr));
- emit_insn (gen_tls_ie_load (temp3, temp2, addr));
- last =
- emit_move_insn(ret,
- gen_rtx_PLUS (Pmode,
- gen_rtx_REG (Pmode,
- THREAD_POINTER_REGNUM),
- temp3));
- set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
- break;
- }
- case TLS_MODEL_LOCAL_EXEC:
- {
- rtx temp1;
- rtx_insn *last;
-
- ret = gen_reg_rtx (Pmode);
- temp1 = gen_reg_rtx (Pmode);
-
- emit_insn (gen_tls_le_addhi (temp1,
- gen_rtx_REG (Pmode,
- THREAD_POINTER_REGNUM),
- addr));
- last = emit_insn (gen_tls_le_addlo (ret, temp1, addr));
- set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
- break;
- }
- default:
- gcc_unreachable ();
- }
- else if (GET_CODE (addr) == CONST)
- {
- rtx base, offset;
-
- gcc_assert (GET_CODE (XEXP (addr, 0)) == PLUS);
-
- base = tilepro_legitimize_tls_address (XEXP (XEXP (addr, 0), 0));
- offset = XEXP (XEXP (addr, 0), 1);
-
- base = force_operand (base, NULL_RTX);
- ret = force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
- }
- else
- gcc_unreachable ();
-
- return ret;
-}
-
-
-/* Legitimize PIC addresses. If the address is already
- position-independent, we return ORIG. Newly generated
- position-independent addresses go into a reg. This is REG if
- nonzero, otherwise we allocate register(s) as necessary. */
-static rtx
-tilepro_legitimize_pic_address (rtx orig,
- machine_mode mode ATTRIBUTE_UNUSED,
- rtx reg)
-{
- if (GET_CODE (orig) == SYMBOL_REF)
- {
- rtx address, pic_ref;
-
- if (reg == 0)
- {
- gcc_assert (can_create_pseudo_p ());
- reg = gen_reg_rtx (Pmode);
- }
-
- if (SYMBOL_REF_LOCAL_P (orig))
- {
- /* If not during reload, allocate another temp reg here for
- loading in the address, so that these instructions can be
- optimized properly. */
- rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
- rtx text_label_symbol = tilepro_text_label_symbol ();
- rtx text_label_rtx = tilepro_text_label_rtx ();
-
- emit_insn (gen_addli_pcrel (temp_reg, text_label_rtx, orig,
- text_label_symbol));
- emit_insn (gen_auli_pcrel (temp_reg, temp_reg, orig,
- text_label_symbol));
-
- /* Note: this is conservative. We use the text_label but we
- don't use the pic_offset_table. However, in some cases
- we may need the pic_offset_table (see
- tilepro_fixup_pcrel_references). */
- crtl->uses_pic_offset_table = 1;
-
- address = temp_reg;
-
- emit_move_insn (reg, address);
- return reg;
- }
- else
- {
- /* If not during reload, allocate another temp reg here for
- loading in the address, so that these instructions can be
- optimized properly. */
- rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
-
- gcc_assert (flag_pic);
- if (flag_pic == 1)
- {
- emit_insn (gen_add_got16 (temp_reg,
- tilepro_got_rtx (), orig));
- }
- else
- {
- rtx temp_reg2 = create_temp_reg_if_possible (Pmode, reg);
- emit_insn (gen_addhi_got32 (temp_reg2,
- tilepro_got_rtx (), orig));
- emit_insn (gen_addlo_got32 (temp_reg, temp_reg2, orig));
- }
-
- address = temp_reg;
-
- pic_ref = gen_const_mem (Pmode, address);
- crtl->uses_pic_offset_table = 1;
- emit_move_insn (reg, pic_ref);
- /* The following put a REG_EQUAL note on this insn, so that
- it can be optimized by loop. But it causes the label to
- be optimized away. */
- /* set_unique_reg_note (insn, REG_EQUAL, orig); */
- return reg;
- }
- }
- else if (GET_CODE (orig) == CONST)
- {
- rtx base, offset;
-
- if (GET_CODE (XEXP (orig, 0)) == PLUS
- && XEXP (XEXP (orig, 0), 0) == tilepro_got_rtx ())
- return orig;
-
- if (reg == 0)
- {
- gcc_assert (can_create_pseudo_p ());
- reg = gen_reg_rtx (Pmode);
- }
-
- gcc_assert (GET_CODE (XEXP (orig, 0)) == PLUS);
- base = tilepro_legitimize_pic_address (XEXP (XEXP (orig, 0), 0), Pmode,
- reg);
- offset =
- tilepro_legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode,
- base == reg ? 0 : reg);
-
- if (CONST_INT_P (offset))
- {
- if (can_create_pseudo_p ())
- offset = force_reg (Pmode, offset);
- else
- /* If we reach here, then something is seriously
- wrong. */
- gcc_unreachable ();
- }
-
- if (can_create_pseudo_p ())
- return force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
- else
- gcc_unreachable ();
- }
- else if (GET_CODE (orig) == LABEL_REF)
- {
- rtx address, temp_reg;
- rtx text_label_symbol;
- rtx text_label_rtx;
-
- if (reg == 0)
- {
- gcc_assert (can_create_pseudo_p ());
- reg = gen_reg_rtx (Pmode);
- }
-
- /* If not during reload, allocate another temp reg here for
- loading in the address, so that these instructions can be
- optimized properly. */
- temp_reg = create_temp_reg_if_possible (Pmode, reg);
- text_label_symbol = tilepro_text_label_symbol ();
- text_label_rtx = tilepro_text_label_rtx ();
-
- emit_insn (gen_addli_pcrel (temp_reg, text_label_rtx, orig,
- text_label_symbol));
- emit_insn (gen_auli_pcrel (temp_reg, temp_reg, orig,
- text_label_symbol));
-
- /* Note: this is conservative. We use the text_label but we
- don't use the pic_offset_table. */
- crtl->uses_pic_offset_table = 1;
-
- address = temp_reg;
-
- emit_move_insn (reg, address);
-
- return reg;
- }
-
- return orig;
-}
-
-
-/* Implement TARGET_LEGITIMIZE_ADDRESS. */
-static rtx
-tilepro_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
- machine_mode mode)
-{
- if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
- && symbolic_operand (x, Pmode) && tilepro_tls_referenced_p (x))
- {
- return tilepro_legitimize_tls_address (x);
- }
- else if (flag_pic)
- {
- return tilepro_legitimize_pic_address (x, mode, 0);
- }
- else
- return x;
-}
-
-
-/* Implement TARGET_DELEGITIMIZE_ADDRESS. */
-static rtx
-tilepro_delegitimize_address (rtx x)
-{
- x = delegitimize_mem_from_attrs (x);
-
- if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == UNSPEC)
- {
- switch (XINT (XEXP (x, 0), 1))
- {
- case UNSPEC_PCREL_SYM:
- case UNSPEC_GOT16_SYM:
- case UNSPEC_GOT32_SYM:
- case UNSPEC_TLS_GD:
- case UNSPEC_TLS_IE:
- x = XVECEXP (XEXP (x, 0), 0, 0);
- break;
- }
- }
-
- return x;
-}
-
-
-/* Emit code to load the PIC register. */
-static void
-load_pic_register (bool delay_pic_helper ATTRIBUTE_UNUSED)
-{
- int orig_flag_pic = flag_pic;
-
- rtx got_symbol = tilepro_got_symbol ();
- rtx text_label_symbol = tilepro_text_label_symbol ();
- rtx text_label_rtx = tilepro_text_label_rtx ();
- flag_pic = 0;
-
- emit_insn (gen_insn_lnk_and_label (text_label_rtx, text_label_symbol));
-
- emit_insn (gen_addli_pcrel (tilepro_got_rtx (),
- text_label_rtx, got_symbol, text_label_symbol));
-
- emit_insn (gen_auli_pcrel (tilepro_got_rtx (),
- tilepro_got_rtx (),
- got_symbol, text_label_symbol));
-
- flag_pic = orig_flag_pic;
-
- /* Need to emit this whether or not we obey regdecls, since
- setjmp/longjmp can cause life info to screw up. ??? In the case
- where we don't obey regdecls, this is not sufficient since we may
- not fall out the bottom. */
- emit_use (tilepro_got_rtx ());
-}
-
-
-/* Return the simd variant of the constant NUM of mode MODE, by
- replicating it to fill an interger of mode SImode. NUM is first
- truncated to fit in MODE. */
-rtx
-tilepro_simd_int (rtx num, machine_mode mode)
-{
- HOST_WIDE_INT n = 0;
-
- gcc_assert (CONST_INT_P (num));
-
- n = INTVAL (num);
-
- switch (mode)
- {
- case E_QImode:
- n = 0x01010101 * (n & 0x000000FF);
- break;
- case E_HImode:
- n = 0x00010001 * (n & 0x0000FFFF);
- break;
- case E_SImode:
- break;
- case E_DImode:
- break;
- default:
- gcc_unreachable ();
- }
-
- return gen_int_si (n);
-}
-
-
-/* Split one or more DImode RTL references into pairs of SImode
- references. The RTL can be REG, offsettable MEM, integer constant,
- or CONST_DOUBLE. "operands" is a pointer to an array of DImode RTL
- to split and "num" is its length. lo_half and hi_half are output
- arrays that parallel "operands". */
-void
-split_di (rtx operands[], int num, rtx lo_half[], rtx hi_half[])
-{
- while (num--)
- {
- rtx op = operands[num];
-
- /* simplify_subreg refuse to split volatile memory addresses,
- but we still have to handle it. */
- if (MEM_P (op))
- {
- lo_half[num] = adjust_address (op, SImode, 0);
- hi_half[num] = adjust_address (op, SImode, 4);
- }
- else
- {
- lo_half[num] = simplify_gen_subreg (SImode, op,
- GET_MODE (op) == VOIDmode
- ? DImode : GET_MODE (op), 0);
- hi_half[num] = simplify_gen_subreg (SImode, op,
- GET_MODE (op) == VOIDmode
- ? DImode : GET_MODE (op), 4);
- }
- }
-}
-
-
-/* Returns true iff val can be moved into a register in one
- instruction. And if it can, it emits the code to move the
- constant.
-
- If three_wide_only is true, this insists on an instruction that
- works in a bundle containing three instructions. */
-static bool
-expand_set_cint32_one_inst (rtx dest_reg,
- HOST_WIDE_INT val, bool three_wide_only)
-{
- val = trunc_int_for_mode (val, SImode);
-
- if (val == trunc_int_for_mode (val, QImode))
- {
- /* Success! */
- emit_move_insn (dest_reg, GEN_INT (val));
- return true;
- }
- else if (!three_wide_only)
- {
- rtx imm_op = GEN_INT (val);
-
- if (satisfies_constraint_J (imm_op)
- || satisfies_constraint_K (imm_op)
- || satisfies_constraint_N (imm_op)
- || satisfies_constraint_P (imm_op))
- {
- emit_move_insn (dest_reg, imm_op);
- return true;
- }
- }
-
- return false;
-}
-
-
-/* Implement SImode rotatert. */
-static HOST_WIDE_INT
-rotate_right (HOST_WIDE_INT n, int count)
-{
- unsigned HOST_WIDE_INT x = n & 0xFFFFFFFF;
- if (count == 0)
- return x;
- return ((x >> count) | (x << (32 - count))) & 0xFFFFFFFF;
-}
-
-
-/* Return true iff n contains exactly one contiguous sequence of 1
- bits, possibly wrapping around from high bits to low bits. */
-bool
-tilepro_bitfield_operand_p (HOST_WIDE_INT n, int *first_bit, int *last_bit)
-{
- int i;
-
- if (n == 0)
- return false;
-
- for (i = 0; i < 32; i++)
- {
- unsigned HOST_WIDE_INT x = rotate_right (n, i);
- if (!(x & 1))
- continue;
-
- /* See if x is a power of two minus one, i.e. only consecutive 1
- bits starting from bit 0. */
- if ((x & (x + 1)) == 0)
- {
- if (first_bit != NULL)
- *first_bit = i;
- if (last_bit != NULL)
- *last_bit = (i + exact_log2 (x ^ (x >> 1))) & 31;
-
- return true;
- }
- }
-
- return false;
-}
-
-
-/* Create code to move the CONST_INT value in src_val to dest_reg. */
-static void
-expand_set_cint32 (rtx dest_reg, rtx src_val)
-{
- HOST_WIDE_INT val;
- int leading_zeroes, trailing_zeroes;
- int lower, upper;
- int three_wide_only;
- rtx temp;
-
- gcc_assert (CONST_INT_P (src_val));
- val = trunc_int_for_mode (INTVAL (src_val), SImode);
-
- /* See if we can generate the constant in one instruction. */
- if (expand_set_cint32_one_inst (dest_reg, val, false))
- return;
-
- /* Create a temporary variable to hold a partial result, to enable
- CSE. */
- temp = create_temp_reg_if_possible (SImode, dest_reg);
-
- leading_zeroes = 31 - floor_log2 (val & 0xFFFFFFFF);
- trailing_zeroes = exact_log2 (val & -val);
-
- lower = trunc_int_for_mode (val, HImode);
- upper = trunc_int_for_mode ((val - lower) >> 16, HImode);
-
- /* First try all three-wide instructions that generate a constant
- (i.e. movei) followed by various shifts and rotates. If none of
- those work, try various two-wide ways of generating a constant
- followed by various shifts and rotates. */
- for (three_wide_only = 1; three_wide_only >= 0; three_wide_only--)
- {
- int count;
-
- if (expand_set_cint32_one_inst (temp, val >> trailing_zeroes,
- three_wide_only))
- {
- /* 0xFFFFA500 becomes:
- movei temp, 0xFFFFFFA5
- shli dest, temp, 8 */
- emit_move_insn (dest_reg,
- gen_rtx_ASHIFT (SImode, temp,
- GEN_INT (trailing_zeroes)));
- return;
- }
-
- if (expand_set_cint32_one_inst (temp, val << leading_zeroes,
- three_wide_only))
- {
- /* 0x7FFFFFFF becomes:
- movei temp, -2
- shri dest, temp, 1 */
- emit_move_insn (dest_reg,
- gen_rtx_LSHIFTRT (SImode, temp,
- GEN_INT (leading_zeroes)));
- return;
- }
-
- /* Try rotating a one-instruction immediate, since rotate is
- 3-wide. */
- for (count = 1; count < 32; count++)
- {
- HOST_WIDE_INT r = rotate_right (val, count);
- if (expand_set_cint32_one_inst (temp, r, three_wide_only))
- {
- /* 0xFFA5FFFF becomes:
- movei temp, 0xFFFFFFA5
- rli dest, temp, 16 */
- emit_move_insn (dest_reg,
- gen_rtx_ROTATE (SImode, temp, GEN_INT (count)));
- return;
- }
- }
-
- if (lower == trunc_int_for_mode (lower, QImode))
- {
- /* We failed to use two 3-wide instructions, but the low 16
- bits are a small number so just use a 2-wide + 3-wide
- auli + addi pair rather than anything more exotic.
-
- 0x12340056 becomes:
- auli temp, zero, 0x1234
- addi dest, temp, 0x56 */
- break;
- }
- }
-
- /* Fallback case: use a auli + addli/addi pair. */
- emit_move_insn (temp, GEN_INT (upper << 16));
- emit_move_insn (dest_reg, (gen_rtx_PLUS (SImode, temp, GEN_INT (lower))));
-}
-
-
-/* Load OP1, a 32-bit constant, into OP0, a register. We know it
- can't be done in one insn when we get here, the move expander
- guarantees this. */
-void
-tilepro_expand_set_const32 (rtx op0, rtx op1)
-{
- machine_mode mode = GET_MODE (op0);
- rtx temp;
-
- if (CONST_INT_P (op1))
- {
- /* TODO: I don't know if we want to split large constants now,
- or wait until later (with a define_split).
-
- Does splitting early help CSE? Does it harm other
- optimizations that might fold loads? */
- expand_set_cint32 (op0, op1);
- }
- else
- {
- temp = create_temp_reg_if_possible (mode, op0);
-
- /* A symbol, emit in the traditional way. */
- emit_move_insn (temp, gen_rtx_HIGH (mode, op1));
- emit_move_insn (op0, gen_rtx_LO_SUM (mode, temp, op1));
- }
-}
-
-
-/* Expand a move instruction. Return true if all work is done. */
-bool
-tilepro_expand_mov (machine_mode mode, rtx *operands)
-{
- /* Handle sets of MEM first. */
- if (MEM_P (operands[0]))
- {
- if (can_create_pseudo_p ())
- operands[0] = validize_mem (operands[0]);
-
- if (reg_or_0_operand (operands[1], mode))
- return false;
-
- if (!reload_in_progress)
- operands[1] = force_reg (mode, operands[1]);
- }
-
- /* Fixup TLS cases. */
- if (CONSTANT_P (operands[1]) && tilepro_tls_referenced_p (operands[1]))
- {
- operands[1] = tilepro_legitimize_tls_address (operands[1]);
- return false;
- }
-
- /* Fixup PIC cases. */
- if (flag_pic && CONSTANT_P (operands[1]))
- {
- if (tilepro_pic_address_needs_scratch (operands[1]))
- operands[1] = tilepro_legitimize_pic_address (operands[1], mode, 0);
-
- if (symbolic_operand (operands[1], mode))
- {
- operands[1] = tilepro_legitimize_pic_address (operands[1],
- mode,
- (reload_in_progress ?
- operands[0] :
- NULL_RTX));
- return false;
- }
- }
-
- /* Fixup for UNSPEC addresses. */
- if (flag_pic
- && GET_CODE (operands[1]) == HIGH
- && GET_CODE (XEXP (operands[1], 0)) == CONST
- && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == UNSPEC)
- {
- rtx unspec = XEXP (XEXP (operands[1], 0), 0);
- int unspec_num = XINT (unspec, 1);
- if (unspec_num == UNSPEC_PCREL_SYM)
- {
- emit_insn (gen_auli_pcrel (operands[0], const0_rtx,
- XVECEXP (unspec, 0, 0),
- XVECEXP (unspec, 0, 1)));
- return true;
- }
- else if (flag_pic == 2 && unspec_num == UNSPEC_GOT32_SYM)
- {
- emit_insn (gen_addhi_got32 (operands[0], const0_rtx,
- XVECEXP (unspec, 0, 0)));
- return true;
- }
- else if (HAVE_AS_TLS && unspec_num == UNSPEC_TLS_GD)
- {
- emit_insn (gen_tls_gd_addhi (operands[0], const0_rtx,
- XVECEXP (unspec, 0, 0)));
- return true;
- }
- else if (HAVE_AS_TLS && unspec_num == UNSPEC_TLS_IE)
- {
- emit_insn (gen_tls_ie_addhi (operands[0], const0_rtx,
- XVECEXP (unspec, 0, 0)));
- return true;
- }
- else if (HAVE_AS_TLS && unspec_num == UNSPEC_TLS_LE)
- {
- emit_insn (gen_tls_le_addhi (operands[0], const0_rtx,
- XVECEXP (unspec, 0, 0)));
- return true;
- }
- }
-
- /* Accept non-constants and valid constants unmodified. */
- if (!CONSTANT_P (operands[1])
- || GET_CODE (operands[1]) == HIGH || move_operand (operands[1], mode))
- return false;
-
- /* Split large integers. */
- if (GET_MODE_SIZE (mode) <= 4)
- {
- tilepro_expand_set_const32 (operands[0], operands[1]);
- return true;
- }
-
- return false;
-}
-
-
-/* Expand the "insv" pattern. */
-void
-tilepro_expand_insv (rtx operands[4])
-{
- rtx first_rtx = operands[2];
- HOST_WIDE_INT first = INTVAL (first_rtx);
- HOST_WIDE_INT width = INTVAL (operands[1]);
- rtx v = operands[3];
-
- /* Shift the inserted bits into position. */
- if (first != 0)
- {
- if (CONST_INT_P (v))
- {
- /* Shift the constant into mm position. */
- v = gen_int_si (INTVAL (v) << first);
- }
- else
- {
- /* Shift over the value to be inserted. */
- rtx tmp = gen_reg_rtx (SImode);
- emit_insn (gen_ashlsi3 (tmp, v, first_rtx));
- v = tmp;
- }
- }
-
- /* Insert the shifted bits using an 'mm' insn. */
- emit_insn (gen_insn_mm (operands[0], v, operands[0], first_rtx,
- GEN_INT (first + width - 1)));
-}
-
-
-/* Expand unaligned loads. */
-void
-tilepro_expand_unaligned_load (rtx dest_reg, rtx mem, HOST_WIDE_INT bitsize,
- HOST_WIDE_INT bit_offset, bool sign)
-{
- machine_mode mode;
- rtx addr_lo, addr_hi;
- rtx mem_lo, mem_hi, hi;
- rtx mema, wide_result;
- int last_byte_offset;
- HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
-
- mode = GET_MODE (dest_reg);
-
- hi = gen_reg_rtx (mode);
-
- if (bitsize == 2 * BITS_PER_UNIT && (bit_offset % BITS_PER_UNIT) == 0)
- {
- rtx lo;
-
- /* When just loading a two byte value, we can load the two bytes
- individually and combine them efficiently. */
-
- mem_lo = adjust_address (mem, QImode, byte_offset);
- mem_hi = adjust_address (mem, QImode, byte_offset + 1);
-
- lo = gen_reg_rtx (mode);
- emit_insn (gen_zero_extendqisi2 (lo, mem_lo));
-
- if (sign)
- {
- rtx tmp = gen_reg_rtx (mode);
-
- /* Do a signed load of the second byte then shift and OR it
- in. */
- emit_insn (gen_extendqisi2 (gen_lowpart (SImode, hi), mem_hi));
- emit_insn (gen_ashlsi3 (gen_lowpart (SImode, tmp),
- gen_lowpart (SImode, hi), GEN_INT (8)));
- emit_insn (gen_iorsi3 (gen_lowpart (SImode, dest_reg),
- gen_lowpart (SImode, lo),
- gen_lowpart (SImode, tmp)));
- }
- else
- {
- /* Do two unsigned loads and use intlb to interleave
- them. */
- emit_insn (gen_zero_extendqisi2 (gen_lowpart (SImode, hi), mem_hi));
- emit_insn (gen_insn_intlb (gen_lowpart (SImode, dest_reg),
- gen_lowpart (SImode, hi),
- gen_lowpart (SImode, lo)));
- }
-
- return;
- }
-
- mema = XEXP (mem, 0);
-
- /* AND addresses cannot be in any alias set, since they may
- implicitly alias surrounding code. Ideally we'd have some alias
- set that covered all types except those with alignment 8 or
- higher. */
- addr_lo = force_reg (Pmode, plus_constant (Pmode, mema, byte_offset));
- mem_lo = change_address (mem, mode,
- gen_rtx_AND (Pmode, addr_lo, GEN_INT (-4)));
- set_mem_alias_set (mem_lo, 0);
-
- /* Load the high word at an address that will not fault if the low
- address is aligned and at the very end of a page. */
- last_byte_offset = (bit_offset + bitsize - 1) / BITS_PER_UNIT;
- addr_hi = force_reg (Pmode, plus_constant (Pmode, mema, last_byte_offset));
- mem_hi = change_address (mem, mode,
- gen_rtx_AND (Pmode, addr_hi, GEN_INT (-4)));
- set_mem_alias_set (mem_hi, 0);
-
- if (bitsize == 32)
- {
- addr_lo = make_safe_from (addr_lo, dest_reg);
- wide_result = dest_reg;
- }
- else
- {
- wide_result = gen_reg_rtx (mode);
- }
-
- /* Load hi first in case dest_reg is used in mema. */
- emit_move_insn (hi, mem_hi);
- emit_move_insn (wide_result, mem_lo);
-
- emit_insn (gen_insn_dword_align (gen_lowpart (SImode, wide_result),
- gen_lowpart (SImode, wide_result),
- gen_lowpart (SImode, hi), addr_lo));
-
- if (bitsize != 32)
- {
- rtx extracted =
- extract_bit_field (gen_lowpart (SImode, wide_result),
- bitsize, bit_offset % BITS_PER_UNIT,
- !sign, gen_lowpart (SImode, dest_reg),
- SImode, SImode, false, NULL);
-
- if (extracted != dest_reg)
- emit_move_insn (dest_reg, gen_lowpart (SImode, extracted));
- }
-}
-
-
-/* Expand unaligned stores. */
-static void
-tilepro_expand_unaligned_store (rtx mem, rtx src, HOST_WIDE_INT bitsize,
- HOST_WIDE_INT bit_offset)
-{
- HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
- HOST_WIDE_INT bytesize = bitsize / BITS_PER_UNIT;
- HOST_WIDE_INT shift_amt;
- HOST_WIDE_INT i;
- rtx mem_addr;
- rtx store_val;
-
- for (i = 0, shift_amt = 0; i < bytesize; i++, shift_amt += BITS_PER_UNIT)
- {
- mem_addr = adjust_address (mem, QImode, byte_offset + i);
-
- if (shift_amt)
- {
- store_val = expand_simple_binop (SImode, LSHIFTRT,
- gen_lowpart (SImode, src),
- GEN_INT (shift_amt), NULL, 1,
- OPTAB_LIB_WIDEN);
- store_val = gen_lowpart (QImode, store_val);
- }
- else
- {
- store_val = gen_lowpart (QImode, src);
- }
-
- emit_move_insn (mem_addr, store_val);
- }
-}
-
-
-/* Implement the movmisalign patterns. One of the operands is a
- memory that is not naturally aligned. Emit instructions to load
- it. */
-void
-tilepro_expand_movmisalign (machine_mode mode, rtx *operands)
-{
- if (MEM_P (operands[1]))
- {
- rtx tmp;
-
- if (register_operand (operands[0], mode))
- tmp = operands[0];
- else
- tmp = gen_reg_rtx (mode);
-
- tilepro_expand_unaligned_load (tmp, operands[1],
- GET_MODE_BITSIZE (mode), 0, true);
-
- if (tmp != operands[0])
- emit_move_insn (operands[0], tmp);
- }
- else if (MEM_P (operands[0]))
- {
- if (!reg_or_0_operand (operands[1], mode))
- operands[1] = force_reg (mode, operands[1]);
-
- tilepro_expand_unaligned_store (operands[0], operands[1],
- GET_MODE_BITSIZE (mode), 0);
- }
- else
- gcc_unreachable ();
-}
-
-
-/* Implement the addsi3 pattern. */
-bool
-tilepro_expand_addsi (rtx op0, rtx op1, rtx op2)
-{
- rtx temp;
- HOST_WIDE_INT n;
- HOST_WIDE_INT high;
-
- /* Skip anything that only takes one instruction. */
- if (add_operand (op2, SImode))
- return false;
-
- /* We can only optimize ints here (it should be impossible to get
- here with any other type, but it is harmless to check. */
- if (!CONST_INT_P (op2))
- return false;
-
- temp = create_temp_reg_if_possible (SImode, op0);
- n = INTVAL (op2);
- high = (n + (n & 0x8000)) & ~0xffff;
-
- emit_move_insn (temp, gen_rtx_PLUS (SImode, op1, gen_int_si (high)));
- emit_move_insn (op0, gen_rtx_PLUS (SImode, temp, gen_int_si (n - high)));
-
- return true;
-}
-
-
-/* Implement the allocate_stack pattern (alloca). */
-void
-tilepro_allocate_stack (rtx op0, rtx op1)
-{
- /* Technically the correct way to initialize chain_loc is with
- * gen_frame_mem() instead of gen_rtx_MEM(), but gen_frame_mem()
- * sets the alias_set to that of a frame reference. Some of our
- * tests rely on some unsafe assumption about when the chaining
- * update is done, we need to be conservative about reordering the
- * chaining instructions.
- */
- rtx fp_addr = gen_reg_rtx (Pmode);
- rtx fp_value = gen_reg_rtx (Pmode);
- rtx fp_loc;
-
- emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- GEN_INT (UNITS_PER_WORD)));
-
- fp_loc = gen_frame_mem (Pmode, fp_addr);
-
- emit_move_insn (fp_value, fp_loc);
-
- op1 = force_reg (Pmode, op1);
-
- emit_move_insn (stack_pointer_rtx,
- gen_rtx_MINUS (Pmode, stack_pointer_rtx, op1));
-
- emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- GEN_INT (UNITS_PER_WORD)));
-
- fp_loc = gen_frame_mem (Pmode, fp_addr);
-
- emit_move_insn (fp_loc, fp_value);
-
- emit_move_insn (op0, virtual_stack_dynamic_rtx);
-}
-
-
-
-/* Multiplies */
-
-/* Returns the insn_code in ENTRY. */
-static enum insn_code
-tilepro_multiply_get_opcode (const struct tilepro_multiply_insn_seq_entry
- *entry)
-{
- return tilepro_multiply_insn_seq_decode_opcode[entry->compressed_opcode];
-}
-
-
-/* Returns the length of the 'op' array. */
-static int
-tilepro_multiply_get_num_ops (const struct tilepro_multiply_insn_seq *seq)
-{
- /* The array either uses all of its allocated slots or is terminated
- by a bogus opcode. Either way, the array size is the index of the
- last valid opcode plus one. */
- int i;
- for (i = tilepro_multiply_insn_seq_MAX_OPERATIONS - 1; i >= 0; i--)
- if (tilepro_multiply_get_opcode (&seq->op[i]) != CODE_FOR_nothing)
- return i + 1;
-
- /* An empty array is not allowed. */
- gcc_unreachable ();
-}
-
-
-/* We precompute a number of expression trees for multiplying by
- constants. This generates code for such an expression tree by
- walking through the nodes in the tree (which are conveniently
- pre-linearized) and emitting an instruction for each one. */
-static void
-tilepro_expand_constant_multiply_given_sequence (rtx result, rtx src,
- const struct
- tilepro_multiply_insn_seq
- *seq)
-{
- int i;
- int num_ops;
-
- /* Keep track of the subexpressions computed so far, so later
- instructions can refer to them. We seed the array with zero and
- the value being multiplied. */
- int num_subexprs = 2;
- rtx subexprs[tilepro_multiply_insn_seq_MAX_OPERATIONS + 2];
- subexprs[0] = const0_rtx;
- subexprs[1] = src;
-
- /* Determine how many instructions we are going to generate. */
- num_ops = tilepro_multiply_get_num_ops (seq);
- gcc_assert (num_ops > 0
- && num_ops <= tilepro_multiply_insn_seq_MAX_OPERATIONS);
-
- for (i = 0; i < num_ops; i++)
- {
- const struct tilepro_multiply_insn_seq_entry *entry = &seq->op[i];
-
- /* Figure out where to store the output of this instruction. */
- const bool is_last_op = (i + 1 == num_ops);
- rtx out = is_last_op ? result : gen_reg_rtx (SImode);
-
- enum insn_code opcode = tilepro_multiply_get_opcode (entry);
- if (opcode == CODE_FOR_ashlsi3)
- {
- /* Handle shift by immediate. This is a special case because
- the meaning of the second operand is a constant shift
- count rather than an operand index. */
-
- /* Make sure the shift count is in range. Zero should not
- happen. */
- const int shift_count = entry->rhs;
- gcc_assert (shift_count > 0 && shift_count < 32);
-
- /* Emit the actual instruction. */
- emit_insn (GEN_FCN (opcode)
- (out, subexprs[entry->lhs],
- gen_rtx_CONST_INT (SImode, shift_count)));
- }
- else
- {
- /* Handle a normal two-operand instruction, such as add or
- s1a. */
-
- /* Make sure we are referring to a previously computed
- subexpression. */
- gcc_assert (entry->rhs < num_subexprs);
-
- /* Emit the actual instruction. */
- emit_insn (GEN_FCN (opcode)
- (out, subexprs[entry->lhs], subexprs[entry->rhs]));
- }
-
- /* Record this subexpression for use by later expressions. */
- subexprs[num_subexprs++] = out;
- }
-}
-
-
-/* bsearch helper function. */
-static int
-tilepro_compare_multipliers (const void *key, const void *t)
-{
- return *(const int *) key -
- ((const struct tilepro_multiply_insn_seq *) t)->multiplier;
-}
-
-
-/* Returns the tilepro_multiply_insn_seq for multiplier, or NULL if
- none exists. */
-static const struct tilepro_multiply_insn_seq *
-tilepro_find_multiply_insn_seq_for_constant (int multiplier)
-{
- return ((const struct tilepro_multiply_insn_seq *)
- bsearch (&multiplier, tilepro_multiply_insn_seq_table,
- tilepro_multiply_insn_seq_table_size,
- sizeof tilepro_multiply_insn_seq_table[0],
- tilepro_compare_multipliers));
-}
-
-
-/* Try to a expand constant multiply in SImode by looking it up in a
- precompiled table. OP0 is the result operand, OP1 is the source
- operand, and MULTIPLIER is the value of the constant. Return true
- if it succeeds. */
-static bool
-tilepro_expand_const_mulsi (rtx op0, rtx op1, int multiplier)
-{
- /* See if we have precomputed an efficient way to multiply by this
- constant. */
- const struct tilepro_multiply_insn_seq *seq =
- tilepro_find_multiply_insn_seq_for_constant (multiplier);
- if (seq != NULL)
- {
- tilepro_expand_constant_multiply_given_sequence (op0, op1, seq);
- return true;
- }
- else
- return false;
-}
-
-
-/* Expand the mulsi pattern. */
-bool
-tilepro_expand_mulsi (rtx op0, rtx op1, rtx op2)
-{
- if (CONST_INT_P (op2))
- {
- HOST_WIDE_INT n = trunc_int_for_mode (INTVAL (op2), SImode);
- return tilepro_expand_const_mulsi (op0, op1, n);
- }
- return false;
-}
-
-
-/* Expand a high multiply pattern in SImode. RESULT, OP1, OP2 are the
- operands, and SIGN is true if it's a signed multiply, and false if
- it's an unsigned multiply. */
-static void
-tilepro_expand_high_multiply (rtx result, rtx op1, rtx op2, bool sign)
-{
- rtx tmp0 = gen_reg_rtx (SImode);
- rtx tmp1 = gen_reg_rtx (SImode);
- rtx tmp2 = gen_reg_rtx (SImode);
- rtx tmp3 = gen_reg_rtx (SImode);
- rtx tmp4 = gen_reg_rtx (SImode);
- rtx tmp5 = gen_reg_rtx (SImode);
- rtx tmp6 = gen_reg_rtx (SImode);
- rtx tmp7 = gen_reg_rtx (SImode);
- rtx tmp8 = gen_reg_rtx (SImode);
- rtx tmp9 = gen_reg_rtx (SImode);
- rtx tmp10 = gen_reg_rtx (SImode);
- rtx tmp11 = gen_reg_rtx (SImode);
- rtx tmp12 = gen_reg_rtx (SImode);
- rtx tmp13 = gen_reg_rtx (SImode);
- rtx result_lo = gen_reg_rtx (SImode);
-
- if (sign)
- {
- emit_insn (gen_insn_mulhl_su (tmp0, op1, op2));
- emit_insn (gen_insn_mulhl_su (tmp1, op2, op1));
- emit_insn (gen_insn_mulll_uu (tmp2, op1, op2));
- emit_insn (gen_insn_mulhh_ss (tmp3, op1, op2));
- }
- else
- {
- emit_insn (gen_insn_mulhl_uu (tmp0, op1, op2));
- emit_insn (gen_insn_mulhl_uu (tmp1, op2, op1));
- emit_insn (gen_insn_mulll_uu (tmp2, op1, op2));
- emit_insn (gen_insn_mulhh_uu (tmp3, op1, op2));
- }
-
- emit_move_insn (tmp4, (gen_rtx_ASHIFT (SImode, tmp0, GEN_INT (16))));
-
- emit_move_insn (tmp5, (gen_rtx_ASHIFT (SImode, tmp1, GEN_INT (16))));
-
- emit_move_insn (tmp6, (gen_rtx_PLUS (SImode, tmp4, tmp5)));
- emit_move_insn (result_lo, (gen_rtx_PLUS (SImode, tmp2, tmp6)));
-
- emit_move_insn (tmp7, gen_rtx_LTU (SImode, tmp6, tmp4));
- emit_move_insn (tmp8, gen_rtx_LTU (SImode, result_lo, tmp2));
-
- if (sign)
- {
- emit_move_insn (tmp9, (gen_rtx_ASHIFTRT (SImode, tmp0, GEN_INT (16))));
- emit_move_insn (tmp10, (gen_rtx_ASHIFTRT (SImode, tmp1, GEN_INT (16))));
- }
- else
- {
- emit_move_insn (tmp9, (gen_rtx_LSHIFTRT (SImode, tmp0, GEN_INT (16))));
- emit_move_insn (tmp10, (gen_rtx_LSHIFTRT (SImode, tmp1, GEN_INT (16))));
- }
-
- emit_move_insn (tmp11, (gen_rtx_PLUS (SImode, tmp3, tmp7)));
- emit_move_insn (tmp12, (gen_rtx_PLUS (SImode, tmp8, tmp9)));
- emit_move_insn (tmp13, (gen_rtx_PLUS (SImode, tmp11, tmp12)));
- emit_move_insn (result, (gen_rtx_PLUS (SImode, tmp13, tmp10)));
-}
-
-
-/* Implement smulsi3_highpart. */
-void
-tilepro_expand_smulsi3_highpart (rtx op0, rtx op1, rtx op2)
-{
- tilepro_expand_high_multiply (op0, op1, op2, true);
-}
-
-
-/* Implement umulsi3_highpart. */
-void
-tilepro_expand_umulsi3_highpart (rtx op0, rtx op1, rtx op2)
-{
- tilepro_expand_high_multiply (op0, op1, op2, false);
-}
-
-
-
-/* Compare and branches */
-
-/* Helper function to handle DImode for tilepro_emit_setcc_internal. */
-static bool
-tilepro_emit_setcc_internal_di (rtx res, enum rtx_code code, rtx op0, rtx op1)
-{
- rtx operands[2], lo_half[2], hi_half[2];
- rtx tmp, tmp0, tmp1, tmp2;
- bool swap = false;
-
- /* Reduce the number of cases we need to handle by reversing the
- operands. */
- switch (code)
- {
- case EQ:
- case NE:
- case LE:
- case LT:
- case LEU:
- case LTU:
- /* We handle these compares directly. */
- break;
-
- case GE:
- case GT:
- case GEU:
- case GTU:
- /* Reverse the operands. */
- swap = true;
- break;
-
- default:
- /* We should not have called this with any other code. */
- gcc_unreachable ();
- }
-
- if (swap)
- {
- code = swap_condition (code);
- tmp = op0, op0 = op1, op1 = tmp;
- }
-
- operands[0] = op0;
- operands[1] = op1;
-
- split_di (operands, 2, lo_half, hi_half);
-
- if (!reg_or_0_operand (lo_half[0], SImode))
- lo_half[0] = force_reg (SImode, lo_half[0]);
-
- if (!reg_or_0_operand (hi_half[0], SImode))
- hi_half[0] = force_reg (SImode, hi_half[0]);
-
- if (!CONST_INT_P (lo_half[1]) && !register_operand (lo_half[1], SImode))
- lo_half[1] = force_reg (SImode, lo_half[1]);
-
- if (!CONST_INT_P (hi_half[1]) && !register_operand (hi_half[1], SImode))
- hi_half[1] = force_reg (SImode, hi_half[1]);
-
- tmp0 = gen_reg_rtx (SImode);
- tmp1 = gen_reg_rtx (SImode);
- tmp2 = gen_reg_rtx (SImode);
-
- switch (code)
- {
- case EQ:
- emit_insn (gen_insn_seq (tmp0, lo_half[0], lo_half[1]));
- emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
- emit_insn (gen_andsi3 (res, tmp0, tmp1));
- return true;
- case NE:
- emit_insn (gen_insn_sne (tmp0, lo_half[0], lo_half[1]));
- emit_insn (gen_insn_sne (tmp1, hi_half[0], hi_half[1]));
- emit_insn (gen_iorsi3 (res, tmp0, tmp1));
- return true;
- case LE:
- emit_insn (gen_insn_slte (tmp0, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_slte_u (tmp2, lo_half[0], lo_half[1]));
- emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
- return true;
- case LT:
- if (operands[1] == const0_rtx)
- {
- emit_insn (gen_lshrsi3 (res, hi_half[0], GEN_INT (31)));
- return true;
- }
- else
- {
- emit_insn (gen_insn_slt (tmp0, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_slt_u (tmp2, lo_half[0], lo_half[1]));
- emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
- }
- return true;
- case LEU:
- emit_insn (gen_insn_slte_u (tmp0, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_slte_u (tmp2, lo_half[0], lo_half[1]));
- emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
- return true;
- case LTU:
- emit_insn (gen_insn_slt_u (tmp0, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
- emit_insn (gen_insn_slt_u (tmp2, lo_half[0], lo_half[1]));
- emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
- return true;
- default:
- gcc_unreachable ();
- }
-
- return false;
-}
-
-
-/* Certain simplifications can be done to make invalid setcc
- operations valid. Return the final comparison, or NULL if we can't
- work. */
-static bool
-tilepro_emit_setcc_internal (rtx res, enum rtx_code code, rtx op0, rtx op1,
- machine_mode cmp_mode)
-{
- rtx tmp;
- bool swap = false;
-
- if (cmp_mode == DImode)
- {
- return tilepro_emit_setcc_internal_di (res, code, op0, op1);
- }
-
- /* The general case: fold the comparison code to the types of
- compares that we have, choosing the branch as necessary. */
-
- switch (code)
- {
- case EQ:
- case NE:
- case LE:
- case LT:
- case LEU:
- case LTU:
- /* We have these compares. */
- break;
-
- case GE:
- case GT:
- case GEU:
- case GTU:
- /* We do not have these compares, so we reverse the
- operands. */
- swap = true;
- break;
-
- default:
- /* We should not have called this with any other code. */
- gcc_unreachable ();
- }
-
- if (swap)
- {
- code = swap_condition (code);
- tmp = op0, op0 = op1, op1 = tmp;
- }
-
- if (!reg_or_0_operand (op0, SImode))
- op0 = force_reg (SImode, op0);
-
- if (!CONST_INT_P (op1) && !register_operand (op1, SImode))
- op1 = force_reg (SImode, op1);
-
- /* Return the setcc comparison. */
- emit_insn (gen_rtx_SET (res, gen_rtx_fmt_ee (code, SImode, op0, op1)));
-
- return true;
-}
-
-
-/* Implement cstore patterns. */
-bool
-tilepro_emit_setcc (rtx operands[], machine_mode cmp_mode)
-{
- return
- tilepro_emit_setcc_internal (operands[0], GET_CODE (operands[1]),
- operands[2], operands[3], cmp_mode);
-}
-
-
-/* Return whether CODE is a signed comparison. */
-static bool
-signed_compare_p (enum rtx_code code)
-{
- return (code == EQ || code == NE || code == LT || code == LE
- || code == GT || code == GE);
-}
-
-
-/* Generate the comparison for an SImode conditional branch. */
-static rtx
-tilepro_emit_cc_test (enum rtx_code code, rtx op0, rtx op1,
- machine_mode cmp_mode, bool eq_ne_only)
-{
- enum rtx_code branch_code;
- rtx temp;
-
- /* Check for a compare against zero using a comparison we can do
- directly. */
- if (cmp_mode != DImode
- && op1 == const0_rtx
- && (code == EQ || code == NE
- || (!eq_ne_only && signed_compare_p (code))))
- {
- op0 = force_reg (SImode, op0);
- return gen_rtx_fmt_ee (code, VOIDmode, op0, const0_rtx);
- }
-
- /* The general case: fold the comparison code to the types of
- compares that we have, choosing the branch as necessary. */
- switch (code)
- {
- case EQ:
- case LE:
- case LT:
- case LEU:
- case LTU:
- /* We have these compares. */
- branch_code = NE;
- break;
-
- case NE:
- case GE:
- case GT:
- case GEU:
- case GTU:
- /* These must be reversed (except NE, but let's
- canonicalize). */
- code = reverse_condition (code);
- branch_code = EQ;
- break;
-
- default:
- gcc_unreachable ();
- }
-
- if (cmp_mode != DImode
- && CONST_INT_P (op1) && (!satisfies_constraint_I (op1) || code == LEU))
- {
- HOST_WIDE_INT n = trunc_int_for_mode (INTVAL (op1), SImode);
-
- switch (code)
- {
- case EQ:
- /* Subtract off the value we want to compare against and see
- if we get zero. This is cheaper than creating a constant
- in a register. Except that subtracting -128 is more
- expensive than seqi to -128, so we leave that alone. */
- /* ??? Don't do this when comparing against symbols,
- otherwise we'll reduce (&x == 0x1234) to (&x-0x1234 ==
- 0), which will be declared false out of hand (at least
- for non-weak). */
- if (!(symbolic_operand (op0, VOIDmode)
- || (REG_P (op0) && REG_POINTER (op0))))
- {
- /* To compare against MIN_INT, we add MIN_INT and check
- for 0. */
- HOST_WIDE_INT add;
- if (n != -2147483647 - 1)
- add = -n;
- else
- add = n;
-
- op0 = force_reg (SImode, op0);
- temp = gen_reg_rtx (SImode);
- emit_insn (gen_addsi3 (temp, op0, gen_int_si (add)));
- return gen_rtx_fmt_ee (reverse_condition (branch_code),
- VOIDmode, temp, const0_rtx);
- }
- break;
-
- case LEU:
- if (n == -1)
- break;
- /* FALLTHRU */
-
- case LTU:
- /* Change ((unsigned)x < 0x1000) into !((unsigned)x >> 12),
- etc. */
- {
- int first = exact_log2 (code == LTU ? n : n + 1);
- if (first != -1)
- {
- op0 = force_reg (SImode, op0);
- temp = gen_reg_rtx (SImode);
- emit_move_insn (temp,
- gen_rtx_LSHIFTRT (SImode, op0,
- gen_int_si (first)));
- return gen_rtx_fmt_ee (reverse_condition (branch_code),
- VOIDmode, temp, const0_rtx);
- }
- }
- break;
-
- default:
- break;
- }
- }
-
- /* Compute a flag saying whether we should branch. */
- temp = gen_reg_rtx (SImode);
- tilepro_emit_setcc_internal (temp, code, op0, op1, cmp_mode);
-
- /* Return the branch comparison. */
- return gen_rtx_fmt_ee (branch_code, VOIDmode, temp, const0_rtx);
-}
-
-
-/* Generate the comparison for a conditional branch. */
-void
-tilepro_emit_conditional_branch (rtx operands[], machine_mode cmp_mode)
-{
- rtx cmp_rtx =
- tilepro_emit_cc_test (GET_CODE (operands[0]), operands[1], operands[2],
- cmp_mode, false);
- rtx branch_rtx = gen_rtx_SET (pc_rtx,
- gen_rtx_IF_THEN_ELSE (VOIDmode, cmp_rtx,
- gen_rtx_LABEL_REF
- (VOIDmode,
- operands[3]),
- pc_rtx));
- emit_jump_insn (branch_rtx);
-}
-
-
-/* Implement the movsicc pattern. */
-rtx
-tilepro_emit_conditional_move (rtx cmp)
-{
- return
- tilepro_emit_cc_test (GET_CODE (cmp), XEXP (cmp, 0), XEXP (cmp, 1),
- GET_MODE (XEXP (cmp, 0)), true);
-}
-
-
-/* Return true if INSN is annotated with a REG_BR_PROB note that
- indicates it's a branch that's predicted taken. */
-static bool
-cbranch_predicted_p (rtx_insn *insn)
-{
- rtx x = find_reg_note (insn, REG_BR_PROB, 0);
-
- if (x)
- {
- return profile_probability::from_reg_br_prob_note (XINT (x, 0))
- >= profile_probability::even ();
- }
-
- return false;
-}
-
-
-/* Output assembly code for a specific branch instruction, appending
- the branch prediction flag to the opcode if appropriate. */
-static const char *
-tilepro_output_simple_cbranch_with_opcode (rtx_insn *insn, const char *opcode,
- int regop, bool netreg_p,
- bool reverse_predicted)
-{
- static char buf[64];
- sprintf (buf, "%s%s\t%%%c%d, %%l0", opcode,
- (cbranch_predicted_p (insn) ^ reverse_predicted) ? "t" : "",
- netreg_p ? 'N' : 'r', regop);
- return buf;
-}
-
-
-/* Output assembly code for a specific branch instruction, appending
- the branch prediction flag to the opcode if appropriate. */
-const char *
-tilepro_output_cbranch_with_opcode (rtx_insn *insn, rtx *operands,
- const char *opcode,
- const char *rev_opcode,
- int regop, bool netreg_p)
-{
- const char *branch_if_false;
- rtx taken, not_taken;
- bool is_simple_branch;
-
- gcc_assert (LABEL_P (operands[0]));
-
- is_simple_branch = true;
- if (INSN_ADDRESSES_SET_P ())
- {
- int from_addr = INSN_ADDRESSES (INSN_UID (insn));
- int to_addr = INSN_ADDRESSES (INSN_UID (operands[0]));
- int delta = to_addr - from_addr;
- is_simple_branch = IN_RANGE (delta, -524288, 524280);
- }
-
- if (is_simple_branch)
- {
- /* Just a simple conditional branch. */
- return
- tilepro_output_simple_cbranch_with_opcode (insn, opcode, regop,
- netreg_p, false);
- }
-
- /* Generate a reversed branch around a direct jump. This fallback
- does not use branch-likely instructions. */
- not_taken = gen_label_rtx ();
- taken = operands[0];
-
- /* Generate the reversed branch to NOT_TAKEN. */
- operands[0] = not_taken;
- branch_if_false =
- tilepro_output_simple_cbranch_with_opcode (insn, rev_opcode, regop,
- netreg_p, true);
- output_asm_insn (branch_if_false, operands);
-
- output_asm_insn ("j\t%l0", &taken);
-
- /* Output NOT_TAKEN. */
- targetm.asm_out.internal_label (asm_out_file, "L",
- CODE_LABEL_NUMBER (not_taken));
- return "";
-}
-
-
-/* Output assembly code for a conditional branch instruction. */
-const char *
-tilepro_output_cbranch (rtx_insn *insn, rtx *operands, bool reversed)
-{
- enum rtx_code code = GET_CODE (operands[1]);
- const char *opcode;
- const char *rev_opcode;
-
- if (reversed)
- code = reverse_condition (code);
-
- switch (code)
- {
- case NE:
- opcode = "bnz";
- rev_opcode = "bz";
- break;
- case EQ:
- opcode = "bz";
- rev_opcode = "bnz";
- break;
- case GE:
- opcode = "bgez";
- rev_opcode = "blz";
- break;
- case GT:
- opcode = "bgz";
- rev_opcode = "blez";
- break;
- case LE:
- opcode = "blez";
- rev_opcode = "bgz";
- break;
- case LT:
- opcode = "blz";
- rev_opcode = "bgez";
- break;
- default:
- gcc_unreachable ();
- }
-
- return
- tilepro_output_cbranch_with_opcode (insn, operands, opcode, rev_opcode,
- 2, false);
-}
-
-
-/* Implement the tablejump pattern. */
-void
-tilepro_expand_tablejump (rtx op0, rtx op1)
-{
- if (flag_pic)
- {
- rtx table = gen_rtx_LABEL_REF (Pmode, op1);
- rtx temp = gen_reg_rtx (Pmode);
- rtx text_label_symbol = tilepro_text_label_symbol ();
- rtx text_label_rtx = tilepro_text_label_rtx ();
-
- emit_insn (gen_addli_pcrel (temp, text_label_rtx,
- table, text_label_symbol));
- emit_insn (gen_auli_pcrel (temp, temp, table, text_label_symbol));
- emit_move_insn (temp,
- gen_rtx_PLUS (Pmode,
- convert_to_mode (Pmode, op0, false),
- temp));
- op0 = temp;
- }
-
- emit_jump_insn (gen_tablejump_aux (op0, op1));
-}
-
-
-/* Expand a builtin vector binary op, by calling gen function GEN with
- operands in the proper modes. DEST is converted to DEST_MODE, and
- src0 and src1 (if DO_SRC1 is true) is converted to SRC_MODE. */
-void
-tilepro_expand_builtin_vector_binop (rtx (*gen) (rtx, rtx, rtx),
- machine_mode dest_mode,
- rtx dest,
- machine_mode src_mode,
- rtx src0, rtx src1, bool do_src1)
-{
- dest = gen_lowpart (dest_mode, dest);
-
- if (src0 == const0_rtx)
- src0 = CONST0_RTX (src_mode);
- else
- src0 = gen_lowpart (src_mode, src0);
-
- if (do_src1)
- {
- if (src1 == const0_rtx)
- src1 = CONST0_RTX (src_mode);
- else
- src1 = gen_lowpart (src_mode, src1);
- }
-
- emit_insn ((*gen) (dest, src0, src1));
-}
-
-
-
-/* Intrinsics */
-
-struct tile_builtin_info
-{
- enum insn_code icode;
- tree fndecl;
-};
-
-static struct tile_builtin_info tilepro_builtin_info[TILEPRO_BUILTIN_max] = {
- { CODE_FOR_addsi3, NULL }, /* add */
- { CODE_FOR_insn_addb, NULL }, /* addb */
- { CODE_FOR_insn_addbs_u, NULL }, /* addbs_u */
- { CODE_FOR_insn_addh, NULL }, /* addh */
- { CODE_FOR_insn_addhs, NULL }, /* addhs */
- { CODE_FOR_insn_addib, NULL }, /* addib */
- { CODE_FOR_insn_addih, NULL }, /* addih */
- { CODE_FOR_insn_addlis, NULL }, /* addlis */
- { CODE_FOR_ssaddsi3, NULL }, /* adds */
- { CODE_FOR_insn_adiffb_u, NULL }, /* adiffb_u */
- { CODE_FOR_insn_adiffh, NULL }, /* adiffh */
- { CODE_FOR_andsi3, NULL }, /* and */
- { CODE_FOR_insn_auli, NULL }, /* auli */
- { CODE_FOR_insn_avgb_u, NULL }, /* avgb_u */
- { CODE_FOR_insn_avgh, NULL }, /* avgh */
- { CODE_FOR_insn_bitx, NULL }, /* bitx */
- { CODE_FOR_bswapsi2, NULL }, /* bytex */
- { CODE_FOR_clzsi2, NULL }, /* clz */
- { CODE_FOR_insn_crc32_32, NULL }, /* crc32_32 */
- { CODE_FOR_insn_crc32_8, NULL }, /* crc32_8 */
- { CODE_FOR_ctzsi2, NULL }, /* ctz */
- { CODE_FOR_insn_drain, NULL }, /* drain */
- { CODE_FOR_insn_dtlbpr, NULL }, /* dtlbpr */
- { CODE_FOR_insn_dword_align, NULL }, /* dword_align */
- { CODE_FOR_insn_finv, NULL }, /* finv */
- { CODE_FOR_insn_flush, NULL }, /* flush */
- { CODE_FOR_insn_fnop, NULL }, /* fnop */
- { CODE_FOR_insn_icoh, NULL }, /* icoh */
- { CODE_FOR_insn_ill, NULL }, /* ill */
- { CODE_FOR_insn_info, NULL }, /* info */
- { CODE_FOR_insn_infol, NULL }, /* infol */
- { CODE_FOR_insn_inthb, NULL }, /* inthb */
- { CODE_FOR_insn_inthh, NULL }, /* inthh */
- { CODE_FOR_insn_intlb, NULL }, /* intlb */
- { CODE_FOR_insn_intlh, NULL }, /* intlh */
- { CODE_FOR_insn_inv, NULL }, /* inv */
- { CODE_FOR_insn_lb, NULL }, /* lb */
- { CODE_FOR_insn_lb_u, NULL }, /* lb_u */
- { CODE_FOR_insn_lh, NULL }, /* lh */
- { CODE_FOR_insn_lh_u, NULL }, /* lh_u */
- { CODE_FOR_insn_lnk, NULL }, /* lnk */
- { CODE_FOR_insn_lw, NULL }, /* lw */
- { CODE_FOR_insn_lw_na, NULL }, /* lw_na */
- { CODE_FOR_insn_lb_L2, NULL }, /* lb_L2 */
- { CODE_FOR_insn_lb_u_L2, NULL }, /* lb_u_L2 */
- { CODE_FOR_insn_lh_L2, NULL }, /* lh_L2 */
- { CODE_FOR_insn_lh_u_L2, NULL }, /* lh_u_L2 */
- { CODE_FOR_insn_lw_L2, NULL }, /* lw_L2 */
- { CODE_FOR_insn_lw_na_L2, NULL }, /* lw_na_L2 */
- { CODE_FOR_insn_lb_miss, NULL }, /* lb_miss */
- { CODE_FOR_insn_lb_u_miss, NULL }, /* lb_u_miss */
- { CODE_FOR_insn_lh_miss, NULL }, /* lh_miss */
- { CODE_FOR_insn_lh_u_miss, NULL }, /* lh_u_miss */
- { CODE_FOR_insn_lw_miss, NULL }, /* lw_miss */
- { CODE_FOR_insn_lw_na_miss, NULL }, /* lw_na_miss */
- { CODE_FOR_insn_maxb_u, NULL }, /* maxb_u */
- { CODE_FOR_insn_maxh, NULL }, /* maxh */
- { CODE_FOR_insn_maxib_u, NULL }, /* maxib_u */
- { CODE_FOR_insn_maxih, NULL }, /* maxih */
- { CODE_FOR_memory_barrier, NULL }, /* mf */
- { CODE_FOR_insn_mfspr, NULL }, /* mfspr */
- { CODE_FOR_insn_minb_u, NULL }, /* minb_u */
- { CODE_FOR_insn_minh, NULL }, /* minh */
- { CODE_FOR_insn_minib_u, NULL }, /* minib_u */
- { CODE_FOR_insn_minih, NULL }, /* minih */
- { CODE_FOR_insn_mm, NULL }, /* mm */
- { CODE_FOR_insn_mnz, NULL }, /* mnz */
- { CODE_FOR_insn_mnzb, NULL }, /* mnzb */
- { CODE_FOR_insn_mnzh, NULL }, /* mnzh */
- { CODE_FOR_movsi, NULL }, /* move */
- { CODE_FOR_insn_movelis, NULL }, /* movelis */
- { CODE_FOR_insn_mtspr, NULL }, /* mtspr */
- { CODE_FOR_insn_mulhh_ss, NULL }, /* mulhh_ss */
- { CODE_FOR_insn_mulhh_su, NULL }, /* mulhh_su */
- { CODE_FOR_insn_mulhh_uu, NULL }, /* mulhh_uu */
- { CODE_FOR_insn_mulhha_ss, NULL }, /* mulhha_ss */
- { CODE_FOR_insn_mulhha_su, NULL }, /* mulhha_su */
- { CODE_FOR_insn_mulhha_uu, NULL }, /* mulhha_uu */
- { CODE_FOR_insn_mulhhsa_uu, NULL }, /* mulhhsa_uu */
- { CODE_FOR_insn_mulhl_ss, NULL }, /* mulhl_ss */
- { CODE_FOR_insn_mulhl_su, NULL }, /* mulhl_su */
- { CODE_FOR_insn_mulhl_us, NULL }, /* mulhl_us */
- { CODE_FOR_insn_mulhl_uu, NULL }, /* mulhl_uu */
- { CODE_FOR_insn_mulhla_ss, NULL }, /* mulhla_ss */
- { CODE_FOR_insn_mulhla_su, NULL }, /* mulhla_su */
- { CODE_FOR_insn_mulhla_us, NULL }, /* mulhla_us */
- { CODE_FOR_insn_mulhla_uu, NULL }, /* mulhla_uu */
- { CODE_FOR_insn_mulhlsa_uu, NULL }, /* mulhlsa_uu */
- { CODE_FOR_insn_mulll_ss, NULL }, /* mulll_ss */
- { CODE_FOR_insn_mulll_su, NULL }, /* mulll_su */
- { CODE_FOR_insn_mulll_uu, NULL }, /* mulll_uu */
- { CODE_FOR_insn_mullla_ss, NULL }, /* mullla_ss */
- { CODE_FOR_insn_mullla_su, NULL }, /* mullla_su */
- { CODE_FOR_insn_mullla_uu, NULL }, /* mullla_uu */
- { CODE_FOR_insn_mulllsa_uu, NULL }, /* mulllsa_uu */
- { CODE_FOR_insn_mvnz, NULL }, /* mvnz */
- { CODE_FOR_insn_mvz, NULL }, /* mvz */
- { CODE_FOR_insn_mz, NULL }, /* mz */
- { CODE_FOR_insn_mzb, NULL }, /* mzb */
- { CODE_FOR_insn_mzh, NULL }, /* mzh */
- { CODE_FOR_insn_nap, NULL }, /* nap */
- { CODE_FOR_nop, NULL }, /* nop */
- { CODE_FOR_insn_nor, NULL }, /* nor */
- { CODE_FOR_iorsi3, NULL }, /* or */
- { CODE_FOR_insn_packbs_u, NULL }, /* packbs_u */
- { CODE_FOR_insn_packhb, NULL }, /* packhb */
- { CODE_FOR_insn_packhs, NULL }, /* packhs */
- { CODE_FOR_insn_packlb, NULL }, /* packlb */
- { CODE_FOR_popcountsi2, NULL }, /* pcnt */
- { CODE_FOR_insn_prefetch, NULL }, /* prefetch */
- { CODE_FOR_insn_prefetch_L1, NULL }, /* prefetch_L1 */
- { CODE_FOR_rotlsi3, NULL }, /* rl */
- { CODE_FOR_insn_s1a, NULL }, /* s1a */
- { CODE_FOR_insn_s2a, NULL }, /* s2a */
- { CODE_FOR_insn_s3a, NULL }, /* s3a */
- { CODE_FOR_insn_sadab_u, NULL }, /* sadab_u */
- { CODE_FOR_insn_sadah, NULL }, /* sadah */
- { CODE_FOR_insn_sadah_u, NULL }, /* sadah_u */
- { CODE_FOR_insn_sadb_u, NULL }, /* sadb_u */
- { CODE_FOR_insn_sadh, NULL }, /* sadh */
- { CODE_FOR_insn_sadh_u, NULL }, /* sadh_u */
- { CODE_FOR_insn_sb, NULL }, /* sb */
- { CODE_FOR_insn_seq, NULL }, /* seq */
- { CODE_FOR_insn_seqb, NULL }, /* seqb */
- { CODE_FOR_insn_seqh, NULL }, /* seqh */
- { CODE_FOR_insn_seqib, NULL }, /* seqib */
- { CODE_FOR_insn_seqih, NULL }, /* seqih */
- { CODE_FOR_insn_sh, NULL }, /* sh */
- { CODE_FOR_ashlsi3, NULL }, /* shl */
- { CODE_FOR_insn_shlb, NULL }, /* shlb */
- { CODE_FOR_insn_shlh, NULL }, /* shlh */
- { CODE_FOR_insn_shlb, NULL }, /* shlib */
- { CODE_FOR_insn_shlh, NULL }, /* shlih */
- { CODE_FOR_lshrsi3, NULL }, /* shr */
- { CODE_FOR_insn_shrb, NULL }, /* shrb */
- { CODE_FOR_insn_shrh, NULL }, /* shrh */
- { CODE_FOR_insn_shrb, NULL }, /* shrib */
- { CODE_FOR_insn_shrh, NULL }, /* shrih */
- { CODE_FOR_insn_slt, NULL }, /* slt */
- { CODE_FOR_insn_slt_u, NULL }, /* slt_u */
- { CODE_FOR_insn_sltb, NULL }, /* sltb */
- { CODE_FOR_insn_sltb_u, NULL }, /* sltb_u */
- { CODE_FOR_insn_slte, NULL }, /* slte */
- { CODE_FOR_insn_slte_u, NULL }, /* slte_u */
- { CODE_FOR_insn_slteb, NULL }, /* slteb */
- { CODE_FOR_insn_slteb_u, NULL }, /* slteb_u */
- { CODE_FOR_insn_slteh, NULL }, /* slteh */
- { CODE_FOR_insn_slteh_u, NULL }, /* slteh_u */
- { CODE_FOR_insn_slth, NULL }, /* slth */
- { CODE_FOR_insn_slth_u, NULL }, /* slth_u */
- { CODE_FOR_insn_sltib, NULL }, /* sltib */
- { CODE_FOR_insn_sltib_u, NULL }, /* sltib_u */
- { CODE_FOR_insn_sltih, NULL }, /* sltih */
- { CODE_FOR_insn_sltih_u, NULL }, /* sltih_u */
- { CODE_FOR_insn_sne, NULL }, /* sne */
- { CODE_FOR_insn_sneb, NULL }, /* sneb */
- { CODE_FOR_insn_sneh, NULL }, /* sneh */
- { CODE_FOR_ashrsi3, NULL }, /* sra */
- { CODE_FOR_insn_srab, NULL }, /* srab */
- { CODE_FOR_insn_srah, NULL }, /* srah */
- { CODE_FOR_insn_srab, NULL }, /* sraib */
- { CODE_FOR_insn_srah, NULL }, /* sraih */
- { CODE_FOR_subsi3, NULL }, /* sub */
- { CODE_FOR_insn_subb, NULL }, /* subb */
- { CODE_FOR_insn_subbs_u, NULL }, /* subbs_u */
- { CODE_FOR_insn_subh, NULL }, /* subh */
- { CODE_FOR_insn_subhs, NULL }, /* subhs */
- { CODE_FOR_sssubsi3, NULL }, /* subs */
- { CODE_FOR_insn_sw, NULL }, /* sw */
- { CODE_FOR_insn_tblidxb0, NULL }, /* tblidxb0 */
- { CODE_FOR_insn_tblidxb1, NULL }, /* tblidxb1 */
- { CODE_FOR_insn_tblidxb2, NULL }, /* tblidxb2 */
- { CODE_FOR_insn_tblidxb3, NULL }, /* tblidxb3 */
- { CODE_FOR_insn_tns, NULL }, /* tns */
- { CODE_FOR_insn_wh64, NULL }, /* wh64 */
- { CODE_FOR_xorsi3, NULL }, /* xor */
- { CODE_FOR_tilepro_network_barrier, NULL }, /* network_barrier */
- { CODE_FOR_tilepro_idn0_receive, NULL }, /* idn0_receive */
- { CODE_FOR_tilepro_idn1_receive, NULL }, /* idn1_receive */
- { CODE_FOR_tilepro_idn_send, NULL }, /* idn_send */
- { CODE_FOR_tilepro_sn_receive, NULL }, /* sn_receive */
- { CODE_FOR_tilepro_sn_send, NULL }, /* sn_send */
- { CODE_FOR_tilepro_udn0_receive, NULL }, /* udn0_receive */
- { CODE_FOR_tilepro_udn1_receive, NULL }, /* udn1_receive */
- { CODE_FOR_tilepro_udn2_receive, NULL }, /* udn2_receive */
- { CODE_FOR_tilepro_udn3_receive, NULL }, /* udn3_receive */
- { CODE_FOR_tilepro_udn_send, NULL }, /* udn_send */
-};
-
-
-struct tilepro_builtin_def
-{
- const char *name;
- enum tilepro_builtin code;
- bool is_const;
- /* The first character is the return type. Subsequent characters
- are the argument types. See char_to_type. */
- const char *type;
-};
-
-
-static const struct tilepro_builtin_def tilepro_builtins[] = {
- { "__insn_add", TILEPRO_INSN_ADD, true, "lll" },
- { "__insn_addb", TILEPRO_INSN_ADDB, true, "lll" },
- { "__insn_addbs_u", TILEPRO_INSN_ADDBS_U, false, "lll" },
- { "__insn_addh", TILEPRO_INSN_ADDH, true, "lll" },
- { "__insn_addhs", TILEPRO_INSN_ADDHS, false, "lll" },
- { "__insn_addi", TILEPRO_INSN_ADD, true, "lll" },
- { "__insn_addib", TILEPRO_INSN_ADDIB, true, "lll" },
- { "__insn_addih", TILEPRO_INSN_ADDIH, true, "lll" },
- { "__insn_addli", TILEPRO_INSN_ADD, true, "lll" },
- { "__insn_addlis", TILEPRO_INSN_ADDLIS, false, "lll" },
- { "__insn_adds", TILEPRO_INSN_ADDS, false, "lll" },
- { "__insn_adiffb_u", TILEPRO_INSN_ADIFFB_U, true, "lll" },
- { "__insn_adiffh", TILEPRO_INSN_ADIFFH, true, "lll" },
- { "__insn_and", TILEPRO_INSN_AND, true, "lll" },
- { "__insn_andi", TILEPRO_INSN_AND, true, "lll" },
- { "__insn_auli", TILEPRO_INSN_AULI, true, "lll" },
- { "__insn_avgb_u", TILEPRO_INSN_AVGB_U, true, "lll" },
- { "__insn_avgh", TILEPRO_INSN_AVGH, true, "lll" },
- { "__insn_bitx", TILEPRO_INSN_BITX, true, "ll" },
- { "__insn_bytex", TILEPRO_INSN_BYTEX, true, "ll" },
- { "__insn_clz", TILEPRO_INSN_CLZ, true, "ll" },
- { "__insn_crc32_32", TILEPRO_INSN_CRC32_32, true, "lll" },
- { "__insn_crc32_8", TILEPRO_INSN_CRC32_8, true, "lll" },
- { "__insn_ctz", TILEPRO_INSN_CTZ, true, "ll" },
- { "__insn_drain", TILEPRO_INSN_DRAIN, false, "v" },
- { "__insn_dtlbpr", TILEPRO_INSN_DTLBPR, false, "vl" },
- { "__insn_dword_align", TILEPRO_INSN_DWORD_ALIGN, true, "lllk" },
- { "__insn_finv", TILEPRO_INSN_FINV, false, "vk" },
- { "__insn_flush", TILEPRO_INSN_FLUSH, false, "vk" },
- { "__insn_fnop", TILEPRO_INSN_FNOP, false, "v" },
- { "__insn_icoh", TILEPRO_INSN_ICOH, false, "vk" },
- { "__insn_ill", TILEPRO_INSN_ILL, false, "v" },
- { "__insn_info", TILEPRO_INSN_INFO, false, "vl" },
- { "__insn_infol", TILEPRO_INSN_INFOL, false, "vl" },
- { "__insn_inthb", TILEPRO_INSN_INTHB, true, "lll" },
- { "__insn_inthh", TILEPRO_INSN_INTHH, true, "lll" },
- { "__insn_intlb", TILEPRO_INSN_INTLB, true, "lll" },
- { "__insn_intlh", TILEPRO_INSN_INTLH, true, "lll" },
- { "__insn_inv", TILEPRO_INSN_INV, false, "vp" },
- { "__insn_lb", TILEPRO_INSN_LB, false, "lk" },
- { "__insn_lb_u", TILEPRO_INSN_LB_U, false, "lk" },
- { "__insn_lh", TILEPRO_INSN_LH, false, "lk" },
- { "__insn_lh_u", TILEPRO_INSN_LH_U, false, "lk" },
- { "__insn_lnk", TILEPRO_INSN_LNK, true, "l" },
- { "__insn_lw", TILEPRO_INSN_LW, false, "lk" },
- { "__insn_lw_na", TILEPRO_INSN_LW_NA, false, "lk" },
- { "__insn_lb_L2", TILEPRO_INSN_LB_L2, false, "lk" },
- { "__insn_lb_u_L2", TILEPRO_INSN_LB_U_L2, false, "lk" },
- { "__insn_lh_L2", TILEPRO_INSN_LH_L2, false, "lk" },
- { "__insn_lh_u_L2", TILEPRO_INSN_LH_U_L2, false, "lk" },
- { "__insn_lw_L2", TILEPRO_INSN_LW_L2, false, "lk" },
- { "__insn_lw_na_L2", TILEPRO_INSN_LW_NA_L2, false, "lk" },
- { "__insn_lb_miss", TILEPRO_INSN_LB_MISS, false, "lk" },
- { "__insn_lb_u_miss", TILEPRO_INSN_LB_U_MISS, false, "lk" },
- { "__insn_lh_miss", TILEPRO_INSN_LH_MISS, false, "lk" },
- { "__insn_lh_u_miss", TILEPRO_INSN_LH_U_MISS, false, "lk" },
- { "__insn_lw_miss", TILEPRO_INSN_LW_MISS, false, "lk" },
- { "__insn_lw_na_miss", TILEPRO_INSN_LW_NA_MISS, false, "lk" },
- { "__insn_maxb_u", TILEPRO_INSN_MAXB_U, true, "lll" },
- { "__insn_maxh", TILEPRO_INSN_MAXH, true, "lll" },
- { "__insn_maxib_u", TILEPRO_INSN_MAXIB_U, true, "lll" },
- { "__insn_maxih", TILEPRO_INSN_MAXIH, true, "lll" },
- { "__insn_mf", TILEPRO_INSN_MF, false, "v" },
- { "__insn_mfspr", TILEPRO_INSN_MFSPR, false, "ll" },
- { "__insn_minb_u", TILEPRO_INSN_MINB_U, true, "lll" },
- { "__insn_minh", TILEPRO_INSN_MINH, true, "lll" },
- { "__insn_minib_u", TILEPRO_INSN_MINIB_U, true, "lll" },
- { "__insn_minih", TILEPRO_INSN_MINIH, true, "lll" },
- { "__insn_mm", TILEPRO_INSN_MM, true, "lllll" },
- { "__insn_mnz", TILEPRO_INSN_MNZ, true, "lll" },
- { "__insn_mnzb", TILEPRO_INSN_MNZB, true, "lll" },
- { "__insn_mnzh", TILEPRO_INSN_MNZH, true, "lll" },
- { "__insn_move", TILEPRO_INSN_MOVE, true, "ll" },
- { "__insn_movei", TILEPRO_INSN_MOVE, true, "ll" },
- { "__insn_moveli", TILEPRO_INSN_MOVE, true, "ll" },
- { "__insn_movelis", TILEPRO_INSN_MOVELIS, false, "ll" },
- { "__insn_mtspr", TILEPRO_INSN_MTSPR, false, "vll" },
- { "__insn_mulhh_ss", TILEPRO_INSN_MULHH_SS, true, "lll" },
- { "__insn_mulhh_su", TILEPRO_INSN_MULHH_SU, true, "lll" },
- { "__insn_mulhh_uu", TILEPRO_INSN_MULHH_UU, true, "lll" },
- { "__insn_mulhha_ss", TILEPRO_INSN_MULHHA_SS, true, "llll" },
- { "__insn_mulhha_su", TILEPRO_INSN_MULHHA_SU, true, "llll" },
- { "__insn_mulhha_uu", TILEPRO_INSN_MULHHA_UU, true, "llll" },
- { "__insn_mulhhsa_uu", TILEPRO_INSN_MULHHSA_UU, true, "llll" },
- { "__insn_mulhl_ss", TILEPRO_INSN_MULHL_SS, true, "lll" },
- { "__insn_mulhl_su", TILEPRO_INSN_MULHL_SU, true, "lll" },
- { "__insn_mulhl_us", TILEPRO_INSN_MULHL_US, true, "lll" },
- { "__insn_mulhl_uu", TILEPRO_INSN_MULHL_UU, true, "lll" },
- { "__insn_mulhla_ss", TILEPRO_INSN_MULHLA_SS, true, "llll" },
- { "__insn_mulhla_su", TILEPRO_INSN_MULHLA_SU, true, "llll" },
- { "__insn_mulhla_us", TILEPRO_INSN_MULHLA_US, true, "llll" },
- { "__insn_mulhla_uu", TILEPRO_INSN_MULHLA_UU, true, "llll" },
- { "__insn_mulhlsa_uu", TILEPRO_INSN_MULHLSA_UU, true, "llll" },
- { "__insn_mulll_ss", TILEPRO_INSN_MULLL_SS, true, "lll" },
- { "__insn_mulll_su", TILEPRO_INSN_MULLL_SU, true, "lll" },
- { "__insn_mulll_uu", TILEPRO_INSN_MULLL_UU, true, "lll" },
- { "__insn_mullla_ss", TILEPRO_INSN_MULLLA_SS, true, "llll" },
- { "__insn_mullla_su", TILEPRO_INSN_MULLLA_SU, true, "llll" },
- { "__insn_mullla_uu", TILEPRO_INSN_MULLLA_UU, true, "llll" },
- { "__insn_mulllsa_uu", TILEPRO_INSN_MULLLSA_UU, true, "llll" },
- { "__insn_mvnz", TILEPRO_INSN_MVNZ, true, "llll" },
- { "__insn_mvz", TILEPRO_INSN_MVZ, true, "llll" },
- { "__insn_mz", TILEPRO_INSN_MZ, true, "lll" },
- { "__insn_mzb", TILEPRO_INSN_MZB, true, "lll" },
- { "__insn_mzh", TILEPRO_INSN_MZH, true, "lll" },
- { "__insn_nap", TILEPRO_INSN_NAP, false, "v" },
- { "__insn_nop", TILEPRO_INSN_NOP, true, "v" },
- { "__insn_nor", TILEPRO_INSN_NOR, true, "lll" },
- { "__insn_or", TILEPRO_INSN_OR, true, "lll" },
- { "__insn_ori", TILEPRO_INSN_OR, true, "lll" },
- { "__insn_packbs_u", TILEPRO_INSN_PACKBS_U, false, "lll" },
- { "__insn_packhb", TILEPRO_INSN_PACKHB, true, "lll" },
- { "__insn_packhs", TILEPRO_INSN_PACKHS, false, "lll" },
- { "__insn_packlb", TILEPRO_INSN_PACKLB, true, "lll" },
- { "__insn_pcnt", TILEPRO_INSN_PCNT, true, "ll" },
- { "__insn_prefetch", TILEPRO_INSN_PREFETCH, false, "vk" },
- { "__insn_prefetch_L1", TILEPRO_INSN_PREFETCH_L1, false, "vk" },
- { "__insn_rl", TILEPRO_INSN_RL, true, "lll" },
- { "__insn_rli", TILEPRO_INSN_RL, true, "lll" },
- { "__insn_s1a", TILEPRO_INSN_S1A, true, "lll" },
- { "__insn_s2a", TILEPRO_INSN_S2A, true, "lll" },
- { "__insn_s3a", TILEPRO_INSN_S3A, true, "lll" },
- { "__insn_sadab_u", TILEPRO_INSN_SADAB_U, true, "llll" },
- { "__insn_sadah", TILEPRO_INSN_SADAH, true, "llll" },
- { "__insn_sadah_u", TILEPRO_INSN_SADAH_U, true, "llll" },
- { "__insn_sadb_u", TILEPRO_INSN_SADB_U, true, "lll" },
- { "__insn_sadh", TILEPRO_INSN_SADH, true, "lll" },
- { "__insn_sadh_u", TILEPRO_INSN_SADH_U, true, "lll" },
- { "__insn_sb", TILEPRO_INSN_SB, false, "vpl" },
- { "__insn_seq", TILEPRO_INSN_SEQ, true, "lll" },
- { "__insn_seqb", TILEPRO_INSN_SEQB, true, "lll" },
- { "__insn_seqh", TILEPRO_INSN_SEQH, true, "lll" },
- { "__insn_seqi", TILEPRO_INSN_SEQ, true, "lll" },
- { "__insn_seqib", TILEPRO_INSN_SEQIB, true, "lll" },
- { "__insn_seqih", TILEPRO_INSN_SEQIH, true, "lll" },
- { "__insn_sh", TILEPRO_INSN_SH, false, "vpl" },
- { "__insn_shl", TILEPRO_INSN_SHL, true, "lll" },
- { "__insn_shlb", TILEPRO_INSN_SHLB, true, "lll" },
- { "__insn_shlh", TILEPRO_INSN_SHLH, true, "lll" },
- { "__insn_shli", TILEPRO_INSN_SHL, true, "lll" },
- { "__insn_shlib", TILEPRO_INSN_SHLIB, true, "lll" },
- { "__insn_shlih", TILEPRO_INSN_SHLIH, true, "lll" },
- { "__insn_shr", TILEPRO_INSN_SHR, true, "lll" },
- { "__insn_shrb", TILEPRO_INSN_SHRB, true, "lll" },
- { "__insn_shrh", TILEPRO_INSN_SHRH, true, "lll" },
- { "__insn_shri", TILEPRO_INSN_SHR, true, "lll" },
- { "__insn_shrib", TILEPRO_INSN_SHRIB, true, "lll" },
- { "__insn_shrih", TILEPRO_INSN_SHRIH, true, "lll" },
- { "__insn_slt", TILEPRO_INSN_SLT, true, "lll" },
- { "__insn_slt_u", TILEPRO_INSN_SLT_U, true, "lll" },
- { "__insn_sltb", TILEPRO_INSN_SLTB, true, "lll" },
- { "__insn_sltb_u", TILEPRO_INSN_SLTB_U, true, "lll" },
- { "__insn_slte", TILEPRO_INSN_SLTE, true, "lll" },
- { "__insn_slte_u", TILEPRO_INSN_SLTE_U, true, "lll" },
- { "__insn_slteb", TILEPRO_INSN_SLTEB, true, "lll" },
- { "__insn_slteb_u", TILEPRO_INSN_SLTEB_U, true, "lll" },
- { "__insn_slteh", TILEPRO_INSN_SLTEH, true, "lll" },
- { "__insn_slteh_u", TILEPRO_INSN_SLTEH_U, true, "lll" },
- { "__insn_slth", TILEPRO_INSN_SLTH, true, "lll" },
- { "__insn_slth_u", TILEPRO_INSN_SLTH_U, true, "lll" },
- { "__insn_slti", TILEPRO_INSN_SLT, true, "lll" },
- { "__insn_slti_u", TILEPRO_INSN_SLT_U, true, "lll" },
- { "__insn_sltib", TILEPRO_INSN_SLTIB, true, "lll" },
- { "__insn_sltib_u", TILEPRO_INSN_SLTIB_U, true, "lll" },
- { "__insn_sltih", TILEPRO_INSN_SLTIH, true, "lll" },
- { "__insn_sltih_u", TILEPRO_INSN_SLTIH_U, true, "lll" },
- { "__insn_sne", TILEPRO_INSN_SNE, true, "lll" },
- { "__insn_sneb", TILEPRO_INSN_SNEB, true, "lll" },
- { "__insn_sneh", TILEPRO_INSN_SNEH, true, "lll" },
- { "__insn_sra", TILEPRO_INSN_SRA, true, "lll" },
- { "__insn_srab", TILEPRO_INSN_SRAB, true, "lll" },
- { "__insn_srah", TILEPRO_INSN_SRAH, true, "lll" },
- { "__insn_srai", TILEPRO_INSN_SRA, true, "lll" },
- { "__insn_sraib", TILEPRO_INSN_SRAIB, true, "lll" },
- { "__insn_sraih", TILEPRO_INSN_SRAIH, true, "lll" },
- { "__insn_sub", TILEPRO_INSN_SUB, true, "lll" },
- { "__insn_subb", TILEPRO_INSN_SUBB, true, "lll" },
- { "__insn_subbs_u", TILEPRO_INSN_SUBBS_U, false, "lll" },
- { "__insn_subh", TILEPRO_INSN_SUBH, true, "lll" },
- { "__insn_subhs", TILEPRO_INSN_SUBHS, false, "lll" },
- { "__insn_subs", TILEPRO_INSN_SUBS, false, "lll" },
- { "__insn_sw", TILEPRO_INSN_SW, false, "vpl" },
- { "__insn_tblidxb0", TILEPRO_INSN_TBLIDXB0, true, "lll" },
- { "__insn_tblidxb1", TILEPRO_INSN_TBLIDXB1, true, "lll" },
- { "__insn_tblidxb2", TILEPRO_INSN_TBLIDXB2, true, "lll" },
- { "__insn_tblidxb3", TILEPRO_INSN_TBLIDXB3, true, "lll" },
- { "__insn_tns", TILEPRO_INSN_TNS, false, "lp" },
- { "__insn_wh64", TILEPRO_INSN_WH64, false, "vp" },
- { "__insn_xor", TILEPRO_INSN_XOR, true, "lll" },
- { "__insn_xori", TILEPRO_INSN_XOR, true, "lll" },
- { "__tile_network_barrier", TILEPRO_NETWORK_BARRIER, false, "v" },
- { "__tile_idn0_receive", TILEPRO_IDN0_RECEIVE, false, "l" },
- { "__tile_idn1_receive", TILEPRO_IDN1_RECEIVE, false, "l" },
- { "__tile_idn_send", TILEPRO_IDN_SEND, false, "vl" },
- { "__tile_sn_receive", TILEPRO_SN_RECEIVE, false, "l" },
- { "__tile_sn_send", TILEPRO_SN_SEND, false, "vl" },
- { "__tile_udn0_receive", TILEPRO_UDN0_RECEIVE, false, "l" },
- { "__tile_udn1_receive", TILEPRO_UDN1_RECEIVE, false, "l" },
- { "__tile_udn2_receive", TILEPRO_UDN2_RECEIVE, false, "l" },
- { "__tile_udn3_receive", TILEPRO_UDN3_RECEIVE, false, "l" },
- { "__tile_udn_send", TILEPRO_UDN_SEND, false, "vl" },
-};
-
-
-/* Convert a character in a builtin type string to a tree type. */
-static tree
-char_to_type (char c)
-{
- static tree volatile_ptr_type_node = NULL;
- static tree volatile_const_ptr_type_node = NULL;
-
- if (volatile_ptr_type_node == NULL)
- {
- volatile_ptr_type_node =
- build_pointer_type (build_qualified_type (void_type_node,
- TYPE_QUAL_VOLATILE));
- volatile_const_ptr_type_node =
- build_pointer_type (build_qualified_type (void_type_node,
- TYPE_QUAL_CONST
- | TYPE_QUAL_VOLATILE));
- }
-
- switch (c)
- {
- case 'v':
- return void_type_node;
- case 'l':
- return long_unsigned_type_node;
- case 'p':
- return volatile_ptr_type_node;
- case 'k':
- return volatile_const_ptr_type_node;
- default:
- gcc_unreachable ();
- }
-}
-
-
-/* Implement TARGET_INIT_BUILTINS. */
-static void
-tilepro_init_builtins (void)
-{
- size_t i;
-
- for (i = 0; i < ARRAY_SIZE (tilepro_builtins); i++)
- {
- const struct tilepro_builtin_def *p = &tilepro_builtins[i];
- tree ftype, ret_type, arg_type_list = void_list_node;
- tree decl;
- int j;
-
- for (j = strlen (p->type) - 1; j > 0; j--)
- {
- arg_type_list =
- tree_cons (NULL_TREE, char_to_type (p->type[j]), arg_type_list);
- }
-
- ret_type = char_to_type (p->type[0]);
-
- ftype = build_function_type (ret_type, arg_type_list);
-
- decl = add_builtin_function (p->name, ftype, p->code, BUILT_IN_MD,
- NULL, NULL);
-
- if (p->is_const)
- TREE_READONLY (decl) = 1;
- TREE_NOTHROW (decl) = 1;
-
- if (tilepro_builtin_info[p->code].fndecl == NULL)
- tilepro_builtin_info[p->code].fndecl = decl;
- }
-}
-
-
-/* Implement TARGET_EXPAND_BUILTIN. */
-static rtx
-tilepro_expand_builtin (tree exp,
- rtx target,
- rtx subtarget ATTRIBUTE_UNUSED,
- machine_mode mode ATTRIBUTE_UNUSED,
- int ignore ATTRIBUTE_UNUSED)
-{
-#define MAX_BUILTIN_ARGS 4
-
- tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
- unsigned int fcode = DECL_MD_FUNCTION_CODE (fndecl);
- tree arg;
- call_expr_arg_iterator iter;
- enum insn_code icode;
- rtx op[MAX_BUILTIN_ARGS + 1], pat;
- int opnum;
- bool nonvoid;
- insn_gen_fn fn;
-
- if (fcode >= TILEPRO_BUILTIN_max)
- internal_error ("bad builtin fcode");
- icode = tilepro_builtin_info[fcode].icode;
- if (icode == 0)
- internal_error ("bad builtin icode");
-
- nonvoid = TREE_TYPE (TREE_TYPE (fndecl)) != void_type_node;
-
- opnum = nonvoid;
- FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
- {
- const struct insn_operand_data *insn_op;
-
- if (arg == error_mark_node)
- return NULL_RTX;
- if (opnum > MAX_BUILTIN_ARGS)
- return NULL_RTX;
-
- insn_op = &insn_data[icode].operand[opnum];
-
- op[opnum] = expand_expr (arg, NULL_RTX, insn_op->mode, EXPAND_NORMAL);
-
- if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
- op[opnum] = copy_to_mode_reg (insn_op->mode, op[opnum]);
-
- if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
- {
- /* We still failed to meet the predicate even after moving
- into a register. Assume we needed an immediate. */
- error_at (EXPR_LOCATION (exp),
- "operand must be an immediate of the right size");
- return const0_rtx;
- }
-
- opnum++;
- }
-
- if (nonvoid)
- {
- machine_mode tmode = insn_data[icode].operand[0].mode;
- if (!target
- || GET_MODE (target) != tmode
- || !(*insn_data[icode].operand[0].predicate) (target, tmode))
- target = gen_reg_rtx (tmode);
- op[0] = target;
- }
-
- fn = GEN_FCN (icode);
- switch (opnum)
- {
- case 0:
- pat = fn (NULL_RTX);
- break;
- case 1:
- pat = fn (op[0]);
- break;
- case 2:
- pat = fn (op[0], op[1]);
- break;
- case 3:
- pat = fn (op[0], op[1], op[2]);
- break;
- case 4:
- pat = fn (op[0], op[1], op[2], op[3]);
- break;
- case 5:
- pat = fn (op[0], op[1], op[2], op[3], op[4]);
- break;
- default:
- gcc_unreachable ();
- }
- if (!pat)
- return NULL_RTX;
-
- /* If we are generating a prefetch, tell the scheduler not to move
- it around. */
- if (GET_CODE (pat) == PREFETCH)
- PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
-
- emit_insn (pat);
-
- if (nonvoid)
- return target;
- else
- return const0_rtx;
-}
-
-
-/* Implement TARGET_BUILTIN_DECL. */
-static tree
-tilepro_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
-{
- if (code >= TILEPRO_BUILTIN_max)
- return error_mark_node;
-
- return tilepro_builtin_info[code].fndecl;
-}
-
-
-
-/* Stack frames */
-
-/* Return whether REGNO needs to be saved in the stack frame. */
-static bool
-need_to_save_reg (unsigned int regno)
-{
- if (!call_used_or_fixed_reg_p (regno)
- && df_regs_ever_live_p (regno))
- return true;
-
- if (flag_pic
- && (regno == PIC_OFFSET_TABLE_REGNUM
- || regno == TILEPRO_PIC_TEXT_LABEL_REGNUM)
- && (crtl->uses_pic_offset_table || crtl->saves_all_registers))
- return true;
-
- if (crtl->calls_eh_return)
- {
- unsigned i;
- for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM; i++)
- {
- if (regno == EH_RETURN_DATA_REGNO (i))
- return true;
- }
- }
-
- return false;
-}
-
-
-/* Return the size of the register savev area. This function is only
- correct starting with local register allocation */
-static int
-tilepro_saved_regs_size (void)
-{
- int reg_save_size = 0;
- int regno;
- int offset_to_frame;
- int align_mask;
-
- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- if (need_to_save_reg (regno))
- reg_save_size += UNITS_PER_WORD;
-
- /* Pad out the register save area if necessary to make
- frame_pointer_rtx be as aligned as the stack pointer. */
- offset_to_frame = crtl->args.pretend_args_size + reg_save_size;
- align_mask = (STACK_BOUNDARY / BITS_PER_UNIT) - 1;
- reg_save_size += (-offset_to_frame) & align_mask;
-
- return reg_save_size;
-}
-
-
-/* Round up frame size SIZE. */
-static int
-round_frame_size (int size)
-{
- return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
- & -STACK_BOUNDARY / BITS_PER_UNIT);
-}
-
-
-/* Emit a store in the stack frame to save REGNO at address ADDR, and
- emit the corresponding REG_CFA_OFFSET note described by CFA and
- CFA_OFFSET. Return the emitted insn. */
-static rtx
-frame_emit_store (int regno, int regno_note, rtx addr, rtx cfa,
- int cfa_offset)
-{
- rtx reg = gen_rtx_REG (Pmode, regno);
- rtx mem = gen_frame_mem (Pmode, addr);
- rtx mov = gen_movsi (mem, reg);
-
- /* Describe what just happened in a way that dwarf understands. We
- use temporary registers to hold the address to make scheduling
- easier, and use the REG_CFA_OFFSET to describe the address as an
- offset from the CFA. */
- rtx reg_note = gen_rtx_REG (Pmode, regno_note);
- rtx cfa_relative_addr = gen_rtx_PLUS (Pmode, cfa, gen_int_si (cfa_offset));
- rtx cfa_relative_mem = gen_frame_mem (Pmode, cfa_relative_addr);
- rtx real = gen_rtx_SET (cfa_relative_mem, reg_note);
- add_reg_note (mov, REG_CFA_OFFSET, real);
-
- return emit_insn (mov);
-}
-
-
-/* Emit a load in the stack frame to load REGNO from address ADDR.
- Add a REG_CFA_RESTORE note to CFA_RESTORES if CFA_RESTORES is
- non-null. Return the emitted insn. */
-static rtx_insn *
-frame_emit_load (int regno, rtx addr, rtx *cfa_restores)
-{
- rtx reg = gen_rtx_REG (Pmode, regno);
- rtx mem = gen_frame_mem (Pmode, addr);
- if (cfa_restores)
- *cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, *cfa_restores);
- return emit_insn (gen_movsi (reg, mem));
-}
-
-
-/* Helper function to set RTX_FRAME_RELATED_P on instructions,
- including sequences. */
-static rtx_insn *
-set_frame_related_p (void)
-{
- rtx_insn *seq = get_insns ();
- rtx_insn *insn;
-
- end_sequence ();
-
- if (!seq)
- return NULL;
-
- if (INSN_P (seq))
- {
- insn = seq;
- while (insn != NULL_RTX)
- {
- RTX_FRAME_RELATED_P (insn) = 1;
- insn = NEXT_INSN (insn);
- }
- seq = emit_insn (seq);
- }
- else
- {
- seq = emit_insn (seq);
- RTX_FRAME_RELATED_P (seq) = 1;
- }
- return seq;
-}
-
-
-#define FRP(exp) (start_sequence (), exp, set_frame_related_p ())
-
-/* This emits code for 'sp += offset'.
-
- The ABI only allows us to modify 'sp' in a single 'addi' or
- 'addli', so the backtracer understands it. Larger amounts cannot
- use those instructions, so are added by placing the offset into a
- large register and using 'add'.
-
- This happens after reload, so we need to expand it ourselves. */
-static rtx_insn *
-emit_sp_adjust (int offset, int *next_scratch_regno, bool frame_related,
- rtx reg_notes)
-{
- rtx to_add;
- rtx imm_rtx = gen_int_si (offset);
-
- rtx_insn *insn;
- if (satisfies_constraint_J (imm_rtx))
- {
- /* We can add this using a single addi or addli. */
- to_add = imm_rtx;
- }
- else
- {
- rtx tmp = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
- tilepro_expand_set_const32 (tmp, imm_rtx);
- to_add = tmp;
- }
-
- /* Actually adjust the stack pointer. */
- insn = emit_insn (gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx,
- to_add));
- REG_NOTES (insn) = reg_notes;
-
- /* Describe what just happened in a way that dwarf understands. */
- if (frame_related)
- {
- rtx real = gen_rtx_SET (stack_pointer_rtx,
- gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- imm_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
- add_reg_note (insn, REG_CFA_ADJUST_CFA, real);
- }
-
- return insn;
-}
-
-
-/* Return whether the current function is leaf. This takes into
- account whether the function calls tls_get_addr. */
-static bool
-tilepro_current_function_is_leaf (void)
-{
- return crtl->is_leaf && !cfun->machine->calls_tls_get_addr;
-}
-
-
-/* Return the frame size. */
-static int
-compute_total_frame_size (void)
-{
- int total_size = (get_frame_size () + tilepro_saved_regs_size ()
- + crtl->outgoing_args_size
- + crtl->args.pretend_args_size);
-
- if (!tilepro_current_function_is_leaf () || cfun->calls_alloca)
- {
- /* Make room for save area in callee. */
- total_size += STACK_POINTER_OFFSET;
- }
-
- return round_frame_size (total_size);
-}
-
-
-/* Return nonzero if this function is known to have a null epilogue.
- This allows the optimizer to omit jumps to jumps if no stack was
- created. */
-bool
-tilepro_can_use_return_insn_p (void)
-{
- return (reload_completed
- && cfun->static_chain_decl == 0
- && compute_total_frame_size () == 0
- && tilepro_current_function_is_leaf ()
- && !crtl->profile && !df_regs_ever_live_p (TILEPRO_LINK_REGNUM));
-}
-
-
-/* Returns an rtx for a stack slot at 'FP + offset_from_fp'. If there
- is a frame pointer, it computes the value relative to
- that. Otherwise it uses the stack pointer. */
-static rtx
-compute_frame_addr (int offset_from_fp, int *next_scratch_regno)
-{
- rtx base_reg_rtx, tmp_reg_rtx, offset_rtx;
- int offset_from_base;
-
- if (frame_pointer_needed)
- {
- base_reg_rtx = hard_frame_pointer_rtx;
- offset_from_base = offset_from_fp;
- }
- else
- {
- int offset_from_sp = compute_total_frame_size () + offset_from_fp;
- base_reg_rtx = stack_pointer_rtx;
- offset_from_base = offset_from_sp;
- }
-
- if (offset_from_base == 0)
- return base_reg_rtx;
-
- /* Compute the new value of the stack pointer. */
- tmp_reg_rtx = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
- offset_rtx = gen_int_si (offset_from_base);
-
- if (!tilepro_expand_addsi (tmp_reg_rtx, base_reg_rtx, offset_rtx))
- {
- emit_insn (gen_rtx_SET (tmp_reg_rtx,
- gen_rtx_PLUS (Pmode, base_reg_rtx,
- offset_rtx)));
- }
-
- return tmp_reg_rtx;
-}
-
-
-/* The stack frame looks like this:
- +-------------+
- | ... |
- | incoming |
- | stack args |
- AP -> +-------------+
- | caller's HFP|
- +-------------+
- | lr save |
- HFP -> +-------------+
- | var args |
- | reg save | crtl->args.pretend_args_size bytes
- +-------------+
- | ... |
- | saved regs | tilepro_saved_regs_size() bytes
- FP -> +-------------+
- | ... |
- | vars | get_frame_size() bytes
- +-------------+
- | ... |
- | outgoing |
- | stack args | crtl->outgoing_args_size bytes
- +-------------+
- | HFP | 4 bytes (only here if nonleaf / alloca)
- +-------------+
- | callee lr | 4 bytes (only here if nonleaf / alloca)
- | save |
- SP -> +-------------+
-
- HFP == incoming SP.
-
- For functions with a frame larger than 32767 bytes, or which use
- alloca (), r52 is used as a frame pointer. Otherwise there is no
- frame pointer.
-
- FP is saved at SP+4 before calling a subroutine so the
- callee can chain. */
-void
-tilepro_expand_prologue (void)
-{
-#define ROUND_ROBIN_SIZE 4
- /* We round-robin through four scratch registers to hold temporary
- addresses for saving registers, to make instruction scheduling
- easier. */
- rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
- NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
- };
- rtx insn, cfa;
- unsigned int which_scratch;
- int offset, start_offset, regno;
-
- /* A register that holds a copy of the incoming fp. */
- int fp_copy_regno = -1;
-
- /* A register that holds a copy of the incoming sp. */
- int sp_copy_regno = -1;
-
- /* Next scratch register number to hand out (postdecrementing). */
- int next_scratch_regno = 29;
-
- int total_size = compute_total_frame_size ();
-
- if (flag_stack_usage_info)
- current_function_static_stack_size = total_size;
-
- /* Save lr first in its special location because code after this
- might use the link register as a scratch register. */
- if (df_regs_ever_live_p (TILEPRO_LINK_REGNUM) || crtl->calls_eh_return)
- {
- FRP (frame_emit_store (TILEPRO_LINK_REGNUM, TILEPRO_LINK_REGNUM,
- stack_pointer_rtx, stack_pointer_rtx, 0));
- emit_insn (gen_blockage ());
- }
-
- if (total_size == 0)
- {
- /* Load the PIC register if needed. */
- if (flag_pic && crtl->uses_pic_offset_table)
- load_pic_register (false);
-
- return;
- }
-
- cfa = stack_pointer_rtx;
-
- if (frame_pointer_needed)
- {
- fp_copy_regno = next_scratch_regno--;
-
- /* Copy the old frame pointer aside so we can save it later. */
- insn = FRP (emit_move_insn (gen_rtx_REG (word_mode, fp_copy_regno),
- hard_frame_pointer_rtx));
- add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX);
-
- /* Set up the frame pointer. */
- insn = FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx));
- add_reg_note (insn, REG_CFA_DEF_CFA, hard_frame_pointer_rtx);
- cfa = hard_frame_pointer_rtx;
- REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY;
-
- /* fp holds a copy of the incoming sp, in case we need to store
- it. */
- sp_copy_regno = HARD_FRAME_POINTER_REGNUM;
- }
- else if (!tilepro_current_function_is_leaf ())
- {
- /* Copy the old stack pointer aside so we can save it later. */
- sp_copy_regno = next_scratch_regno--;
- emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno),
- stack_pointer_rtx);
- }
-
- if (tilepro_current_function_is_leaf ())
- {
- /* No need to store chain pointer to caller's frame. */
- emit_sp_adjust (-total_size, &next_scratch_regno,
- !frame_pointer_needed, NULL_RTX);
- }
- else
- {
- /* Save the frame pointer (incoming sp value) to support
- backtracing. First we need to create an rtx with the store
- address. */
- rtx chain_addr = gen_rtx_REG (Pmode, next_scratch_regno--);
- rtx size_rtx = gen_int_si (-(total_size - UNITS_PER_WORD));
-
- if (add_operand (size_rtx, Pmode))
- {
- /* Expose more parallelism by computing this value from the
- original stack pointer, not the one after we have pushed
- the frame. */
- rtx p = gen_rtx_PLUS (Pmode, stack_pointer_rtx, size_rtx);
- emit_insn (gen_rtx_SET (chain_addr, p));
- emit_sp_adjust (-total_size, &next_scratch_regno,
- !frame_pointer_needed, NULL_RTX);
- }
- else
- {
- /* The stack frame is large, so just store the incoming sp
- value at *(new_sp + UNITS_PER_WORD). */
- rtx p;
- emit_sp_adjust (-total_size, &next_scratch_regno,
- !frame_pointer_needed, NULL_RTX);
- p = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
- GEN_INT (UNITS_PER_WORD));
- emit_insn (gen_rtx_SET (chain_addr, p));
- }
-
- /* Save our frame pointer for backtrace chaining. */
- emit_insn (gen_movsi (gen_frame_mem (SImode, chain_addr),
- gen_rtx_REG (SImode, sp_copy_regno)));
- }
-
- /* Compute where to start storing registers we need to save. */
- start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
- offset = start_offset;
-
- /* Store all registers that need saving. */
- which_scratch = 0;
- for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
- if (need_to_save_reg (regno))
- {
- rtx r = reg_save_addr[which_scratch];
- int from_regno;
- int cfa_offset = frame_pointer_needed ? offset : total_size + offset;
-
- if (r == NULL_RTX)
- {
- rtx p = compute_frame_addr (offset, &next_scratch_regno);
- r = gen_rtx_REG (word_mode, next_scratch_regno--);
- reg_save_addr[which_scratch] = r;
-
- emit_insn (gen_rtx_SET (r, p));
- }
- else
- {
- /* Advance to the next stack slot to store this register. */
- int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
- rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
- emit_insn (gen_rtx_SET (r, p));
- }
-
- /* Save this register to the stack (but use the old fp value
- we copied aside if appropriate). */
- from_regno = (fp_copy_regno >= 0
- && regno ==
- HARD_FRAME_POINTER_REGNUM) ? fp_copy_regno : regno;
- FRP (frame_emit_store (from_regno, regno, r, cfa, cfa_offset));
-
- offset -= UNITS_PER_WORD;
- which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
- }
-
- /* If profiling, force that to happen after the frame is set up. */
- if (crtl->profile)
- emit_insn (gen_blockage ());
-
- /* Load the PIC register if needed. */
- if (flag_pic && crtl->uses_pic_offset_table)
- load_pic_register (false);
-}
-
-
-/* Implement the epilogue and sibcall_epilogue patterns. SIBCALL_P is
- true for a sibcall_epilogue pattern, and false for an epilogue
- pattern. */
-void
-tilepro_expand_epilogue (bool sibcall_p)
-{
- /* We round-robin through four scratch registers to hold temporary
- addresses for saving registers, to make instruction scheduling
- easier. */
- rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
- NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
- };
- rtx_insn *last_insn, *insn;
- unsigned int which_scratch;
- int offset, start_offset, regno;
- rtx cfa_restores = NULL_RTX;
-
- /* A register that holds a copy of the incoming fp. */
- int fp_copy_regno = -1;
-
- /* Next scratch register number to hand out (postdecrementing). */
- int next_scratch_regno = 29;
-
- int total_size = compute_total_frame_size ();
-
- last_insn = get_last_insn ();
-
- /* Load lr first since we are going to need it first. */
- insn = NULL;
- if (df_regs_ever_live_p (TILEPRO_LINK_REGNUM))
- {
- insn = frame_emit_load (TILEPRO_LINK_REGNUM,
- compute_frame_addr (0, &next_scratch_regno),
- &cfa_restores);
- }
-
- if (total_size == 0)
- {
- if (insn)
- {
- RTX_FRAME_RELATED_P (insn) = 1;
- REG_NOTES (insn) = cfa_restores;
- }
- goto done;
- }
-
- /* Compute where to start restoring registers. */
- start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
- offset = start_offset;
-
- if (frame_pointer_needed)
- fp_copy_regno = next_scratch_regno--;
-
- /* Restore all callee-saved registers. */
- which_scratch = 0;
- for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
- if (need_to_save_reg (regno))
- {
- rtx r = reg_save_addr[which_scratch];
- if (r == NULL_RTX)
- {
- r = compute_frame_addr (offset, &next_scratch_regno);
- reg_save_addr[which_scratch] = r;
- }
- else
- {
- /* Advance to the next stack slot to store this
- register. */
- int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
- rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
- emit_insn (gen_rtx_SET (r, p));
- }
-
- if (fp_copy_regno >= 0 && regno == HARD_FRAME_POINTER_REGNUM)
- frame_emit_load (fp_copy_regno, r, NULL);
- else
- frame_emit_load (regno, r, &cfa_restores);
-
- offset -= UNITS_PER_WORD;
- which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
- }
-
- if (!tilepro_current_function_is_leaf ())
- cfa_restores =
- alloc_reg_note (REG_CFA_RESTORE, stack_pointer_rtx, cfa_restores);
-
- emit_insn (gen_blockage ());
-
- if (frame_pointer_needed)
- {
- /* Restore the old stack pointer by copying from the frame
- pointer. */
- insn = emit_insn (gen_sp_restore (stack_pointer_rtx,
- hard_frame_pointer_rtx));
- RTX_FRAME_RELATED_P (insn) = 1;
- REG_NOTES (insn) = cfa_restores;
- add_reg_note (insn, REG_CFA_DEF_CFA, stack_pointer_rtx);
- }
- else
- {
- insn = emit_sp_adjust (total_size, &next_scratch_regno, true,
- cfa_restores);
- }
-
- if (crtl->calls_eh_return)
- emit_insn (gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx,
- EH_RETURN_STACKADJ_RTX));
-
- /* Restore the old frame pointer. */
- if (frame_pointer_needed)
- {
- insn = emit_move_insn (hard_frame_pointer_rtx,
- gen_rtx_REG (Pmode, fp_copy_regno));
- add_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx);
- }
-
- /* Mark the pic registers as live outside of the function. */
- if (flag_pic)
- {
- emit_use (cfun->machine->text_label_rtx);
- emit_use (cfun->machine->got_rtx);
- }
-
-done:
- if (!sibcall_p)
- {
- /* Emit the actual 'return' instruction. */
- emit_jump_insn (gen__return ());
- }
- else
- {
- emit_use (gen_rtx_REG (Pmode, TILEPRO_LINK_REGNUM));
- }
-
- /* Mark all insns we just emitted as frame-related. */
- for (; last_insn != NULL_RTX; last_insn = next_insn (last_insn))
- RTX_FRAME_RELATED_P (last_insn) = 1;
-}
-
-#undef ROUND_ROBIN_SIZE
-
-
-/* Implement INITIAL_ELIMINATION_OFFSET. */
-int
-tilepro_initial_elimination_offset (int from, int to)
-{
- int total_size = compute_total_frame_size ();
-
- if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- {
- return (total_size - crtl->args.pretend_args_size
- - tilepro_saved_regs_size ());
- }
- else if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
- {
- return -(crtl->args.pretend_args_size + tilepro_saved_regs_size ());
- }
- else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- {
- return STACK_POINTER_OFFSET + total_size;
- }
- else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
- {
- return STACK_POINTER_OFFSET;
- }
- else
- gcc_unreachable ();
-}
-
-
-/* Return an RTX indicating where the return address to the
- calling function can be found. */
-rtx
-tilepro_return_addr (int count, rtx frame ATTRIBUTE_UNUSED)
-{
- if (count != 0)
- return const0_rtx;
-
- return get_hard_reg_initial_val (Pmode, TILEPRO_LINK_REGNUM);
-}
-
-
-/* Implement EH_RETURN_HANDLER_RTX. */
-rtx
-tilepro_eh_return_handler_rtx (void)
-{
- /* The MEM needs to be volatile to prevent it from being
- deleted. */
- rtx tmp = gen_frame_mem (Pmode, hard_frame_pointer_rtx);
- MEM_VOLATILE_P (tmp) = true;
- return tmp;
-}
-
-
-
-/* Registers */
-
-/* Implemnet TARGET_CONDITIONAL_REGISTER_USAGE. */
-static void
-tilepro_conditional_register_usage (void)
-{
- global_regs[TILEPRO_NETORDER_REGNUM] = 1;
- /* TILEPRO_PIC_TEXT_LABEL_REGNUM is conditionally used. */
- if (TILEPRO_PIC_TEXT_LABEL_REGNUM != INVALID_REGNUM)
- fixed_regs[TILEPRO_PIC_TEXT_LABEL_REGNUM] = 1;
- if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
- fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
-}
-
-
-/* Implement TARGET_FRAME_POINTER_REQUIRED. */
-static bool
-tilepro_frame_pointer_required (void)
-{
- return crtl->calls_eh_return || cfun->calls_alloca;
-}
-
-
-
-/* Scheduling and reorg */
-
-/* Return the length of INSN. LENGTH is the initial length computed
- by attributes in the machine-description file. This is where we
- account for bundles. */
-int
-tilepro_adjust_insn_length (rtx_insn *insn, int length)
-{
- machine_mode mode = GET_MODE (insn);
-
- /* A non-termininating instruction in a bundle has length 0. */
- if (mode == SImode)
- return 0;
-
- /* By default, there is not length adjustment. */
- return length;
-}
-
-
-/* Implement TARGET_SCHED_ISSUE_RATE. */
-static int
-tilepro_issue_rate (void)
-{
- return 3;
-}
-
-
-/* Return the rtx for the jump target. */
-static rtx
-get_jump_target (rtx branch)
-{
- if (CALL_P (branch))
- {
- rtx call;
- call = PATTERN (branch);
-
- if (GET_CODE (call) == PARALLEL)
- call = XVECEXP (call, 0, 0);
-
- if (GET_CODE (call) == SET)
- call = SET_SRC (call);
-
- if (GET_CODE (call) == CALL)
- return XEXP (XEXP (call, 0), 0);
- }
- return 0;
-}
-
-/* Implement TARGET_SCHED_ADJUST_COST. */
-static int
-tilepro_sched_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn,
- int cost, unsigned int)
-{
- /* If we have a true dependence, INSN is a call, and DEP_INSN
- defines a register that is needed by the call (argument or stack
- pointer), set its latency to 0 so that it can be bundled with
- the call. Explicitly check for and exclude the case when
- DEP_INSN defines the target of the jump. */
- if (CALL_P (insn) && dep_type == REG_DEP_TRUE)
- {
- rtx target = get_jump_target (insn);
- if (!REG_P (target) || !set_of (target, dep_insn))
- return 0;
- }
-
- return cost;
-}
-
-
-/* Skip over irrelevant NOTEs and such and look for the next insn we
- would consider bundling. */
-static rtx_insn *
-next_insn_to_bundle (rtx_insn *r, rtx_insn *end)
-{
- for (; r != end; r = NEXT_INSN (r))
- {
- if (NONDEBUG_INSN_P (r)
- && GET_CODE (PATTERN (r)) != USE
- && GET_CODE (PATTERN (r)) != CLOBBER)
- return r;
- }
-
- return NULL;
-}
-
-
-/* Go through all insns, and use the information generated during
- scheduling to generate SEQUENCEs to represent bundles of
- instructions issued simultaneously. */
-static void
-tilepro_gen_bundles (void)
-{
- basic_block bb;
- FOR_EACH_BB_FN (bb, cfun)
- {
- rtx_insn *insn, *next;
- rtx_insn *end = NEXT_INSN (BB_END (bb));
-
- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
- {
- next = next_insn_to_bundle (NEXT_INSN (insn), end);
-
- /* Never wrap {} around inline asm. */
- if (GET_CODE (PATTERN (insn)) != ASM_INPUT)
- {
- if (next == NULL_RTX || GET_MODE (next) == TImode
- /* NOTE: The scheduler incorrectly believes a call
- insn can execute in the same cycle as the insn
- after the call. This is of course impossible.
- Really we need to fix the scheduler somehow, so
- the code after the call gets scheduled
- optimally. */
- || CALL_P (insn))
- {
- /* Mark current insn as the end of a bundle. */
- PUT_MODE (insn, QImode);
- }
- else
- {
- /* Mark it as part of a bundle. */
- PUT_MODE (insn, SImode);
- }
- }
- }
- }
-}
-
-
-/* Helper function for tilepro_fixup_pcrel_references. */
-static void
-replace_pc_relative_symbol_ref (rtx_insn *insn, rtx opnds[4], bool first_insn_p)
-{
- rtx_insn *new_insns;
-
- start_sequence ();
-
- if (flag_pic == 1)
- {
- if (!first_insn_p)
- {
- emit_insn (gen_add_got16 (opnds[0], tilepro_got_rtx (),
- opnds[2]));
- emit_insn (gen_insn_lw (opnds[0], opnds[0]));
- }
- }
- else
- {
- if (first_insn_p)
- {
- emit_insn (gen_addhi_got32 (opnds[0], tilepro_got_rtx (),
- opnds[2]));
- }
- else
- {
- emit_insn (gen_addlo_got32 (opnds[0], opnds[1], opnds[2]));
- emit_insn (gen_insn_lw (opnds[0], opnds[0]));
- }
- }
-
- new_insns = get_insns ();
- end_sequence ();
-
- if (new_insns)
- emit_insn_before (new_insns, insn);
-
- delete_insn (insn);
-}
-
-
-/* Returns whether INSN is a pc-relative addli insn. */
-static bool
-match_addli_pcrel (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx unspec;
-
- if (GET_CODE (pattern) != SET)
- return false;
-
- if (GET_CODE (SET_SRC (pattern)) != LO_SUM)
- return false;
-
- if (GET_CODE (XEXP (SET_SRC (pattern), 1)) != CONST)
- return false;
-
- unspec = XEXP (XEXP (SET_SRC (pattern), 1), 0);
-
- return (GET_CODE (unspec) == UNSPEC
- && XINT (unspec, 1) == UNSPEC_PCREL_SYM);
-}
-
-
-/* Helper function for tilepro_fixup_pcrel_references. */
-static void
-replace_addli_pcrel (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx set_src;
- rtx unspec;
- rtx opnds[4];
- bool first_insn_p;
-
- gcc_assert (GET_CODE (pattern) == SET);
- opnds[0] = SET_DEST (pattern);
-
- set_src = SET_SRC (pattern);
- gcc_assert (GET_CODE (set_src) == LO_SUM);
- gcc_assert (GET_CODE (XEXP (set_src, 1)) == CONST);
- opnds[1] = XEXP (set_src, 0);
-
- unspec = XEXP (XEXP (set_src, 1), 0);
- gcc_assert (GET_CODE (unspec) == UNSPEC);
- gcc_assert (XINT (unspec, 1) == UNSPEC_PCREL_SYM);
- opnds[2] = XVECEXP (unspec, 0, 0);
- opnds[3] = XVECEXP (unspec, 0, 1);
-
- /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */
- if (GET_CODE (opnds[2]) != SYMBOL_REF)
- return;
-
- first_insn_p = (opnds[1] == tilepro_text_label_rtx ());
-
- replace_pc_relative_symbol_ref (insn, opnds, first_insn_p);
-}
-
-
-/* Returns whether INSN is a pc-relative auli insn. */
-static bool
-match_auli_pcrel (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx high;
- rtx unspec;
-
- if (GET_CODE (pattern) != SET)
- return false;
-
- if (GET_CODE (SET_SRC (pattern)) != PLUS)
- return false;
-
- high = XEXP (SET_SRC (pattern), 1);
-
- if (GET_CODE (high) != HIGH
- || GET_CODE (XEXP (high, 0)) != CONST)
- return false;
-
- unspec = XEXP (XEXP (high, 0), 0);
-
- return (GET_CODE (unspec) == UNSPEC
- && XINT (unspec, 1) == UNSPEC_PCREL_SYM);
-}
-
-
-/* Helper function for tilepro_fixup_pcrel_references. */
-static void
-replace_auli_pcrel (rtx_insn *insn)
-{
- rtx pattern = PATTERN (insn);
- rtx set_src;
- rtx high;
- rtx unspec;
- rtx opnds[4];
- bool first_insn_p;
-
- gcc_assert (GET_CODE (pattern) == SET);
- opnds[0] = SET_DEST (pattern);
-
- set_src = SET_SRC (pattern);
- gcc_assert (GET_CODE (set_src) == PLUS);
- opnds[1] = XEXP (set_src, 0);
-
- high = XEXP (set_src, 1);
- gcc_assert (GET_CODE (high) == HIGH);
- gcc_assert (GET_CODE (XEXP (high, 0)) == CONST);
-
- unspec = XEXP (XEXP (high, 0), 0);
- gcc_assert (GET_CODE (unspec) == UNSPEC);
- gcc_assert (XINT (unspec, 1) == UNSPEC_PCREL_SYM);
- opnds[2] = XVECEXP (unspec, 0, 0);
- opnds[3] = XVECEXP (unspec, 0, 1);
-
- /* We only need to replace SYMBOL_REFs, not LABEL_REFs. */
- if (GET_CODE (opnds[2]) != SYMBOL_REF)
- return;
-
- first_insn_p = (opnds[1] == tilepro_text_label_rtx ());
-
- replace_pc_relative_symbol_ref (insn, opnds, first_insn_p);
-}
-
-
-/* We generate PC relative SYMBOL_REFs as an optimization, to avoid
- going through the GOT when the symbol is local to the compilation
- unit. But such a symbol requires that the common text_label that
- we generate at the beginning of the function be in the same section
- as the reference to the SYMBOL_REF. This may not be true if we
- generate hot/cold sections. This function looks for such cases and
- replaces such references with the longer sequence going through the
- GOT.
-
- We expect one of the following two instruction sequences:
- addli tmp1, txt_label_reg, lo16(sym - txt_label)
- auli tmp2, tmp1, ha16(sym - txt_label)
-
- auli tmp1, txt_label_reg, ha16(sym - txt_label)
- addli tmp2, tmp1, lo16(sym - txt_label)
-
- If we're compiling -fpic, we replace the first instruction with
- nothing, and the second instruction with:
-
- addli tmp2, got_rtx, got(sym)
- lw tmp2, tmp2
-
- If we're compiling -fPIC, we replace the first instruction with:
-
- auli tmp1, got_rtx, got_ha16(sym)
-
- and the second instruction with:
-
- addli tmp2, tmp1, got_lo16(sym)
- lw tmp2, tmp2
-
- Note that we're careful to disturb the instruction sequence as
- little as possible, since it's very late in the compilation
- process.
-*/
-static void
-tilepro_fixup_pcrel_references (void)
-{
- rtx_insn *insn, *next_insn;
- bool same_section_as_entry = true;
-
- for (insn = get_insns (); insn; insn = next_insn)
- {
- next_insn = NEXT_INSN (insn);
-
- if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
- {
- same_section_as_entry = !same_section_as_entry;
- continue;
- }
-
- if (same_section_as_entry)
- continue;
-
- if (!(INSN_P (insn)
- && GET_CODE (PATTERN (insn)) != USE
- && GET_CODE (PATTERN (insn)) != CLOBBER))
- continue;
-
- if (match_addli_pcrel (insn))
- replace_addli_pcrel (insn);
- else if (match_auli_pcrel (insn))
- replace_auli_pcrel (insn);
- }
-}
-
-
-/* Ensure that no var tracking notes are emitted in the middle of a
- three-instruction bundle. */
-static void
-reorder_var_tracking_notes (void)
-{
- basic_block bb;
- FOR_EACH_BB_FN (bb, cfun)
- {
- rtx_insn *insn, *next;
- rtx_insn *queue = NULL;
- bool in_bundle = false;
-
- for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = next)
- {
- next = NEXT_INSN (insn);
-
- if (INSN_P (insn))
- {
- /* Emit queued up notes at the last instruction of a bundle. */
- if (GET_MODE (insn) == QImode)
- {
- while (queue)
- {
- rtx_insn *next_queue = PREV_INSN (queue);
- SET_PREV_INSN (NEXT_INSN (insn)) = queue;
- SET_NEXT_INSN (queue) = NEXT_INSN (insn);
- SET_NEXT_INSN (insn) = queue;
- SET_PREV_INSN (queue) = insn;
- queue = next_queue;
- }
- in_bundle = false;
- }
- else if (GET_MODE (insn) == SImode)
- in_bundle = true;
- }
- else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
- {
- if (in_bundle)
- {
- rtx_insn *prev = PREV_INSN (insn);
- SET_PREV_INSN (next) = prev;
- SET_NEXT_INSN (prev) = next;
-
- SET_PREV_INSN (insn) = queue;
- queue = insn;
- }
- }
- }
- }
-}
-
-
-/* Perform machine dependent operations on the rtl chain INSNS. */
-static void
-tilepro_reorg (void)
-{
- /* We are freeing block_for_insn in the toplev to keep compatibility
- with old MDEP_REORGS that are not CFG based. Recompute it
- now. */
- compute_bb_for_insn ();
-
- if (flag_reorder_blocks_and_partition)
- {
- tilepro_fixup_pcrel_references ();
- }
-
- if (flag_schedule_insns_after_reload)
- {
- split_all_insns ();
-
- timevar_push (TV_SCHED2);
- schedule_insns ();
- timevar_pop (TV_SCHED2);
-
- /* Examine the schedule to group into bundles. */
- tilepro_gen_bundles ();
- }
-
- df_analyze ();
-
- if (flag_var_tracking)
- {
- timevar_push (TV_VAR_TRACKING);
- variable_tracking_main ();
- reorder_var_tracking_notes ();
- timevar_pop (TV_VAR_TRACKING);
- }
-
- df_finish_pass (false);
-}
-
-
-
-/* Assembly */
-
-/* Select a format to encode pointers in exception handling data.
- CODE is 0 for data, 1 for code labels, 2 for function pointers.
- GLOBAL is true if the symbol may be affected by dynamic
- relocations. */
-int
-tilepro_asm_preferred_eh_data_format (int code ATTRIBUTE_UNUSED, int global)
-{
- return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4;
-}
-
-
-/* Implement TARGET_ASM_OUTPUT_MI_THUNK. */
-static void
-tilepro_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
- HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
- tree function)
-{
- const char *fnname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (thunk_fndecl));
- rtx this_rtx, funexp;
- rtx_insn *insn;
-
- /* Pretend to be a post-reload pass while generating rtl. */
- reload_completed = 1;
-
- /* Mark the end of the (empty) prologue. */
- emit_note (NOTE_INSN_PROLOGUE_END);
-
- /* Find the "this" pointer. If the function returns a structure,
- the structure return pointer is in $1. */
- if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
- this_rtx = gen_rtx_REG (Pmode, 1);
- else
- this_rtx = gen_rtx_REG (Pmode, 0);
-
- /* Add DELTA to THIS_RTX. */
- emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
-
- /* If needed, add *(*THIS_RTX + VCALL_OFFSET) to THIS_RTX. */
- if (vcall_offset)
- {
- rtx tmp;
-
- tmp = gen_rtx_REG (Pmode, 29);
- emit_move_insn (tmp, gen_rtx_MEM (Pmode, this_rtx));
-
- emit_insn (gen_addsi3 (tmp, tmp, GEN_INT (vcall_offset)));
-
- emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp));
-
- emit_insn (gen_addsi3 (this_rtx, this_rtx, tmp));
- }
-
- /* Generate a tail call to the target function. */
- if (!TREE_USED (function))
- {
- assemble_external (function);
- TREE_USED (function) = 1;
- }
- funexp = XEXP (DECL_RTL (function), 0);
- funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
- insn = emit_call_insn (gen_sibcall (funexp, const0_rtx));
- SIBLING_CALL_P (insn) = 1;
-
- /* Run just enough of rest_of_compilation to get the insns emitted.
- There's not really enough bulk here to make other passes such as
- instruction scheduling worth while.
-
- We don't currently bundle, but the instruciton sequence is all
- serial except for the tail call, so we're only wasting one cycle.
- */
- insn = get_insns ();
- shorten_branches (insn);
- assemble_start_function (thunk_fndecl, fnname);
- final_start_function (insn, file, 1);
- final (insn, file, 1);
- final_end_function ();
- assemble_end_function (thunk_fndecl, fnname);
-
- /* Stop pretending to be a post-reload pass. */
- reload_completed = 0;
-}
-
-
-/* Implement TARGET_ASM_TRAMPOLINE_TEMPLATE. */
-static void
-tilepro_asm_trampoline_template (FILE *file)
-{
- fprintf (file, "\tlnk r10\n");
- fprintf (file, "\taddi r10, r10, 32\n");
- fprintf (file, "\tlwadd r11, r10, %d\n", GET_MODE_SIZE (ptr_mode));
- fprintf (file, "\tlw r10, r10\n");
- fprintf (file, "\tjr r11\n");
- fprintf (file, "\t.word 0 # <function address>\n");
- fprintf (file, "\t.word 0 # <static chain value>\n");
-}
-
-
-/* Implement TARGET_TRAMPOLINE_INIT. */
-static void
-tilepro_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
-{
- rtx fnaddr, chaddr;
- rtx mem;
- rtx begin_addr, end_addr;
- int ptr_mode_size = GET_MODE_SIZE (ptr_mode);
-
- fnaddr = copy_to_reg (XEXP (DECL_RTL (fndecl), 0));
- chaddr = copy_to_reg (static_chain);
-
- emit_block_move (m_tramp, assemble_trampoline_template (),
- GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
-
- mem = adjust_address (m_tramp, ptr_mode,
- TRAMPOLINE_SIZE - 2 * ptr_mode_size);
- emit_move_insn (mem, fnaddr);
- mem = adjust_address (m_tramp, ptr_mode,
- TRAMPOLINE_SIZE - ptr_mode_size);
- emit_move_insn (mem, chaddr);
-
- /* Get pointers to the beginning and end of the code block. */
- begin_addr = force_reg (Pmode, XEXP (m_tramp, 0));
- end_addr = force_reg (Pmode, plus_constant (Pmode, XEXP (m_tramp, 0),
- TRAMPOLINE_SIZE));
-
- maybe_emit_call_builtin___clear_cache (begin_addr, end_addr);
-}
-
-
-/* Implement TARGET_PRINT_OPERAND. */
-static void
-tilepro_print_operand (FILE *file, rtx x, int code)
-{
- switch (code)
- {
- case 'c':
- /* Print the compare operator opcode for conditional moves. */
- switch (GET_CODE (x))
- {
- case EQ:
- fputs ("z", file);
- break;
- case NE:
- fputs ("nz", file);
- break;
- default:
- output_operand_lossage ("invalid %%c operand");
- }
- return;
-
- case 'C':
- /* Print the compare operator opcode for conditional moves. */
- switch (GET_CODE (x))
- {
- case EQ:
- fputs ("nz", file);
- break;
- case NE:
- fputs ("z", file);
- break;
- default:
- output_operand_lossage ("invalid %%C operand");
- }
- return;
-
- case 'h':
- {
- /* Print the high 16 bits of a 32-bit constant. */
- HOST_WIDE_INT i;
- if (CONST_INT_P (x))
- i = INTVAL (x);
- else if (GET_CODE (x) == CONST_DOUBLE)
- i = CONST_DOUBLE_LOW (x);
- else
- {
- output_operand_lossage ("invalid %%h operand");
- return;
- }
- i = trunc_int_for_mode (i >> 16, HImode);
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
- return;
- }
-
- case 'H':
- {
- rtx addr = NULL;
- const char *opstr = NULL;
- bool pcrel = false;
- if (GET_CODE (x) == CONST
- && GET_CODE (XEXP (x, 0)) == UNSPEC)
- {
- addr = XVECEXP (XEXP (x, 0), 0, 0);
- switch (XINT (XEXP (x, 0), 1))
- {
- case UNSPEC_GOT32_SYM:
- opstr = "got_ha16";
- break;
- case UNSPEC_PCREL_SYM:
- opstr = "ha16";
- pcrel = true;
- break;
- case UNSPEC_TLS_GD:
- opstr = "tls_gd_ha16";
- break;
- case UNSPEC_TLS_IE:
- opstr = "tls_ie_ha16";
- break;
- case UNSPEC_TLS_LE:
- opstr = "tls_le_ha16";
- break;
- default:
- output_operand_lossage ("invalid %%H operand");
- }
- }
- else
- {
- addr = x;
- opstr = "ha16";
- }
-
- fputs (opstr, file);
- fputc ('(', file);
- output_addr_const (file, addr);
-
- if (pcrel)
- {
- rtx addr2 = XVECEXP (XEXP (x, 0), 0, 1);
- fputs (" - " , file);
- output_addr_const (file, addr2);
- }
-
- fputc (')', file);
- return;
- }
-
- case 'I':
- /* Print an auto-inc memory operand. */
- if (!MEM_P (x))
- {
- output_operand_lossage ("invalid %%I operand");
- return;
- }
-
- output_memory_autoinc_first = true;
- output_address (GET_MODE (x), XEXP (x, 0));
- return;
-
- case 'i':
- /* Print an auto-inc memory operand. */
- if (!MEM_P (x))
- {
- output_operand_lossage ("invalid %%i operand");
- return;
- }
-
- output_memory_autoinc_first = false;
- output_address (GET_MODE (x), XEXP (x, 0));
- return;
-
- case 'j':
- {
- /* Print the low 8 bits of a constant. */
- HOST_WIDE_INT i;
- if (CONST_INT_P (x))
- i = INTVAL (x);
- else if (GET_CODE (x) == CONST_DOUBLE)
- i = CONST_DOUBLE_LOW (x);
- else if (GET_CODE (x) == CONST_VECTOR
- && CONST_INT_P (CONST_VECTOR_ELT (x, 0)))
- i = INTVAL (CONST_VECTOR_ELT (x, 0));
- else
- {
- output_operand_lossage ("invalid %%j operand");
- return;
- }
- i = trunc_int_for_mode (i, QImode);
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
- return;
- }
-
- case 'L':
- {
- rtx addr = NULL;
- const char *opstr = NULL;
- bool pcrel = false;
- if (GET_CODE (x) == CONST
- && GET_CODE (XEXP (x, 0)) == UNSPEC)
- {
- addr = XVECEXP (XEXP (x, 0), 0, 0);
- switch (XINT (XEXP (x, 0), 1))
- {
- case UNSPEC_GOT16_SYM:
- opstr = "got";
- break;
- case UNSPEC_GOT32_SYM:
- opstr = "got_lo16";
- break;
- case UNSPEC_PCREL_SYM:
- opstr = "lo16";
- pcrel = true;
- break;
- case UNSPEC_TLS_GD:
- opstr = "tls_gd_lo16";
- break;
- case UNSPEC_TLS_IE:
- opstr = "tls_ie_lo16";
- break;
- case UNSPEC_TLS_LE:
- opstr = "tls_le_lo16";
- break;
- default:
- output_operand_lossage ("invalid %%L operand");
- }
- }
- else
- {
- addr = x;
- opstr = "lo16";
- }
-
- fputs (opstr, file);
- fputc ('(', file);
- output_addr_const (file, addr);
-
- if (pcrel)
- {
- rtx addr2 = XVECEXP (XEXP (x, 0), 0, 1);
- fputs (" - " , file);
- output_addr_const (file, addr2);
- }
-
- fputc (')', file);
- return;
- }
-
- case 'p':
- if (GET_CODE (x) == SYMBOL_REF)
- {
- if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
- fprintf (file, "plt(");
- output_addr_const (file, x);
- if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
- fprintf (file, ")");
- }
- else
- output_addr_const (file, x);
- return;
-
- case 'P':
- {
- /* Print a 32-bit constant plus one. */
- HOST_WIDE_INT i;
- if (!CONST_INT_P (x))
- {
- output_operand_lossage ("invalid %%P operand");
- return;
- }
- i = trunc_int_for_mode (INTVAL (x) + 1, SImode);
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
- return;
- }
-
- case 'M':
- {
- /* Print an mm-style bit range. */
- int first_bit, last_bit;
-
- if (!CONST_INT_P (x)
- || !tilepro_bitfield_operand_p (INTVAL (x), &first_bit,
- &last_bit))
- {
- output_operand_lossage ("invalid %%M operand");
- return;
- }
-
- fprintf (file, "%d, %d", first_bit, last_bit);
- return;
- }
-
- case 'N':
- {
- const char *reg = NULL;
-
- /* Print a network register. */
- if (!CONST_INT_P (x))
- {
- output_operand_lossage ("invalid %%N operand");
- return;
- }
-
- switch (INTVAL (x))
- {
- case TILEPRO_NETREG_IDN0: reg = "idn0"; break;
- case TILEPRO_NETREG_IDN1: reg = "idn1"; break;
- case TILEPRO_NETREG_SN: reg = "sn"; break;
- case TILEPRO_NETREG_UDN0: reg = "udn0"; break;
- case TILEPRO_NETREG_UDN1: reg = "udn1"; break;
- case TILEPRO_NETREG_UDN2: reg = "udn2"; break;
- case TILEPRO_NETREG_UDN3: reg = "udn3"; break;
- default: gcc_unreachable ();
- }
-
- fprintf (file, reg);
- return;
- }
-
- case 't':
- {
- /* Log base 2 of a power of two. */
- HOST_WIDE_INT i;
- HOST_WIDE_INT n;
-
- if (!CONST_INT_P (x))
- {
- output_operand_lossage ("invalid %%t operand");
- return;
- }
- n = trunc_int_for_mode (INTVAL (x), SImode);
- i = exact_log2 (n);
- if (i < 0)
- {
- output_operand_lossage ("invalid %%t operand");
- return;
- }
-
- fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
- return;
- }
- break;
-
- case 'r':
- /* In this case we need a register. Use 'zero' if the
- operand is const0_rtx. */
- if (x == const0_rtx
- || (GET_MODE (x) != VOIDmode && x == CONST0_RTX (GET_MODE (x))))
- {
- fputs ("zero", file);
- return;
- }
- else if (!REG_P (x))
- {
- output_operand_lossage ("invalid %%r operand");
- return;
- }
- /* FALLTHRU */
-
- case 0:
- if (REG_P (x))
- {
- fprintf (file, "%s", reg_names[REGNO (x)]);
- return;
- }
- else if (MEM_P (x))
- {
- output_address (VOIDmode, XEXP (x, 0));
- return;
- }
- else
- {
- output_addr_const (file, x);
- return;
- }
- break;
- }
-
- debug_rtx (x);
- output_operand_lossage ("unable to print out operand yet; code == %d (%c)",
- code, code);
-}
-
-
-/* Implement TARGET_PRINT_OPERAND_ADDRESS. */
-static void
-tilepro_print_operand_address (FILE *file, machine_mode mode, rtx addr)
-{
- if (GET_CODE (addr) == POST_DEC
- || GET_CODE (addr) == POST_INC)
- {
- int offset = GET_MODE_SIZE (mode);
-
- gcc_assert (mode != VOIDmode);
-
- if (output_memory_autoinc_first)
- fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
- else
- fprintf (file, "%d",
- GET_CODE (addr) == POST_DEC ? -offset : offset);
- }
- else if (GET_CODE (addr) == POST_MODIFY)
- {
- gcc_assert (mode != VOIDmode);
-
- gcc_assert (GET_CODE (XEXP (addr, 1)) == PLUS);
-
- if (output_memory_autoinc_first)
- fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
- else
- fprintf (file, HOST_WIDE_INT_PRINT_DEC,
- INTVAL (XEXP (XEXP (addr, 1), 1)));
- }
- else
- tilepro_print_operand (file, addr, 'r');
-}
-
-
-/* Machine mode of current insn, for determining curly brace
- placement. */
-static machine_mode insn_mode;
-
-
-/* Implement FINAL_PRESCAN_INSN. This is used to emit bundles. */
-void
-tilepro_final_prescan_insn (rtx_insn *insn)
-{
- /* Record this for tilepro_asm_output_opcode to examine. */
- insn_mode = GET_MODE (insn);
-}
-
-
-/* While emitting asm, are we currently inside '{' for a bundle? */
-static bool tilepro_in_bundle = false;
-
-/* Implement ASM_OUTPUT_OPCODE. Prepend/append curly braces as
- appropriate given the bundling information recorded by
- tilepro_gen_bundles. */
-const char *
-tilepro_asm_output_opcode (FILE *stream, const char *code)
-{
- bool pseudo = !strcmp (code, "pseudo");
-
- if (!tilepro_in_bundle && insn_mode == SImode)
- {
- /* Start a new bundle. */
- fprintf (stream, "{\n\t");
- tilepro_in_bundle = true;
- }
-
- if (tilepro_in_bundle && insn_mode == QImode)
- {
- /* Close an existing bundle. */
- static char buf[100];
-
- gcc_assert (strlen (code) + 3 + 1 < sizeof (buf));
-
- strcpy (buf, pseudo ? "" : code);
- strcat (buf, "\n\t}");
- tilepro_in_bundle = false;
-
- return buf;
- }
- else
- {
- return pseudo ? "" : code;
- }
-}
-
-
-/* Output assembler code to FILE to increment profiler label # LABELNO
- for profiling a function entry. */
-void
-tilepro_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
-{
- if (tilepro_in_bundle)
- {
- fprintf (file, "\t}\n");
- }
-
- if (flag_pic)
- {
- fprintf (file,
- "\t{\n"
- "\tmove\tr10, lr\n"
- "\tjal\tplt(%s)\n"
- "\t}\n", MCOUNT_NAME);
- }
- else
- {
- fprintf (file,
- "\t{\n"
- "\tmove\tr10, lr\n"
- "\tjal\t%s\n"
- "\t}\n", MCOUNT_NAME);
- }
-
- tilepro_in_bundle = false;
-}
-
-
-/* Implement TARGET_ASM_FILE_END. */
-static void
-tilepro_file_end (void)
-{
- if (NEED_INDICATE_EXEC_STACK)
- file_end_indicate_exec_stack ();
-}
-
-
-#undef TARGET_HAVE_TLS
-#define TARGET_HAVE_TLS HAVE_AS_TLS
-
-#undef TARGET_OPTION_OVERRIDE
-#define TARGET_OPTION_OVERRIDE tilepro_option_override
-
-#ifdef TARGET_THREAD_SSP_OFFSET
-#undef TARGET_STACK_PROTECT_GUARD
-#define TARGET_STACK_PROTECT_GUARD hook_tree_void_null
-#endif
-
-#undef TARGET_SCALAR_MODE_SUPPORTED_P
-#define TARGET_SCALAR_MODE_SUPPORTED_P tilepro_scalar_mode_supported_p
-
-#undef TARGET_VECTOR_MODE_SUPPORTED_P
-#define TARGET_VECTOR_MODE_SUPPORTED_P tile_vector_mode_supported_p
-
-#undef TARGET_CANNOT_FORCE_CONST_MEM
-#define TARGET_CANNOT_FORCE_CONST_MEM tilepro_cannot_force_const_mem
-
-#undef TARGET_FUNCTION_OK_FOR_SIBCALL
-#define TARGET_FUNCTION_OK_FOR_SIBCALL tilepro_function_ok_for_sibcall
-
-#undef TARGET_PASS_BY_REFERENCE
-#define TARGET_PASS_BY_REFERENCE tilepro_pass_by_reference
-
-#undef TARGET_RETURN_IN_MEMORY
-#define TARGET_RETURN_IN_MEMORY tilepro_return_in_memory
-
-#undef TARGET_FUNCTION_ARG_BOUNDARY
-#define TARGET_FUNCTION_ARG_BOUNDARY tilepro_function_arg_boundary
-
-#undef TARGET_FUNCTION_ARG
-#define TARGET_FUNCTION_ARG tilepro_function_arg
-
-#undef TARGET_FUNCTION_ARG_ADVANCE
-#define TARGET_FUNCTION_ARG_ADVANCE tilepro_function_arg_advance
-
-#undef TARGET_FUNCTION_VALUE
-#define TARGET_FUNCTION_VALUE tilepro_function_value
-
-#undef TARGET_LIBCALL_VALUE
-#define TARGET_LIBCALL_VALUE tilepro_libcall_value
-
-#undef TARGET_FUNCTION_VALUE_REGNO_P
-#define TARGET_FUNCTION_VALUE_REGNO_P tilepro_function_value_regno_p
-
-#undef TARGET_PROMOTE_FUNCTION_MODE
-#define TARGET_PROMOTE_FUNCTION_MODE \
- default_promote_function_mode_always_promote
-
-#undef TARGET_PROMOTE_PROTOTYPES
-#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_false
-
-#undef TARGET_BUILD_BUILTIN_VA_LIST
-#define TARGET_BUILD_BUILTIN_VA_LIST tilepro_build_builtin_va_list
-
-#undef TARGET_EXPAND_BUILTIN_VA_START
-#define TARGET_EXPAND_BUILTIN_VA_START tilepro_va_start
-
-#undef TARGET_SETUP_INCOMING_VARARGS
-#define TARGET_SETUP_INCOMING_VARARGS tilepro_setup_incoming_varargs
-
-#undef TARGET_GIMPLIFY_VA_ARG_EXPR
-#define TARGET_GIMPLIFY_VA_ARG_EXPR tilepro_gimplify_va_arg_expr
-
-#undef TARGET_RTX_COSTS
-#define TARGET_RTX_COSTS tilepro_rtx_costs
-
-/* Limit to what we can reach in one addli. */
-#undef TARGET_MIN_ANCHOR_OFFSET
-#define TARGET_MIN_ANCHOR_OFFSET -32768
-#undef TARGET_MAX_ANCHOR_OFFSET
-#define TARGET_MAX_ANCHOR_OFFSET 32767
-
-#undef TARGET_LEGITIMATE_CONSTANT_P
-#define TARGET_LEGITIMATE_CONSTANT_P tilepro_legitimate_constant_p
-
-#undef TARGET_LRA_P
-#define TARGET_LRA_P hook_bool_void_false
-
-#undef TARGET_LEGITIMATE_ADDRESS_P
-#define TARGET_LEGITIMATE_ADDRESS_P tilepro_legitimate_address_p
-
-#undef TARGET_LEGITIMIZE_ADDRESS
-#define TARGET_LEGITIMIZE_ADDRESS tilepro_legitimize_address
-
-#undef TARGET_DELEGITIMIZE_ADDRESS
-#define TARGET_DELEGITIMIZE_ADDRESS tilepro_delegitimize_address
-
-#undef TARGET_INIT_BUILTINS
-#define TARGET_INIT_BUILTINS tilepro_init_builtins
-
-#undef TARGET_BUILTIN_DECL
-#define TARGET_BUILTIN_DECL tilepro_builtin_decl
-
-#undef TARGET_EXPAND_BUILTIN
-#define TARGET_EXPAND_BUILTIN tilepro_expand_builtin
-
-#undef TARGET_CONDITIONAL_REGISTER_USAGE
-#define TARGET_CONDITIONAL_REGISTER_USAGE tilepro_conditional_register_usage
-
-#undef TARGET_FRAME_POINTER_REQUIRED
-#define TARGET_FRAME_POINTER_REQUIRED tilepro_frame_pointer_required
-
-#undef TARGET_DELAY_SCHED2
-#define TARGET_DELAY_SCHED2 true
-
-#undef TARGET_DELAY_VARTRACK
-#define TARGET_DELAY_VARTRACK true
-
-#undef TARGET_SCHED_ISSUE_RATE
-#define TARGET_SCHED_ISSUE_RATE tilepro_issue_rate
-
-#undef TARGET_SCHED_ADJUST_COST
-#define TARGET_SCHED_ADJUST_COST tilepro_sched_adjust_cost
-
-#undef TARGET_MACHINE_DEPENDENT_REORG
-#define TARGET_MACHINE_DEPENDENT_REORG tilepro_reorg
-
-#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
-#define TARGET_ASM_CAN_OUTPUT_MI_THUNK \
- hook_bool_const_tree_hwi_hwi_const_tree_true
-
-#undef TARGET_ASM_OUTPUT_MI_THUNK
-#define TARGET_ASM_OUTPUT_MI_THUNK tilepro_asm_output_mi_thunk
-
-#undef TARGET_ASM_TRAMPOLINE_TEMPLATE
-#define TARGET_ASM_TRAMPOLINE_TEMPLATE tilepro_asm_trampoline_template
-
-#undef TARGET_TRAMPOLINE_INIT
-#define TARGET_TRAMPOLINE_INIT tilepro_trampoline_init
-
-#undef TARGET_PRINT_OPERAND
-#define TARGET_PRINT_OPERAND tilepro_print_operand
-
-#undef TARGET_PRINT_OPERAND_ADDRESS
-#define TARGET_PRINT_OPERAND_ADDRESS tilepro_print_operand_address
-
-#undef TARGET_ASM_FILE_END
-#define TARGET_ASM_FILE_END tilepro_file_end
-
-#undef TARGET_CAN_USE_DOLOOP_P
-#define TARGET_CAN_USE_DOLOOP_P can_use_doloop_if_innermost
-
-#undef TARGET_CONSTANT_ALIGNMENT
-#define TARGET_CONSTANT_ALIGNMENT constant_alignment_word_strings
-
-struct gcc_target targetm = TARGET_INITIALIZER;
-
-#include "gt-tilepro.h"
diff --git a/gcc/config/tilepro/tilepro.h b/gcc/config/tilepro/tilepro.h
deleted file mode 100644
index 6c37aba..0000000
--- a/gcc/config/tilepro/tilepro.h
+++ /dev/null
@@ -1,457 +0,0 @@
-/* Definitions of target machine for GNU compiler for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- 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 is used by tilepro_cpu_cpp_builtins to indicate the byte order
- we're compiling for. */
-#define TILEPRO_CPU_CPP_ENDIAN_BUILTINS() \
- do \
- { \
- if (BYTES_BIG_ENDIAN) \
- builtin_define ("__BIG_ENDIAN__"); \
- else \
- builtin_define ("__LITTLE_ENDIAN__"); \
- } \
- while (0)
-
-/* Target CPU builtins. */
-#define TARGET_CPU_CPP_BUILTINS() \
- tilepro_cpu_cpp_builtins (pfile)
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-
-/* Target machine storage layout */
-
-#define BITS_BIG_ENDIAN 0
-#define BYTES_BIG_ENDIAN 0
-#define WORDS_BIG_ENDIAN 0
-
-#define UNITS_PER_WORD 4
-#define PARM_BOUNDARY 32
-#define STACK_BOUNDARY 64
-#define FUNCTION_BOUNDARY 64
-#define BIGGEST_ALIGNMENT 64
-#define STRICT_ALIGNMENT 1
-
-#define PCC_BITFIELD_TYPE_MATTERS 1
-#define FASTEST_ALIGNMENT 32
-#define BIGGEST_FIELD_ALIGNMENT 64
-
-/* Make arrays of chars word-aligned for the same reasons. */
-#define DATA_ALIGNMENT(TYPE, ALIGN) \
- (TREE_CODE (TYPE) == ARRAY_TYPE \
- && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
- && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
-
-/* Make local arrays of chars word-aligned for the same reasons. */
-#define LOCAL_ALIGNMENT(TYPE, ALIGN) DATA_ALIGNMENT (TYPE, ALIGN)
-
-
-/* Standard register usage. */
-
-#define FIRST_PSEUDO_REGISTER (64 + 3)
-
-#define FIXED_REGISTERS \
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1}
-
-#define CALL_REALLY_USED_REGISTERS \
- {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
- 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
- 1, 1, 1}
-
-#define REG_ALLOC_ORDER { \
- 10, 11, 12, 13, 14, /* call used */ \
- 15, 16, 17, 18, 19, \
- 20, 21, 22, 23, 24, \
- 25, 26, 27, 28, 29, \
- \
- 9, 8, 7, 6, 5, /* argument */ \
- 4, 3, 2, 1, 0, \
- \
- 55, /* return address */ \
- \
- 30, 31, 32, 33, 34, /* call saved registers */ \
- 35, 36, 37, 38, 39, \
- 40, 41, 42, 43, 44, \
- 45, 46, 47, 48, 49, \
- 50, 51, \
- \
- 52, /* hard frame pointer */ \
- 53, 54, /* tp, sp */ \
- \
- 56, 57, 58, 59, 60, /* special purpose */ \
- 61, 62, 63, 64, 65, /* or fake registers */ \
- 66 \
-}
-
-/* Register that holds an address into the text segment that can be
- used by pic code. */
-#define TILEPRO_PIC_TEXT_LABEL_REGNUM (flag_pic ? 50 : INVALID_REGNUM)
-#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 51 : INVALID_REGNUM)
-#define HARD_FRAME_POINTER_REGNUM 52
-#define THREAD_POINTER_REGNUM 53
-#define STACK_POINTER_REGNUM 54
-#define TILEPRO_LINK_REGNUM 55
-#define FRAME_POINTER_REGNUM 64
-#define ARG_POINTER_REGNUM 65
-/* Pseudo register used to enforce order between instructions that
- touch the networks. */
-#define TILEPRO_NETORDER_REGNUM 66
-#define STATIC_CHAIN_REGNUM 10
-
-
-enum reg_class
-{
- NO_REGS,
- R0_REGS,
- R1_REGS,
- R2_REGS,
- R3_REGS,
- R4_REGS,
- R5_REGS,
- R6_REGS,
- R7_REGS,
- R8_REGS,
- R9_REGS,
- R10_REGS,
- ALL_REGS,
- LIM_REG_CLASSES
-};
-
-#define N_REG_CLASSES (int) LIM_REG_CLASSES
-
-/* Since GENERAL_REGS is the same class as ALL_REGS, don't give it a
- different class number; just make it an alias. */
-#define GENERAL_REGS ALL_REGS
-
-#define REG_CLASS_NAMES \
- { \
- "NO_REGS", \
- "R0_REGS", \
- "R1_REGS", \
- "R2_REGS", \
- "R3_REGS", \
- "R4_REGS", \
- "R5_REGS", \
- "R6_REGS", \
- "R7_REGS", \
- "R8_REGS", \
- "R9_REGS", \
- "R10_REGS", \
- "ALL_REGS" \
- }
-
-#define REG_CLASS_CONTENTS \
- { \
- { 0 }, \
- { 1 << 0 }, \
- { 1 << 1 }, \
- { 1 << 2 }, \
- { 1 << 3 }, \
- { 1 << 4 }, \
- { 1 << 5 }, \
- { 1 << 6 }, \
- { 1 << 7 }, \
- { 1 << 8 }, \
- { 1 << 9 }, \
- { 1 << 10 }, \
- { 0xffffffff, 0xffffffff } \
- }
-
-#define REGNO_REG_CLASS(REGNO) \
- ((unsigned)(REGNO) <= 10 ? \
- (enum reg_class)(R0_REGS + (REGNO)) : ALL_REGS)
-
-#define INDEX_REG_CLASS NO_REGS
-#define BASE_REG_CLASS ALL_REGS
-
-#define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS)
-
-#define CLASS_MAX_NREGS(CLASS, MODE) \
- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-
-
-/* Stack layout; function entry, exit and calling. */
-
-#define STACK_GROWS_DOWNWARD 1
-#define FRAME_GROWS_DOWNWARD 1
-
-#define DYNAMIC_CHAIN_ADDRESS(FRAME) \
- plus_constant (Pmode, (FRAME), UNITS_PER_WORD)
-
-#define FIRST_PARM_OFFSET(FNDECL) 0
-
-#define ACCUMULATE_OUTGOING_ARGS 1
-
-#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
-
-#define INCOMING_FRAME_SP_OFFSET 0
-
-#define STACK_POINTER_OFFSET (2 * UNITS_PER_WORD)
-
-#define ARG_POINTER_CFA_OFFSET(FNDECL) (-STACK_POINTER_OFFSET)
-
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* The first 10 registers may hold return value. */
-#define TILEPRO_NUM_RETURN_REGS 10
-
-/* The first 10 registers hold function arguments. */
-#define TILEPRO_NUM_ARG_REGS 10
-
-#define FUNCTION_ARG_REGNO_P(N) ((N) < TILEPRO_NUM_ARG_REGS)
-
-/* The type used to store the number of words of arguments scanned so
- far during argument scanning. This includes any space that is
- skipped. */
-#define CUMULATIVE_ARGS int
-
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
- ((CUM) = 0)
-
-
-#define ELIMINABLE_REGS \
- {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
- {ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
- {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
- {FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
-
-#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
- ((OFFSET) = tilepro_initial_elimination_offset((FROM),(TO)))
-
-#define PROFILE_BEFORE_PROLOGUE 1
-
-#define FUNCTION_PROFILER(FILE, LABELNO) \
- tilepro_function_profiler (FILE, LABELNO)
-
-#define TRAMPOLINE_SIZE 48
-#define TRAMPOLINE_ALIGNMENT 64
-#define TRAMPOLINE_SECTION text_section
-
-
-/* Call frame debugging information. */
-
-#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, TILEPRO_LINK_REGNUM)
-
-#define RETURN_ADDR_RTX tilepro_return_addr
-
-#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (TILEPRO_LINK_REGNUM)
-
-#define DWARF_ZERO_REG 63
-
-#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N + 12) : INVALID_REGNUM)
-#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 11)
-#define EH_RETURN_HANDLER_RTX tilepro_eh_return_handler_rtx ()
-
-#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
- tilepro_asm_preferred_eh_data_format ((CODE), (GLOBAL))
-
-
-/* Addressing modes, and classification of registers for them. */
-
-#define HAVE_POST_INCREMENT 1
-#define HAVE_POST_DECREMENT 1
-#define HAVE_POST_MODIFY_DISP 1
-
-#define REGNO_OK_FOR_INDEX_P(regno) 0
-#define REGNO_OK_FOR_BASE_P(regno) \
- ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
-
-#define MAX_REGS_PER_ADDRESS 1
-
-#define CONSTANT_ADDRESS_P(X) 0
-
-#define LEGITIMATE_PIC_OPERAND_P(X) tilepro_legitimate_pic_operand_p (X)
-
-
-#define CASE_VECTOR_MODE SImode
-#define CASE_VECTOR_PC_RELATIVE 0
-#define JUMP_TABLES_IN_TEXT_SECTION 0
-
-#define DEFAULT_SIGNED_CHAR 1
-
-#define MOVE_MAX UNITS_PER_WORD
-
-/* Use a value of 11 for MOVE_RATIO and friends, because TILEPro
- returns structs as large as 10 words in registers. Because of some
- some code generation inefficiency, we never get smaller code for
- turning that into a memcpy, so pick a value that guarantees this
- doesn't happen. */
-#define TILEPRO_CALL_RATIO 11
-#define MOVE_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
-#define CLEAR_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
-#define SET_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
-
-#define WORD_REGISTER_OPERATIONS 1
-
-#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
-
-#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
- if (GET_MODE_CLASS (MODE) == MODE_INT \
- && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
- (MODE) = SImode;
-
-/* Define SLOW_BYTE_ACCESS to avoid making a QI or HI mode
- register. */
-#define SLOW_BYTE_ACCESS 1
-
-#define SHIFT_COUNT_TRUNCATED 1
-
-#define SHORT_IMMEDIATES_SIGN_EXTEND 1
-
-#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
-#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
-
-#define Pmode SImode
-
-#define STORE_FLAG_VALUE 1
-
-#define FUNCTION_MODE SImode
-
-#define NO_FUNCTION_CSE 1
-
-#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
- ((LENGTH) = tilepro_adjust_insn_length ((INSN), (LENGTH)))
-
-#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT
-
-#define BRANCH_COST(speed_p, predictable_p) ((predictable_p) ? 2 : 6)
-
-
-/* Control the assembler format that we output. */
-
-#undef NO_DOLLAR_IN_LABEL
-
-#define ASM_COMMENT_START "##"
-
-#define TEXT_SECTION_ASM_OP "\t.text"
-
-#define DATA_SECTION_ASM_OP "\t.data"
-
-#undef READONLY_DATA_SECTION_ASM_OP
-#define READONLY_DATA_SECTION_ASM_OP "\t.section\t.rodata, \"a\""
-
-#undef BSS_SECTION_ASM_OP
-#define BSS_SECTION_ASM_OP "\t.section\t.bss, \"wa\""
-
-#undef INIT_SECTION_ASM_OP
-#define INIT_SECTION_ASM_OP "\t.section\t.init, \"ax\""
-
-#undef FINI_SECTION_ASM_OP
-#define FINI_SECTION_ASM_OP "\t.section\t.fini, \"ax\""
-
-#define GLOBAL_ASM_OP ".global "
-
-#define SUPPORTS_WEAK 1
-
-#define USER_LABEL_PREFIX ""
-
-#define REGISTER_PREFIX ""
-#define REGISTER_NAMES \
- { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
- "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", \
- "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", \
- "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", \
- "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", \
- "r48", "r49", "r50", "r51", "r52", "tp", "sp", "lr", \
- "sn", "idn0", "idn1", "udn0", "udn1", "udn2", "udn3", "zero", \
- "?FRAME?", "?ARG?", "?NET?" }
-
-/* This is used to help emit bundles. */
-#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
- tilepro_final_prescan_insn (insn)
-
-/* This is used to help emit bundles. */
-#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
- (PTR = tilepro_asm_output_opcode (STREAM, PTR))
-
-#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
- do \
- { \
- char label[256]; \
- ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));\
- fprintf (FILE, "\t.word "); \
- assemble_name (FILE, label); \
- fprintf (FILE, "\n"); \
- } \
- while (0)
-
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- do \
- { \
- char label[256]; \
- ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
- fprintf (FILE, "\t.word "); \
- assemble_name (FILE, label); \
- ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \
- fprintf (FILE, "-"); \
- assemble_name (FILE, label); \
- fprintf (FILE, "\n"); \
- } \
- while (0)
-
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
-
-#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
- ( fputs (".comm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
-
-#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
- ( fputs (".lcomm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
-
-
-
-#define INIT_EXPANDERS tilepro_init_expanders ()
-
-/* A C structure for machine-specific, per-function data. This is
- added to the cfun structure. */
-typedef struct GTY(()) machine_function
-{
- /* Symbol for the text label used for pic. */
- rtx text_label_symbol;
-
- /* Register for the text label. */
- rtx text_label_rtx;
-
- /* Register for the pic offset table. */
- rtx got_rtx;
-
- /* The function calls tls_get_addr. */
- int calls_tls_get_addr;
-} machine_function;
-
-#ifndef HAVE_AS_TLS
-#define HAVE_AS_TLS 0
-#endif
diff --git a/gcc/config/tilepro/tilepro.md b/gcc/config/tilepro/tilepro.md
deleted file mode 100644
index d5d362c..0000000
--- a/gcc/config/tilepro/tilepro.md
+++ /dev/null
@@ -1,3816 +0,0 @@
-;; Machine description for Tilera TILEPro chip for GCC.
-;; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-;; Contributed by Walter Lee (walt@tilera.com)
-;;
-;; 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_constants [
- ;;
- ;; The following represent intrinsic insns, organized by latency.
- ;;
-
- ;; single cycle
- (UNSPEC_INSN_ADDLIS 1)
- (UNSPEC_INSN_AULI 2)
- (UNSPEC_INSN_AVGB_U 3)
- (UNSPEC_INSN_AVGH 4)
- (UNSPEC_INSN_BITX 5)
- (UNSPEC_INSN_CRC32_32 6)
- (UNSPEC_INSN_CRC32_8 7)
- (UNSPEC_INSN_DRAIN 8)
- (UNSPEC_INSN_DTLBPR 9)
- (UNSPEC_INSN_DWORD_ALIGN 10)
- (UNSPEC_INSN_FINV 11)
- (UNSPEC_INSN_FLUSH 12)
- (UNSPEC_INSN_FNOP 13)
- (UNSPEC_INSN_ICOH 14)
- (UNSPEC_INSN_ILL 15)
- (UNSPEC_INSN_INFO 16)
- (UNSPEC_INSN_INFOL 17)
- (UNSPEC_INSN_INV 18)
- (UNSPEC_INSN_LNK 19)
- (UNSPEC_INSN_MFSPR 20)
- (UNSPEC_INSN_MNZB 21)
- (UNSPEC_INSN_MNZH 22)
- (UNSPEC_INSN_MOVELIS 23)
- (UNSPEC_INSN_MTSPR 24)
- (UNSPEC_INSN_MZB 25)
- (UNSPEC_INSN_MZH 26)
- (UNSPEC_INSN_NAP 27)
- (UNSPEC_INSN_PACKBS_U 28)
- (UNSPEC_INSN_PACKHB 29)
- (UNSPEC_INSN_PACKHS 30)
- (UNSPEC_INSN_PACKLB 31)
- (UNSPEC_INSN_PREFETCH_L1 32)
- (UNSPEC_INSN_TBLIDXB0 33)
- (UNSPEC_INSN_TBLIDXB1 34)
- (UNSPEC_INSN_TBLIDXB2 35)
- (UNSPEC_INSN_TBLIDXB3 36)
- (UNSPEC_INSN_WH64 37)
-
- ;; 2 cycles
- (UNSPEC_INSN_ADIFFB_U 100)
- (UNSPEC_INSN_ADIFFH 101)
- (UNSPEC_INSN_MULHHA_SS 102)
- (UNSPEC_INSN_MULHHA_SU 103)
- (UNSPEC_INSN_MULHHA_UU 104)
- (UNSPEC_INSN_MULHHSA_UU 105)
- (UNSPEC_INSN_MULHH_SS 106)
- (UNSPEC_INSN_MULHH_SU 107)
- (UNSPEC_INSN_MULHH_UU 108)
- (UNSPEC_INSN_MULHLA_SS 109)
- (UNSPEC_INSN_MULHLA_SU 110)
- (UNSPEC_INSN_MULHLA_US 111)
- (UNSPEC_INSN_MULHLA_UU 112)
- (UNSPEC_INSN_MULHLSA_UU 113)
- (UNSPEC_INSN_MULHL_SS 114)
- (UNSPEC_INSN_MULHL_SU 115)
- (UNSPEC_INSN_MULHL_US 116)
- (UNSPEC_INSN_MULHL_UU 117)
- (UNSPEC_INSN_MULLLA_SS 118)
- (UNSPEC_INSN_MULLLA_SU 119)
- (UNSPEC_INSN_MULLLA_UU 120)
- (UNSPEC_INSN_MULLLSA_UU 121)
- (UNSPEC_INSN_MULLL_SU 122)
- (UNSPEC_INSN_MULLL_SS 123)
- (UNSPEC_INSN_MULLL_UU 124)
- (UNSPEC_INSN_SADAB_U 125)
- (UNSPEC_INSN_SADAH 126)
- (UNSPEC_INSN_SADAH_U 127)
- (UNSPEC_INSN_SADB_U 128)
- (UNSPEC_INSN_SADH 129)
- (UNSPEC_INSN_SADH_U 130)
-
- ;;
- ;; The following are special insns.
- ;;
-
- ;; Blockage
- (UNSPEC_BLOCKAGE 200)
-
- ;; Latency specifying loads.
- (UNSPEC_LATENCY_L2 201)
- (UNSPEC_LATENCY_MISS 202)
-
- ;; Lnk and its label
- (UNSPEC_LNK_AND_LABEL 203)
-
- ;; Memory fence
- (UNSPEC_MF 204)
-
- ;; A pseudo-op that prevents network operations from being ordered.
- (UNSPEC_NETWORK_BARRIER 205)
-
- ;; Operations that access network registers.
- (UNSPEC_NETWORK_RECEIVE 206)
- (UNSPEC_NETWORK_SEND 207)
-
- ;; Stack protector operations
- (UNSPEC_SP_SET 208)
- (UNSPEC_SP_TEST 209)
-
- ;; A call to __tls_get_addr
- (UNSPEC_TLS_GD_CALL 210)
-
- ;; An opaque TLS "add" operation for TLS general dynamic model
- ;; access.
- (UNSPEC_TLS_GD_ADD 211)
-
- ;; An opaque TLS "load" operation for TLS initial exec model access.
- (UNSPEC_TLS_IE_LOAD 212)
-
- ;;
- ;; The following are operands.
- ;;
- (UNSPEC_PCREL_SYM 300)
- (UNSPEC_GOT16_SYM 301)
- (UNSPEC_GOT32_SYM 302)
- (UNSPEC_TLS_GD 303)
- (UNSPEC_TLS_IE 304)
- (UNSPEC_TLS_LE 305)
-])
-
-;; Mark the last instruction of various latencies, used to
-;; determine the rtx costs of unspec insns.
-(define_constants [
- (TILEPRO_LAST_LATENCY_1_INSN 99)
- (TILEPRO_LAST_LATENCY_2_INSN 199)
- (TILEPRO_LAST_LATENCY_INSN 299)
-])
-
-;; Constants for network registers.
-(define_constants [
- (TILEPRO_NETREG_IDN0 0)
- (TILEPRO_NETREG_IDN1 1)
- (TILEPRO_NETREG_SN 2)
- (TILEPRO_NETREG_UDN0 3)
- (TILEPRO_NETREG_UDN1 4)
- (TILEPRO_NETREG_UDN2 5)
- (TILEPRO_NETREG_UDN3 6)
-])
-
-;; Constants for special purpose registers.
-(define_constants [
- (TILEPRO_NETORDER_REG 66)])
-
-
-;; Operand and operator predicates and constraints
-
-(include "predicates.md")
-(include "constraints.md")
-(include "tilepro-generic.md")
-
-;; Define an insn type attribute. This defines what pipes things can
-;; go in.
-(define_attr "type"
- "X0,X0_2cycle,X1,X1_branch,X1_2cycle,X1_L2,X1_miss,X01,Y0,Y0_2cycle,Y2,Y2_2cycle,Y2_L2,Y2_miss,Y01,cannot_bundle,cannot_bundle_3cycle,cannot_bundle_4cycle,nothing"
- (const_string "Y01"))
-
-(define_attr "length" ""
- (cond [(eq_attr "type" "X1_branch")
- (if_then_else
- (and (le (minus (match_dup 0) (pc)) (const_int 524280))
- (le (minus (pc) (match_dup 0)) (const_int 524288)))
- (const_int 8)
- (const_int 16))
- ]
- (const_int 8)))
-
-
-;; Define iterators.
-(define_mode_iterator I48MODE [SI DI])
-(define_mode_iterator I12MODE [QI HI])
-
-(define_code_iterator binop_u5bit [ashift ashiftrt lshiftrt rotate])
-(define_code_iterator binop_with_imm
- [ashift lshiftrt ashiftrt rotate eq lt and ior xor])
-(define_code_iterator unop [bswap clz ctz popcount])
-
-(define_mode_attr load [(QI "lb") (HI "lh") (SI "lw")])
-(define_mode_attr store [(QI "sb") (HI "sh") (SI "sw")])
-
-;; <optab> expands to the name of the optab for a particular code.
-(define_code_attr optab [(ashift "ashl")
- (ashiftrt "ashr")
- (lshiftrt "lshr")
- (eq "seq")
- (ne "sne")
- (lt "slt")
- (ltu "sltu")
- (le "sle")
- (leu "sleu")
- (minus "sub")
- (plus "add")
- (rotate "rotl")
- (smax "smax")
- (smin "smin")
- (umax "umax")
- (umin "umin")
- (ss_minus "sssub")
- (ss_plus "ssadd")
- (us_minus "ussub")
- (us_plus "usadd")
- (and "and")
- (ior "ior")
- (xor "xor")
- (bswap "bswap")
- (clz "clz")
- (ctz "ctz")
- (popcount "popcount")])
-
-;; <insn> expands to the name of the insn that implements a particular
-;; code.
-(define_code_attr insn [(ashift "shl")
- (ashiftrt "sra")
- (lshiftrt "shr")
- (eq "seq")
- (ne "sne")
- (lt "slt")
- (ltu "slt")
- (le "slte")
- (leu "slte")
- (minus "sub")
- (plus "add")
- (rotate "rl")
- (smax "max")
- (smin "min")
- (umax "max")
- (umin "min")
- (ss_minus "sub")
- (ss_plus "add")
- (us_minus "sub")
- (us_plus "add")
- (and "and")
- (ior "or")
- (xor "xor")
- (bswap "bytex")
- (clz "clz")
- (ctz "ctz")
- (popcount "pcnt")])
-
-;; <u> expands to the suffix of the insn that implements a particular
-;; code.
-(define_code_attr u [(ashift "")
- (ashiftrt "")
- (lshiftrt "")
- (eq "")
- (ne "")
- (lt "")
- (ltu "_u")
- (le "")
- (leu "_u")
- (minus "")
- (plus "")
- (rotate "")
- (smax "")
- (smin "")
- (umax "_u")
- (umin "_u")
- (ss_minus "s")
- (ss_plus "s")
- (us_minus "s_u")
- (us_plus "s_u")
- (and "")
- (ior "")
- (xor "")])
-
-;; <comm> indicates whether a particular code is commutative, using
-;; the "%" commutative opterator constraint.
-(define_code_attr comm [(ashift "")
- (ashiftrt "")
- (lshiftrt "")
- (eq "%")
- (ne "%")
- (lt "")
- (ltu "")
- (le "")
- (leu "")
- (minus "")
- (plus "%")
- (rotate "")
- (smax "%")
- (umax "%")
- (smin "%")
- (umin "%")
- (ss_plus "%")
- (us_plus "%")
- (ss_minus "")
- (us_minus "")
- (and "%")
- (ior "%")
- (xor "%")])
-
-(define_mode_iterator VEC [V4QI V2HI])
-
-;; Code iterator for all three shifts.
-(define_code_iterator any_shift [ashift ashiftrt lshiftrt])
-
-;; Code iterator for all byte ops without immediate variants.
-(define_code_iterator v1op [us_plus ne le leu minus us_minus])
-
-;; Code iterator for all 2-byte vector ops without immediate variants.
-(define_code_iterator v2op [ss_plus ne le leu minus ss_minus])
-
-;; Code iterator for all byte vector ops with immediate variants.
-(define_code_iterator v1op_immed [plus umax umin eq lt ltu])
-
-;; Code iterator for all 2-byte vector ops with immediate variants.
-(define_code_iterator v2op_immed [plus smax smin eq lt ltu])
-
-;; Code for packing two 2-byte vectors.
-(define_code_iterator v2pack [truncate us_truncate])
-
-;; <pack_optab> expands to the part of the optab name describing how
-;; two vectors are packed.
-(define_code_attr pack_optab [(truncate "trunc")
- (us_truncate "usat")
- (ss_truncate "ssat")])
-
-;; <pack_insn> expands to the insn that implements a particular vector
-;; packing code.
-(define_code_attr pack_insn [(truncate "packl")
- (us_truncate "pack")
- (ss_truncate "pack")])
-
-;; <pack_u> expands to the suffix of the insn that implements a
-;; particular vector packing code.
-(define_code_attr pack_u [(truncate "")
- (us_truncate "s_u")
- (ss_truncate "s")])
-
-
-;;
-;; The basic data move insns.
-;;
-
-(define_expand "movqi"
- [(set (match_operand:QI 0 "nonimmediate_operand" "")
- (match_operand:QI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilepro_expand_mov (QImode, operands))
- DONE;
-})
-
-(define_insn "*movqi_insn"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,U,m")
- (match_operand:QI 1 "move_operand" "r,I,U,m,rO,rO"))]
- "(register_operand (operands[0], QImode)
- || reg_or_0_operand (operands[1], QImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- lb_u\t%0, %1
- lbadd_u\t%0, %I1, %i1
- sb\t%0, %r1
- sbadd\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "movhi"
- [(set (match_operand:HI 0 "nonimmediate_operand" "")
- (match_operand:HI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilepro_expand_mov (HImode, operands))
- DONE;
-})
-
-(define_insn "*movhi_insn"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,r,U,m")
- (match_operand:HI 1 "move_operand" "r,I,J,U,m,rO,rO"))]
- "(register_operand (operands[0], HImode)
- || reg_or_0_operand (operands[1], HImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- moveli\t%0, %1
- lh_u\t%0, %1
- lhadd_u\t%0, %I1, %i1
- sh\t%0, %r1
- shadd\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-
-(define_expand "movsi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "")
- (match_operand:SI 1 "nonautoinc_operand" ""))]
- ""
-{
- if (tilepro_expand_mov (SImode, operands))
- DONE;
-})
-
-(define_insn "*movsi_high_insn"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (high:SI (match_operand:SI 1 "symbolic_operand" "in")))]
- ""
- "auli\t%0, zero, ha16(%1)"
- [(set_attr "type" "X01")])
-
-(define_insn "*movsi_insn"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,r,U,m")
- (match_operand:SI 1 "move_operand" "r,I,J,K,N,P,U,m,rO,rO"))]
- "(register_operand (operands[0], SImode)
- || reg_or_0_operand (operands[1], SImode))"
- "@
- move\t%0, %r1
- movei\t%0, %1
- moveli\t%0, %1
- auli\t%0, zero, %h1
- addib\t%0, zero, %j1
- addih\t%0, zero, %h1
- lw\t%0, %1
- lwadd\t%0, %I1, %i1
- sw\t%0, %r1
- swadd\t%I0, %r1, %i0"
- [(set_attr "type" "*,*,X01,X01,X01,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_insn "movstrictqi"
- [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
- (match_operand:QI 1 "reg_or_0_operand" "rO"))]
- ""
- "mm\t%r0, %r1, %r0, 0, 7"
- [(set_attr "type" "X01")])
-
-(define_insn "movstricthi"
- [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
- (match_operand:HI 1 "reg_or_0_operand" "rO"))]
- ""
- "mm\t%r0, %r1, %r0, 0, 15"
- [(set_attr "type" "X01")])
-
-(define_expand "movmisalign<mode>"
- [(set (match_operand:VEC 0 "nonautoincmem_nonimmediate_operand" "")
- (match_operand:VEC 1 "nonautoincmem_general_operand" ""))]
- ""
-{
- tilepro_expand_movmisalign (<MODE>mode, operands);
- DONE;
-})
-
-(define_expand "movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "")
- (match_operand:SF 1 "general_operand" ""))]
- ""
-{
- /* Materialize immediates using clever SImode code, but don't
- do this after reload starts, since gen_lowpart will choke
- during reload if given an illegitimate address. */
- if (immediate_operand (operands[1], SFmode)
- && operands[1] != const0_rtx
- && (register_operand (operands[0], SFmode)
- || (!reload_in_progress && !reload_completed)))
- {
- emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
- gen_lowpart (SImode, operands[1])));
- DONE;
- }
-})
-
-(define_insn "*movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,U,m")
- (match_operand:SF 1 "general_operand" "rO,U,m,rO,rO"))]
- ""
- "@
- move\t%0, %r1
- lw\t%0, %1
- lwadd\t%0, %I1, %i1
- sw\t%0, %r1
- swadd\t%I0, %r1, %i0"
- [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-(define_expand "mov<mode>"
- [(set (match_operand:VEC 0 "nonimmediate_operand" "")
- (match_operand:VEC 1 "general_operand" ""))]
- ""
-{
- /* Materialize immediates using clever SImode code, but don't
- do this after reload starts, since gen_lowpart will choke
- during reload if given an illegitimate address. */
- if (immediate_operand (operands[1], <MODE>mode)
- && operands[1] != const0_rtx
- && (register_operand (operands[0], <MODE>mode)
- || (!reload_in_progress && !reload_completed)))
- {
- emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
- gen_lowpart (SImode, operands[1])));
- DONE;
- }
-})
-
-(define_insn "*mov<mode>"
- [(set (match_operand:VEC 0 "nonimmediate_operand" "=r,r,r,U,m")
- (match_operand:VEC 1 "general_operand" "rO,U,m,rO,rO"))]
- ""
- "@
- move\t%0, %r1
- lw\t%0, %1
- lwadd\t%0, %I1, %i1
- sw\t%0, %r1
- swadd\t%I0, %r1, %i0"
- [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
-
-
-;;
-;; Bit-field extracts
-;;
-
-(define_expand "extv"
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extract:SI
- (match_operand:QI 1 "nonautoincmem_operand" "")
- (match_operand:SI 2 "immediate_operand" "")
- (match_operand:SI 3 "immediate_operand" "")))]
- ""
-{
- HOST_WIDE_INT bit_offset, bit_width;
- HOST_WIDE_INT first_byte_offset, last_byte_offset;
-
- bit_width = INTVAL (operands[2]);
- bit_offset = INTVAL (operands[3]);
-
- /* Reject bitfields that can be done with a normal load */
- if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
- FAIL;
-
- /* The value in memory cannot span more than 4 bytes. */
- first_byte_offset = bit_offset / BITS_PER_UNIT;
- last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
- if (last_byte_offset - first_byte_offset > 3)
- FAIL;
-
- tilepro_expand_unaligned_load (operands[0], operands[1],
- bit_width, bit_offset, 1);
-
- DONE;
-})
-
-(define_expand "extzv"
- [(set (match_operand:SI 0 "register_operand" "")
- (zero_extract:SI
- (match_operand:QI 1 "nonautoincmem_operand" "")
- (match_operand:SI 2 "immediate_operand" "")
- (match_operand:SI 3 "immediate_operand" "")))]
- ""
-{
- HOST_WIDE_INT bit_offset, bit_width;
- HOST_WIDE_INT first_byte_offset, last_byte_offset;
-
- bit_width = INTVAL (operands[2]);
- bit_offset = INTVAL (operands[3]);
-
- /* Reject bitfields that can be done with a normal load */
- if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
- FAIL;
-
- /* The value in memory cannot span more than 4 bytes. */
- first_byte_offset = bit_offset / BITS_PER_UNIT;
- last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
- if (last_byte_offset - first_byte_offset > 3)
- FAIL;
-
- tilepro_expand_unaligned_load (operands[0], operands[1],
- bit_width, bit_offset, 0);
-
- DONE;
-})
-
-
-;;
-;; Arithmetic ops
-;;
-
-(define_insn "*s123a_insn"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "cint_248_operand" "I"))
- (match_operand:SI 3 "reg_or_0_operand" "rO")))]
- ""
- "s%t2a\t%0, %r1, %r3")
-
-(define_expand "addsi3"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "reg_or_cint_operand" "")))]
- ""
- "
- if (tilepro_expand_addsi (operands[0], operands[1], operands[2]))
- DONE;
- ")
-
-(define_insn "*addsi_high_insn"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI
- (match_operand:SI 1 "reg_or_0_operand" "%rO")
- (high:SI (match_operand:SI 2 "const_symbolic_operand" "T"))))]
- ""
- "auli\t%0, %r1, %H2"
- [(set_attr "type" "X01")])
-
-(define_insn "*addsi_lo_sum_insn"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (lo_sum:SI
- (match_operand:SI 1 "reg_or_0_operand" "%rO")
- (match_operand:SI 2 "const_symbolic_operand" "T")))]
- ""
- "addli\t%0, %r1, %L2"
- [(set_attr "type" "X01")])
-
-(define_insn "*addsi3_insn"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
- (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO,rO")
- (match_operand:SI 2 "add_operand" "r,I,J,K")))]
- ""
- "@
- add\t%0, %r1, %r2
- addi\t%0, %r1, %2
- addli\t%0, %r1, %2
- auli\t%0, %r1, %h2"
- [(set_attr "type" "*,*,X01,X01")])
-
-(define_insn "subsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "sub\t%0, %r1, %r2")
-
-(define_insn "negsi2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (neg:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
- ""
- "sub\t%0, zero, %r1")
-
-(define_insn "ssaddsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ss_plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "adds\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "sssubsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ss_minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")))]
- ""
- "subs\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-;;
-;; Shifts
-;;
-
-;; ashift, ashiftrt, lshiftrt, rotate.
-(define_insn "<optab>si3"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (binop_u5bit:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- <insn>i\t%0, %r1, %2
- <insn>\t%0, %r1, %r2")
-
-
-;;
-;; Compares
-;;
-
-(define_expand "cstore<mode>4"
- [(set (match_operand:SI 0 "register_operand" "")
- (match_operator:SI 1 "ordered_comparison_operator"
- [(match_operand:I48MODE 2 "reg_or_cint_operand" "")
- (match_operand:I48MODE 3 "reg_or_cint_operand" "")]))]
- ""
- { if (!tilepro_emit_setcc (operands, <MODE>mode)) FAIL; else DONE; })
-
-(define_insn "insn_seq"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (eq:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
- ""
- "@
- seqi\t%0, %r1, %2
- seq\t%0, %r1, %r2")
-
-(define_insn "insn_sne"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ne:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_cint_operand" "rO")))]
- ""
- "sne\t%0, %r1, %r2")
-
-(define_insn "insn_slt"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (lt:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
- ""
- "@
- slti\t%0, %r1, %2
- slt\t%0, %r1, %r2")
-
-(define_insn "insn_slte"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (le:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_cint_operand" "L,rO")))]
- ""
- "@
- slti\t%0, %r1, %P2
- slte\t%0, %r1, %r2")
-
-(define_insn "insn_slt_u"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (ltu:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
- ""
- "@
- slti_u\t%0, %r1, %2
- slt_u\t%0, %r1, %r2")
-
-(define_insn "insn_slte_u"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (leu:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_cint_operand" "Q,rO")))]
- ""
- "@
- slti_u\t%0, %r1, %P2
- slte_u\t%0, %r1, %r2")
-
-
-;;
-;; Logical ops
-;;
-
-(define_insn "andsi3"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
- (and:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO")
- (match_operand:SI 2 "and_operand" "I,M,rO")))]
- ""
- "@
- andi\t%0, %r1, %2
- mm\t%0, %r1, zero, %M2
- and\t%0, %r1, %r2"
- [(set_attr "type" "*,X01,*")])
-
-(define_insn "iorsi3"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (ior:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:SI 2 "reg_or_s8bit_operand" "I,rO")))]
- ""
- "@
- ori\t%0, %r1, %2
- or\t%0, %r1, %r2")
-
-(define_insn "xorsi3"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (xor:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
- (match_operand:SI 2 "reg_or_s8bit_operand" "rO,I")))]
- ""
- "@
- xor\t%0, %r1, %r2
- xori\t%0, %r1, %2"
- [(set_attr "type" "*,X01")])
-
-;; bswap, clz, ctz, popcount
-(define_insn "<optab>si2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unop:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
- ""
- "<insn>\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_expand "ctzdi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (ctz:DI (match_operand:DI 1 "register_operand" "")))]
- ""
-{
- rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
-
- split_di (&operands[1], 1, &lo, &hi);
- lo = force_reg (SImode, lo);
- hi = force_reg (SImode, hi);
-
- ctz_lo = gen_reg_rtx (SImode);
- emit_insn (gen_ctzsi2 (ctz_lo, lo));
-
- ctz_hi = gen_reg_rtx (SImode);
- emit_insn (gen_ctzsi2 (ctz_hi, hi));
-
- ctz_hi_plus_32 = gen_reg_rtx (SImode);
- emit_insn (gen_addsi3 (ctz_hi_plus_32, ctz_hi, GEN_INT (32)));
-
- result = gen_reg_rtx (SImode);
- emit_insn (gen_insn_mvz (result, ctz_lo, lo, ctz_hi_plus_32));
-
- emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
-
- DONE;
-})
-
-(define_expand "clzdi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (clz:DI (match_operand:DI 1 "register_operand" "")))]
- ""
-{
- rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
-
- split_di (&operands[1], 1, &lo, &hi);
- lo = force_reg (SImode, lo);
- hi = force_reg (SImode, hi);
-
- clz_lo = gen_reg_rtx (SImode);
- emit_insn (gen_clzsi2 (clz_lo, lo));
-
- clz_hi = gen_reg_rtx (SImode);
- emit_insn (gen_clzsi2 (clz_hi, hi));
-
- clz_lo_plus_32 = gen_reg_rtx (SImode);
- emit_insn (gen_addsi3 (clz_lo_plus_32, clz_lo, GEN_INT (32)));
-
- result = gen_reg_rtx (SImode);
- emit_insn (gen_insn_mvz (result, clz_hi, hi, clz_lo_plus_32));
-
- emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
-
- DONE;
-})
-
-(define_expand "ffsdi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (ffs:DI (match_operand:DI 1 "register_operand" "")))]
- ""
-{
- rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
- rtx result;
-
- split_di (&operands[1], 1, &lo, &hi);
- lo = force_reg (SImode, lo);
- hi = force_reg (SImode, hi);
-
- ctz_lo = gen_reg_rtx (SImode);
- emit_insn (gen_ctzsi2 (ctz_lo, lo));
-
- ctz_hi = gen_reg_rtx (SImode);
- emit_insn (gen_ctzsi2 (ctz_hi, hi));
-
- ctz_hi_plus_32 = gen_reg_rtx (SImode);
- emit_insn (gen_addsi3 (ctz_hi_plus_32, ctz_hi, GEN_INT (32)));
-
- ctz = gen_reg_rtx (SImode);
- emit_insn (gen_insn_mvz (ctz, ctz_lo, lo, ctz_hi_plus_32));
-
- ctz_plus_1 = gen_reg_rtx (SImode);
- emit_insn (gen_addsi3 (ctz_plus_1, ctz, GEN_INT (1)));
-
- ctz_cond = gen_reg_rtx (SImode);
- emit_insn (gen_iorsi3 (ctz_cond, lo, hi));
-
- result = gen_reg_rtx (SImode);
- emit_insn (gen_insn_mvz (result, ctz_plus_1, ctz_cond, const0_rtx));
-
- emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
-
- DONE;
-})
-
-(define_expand "popcountdi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (popcount:DI (match_operand:DI 1 "nonmemory_operand" "")))]
- ""
-{
- rtx lo, hi, popcount_lo, popcount_hi, result;
-
- split_di (&operands[1], 1, &lo, &hi);
- lo = force_reg (SImode, lo);
- hi = force_reg (SImode, hi);
-
- popcount_lo = gen_reg_rtx (SImode);
- emit_insn (gen_popcountsi2 (popcount_lo, lo));
-
- popcount_hi = gen_reg_rtx (SImode);
- emit_insn (gen_popcountsi2 (popcount_hi, hi));
-
- result = gen_reg_rtx (SImode);
- emit_insn (gen_addsi3 (result, popcount_lo, popcount_hi));
-
- emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
-
- DONE;
-})
-
-(define_expand "paritysi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (parity:SI (match_operand:SI 1 "reg_or_0_operand" "")))]
- ""
- {
- operands[2] = gen_reg_rtx (SImode);
- emit_insn (gen_popcountsi2 (operands[2], operands[1]));
- emit_insn (gen_andsi3 (operands[0], operands[2], const1_rtx));
- DONE;
- })
-
-(define_expand "paritydi2"
- [(set (match_operand:DI 0 "register_operand" "")
- (parity:DI (match_operand:DI 1 "nonmemory_operand" "")))]
- ""
-{
- rtx lo, hi, xor_lohi, result;
-
- split_di (&operands[1], 1, &lo, &hi);
- lo = force_reg (SImode, lo);
- hi = force_reg (SImode, hi);
-
- xor_lohi = gen_reg_rtx (SImode);
- emit_insn (gen_xorsi3 (xor_lohi, lo, hi));
-
- result = gen_reg_rtx (SImode);
- emit_insn (gen_paritysi2 (result, xor_lohi));
-
- emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
-
- DONE;
-})
-
-(define_insn "one_cmplsi2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (not:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
- ""
- "nor\t%0, %r1, zero")
-
-
-;;
-;; Conditional moves.
-;;
-
-(define_expand "movsicc"
- [(set (match_operand:SI 0 "register_operand" "")
- (if_then_else:SI (match_operand 1 "comparison_operator" "")
- (match_operand:SI 2 "reg_or_0_operand" "")
- (match_operand:SI 3 "reg_or_0_operand" "")))]
- ""
- { operands[1] = tilepro_emit_conditional_move (operands[1]); })
-
-(define_insn "movcc_insn"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
- (if_then_else:SI
- (match_operator 4 "eqne_operator"
- [(match_operand:SI 1 "reg_or_0_operand" "rO,rO,rO,rO")
- (const_int 0)])
- (match_operand:SI 2 "reg_or_0_operand" "rO,O,rO,0")
- (match_operand:SI 3 "reg_or_0_operand" "O,rO,0,rO")))]
- ""
- "@
- m%c4\t%0, %r1, %r2
- m%C4\t%0, %r1, %r3
- mv%c4\t%0, %r1, %r2
- mv%C4\t%0, %r1, %r3"
- [(set_attr "type" "*,*,Y0,Y0")])
-
-(define_expand "insn_mz"
- [(set (match_operand:SI 0 "register_operand" "")
- (if_then_else:SI
- (eq (match_operand:SI 1 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:SI 2 "reg_or_0_operand" "")
- (const_int 0)))])
-
-(define_expand "insn_mnz"
- [(set (match_operand:SI 0 "register_operand" "")
- (if_then_else:SI
- (ne (match_operand:SI 1 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:SI 2 "reg_or_0_operand" "")
- (const_int 0)))])
-
-(define_expand "insn_mvz"
- [(set (match_operand:SI 0 "register_operand" "")
- (if_then_else:SI
- (eq (match_operand:SI 2 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:SI 3 "reg_or_0_operand" "")
- (match_operand:SI 1 "reg_or_0_operand" "")))])
-
-(define_expand "insn_mvnz"
- [(set (match_operand:SI 0 "register_operand" "")
- (if_then_else:SI
- (ne (match_operand:SI 2 "reg_or_0_operand" "")
- (const_int 0))
- (match_operand:SI 3 "reg_or_0_operand" "")
- (match_operand:SI 1 "reg_or_0_operand" "")))])
-
-
-;;
-;; Conversions
-;;
-
-(define_insn "zero_extendqisi2"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
- (zero_extend:SI (match_operand:QI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- mm\t%0, %r1, zero, 0, 7
- lb_u\t%0, %1
- lbadd_u\t%0, %I1, %i1"
- [(set_attr "type" "X01,Y2_2cycle,X1_2cycle")])
-
-(define_insn "zero_extendhisi2"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
- (zero_extend:SI (match_operand:HI 1 "move_operand" "rO,U,m")))]
- ""
- "@
- mm\t%0, %r1, zero, 0, 15
- lh_u\t%0, %1
- lhadd_u\t%0, %I1, %i1"
- [(set_attr "type" "X01,Y2_2cycle,X1_2cycle")])
-
-(define_expand "extendhisi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI (match_operand:HI 1 "move_operand" "")))]
- ""
-{
- if (!memory_operand (operands[1], HImode))
- {
- operands[1] = gen_lowpart (SImode, operands[1]);
- operands[2] = can_create_pseudo_p () ? gen_reg_rtx (SImode) : operands[0];
-
- emit_move_insn (operands[2], gen_rtx_ASHIFT (SImode, operands[1],
- GEN_INT (16)));
- emit_move_insn (operands[0], gen_rtx_ASHIFTRT (SImode, operands[2],
- GEN_INT (16)));
- DONE;
- }
-})
-
-(define_insn "*lh"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (sign_extend:SI (match_operand:HI 1 "memory_operand" "U,m")))]
- ""
- "@
- lh\t%0, %1
- lhadd\t%0, %I1, %i1"
- [(set_attr "type" "Y2_2cycle,X1_2cycle")])
-
-(define_expand "extendqisi2"
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI (match_operand:QI 1 "move_operand" "")))]
- ""
-{
- if (!memory_operand (operands[1], QImode))
- {
- operands[1] = gen_lowpart (SImode, operands[1]);
- operands[2] = can_create_pseudo_p () ? gen_reg_rtx (SImode) : operands[0];
-
- emit_move_insn (operands[2], gen_rtx_ASHIFT (SImode, operands[1],
- GEN_INT (24)));
- emit_move_insn (operands[0], gen_rtx_ASHIFTRT (SImode, operands[2],
- GEN_INT (24)));
- DONE;
- }
-})
-
-(define_insn "*lb"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (sign_extend:SI (match_operand:QI 1 "memory_operand" "U,m")))]
- ""
- "@
- lb\t%0, %1
- lbadd\t%0, %I1, %i1"
- [(set_attr "type" "Y2_2cycle,X1_2cycle")])
-
-;;
-;; insv patterns
-;;
-(define_expand "insv"
- [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "u5bit_cint_operand" "")
- (match_operand:SI 2 "u5bit_cint_operand" ""))
- (match_operand:SI 3 "reg_or_cint_operand" ""))]
- ""
-{
- tilepro_expand_insv (operands);
- DONE;
-})
-
-(define_insn "*insv_tblidxb0"
- [(set (zero_extract:SI
- (match_operand:SI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (match_operand:SI 1 "register_operand" "rO"))]
- ""
- "tblidxb0\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_tblidxb1"
- [(set (zero_extract:SI
- (match_operand:SI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (zero_extract:SI
- (const_int 8)
- (const_int 8)
- (match_operand:SI 1 "register_operand" "rO")))]
- ""
- "tblidxb1\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_tblidxb2"
- [(set (zero_extract:SI
- (match_operand:SI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (zero_extract:SI
- (const_int 8)
- (const_int 16)
- (match_operand:SI 1 "register_operand" "rO")))]
- ""
- "tblidxb2\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_tblidxb3"
- [(set (zero_extract:SI
- (match_operand:SI 0 "register_operand" "+r")
- (const_int 8)
- (const_int 2))
- (zero_extract:SI
- (const_int 8)
- (const_int 24)
- (match_operand:SI 1 "register_operand" "rO")))]
- ""
- "tblidxb3\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*insv_mm1"
- [(set (zero_extract:SI
- (match_operand:SI 0 "register_operand" "+r")
- (match_operand:SI 1 "u5bit_cint_operand" "n")
- (const_int 0))
- (match_operand:SI 2 "register_operand" "rO"))]
- ""
- "mm\t%0, %r2, %0, 0, %1-1"
- [(set_attr "type" "X01")])
-
-(define_insn "*insv_mm2"
- [(set (zero_extract:SI
- (match_operand:SI 0 "register_operand" "+r")
- (match_operand:SI 1 "u5bit_cint_operand" "n")
- (match_operand:SI 2 "u5bit_cint_operand" "n"))
- (zero_extract:SI
- (match_operand:SI 3 "register_operand" "rO")
- (match_dup 1)
- (match_dup 2)))]
- ""
- "mm\t%0, %r3, %0, %2, %2+%1-1"
- [(set_attr "type" "X01")])
-
-
-;;
-;; Multiplies
-;;
-
-(define_expand "mulsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (zero_extend:SI
- (subreg:HI (match_operand:SI 1 "nonmemory_operand" "") 0))
- (zero_extend:SI
- (subreg:HI (match_operand:SI 2 "nonmemory_operand" "") 0))))
- (set (match_dup 0)
- (unspec:SI [(match_dup 0) (match_dup 1) (match_dup 2)]
- UNSPEC_INSN_MULHLSA_UU))
- (set (match_dup 0)
- (unspec:SI [(match_dup 0) (match_dup 2) (match_dup 1)]
- UNSPEC_INSN_MULHLSA_UU))]
- ""
- {
- operands[1] = force_reg (SImode, operands[1]);
- operands[1] = make_safe_from (operands[1], operands[0]);
-
- if (tilepro_expand_mulsi (operands[0], operands[1], operands[2]))
- DONE;
- else
- {
- operands[2] = force_reg (SImode, operands[2]);
- operands[2] = make_safe_from (operands[2], operands[0]);
- }
- })
-
-(define_insn "mulhisi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (sign_extend:SI
- (match_operand:HI 1 "reg_or_0_operand" "rO"))
- (sign_extend:SI
- (match_operand:HI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mulll_ss\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "umulhisi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (zero_extend:SI
- (match_operand:HI 1 "reg_or_0_operand" "rO"))
- (zero_extend:SI
- (match_operand:HI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mulll_uu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "usmulhisi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (zero_extend:SI
- (match_operand:HI 1 "reg_or_0_operand" "rO"))
- (sign_extend:SI
- (match_operand:HI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mulll_su\t%0, %r2, %r1"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "maddhisi4"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI
- (mult:SI (sign_extend:SI
- (match_operand:HI 1 "reg_or_0_operand" "rO"))
- (sign_extend:SI
- (match_operand:HI 2 "reg_or_0_operand" "rO")))
- (match_operand:SI 3 "register_operand" "0")))]
- ""
- "mullla_ss\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "umaddhisi4"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI
- (mult:SI (zero_extend:SI
- (match_operand:HI 1 "reg_or_0_operand" "rO"))
- (zero_extend:SI
- (match_operand:HI 2 "reg_or_0_operand" "rO")))
- (match_operand:SI 3 "register_operand" "0")))]
- ""
- "mullla_uu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-
-(define_insn "mulqihi3"
- [(set (match_operand:HI 0 "register_operand" "=r")
- (mult:HI (sign_extend:HI
- (match_operand:QI 1 "reg_or_0_operand" "rO"))
- (sign_extend:HI
- (match_operand:QI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mulll_ss\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "umulqihi3"
- [(set (match_operand:HI 0 "register_operand" "=r")
- (mult:HI (zero_extend:HI
- (match_operand:QI 1 "reg_or_0_operand" "rO"))
- (zero_extend:HI
- (match_operand:QI 2 "reg_or_0_operand" "rO"))))]
- ""
- "mulll_uu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_expand "smulsi3_highpart"
- [(set (match_operand:SI 0 "register_operand" "")
- (truncate:SI
- (ashiftrt:DI
- (mult:DI (sign_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
- (sign_extend:DI (match_operand:SI 2 "reg_or_0_operand" "")))
- (const_int 32))))]
- ""
- {
- tilepro_expand_smulsi3_highpart (operands[0], operands[1], operands[2]);
- DONE;
- })
-
-(define_expand "umulsi3_highpart"
- [(set (match_operand:SI 0 "register_operand" "")
- (truncate:SI
- (lshiftrt:DI
- (mult:DI (zero_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
- (zero_extend:DI (match_operand:SI 2 "reg_or_0_operand" "")))
- (const_int 32))))]
- ""
-{
- tilepro_expand_umulsi3_highpart (operands[0], operands[1], operands[2]);
- DONE;
-})
-
-
-;;
-;; Loops
-;;
-
-;; Define the subtract-one-and-jump insns so loop.c knows what to
-;; generate.
-(define_expand "doloop_end"
- [(use (match_operand 0 "" "")) ;; loop pseudo
- (use (match_operand 1 "" ""))] ;; label
- ""
-{
- if (optimize > 0)
- {
- rtx s0;
- rtx bcomp;
- rtx loc_ref;
-
- /* only deal with loop counters in SImode */
- if (GET_MODE (operands[0]) != SImode)
- FAIL;
-
- s0 = operands [0];
-
- emit_move_insn (s0, gen_rtx_PLUS (SImode, s0, GEN_INT (-1)));
- bcomp = gen_rtx_NE(SImode, s0, const0_rtx);
- loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [1]);
- emit_jump_insn (gen_rtx_SET (pc_rtx,
- gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
- loc_ref, pc_rtx)));
- DONE;
- }
- else
- FAIL;
-
-})
-
-;;
-;; Prologue/epilogue
-;;
-(define_expand "prologue"
- [(const_int 0)]
- ""
-{
- tilepro_expand_prologue ();
- DONE;
-})
-
-(define_expand "epilogue"
- [(const_int 0)]
- ""
-{
- tilepro_expand_epilogue (false);
- DONE;
-})
-
-(define_expand "sibcall_epilogue"
- [(const_int 0)]
- ""
-{
- tilepro_expand_epilogue (true);
- DONE;
-})
-
-;;
-;; Stack manipulations
-;;
-
-;; An insn to allocate new stack space for dynamic use (e.g., alloca).
-(define_expand "allocate_stack"
- [(set (match_operand 0 "register_operand" "")
- (minus (reg 54) (match_operand 1 "nonmemory_operand" "")))
- (set (reg 54)
- (minus (reg 54) (match_dup 1)))]
- ""
- "tilepro_allocate_stack (operands[0], operands[1]); DONE;")
-
-;;
-;; Branches
-;;
-(define_expand "call"
- [(parallel [(call (match_operand:SI 0 "call_operand" "")
- (match_operand 1 "" ""))
- (use (reg:SI 54))
- (clobber (reg:SI 55))])]
- ""
- "")
-
-(define_insn "*call_insn"
- [(call (mem:SI (match_operand:SI 0 "call_address_operand" "rO,i"))
- (match_operand 1 "" ""))
- (use (reg:SI 54))
- (clobber (reg:SI 55))]
- ""
- "@
- jalr\t%r0
- jal\t%p0"
- [(set_attr "type" "X1,X1")])
-
-(define_expand "call_value"
- [(parallel [(set (match_operand 0 "register_operand" "")
- (call (match_operand:SI 1 "call_operand" "")
- (match_operand 2 "" "")))
- (use (reg:SI 54))
- (clobber (reg:SI 55))])]
- "")
-
-(define_insn "*call_value_insn"
- [(set (match_operand 0 "register_operand" "=r,r")
- (call (mem:SI (match_operand:SI 1 "call_address_operand" "rO,i"))
- (match_operand 2 "" "")))
- (use (reg:SI 54))
- (clobber (reg:SI 55))]
- ""
- "@
- jalr\t%r1
- jal\t%p1"
- [(set_attr "type" "X1,X1")])
-
-(define_expand "sibcall"
- [(parallel [(call (match_operand:SI 0 "call_operand" "")
- (match_operand 1 "" ""))
- (use (reg:SI 54))])]
- ""
- "")
-
-(define_insn "*sibcall_insn"
- [(call (mem:SI (match_operand:SI 0 "call_address_operand" "rO,i"))
- (match_operand 1 "" ""))
- (use (reg:SI 54))]
- "SIBLING_CALL_P(insn)"
- "@
- jr\t%r0
- j\t%p0"
- [(set_attr "type" "X1,X1")])
-
-(define_expand "sibcall_value"
- [(parallel [(set (match_operand 0 "" "")
- (call (match_operand:SI 1 "call_operand" "")
- (match_operand:SI 2 "" "")))
- (use (reg:SI 54))])]
- ""
- "")
-
-(define_insn "*sibcall_value"
- [(set (match_operand 0 "" "")
- (call (mem:SI (match_operand:SI 1 "call_address_operand" "rO,i"))
- (match_operand:SI 2 "" "")))
- (use (reg:SI 54))]
- "SIBLING_CALL_P(insn)"
- "@
- jr\t%r1
- j\t%p1"
- [(set_attr "type" "X1,X1")])
-
-(define_insn "jump"
- [(set (pc) (label_ref (match_operand 0 "" "")))]
- ""
- "j\t%l0"
- [(set_attr "type" "X1")])
-
-(define_insn "indirect_jump"
- [(set (pc) (match_operand:SI 0 "register_operand" "rO"))]
- ""
- "jr\t%r0"
- [(set_attr "type" "X1")])
-
-(define_expand "return"
- [(parallel
- [(return)
- (use (reg:SI 55))])]
- "tilepro_can_use_return_insn_p ()"
- "")
-
-(define_insn "_return"
- [(return)
- (use (reg:SI 55))]
- "reload_completed"
- "jrp\tlr"
- [(set_attr "type" "X1")])
-
-(define_expand "tablejump"
- [(set (pc) (match_operand:SI 0 "register_operand" ""))
- (use (label_ref (match_operand 1 "" "")))]
- ""
-{
- tilepro_expand_tablejump (operands[0], operands[1]);
- DONE;
-})
-
-(define_insn "tablejump_aux"
- [(set (pc) (match_operand:SI 0 "register_operand" "r"))
- (use (label_ref (match_operand 1 "" "")))]
- ""
- "jr\t%0"
- [(set_attr "type" "X1")])
-
-;; Call subroutine returning any type.
-(define_expand "untyped_call"
- [(parallel [(call (match_operand 0 "" "")
- (const_int 0))
- (match_operand 1 "" "")
- (match_operand 2 "" "")])]
- ""
-{
- int i;
-
- emit_call_insn (gen_call (operands[0], const0_rtx));
-
- for (i = 0; i < XVECLEN (operands[2], 0); i++)
- {
- rtx set = XVECEXP (operands[2], 0, i);
- emit_move_insn (SET_DEST (set), SET_SRC (set));
- }
-
- /* The optimizer does not know that the call sets the function value
- registers we stored in the result block. We avoid problems by
- claiming that all hard registers are used and clobbered at this
- point. */
- emit_insn (gen_blockage ());
-
- DONE;
-})
-
-;; UNSPEC_VOLATILE is considered to use and clobber all hard registers
-;; and all of memory. This blocks insns from being moved across this
-;; point.
-(define_insn "blockage"
- [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)]
- ""
- "pseudo"
- [(set_attr "type" "nothing")
- (set_attr "length" "0")])
-
-;; Internal expanders to prevent memory ops from moving around frame
-;; allocation/deallocation.
-;;
-;; TODO: really this clobber should just clobber the frame memory. Is
-;; this possibly by clobbering memory @ the sp reg (as alpha does?)
-;; or by explicitly setting the alias set to the frame?
-(define_insn "sp_adjust"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
- (plus:SI
- (match_operand:SI 1 "register_operand" "%r,r,r")
- (match_operand:SI 2 "add_operand" "r,I,J")))
- (clobber (mem:BLK (scratch)))]
- ""
- "@
- add\t%0, %1, %2
- addi\t%0, %1, %2
- addli\t%0, %1, %2"
- [(set_attr "type" "*,*,X01")])
-
-;; Used for move sp, r52, to pop a stack frame. We need to make sure
-;; that stack frame memory operations have been issued before we do
-;; this. TODO: see above TODO.
-(define_insn "sp_restore"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (match_operand:SI 1 "register_operand" "r"))
- (clobber (mem:BLK (scratch)))]
- ""
- "move\t%0, %1")
-
-(define_insn "nop"
- [(const_int 0)]
- ""
- "nop"
- [(set_attr "type" "Y01")])
-
-(define_insn "trap"
- [(trap_if (const_int 1) (const_int 0))]
- ""
- "raise; moveli zero, 6"
- [(set_attr "type" "cannot_bundle")])
-
-
-;;
-;; Conditional branches
-;;
-
-(define_expand "cbranchsi4"
- [(set (pc)
- (if_then_else (match_operator 0 "ordered_comparison_operator"
- [(match_operand:SI 1 "reg_or_cint_operand")
- (match_operand:SI 2 "reg_or_cint_operand")])
- (label_ref (match_operand 3 ""))
- (pc)))]
- ""
- { tilepro_emit_conditional_branch (operands, SImode); DONE; })
-
-
-(define_expand "cbranchdi4"
- [(set (pc)
- (if_then_else (match_operator 0 "ordered_comparison_operator"
- [(match_operand:DI 1 "reg_or_cint_operand")
- (match_operand:DI 2 "reg_or_cint_operand")])
- (label_ref (match_operand 3 ""))
- (pc)))]
- ""
- { tilepro_emit_conditional_branch (operands, DImode); DONE; })
-
-
-(define_insn "*bcc_normal"
- [(set (pc)
- (if_then_else
- (match_operator 1 "signed_comparison_operator"
- [(match_operand:SI 2 "reg_or_0_operand" "rO")
- (const_int 0)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- { return tilepro_output_cbranch (insn, operands, false); }
- [(set_attr "type" "X1_branch")])
-
-(define_insn "*bcc_reverse"
- [(set (pc)
- (if_then_else
- (match_operator 1 "signed_comparison_operator"
- [(match_operand:SI 2 "reg_or_0_operand" "rO")
- (const_int 0)])
- (pc)
- (label_ref (match_operand 0 "" ""))))]
- ""
- { return tilepro_output_cbranch (insn, operands, true); }
- [(set_attr "type" "X1_branch")])
-
-;; FIXME: the straight forward versions which do not include the
-;; subreg:QI does not match for some unknown reason.
-(define_insn "*bbs_normal"
- [(set (pc)
- (if_then_else
- (ne (zero_extract:SI (subreg:QI
- (match_operand:SI 1 "reg_or_0_operand" "rO") 0)
- (const_int 1)
- (const_int 0))
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- { return tilepro_output_cbranch_with_opcode (insn, operands, "bbs", "bbns",
- 1, 0); }
- [(set_attr "type" "X1_branch")])
-
-(define_insn "*bbc_normal"
- [(set (pc)
- (if_then_else
- (eq (zero_extract:SI (subreg:QI
- (match_operand:SI 1 "reg_or_0_operand" "rO") 0)
- (const_int 1)
- (const_int 0))
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- { return tilepro_output_cbranch_with_opcode (insn, operands, "bbns", "bbs",
- 1, 0); }
- [(set_attr "type" "X1_branch")])
-
-;; Note that __insn_mf() expands to this.
-(define_expand "memory_barrier"
- [(set (match_dup 0)
- (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
- ""
-{
- operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
- MEM_VOLATILE_P (operands[0]) = 1;
-})
-
-(define_insn "*memory_barrier"
- [(set (match_operand:BLK 0 "" "")
- (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
- ""
- "mf"
- [(set_attr "type" "X1")])
-
-(define_insn "prefetch"
- [(prefetch (match_operand:SI 0 "address_operand" "rO")
- (match_operand:SI 1 "const_int_operand" "")
- (match_operand:SI 2 "const_int_operand" ""))]
- ""
- "prefetch\t%r0"
- [(set_attr "type" "Y2")])
-
-
-;;
-;; Network intrinsics
-;;
-
-;; Note the "pseudo" text is handled specially by the
-;; asm_output_opcode routine. If the output is an empty string, the
-;; instruction would bypass the asm_output_opcode routine, bypassing
-;; the bundle handling code.
-(define_insn "tilepro_network_barrier"
- [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
- ""
- "pseudo"
- [(set_attr "type" "nothing")
- (set_attr "length" "0")])
-
-(define_insn "*netreg_receive"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=r,U,m")
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i,i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- move\t%0, %N1
- sw\t%0, %N1
- swadd\t%I0, %N1, %i0"
- [(set_attr "type" "*,Y2,X1")])
-
-(define_insn "*netreg_send"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i,i,i,i,i,i")
- (match_operand:SI 1 "reg_or_cint_operand" "rO,I,J,K,N,P")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- move\t%N0, %r1
- movei\t%N0, %1
- moveli\t%N0, %1
- auli\t%N0, zero, %h1
- addib\t%N0, zero, %j1
- addih\t%N0, zero, %h1"
- [(set_attr "type" "*,*,X01,X01,X01,X01")])
-
-(define_insn "*netreg_copy"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i")
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "move %N0, %N1")
-
-(define_expand "tilepro_idn0_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_IDN0)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_idn1_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_IDN1)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_idn_send"
- [(parallel
- [(unspec_volatile:SI [(const_int TILEPRO_NETREG_IDN0)
- (match_operand:SI 0 "reg_or_cint_operand" "")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_sn_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_SN)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_sn_send"
- [(parallel
- [(unspec_volatile:SI [(const_int TILEPRO_NETREG_SN)
- (match_operand:SI 0 "reg_or_cint_operand" "")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_udn0_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN0)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_udn1_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN1)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_udn2_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN2)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_udn3_receive"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN3)
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_expand "tilepro_udn_send"
- [(parallel
- [(unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN0)
- (match_operand:SI 0 "reg_or_cint_operand" "")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))])]
- "")
-
-(define_insn "*netreg_add_to_network"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i,i,i,i")
- (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO,rO")
- (match_operand:SI 2 "add_operand" "r,I,J,K"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- add\t%N0, %r1, %2
- addi\t%N0, %r1, %2
- addli\t%N0, %r1, %2
- auli\t%N0, %r1, %h2"
- [(set_attr "type" "*,*,X01,X01")])
-
-(define_insn "*netreg_add_from_network"
- [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
- (plus:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i,i,i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "add_operand" "rO,I,J,K")))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- add\t%0, %N1, %r2
- addi\t%0, %N1, %2
- addli\t%0, %N1, %2
- auli\t%0, %N1, %h2"
- [(set_attr "type" "*,*,X01,X01")])
-
-(define_insn "*netreg_add_from_to_network"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i,i,i,i")
- (plus:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i,i,i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "add_operand" "rO,I,J,K"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- add\t%N0, %N1, %r2
- addi\t%N0, %N1, %2
- addli\t%N0, %N1, %2
- auli\t%N0, %N1, %h2"
- [(set_attr "type" "*,*,X01,X01")])
-
-(define_code_iterator netreg_binop
- [minus])
-
-(define_insn "*netreg_binop_to_network"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i")
- (netreg_binop:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%N0, %r1, %r2")
-
-(define_insn "*netreg_binop_from_network0"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (netreg_binop:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "reg_or_0_operand" "rO")))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%0, %N1, %r2")
-
-(define_insn "*netreg_binop_from_network1"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (netreg_binop:SI
- (match_operand:SI 1 "reg_or_0_operand" "rO")
- (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%0, %r1, %N2")
-
-(define_insn "*netreg_binop_from_to_network0"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i")
- (netreg_binop:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "reg_or_0_operand" "rO"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%N0, %N1, %r2")
-
-(define_insn "*netreg_binop_from_to_network1"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i")
- (netreg_binop:SI
- (match_operand:SI 1 "reg_or_0_operand" "rO")
- (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%N0, %r1, %N2")
-
-(define_insn "*netreg_binop_to_network"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i,i")
- (binop_with_imm:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_cint_operand" "I,rO"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- <insn>i<u>\t%N0, %r1, %2
- <insn><u>\t%N0, %r1, %r2")
-
-(define_insn "*netreg_binop_from_network"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (binop_with_imm:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- <insn>i<u>\t%0, %N1, %2
- <insn><u>\t%0, %N1, %r2")
-
-(define_insn "*netreg_binop_from_to_network"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i,i")
- (binop_with_imm:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "reg_or_cint_operand" "I,rO"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "@
- <insn>i<u>\t%N0, %N1, %2
- <insn><u>\t%N0, %N1, %r2")
-
-(define_insn "*netreg_unop_to_network"
- [(unspec_volatile:SI [(match_operand:SI 0 "netreg_operand" "i")
- (unop:SI (match_operand:SI 1 "reg_or_0_operand" "rO"))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%N0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*netreg_unop_from_network"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unop:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%0, %N1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*netreg_unop_from_to_network"
- [(unspec_volatile:SI
- [(match_operand:SI 0 "netreg_operand" "i")
- (unop:SI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE))
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_SEND)
- (clobber (reg:SI TILEPRO_NETORDER_REG))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "<insn>\t%N0, %N1"
- [(set_attr "type" "Y0")])
-
-(define_insn "*netreg_sadh_u_from_network0"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI
- [(unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADH_U))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "sadh_u\t%0, %N1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "*netreg_sadh_u_from_network1"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI
- [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)]
- UNSPEC_INSN_SADH_U))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "sadh_u\t%0, %r1, %N2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "*netreg_sadah_u_from_network0"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI
- [(match_operand:SI 1 "reg_or_0_operand" "0")
- (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADAH_U))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "sadah_u\t%0, %N2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "*netreg_sadah_u_from_network1"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI
- [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (unspec_volatile:SI [(match_operand:SI 3 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE)]
- UNSPEC_INSN_SADAH_U))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- "sadah_u\t%0, %r2, %N3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_code_iterator mm_combiner [ior xor plus])
-
-;; This doesn't seem to match -- too complex for 'combine'?
-;;
-;; (define_insn "*netreg_mm_to_network"
-;; [(unspec_volatile:SI
-;; [(match_operand:SI 0 "netreg_operand" "i")
-;; (mm_combiner:SI
-;; (and:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
-;; (match_operand:SI 3 "const_int_operand" "n"))
-;; (and:SI (match_operand:SI 2 "reg_or_0_operand" "rO")
-;; (match_operand:SI 4 "const_int_operand" "n")))]
-;; UNSPEC_NETWORK_SEND)]
-;; "tilepro_bitfield_operand_p (INTVAL (operands[3]), NULL, NULL)
-;; && INTVAL (operands[3]) == ~INTVAL (operands[4])"
-;; "mm\t%N0, %r1, %r2, %M3"
-;; [(set_attr "type" "X01")])
-
-;; FIXME: the straight forward versions which do not include the
-;; subreg:QI does not match for some unknown reason.
-(define_insn "*netreg_bbs_normal"
- [(set (pc)
- (if_then_else
- (ne (zero_extract:SI
- (subreg:QI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE) 0)
- (const_int 1)
- (const_int 0))
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- { return tilepro_output_cbranch_with_opcode (insn, operands, "bbs", "bbns",
- 1, 1); }
- [(set_attr "type" "X1_branch")])
-
-(define_insn "*netreg_bbc_normal"
- [(set (pc)
- (if_then_else
- (eq (zero_extract:SI
- (subreg:QI
- (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
- (reg:SI TILEPRO_NETORDER_REG)]
- UNSPEC_NETWORK_RECEIVE) 0)
- (const_int 1)
- (const_int 0))
- (const_int 0))
- (label_ref (match_operand 0 "" ""))
- (pc)))
- (clobber (reg:SI TILEPRO_NETORDER_REG))]
- ""
- { return tilepro_output_cbranch_with_opcode (insn, operands, "bbns", "bbns",
- 1, 1); }
- [(set_attr "type" "X1_branch")])
-
-
-;;
-;; "__insn" Intrinsics (some expand directly to normal patterns above).
-;;
-
-(define_insn "insn_addlis"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec_volatile:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "s16bit_cint_operand" "i")]
- UNSPEC_INSN_ADDLIS))]
- ""
- "addlis\t%0, %r1, %2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_auli"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "s16bit_cint_operand" "i")]
- UNSPEC_INSN_AULI))]
- ""
- "auli\t%0, %r1, %2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_drain"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_DRAIN)]
- ""
- "drain"
- [(set_attr "type" "cannot_bundle")])
-
-(define_insn "insn_icoh"
- [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_ICOH)]
- ""
- "icoh\t%r0"
- [(set_attr "type" "X1")])
-
-
-(define_insn "insn_info"
- [(unspec_volatile:VOID [(match_operand:SI 0 "s8bit_cint_operand" "i")]
- UNSPEC_INSN_INFO)]
- ""
- "info\t%0")
-
-(define_insn "insn_infol"
- [(unspec_volatile:VOID [(match_operand:SI 0 "s16bit_cint_operand" "i")]
- UNSPEC_INSN_INFOL)]
- ""
- "infol\t%0"
- [(set_attr "type" "X01")])
-
-;; loads
-
-(define_expand "insn_<load>"
- [(set (match_operand:SI 0 "register_operand" "")
- (sign_extend:SI
- (mem:I12MODE (match_operand:SI 1 "address_operand" ""))))]
- "")
-
-(define_expand "insn_<load>_u"
- [(set (match_operand:SI 0 "register_operand" "")
- (zero_extend:SI
- (mem:I12MODE (match_operand:SI 1 "address_operand" ""))))]
- "")
-
-(define_insn "insn_<load>add"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI (mem:I12MODE (match_dup 3))))]
- ""
- "<load>add\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_<load>add_u"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI (mem:I12MODE (match_dup 3))))]
- ""
- "<load>add_u\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_expand "insn_lw"
- [(set (match_operand:SI 0 "register_operand" "")
- (mem:SI (match_operand:SI 1 "address_operand" "")))]
- "")
-
-(define_insn "insn_lwadd"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (mem:SI (match_dup 3)))]
- ""
- "lwadd\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_lwadd_na"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (mem:SI (and:SI (match_dup 3) (const_int -4))))]
- ""
- "lwadd_na\t%0, %1, %2"
- [(set_attr "type" "X1_2cycle")])
-
-(define_insn "insn_lw_na"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mem:SI (and:SI (match_operand:SI 1 "address_operand" "rO")
- (const_int -4))))]
- ""
- "lw_na\t%0, %r1"
- [(set_attr "type" "X1_2cycle")])
-
-;; L2 hits
-
-(define_insn "insn_<load>_L2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI
- (unspec:I12MODE
- [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
- UNSPEC_LATENCY_L2)))]
- ""
- "<load>\t%0, %r1"
- [(set_attr "type" "Y2_L2")])
-
-(define_insn "insn_<load>_u_L2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI
- (unspec:I12MODE
- [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
- UNSPEC_LATENCY_L2)))]
- ""
- "<load>_u\t%0, %r1"
- [(set_attr "type" "Y2_L2")])
-
-(define_insn "insn_<load>add_L2"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
- UNSPEC_LATENCY_L2)))]
- ""
- "<load>add\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_<load>add_u_L2"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
- UNSPEC_LATENCY_L2)))]
- ""
- "<load>add_u\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_lwadd_L2"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (match_dup 3))] UNSPEC_LATENCY_L2))]
- ""
- "lwadd\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_lwadd_na_L2"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (and:SI (match_dup 3) (const_int -4)))]
- UNSPEC_LATENCY_L2))]
- ""
- "lwadd_na\t%0, %1, %2"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_lw_na_L2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (and:SI (match_operand:SI 1 "address_operand" "rO")
- (const_int -4)))]
- UNSPEC_LATENCY_L2))]
- ""
- "lw_na\t%0, %r1"
- [(set_attr "type" "X1_L2")])
-
-(define_insn "insn_lw_L2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (match_operand:SI 1 "address_operand" "rO"))]
- UNSPEC_LATENCY_L2))]
- ""
- "lw\t%0, %r1"
- [(set_attr "type" "Y2_L2")])
-
-;; L2 miss
-
-(define_insn "insn_<load>_miss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI
- (unspec:I12MODE
- [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
- UNSPEC_LATENCY_MISS)))]
- ""
- "<load>\t%0, %r1"
- [(set_attr "type" "Y2_miss")])
-
-(define_insn "insn_<load>_u_miss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI
- (unspec:I12MODE
- [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
- UNSPEC_LATENCY_MISS)))]
- ""
- "<load>_u\t%0, %r1"
- [(set_attr "type" "Y2_miss")])
-
-(define_insn "insn_<load>add_miss"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (sign_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
- UNSPEC_LATENCY_MISS)))]
- ""
- "<load>add\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_<load>add_u_miss"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (zero_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
- UNSPEC_LATENCY_MISS)))]
- ""
- "<load>add_u\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_lwadd_miss"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (match_dup 3))] UNSPEC_LATENCY_MISS))]
- ""
- "lwadd\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_lwadd_na_miss"
- [(set (match_operand:SI 1 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "1")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (and:SI (match_dup 3) (const_int -4)))]
- UNSPEC_LATENCY_MISS))]
- ""
- "lwadd_na\t%0, %1, %2"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_lw_na_miss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (and:SI (match_operand:SI 1 "address_operand" "rO")
- (const_int -4)))]
- UNSPEC_LATENCY_MISS))]
- ""
- "lw_na\t%0, %r1"
- [(set_attr "type" "X1_miss")])
-
-(define_insn "insn_lw_miss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(mem:SI (match_operand:SI 1 "address_operand" "rO"))]
- UNSPEC_LATENCY_MISS))]
- ""
- "lw\t%0, %r1"
- [(set_attr "type" "Y2_miss")])
-
-;; end loads
-
-(define_insn "insn_mfspr"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec_volatile:SI [(match_operand:SI 1 "u15bit_cint_operand" "i")]
- UNSPEC_INSN_MFSPR))
- (clobber (mem:BLK (const_int 0)))]
- ""
- "mfspr\t%0, %1"
- [(set_attr "type" "X1")])
-
-(define_insn "*mm"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mm_combiner:SI
- (and:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "const_int_operand" "n"))
- (and:SI (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 4 "const_int_operand" "n"))))]
- "tilepro_bitfield_operand_p (INTVAL (operands[3]), NULL, NULL)
- && INTVAL (operands[3]) == ~INTVAL (operands[4])"
- "mm\t%0, %r1, %r2, %M3"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_mm"
- [(set (match_operand:SI 0 "register_operand" "")
- (ior:SI
- (and:SI (match_operand:SI 1 "reg_or_cint_operand" "")
- (match_operand:SI 3 "u5bit_cint_operand" ""))
- (and:SI (match_operand:SI 2 "reg_or_cint_operand" "")
- (match_operand:SI 4 "u5bit_cint_operand" ""))))]
- ""
-{
- int first, last, i;
- HOST_WIDE_INT mask;
-
- first = INTVAL (operands[3]) & 31;
- last = INTVAL (operands[4]) & 31;
-
- if (((last + 1) & 31) == first)
- {
- /* Handle pathological case of a mask that includes only the
- first operand. The reordering code below can't handle this. */
- emit_move_insn (operands[0], operands[1]);
- DONE;
- }
-
- /* Canonicalize order by putting constant second, if any. */
- if (CONST_INT_P (operands[1]))
- {
- int tmp_first;
-
- rtx tmp = operands[1];
- operands[1] = operands[2];
- operands[2] = tmp;
-
- /* Invert the bit range. */
- tmp_first = first;
- first = (last + 1) & 31;
- last = (tmp_first - 1) & 31;
- }
-
- /* Convert the first/last bit range into a bit mask. */
- mask = 0;
-
- for (i = first; ; i = (i + 1) & 31)
- {
- mask |= ((HOST_WIDE_INT)1) << i;
- if (i == last)
- break;
- }
-
- mask = trunc_int_for_mode (mask, SImode);
-
- operands[1] = force_reg (SImode, operands[1]);
- operands[3] = GEN_INT (mask);
- operands[4] = GEN_INT (~mask);
-
- if (CONST_INT_P (operands[2]))
- {
- HOST_WIDE_INT inserted_bits = INTVAL (operands[2]) & ~mask;
-
- if (inserted_bits == 0)
- {
- /* All inserted bits are zero. Use a bitwise AND. */
- emit_insn (gen_andsi3 (operands[0], operands[1], operands[3]));
- DONE;
- }
- else if (inserted_bits == ~mask)
- {
- /* All inserted bits are ones. Use a bitwise IOR if we can. */
- if (satisfies_constraint_I (operands[4]))
- {
- emit_insn (gen_iorsi3 (operands[0], operands[1], operands[4]));
- DONE;
- }
-
- /* Canonicalize to inserting -1 when setting all masked bits
- to 1, to facilitate CSE. */
- inserted_bits = -1;
- }
-
- /* Sign extend the inserted bits to make them easier to materialize
- in a register, but only if the inserted bits (~mask) do not already
- include the high bits. */
- if ((~mask & 0x80000000) == 0)
- {
- int shift = sizeof (HOST_WIDE_INT) * 8 - first;
- inserted_bits = (inserted_bits << shift) >> shift;
- }
-
- operands[2] = GEN_INT (inserted_bits);
- }
-
- operands[2] = force_reg (SImode, operands[2]);
-})
-
-(define_insn "insn_movelis"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec_volatile:SI [(match_operand:SI 1 "s16bit_cint_operand" "i")]
- UNSPEC_INSN_MOVELIS))]
- ""
- "movelis\t%0, %1"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_mtspr"
- [(unspec_volatile:SI [(match_operand:SI 0 "u15bit_cint_operand" "i")
- (match_operand:SI 1 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MTSPR)
- (clobber (mem:BLK (const_int 0)))]
- ""
- "mtspr\t%0, %r1"
- [(set_attr "type" "X1")])
-
-(define_expand "insn_prefetch"
- [(prefetch (match_operand:SI 0 "address_operand" "")
- (const_int 0)
- (const_int 2))])
-
-(define_expand "insn_prefetch_L1"
- [(use (match_operand:SI 0 "address_operand" ""))]
- ""
-{
- /* Generate a volatile byte load to a dummy register. */
- rtx mem = gen_rtx_MEM (QImode, operands[0]);
- MEM_VOLATILE_P (mem) = 1;
-
- emit_insn (gen_zero_extendqisi2 (gen_reg_rtx (SImode), mem));
- DONE;
-})
-
-(define_expand "insn_s1a"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "")
- (const_int 2))
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- "")
-
-(define_expand "insn_s2a"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "")
- (const_int 4))
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- "")
-
-(define_expand "insn_s3a"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "")
- (const_int 8))
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- "")
-
-(define_expand "insn_<store>"
- [(set (mem:I12MODE (match_operand:SI 0 "address_operand" ""))
- (match_operand:SI 1 "reg_or_0_operand" ""))]
- ""
-{
- operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], SImode, 0);
-})
-
-(define_expand "insn_sw"
- [(set (mem:SI (match_operand:SI 0 "address_operand" ""))
- (match_operand:SI 1 "reg_or_0_operand" ""))]
- "")
-
-(define_expand "insn_<store>add"
- [(parallel
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI (match_operand:SI 3 "register_operand" "")
- (match_operand:SI 2 "s8bit_cint_operand" "")))
- (set (mem:I12MODE (match_dup 3))
- (match_operand:SI 1 "reg_or_0_operand" ""))])]
- ""
-{
- operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], SImode, 0);
-})
-
-(define_insn "*insn_<store>add"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "0")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (mem:I12MODE (match_dup 3))
- (match_operand:I12MODE 1 "reg_or_0_operand" "rO"))]
- ""
- "<store>add\t%0, %r1, %2"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_swadd"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (plus:SI (match_operand:SI 3 "register_operand" "0")
- (match_operand:SI 2 "s8bit_cint_operand" "i")))
- (set (mem:SI (match_dup 3))
- (match_operand:SI 1 "reg_or_0_operand" "rO"))]
- ""
- "swadd\t%0, %r1, %2"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_wh64"
- [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_WH64)
- (clobber (mem:BLK (const_int 0)))]
- ""
- "wh64\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_tns"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mem:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))
- (set (mem:SI (match_dup 1)) (const_int 1))]
- ""
- "tns\t%0, %1"
- [(set_attr "type" "X1")])
-
-;; insn_addb
-;; insn_addib
-;; insn_maxb_u
-;; insn_maxib_u
-;; insn_minb_u
-;; insn_minib_u
-;; insn_seqb
-;; insn_seqib
-;; insn_sltb
-;; insn_sltib
-;; insn_sltb_u
-;; insn_sltib_u
-(define_insn "<optab>v4qi3"
- [(set (match_operand:V4QI 0 "register_operand" "=r,r")
- (v1op_immed:V4QI
- (match_operand:V4QI 1 "reg_or_0_operand" "<comm>rO,rO")
- (match_operand:V4QI 2 "reg_or_v4s8bit_operand" "W,rO")))]
- ""
- "@
- <insn>ib<u>\t%0, %r1, %j2
- <insn>b<u>\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_expand "insn_<insn>b<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (v1op_immed:V4QI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
- V4QImode, operands[1], operands[2], true);
- DONE;
-})
-
-(define_expand "insn_<insn>ib<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (v1op_immed:V4QI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "s8bit_cint_operand" "")))]
- ""
-{
- /* Tile out immediate and expand to general case. */
- rtx n = tilepro_simd_int (operands[2], QImode);
- tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
- V4QImode, operands[1], n, true);
- DONE;
-})
-
-;; insn_shlb
-;; insn_shlib
-;; insn_shrb
-;; insn_shrib
-;; insn_srab
-;; insn_sraib
-(define_insn "<optab>v4qi3"
- [(set (match_operand:V4QI 0 "register_operand" "=r,r")
- (any_shift:V4QI
- (match_operand:V4QI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- <insn>ib<u>\t%0, %r1, %2
- <insn>b<u>\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_expand "insn_<insn>b<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (any_shift:V4QI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_u5bit_operand" "")))]
- ""
-{
- tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
- V4QImode, operands[1], operands[2], false);
- DONE;
-})
-
-;; insn_addh
-;; insn_addih
-;; insn_maxh
-;; insn_maxih
-;; insn_minh
-;; insn_minih
-;; insn_seqh
-;; insn_seqih
-;; insn_slth
-;; insn_sltih
-;; insn_slth_u
-;; insn_sltih_u
-(define_insn "<optab>v2hi3"
- [(set (match_operand:V2HI 0 "register_operand" "=r,r")
- (v2op_immed:V2HI
- (match_operand:V2HI 1 "reg_or_0_operand" "<comm>rO,rO")
- (match_operand:V2HI 2 "reg_or_v2s8bit_operand" "Y,rO")))]
- ""
- "@
- <insn>ih<u>\t%0, %r1, %j2
- <insn>h<u>\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_expand "insn_<insn>h<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (v2op_immed:V2HI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
- V2HImode, operands[1], operands[2], true);
- DONE;
-})
-
-(define_expand "insn_<insn>ih<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (v2op_immed:V2HI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "s8bit_cint_operand" "")))]
- ""
-{
- /* Tile out immediate and expand to general case. */
- rtx n = tilepro_simd_int (operands[2], HImode);
- tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
- V2HImode, operands[1], n, true);
- DONE;
-})
-
-;; insn_shlh
-;; insn_shlih
-;; insn_shrh
-;; insn_shrih
-;; insn_srah
-;; insn_sraih
-(define_insn "<optab>v2hi3"
- [(set (match_operand:V2HI 0 "register_operand" "=r,r")
- (any_shift:V2HI
- (match_operand:V2HI 1 "reg_or_0_operand" "rO,rO")
- (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
- ""
- "@
- <insn>ih<u>\t%0, %r1, %2
- <insn>h<u>\t%0, %r1, %r2"
- [(set_attr "type" "X01,X01")])
-
-(define_expand "insn_<insn>h<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (any_shift:V2HI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
- V2HImode, operands[1], operands[2], false);
- DONE;
-})
-
-;; insn_addbs_u
-;; insn_subbs_u
-;; insn_subb
-;; insn_slteb
-;; insn_slteb_u
-;; insn_sneb
-(define_insn "<optab>v4qi3"
- [(set (match_operand:V4QI 0 "register_operand" "=r")
- (v1op:V4QI
- (match_operand:V4QI 1 "reg_or_0_operand" "<comm>rO")
- (match_operand:V4QI 2 "reg_or_0_operand" "rO")))]
- ""
- "<insn>b<u>\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_<insn>b<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (v1op:V4QI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
- V4QImode, operands[1], operands[2], true);
- DONE;
-})
-
-;; insn_addhs
-;; insn_subhs
-;; insn_subh
-;; insn_slteh
-;; insn_slteh_u
-;; insn_sneh
-(define_insn "<optab>v2hi3"
- [(set (match_operand:V2HI 0 "register_operand" "=r")
- (v2op:V2HI
- (match_operand:V2HI 1 "reg_or_0_operand" "<comm>rO")
- (match_operand:V2HI 2 "reg_or_0_operand" "rO")))]
- ""
- "<insn>h<u>\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_<insn>h<u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (v2op:V2HI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")))]
- ""
-{
- tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
- V2HImode, operands[1], operands[2], true);
- DONE;
-})
-
-;; insn_inthb
-
-;; Byte ordering of these vectors is endian dependent. We concat
-;; right-to-left for little endian. We concat and interleave in the
-;; opposite way gcc's vector patterns work, so we need to reverse the
-;; order of source operands.
-
-;; {B3,B2,B1,B0} {A3,A2,A1,A0}
-;; => {A3,A2,A1,A0,B3,B2,B1,B0}
-;; => {A3,B3,A2,B2}
-(define_insn "vec_interleave_highv4qi"
- [(set (match_operand:V4QI 0 "register_operand" "=r")
- (vec_select:V4QI
- (vec_concat:V8QI (match_operand:V4QI 1 "reg_or_0_operand" "rO")
- (match_operand:V4QI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 2) (const_int 6)
- (const_int 3) (const_int 7)])))]
- ""
- "inthb\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_inthb"
- [(match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")]
- ""
-{
- /* Our instruction interleaves opposite of the way vec_interleave
- works, so we need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_interleave_highv4qi, V4QImode,
- operands[0], V4QImode, operands[2],
- operands[1], true);
- DONE;
-})
-
-;; insn_intlb
-;; {B3,B2,B1,B0} {A3,A2,A1,A0}
-;; => {A3,A2,A1,A0,B3,B2,B1,B0}
-;; => {A1,B1,A0,B0}
-(define_insn "vec_interleave_lowv4qi"
- [(set (match_operand:V4QI 0 "register_operand" "=r")
- (vec_select:V4QI
- (vec_concat:V8QI (match_operand:V4QI 1 "reg_or_0_operand" "rO")
- (match_operand:V4QI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 4)
- (const_int 1) (const_int 5)])))]
- ""
- "intlb\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_intlb"
- [(match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")]
- ""
-{
- /* Our instruction interleaves opposite of the way vec_interleave
- works, so we need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_interleave_lowv4qi, V4QImode,
- operands[0], V4QImode, operands[2],
- operands[1], true);
- DONE;
-})
-
-;; insn_inthh
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-;; => {A1,B1}
-(define_insn "vec_interleave_highv2hi"
- [(set (match_operand:V2HI 0 "register_operand" "=r")
- (vec_select:V2HI
- (vec_concat:V4HI (match_operand:V2HI 1 "reg_or_0_operand" "rO")
- (match_operand:V2HI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 1) (const_int 3)])))]
- ""
- "inthh\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_inthh"
- [(match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")]
- ""
-{
- /* Our instruction interleaves opposite of the way vec_interleave
- works, so we need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_interleave_highv2hi, V2HImode,
- operands[0], V2HImode, operands[2],
- operands[1], true);
- DONE;
-})
-
-;; insn_intlh
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-;; => {A0,B0}
-(define_insn "vec_interleave_lowv2hi"
- [(set (match_operand:V2HI 0 "register_operand" "=r")
- (vec_select:V2HI
- (vec_concat:V4HI (match_operand:V2HI 1 "reg_or_0_operand" "rO")
- (match_operand:V2HI 2 "reg_or_0_operand" "rO"))
- (parallel [(const_int 0) (const_int 2)])))]
- ""
- "intlh\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_intlh"
- [(match_operand:SI 0 "register_operand" "")
- (match_operand:SI 1 "reg_or_0_operand" "")
- (match_operand:SI 2 "reg_or_0_operand" "")]
- ""
-{
- /* Our instruction interleaves opposite of the way vec_interleave
- works, so we need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_interleave_lowv2hi, V2HImode,
- operands[0], V2HImode, operands[2],
- operands[1], true);
- DONE;
-})
-
-;; insn_packbs_u
-;; insn_packlb
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-(define_insn "vec_pack_<pack_optab>_v2hi"
- [(set (match_operand:V4QI 0 "register_operand" "=r")
- (vec_concat:V4QI
- (v2pack:V2QI (match_operand:V2HI 1 "reg_or_0_operand" "rO"))
- (v2pack:V2QI (match_operand:V2HI 2 "reg_or_0_operand" "rO"))))]
- ""
- "<pack_insn>b<pack_u>\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_<pack_insn>b<pack_u>"
- [(set (match_operand:SI 0 "register_operand" "")
- (vec_concat:V4QI
- (v2pack:V2QI (match_operand:SI 1 "reg_or_0_operand" ""))
- (v2pack:V2QI (match_operand:SI 2 "reg_or_0_operand" ""))))]
- ""
-{
- /* Our instruction concats opposite of the way vec_pack works, so we
- need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_pack_<pack_optab>_v2hi,
- V4QImode, operands[0],
- V2HImode, operands[2], operands[1], true);
- DONE;
-})
-
-;; insn_packhb
-;; {B1,B0} {A1,A0}
-;; => {A1,A0,B1,B0}
-(define_insn "vec_pack_hipart_v2hi"
- [(set (match_operand:V4QI 0 "register_operand" "=r")
- (vec_concat:V4QI
- (truncate:V2QI
- (ashiftrt:V2HI (match_operand:V2HI 1 "reg_or_0_operand" "rO")
- (const_int 8)))
- (truncate:V2QI
- (ashiftrt:V2HI (match_operand:V2HI 2 "reg_or_0_operand" "rO")
- (const_int 8)))))]
- ""
- "packhb\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_packhb"
- [(set (match_operand:SI 0 "register_operand" "")
- (vec_concat:V4QI
- (truncate:V2QI
- (ashiftrt:V2HI (match_operand:SI 2 "reg_or_0_operand" "")
- (const_int 8)))
- (truncate:V2QI
- (ashiftrt:V2HI (match_operand:SI 1 "reg_or_0_operand" "")
- (const_int 8)))))]
- ""
-{
- /* Our instruction concats opposite of the way vec_pack works, so we
- need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_pack_hipart_v2hi,
- V4QImode, operands[0],
- V2HImode, operands[2], operands[1], true);
- DONE;
-})
-
-;; insn_packhs
-;; {B0} {A0}
-;; => {A0,B0}
-(define_insn "vec_pack_ssat_si"
- [(set (match_operand:V2HI 0 "register_operand" "=r")
- (vec_concat:V2HI
- (ss_truncate:HI (match_operand:SI 1 "reg_or_0_operand" "rO"))
- (ss_truncate:HI (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "packhs\t%0, %r2, %r1"
- [(set_attr "type" "X01")])
-
-(define_expand "insn_packhs"
- [(set (match_operand:SI 0 "register_operand" "")
- (vec_concat:V2HI
- (ss_truncate:HI (match_operand:SI 2 "reg_or_0_operand" ""))
- (ss_truncate:HI (match_operand:SI 1 "reg_or_0_operand" ""))))]
- ""
-{
- /* Our instruction concats opposite of the way vec_pack works, so we
- need to reverse the source operands. */
- tilepro_expand_builtin_vector_binop (gen_vec_pack_ssat_si,
- V2HImode, operands[0],
- SImode, operands[2], operands[1], true);
- DONE;
-})
-
-;; Rest of the intrinsics
-(define_insn "insn_adiffb_u"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_ADIFFB_U))]
- ""
- "adiffb_u\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_adiffh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_ADIFFH))]
- ""
- "adiffh\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_avgb_u"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_AVGB_U))]
- ""
- "avgb_u\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_avgh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_AVGH))]
- ""
- "avgh\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_bitx"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_BITX))]
- ""
- "bitx\t%0, %r1"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_crc32_32"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CRC32_32))]
- ""
- "crc32_32\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_crc32_8"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_CRC32_8))]
- ""
- "crc32_8\t%0, %r1, %r2"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_dtlbpr"
- [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_DTLBPR)]
- ""
- "dtlbpr\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_dword_align"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_DWORD_ALIGN))]
- ""
- "dword_align\t%0, %r2, %r3"
- [(set_attr "type" "X0")])
-
-(define_insn "insn_finv"
- [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FINV)]
- ""
- "finv\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_flush"
- [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_FLUSH)]
- ""
- "flush\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_fnop"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_FNOP)]
- ""
- "fnop")
-
-(define_insn "insn_ill"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_ILL)]
- ""
- "ill"
- [(set_attr "type" "cannot_bundle")])
-
-(define_insn "insn_inv"
- [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_INV)]
- ""
- "inv\t%r0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_lnk"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(const_int 0)] UNSPEC_INSN_LNK))]
- ""
- "lnk\t%0"
- [(set_attr "type" "X1")])
-
-(define_insn "insn_mnzb"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MNZB))]
- ""
- "mnzb\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_mnzh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MNZH))]
- ""
- "mnzh\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_mulhh_ss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHH_SS))]
- ""
- "mulhh_ss\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulhh_su"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHH_SU))]
- ""
- "mulhh_su\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhh_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHH_UU))]
- ""
- "mulhh_uu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulhha_ss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHHA_SS))]
- ""
- "mulhha_ss\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulhha_su"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHHA_SU))]
- ""
- "mulhha_su\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhha_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHHA_UU))]
- ""
- "mulhha_uu\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulhhsa_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHHSA_UU))]
- ""
- "mulhhsa_uu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhl_ss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHL_SS))]
- ""
- "mulhl_ss\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhl_su"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHL_SU))]
- ""
- "mulhl_su\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhl_us"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHL_US))]
- ""
- "mulhl_us\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhl_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHL_UU))]
- ""
- "mulhl_uu\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhla_ss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHLA_SS))]
- ""
- "mulhla_ss\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhla_su"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHLA_SU))]
- ""
- "mulhla_su\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhla_us"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHLA_US))]
- ""
- "mulhla_us\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhla_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHLA_UU))]
- ""
- "mulhla_uu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulhlsa_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULHLSA_UU))]
- ""
- "mulhlsa_uu\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulll_ss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLL_SS))]
- ""
- "mulll_ss\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulll_su"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLL_SU))]
- ""
- "mulll_su\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mulll_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLL_UU))]
- ""
- "mulll_uu\t%0, %r1, %r2"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mullla_ss"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLLA_SS))]
- ""
- "mullla_ss\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mullla_su"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLLA_SU))]
- ""
- "mullla_su\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mullla_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLLA_UU))]
- ""
- "mullla_uu\t%0, %r2, %r3"
- [(set_attr "type" "Y0_2cycle")])
-
-(define_insn "insn_mulllsa_uu"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MULLLSA_UU))]
- ""
- "mulllsa_uu\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_mzb"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MZB))]
- ""
- "mzb\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_mzh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_MZH))]
- ""
- "mzh\t%0, %r1, %r2"
- [(set_attr "type" "X01")])
-
-(define_insn "insn_nap"
- [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_NAP)]
- ""
- "nap"
- [(set_attr "type" "cannot_bundle")])
-
-(define_insn "insn_nor"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (and:SI (not:SI (match_operand:SI 1 "reg_or_0_operand" "rO"))
- (not:SI (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
- ""
- "nor\t%0, %r1, %r2")
-
-(define_insn "insn_sadab_u"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADAB_U))]
- ""
- "sadab_u\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_sadah"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADAH))]
- ""
- "sadah\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_sadah_u"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")
- (match_operand:SI 3 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADAH_U))]
- ""
- "sadah_u\t%0, %r2, %r3"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_sadb_u"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADB_U))]
- ""
- "sadb_u\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_sadh"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADH))]
- ""
- "sadh\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_sadh_u"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_SADH_U))]
- ""
- "sadh_u\t%0, %r1, %r2"
- [(set_attr "type" "X0_2cycle")])
-
-(define_insn "insn_tblidxb0"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB0))]
- ""
- "tblidxb0\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_tblidxb1"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB1))]
- ""
- "tblidxb1\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_tblidxb2"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB2))]
- ""
- "tblidxb2\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-(define_insn "insn_tblidxb3"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
- (match_operand:SI 2 "reg_or_0_operand" "rO")]
- UNSPEC_INSN_TBLIDXB3))]
- ""
- "tblidxb3\t%0, %r2"
- [(set_attr "type" "Y0")])
-
-
-;;
-;; pic related instructions
-;;
-
-;; NOTE: We compute the label in this unusual way because if we place
-;; the label after the lnk, whether it is at the same address as the
-;; lnk will vary depending on whether the optimization level chooses to
-;; insert bundling braces.
-(define_insn "insn_lnk_and_label"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec_volatile:SI [(match_operand:SI 1 "symbolic_operand" "")]
- UNSPEC_LNK_AND_LABEL))]
- ""
- "%1 = . + 8\n\tlnk\t%0"
- [(set_attr "type" "X1")])
-
-(define_expand "addli_pcrel"
- [(set (match_operand:SI 0 "register_operand" "")
- (lo_sum:SI
- (match_operand:SI 1 "register_operand" "")
- (const:SI
- (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")
- (match_operand:SI 3 "symbolic_operand" "")]
- UNSPEC_PCREL_SYM))))]
- "flag_pic")
-
-(define_expand "auli_pcrel"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (high:SI
- (const:SI
- (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")
- (match_operand:SI 3 "symbolic_operand" "")]
- UNSPEC_PCREL_SYM)))))]
- "flag_pic")
-
-(define_expand "add_got16"
- [(set (match_operand:SI 0 "register_operand" "")
- (lo_sum:SI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
- UNSPEC_GOT16_SYM))))]
- "flag_pic == 1")
-
-(define_expand "addhi_got32"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (high:SI
- (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
- UNSPEC_GOT32_SYM)))))]
- "flag_pic == 2")
-
-(define_expand "addlo_got32"
- [(set (match_operand:SI 0 "register_operand" "")
- (lo_sum:SI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
- UNSPEC_GOT32_SYM))))]
- "flag_pic == 2")
-
-
-;;
-;; TLS
-;;
-
-(define_expand "tls_gd_addhi"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (high:SI
- (const:SI (unspec:SI [(match_operand 2 "tls_symbolic_operand" "")]
- UNSPEC_TLS_GD)))))]
- "HAVE_AS_TLS")
-
-(define_expand "tls_gd_addlo"
- [(set (match_operand:SI 0 "register_operand" "")
- (lo_sum:SI
- (match_operand:SI 1 "reg_or_0_operand" "")
- (const:SI (unspec:SI [(match_operand 2 "tls_symbolic_operand" "")]
- UNSPEC_TLS_GD))))]
- "HAVE_AS_TLS")
-
-(define_expand "tls_gd_call"
- [(parallel
- [(set (reg:SI 0)
- (unspec:SI [(match_operand:SI 0 "tls_symbolic_operand" "")
- (reg:SI 0)]
- UNSPEC_TLS_GD_CALL))
- (clobber (reg:SI 25))
- (clobber (reg:SI 26))
- (clobber (reg:SI 27))
- (clobber (reg:SI 28))
- (clobber (reg:SI 29))
- (clobber (reg:SI 55))])]
- ""
-{
- cfun->machine->calls_tls_get_addr = true;
-})
-
-(define_insn "*tls_gd_call"
- [(set (reg:SI 0)
- (unspec:SI [(match_operand:SI 0 "tls_symbolic_operand" "")
- (reg:SI 0)]
- UNSPEC_TLS_GD_CALL))
- (clobber (reg:SI 25))
- (clobber (reg:SI 26))
- (clobber (reg:SI 27))
- (clobber (reg:SI 28))
- (clobber (reg:SI 29))
- (clobber (reg:SI 55))]
- ""
- "jal\ttls_gd_call(%0)"
- [(set_attr "type" "X1")])
-
-(define_insn "tls_gd_add"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "register_operand" "r")
- (match_operand:SI 2 "tls_symbolic_operand" "")]
- UNSPEC_TLS_GD_ADD))]
- "HAVE_AS_TLS"
- "addi\t%0, %1, tls_gd_add(%2)")
-
-(define_insn "tls_ie_load"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand:SI 1 "register_operand" "r")
- (match_operand:SI 2 "tls_symbolic_operand" "")]
- UNSPEC_TLS_IE_LOAD))]
- "HAVE_AS_TLS"
- "lw_tls\t%0, %1, tls_ie_load(%2)"
- [(set_attr "type" "X1_2cycle")])
-
-(define_expand "tls_ie_addhi"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI
- (match_operand:SI 1 "register_operand" "")
- (high:SI
- (const:SI (unspec:SI [(match_operand 2 "tls_ie_symbolic_operand" "")]
- UNSPEC_TLS_IE)))))]
- "HAVE_AS_TLS")
-
-(define_expand "tls_ie_addlo"
- [(set (match_operand:SI 0 "register_operand" "")
- (lo_sum:SI
- (match_operand:SI 1 "register_operand" "")
- (const:SI (unspec:SI [(match_operand 2 "tls_ie_symbolic_operand" "")]
- UNSPEC_TLS_IE))))]
- "HAVE_AS_TLS")
-
-(define_expand "tls_le_addhi"
- [(set (match_operand:SI 0 "register_operand" "")
- (plus:SI
- (match_operand:SI 1 "register_operand" "")
- (high:SI
- (const:SI (unspec:SI [(match_operand 2 "tls_le_symbolic_operand" "")]
- UNSPEC_TLS_LE)))))]
- "HAVE_AS_TLS")
-
-(define_expand "tls_le_addlo"
- [(set (match_operand:SI 0 "register_operand" "")
- (lo_sum:SI
- (match_operand:SI 1 "register_operand" "")
- (const:SI (unspec:SI [(match_operand 2 "tls_le_symbolic_operand" "")]
- UNSPEC_TLS_LE))))]
- "HAVE_AS_TLS")
-
-
-;;
-;; Stack protector instructions.
-;;
-
-(define_expand "stack_protect_set"
- [(set (match_operand 0 "nonautoincmem_operand" "")
- (match_operand 1 "nonautoincmem_operand" ""))]
- ""
-{
-#ifdef TARGET_THREAD_SSP_OFFSET
- rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
- rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
- rtx ssp = gen_reg_rtx (Pmode);
-
- emit_insn (gen_rtx_SET (ssp, ssp_addr));
-
- operands[1] = gen_rtx_MEM (Pmode, ssp);
-#endif
-
- emit_insn (gen_stack_protect_setsi (operands[0], operands[1]));
-
- DONE;
-})
-
-(define_insn "stack_protect_setsi"
- [(set (match_operand:SI 0 "nonautoincmem_operand" "=U")
- (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")]
- UNSPEC_SP_SET))
- (set (match_scratch:SI 2 "=&r") (const_int 0))]
- ""
- "lw\t%2, %1; { sw\t%0, %2; move\t%2, zero }"
- [(set_attr "length" "16")
- (set_attr "type" "cannot_bundle_3cycle")])
-
-
-(define_expand "stack_protect_test"
- [(match_operand 0 "nonautoincmem_operand" "")
- (match_operand 1 "nonautoincmem_operand" "")
- (match_operand 2 "" "")]
- ""
-{
- rtx compare_result;
- rtx bcomp, loc_ref;
-
-#ifdef TARGET_THREAD_SSP_OFFSET
- rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
- rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
- rtx ssp = gen_reg_rtx (Pmode);
-
- emit_insn (gen_rtx_SET (ssp, ssp_addr));
-
- operands[1] = gen_rtx_MEM (Pmode, ssp);
-#endif
-
- compare_result = gen_reg_rtx (SImode);
-
- emit_insn (gen_stack_protect_testsi (compare_result, operands[0],
- operands[1]));
-
- bcomp = gen_rtx_NE (SImode, compare_result, const0_rtx);
-
- loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[2]);
-
- emit_jump_insn (gen_rtx_SET (pc_rtx,
- gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
- loc_ref, pc_rtx)));
-
- DONE;
-})
-
-(define_insn "stack_protect_testsi"
- [(set (match_operand:SI 0 "register_operand" "=&r")
- (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")
- (match_operand:SI 2 "nonautoincmem_operand" "U")]
- UNSPEC_SP_TEST))
- (set (match_scratch:SI 3 "=&r") (const_int 0))]
- ""
- "lw\t%0, %1; lw\t%3, %2; { seq\t%0, %0, %3; move\t%3, zero }"
- [(set_attr "length" "24")
- (set_attr "type" "cannot_bundle_4cycle")])
-
diff --git a/gcc/config/tilepro/tilepro.opt b/gcc/config/tilepro/tilepro.opt
deleted file mode 100644
index 74ba0f3..0000000
--- a/gcc/config/tilepro/tilepro.opt
+++ /dev/null
@@ -1,36 +0,0 @@
-; Options for the TILEPro port of the compiler.
-; Copyright (C) 2011-2022 Free Software Foundation, Inc.
-; Contributed by Walter Lee (walt@tilera.com)
-;
-; 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/>.
-
-m32
-Target RejectNegative
-Compile with 32 bit longs and pointers, which is the only supported
-behavior and thus the flag is ignored.
-
-mcpu=
-Target RejectNegative Joined Enum(tilepro_cpu) Var(tilepro_cpu) Init(0)
--mcpu=CPU Use features of and schedule code for given CPU.
-
-Enum
-Name(tilepro_cpu) Type(int)
-Known TILEPro CPUs (for use with the -mcpu= option):
-
-EnumValue
-Enum(tilepro_cpu) String(tilepro) Value(0)
-
diff --git a/gcc/config/xtensa/constraints.md b/gcc/config/xtensa/constraints.md
index e7ac8db..0b7dcd1 100644
--- a/gcc/config/xtensa/constraints.md
+++ b/gcc/config/xtensa/constraints.md
@@ -113,8 +113,10 @@
(define_constraint "Y"
"A constant that can be used in relaxed MOVI instructions."
- (and (match_code "const_int,const_double,const,symbol_ref,label_ref")
- (match_test "TARGET_AUTO_LITPOOLS")))
+ (ior (and (match_code "const_int,const_double,const,symbol_ref,label_ref")
+ (match_test "TARGET_AUTO_LITPOOLS"))
+ (and (match_code "const_int")
+ (match_test "can_create_pseudo_p ()"))))
;; Memory constraints. Do not use define_memory_constraint here. Doing so
;; causes reload to force some constants into the constant pool, but since
diff --git a/gcc/config/xtensa/predicates.md b/gcc/config/xtensa/predicates.md
index edd13ae..0590c0f 100644
--- a/gcc/config/xtensa/predicates.md
+++ b/gcc/config/xtensa/predicates.md
@@ -147,8 +147,9 @@
(match_test "!constantpool_mem_p (op)
|| GET_MODE_SIZE (mode) % UNITS_PER_WORD == 0")))
(ior (and (match_code "const_int")
- (match_test "GET_MODE_CLASS (mode) == MODE_INT
- && xtensa_simm12b (INTVAL (op))"))
+ (match_test "(GET_MODE_CLASS (mode) == MODE_INT
+ && xtensa_simm12b (INTVAL (op)))
+ || can_create_pseudo_p ()"))
(and (match_code "const_int,const_double,const,symbol_ref,label_ref")
(match_test "(TARGET_CONST16 || TARGET_AUTO_LITPOOLS)
&& CONSTANT_P (op)
diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc
index d6f08b1..13f2b2b 100644
--- a/gcc/config/xtensa/xtensa.cc
+++ b/gcc/config/xtensa/xtensa.cc
@@ -752,7 +752,7 @@ gen_int_relational (enum rtx_code test_code, /* relational test (EQ, etc) */
}
/* See if we need to invert the result. */
- invert = ((GET_CODE (cmp1) == CONST_INT)
+ invert = (CONST_INT_P (cmp1)
? p_info->invert_const
: p_info->invert_reg);
@@ -1182,7 +1182,8 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode mode)
return 1;
}
- if (! TARGET_AUTO_LITPOOLS && ! TARGET_CONST16)
+ if (! TARGET_AUTO_LITPOOLS && ! TARGET_CONST16
+ && ! (CONST_INT_P (src) && can_create_pseudo_p ()))
{
src = force_const_mem (SImode, src);
operands[1] = src;
@@ -1208,7 +1209,7 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode mode)
}
}
- if (!(reload_in_progress | reload_completed)
+ if (can_create_pseudo_p ()
&& !xtensa_valid_move (mode, operands))
operands[1] = force_reg (mode, operands[1]);
@@ -1611,7 +1612,7 @@ xtensa_expand_block_set_small_loop (rtx *operands)
thus limited to only offset to the end address for ADDI/ADDMI
instruction. */
if (align == 4
- && ! (bytes <= 127 || (bytes <= 32512 && bytes % 256 == 0)))
+ && ! (bytes <= 127 || xtensa_simm8x256 (bytes)))
return 0;
/* If no 4-byte aligned, loop count should be treated as the
@@ -2168,7 +2169,7 @@ xtensa_emit_sibcall (int callop, rtx *operands)
static char result[64];
rtx tgt = operands[callop];
- if (GET_CODE (tgt) == CONST_INT)
+ if (CONST_INT_P (tgt))
sprintf (result, "j.l\t" HOST_WIDE_INT_PRINT_HEX ", a9",
INTVAL (tgt));
else if (register_operand (tgt, VOIDmode))
@@ -4281,21 +4282,27 @@ xtensa_rtx_costs (rtx x, machine_mode mode, int outer_code,
}
static bool
-xtensa_is_insn_L32R_p(const rtx_insn *insn)
+xtensa_is_insn_L32R_p (const rtx_insn *insn)
{
rtx x = PATTERN (insn);
- if (GET_CODE (x) == SET)
+ if (GET_CODE (x) != SET)
+ return false;
+
+ x = XEXP (x, 1);
+ if (MEM_P (x))
{
- x = XEXP (x, 1);
- if (GET_CODE (x) == MEM)
- {
- x = XEXP (x, 0);
- return (GET_CODE (x) == SYMBOL_REF || CONST_INT_P (x))
- && CONSTANT_POOL_ADDRESS_P (x);
- }
+ x = XEXP (x, 0);
+ return (SYMBOL_REF_P (x) || CONST_INT_P (x))
+ && CONSTANT_POOL_ADDRESS_P (x);
}
+ /* relaxed MOVI instructions, that will be converted to L32R by the
+ assembler. */
+ if (CONST_INT_P (x)
+ && ! xtensa_simm12b (INTVAL (x)))
+ return true;
+
return false;
}
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index ef6bbc4..9d99858 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -536,7 +536,7 @@
{
rtx_insn *prev_insn = prev_nonnote_nondebug_insn (insn);
const char *init = "ssai\t8\;";
- static char result[64];
+ static char result[128];
if (prev_insn && NONJUMP_INSN_P (prev_insn))
{
rtx x = PATTERN (prev_insn);
@@ -1033,6 +1033,7 @@
FAIL;
if (! xtensa_constantsynth (operands[0], INTVAL (x)))
emit_move_insn (operands[0], x);
+ DONE;
})
;; 16-bit Integer moves
@@ -1246,14 +1247,14 @@
int i = 0;
rtx x = XEXP (operands[1], 0);
long l[2];
- if (GET_CODE (x) == SYMBOL_REF
+ if (SYMBOL_REF_P (x)
&& CONSTANT_POOL_ADDRESS_P (x))
x = get_pool_constant (x);
else if (GET_CODE (x) == CONST)
{
x = XEXP (x, 0);
gcc_assert (GET_CODE (x) == PLUS
- && GET_CODE (XEXP (x, 0)) == SYMBOL_REF
+ && SYMBOL_REF_P (XEXP (x, 0))
&& CONSTANT_POOL_ADDRESS_P (XEXP (x, 0))
&& CONST_INT_P (XEXP (x, 1)));
i = INTVAL (XEXP (x, 1));
@@ -1272,6 +1273,7 @@
x = gen_rtx_REG (SImode, REGNO (operands[0]));
if (! xtensa_constantsynth (x, l[i]))
emit_move_insn (x, GEN_INT (l[i]));
+ DONE;
})
;; 64-bit floating point moves
@@ -2212,7 +2214,7 @@
(match_operand 1 ""))]
"reload_completed
&& !TARGET_WINDOWED_ABI && SIBLING_CALL_P (insn)
- && IN_RANGE (REGNO (operands[0]), 12, 15)"
+ && ! call_used_or_fixed_reg_p (REGNO (operands[0]))"
[(set (reg:SI A10_REG)
(match_dup 0))
(call (mem:SI (reg:SI A10_REG))
@@ -2245,7 +2247,7 @@
(match_operand 2 "")))]
"reload_completed
&& !TARGET_WINDOWED_ABI && SIBLING_CALL_P (insn)
- && IN_RANGE (REGNO (operands[1]), 12, 15)"
+ && ! call_used_or_fixed_reg_p (REGNO (operands[1]))"
[(set (reg:SI A10_REG)
(match_dup 1))
(set (match_dup 0)
@@ -2808,3 +2810,36 @@
&& REGNO (x) == regno + REG_NREGS (operands[0]) / 2))
FAIL;
})
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (match_operand:SI 1 "const_int_operand"))
+ (set (match_dup 0)
+ (plus:SI (match_dup 0)
+ (match_operand:SI 2 "const_int_operand")))
+ (set (match_operand:SI 3 "register_operand")
+ (plus:SI (match_operand:SI 4 "register_operand")
+ (match_dup 0)))]
+ "IN_RANGE (INTVAL (operands[1]) + INTVAL (operands[2]),
+ (-128 - 32768), (127 + 32512))
+ && REGNO (operands[0]) != REGNO (operands[3])
+ && REGNO (operands[0]) != REGNO (operands[4])
+ && peep2_reg_dead_p (3, operands[0])"
+ [(set (match_dup 3)
+ (plus:SI (match_dup 4)
+ (match_dup 1)))
+ (set (match_dup 3)
+ (plus:SI (match_dup 3)
+ (match_dup 2)))]
+{
+ HOST_WIDE_INT value = INTVAL (operands[1]) + INTVAL (operands[2]);
+ int imm0, imm1;
+ value += 128;
+ if (value > 32512)
+ imm1 = 32512;
+ else
+ imm1 = value & ~255;
+ imm0 = value - imm1 - 128;
+ operands[1] = GEN_INT (imm0);
+ operands[2] = GEN_INT (imm1);
+})
diff --git a/gcc/configure b/gcc/configure
index f43dc98..62872d1 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -25804,33 +25804,6 @@ foo: .long 25
xor %l1, %tle_lox10(foo), %o5
ld [%g7 + %o5], %o1"
;;
- tilepro*-*-*)
- conftest_s='
- .section ".tdata","awT",@progbits
-foo: .long 25
- .text
- addli r0, zero, tls_gd(foo)
- auli r0, zero, tls_gd_ha16(foo)
- addli r0, r0, tls_gd_lo16(foo)
- jal __tls_get_addr
- addli r0, zero, tls_ie(foo)
- auli r0, r0, tls_ie_ha16(foo)
- addli r0, r0, tls_ie_lo16(foo)'
- tls_as_opt="--fatal-warnings"
- ;;
- tilegx*-*-*)
- conftest_s='
- .section ".tdata","awT",@progbits
-foo: .long 25
- .text
- shl16insli r0, zero, hw0_last_tls_gd(foo)
- shl16insli r0, zero, hw1_last_tls_gd(foo)
- shl16insli r0, r0, hw0_tls_gd(foo)
- jal __tls_get_addr
- shl16insli r0, zero, hw1_last_tls_ie(foo)
- shl16insli r0, r0, hw0_tls_ie(foo)'
- tls_as_opt="--fatal-warnings"
- ;;
xtensa*-*-*)
conftest_s='
.section ".tdata","awT",@progbits
@@ -29086,7 +29059,7 @@ esac
case "$cpu_type" in
aarch64 | alpha | arc | arm | avr | bfin | cris | csky | i386 | loongarch | m32c \
| m68k | microblaze | mips | nds32 | nios2 | pa | riscv | rs6000 | score | sparc \
- | tilegx | tilepro | visium | xstormy16 | xtensa)
+ | visium | xstormy16 | xtensa)
insn="nop"
;;
ia64 | s390)
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 80bdd8c..4467473 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -4082,33 +4082,6 @@ foo: .long 25
xor %l1, %tle_lox10(foo), %o5
ld [%g7 + %o5], %o1"
;;
- tilepro*-*-*)
- conftest_s='
- .section ".tdata","awT",@progbits
-foo: .long 25
- .text
- addli r0, zero, tls_gd(foo)
- auli r0, zero, tls_gd_ha16(foo)
- addli r0, r0, tls_gd_lo16(foo)
- jal __tls_get_addr
- addli r0, zero, tls_ie(foo)
- auli r0, r0, tls_ie_ha16(foo)
- addli r0, r0, tls_ie_lo16(foo)'
- tls_as_opt="--fatal-warnings"
- ;;
- tilegx*-*-*)
- conftest_s='
- .section ".tdata","awT",@progbits
-foo: .long 25
- .text
- shl16insli r0, zero, hw0_last_tls_gd(foo)
- shl16insli r0, zero, hw1_last_tls_gd(foo)
- shl16insli r0, r0, hw0_tls_gd(foo)
- jal __tls_get_addr
- shl16insli r0, zero, hw1_last_tls_ie(foo)
- shl16insli r0, r0, hw0_tls_ie(foo)'
- tls_as_opt="--fatal-warnings"
- ;;
xtensa*-*-*)
conftest_s='
.section ".tdata","awT",@progbits
@@ -5419,7 +5392,7 @@ esac
case "$cpu_type" in
aarch64 | alpha | arc | arm | avr | bfin | cris | csky | i386 | loongarch | m32c \
| m68k | microblaze | mips | nds32 | nios2 | pa | riscv | rs6000 | score | sparc \
- | tilegx | tilepro | visium | xstormy16 | xtensa)
+ | visium | xstormy16 | xtensa)
insn="nop"
;;
ia64 | s390)
diff --git a/gcc/coroutine-passes.cc b/gcc/coroutine-passes.cc
index 7b9a97a..21ac946 100644
--- a/gcc/coroutine-passes.cc
+++ b/gcc/coroutine-passes.cc
@@ -213,9 +213,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_coroutines; };
+ bool gate (function *) final override { return flag_coroutines; };
- virtual unsigned int execute (function *f ATTRIBUTE_UNUSED)
+ unsigned int execute (function *f ATTRIBUTE_UNUSED) final override
{
return execute_lower_coro_builtins ();
}
@@ -511,12 +511,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *f)
+ bool gate (function *f) final override
{
return flag_coroutines && f->coroutine_component;
}
- virtual unsigned int execute (function *f ATTRIBUTE_UNUSED)
+ unsigned int execute (function *f ATTRIBUTE_UNUSED) final override
{
return execute_early_expand_coro_ifns ();
}
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 658525d..ad72c03 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,260 @@
+2022-07-07 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/105956
+ * pt.cc (template_arg_to_parm): Define.
+ (tsubst_argument_pack): Try to reuse the corresponding
+ ARGUMENT_PACK from 'args' when substituting into a generic
+ ARGUMENT_PACK for a variadic template parameter.
+ (tsubst_template_args): Move variable declarations closer to
+ their first use. Replace 'orig_t' with 'r'. Rename 'need_new'
+ to 'const_subst_p'. Heuristically detect if the substituted
+ elements are identical to that of a level from 'args' and avoid
+ allocating a new TREE_VEC if so. Add sanity check for the
+ length of the new TREE_VEC, and remove dead ARGUMENT_PACK_P test.
+ (tsubst_decl) <case TYPE_DECL, case VAR_DECL>: Revert
+ r13-1045-gcb7fd1ea85feea change for avoiding substitution into
+ DECL_TI_ARGS, but still avoid coercion in this case.
+
+2022-07-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/87729
+ * class.cc (warn_hidden): Ignore [cd]tors.
+
+2022-07-06 Lewis Hyatt <lhyatt@gmail.com>
+
+ PR c++/53431
+ * parser.cc (cp_parser_pragma_kind): Move earlier in the file.
+ (cp_lexer_handle_early_pragma): New function.
+ (cp_lexer_new_main): Support parsing and handling early pragmas.
+ (c_parse_file): Adapt to changes in cp_lexer_new_main.
+
+2022-07-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/106179
+ PR c++/106024
+ * parser.cc (cp_parser_lookup_name): Remove :: requirement
+ for using unqualified lookup result.
+
+2022-07-05 Nathan Sidwell <nathan@acm.org>
+
+ * module.cc
+ (struct ord_loc_info, ord_loc_traits): New.
+ (ord_loc_tabke, ord_loc_remap): New globals.
+ (struct location_map_info): Delete.
+ (struct module_state_config): Rename ordinary_loc_align to
+ loc_range_bits.
+ (module_for_ordinary_loc): Adjust.
+ (module_state::note_location): Note ordinary locations,
+ return bool.
+ (module_state::write_location): Adjust ordinary location
+ streaming.
+ (module_state::read_location): Likewise.
+ (module_state::write_init_maps): Allocate ord_loc_table.
+ (module_state::write_prepare_maps): Reimplement ordinary
+ map preparation.
+ (module_state::read_prepare_maps): Adjust.
+ (module_state::write_ordinary_maps): Reimplement.
+ (module_state::write_macro_maps): Adjust.
+ (module_state::read_ordinary_maps): Reimplement.
+ (module_state::write_macros): Adjust.
+ (module_state::write_config): Adjust.
+ (module_state::read_config): Adjust.
+ (module_state::write_begin): Adjust.
+ (module_state::read_initial): Adjust.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * parser.cc (cp_parser_omp_target_data,
+ cp_parser_omp_target_enter_data, cp_parser_omp_target_exit_data,
+ cp_parser_omp_target_update): Set OMP_REQUIRES_TARGET_USED.
+ (cp_parser_omp_requires): Remove sorry.
+
+2022-07-01 Lewis Hyatt <lhyatt@gmail.com>
+
+ * parser.cc (cp_token_is_module_directive): New function
+ refactoring common code.
+ (cp_parser_skip_to_closing_parenthesis_1): Use the new function.
+ (cp_parser_skip_to_end_of_statement): Likewise.
+ (cp_parser_skip_to_end_of_block_or_statement): Likewise.
+ (cp_parser_declaration): Likewise.
+
+2022-07-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/105550
+ * constexpr.cc (cxx_eval_conditional_expression): Strip TARGET_EXPRs.
+
+2022-07-01 Tobias Burnus <tobias@codesourcery.com>
+
+ * parser.cc (cp_parser_omp_target_enter_data,
+ cp_parser_omp_target_exit_data): Accept tofrom
+ map-type modifier but use 'to' / 'from' internally.
+
+2022-07-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/106111
+ * parser.cc (cp_lexer_get_preprocessor_token): Also warn about
+ RID_ALIGNOF, RID_ALIGNAS, RID_THREAD.
+
+2022-07-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/105779
+ * call.cc (resolve_args): Use complain.
+
+2022-07-01 Jason Merrill <jason@redhat.com>
+
+ * parser.cc (missing_template_diag): Split out...
+ (cp_parser_id_expression): ...from here.
+
+2022-07-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/106024
+ * parser.cc (missing_template_diag): Factor out...
+ (cp_parser_id_expression): ...from here.
+ (cp_parser_lookup_name): Don't look in dependent object_type.
+
+2022-06-30 Nathan Sidwell <nathan@acm.org>
+
+ * module.cc (module_state::write_define): Drop located param.
+ (module_state::read_define): Likewise.
+ (module_state::prepare_macros): New, broken out of ...
+ (module_state::write_macros): ... here. Adjust.
+ (module_state::write_begin): Adjust.
+
+2022-06-29 Nathan Sidwell <nathan@acm.org>
+
+ * module.cc (macro_info, macro_traits, macro_table,
+ macro_remap): Rename to ...
+ (macro_loc_info, macro_loc_traits, macro_loc_table,
+ macro_loc_remap): ... these. Update all uses.
+ (module_state::write_prepare_maps): Remove unneeded macro checking.
+ (module_state::write_begin): Free macro_loc_remap.
+
+2022-06-27 Sergei Trofimovich <siarheit@google.com>
+
+ PR c++/106102
+ * mapper-client.cc: Include <memory> via "system.h".
+ * mapper-resolver.cc: Ditto.
+ * module.cc: Ditto.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * cxx-pretty-print.h: Add "final" and "override" to various vfunc
+ implementations, removing redundant "virtual" as appropriate.
+ * module.cc: Likewise.
+
+2022-06-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/87729
+ PR c++/20423
+ * class.cc (warn_hidden): Handle -Woverloaded-virtual=1.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * g++spec.cc (lang_specific_driver): Implement -nostdlib++.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105925
+ * call.cc (build_aggr_conv): Don't depend on
+ CONSTRUCTOR_IS_DESIGNATED_INIT.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105925
+ * decl.cc (reshape_init_array_1): Set
+ CONSTRUCTOR_IS_DESIGNATED_INIT here.
+ (reshape_init_class): And here.
+ (reshape_init): Not here.
+
+2022-06-23 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/105931
+ * expr.cc (fold_for_warn): Don't fold when in an unevaluated
+ context.
+
+2022-06-23 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/105982
+ * pt.cc (lookup_template_class): After calling complete_type for
+ the substituted context, check the table again iff the type was
+ previously incomplete and complete_type made it complete.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/94554
+ * pt.cc (dependent_operand_p): Split out from...
+ (tsubst_copy_and_build): ...here.
+ (tsubst_expr) [IF_STMT]: Use it.
+ * semantics.cc (finish_if_stmt_cond): Keep the pre-conversion
+ condition in the template tree.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105885
+ * pt.cc (tsubst_copy_and_build): Also suppress -Waddress for
+ comparison of dependent operands.
+
+2022-06-23 Nathan Sidwell <nathan@acm.org>
+
+ * module.cc (struct macro_info): New.
+ (struct macro_traits): New.
+ (macro_remap, macro_table): New globals.
+ (depset::hash::find_dependencies): Note namespace location.
+ (module_for_macro_loc): Adjust.
+ (module_state::note_location): New.
+ (module_state::Write_location): Note location when not
+ streaming. Adjust macro location streaming.
+ (module_state::read_location): Adjust macro location
+ streaming.
+ (module_state::write_init_maps): New.
+ (module_state::write_prepare_maps): Reimplement macro map
+ preparation.
+ (module_state::write_macro_maps): Reimplement.
+ (module_state::read_macro_maps): Likewise.
+ (module_state::write_begin): Adjust.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ * pt.cc (type_unification_real): An auto tparm can't
+ be affected by other deductions.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105964
+ * pt.cc (type_dependent_expression_p): Look through BASELINK.
+
+2022-06-22 Jason Merrill <jason@redhat.com>
+
+ PR c++/105908
+ * name-lookup.cc (outer_binding): Strip BASELINK.
+
+2022-06-22 Nathan Sidwell <nathan@acm.org>
+
+ * module.cc (struct duplicate_hash): Remove.
+ (duplicate_hash_map): Adjust.
+
+2022-06-22 Jason Merrill <jason@redhat.com>
+
+ PR c++/104642
+ * constexpr.cc (cxx_eval_builtin_function_call): Handle
+ unreachable/trap earlier.
+ * cp-gimplify.cc (cp_maybe_instrument_return): Use
+ build_builtin_unreachable.
+
+2022-06-18 Jakub Jelinek <jakub@redhat.com>
+
+ * cp-ubsan.cc (cp_ubsan_instrument_vptr_p): Use
+ flag_sanitize_trap & SANITIZE_VPTR instead of
+ flag_sanitize_undefined_trap_on_error.
+
+2022-06-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/106001
+ * typeck.cc (build_x_shufflevector): Use fold_non_dependent_expr
+ instead of maybe_constant_value.
+
2022-06-16 Nathan Sidwell <nathan@acm.org>
* decl2.cc (finish_objects): Add startp parameter, adjust.
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
index 4710c37..fc98552 100644
--- a/gcc/cp/call.cc
+++ b/gcc/cp/call.cc
@@ -969,7 +969,8 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
tree empty_ctor = NULL_TREE;
hash_set<tree, true> pset;
- /* We already called reshape_init in implicit_conversion. */
+ /* We already called reshape_init in implicit_conversion, but it might not
+ have done anything in the case of parenthesized aggr init. */
/* The conversions within the init-list aren't affected by the enclosing
context; they're always simple copy-initialization. */
@@ -979,49 +980,48 @@ build_aggr_conv (tree type, tree ctor, int flags, tsubst_flags_t complain)
to corresponding TREE_TYPE (ce->index) and mark those FIELD_DECLs as
visited. In the following loop then ignore already visited
FIELD_DECLs. */
- if (CONSTRUCTOR_IS_DESIGNATED_INIT (ctor))
+ tree idx, val;
+ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (ctor), i, idx, val)
{
- tree idx, val;
- FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (ctor), i, idx, val)
- {
- if (idx && TREE_CODE (idx) == FIELD_DECL)
- {
- tree ftype = TREE_TYPE (idx);
- bool ok;
+ if (!idx)
+ break;
- if (TREE_CODE (ftype) == ARRAY_TYPE)
- ok = can_convert_array (ftype, val, flags, complain);
- else
- ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
- complain);
+ gcc_checking_assert (TREE_CODE (idx) == FIELD_DECL);
- if (!ok)
- return NULL;
- /* For unions, there should be just one initializer. */
- if (TREE_CODE (type) == UNION_TYPE)
- {
- field = NULL_TREE;
- i = 1;
- break;
- }
- pset.add (idx);
- }
- else
- return NULL;
+ tree ftype = TREE_TYPE (idx);
+ bool ok;
+
+ if (TREE_CODE (ftype) == ARRAY_TYPE)
+ ok = can_convert_array (ftype, val, flags, complain);
+ else
+ ok = can_convert_arg (ftype, TREE_TYPE (val), val, flags,
+ complain);
+
+ if (!ok)
+ return NULL;
+
+ /* For unions, there should be just one initializer. */
+ if (TREE_CODE (type) == UNION_TYPE)
+ {
+ field = NULL_TREE;
+ i = 1;
+ break;
}
+ pset.add (idx);
}
for (; field; field = next_aggregate_field (DECL_CHAIN (field)))
{
tree ftype = TREE_TYPE (field);
- tree val;
bool ok;
if (!pset.is_empty () && field_in_pset (pset, field))
continue;
if (i < CONSTRUCTOR_NELTS (ctor))
{
- val = CONSTRUCTOR_ELT (ctor, i)->value;
+ constructor_elt *ce = CONSTRUCTOR_ELT (ctor, i);
+ gcc_checking_assert (!ce->index);
+ val = ce->value;
++i;
}
else if (DECL_INITIAL (field))
@@ -4675,7 +4675,7 @@ resolve_args (vec<tree, va_gc> *args, tsubst_flags_t complain)
/* Force auto deduction now. Omit tf_warning to avoid redundant
deprecated warning on deprecated-14.C. */
- if (!mark_single_function (arg, tf_error))
+ if (!mark_single_function (arg, complain & ~tf_warning))
return NULL;
}
return args;
diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc
index 3c195b3..eb69e7f 100644
--- a/gcc/cp/class.cc
+++ b/gcc/cp/class.cc
@@ -3020,6 +3020,9 @@ warn_hidden (tree t)
tree binfo;
unsigned j;
+ if (IDENTIFIER_CDTOR_P (name))
+ continue;
+
/* Iterate through all of the base classes looking for possibly
hidden functions. */
for (binfo = TYPE_BINFO (t), j = 0;
@@ -3034,6 +3037,7 @@ warn_hidden (tree t)
continue;
/* Remove any overridden functions. */
+ bool seen_non_override = false;
for (tree fndecl : ovl_range (fns))
{
if (TREE_CODE (fndecl) == FUNCTION_DECL
@@ -3045,20 +3049,28 @@ warn_hidden (tree t)
for (size_t k = 0; k < base_fndecls.length (); k++)
if (base_fndecls[k]
&& same_signature_p (fndecl, base_fndecls[k]))
- base_fndecls[k] = NULL_TREE;
+ {
+ base_fndecls[k] = NULL_TREE;
+ goto next;
+ }
}
+ seen_non_override = true;
+ next:;
}
+ if (!seen_non_override && warn_overloaded_virtual == 1)
+ /* All the derived fns override base virtuals. */
+ return;
+
/* Now give a warning for all base functions without overriders,
as they are hidden. */
- tree base_fndecl;
- FOR_EACH_VEC_ELT (base_fndecls, j, base_fndecl)
+ for (tree base_fndecl : base_fndecls)
if (base_fndecl)
{
auto_diagnostic_group d;
/* Here we know it is a hider, and no overrider exists. */
if (warning_at (location_of (base_fndecl),
- OPT_Woverloaded_virtual,
+ OPT_Woverloaded_virtual_,
"%qD was hidden", base_fndecl))
inform (location_of (fns), " by %qD", fns);
}
diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index fd7f8c0..5f7fc6f 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -1438,6 +1438,20 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
/* These builtins shall be ignored during constant expression
evaluation. */
return void_node;
+ case BUILT_IN_UNREACHABLE:
+ case BUILT_IN_TRAP:
+ if (!*non_constant_p && !ctx->quiet)
+ {
+ /* Do not allow__builtin_unreachable in constexpr function.
+ The __builtin_unreachable call with BUILTINS_LOCATION
+ comes from cp_maybe_instrument_return. */
+ if (EXPR_LOCATION (t) == BUILTINS_LOCATION)
+ error ("%<constexpr%> call flows off the end of the function");
+ else
+ error ("%q+E is not a constant expression", t);
+ }
+ *non_constant_p = true;
+ return t;
default:
break;
}
@@ -1531,18 +1545,9 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
{
if (!*non_constant_p && !ctx->quiet)
{
- /* Do not allow__builtin_unreachable in constexpr function.
- The __builtin_unreachable call with BUILTINS_LOCATION
- comes from cp_maybe_instrument_return. */
- if (fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE)
- && EXPR_LOCATION (t) == BUILTINS_LOCATION)
- error ("%<constexpr%> call flows off the end of the function");
- else
- {
- new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
- CALL_EXPR_FN (t), nargs, args);
- error ("%q+E is not a constant expression", new_call);
- }
+ new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
+ CALL_EXPR_FN (t), nargs, args);
+ error ("%q+E is not a constant expression", new_call);
}
*non_constant_p = true;
return t;
@@ -3502,6 +3507,13 @@ cxx_eval_conditional_expression (const constexpr_ctx *ctx, tree t,
val = TREE_OPERAND (t, 1);
if (TREE_CODE (t) == IF_STMT && !val)
val = void_node;
+ /* A TARGET_EXPR may be nested inside another TARGET_EXPR, but still
+ serve as the initializer for the same object as the outer TARGET_EXPR,
+ as in
+ A a = true ? A{} : A{};
+ so strip the inner TARGET_EXPR so we don't materialize a temporary. */
+ if (TREE_CODE (val) == TARGET_EXPR)
+ val = TARGET_EXPR_INITIAL (val);
return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
overflow_p, jump_target);
}
diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc
index 6f84d15..c05be83 100644
--- a/gcc/cp/cp-gimplify.cc
+++ b/gcc/cp/cp-gimplify.cc
@@ -1814,7 +1814,7 @@ cp_maybe_instrument_return (tree fndecl)
information is provided, while the __builtin_unreachable () below
if return sanitization is disabled will just result in hard to
understand runtime error without location. */
- && (!optimize
+ && ((!optimize && !flag_unreachable_traps)
|| sanitize_flags_p (SANITIZE_UNREACHABLE, fndecl)))
return;
@@ -1864,10 +1864,7 @@ cp_maybe_instrument_return (tree fndecl)
if (sanitize_flags_p (SANITIZE_RETURN, fndecl))
t = ubsan_instrument_return (loc);
else
- {
- tree fndecl = builtin_decl_explicit (BUILT_IN_UNREACHABLE);
- t = build_call_expr_loc (BUILTINS_LOCATION, fndecl, 0);
- }
+ t = build_builtin_unreachable (BUILTINS_LOCATION);
append_to_statement_list (t, p);
}
diff --git a/gcc/cp/cp-ubsan.cc b/gcc/cp/cp-ubsan.cc
index 2532521..edad2bd 100644
--- a/gcc/cp/cp-ubsan.cc
+++ b/gcc/cp/cp-ubsan.cc
@@ -32,7 +32,7 @@ along with GCC; see the file COPYING3. If not see
static bool
cp_ubsan_instrument_vptr_p (tree type)
{
- if (!flag_rtti || flag_sanitize_undefined_trap_on_error)
+ if (!flag_rtti || (flag_sanitize_trap & SANITIZE_VPTR))
return false;
if (!sanitize_flags_p (SANITIZE_VPTR))
diff --git a/gcc/cp/cxx-pretty-print.h b/gcc/cp/cxx-pretty-print.h
index 5080f70..593bd91 100644
--- a/gcc/cp/cxx-pretty-print.h
+++ b/gcc/cp/cxx-pretty-print.h
@@ -36,25 +36,25 @@ public:
pretty_printer *clone () const override;
- void constant (tree);
- void id_expression (tree);
- void primary_expression (tree);
- void postfix_expression (tree);
- void unary_expression (tree);
- void multiplicative_expression (tree);
- void conditional_expression (tree);
- void assignment_expression (tree);
- void expression (tree);
- void type_id (tree);
- void statement (tree);
- void declaration (tree);
- void declaration_specifiers (tree);
- void simple_type_specifier (tree);
- void function_specifier (tree);
- void declarator (tree);
- void direct_declarator (tree);
- void abstract_declarator (tree);
- void direct_abstract_declarator (tree);
+ void constant (tree) final override;
+ void id_expression (tree) final override;
+ void primary_expression (tree) final override;
+ void postfix_expression (tree) final override;
+ void unary_expression (tree) final override;
+ void multiplicative_expression (tree) final override;
+ void conditional_expression (tree) final override;
+ void assignment_expression (tree) final override;
+ void expression (tree) final override;
+ void type_id (tree) final override;
+ void statement (tree) final override;
+ void declaration (tree) final override;
+ void declaration_specifiers (tree) final override;
+ void simple_type_specifier (tree) final override;
+ void function_specifier (tree) final override;
+ void declarator (tree) final override;
+ void direct_declarator (tree) final override;
+ void abstract_declarator (tree) final override;
+ void direct_abstract_declarator (tree) final override;
/* This is the enclosing scope of the entity being pretty-printed. */
tree enclosing_scope;
diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc
index 29fc365..aa6cf3c 100644
--- a/gcc/cp/decl.cc
+++ b/gcc/cp/decl.cc
@@ -6505,6 +6505,8 @@ reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
tree elt_init;
constructor_elt *old_cur = d->cur;
+ if (d->cur->index)
+ CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
check_array_designated_initializer (d->cur, index);
elt_init = reshape_init_r (elt_type, d,
/*first_initializer_p=*/NULL_TREE,
@@ -6674,6 +6676,7 @@ reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
}
else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
{
+ CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
field = get_class_binding (type, d->cur->index);
direct_desig = true;
}
@@ -7158,7 +7161,8 @@ reshape_init (tree type, tree init, tsubst_flags_t complain)
CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
if (CONSTRUCTOR_IS_DESIGNATED_INIT (init)
&& BRACE_ENCLOSED_INITIALIZER_P (new_init))
- CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
+ gcc_checking_assert (CONSTRUCTOR_IS_DESIGNATED_INIT (new_init)
+ || seen_error ());
return new_init;
}
diff --git a/gcc/cp/expr.cc b/gcc/cp/expr.cc
index 31fe098..56fc11f 100644
--- a/gcc/cp/expr.cc
+++ b/gcc/cp/expr.cc
@@ -397,6 +397,11 @@ fold_for_warn (tree x)
{
/* C++ implementation. */
+ if (cp_unevaluated_operand)
+ /* In an unevaluated context we don't care about the reduced value
+ of an expression, so neither should any warnings. */
+ return x;
+
/* Prevent warning-dependent constexpr evaluation from changing
DECL_UID (which breaks -fcompare-debug) and from instantiating
templates. */
diff --git a/gcc/cp/g++spec.cc b/gcc/cp/g++spec.cc
index 8174d65..b63d835 100644
--- a/gcc/cp/g++spec.cc
+++ b/gcc/cp/g++spec.cc
@@ -159,6 +159,7 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
switch (decoded_options[i].opt_index)
{
case OPT_nostdlib:
+ case OPT_nostdlib__:
case OPT_nodefaultlibs:
library = -1;
break;
diff --git a/gcc/cp/mapper-client.cc b/gcc/cp/mapper-client.cc
index 8603a88..fe9544b 100644
--- a/gcc/cp/mapper-client.cc
+++ b/gcc/cp/mapper-client.cc
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
#define INCLUDE_STRING
#define INCLUDE_VECTOR
#define INCLUDE_MAP
+#define INCLUDE_MEMORY
#include "system.h"
#include "line-map.h"
diff --git a/gcc/cp/mapper-resolver.cc b/gcc/cp/mapper-resolver.cc
index e3d29fb..e70d1b4 100644
--- a/gcc/cp/mapper-resolver.cc
+++ b/gcc/cp/mapper-resolver.cc
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
#define INCLUDE_VECTOR
#define INCLUDE_ALGORITHM
#define INCLUDE_MAP
+#define INCLUDE_MEMORY
#include "system.h"
// We don't want or need to be aware of networking
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index b3fbd46..f27f4d0 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -206,6 +206,7 @@ Classes used:
#define _DEFAULT_SOURCE 1 /* To get TZ field of struct tm, if available. */
#include "config.h"
+#define INCLUDE_MEMORY
#define INCLUDE_STRING
#define INCLUDE_VECTOR
#include "system.h"
@@ -1483,10 +1484,10 @@ private:
protected:
using allocator::grow;
- virtual char *grow (char *, unsigned needed);
+ char *grow (char *, unsigned needed) final override;
#if MAPPED_WRITING
using allocator::shrink;
- virtual void shrink (char *);
+ void shrink (char *) final override;
#endif
public:
@@ -2280,7 +2281,7 @@ public:
EK_EXPLICIT_HWM,
EK_BINDING = EK_EXPLICIT_HWM, /* Implicitly encoded. */
EK_FOR_BINDING, /* A decl being inserted for a binding. */
- EK_INNER_DECL, /* A decl defined outside of it's imported
+ EK_INNER_DECL, /* A decl defined outside of its imported
context. */
EK_DIRECT_HWM = EK_PARTIAL + 1,
@@ -2829,24 +2830,10 @@ struct merge_key {
}
};
-struct duplicate_hash : nodel_ptr_hash<tree_node>
-{
-#if 0
- /* This breaks variadic bases in the xtreme_header tests. Since ::equal is
- the default pointer_hash::equal, let's use the default hash as well. */
- inline static hashval_t hash (value_type decl)
- {
- if (TREE_CODE (decl) == TREE_BINFO)
- decl = TYPE_NAME (BINFO_TYPE (decl));
- return hashval_t (DECL_UID (decl));
- }
-#endif
-};
-
/* Hashmap of merged duplicates. Usually decls, but can contain
BINFOs. */
typedef hash_map<tree,uintptr_t,
- simple_hashmap_traits<duplicate_hash,uintptr_t> >
+ simple_hashmap_traits<nodel_ptr_hash<tree_node>,uintptr_t> >
duplicate_hash_map;
/* Tree stream reader. Note that reading a stream doesn't mark the
@@ -3252,6 +3239,125 @@ public:
};
static loc_spans spans;
+
+/* Information about ordinary locations we stream out. */
+struct ord_loc_info
+{
+ const line_map_ordinary *src; // line map we're based on
+ unsigned offset; // offset to this line
+ unsigned span; // number of locs we span
+ unsigned remap; // serialization
+
+ static int compare (const void *a_, const void *b_)
+ {
+ auto *a = static_cast<const ord_loc_info *> (a_);
+ auto *b = static_cast<const ord_loc_info *> (b_);
+
+ if (a->src != b->src)
+ return a->src < b->src ? -1 : +1;
+
+ // Ensure no overlap
+ gcc_checking_assert (a->offset + a->span <= b->offset
+ || b->offset + b->span <= a->offset);
+
+ gcc_checking_assert (a->offset != b->offset);
+ return a->offset < b->offset ? -1 : +1;
+ }
+};
+struct ord_loc_traits
+{
+ typedef ord_loc_info value_type;
+ typedef value_type compare_type;
+
+ static const bool empty_zero_p = false;
+
+ static hashval_t hash (const value_type &v)
+ {
+ auto h = pointer_hash<const line_map_ordinary>::hash (v.src);
+ return iterative_hash_hashval_t (v.offset, h);
+ }
+ static bool equal (const value_type &v, const compare_type p)
+ {
+ return v.src == p.src && v.offset == p.offset;
+ }
+
+ static void mark_empty (value_type &v)
+ {
+ v.src = nullptr;
+ }
+ static bool is_empty (value_type &v)
+ {
+ return !v.src;
+ }
+
+ static bool is_deleted (value_type &) { return false; }
+ static void mark_deleted (value_type &) { gcc_unreachable (); }
+
+ static void remove (value_type &) {}
+};
+/* Table keyed by ord_loc_info, used for noting. */
+static hash_table<ord_loc_traits> *ord_loc_table;
+/* Sorted vector, used for writing. */
+static vec<ord_loc_info> *ord_loc_remap;
+
+/* Information about macro locations we stream out. */
+struct macro_loc_info
+{
+ const line_map_macro *src; // original expansion
+ unsigned remap; // serialization
+
+ static int compare (const void *a_, const void *b_)
+ {
+ auto *a = static_cast<const macro_loc_info *> (a_);
+ auto *b = static_cast<const macro_loc_info *> (b_);
+
+ gcc_checking_assert (MAP_START_LOCATION (a->src)
+ != MAP_START_LOCATION (b->src));
+ if (MAP_START_LOCATION (a->src) < MAP_START_LOCATION (b->src))
+ return -1;
+ else
+ return +1;
+ }
+};
+struct macro_loc_traits
+{
+ typedef macro_loc_info value_type;
+ typedef const line_map_macro *compare_type;
+
+ static const bool empty_zero_p = false;
+
+ static hashval_t hash (compare_type p)
+ {
+ return pointer_hash<const line_map_macro>::hash (p);
+ }
+ static hashval_t hash (const value_type &v)
+ {
+ return hash (v.src);
+ }
+ static bool equal (const value_type &v, const compare_type p)
+ {
+ return v.src == p;
+ }
+
+ static void mark_empty (value_type &v)
+ {
+ v.src = nullptr;
+ }
+ static bool is_empty (value_type &v)
+ {
+ return !v.src;
+ }
+
+ static bool is_deleted (value_type &) { return false; }
+ static void mark_deleted (value_type &) { gcc_unreachable (); }
+
+ static void remove (value_type &) {}
+};
+/* Table keyed by line_map_macro, used for noting. */
+static hash_table<macro_loc_traits> *macro_loc_table;
+/* Sorted vector, used for writing. */
+static vec<macro_loc_info> *macro_loc_remap;
+
/* Indirection to allow bsearching imports by ordinary location. */
static vec<module_state *> *ool;
@@ -3355,15 +3461,7 @@ void slurping::release_macros ()
elf_in::release (from, macro_tbl);
}
-/* Information about location maps used during writing. */
-
-struct location_map_info {
- range_t num_maps;
-
- unsigned max_range;
-};
-
-/* Flage for extensions that end up being streamed. */
+/* Flags for extensions that end up being streamed. */
enum streamed_extensions {
SE_OPENMP = 1 << 0,
@@ -3412,7 +3510,7 @@ class GTY((chain_next ("%h.parent"), for_user)) module_state {
/* Location ranges for this module. adhoc-locs are decomposed, so
don't have a range. */
loc_range_t GTY((skip)) ordinary_locs;
- loc_range_t GTY((skip)) macro_locs;
+ loc_range_t GTY((skip)) macro_locs; // [lwm,num)
/* LOC is first set too the importing location. When initially
loaded it refers to a module loc whose parent is the importing
@@ -3605,20 +3703,21 @@ class GTY((chain_next ("%h.parent"), for_user)) module_state {
bool read_entities (unsigned count, unsigned lwm, unsigned hwm);
private:
- location_map_info write_prepare_maps (module_state_config *);
+ void write_init_maps ();
+ range_t write_prepare_maps (module_state_config *, bool);
bool read_prepare_maps (const module_state_config *);
- void write_ordinary_maps (elf_out *to, location_map_info &,
- module_state_config *, bool, unsigned *crc_ptr);
- bool read_ordinary_maps ();
- void write_macro_maps (elf_out *to, location_map_info &,
- module_state_config *, unsigned *crc_ptr);
- bool read_macro_maps ();
+ void write_ordinary_maps (elf_out *to, range_t &,
+ bool, unsigned *crc_ptr);
+ bool read_ordinary_maps (unsigned, unsigned);
+ void write_macro_maps (elf_out *to, range_t &, unsigned *crc_ptr);
+ bool read_macro_maps (unsigned);
private:
- void write_define (bytes_out &, const cpp_macro *, bool located = true);
- cpp_macro *read_define (bytes_in &, cpp_reader *, bool located = true) const;
- unsigned write_macros (elf_out *to, cpp_reader *, unsigned *crc_ptr);
+ void write_define (bytes_out &, const cpp_macro *);
+ cpp_macro *read_define (bytes_in &, cpp_reader *) const;
+ vec<cpp_hashnode *> *prepare_macros (cpp_reader *);
+ unsigned write_macros (elf_out *to, vec<cpp_hashnode *> *, unsigned *crc_ptr);
bool read_macros ();
void install_macros ();
@@ -3630,6 +3729,7 @@ class GTY((chain_next ("%h.parent"), for_user)) module_state {
static cpp_macro *deferred_macro (cpp_reader *, location_t, cpp_hashnode *);
public:
+ static bool note_location (location_t);
static void write_location (bytes_out &, location_t);
location_t read_location (bytes_in &) const;
@@ -7088,7 +7188,7 @@ trees_in::tree_node_vals (tree t)
}
-/* If T is a back reference, fixed reference or NULL, write out it's
+/* If T is a back reference, fixed reference or NULL, write out its
code and return WK_none. Otherwise return WK_value if we must write
by value, or WK_normal otherwise. */
@@ -10557,7 +10657,7 @@ trees_out::key_mergeable (int tag, merge_kind mk, tree decl, tree inner,
/* DECL is a new declaration that may be duplicated in OVL. Use RET &
ARGS to find its clone, or NULL. If DECL's DECL_NAME is NULL, this
- has been found by a proxy. It will be an enum type located by it's
+ has been found by a proxy. It will be an enum type located by its
first member.
We're conservative with matches, so ambiguous decls will be
@@ -11567,7 +11667,7 @@ trees_in::read_var_def (tree decl, tree maybe_template)
}
/* If MEMBER doesn't have an independent life outside the class,
- return it (or it's TEMPLATE_DECL). Otherwise NULL. */
+ return it (or its TEMPLATE_DECL). Otherwise NULL. */
static tree
member_owned_by_class (tree member)
@@ -13120,7 +13220,10 @@ depset::hash::find_dependencies (module_state *module)
else if (TREE_VISITED (decl))
/* A global tree. */;
else if (item->get_entity_kind () == EK_NAMESPACE)
- add_namespace_context (current, CP_DECL_CONTEXT (decl));
+ {
+ module->note_location (DECL_SOURCE_LOCATION (decl));
+ add_namespace_context (current, CP_DECL_CONTEXT (decl));
+ }
else
{
walker.mark_declaration (decl, current->has_defn ());
@@ -14392,14 +14495,14 @@ struct module_state_config {
unsigned num_entities;
unsigned ordinary_locs;
unsigned macro_locs;
- unsigned ordinary_loc_align;
+ unsigned loc_range_bits;
unsigned active_init;
public:
module_state_config ()
:dialect_str (get_dialect ()),
num_imports (0), num_partitions (0), num_entities (0),
- ordinary_locs (0), macro_locs (0), ordinary_loc_align (0),
+ ordinary_locs (0), macro_locs (0), loc_range_bits (0),
active_init (0)
{
}
@@ -15354,7 +15457,7 @@ module_state::read_entities (unsigned count, unsigned lwm, unsigned hwm)
sure the specified entities are loaded.
An optimization might be to have a flag in each key-entity saying
- that it's top key might be in the entity table. It's not clear to
+ that its top key might be in the entity table. It's not clear to
me how to set that flag cheaply -- cheaper than just looking.
FIXME: It'd be nice to have a bit in decls to tell us whether to
@@ -15510,7 +15613,7 @@ module_for_ordinary_loc (location_t loc)
module_state *probe = (*ool)[pos + half];
if (loc < probe->ordinary_locs.first)
len = half;
- else if (loc < probe->ordinary_locs.second)
+ else if (loc < probe->ordinary_locs.first + probe->ordinary_locs.second)
return probe;
else
{
@@ -15532,15 +15635,15 @@ module_for_macro_loc (location_t loc)
{
unsigned half = len / 2;
module_state *probe = (*modules)[pos + half];
- if (loc >= probe->macro_locs.second)
- len = half;
- else if (loc >= probe->macro_locs.first)
- return probe;
- else
+ if (loc < probe->macro_locs.first)
{
pos += half + 1;
len = len - (half + 1);
}
+ else if (loc >= probe->macro_locs.first + probe->macro_locs.second)
+ len = half;
+ else
+ return probe;
}
return NULL;
@@ -15559,6 +15662,79 @@ module_state::imported_from () const
return from;
}
+/* Note that LOC will need writing. This allows us to prune locations
+ that are not needed. */
+
+bool
+module_state::note_location (location_t loc)
+{
+ bool added = false;
+ if (!macro_loc_table && !ord_loc_table)
+ ;
+ else if (loc < RESERVED_LOCATION_COUNT)
+ ;
+ else if (IS_ADHOC_LOC (loc))
+ {
+ location_t locus = get_location_from_adhoc_loc (line_table, loc);
+ note_location (locus);
+ source_range range = get_range_from_loc (line_table, loc);
+ if (range.m_start != locus)
+ note_location (range.m_start);
+ note_location (range.m_finish);
+ }
+ else if (loc >= LINEMAPS_MACRO_LOWEST_LOCATION (line_table))
+ {
+ if (spans.macro (loc))
+ {
+ const line_map *map = linemap_lookup (line_table, loc);
+ const line_map_macro *mac_map = linemap_check_macro (map);
+ hashval_t hv = macro_loc_traits::hash (mac_map);
+ macro_loc_info *slot
+ = macro_loc_table->find_slot_with_hash (mac_map, hv, INSERT);
+ if (!slot->src)
+ {
+ slot->src = mac_map;
+ slot->remap = 0;
+ // Expansion locations could themselves be from a
+ // macro, we need to note them all.
+ note_location (mac_map->expansion);
+ gcc_checking_assert (mac_map->n_tokens);
+ location_t tloc = UNKNOWN_LOCATION;
+ for (unsigned ix = mac_map->n_tokens * 2; ix--;)
+ if (mac_map->macro_locations[ix] != tloc)
+ {
+ tloc = mac_map->macro_locations[ix];
+ note_location (tloc);
+ }
+ added = true;
+ }
+ }
+ }
+ else if (IS_ORDINARY_LOC (loc))
+ {
+ if (spans.ordinary (loc))
+ {
+ const line_map *map = linemap_lookup (line_table, loc);
+ const line_map_ordinary *ord_map = linemap_check_ordinary (map);
+ ord_loc_info lkup;
+ lkup.src = ord_map;
+ lkup.span = 1 << ord_map->m_column_and_range_bits;
+ lkup.offset = (loc - MAP_START_LOCATION (ord_map)) & ~(lkup.span - 1);
+ lkup.remap = 0;
+ ord_loc_info *slot = (ord_loc_table->find_slot_with_hash
+ (lkup, ord_loc_traits::hash (lkup), INSERT));
+ if (!slot->src)
+ {
+ *slot = lkup;
+ added = true;
+ }
+ }
+ }
+ else
+ gcc_unreachable ();
+ return added;
+}
+
/* If we're not streaming, record that we need location LOC.
Otherwise stream it. */
@@ -15566,9 +15742,10 @@ void
module_state::write_location (bytes_out &sec, location_t loc)
{
if (!sec.streaming_p ())
- /* This is where we should note we use this location. See comment
- about write_ordinary_maps. */
- return;
+ {
+ note_location (loc);
+ return;
+ }
if (loc < RESERVED_LOCATION_COUNT)
{
@@ -15590,20 +15767,40 @@ module_state::write_location (bytes_out &sec, location_t loc)
}
else if (loc >= LINEMAPS_MACRO_LOWEST_LOCATION (line_table))
{
- if (const loc_spans::span *span = spans.macro (loc))
+ const macro_loc_info *info = nullptr;
+ unsigned offset = 0;
+ if (unsigned hwm = macro_loc_remap->length ())
{
- unsigned off = MAX_LOCATION_T - loc;
+ info = macro_loc_remap->begin ();
+ while (hwm != 1)
+ {
+ unsigned mid = hwm / 2;
+ if (MAP_START_LOCATION (info[mid].src) <= loc)
+ {
+ info += mid;
+ hwm -= mid;
+ }
+ else
+ hwm = mid;
+ }
+ offset = loc - MAP_START_LOCATION (info->src);
+ if (offset > info->src->n_tokens)
+ info = nullptr;
+ }
- off -= span->macro_delta;
+ gcc_checking_assert (bool (info) == bool (spans.macro (loc)));
+ if (info)
+ {
+ offset += info->remap;
sec.u (LK_MACRO);
- sec.u (off);
+ sec.u (offset);
dump (dumper::LOCATION)
- && dump ("Macro location %u output %u", loc, off);
+ && dump ("Macro location %u output %u", loc, offset);
}
else if (const module_state *import = module_for_macro_loc (loc))
{
- unsigned off = import->macro_locs.second - loc - 1;
+ unsigned off = loc - import->macro_locs.first;
sec.u (LK_IMPORT_MACRO);
sec.u (import->remap);
sec.u (off);
@@ -15616,16 +15813,37 @@ module_state::write_location (bytes_out &sec, location_t loc)
}
else if (IS_ORDINARY_LOC (loc))
{
- if (const loc_spans::span *span = spans.ordinary (loc))
+ const ord_loc_info *info = nullptr;
+ unsigned offset = 0;
+ if (unsigned hwm = ord_loc_remap->length ())
{
- unsigned off = loc;
+ info = ord_loc_remap->begin ();
+ while (hwm != 1)
+ {
+ unsigned mid = hwm / 2;
+ if (MAP_START_LOCATION (info[mid].src) + info[mid].offset <= loc)
+ {
+ info += mid;
+ hwm -= mid;
+ }
+ else
+ hwm = mid;
+ }
+ offset = loc - MAP_START_LOCATION (info->src) - info->offset;
+ if (offset > info->span)
+ info = nullptr;
+ }
- off += span->ordinary_delta;
+ gcc_checking_assert (bool (info) == bool (spans.ordinary (loc)));
+
+ if (info)
+ {
+ offset += info->remap;
sec.u (LK_ORDINARY);
- sec.u (off);
+ sec.u (offset);
dump (dumper::LOCATION)
- && dump ("Ordinary location %u output %u", loc, off);
+ && dump ("Ordinary location %u output %u", loc, offset);
}
else if (const module_state *import = module_for_ordinary_loc (loc))
{
@@ -15680,14 +15898,10 @@ module_state::read_location (bytes_in &sec) const
{
unsigned off = sec.u ();
- if (macro_locs.first)
+ if (macro_locs.second)
{
- location_t adjusted = MAX_LOCATION_T - off;
- adjusted -= slurp->loc_deltas.second;
- if (adjusted < macro_locs.first)
- sec.set_overrun ();
- else if (adjusted < macro_locs.second)
- locus = adjusted;
+ if (off < macro_locs.second)
+ locus = off + macro_locs.first;
else
sec.set_overrun ();
}
@@ -15703,15 +15917,10 @@ module_state::read_location (bytes_in &sec) const
unsigned off = sec.u ();
if (ordinary_locs.second)
{
- location_t adjusted = off;
-
- adjusted += slurp->loc_deltas.first;
- if (adjusted >= ordinary_locs.second)
+ if (off < ordinary_locs.second)
+ locus = off + ordinary_locs.first;
+ else
sec.set_overrun ();
- else if (adjusted >= ordinary_locs.first)
- locus = adjusted;
- else if (adjusted < spans.main_start ())
- locus = off;
}
else
locus = loc;
@@ -15745,10 +15954,10 @@ module_state::read_location (bytes_in &sec) const
{
if (kind == LK_IMPORT_MACRO)
{
- if (!import->macro_locs.first)
+ if (!import->macro_locs.second)
locus = import->loc;
- else if (off < import->macro_locs.second - macro_locs.first)
- locus = import->macro_locs.second - off - 1;
+ else if (off < import->macro_locs.second)
+ locus = off + import->macro_locs.first;
else
sec.set_overrun ();
}
@@ -15756,8 +15965,7 @@ module_state::read_location (bytes_in &sec) const
{
if (!import->ordinary_locs.second)
locus = import->loc;
- else if (off < (import->ordinary_locs.second
- - import->ordinary_locs.first))
+ else if (off < import->ordinary_locs.second)
locus = import->ordinary_locs.first + off;
else
sec.set_overrun ();
@@ -15770,20 +15978,21 @@ module_state::read_location (bytes_in &sec) const
return locus;
}
-/* Prepare the span adjustments. */
+/* Allocate hash tables to record needed locations. */
+
+void
+module_state::write_init_maps ()
+{
+ macro_loc_table = new hash_table<macro_loc_traits> (EXPERIMENT (1, 400));
+ ord_loc_table = new hash_table<ord_loc_traits> (EXPERIMENT (1, 400));
+}
-// FIXME:QOI I do not prune the unreachable locations. Modules with
-// textually-large GMFs could well cause us to run out of locations.
-// Regular single-file modules could also be affected. We should
-// determine which locations we need to represent, so that we do not
-// grab more locations than necessary. An example is in
-// write_macro_maps where we work around macro expansions that are not
-// covering any locations -- the macro expands to nothing. Perhaps we
-// should decompose locations so that we can have a more graceful
-// degradation upon running out?
+/* Prepare the span adjustments. We prune unneeded locations -- at
+ this point every needed location must have been seen by
+ note_location. */
-location_map_info
-module_state::write_prepare_maps (module_state_config *)
+range_t
+module_state::write_prepare_maps (module_state_config *cfg, bool has_partitions)
{
dump () && dump ("Preparing locations");
dump.indent ();
@@ -15794,122 +16003,124 @@ module_state::write_prepare_maps (module_state_config *)
spans[loc_spans::SPAN_RESERVED].macro.first,
spans[loc_spans::SPAN_RESERVED].macro.second);
- location_map_info info;
-
- info.num_maps.first = info.num_maps.second = 0;
-
- /* Figure the alignment of ordinary location spans. */
- unsigned max_range = 0;
- for (unsigned ix = loc_spans::SPAN_FIRST; ix != spans.length (); ix++)
- {
- loc_spans::span &span = spans[ix];
-
- if (span.ordinary.first != span.ordinary.second)
- {
- line_map_ordinary const *omap
- = linemap_check_ordinary (linemap_lookup (line_table,
- span.ordinary.first));
-
- /* We should exactly match up. */
- gcc_checking_assert (MAP_START_LOCATION (omap) == span.ordinary.first);
+ range_t info {0, 0};
+
+ // Sort the noted lines.
+ vec_alloc (ord_loc_remap, ord_loc_table->size ());
+ for (auto iter = ord_loc_table->begin (), end = ord_loc_table->end ();
+ iter != end; ++iter)
+ ord_loc_remap->quick_push (*iter);
+ ord_loc_remap->qsort (&ord_loc_info::compare);
+
+ // Note included-from maps.
+ bool added = false;
+ const line_map_ordinary *current = nullptr;
+ for (auto iter = ord_loc_remap->begin (), end = ord_loc_remap->end ();
+ iter != end; ++iter)
+ if (iter->src != current)
+ {
+ current = iter->src;
+ for (auto probe = current;
+ auto from = linemap_included_from (probe);
+ probe = linemap_check_ordinary (linemap_lookup (line_table, from)))
+ {
+ if (has_partitions)
+ {
+ // Partition locations need to elide their module map
+ // entry.
+ probe
+ = linemap_check_ordinary (linemap_lookup (line_table, from));
+ if (MAP_MODULE_P (probe))
+ from = linemap_included_from (probe);
+ }
- line_map_ordinary const *fmap = omap;
- for (; MAP_START_LOCATION (omap) < span.ordinary.second; omap++)
+ if (!note_location (from))
+ break;
+ added = true;
+ }
+ }
+ if (added)
+ {
+ // Reconstruct the line array as we added items to the hash table.
+ vec_free (ord_loc_remap);
+ vec_alloc (ord_loc_remap, ord_loc_table->size ());
+ for (auto iter = ord_loc_table->begin (), end = ord_loc_table->end ();
+ iter != end; ++iter)
+ ord_loc_remap->quick_push (*iter);
+ ord_loc_remap->qsort (&ord_loc_info::compare);
+ }
+ delete ord_loc_table;
+ ord_loc_table = nullptr;
+
+ // Merge (sufficiently) adjacent spans, and calculate remapping.
+ constexpr unsigned adjacency = 2; // Allow 2 missing lines.
+ auto begin = ord_loc_remap->begin (), end = ord_loc_remap->end ();
+ auto dst = begin;
+ unsigned offset = 0, range_bits = 0;
+ ord_loc_info *base = nullptr;
+ for (auto iter = begin; iter != end; ++iter)
+ {
+ if (base && iter->src == base->src)
+ {
+ if (base->offset + base->span +
+ ((adjacency << base->src->m_column_and_range_bits)
+ // If there are few c&r bits, allow further separation.
+ | (adjacency << 4))
+ >= iter->offset)
{
- /* We should never find a module linemap in an interval. */
- gcc_checking_assert (!MAP_MODULE_P (omap));
-
- if (max_range < omap->m_range_bits)
- max_range = omap->m_range_bits;
+ // Merge.
+ offset -= base->span;
+ base->span = iter->offset + iter->span - base->offset;
+ offset += base->span;
+ continue;
}
-
- info.num_maps.first += omap - fmap;
}
+ else if (range_bits < iter->src->m_range_bits)
+ range_bits = iter->src->m_range_bits;
- if (span.macro.first != span.macro.second)
- {
- /* Iterate over the span's macros, to elide the empty
- expansions. */
- unsigned count = 0;
- for (unsigned macro
- = linemap_lookup_macro_index (line_table,
- span.macro.second - 1);
- macro < LINEMAPS_MACRO_USED (line_table);
- macro++)
- {
- line_map_macro const *mmap
- = LINEMAPS_MACRO_MAP_AT (line_table, macro);
- if (MAP_START_LOCATION (mmap) < span.macro.first)
- /* Fallen out of the span. */
- break;
-
- if (mmap->n_tokens)
- count++;
- }
- dump (dumper::LOCATION) && dump ("Span:%u %u macro maps", ix, count);
- info.num_maps.second += count;
- }
+ offset += ((1u << iter->src->m_range_bits) - 1);
+ offset &= ~((1u << iter->src->m_range_bits) - 1);
+ iter->remap = offset;
+ offset += iter->span;
+ base = dst;
+ *dst++ = *iter;
}
+ ord_loc_remap->truncate (dst - begin);
- /* Adjust the maps. Ordinary ones ascend, and we must maintain
- alignment. Macro ones descend, but are unaligned. */
- location_t ord_off = spans[loc_spans::SPAN_FIRST].ordinary.first;
- location_t mac_off = spans[loc_spans::SPAN_FIRST].macro.second;
- location_t range_mask = (1u << max_range) - 1;
+ info.first = ord_loc_remap->length ();
+ cfg->ordinary_locs = offset;
+ cfg->loc_range_bits = range_bits;
+ dump () && dump ("Ordinary maps:%u locs:%u range_bits:%u",
+ info.first, cfg->ordinary_locs,
+ cfg->loc_range_bits);
- dump () && dump ("Ordinary maps range bits:%u, preserve:%x, zero:%u",
- max_range, ord_off & range_mask, ord_off & ~range_mask);
+ // Remap the macro locations.
+ vec_alloc (macro_loc_remap, macro_loc_table->size ());
+ for (auto iter = macro_loc_table->begin (), end = macro_loc_table->end ();
+ iter != end; ++iter)
+ macro_loc_remap->quick_push (*iter);
+ delete macro_loc_table;
+ macro_loc_table = nullptr;
- for (unsigned ix = loc_spans::SPAN_FIRST; ix != spans.length (); ix++)
+ macro_loc_remap->qsort (&macro_loc_info::compare);
+ offset = 0;
+ for (auto iter = macro_loc_remap->begin (), end = macro_loc_remap->end ();
+ iter != end; ++iter)
{
- loc_spans::span &span = spans[ix];
-
- span.macro_delta = mac_off - span.macro.second;
- mac_off -= span.macro.second - span.macro.first;
- dump () && dump ("Macro span:%u [%u,%u):%u->%d(%u)", ix,
- span.macro.first, span.macro.second,
- span.macro.second - span.macro.first,
- span.macro_delta, span.macro.first + span.macro_delta);
-
- line_map_ordinary const *omap
- = linemap_check_ordinary (linemap_lookup (line_table,
- span.ordinary.first));
- location_t base = MAP_START_LOCATION (omap);
-
- /* Preserve the low MAX_RANGE bits of base by incrementing ORD_OFF. */
- unsigned low_bits = base & range_mask;
- if ((ord_off & range_mask) > low_bits)
- low_bits += range_mask + 1;
- ord_off = (ord_off & ~range_mask) + low_bits;
- span.ordinary_delta = ord_off - base;
-
- for (; MAP_START_LOCATION (omap) < span.ordinary.second; omap++)
- {
- location_t start_loc = MAP_START_LOCATION (omap);
- unsigned to = start_loc + span.ordinary_delta;
- location_t end_loc = MAP_START_LOCATION (omap + 1);
-
- dump () && dump ("Ordinary span:%u [%u,%u):%u->%d(%u)",
- ix, start_loc,
- end_loc, end_loc - start_loc,
- span.ordinary_delta, to);
-
- /* There should be no change in the low order bits. */
- gcc_checking_assert (((start_loc ^ to) & range_mask) == 0);
- }
-
- /* The ending serialized value. */
- ord_off = span.ordinary.second + span.ordinary_delta;
+ auto mac = iter->src;
+ iter->remap = offset;
+ offset += mac->n_tokens;
}
+ info.second = macro_loc_remap->length ();
+ cfg->macro_locs = offset;
- dump () && dump ("Ordinary:%u maps hwm:%u macro:%u maps lwm:%u ",
- info.num_maps.first, ord_off,
- info.num_maps.second, mac_off);
+ dump () && dump ("Macro maps:%u locs:%u", info.second, cfg->macro_locs);
dump.outdent ();
- info.max_range = max_range;
-
+ // If we have no ordinary locs, we must also have no macro locs.
+ gcc_checking_assert (cfg->ordinary_locs || !cfg->macro_locs);
+
return info;
}
@@ -15917,8 +16128,6 @@ bool
module_state::read_prepare_maps (const module_state_config *cfg)
{
location_t ordinary = line_table->highest_location + 1;
- ordinary = ((ordinary + (1u << cfg->ordinary_loc_align))
- & ~((1u << cfg->ordinary_loc_align) - 1));
ordinary += cfg->ordinary_locs;
location_t macro = LINEMAPS_MACRO_LOWEST_LOCATION (line_table);
@@ -15943,13 +16152,12 @@ module_state::read_prepare_maps (const module_state_config *cfg)
return false;
}
-/* Write the location maps. This also determines the shifts for the
- location spans. */
+/* Write & read the location maps. Not called if there are no
+ locations. */
void
-module_state::write_ordinary_maps (elf_out *to, location_map_info &info,
- module_state_config *cfg, bool has_partitions,
- unsigned *crc_p)
+module_state::write_ordinary_maps (elf_out *to, range_t &info,
+ bool has_partitions, unsigned *crc_p)
{
dump () && dump ("Writing ordinary location maps");
dump.indent ();
@@ -15958,45 +16166,36 @@ module_state::write_ordinary_maps (elf_out *to, location_map_info &info,
filenames.create (20);
/* Determine the unique filenames. */
- // FIXME:QOI We should find the set of filenames when working out
- // which locations we actually need. See write_prepare_maps.
- for (unsigned ix = loc_spans::SPAN_FIRST; ix != spans.length (); ix++)
- {
- loc_spans::span &span = spans[ix];
- line_map_ordinary const *omap
- = linemap_check_ordinary (linemap_lookup (line_table,
- span.ordinary.first));
-
- /* We should exactly match up. */
- gcc_checking_assert (MAP_START_LOCATION (omap) == span.ordinary.first);
-
- for (; MAP_START_LOCATION (omap) < span.ordinary.second; omap++)
- {
- const char *fname = ORDINARY_MAP_FILE_NAME (omap);
+ const line_map_ordinary *current = nullptr;
+ for (auto iter = ord_loc_remap->begin (), end = ord_loc_remap->end ();
+ iter != end; ++iter)
+ if (iter->src != current)
+ {
+ current = iter->src;
+ const char *fname = ORDINARY_MAP_FILE_NAME (iter->src);
- /* We should never find a module linemap in an interval. */
- gcc_checking_assert (!MAP_MODULE_P (omap));
+ /* We should never find a module linemap in an interval. */
+ gcc_checking_assert (!MAP_MODULE_P (iter->src));
- /* We expect very few filenames, so just an array.
- (Not true when headers are still in play :() */
- for (unsigned jx = filenames.length (); jx--;)
- {
- const char *name = filenames[jx];
- if (0 == strcmp (name, fname))
- {
- /* Reset the linemap's name, because for things like
- preprocessed input we could have multiple
- instances of the same name, and we'd rather not
- percolate that. */
- const_cast<line_map_ordinary *> (omap)->to_file = name;
- fname = NULL;
- break;
- }
- }
- if (fname)
- filenames.safe_push (fname);
- }
- }
+ /* We expect very few filenames, so just an array.
+ (Not true when headers are still in play :() */
+ for (unsigned jx = filenames.length (); jx--;)
+ {
+ const char *name = filenames[jx];
+ if (0 == strcmp (name, fname))
+ {
+ /* Reset the linemap's name, because for things like
+ preprocessed input we could have multiple instances
+ of the same name, and we'd rather not percolate
+ that. */
+ const_cast<line_map_ordinary *> (iter->src)->to_file = name;
+ fname = NULL;
+ break;
+ }
+ }
+ if (fname)
+ filenames.safe_push (fname);
+ }
bytes_out sec (to);
sec.begin ();
@@ -16012,56 +16211,45 @@ module_state::write_ordinary_maps (elf_out *to, location_map_info &info,
sec.str (fname);
}
- location_t offset = spans[loc_spans::SPAN_FIRST].ordinary.first;
- location_t range_mask = (1u << info.max_range) - 1;
-
- dump () && dump ("Ordinary maps:%u, range bits:%u, preserve:%x, zero:%u",
- info.num_maps.first, info.max_range, offset & range_mask,
- offset & ~range_mask);
- sec.u (info.num_maps.first); /* Num maps. */
- sec.u (info.max_range); /* Maximum range bits */
- sec.u (offset & range_mask); /* Bits to preserve. */
- sec.u (offset & ~range_mask);
-
- for (unsigned ix = loc_spans::SPAN_FIRST; ix != spans.length (); ix++)
+ sec.u (info.first); /* Num maps. */
+ const ord_loc_info *base = nullptr;
+ for (auto iter = ord_loc_remap->begin (), end = ord_loc_remap->end ();
+ iter != end; ++iter)
{
- loc_spans::span &span = spans[ix];
- line_map_ordinary const *omap
- = linemap_check_ordinary (linemap_lookup (line_table,
- span.ordinary.first));
- for (; MAP_START_LOCATION (omap) < span.ordinary.second; omap++)
- {
- location_t start_loc = MAP_START_LOCATION (omap);
- unsigned to = start_loc + span.ordinary_delta;
-
- dump (dumper::LOCATION)
- && dump ("Span:%u ordinary [%u,%u)->%u", ix, start_loc,
- MAP_START_LOCATION (omap + 1), to);
-
- /* There should be no change in the low order bits. */
- gcc_checking_assert (((start_loc ^ to) & range_mask) == 0);
- sec.u (to);
+ dump (dumper::LOCATION)
+ && dump ("Span:%u ordinary [%u+%u,+%u)->[%u,+%u)",
+ iter - ord_loc_remap->begin (),
+ MAP_START_LOCATION (iter->src), iter->offset, iter->span,
+ iter->remap, iter->span);
- /* Making accessors just for here, seems excessive. */
- sec.u (omap->reason);
- sec.u (omap->sysp);
- sec.u (omap->m_range_bits);
- sec.u (omap->m_column_and_range_bits - omap->m_range_bits);
+ if (!base || iter->src != base->src)
+ base = iter;
+ sec.u (iter->offset - base->offset);
+ if (base == iter)
+ {
+ sec.u (iter->src->sysp);
+ sec.u (iter->src->m_range_bits);
+ sec.u (iter->src->m_column_and_range_bits - iter->src->m_range_bits);
- const char *fname = ORDINARY_MAP_FILE_NAME (omap);
+ const char *fname = ORDINARY_MAP_FILE_NAME (iter->src);
for (unsigned ix = 0; ix != filenames.length (); ix++)
if (filenames[ix] == fname)
{
sec.u (ix);
break;
}
- sec.u (ORDINARY_MAP_STARTING_LINE_NUMBER (omap));
-
+ unsigned line = ORDINARY_MAP_STARTING_LINE_NUMBER (iter->src);
+ line += iter->offset >> iter->src->m_column_and_range_bits;
+ sec.u (line);
+ }
+ sec.u (iter->remap);
+ if (base == iter)
+ {
/* Write the included from location, which means reading it
while reading in the ordinary maps. So we'd better not
be getting ahead of ourselves. */
- location_t from = linemap_included_from (omap);
- gcc_checking_assert (from < MAP_START_LOCATION (omap));
+ location_t from = linemap_included_from (iter->src);
+ gcc_checking_assert (from < MAP_START_LOCATION (iter->src));
if (from != UNKNOWN_LOCATION && has_partitions)
{
/* A partition's span will have a from pointing at a
@@ -16073,15 +16261,7 @@ module_state::write_ordinary_maps (elf_out *to, location_map_info &info,
}
write_location (sec, from);
}
- /* The ending serialized value. */
- offset = MAP_START_LOCATION (omap) + span.ordinary_delta;
}
- dump () && dump ("Ordinary location hwm:%u", offset);
- sec.u (offset);
-
- // Record number of locations and alignment.
- cfg->ordinary_loc_align = info.max_range;
- cfg->ordinary_locs = offset;
filenames.release ();
@@ -16090,8 +16270,7 @@ module_state::write_ordinary_maps (elf_out *to, location_map_info &info,
}
void
-module_state::write_macro_maps (elf_out *to, location_map_info &info,
- module_state_config *cfg, unsigned *crc_p)
+module_state::write_macro_maps (elf_out *to, range_t &info, unsigned *crc_p)
{
dump () && dump ("Writing macro location maps");
dump.indent ();
@@ -16099,83 +16278,55 @@ module_state::write_macro_maps (elf_out *to, location_map_info &info,
bytes_out sec (to);
sec.begin ();
- dump () && dump ("Macro maps:%u", info.num_maps.second);
- sec.u (info.num_maps.second);
-
- location_t offset = spans[loc_spans::SPAN_FIRST].macro.second;
- sec.u (offset);
+ dump () && dump ("Macro maps:%u", info.second);
+ sec.u (info.second);
unsigned macro_num = 0;
- for (unsigned ix = loc_spans::SPAN_FIRST; ix != spans.length (); ix++)
- {
- loc_spans::span &span = spans[ix];
- if (span.macro.first == span.macro.second)
- /* Empty span. */
- continue;
-
- for (unsigned macro
- = linemap_lookup_macro_index (line_table, span.macro.second - 1);
- macro < LINEMAPS_MACRO_USED (line_table);
- macro++)
+ for (auto iter = macro_loc_remap->end (), begin = macro_loc_remap->begin ();
+ iter-- != begin;)
+ {
+ auto mac = iter->src;
+ sec.u (iter->remap);
+ sec.u (mac->n_tokens);
+ sec.cpp_node (mac->macro);
+ write_location (sec, mac->expansion);
+ const location_t *locs = mac->macro_locations;
+ /* There are lots of identical runs. */
+ location_t prev = UNKNOWN_LOCATION;
+ unsigned count = 0;
+ unsigned runs = 0;
+ for (unsigned jx = mac->n_tokens * 2; jx--;)
{
- line_map_macro const *mmap
- = LINEMAPS_MACRO_MAP_AT (line_table, macro);
- location_t start_loc = MAP_START_LOCATION (mmap);
- if (start_loc < span.macro.first)
- /* Fallen out of the span. */
- break;
-
- if (!mmap->n_tokens)
- /* Empty expansion. */
- continue;
-
- sec.u (offset);
- sec.u (mmap->n_tokens);
- sec.cpp_node (mmap->macro);
- write_location (sec, mmap->expansion);
- const location_t *locs = mmap->macro_locations;
- /* There are lots of identical runs. */
- location_t prev = UNKNOWN_LOCATION;
- unsigned count = 0;
- unsigned runs = 0;
- for (unsigned jx = mmap->n_tokens * 2; jx--;)
+ location_t tok_loc = locs[jx];
+ if (tok_loc == prev)
{
- location_t tok_loc = locs[jx];
- if (tok_loc == prev)
- {
- count++;
- continue;
- }
- runs++;
- sec.u (count);
- count = 1;
- prev = tok_loc;
- write_location (sec, tok_loc);
+ count++;
+ continue;
}
+ runs++;
sec.u (count);
- dump (dumper::LOCATION)
- && dump ("Span:%u macro:%u %I %u/%u*2 locations [%u,%u)->%u",
- ix, macro_num, identifier (mmap->macro),
- runs, mmap->n_tokens,
- start_loc, start_loc + mmap->n_tokens,
- start_loc + span.macro_delta);
- macro_num++;
- offset -= mmap->n_tokens;
- gcc_checking_assert (offset == start_loc + span.macro_delta);
+ count = 1;
+ prev = tok_loc;
+ write_location (sec, tok_loc);
}
+ sec.u (count);
+ dump (dumper::LOCATION)
+ && dump ("Macro:%u %I %u/%u*2 locations [%u,%u)->%u",
+ macro_num, identifier (mac->macro),
+ runs, mac->n_tokens,
+ MAP_START_LOCATION (mac),
+ MAP_START_LOCATION (mac) + mac->n_tokens,
+ iter->remap);
+ macro_num++;
}
- dump () && dump ("Macro location lwm:%u", offset);
- sec.u (offset);
- gcc_assert (macro_num == info.num_maps.second);
-
- cfg->macro_locs = MAX_LOCATION_T + 1 - offset;
+ gcc_assert (macro_num == info.second);
sec.end (to, to->name (MOD_SNAME_PFX ".mlm"), crc_p);
dump.outdent ();
}
bool
-module_state::read_ordinary_maps ()
+module_state::read_ordinary_maps (unsigned num_ord_locs, unsigned range_bits)
{
bytes_in sec;
@@ -16201,70 +16352,62 @@ module_state::read_ordinary_maps ()
filenames.quick_push (fname);
}
- unsigned num_ordinary = sec.u ();
- unsigned max_range = sec.u ();
- unsigned low_bits = sec.u ();
- location_t zero = sec.u ();
- location_t range_mask = (1u << max_range) - 1;
-
- dump () && dump ("Ordinary maps:%u, range bits:%u, preserve:%x, zero:%u",
- num_ordinary, max_range, low_bits, zero);
+ unsigned num_ordinary = sec.u ();
+ dump () && dump ("Ordinary maps:%u, range_bits:%u", num_ordinary, range_bits);
location_t offset = line_table->highest_location + 1;
- /* Ensure offset doesn't go backwards at the start. */
- if ((offset & range_mask) > low_bits)
- offset += range_mask + 1;
- offset = (offset & ~range_mask);
-
- bool propagated = spans.maybe_propagate (this, offset + low_bits);
+ offset += ((1u << range_bits) - 1);
+ offset &= ~((1u << range_bits) - 1);
+ ordinary_locs.first = offset;
+ bool propagated = spans.maybe_propagate (this, offset);
line_map_ordinary *maps = static_cast<line_map_ordinary *>
(line_map_new_raw (line_table, false, num_ordinary));
- location_t lwm = offset;
- slurp->loc_deltas.first = offset - zero;
- ordinary_locs.first = zero + low_bits + slurp->loc_deltas.first;
- dump () && dump ("Ordinary loc delta %d", slurp->loc_deltas.first);
-
+ const line_map_ordinary *base = nullptr;
for (unsigned ix = 0; ix != num_ordinary && !sec.get_overrun (); ix++)
{
line_map_ordinary *map = &maps[ix];
- unsigned hwm = sec.u ();
-
- /* Record the current HWM so that the below read_location is
- ok. */
- ordinary_locs.second = hwm + slurp->loc_deltas.first;
- map->start_location = hwm + (offset - zero);
- if (map->start_location < lwm)
- sec.set_overrun ();
- lwm = map->start_location;
- dump (dumper::LOCATION) && dump ("Map:%u %u->%u", ix, hwm, lwm);
- map->reason = lc_reason (sec.u ());
- map->sysp = sec.u ();
- map->m_range_bits = sec.u ();
- map->m_column_and_range_bits = map->m_range_bits + sec.u ();
-
- unsigned fnum = sec.u ();
- map->to_file = (fnum < filenames.length () ? filenames[fnum] : "");
- map->to_line = sec.u ();
- /* Root the outermost map at our location. */
- location_t from = read_location (sec);
- map->included_from = from != UNKNOWN_LOCATION ? from : loc;
+ unsigned offset = sec.u ();
+ if (!offset)
+ {
+ map->reason = LC_RENAME;
+ map->sysp = sec.u ();
+ map->m_range_bits = sec.u ();
+ map->m_column_and_range_bits = sec.u () + map->m_range_bits;
+ unsigned fnum = sec.u ();
+ map->to_file = (fnum < filenames.length () ? filenames[fnum] : "");
+ map->to_line = sec.u ();
+ base = map;
+ }
+ else
+ {
+ *map = *base;
+ map->to_line += offset >> map->m_column_and_range_bits;
+ }
+ unsigned remap = sec.u ();
+ map->start_location = remap + ordinary_locs.first;
+ if (base == map)
+ {
+ /* Root the outermost map at our location. */
+ ordinary_locs.second = remap;
+ location_t from = read_location (sec);
+ map->included_from = from != UNKNOWN_LOCATION ? from : loc;
+ }
}
- location_t hwm = sec.u ();
- ordinary_locs.second = hwm + slurp->loc_deltas.first;
-
+ ordinary_locs.second = num_ord_locs;
/* highest_location is the one handed out, not the next one to
hand out. */
- line_table->highest_location = ordinary_locs.second - 1;
+ line_table->highest_location = ordinary_locs.first + ordinary_locs.second - 1;
if (line_table->highest_location >= LINE_MAP_MAX_LOCATION_WITH_COLS)
/* We shouldn't run out of locations, as we checked before
starting. */
sec.set_overrun ();
- dump () && dump ("Ordinary location hwm:%u", ordinary_locs.second);
+ dump () && dump ("Ordinary location [%u,+%u)",
+ ordinary_locs.first, ordinary_locs.second);
if (propagated)
spans.close ();
@@ -16279,7 +16422,7 @@ module_state::read_ordinary_maps ()
}
bool
-module_state::read_macro_maps ()
+module_state::read_macro_maps (unsigned num_macro_locs)
{
bytes_in sec;
@@ -16289,24 +16432,22 @@ module_state::read_macro_maps ()
dump.indent ();
unsigned num_macros = sec.u ();
- location_t zero = sec.u ();
- dump () && dump ("Macro maps:%u zero:%u", num_macros, zero);
+ dump () && dump ("Macro maps:%u locs:%u", num_macros, num_macro_locs);
bool propagated = spans.maybe_propagate (this,
line_table->highest_location + 1);
location_t offset = LINEMAPS_MACRO_LOWEST_LOCATION (line_table);
- slurp->loc_deltas.second = zero - offset;
- macro_locs.second = zero - slurp->loc_deltas.second;
- dump () && dump ("Macro loc delta %d", slurp->loc_deltas.second);
+ macro_locs.second = num_macro_locs;
+ macro_locs.first = offset - num_macro_locs;
+
+ dump () && dump ("Macro loc delta %d", offset);
+ dump () && dump ("Macro locations [%u,%u)",
+ macro_locs.first, macro_locs.second);
for (unsigned ix = 0; ix != num_macros && !sec.get_overrun (); ix++)
{
- unsigned lwm = sec.u ();
- /* Record the current LWM so that the below read_location is
- ok. */
- macro_locs.first = lwm - slurp->loc_deltas.second;
-
+ unsigned offset = sec.u ();
unsigned n_tokens = sec.u ();
cpp_hashnode *node = sec.cpp_node ();
location_t exp_loc = read_location (sec);
@@ -16317,6 +16458,8 @@ module_state::read_macro_maps ()
/* We shouldn't run out of locations, as we checked that we
had enough before starting. */
break;
+ gcc_checking_assert (MAP_START_LOCATION (macro)
+ == offset + macro_locs.first);
location_t *locs = macro->macro_locations;
location_t tok_loc = UNKNOWN_LOCATION;
@@ -16340,11 +16483,8 @@ module_state::read_macro_maps ()
MAP_START_LOCATION (macro),
MAP_START_LOCATION (macro) + n_tokens);
}
- location_t lwm = sec.u ();
- macro_locs.first = lwm - slurp->loc_deltas.second;
dump () && dump ("Macro location lwm:%u", macro_locs.first);
-
if (propagated)
spans.close ();
@@ -16358,7 +16498,7 @@ module_state::read_macro_maps ()
/* Serialize the definition of MACRO. */
void
-module_state::write_define (bytes_out &sec, const cpp_macro *macro, bool located)
+module_state::write_define (bytes_out &sec, const cpp_macro *macro)
{
sec.u (macro->count);
@@ -16367,8 +16507,7 @@ module_state::write_define (bytes_out &sec, const cpp_macro *macro, bool located
sec.b (macro->syshdr);
sec.bflush ();
- if (located)
- write_location (sec, macro->line);
+ write_location (sec, macro->line);
if (macro->fun_like)
{
sec.u (macro->paramc);
@@ -16381,8 +16520,7 @@ module_state::write_define (bytes_out &sec, const cpp_macro *macro, bool located
for (unsigned ix = 0; ix != macro->count; ix++)
{
const cpp_token *token = &macro->exp.tokens[ix];
- if (located)
- write_location (sec, token->src_loc);
+ write_location (sec, token->src_loc);
sec.u (token->type);
sec.u (token->flags);
switch (cpp_token_val_index (token))
@@ -16447,11 +16585,11 @@ module_state::write_define (bytes_out &sec, const cpp_macro *macro, bool located
/* Read a macro definition. */
cpp_macro *
-module_state::read_define (bytes_in &sec, cpp_reader *reader, bool located) const
+module_state::read_define (bytes_in &sec, cpp_reader *reader) const
{
unsigned count = sec.u ();
/* We rely on knowing cpp_reader's hash table is ident_hash, and
- it's subobject allocator is stringpool_ggc_alloc and that is just
+ its subobject allocator is stringpool_ggc_alloc and that is just
a wrapper for ggc_alloc_atomic. */
cpp_macro *macro
= (cpp_macro *)ggc_alloc_atomic (sizeof (cpp_macro)
@@ -16467,7 +16605,7 @@ module_state::read_define (bytes_in &sec, cpp_reader *reader, bool located) cons
macro->syshdr = sec.b ();
sec.bflush ();
- macro->line = located ? read_location (sec) : loc;
+ macro->line = read_location (sec);
if (macro->fun_like)
{
@@ -16484,7 +16622,7 @@ module_state::read_define (bytes_in &sec, cpp_reader *reader, bool located) cons
for (unsigned ix = 0; ix != count && !sec.get_overrun (); ix++)
{
cpp_token *token = &macro->exp.tokens[ix];
- token->src_loc = located ? read_location (sec) : loc;
+ token->src_loc = read_location (sec);
token->type = cpp_ttype (sec.u ());
token->flags = sec.u ();
switch (cpp_token_val_index (token))
@@ -16813,31 +16951,62 @@ macro_loc_cmp (const void *a_, const void *b_)
return 0;
}
+/* Gather the macro definitions and undefinitions that we will need to
+ write out. */
+
+vec<cpp_hashnode *> *
+module_state::prepare_macros (cpp_reader *reader)
+{
+ vec<cpp_hashnode *> *macros;
+ vec_alloc (macros, 100);
+
+ cpp_forall_identifiers (reader, maybe_add_macro, macros);
+
+ dump (dumper::MACRO) && dump ("No more than %u macros", macros->length ());
+
+ macros->qsort (macro_loc_cmp);
+
+ // Note the locations.
+ for (unsigned ix = macros->length (); ix--;)
+ {
+ cpp_hashnode *node = (*macros)[ix];
+ macro_import::slot &slot = (*macro_imports)[node->deferred - 1][0];
+ macro_export &mac = (*macro_exports)[slot.offset];
+
+ if (IDENTIFIER_KEYWORD_P (identifier (node)))
+ continue;
+
+ if (mac.undef_loc != UNKNOWN_LOCATION)
+ note_location (mac.undef_loc);
+ if (mac.def)
+ {
+ note_location (mac.def->line);
+ for (unsigned ix = 0; ix != mac.def->count; ix++)
+ note_location (mac.def->exp.tokens[ix].src_loc);
+ }
+ }
+
+ return macros;
+}
+
/* Write out the exported defines. This is two sections, one
containing the definitions, the other a table of node names. */
unsigned
-module_state::write_macros (elf_out *to, cpp_reader *reader, unsigned *crc_p)
+module_state::write_macros (elf_out *to, vec<cpp_hashnode *> *macros,
+ unsigned *crc_p)
{
dump () && dump ("Writing macros");
dump.indent ();
- vec<cpp_hashnode *> macros;
- macros.create (100);
- cpp_forall_identifiers (reader, maybe_add_macro, &macros);
-
- dump (dumper::MACRO) && dump ("No more than %u macros", macros.length ());
-
- macros.qsort (macro_loc_cmp);
-
/* Write the defs */
bytes_out sec (to);
sec.begin ();
unsigned count = 0;
- for (unsigned ix = macros.length (); ix--;)
+ for (unsigned ix = macros->length (); ix--;)
{
- cpp_hashnode *node = macros[ix];
+ cpp_hashnode *node = (*macros)[ix];
macro_import::slot &slot = (*macro_imports)[node->deferred - 1][0];
gcc_assert (!slot.get_module () && slot.get_defness ());
@@ -16872,6 +17041,10 @@ module_state::write_macros (elf_out *to, cpp_reader *reader, unsigned *crc_p)
if (mac.def)
write_define (sec, mac.def);
}
+ if (count)
+ // We may have ended on a tokenless macro with a very short
+ // location, that will cause problems reading its bit flags.
+ sec.u (0);
sec.end (to, to->name (MOD_SNAME_PFX ".def"), crc_p);
if (count)
@@ -16881,9 +17054,9 @@ module_state::write_macros (elf_out *to, cpp_reader *reader, unsigned *crc_p)
sec.begin ();
sec.u (count);
- for (unsigned ix = macros.length (); ix--;)
+ for (unsigned ix = macros->length (); ix--;)
{
- const cpp_hashnode *node = macros[ix];
+ const cpp_hashnode *node = (*macros)[ix];
macro_import::slot &slot = (*macro_imports)[node->deferred - 1][0];
if (slot.offset)
@@ -16896,7 +17069,6 @@ module_state::write_macros (elf_out *to, cpp_reader *reader, unsigned *crc_p)
sec.end (to, to->name (MOD_SNAME_PFX ".mac"), crc_p);
}
- macros.release ();
dump.outdent ();
return count;
}
@@ -17338,7 +17510,7 @@ module_state::write_config (elf_out *to, module_state_config &config,
cfg.u (config.ordinary_locs);
cfg.u (config.macro_locs);
- cfg.u (config.ordinary_loc_align);
+ cfg.u (config.loc_range_bits);
cfg.u (config.active_init);
@@ -17524,7 +17696,7 @@ module_state::read_config (module_state_config &config)
config.ordinary_locs = cfg.u ();
config.macro_locs = cfg.u ();
- config.ordinary_loc_align = cfg.u ();
+ config.loc_range_bits = cfg.u ();
config.active_init = cfg.u ();
@@ -17541,7 +17713,7 @@ ool_cmp (const void *a_, const void *b_)
auto *b = *static_cast<const module_state *const *> (b_);
if (a == b)
return 0;
- else if (a->ordinary_locs.first < b->ordinary_locs.second)
+ else if (a->ordinary_locs.first < b->ordinary_locs.first)
return -1;
else
return +1;
@@ -17575,6 +17747,7 @@ module_state::write_begin (elf_out *to, cpp_reader *reader,
bitmap partitions = NULL;
if (!is_header () && !is_partition ())
partitions = BITMAP_GGC_ALLOC ();
+ write_init_maps ();
unsigned mod_hwm = 1;
for (unsigned ix = 1; ix != modules->length (); ix++)
@@ -17612,6 +17785,9 @@ module_state::write_begin (elf_out *to, cpp_reader *reader,
gcc_checking_assert (!slot->is_lazy ());
}
}
+
+ if (imp->is_direct () && (imp->remap || imp->is_partition ()))
+ note_location (imp->imported_from ());
}
if (partitions && bitmap_empty_p (partitions))
@@ -17664,11 +17840,14 @@ module_state::write_begin (elf_out *to, cpp_reader *reader,
}
ool->qsort (ool_cmp);
- location_map_info map_info = write_prepare_maps (&config);
- unsigned counts[MSC_HWM];
+ vec<cpp_hashnode *> *macros = nullptr;
+ if (is_header ())
+ macros = prepare_macros (reader);
config.num_imports = mod_hwm;
config.num_partitions = modules->length () - mod_hwm;
+ auto map_info = write_prepare_maps (&config, bool (config.num_partitions));
+ unsigned counts[MSC_HWM];
memset (counts, 0, sizeof (counts));
/* depset::cluster is the cluster number,
@@ -17805,13 +17984,16 @@ module_state::write_begin (elf_out *to, cpp_reader *reader,
write_partitions (to, config.num_partitions, &crc);
/* Write the line maps. */
- write_ordinary_maps (to, map_info, &config, config.num_partitions, &crc);
- write_macro_maps (to, map_info, &config, &crc);
+ if (config.ordinary_locs)
+ write_ordinary_maps (to, map_info, bool (config.num_partitions), &crc);
+ if (config.macro_locs)
+ write_macro_maps (to, map_info, &crc);
if (is_header ())
{
- counts[MSC_macros] = write_macros (to, reader, &crc);
+ counts[MSC_macros] = write_macros (to, macros, &crc);
counts[MSC_inits] = write_inits (to, table, &crc);
+ vec_free (macros);
}
unsigned clusters = counts[MSC_sec_hwm] - counts[MSC_sec_lwm];
@@ -17824,6 +18006,8 @@ module_state::write_begin (elf_out *to, cpp_reader *reader,
spaces.release ();
sccs.release ();
+ vec_free (macro_loc_remap);
+ vec_free (ord_loc_remap);
vec_free (ool);
// FIXME:QOI: Have a command line switch to control more detailed
@@ -17867,7 +18051,9 @@ module_state::read_initial (cpp_reader *reader)
bool have_locs = ok && read_prepare_maps (&config);
/* Ordinary maps before the imports. */
- if (have_locs && !read_ordinary_maps ())
+ if (!(have_locs && config.ordinary_locs))
+ ordinary_locs.first = line_table->highest_location + 1;
+ else if (!read_ordinary_maps (config.ordinary_locs, config.loc_range_bits))
ok = false;
/* Allocate the REMAP vector. */
@@ -17894,7 +18080,7 @@ module_state::read_initial (cpp_reader *reader)
{
/* Allocate space in the entities array now -- that array must be
- monotionically in step with the modules array. */
+ monotonically in step with the modules array. */
entity_lwm = vec_safe_length (entity_ary);
entity_num = config.num_entities;
gcc_checking_assert (modules->length () == 1
@@ -17925,7 +18111,9 @@ module_state::read_initial (cpp_reader *reader)
gcc_assert (!from ()->is_frozen ());
/* Macro maps after the imports. */
- if (ok && have_locs && !read_macro_maps ())
+ if (!(ok && have_locs && config.macro_locs))
+ macro_locs.first = LINEMAPS_MACRO_LOWEST_LOCATION (line_table);
+ else if (!read_macro_maps (config.macro_locs))
ok = false;
/* Note whether there's an active initializer. */
diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc
index 421bf2e..ce62276 100644
--- a/gcc/cp/name-lookup.cc
+++ b/gcc/cp/name-lookup.cc
@@ -7629,6 +7629,10 @@ outer_binding (tree name,
/* Thread this new class-scope binding onto the
IDENTIFIER_BINDING list so that future lookups
find it quickly. */
+ if (BASELINK_P (class_binding->value))
+ /* Don't put a BASELINK in IDENTIFIER_BINDING. */
+ class_binding->value
+ = BASELINK_FUNCTIONS (class_binding->value);
class_binding->previous = outer;
if (binding)
binding->previous = class_binding;
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index da2f370..bf9ea36 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -629,8 +629,71 @@ cp_lexer_alloc (void)
return lexer;
}
+/* Return TRUE if token is the start of a module declaration that will be
+ terminated by a CPP_PRAGMA_EOL token. */
+static inline bool
+cp_token_is_module_directive (cp_token *token)
+{
+ return token->keyword == RID__EXPORT
+ || token->keyword == RID__MODULE
+ || token->keyword == RID__IMPORT;
+}
+
+/* Return TOKEN's pragma_kind if it is CPP_PRAGMA, otherwise
+ PRAGMA_NONE. */
+
+static enum pragma_kind
+cp_parser_pragma_kind (cp_token *token)
+{
+ if (token->type != CPP_PRAGMA)
+ return PRAGMA_NONE;
+ /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST. */
+ return (enum pragma_kind) TREE_INT_CST_LOW (token->u.value);
+}
+
+/* Handle early pragmas such as #pragma GCC diagnostic, which needs to be done
+ during preprocessing for the case of preprocessing-related diagnostics. This
+ is called immediately after pushing the CPP_PRAGMA_EOL token onto
+ lexer->buffer. */
+
+static void
+cp_lexer_handle_early_pragma (cp_lexer *lexer)
+{
+ const auto first_token = lexer->buffer->address ();
+ const auto last_token = first_token + lexer->buffer->length () - 1;
+
+ /* Back up to the start of the pragma so pragma_lex () can parse it when
+ c-pragma lib asks it to. */
+ auto begin = last_token;
+ gcc_assert (begin->type == CPP_PRAGMA_EOL);
+ while (begin->type != CPP_PRAGMA)
+ {
+ if (cp_token_is_module_directive (begin))
+ return;
+ gcc_assert (begin != first_token);
+ --begin;
+ }
+ gcc_assert (!lexer->next_token);
+ gcc_assert (!lexer->last_token);
+ lexer->next_token = begin;
+ lexer->last_token = last_token;
+
+ /* Dispatch it. */
+ const unsigned int id
+ = cp_parser_pragma_kind (cp_lexer_consume_token (lexer));
+ if (id >= PRAGMA_FIRST_EXTERNAL)
+ c_invoke_early_pragma_handler (id);
+
+ /* Reset to normal state. */
+ lexer->next_token = lexer->last_token = nullptr;
+}
+
+/* The parser. */
+static cp_parser *cp_parser_new (cp_lexer *);
+static GTY (()) cp_parser *the_parser;
+
/* Create a new main C++ lexer, the lexer that gets tokens from the
- preprocessor. */
+ preprocessor, and also create the main parser. */
static cp_lexer *
cp_lexer_new_main (void)
@@ -652,6 +715,10 @@ cp_lexer_new_main (void)
if (modules_p ())
filter = module_token_cdtor (parse_in, filter);
+ /* Create the parser now, so we can use it to handle early pragmas. */
+ gcc_assert (!the_parser);
+ the_parser = cp_parser_new (lexer);
+
/* Get the remaining tokens from the preprocessor. */
while (tok->type != CPP_EOF)
{
@@ -659,6 +726,11 @@ cp_lexer_new_main (void)
/* Process the previous token. */
module_token_lang (tok->type, tok->keyword, tok->u.value,
tok->location, filter);
+
+ /* Check for early pragmas that need to be handled now. */
+ if (tok->type == CPP_PRAGMA_EOL)
+ cp_lexer_handle_early_pragma (lexer);
+
tok = vec_safe_push (lexer->buffer, cp_token ());
cp_lexer_get_preprocessor_token (C_LEX_STRING_NO_JOIN, tok);
}
@@ -890,10 +962,14 @@ cp_lexer_get_preprocessor_token (unsigned flags, cp_token *token)
else
{
if (warn_cxx11_compat
- && C_RID_CODE (token->u.value) >= RID_FIRST_CXX11
- && C_RID_CODE (token->u.value) <= RID_LAST_CXX11)
+ && ((C_RID_CODE (token->u.value) >= RID_FIRST_CXX11
+ && C_RID_CODE (token->u.value) <= RID_LAST_CXX11)
+ /* These are outside the CXX11 range. */
+ || C_RID_CODE (token->u.value) == RID_ALIGNOF
+ || C_RID_CODE (token->u.value) == RID_ALIGNAS
+ || C_RID_CODE (token->u.value)== RID_THREAD))
{
- /* Warn about the C++0x keyword (but still treat it as
+ /* Warn about the C++11 keyword (but still treat it as
an identifier). */
warning_at (token->location, OPT_Wc__11_compat,
"identifier %qE is a keyword in C++11",
@@ -2117,11 +2193,6 @@ pop_unparsed_function_queues (cp_parser *parser)
/* Prototypes. */
-/* Constructors and destructors. */
-
-static cp_parser *cp_parser_new
- (cp_lexer *);
-
/* Routines to parse various constructs.
Those that return `tree' will return the error_mark_node (rather
@@ -2884,18 +2955,6 @@ cp_parser_is_keyword (cp_token* token, enum rid keyword)
return token->keyword == keyword;
}
-/* Return TOKEN's pragma_kind if it is CPP_PRAGMA, otherwise
- PRAGMA_NONE. */
-
-static enum pragma_kind
-cp_parser_pragma_kind (cp_token *token)
-{
- if (token->type != CPP_PRAGMA)
- return PRAGMA_NONE;
- /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST. */
- return (enum pragma_kind) TREE_INT_CST_LOW (token->u.value);
-}
-
/* Helper function for cp_parser_error.
Having peeked a token of kind TOK1_KIND that might signify
a conflict marker, peek successor tokens to determine
@@ -3829,9 +3888,7 @@ cp_parser_skip_to_closing_parenthesis_1 (cp_parser *parser,
break;
case CPP_KEYWORD:
- if (token->keyword != RID__EXPORT
- && token->keyword != RID__MODULE
- && token->keyword != RID__IMPORT)
+ if (!cp_token_is_module_directive (token))
break;
/* FALLTHROUGH */
@@ -3932,9 +3989,7 @@ cp_parser_skip_to_end_of_statement (cp_parser* parser)
break;
case CPP_KEYWORD:
- if (token->keyword != RID__EXPORT
- && token->keyword != RID__MODULE
- && token->keyword != RID__IMPORT)
+ if (!cp_token_is_module_directive (token))
break;
/* FALLTHROUGH */
@@ -4021,9 +4076,7 @@ cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
break;
case CPP_KEYWORD:
- if (token->keyword != RID__EXPORT
- && token->keyword != RID__MODULE
- && token->keyword != RID__IMPORT)
+ if (!cp_token_is_module_directive (token))
break;
/* FALLTHROUGH */
@@ -6093,6 +6146,23 @@ cp_parser_primary_expression (cp_parser *parser,
/*decltype*/false, idk);
}
+/* Complain about missing template keyword when naming a dependent
+ member template. */
+
+static void
+missing_template_diag (location_t loc, diagnostic_t diag_kind = DK_WARNING)
+{
+ if (warning_suppressed_at (loc, OPT_Wmissing_template_keyword))
+ return;
+
+ gcc_rich_location richloc (loc);
+ richloc.add_fixit_insert_before ("template");
+ emit_diagnostic (diag_kind, &richloc, OPT_Wmissing_template_keyword,
+ "expected %qs keyword before dependent "
+ "template name", "template");
+ suppress_warning_at (loc, OPT_Wmissing_template_keyword);
+}
+
/* Parse an id-expression.
id-expression:
@@ -6268,9 +6338,7 @@ cp_parser_id_expression (cp_parser *parser,
operator. */
&& (cp_lexer_peek_token (parser->lexer)->type
<= CPP_LAST_PUNCTUATOR))
- warning_at (token->location, OPT_Wmissing_template_keyword,
- "expected %qs keyword before dependent "
- "template name", "template");
+ missing_template_diag (token->location);
}
return id;
@@ -14939,9 +15007,7 @@ cp_parser_declaration (cp_parser* parser, tree prefix_attrs)
else
cp_parser_module_export (parser);
}
- else if (token1->keyword == RID__EXPORT
- || token1->keyword == RID__IMPORT
- || token1->keyword == RID__MODULE)
+ else if (cp_token_is_module_directive (token1))
{
bool exporting = token1->keyword == RID__EXPORT;
cp_token *next = exporting ? token2 : token1;
@@ -30676,9 +30742,11 @@ cp_parser_lookup_name (cp_parser *parser, tree name,
}
else if (object_type)
{
+ bool dep = dependent_scope_p (object_type);
+
/* Look up the name in the scope of the OBJECT_TYPE, unless the
OBJECT_TYPE is not a class. */
- if (CLASS_TYPE_P (object_type))
+ if (!dep && CLASS_TYPE_P (object_type))
/* If the OBJECT_TYPE is a template specialization, it may
be instantiated during name lookup. In that case, errors
may be issued. Even if we rollback the current tentative
@@ -30702,6 +30770,21 @@ cp_parser_lookup_name (cp_parser *parser, tree name,
: is_template ? LOOK_want::TYPE
: prefer_type_arg (tag_type));
+ /* If we did unqualified lookup of a dependent member-qualified name and
+ found something, do we want to use it? P1787 clarified that we need
+ to look in the object scope first even if it's dependent, but for now
+ let's still use it in some cases.
+ FIXME remember unqualified lookup result to use if member lookup fails
+ at instantiation time. */
+ if (decl && dep && is_template)
+ {
+ saved_token_sentinel toks (parser->lexer, STS_ROLLBACK);
+ /* Only use the unqualified class template lookup if we're actually
+ looking at a template arg list. */
+ if (!cp_parser_skip_entire_template_parameter_list (parser))
+ decl = NULL_TREE;
+ }
+
/* If we know we're looking for a type (e.g. A in p->A::x),
mock up a typename. */
if (!decl && object_type && tag_type != none_type
@@ -44287,6 +44370,10 @@ cp_parser_omp_teams (cp_parser *parser, cp_token *pragma_tok,
static tree
cp_parser_omp_target_data (cp_parser *parser, cp_token *pragma_tok, bool *if_p)
{
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree clauses
= cp_parser_omp_all_clauses (parser, OMP_TARGET_DATA_CLAUSE_MASK,
"#pragma omp target data", pragma_tok);
@@ -44390,6 +44477,10 @@ cp_parser_omp_target_enter_data (cp_parser *parser, cp_token *pragma_tok,
return true;
}
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree clauses
= cp_parser_omp_all_clauses (parser, OMP_TARGET_ENTER_DATA_CLAUSE_MASK,
"#pragma omp target enter data", pragma_tok);
@@ -44405,6 +44496,14 @@ cp_parser_omp_target_enter_data (cp_parser *parser, cp_token *pragma_tok,
case GOMP_MAP_ALLOC:
map_seen = 3;
break;
+ case GOMP_MAP_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_TO);
+ map_seen = 3;
+ break;
+ case GOMP_MAP_ALWAYS_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_ALWAYS_TO);
+ map_seen = 3;
+ break;
case GOMP_MAP_FIRSTPRIVATE_POINTER:
case GOMP_MAP_FIRSTPRIVATE_REFERENCE:
case GOMP_MAP_ALWAYS_POINTER:
@@ -44414,7 +44513,7 @@ cp_parser_omp_target_enter_data (cp_parser *parser, cp_token *pragma_tok,
map_seen |= 1;
error_at (OMP_CLAUSE_LOCATION (*pc),
"%<#pragma omp target enter data%> with map-type other "
- "than %<to%> or %<alloc%> on %<map%> clause");
+ "than %<to%>, %<tofrom%> or %<alloc%> on %<map%> clause");
*pc = OMP_CLAUSE_CHAIN (*pc);
continue;
}
@@ -44481,6 +44580,10 @@ cp_parser_omp_target_exit_data (cp_parser *parser, cp_token *pragma_tok,
return true;
}
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree clauses
= cp_parser_omp_all_clauses (parser, OMP_TARGET_EXIT_DATA_CLAUSE_MASK,
"#pragma omp target exit data", pragma_tok);
@@ -44497,6 +44600,14 @@ cp_parser_omp_target_exit_data (cp_parser *parser, cp_token *pragma_tok,
case GOMP_MAP_DELETE:
map_seen = 3;
break;
+ case GOMP_MAP_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_FROM);
+ map_seen = 3;
+ break;
+ case GOMP_MAP_ALWAYS_TOFROM:
+ OMP_CLAUSE_SET_MAP_KIND (*pc, GOMP_MAP_ALWAYS_FROM);
+ map_seen = 3;
+ break;
case GOMP_MAP_FIRSTPRIVATE_POINTER:
case GOMP_MAP_FIRSTPRIVATE_REFERENCE:
case GOMP_MAP_ALWAYS_POINTER:
@@ -44506,8 +44617,8 @@ cp_parser_omp_target_exit_data (cp_parser *parser, cp_token *pragma_tok,
map_seen |= 1;
error_at (OMP_CLAUSE_LOCATION (*pc),
"%<#pragma omp target exit data%> with map-type other "
- "than %<from%>, %<release%> or %<delete%> on %<map%>"
- " clause");
+ "than %<from%>, %<tofrom%>, %<release%> or %<delete%> "
+ "on %<map%> clause");
*pc = OMP_CLAUSE_CHAIN (*pc);
continue;
}
@@ -44567,6 +44678,10 @@ cp_parser_omp_target_update (cp_parser *parser, cp_token *pragma_tok,
return true;
}
+ if (flag_openmp)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask | OMP_REQUIRES_TARGET_USED);
+
tree stmt = make_node (OMP_TARGET_UPDATE);
TREE_TYPE (stmt) = void_type_node;
OMP_TARGET_UPDATE_CLAUSES (stmt) = clauses;
@@ -46861,9 +46976,6 @@ cp_parser_omp_requires (cp_parser *parser, cp_token *pragma_tok)
cp_parser_skip_to_pragma_eol (parser, pragma_tok);
return false;
}
- if (p && this_req != OMP_REQUIRES_DYNAMIC_ALLOCATORS)
- sorry_at (cloc, "%qs clause on %<requires%> directive not "
- "supported yet", p);
if (p)
cp_lexer_consume_token (parser->lexer);
if (this_req)
@@ -47869,11 +47981,7 @@ cp_parser_transaction_cancel (cp_parser *parser)
return stmt;
}
-/* The parser. */
-
-static GTY (()) cp_parser *the_parser;
-
/* Special handling for the first token or line in the file. The first
thing in the file might be #pragma GCC pch_preprocess, which loads a
PCH file, which is a GC collection point. So we need to handle this
@@ -48368,9 +48476,7 @@ c_parse_file (void)
/* cp_lexer_new_main is called before doing any GC allocation
because tokenization might load a PCH file. */
- cp_lexer *lexer = cp_lexer_new_main ();
-
- the_parser = cp_parser_new (lexer);
+ cp_lexer_new_main ();
cp_parser_translation_unit (the_parser);
class_decl_loc_t::diag_mismatched_tags ();
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 28edc6a..59ee50c 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
Fixed by: C++20 modules. */
#include "config.h"
+#define INCLUDE_ALGORITHM // for std::equal
#include "system.h"
#include "coretypes.h"
#include "cp-tree.h"
@@ -4916,6 +4917,32 @@ template_parm_to_arg (tree t)
return t;
}
+/* If T looks like a generic template argument produced by template_parm_to_arg,
+ return the corresponding template parameter, otherwise return NULL_TREE. */
+
+static tree
+template_arg_to_parm (tree t)
+{
+ if (t == NULL_TREE)
+ return NULL_TREE;
+
+ if (ARGUMENT_PACK_P (t))
+ {
+ tree args = ARGUMENT_PACK_ARGS (t);
+ if (TREE_VEC_LENGTH (args) == 1
+ && PACK_EXPANSION_P (TREE_VEC_ELT (args, 0)))
+ t = PACK_EXPANSION_PATTERN (TREE_VEC_ELT (args, 0));
+ }
+
+ if (REFERENCE_REF_P (t))
+ t = TREE_OPERAND (t, 0);
+
+ if (TEMPLATE_PARM_P (t))
+ return t;
+ else
+ return NULL_TREE;
+}
+
/* Given a single level of template parameters (a TREE_VEC), return it
as a set of template arguments. */
@@ -10089,16 +10116,19 @@ lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
{
context = tsubst_aggr_type (context, arglist,
complain, in_decl, true);
- context = complete_type (context);
- if (is_dependent_type && arg_depth > 1)
+ /* Try completing the enclosing context if it's not already so. */
+ if (context != error_mark_node
+ && !COMPLETE_TYPE_P (context))
{
- /* If this is a dependent nested specialization such as
- A<T>::B<U> [with T=int, U=U], then completion of A<int>
- could have caused to register the desired specialization
- of B already, so check the table again (33959). */
- entry = type_specializations->find_with_hash (&elt, hash);
- if (entry)
- return entry->spec;
+ context = complete_type (context);
+ if (COMPLETE_TYPE_P (context))
+ {
+ /* Completion could have caused us to register the desired
+ specialization already, so check the table again. */
+ entry = type_specializations->find_with_hash (&elt, hash);
+ if (entry)
+ return entry->spec;
+ }
}
}
}
@@ -13513,26 +13543,49 @@ tree
tsubst_argument_pack (tree orig_arg, tree args, tsubst_flags_t complain,
tree in_decl)
{
+ /* This flag is used only during deduction, and we don't expect to
+ substitute such ARGUMENT_PACKs. */
+ gcc_assert (!ARGUMENT_PACK_INCOMPLETE_P (orig_arg));
+
/* Substitute into each of the arguments. */
tree pack_args = tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
args, complain, in_decl);
- tree new_arg = error_mark_node;
- if (pack_args != error_mark_node)
- {
- if (TYPE_P (orig_arg))
- {
- new_arg = cxx_make_type (TREE_CODE (orig_arg));
- SET_TYPE_STRUCTURAL_EQUALITY (new_arg);
- }
- else
- {
- new_arg = make_node (TREE_CODE (orig_arg));
- TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
- }
+ if (pack_args == error_mark_node)
+ return error_mark_node;
- ARGUMENT_PACK_ARGS (new_arg) = pack_args;
+ if (pack_args == ARGUMENT_PACK_ARGS (orig_arg))
+ return orig_arg;
+
+ /* If we're substituting into a generic ARGUMENT_PACK for a variadic
+ template parameter, we might be able to avoid allocating a new
+ ARGUMENT_PACK and reuse the corresponding ARGUMENT_PACK from ARGS
+ if the substituted result is identical to it. */
+ if (tree parm = template_arg_to_parm (orig_arg))
+ {
+ int level, index;
+ template_parm_level_and_index (parm, &level, &index);
+ if (TMPL_ARGS_DEPTH (args) >= level)
+ if (tree arg = TMPL_ARG (args, level, index))
+ if (TREE_CODE (arg) == TREE_CODE (orig_arg)
+ && ARGUMENT_PACK_ARGS (arg) == pack_args)
+ {
+ gcc_assert (!ARGUMENT_PACK_INCOMPLETE_P (arg));
+ return arg;
+ }
}
+ tree new_arg;
+ if (TYPE_P (orig_arg))
+ {
+ new_arg = cxx_make_type (TREE_CODE (orig_arg));
+ SET_TYPE_STRUCTURAL_EQUALITY (new_arg);
+ }
+ else
+ {
+ new_arg = make_node (TREE_CODE (orig_arg));
+ TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
+ }
+ ARGUMENT_PACK_ARGS (new_arg) = pack_args;
return new_arg;
}
@@ -13541,17 +13594,17 @@ tsubst_argument_pack (tree orig_arg, tree args, tsubst_flags_t complain,
tree
tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
{
- tree orig_t = t;
- int len, need_new = 0, i, expanded_len_adjust = 0, out;
- tree *elts;
-
if (t == error_mark_node)
return error_mark_node;
- len = TREE_VEC_LENGTH (t);
- elts = XALLOCAVEC (tree, len);
+ const int len = TREE_VEC_LENGTH (t);
+ tree *elts = XALLOCAVEC (tree, len);
+ int expanded_len_adjust = 0;
+
+ /* True iff the substituted result is identical to T. */
+ bool const_subst_p = true;
- for (i = 0; i < len; i++)
+ for (int i = 0; i < len; i++)
{
tree orig_arg = TREE_VEC_ELT (t, i);
tree new_arg;
@@ -13584,49 +13637,84 @@ tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
elts[i] = new_arg;
if (new_arg != orig_arg)
- need_new = 1;
+ const_subst_p = false;
}
- if (!need_new)
+ if (const_subst_p)
return t;
+ tree maybe_reuse = NULL_TREE;
+
+ /* If ARGS and T are both multi-level, the substituted result may be
+ identical to ARGS. */
+ if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (t)
+ && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args)
+ && TMPL_ARGS_DEPTH (t) == TMPL_ARGS_DEPTH (args))
+ maybe_reuse = args;
+ /* If T appears to be a vector of generic template arguments, the
+ substituted result may be identical to the corresponding level
+ from ARGS. */
+ else if (tree parm = template_arg_to_parm (TREE_VEC_ELT (t, 0)))
+ {
+ int level, index;
+ template_parm_level_and_index (parm, &level, &index);
+ if (index == 0 && TMPL_ARGS_DEPTH (args) >= level)
+ maybe_reuse = TMPL_ARGS_LEVEL (args, level);
+ }
+
+ /* If the substituted result is identical to MAYBE_REUSE, return
+ it and avoid allocating a new TREE_VEC, as an optimization. */
+ if (maybe_reuse != NULL_TREE
+ && TREE_VEC_LENGTH (maybe_reuse) == len
+ && std::equal (elts, elts+len, TREE_VEC_BEGIN (maybe_reuse)))
+ return maybe_reuse;
+
+ /* If T consists of only a pack expansion for which substitution yielded
+ a TREE_VEC of the expanded elements, then reuse that TREE_VEC instead
+ of effectively making a copy. */
+ if (len == 1
+ && PACK_EXPANSION_P (TREE_VEC_ELT (t, 0))
+ && TREE_CODE (elts[0]) == TREE_VEC)
+ return elts[0];
+
/* Make space for the expanded arguments coming from template
argument packs. */
- t = make_tree_vec (len + expanded_len_adjust);
- /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
+ tree r = make_tree_vec (len + expanded_len_adjust);
+ /* T can contain TREE_VECs. That happens if T contains the
arguments for a member template.
- In that case each TREE_VEC in ORIG_T represents a level of template
- arguments, and ORIG_T won't carry any non defaulted argument count.
+ In that case each TREE_VEC in T represents a level of template
+ arguments, and T won't carry any non defaulted argument count.
It will rather be the nested TREE_VECs that will carry one.
- In other words, ORIG_T carries a non defaulted argument count only
+ In other words, T carries a non defaulted argument count only
if it doesn't contain any nested TREE_VEC. */
- if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
+ if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (t))
{
- int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
+ int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
count += expanded_len_adjust;
- SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
+ SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (r, count);
}
- for (i = 0, out = 0; i < len; i++)
+
+ int out = 0;
+ for (int i = 0; i < len; i++)
{
- tree orig_arg = TREE_VEC_ELT (orig_t, i);
+ tree orig_arg = TREE_VEC_ELT (t, i);
if (orig_arg
- && (PACK_EXPANSION_P (orig_arg) || ARGUMENT_PACK_P (orig_arg))
+ && PACK_EXPANSION_P (orig_arg)
&& TREE_CODE (elts[i]) == TREE_VEC)
{
- int idx;
-
/* Now expand the template argument pack "in place". */
- for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
- TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
+ for (int idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
+ TREE_VEC_ELT (r, out) = TREE_VEC_ELT (elts[i], idx);
}
else
{
- TREE_VEC_ELT (t, out) = elts[i];
+ TREE_VEC_ELT (r, out) = elts[i];
out++;
}
}
+ gcc_assert (out == TREE_VEC_LENGTH (r));
- return t;
+ return r;
}
/* Substitute ARGS into one level PARMS of template parameters. */
@@ -14962,32 +15050,21 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
if (!spec)
{
- int args_depth = TMPL_ARGS_DEPTH (args);
- int parms_depth = TMPL_ARGS_DEPTH (DECL_TI_ARGS (t));
tmpl = DECL_TI_TEMPLATE (t);
gen_tmpl = most_general_template (tmpl);
- if (args_depth == parms_depth
- && !PRIMARY_TEMPLATE_P (gen_tmpl))
- /* The DECL_TI_ARGS in this case are the generic template
- arguments for the enclosing class template, so we can
- shortcut substitution (which would just be the identity
- mapping). */
- argvec = args;
- else
- {
- argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
- /* Coerce the innermost arguments again if necessary. If
- there's fewer levels of args than of parms, then the
- substitution could not have changed the innermost args
- (modulo level lowering). */
- if (args_depth >= parms_depth && argvec != error_mark_node)
- argvec = (coerce_innermost_template_parms
- (DECL_TEMPLATE_PARMS (gen_tmpl),
- argvec, t, complain,
- /*all*/true, /*defarg*/true));
- if (argvec == error_mark_node)
- RETURN (error_mark_node);
- }
+ argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
+ if (argvec != error_mark_node
+ && PRIMARY_TEMPLATE_P (gen_tmpl)
+ && TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (argvec))
+ /* We're fully specializing a template declaration, so
+ we need to coerce the innermost arguments corresponding to
+ the template. */
+ argvec = (coerce_innermost_template_parms
+ (DECL_TEMPLATE_PARMS (gen_tmpl),
+ argvec, t, complain,
+ /*all*/true, /*defarg*/true));
+ if (argvec == error_mark_node)
+ RETURN (error_mark_node);
hash = spec_hasher::hash (gen_tmpl, argvec);
spec = retrieve_specialization (gen_tmpl, argvec, hash);
}
@@ -18547,6 +18624,29 @@ lookup_init_capture_pack (tree decl)
return r;
}
+/* T is an operand of a template tree being substituted. Return whether
+ T is dependent such that we should suppress some warnings that would
+ make sense if the substituted expression were written directly, like
+ template <int I> bool f() { return I == 2; }
+ We don't want to warn when instantiating f that comparing two constants
+ always has the same value.
+
+ This is a more limited concept of dependence than instantiation-dependent;
+ here we don't care whether substitution could fail. */
+
+static bool
+dependent_operand_p (tree t)
+{
+ while (TREE_CODE (t) == IMPLICIT_CONV_EXPR)
+ t = TREE_OPERAND (t, 0);
+ ++processing_template_decl;
+ bool r = (potential_constant_expression (t)
+ ? value_dependent_expression_p (t)
+ : type_dependent_expression_p (t));
+ --processing_template_decl;
+ return r;
+}
+
/* Like tsubst_copy for expressions, etc. but also does semantic
processing. */
@@ -18872,8 +18972,13 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
IF_STMT_CONSTEVAL_P (stmt) = IF_STMT_CONSTEVAL_P (t);
if (IF_STMT_CONSTEXPR_P (t))
args = add_extra_args (IF_STMT_EXTRA_ARGS (t), args, complain, in_decl);
- tmp = RECUR (IF_COND (t));
- tmp = finish_if_stmt_cond (tmp, stmt);
+ {
+ tree cond = IF_COND (t);
+ bool was_dep = dependent_operand_p (cond);
+ cond = RECUR (cond);
+ warning_sentinel s1(warn_address, was_dep);
+ tmp = finish_if_stmt_cond (cond, stmt);
+ }
if (IF_STMT_CONSTEXPR_P (t)
&& instantiation_dependent_expression_p (tmp))
{
@@ -20422,15 +20527,8 @@ tsubst_copy_and_build (tree t,
warnings that depend on the range of the types involved. */
tree op0 = TREE_OPERAND (t, 0);
tree op1 = TREE_OPERAND (t, 1);
- auto dep_p = [](tree t) {
- ++processing_template_decl;
- bool r = (potential_constant_expression (t)
- ? value_dependent_expression_p (t)
- : type_dependent_expression_p (t));
- --processing_template_decl;
- return r;
- };
- const bool was_dep = dep_p (op0) || dep_p (op1);
+ const bool was_dep = (dependent_operand_p (op0)
+ || dependent_operand_p (op1));
op0 = RECUR (op0);
op1 = RECUR (op1);
@@ -20438,6 +20536,7 @@ tsubst_copy_and_build (tree t,
warning_sentinel s2(warn_div_by_zero, was_dep);
warning_sentinel s3(warn_logical_op, was_dep);
warning_sentinel s4(warn_tautological_compare, was_dep);
+ warning_sentinel s5(warn_address, was_dep);
tree r = build_x_binary_op
(input_location, TREE_CODE (t),
@@ -22982,6 +23081,7 @@ type_unification_real (tree tparms,
deduced from a later argument than the one from which
this parameter can be deduced. */
if (TREE_CODE (tparm) == PARM_DECL
+ && !is_auto (TREE_TYPE (tparm))
&& uses_template_parms (TREE_TYPE (tparm))
&& saw_undeduced < 2)
{
@@ -23042,6 +23142,7 @@ type_unification_real (tree tparms,
if (saw_undeduced == 1
&& TREE_CODE (parm) == PARM_DECL
+ && !is_auto (TREE_TYPE (parm))
&& uses_template_parms (TREE_TYPE (parm)))
{
/* The type of this non-type parameter depends on undeduced
@@ -27960,6 +28061,15 @@ type_dependent_expression_p (tree expression)
&& DECL_INITIAL (expression))
return true;
+ /* Pull a FUNCTION_DECL out of a BASELINK if we can. */
+ if (BASELINK_P (expression))
+ {
+ if (BASELINK_OPTYPE (expression)
+ && dependent_type_p (BASELINK_OPTYPE (expression)))
+ return true;
+ expression = BASELINK_FUNCTIONS (expression);
+ }
+
/* A function or variable template-id is type-dependent if it has any
dependent template arguments. */
if (VAR_OR_FUNCTION_DECL_P (expression)
diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc
index 24cca99..2344b5e 100644
--- a/gcc/cp/semantics.cc
+++ b/gcc/cp/semantics.cc
@@ -1029,9 +1029,9 @@ maybe_warn_for_constant_evaluated (tree cond, bool constexpr_if)
IF_STMT. */
tree
-finish_if_stmt_cond (tree cond, tree if_stmt)
+finish_if_stmt_cond (tree orig_cond, tree if_stmt)
{
- cond = maybe_convert_cond (cond);
+ tree cond = maybe_convert_cond (orig_cond);
if (IF_STMT_CONSTEXPR_P (if_stmt)
&& !type_dependent_expression_p (cond)
&& require_constant_expression (cond)
@@ -1045,7 +1045,11 @@ finish_if_stmt_cond (tree cond, tree if_stmt)
cond = cxx_constant_value (cond, NULL_TREE);
}
else
- maybe_warn_for_constant_evaluated (cond, /*constexpr_if=*/false);
+ {
+ maybe_warn_for_constant_evaluated (cond, /*constexpr_if=*/false);
+ if (processing_template_decl)
+ cond = orig_cond;
+ }
finish_cond (&IF_COND (if_stmt), cond);
add_stmt (if_stmt);
THEN_CLAUSE (if_stmt) = push_stmt_list ();
diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
index f9ce14f..6e4f23a 100644
--- a/gcc/cp/typeck.cc
+++ b/gcc/cp/typeck.cc
@@ -6344,7 +6344,7 @@ build_x_shufflevector (location_t loc, vec<tree, va_gc> *args,
auto_vec<tree, 16> mask;
for (unsigned i = 2; i < args->length (); ++i)
{
- tree idx = maybe_constant_value ((*args)[i]);
+ tree idx = fold_non_dependent_expr ((*args)[i], complain);
mask.safe_push (idx);
}
tree exp = c_build_shufflevector (loc, arg0, arg1, mask, complain & tf_error);
diff --git a/gcc/cprop.cc b/gcc/cprop.cc
index cf01c2d..580f811 100644
--- a/gcc/cprop.cc
+++ b/gcc/cprop.cc
@@ -1953,15 +1953,18 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_rtl_cprop (m_ctxt); }
- virtual bool gate (function *fun)
+ opt_pass * clone () final override { return new pass_rtl_cprop (m_ctxt); }
+ bool gate (function *fun) final override
{
return optimize > 0 && flag_gcse
&& !fun->calls_setjmp
&& dbg_cnt (cprop);
}
- virtual unsigned int execute (function *) { return execute_rtl_cprop (); }
+ unsigned int execute (function *) final override
+ {
+ return execute_rtl_cprop ();
+ }
}; // class pass_rtl_cprop
diff --git a/gcc/cse.cc b/gcc/cse.cc
index a18b599..b13afd4 100644
--- a/gcc/cse.cc
+++ b/gcc/cse.cc
@@ -7571,8 +7571,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize > 0; }
- virtual unsigned int execute (function *) { return rest_of_handle_cse (); }
+ bool gate (function *) final override { return optimize > 0; }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_cse ();
+ }
}; // class pass_cse
@@ -7642,12 +7645,15 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_rerun_cse_after_loop;
}
- virtual unsigned int execute (function *) { return rest_of_handle_cse2 (); }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_cse2 ();
+ }
}; // class pass_cse2
@@ -7715,12 +7721,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_rerun_cse_after_global_opts;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_cse_after_global_opts ();
}
diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index 537ae39..f1d1f00 100644
--- a/gcc/d/ChangeLog
+++ b/gcc/d/ChangeLog
@@ -1,3 +1,122 @@
+2022-07-06 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * dmd/MERGE: Merge upstream dmd 56589f0f4.
+
+2022-07-06 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * Make-lang.in (NOEXCEPTION_DFLAGS): Define.
+ (ALL_DFLAGS): Add NO_EXCEPTION_DFLAGS.
+
+2022-06-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/106139
+ * d-convert.cc (convert_expr): Handle casting from array to vector.
+ (convert_for_rvalue): Rewrite vector to array casts of the same
+ element type into a constructor.
+ (convert_for_assignment): Return calling convert_for_rvalue.
+ * expr.cc (ExprVisitor::visit (VectorExp *)): Handle generating a
+ vector expression from a static array.
+ * toir.cc (IRVisitor::visit (ReturnStatement *)): Call
+ convert_for_rvalue on return value.
+
+2022-06-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * intrinsics.cc (build_shuffle_mask_type): Use to_constant when
+ getting the number of subparts from a vector type.
+ (expand_intrinsic_vec_shufflevector): Likewise.
+
+2022-06-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * intrinsics.cc: Include diagnostic.h, langhooks.h,
+ vec-perm-indices.h.
+ (maybe_set_intrinsic): Add cases for new simd intrinsics.
+ (warn_mismatched_return_type): New function.
+ (warn_mismatched_argument): New function.
+ (build_shuffle_mask_type): New function.
+ (maybe_warn_intrinsic_mismatch): New function.
+ (expand_intrinsic_vec_cond): New function.
+ (expand_intrinsic_vec_convert): New function.
+ (expand_intrinsic_vec_blend): New function.
+ (expand_intrinsic_vec_shuffle): New function.
+ (expand_intrinsic_vec_shufflevector): New function.
+ (expand_intrinsic_vec_load_unaligned): New function.
+ (expand_intrinsic_vec_store_unaligned): New function.
+ (maybe_expand_intrinsic): Check signature of intrinsic before handing
+ off to front-end lowering. Add cases for new simd intrinsics.
+ * intrinsics.def (INTRINSIC_LOADUNALIGNED): Define intrinsic.
+ (INTRINSIC_STOREUNALIGNED): Define intrinsic.
+ (INTRINSIC_SHUFFLE): Define intrinsic.
+ (INTRINSIC_SHUFFLEVECTOR): Define intrinsic.
+ (INTRINSIC_CONVERTVECTOR): Define intrinsic.
+ (INTRINSIC_BLENDVECTOR): Define intrinsic.
+ (INTRINSIC_EQUALMASK): Define intrinsic.
+ (INTRINSIC_NOTEQUALMASK): Define intrinsic.
+ (INTRINSIC_GREATERMASK): Define intrinsic.
+ (INTRINSIC_GREATEREQUALMASK): Define intrinsic.
+
+2022-06-28 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-codegen.cc: Include gimple-expr.h.
+ (force_target_expr): Use create_tmp_var_raw.
+ * decl.cc: Inlucde gimple-expr.h.
+ (build_local_temp): Use create_tmp_var_raw.
+ * intrinsics.cc (expand_intrinsic_rotate): Use get_callee_fndecl.
+ (maybe_expand_intrinsic): Likewise.
+
+2022-06-28 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-attribs.cc (handle_omp_declare_simd_attribute): New function.
+ (d_handle_simd_attribute): New function.
+ (d_langhook_common_attribute_table): Add 'omp declare simd' attribute.
+ (d_langhook_attribute_table): Add simd attribute.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-attribs.cc (d_handle_section_attribute): Update error message.
+ (d_handle_symver_attribute): Likewise.
+ (d_handle_no_sanitize_attribute): Likewise.
+ (d_handle_visibility_attribute): Likewise.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/105413
+ * d-attribs.cc (d_handle_register_attribute): New function.
+ (d_langhook_attribute_table): Add register attribute.
+ * d-codegen.cc (d_mark_addressable): Error if taken address of
+ register variable.
+ (build_frame_type): Error if register variable has non-local
+ references.
+ * d-tree.h (d_mark_addressable): Add complain parameter.
+ * decl.cc (get_symbol_decl): Mark register varibles DECL_REGISTER.
+ Error when register variable declared thread-local or extern.
+ * expr.cc (ExprVisitor::visit (IndexExp *)): Don't complain about
+ marking register vectors as addressable in an ARRAY_REF.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * d-codegen.cc (build_array_index): Rename to...
+ (build_pointer_index): ...this.
+ * d-tree.h (build_array_index): Rename declaration to...
+ (build_pointer_index): ...this.
+ * expr.cc (ExprVisitor::visit (IndexExp *)): Construct indexes of
+ ARRAY_TYPE using ARRAY_REF.
+ (ExprVisitor::visit (SliceExp *)): Update.
+ * intrinsics.cc (expand_intrinsic_bt): Update.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * dmd/MERGE: Merge upstream dmd 529110f66.
+ * decl.cc (DeclVisitor::visit (TupleDeclaration *)): Update for new
+ front-end interface.
+ * types.cc (layout_aggregate_members): Likewise.
+
+2022-06-22 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * dmd/MERGE: Merge upstream dmd 6203135dc.
+ * typeinfo.cc (TypeInfoVisitor::visit (TypeInfoStructDeclaration *)):
+ Update for new front-end interface.
+ (SpeculativeTypeVisitor::visit (TypeStruct *)): Likewise.
+
2022-06-15 Iain Buclaw <ibuclaw@gdcproject.org>
* d-attribs.cc (d_langhook_attribute_table): Add no_sanitize.
diff --git a/gcc/d/Make-lang.in b/gcc/d/Make-lang.in
index 9f13437..6f9b2e5 100644
--- a/gcc/d/Make-lang.in
+++ b/gcc/d/Make-lang.in
@@ -57,8 +57,12 @@ CHECKING_DFLAGS =
endif
WARN_DFLAGS = -Wall -Wdeprecated $(NOCOMMON_FLAG)
+# D front-end doesn't use exceptions, but it does require RTTI.
+NOEXCEPTION_DFLAGS = $(filter-out -fno-rtti, $(NOEXCEPTION_FLAGS))
+
ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -fversion=IN_GCC $(CHECKING_DFLAGS) \
- $(PICFLAG) $(ALIASING_FLAGS) $(COVERAGE_FLAGS) $(WARN_DFLAGS)
+ $(PICFLAG) $(ALIASING_FLAGS) $(NOEXCEPTION_DFLAGS) $(COVERAGE_FLAGS) \
+ $(WARN_DFLAGS)
DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@
DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
diff --git a/gcc/d/d-attribs.cc b/gcc/d/d-attribs.cc
index 4b54426..04f7f16 100644
--- a/gcc/d/d-attribs.cc
+++ b/gcc/d/d-attribs.cc
@@ -58,6 +58,7 @@ static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
static tree handle_transaction_pure_attribute (tree *, tree, tree, int, bool *);
static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
static tree handle_fnspec_attribute (tree *, tree, tree, int, bool *);
+static tree handle_omp_declare_simd_attribute (tree *, tree, tree, int, bool *);
/* D attribute handlers for user defined attributes. */
static tree d_handle_noinline_attribute (tree *, tree, tree, int, bool *);
@@ -75,10 +76,12 @@ static tree d_handle_weak_attribute (tree *, tree, tree, int, bool *) ;
static tree d_handle_noplt_attribute (tree *, tree, tree, int, bool *) ;
static tree d_handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
static tree d_handle_cold_attribute (tree *, tree, tree, int, bool *);
+static tree d_handle_register_attribute (tree *, tree, tree, int, bool *);
static tree d_handle_restrict_attribute (tree *, tree, tree, int, bool *);
static tree d_handle_used_attribute (tree *, tree, tree, int, bool *);
static tree d_handle_visibility_attribute (tree *, tree, tree, int, bool *);
static tree d_handle_no_sanitize_attribute (tree *, tree, tree, int, bool *);
+static tree d_handle_simd_attribute (tree *, tree, tree, int, bool *);
/* Helper to define attribute exclusions. */
#define ATTR_EXCL(name, function, type, variable) \
@@ -185,6 +188,8 @@ const attribute_spec d_langhook_common_attribute_table[] =
handle_type_generic_attribute, NULL),
ATTR_SPEC ("fn spec", 1, 1, false, true, true, false,
handle_fnspec_attribute, NULL),
+ ATTR_SPEC ("omp declare simd", 0, -1, true, false, false, false,
+ handle_omp_declare_simd_attribute, NULL),
ATTR_SPEC (NULL, 0, 0, false, false, false, false, NULL, NULL),
};
@@ -223,8 +228,12 @@ const attribute_spec d_langhook_attribute_table[] =
d_handle_cold_attribute, attr_cold_hot_exclusions),
ATTR_SPEC ("no_sanitize", 1, -1, true, false, false, false,
d_handle_no_sanitize_attribute, NULL),
+ ATTR_SPEC ("register", 1, 1, true, false, false, false,
+ d_handle_register_attribute, NULL),
ATTR_SPEC ("restrict", 0, 0, true, false, false, false,
d_handle_restrict_attribute, NULL),
+ ATTR_SPEC ("simd", 0, 1, true, false, false, false,
+ d_handle_simd_attribute, NULL),
ATTR_SPEC ("used", 0, 0, true, false, false, false,
d_handle_used_attribute, NULL),
ATTR_SPEC ("visibility", 1, 1, false, false, false, false,
@@ -661,6 +670,16 @@ handle_fnspec_attribute (tree *, tree, tree args, int, bool *)
return NULL_TREE;
}
+/* Handle an "omp declare simd" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+tree
+handle_omp_declare_simd_attribute (tree *node, tree, tree, int, bool *)
+{
+ gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
+ return NULL_TREE;
+}
+
/* Language specific attribute handlers.
These functions take the arguments:
(tree *node, tree name, tree args, int flags, bool *no_add_attrs) */
@@ -1012,7 +1031,7 @@ d_handle_section_attribute (tree *node, tree name, tree args, int flags,
if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
{
- error ("section attribute argument not a string constant");
+ error ("%qE attribute argument not a string constant", name);
*no_add_attrs = true;
return NULL_TREE;
}
@@ -1062,7 +1081,8 @@ d_handle_section_attribute (tree *node, tree name, tree args, int flags,
struct attribute_spec.handler. */
static tree
-d_handle_symver_attribute (tree *node, tree, tree args, int, bool *no_add_attrs)
+d_handle_symver_attribute (tree *node, tree name, tree args, int,
+ bool *no_add_attrs)
{
if (TREE_CODE (*node) != FUNCTION_DECL && TREE_CODE (*node) != VAR_DECL)
{
@@ -1085,7 +1105,7 @@ d_handle_symver_attribute (tree *node, tree, tree args, int, bool *no_add_attrs)
tree symver = TREE_VALUE (args);
if (TREE_CODE (symver) != STRING_CST)
{
- error ("%<symver%> attribute argument not a string constant");
+ error ("%qE attribute argument not a string constant", name);
*no_add_attrs = true;
return NULL_TREE;
}
@@ -1388,7 +1408,7 @@ d_handle_no_sanitize_attribute (tree *node, tree name, tree args, int,
tree id = TREE_VALUE (args);
if (TREE_CODE (id) != STRING_CST)
{
- error ("%qE argument not a string", name);
+ error ("%qE attribute argument not a string constant", name);
return NULL_TREE;
}
@@ -1409,8 +1429,41 @@ d_handle_no_sanitize_attribute (tree *node, tree name, tree args, int,
else
{
DECL_ATTRIBUTES (*node) = tree_cons (get_identifier ("no_sanitize"),
- build_int_cst (d_uint_type, flags),
- DECL_ATTRIBUTES (*node));
+ build_int_cst (d_uint_type, flags),
+ DECL_ATTRIBUTES (*node));
+ }
+
+ return NULL_TREE;
+}
+
+/* Handle a "register" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+d_handle_register_attribute (tree *node, tree name, tree args, int,
+ bool *no_add_attrs)
+{
+ if (!VAR_P (*node))
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ }
+ else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
+ {
+ error ("%qE attribute argument not a string constant", name);
+ *no_add_attrs = true;
+ }
+ else if (TREE_STRING_LENGTH (TREE_VALUE (args)) == 0
+ || TREE_STRING_POINTER (TREE_VALUE (args))[0] == '\0')
+ {
+ error ("register name not specified for %q+D", *node);
+ *no_add_attrs = true;
+ }
+ else
+ {
+ DECL_REGISTER (*node) = 1;
+ set_user_assembler_name (*node, TREE_STRING_POINTER (TREE_VALUE (args)));
+ DECL_HARD_REGISTER (*node) = 1;
}
return NULL_TREE;
@@ -1437,6 +1490,55 @@ d_handle_restrict_attribute (tree *node, tree name, tree, int,
return NULL_TREE;
}
+/* Handle a "simd" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+d_handle_simd_attribute (tree *node, tree name, tree args, int,
+ bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute ignored", name);
+ *no_add_attrs = true;
+ return NULL_TREE;
+ }
+
+ tree omp_attr = get_identifier ("omp declare simd");
+ tree omp_flags = NULL_TREE;
+ if (args)
+ {
+ tree id = TREE_VALUE (args);
+
+ if (TREE_CODE (id) != STRING_CST)
+ {
+ error ("%qE attribute argument not a string constant", name);
+ *no_add_attrs = true;
+ return NULL_TREE;
+ }
+
+ if (strcmp (TREE_STRING_POINTER (id), "notinbranch") == 0)
+ omp_flags = build_omp_clause (DECL_SOURCE_LOCATION (*node),
+ OMP_CLAUSE_NOTINBRANCH);
+ else if (strcmp (TREE_STRING_POINTER (id), "inbranch") == 0)
+ omp_flags = build_omp_clause (DECL_SOURCE_LOCATION (*node),
+ OMP_CLAUSE_INBRANCH);
+ else
+ {
+ error ("only %<inbranch%> and %<notinbranch%> flags are "
+ "allowed for %<simd%> attribute");
+ *no_add_attrs = true;
+ return NULL_TREE;
+ }
+ }
+
+ DECL_ATTRIBUTES (*node) =
+ tree_cons (omp_attr, build_tree_list (NULL_TREE, omp_flags),
+ DECL_ATTRIBUTES (*node));
+
+ return NULL_TREE;
+}
+
/* Handle a "used" attribute; arguments as in
struct attribute_spec.handler. */
@@ -1489,7 +1591,7 @@ d_handle_visibility_attribute (tree *node, tree name, tree args,
tree id = TREE_VALUE (args);
if (TREE_CODE (id) != STRING_CST)
{
- error ("visibility argument not a string");
+ error ("%qE attribute argument not a string constant", name);
return NULL_TREE;
}
diff --git a/gcc/d/d-codegen.cc b/gcc/d/d-codegen.cc
index 0e14654..2d90899 100644
--- a/gcc/d/d-codegen.cc
+++ b/gcc/d/d-codegen.cc
@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "stor-layout.h"
#include "attribs.h"
#include "function.h"
+#include "gimple-expr.h"
#include "d-tree.h"
@@ -623,11 +624,8 @@ build_target_expr (tree decl, tree exp)
tree
force_target_expr (tree exp)
{
- tree decl = build_decl (input_location, VAR_DECL, NULL_TREE,
- TREE_TYPE (exp));
+ tree decl = create_tmp_var_raw (TREE_TYPE (exp));
DECL_CONTEXT (decl) = current_function_decl;
- DECL_ARTIFICIAL (decl) = 1;
- DECL_IGNORED_P (decl) = 1;
layout_decl (decl, 0);
return build_target_expr (decl, exp);
@@ -697,11 +695,12 @@ build_address (tree exp)
return compound_expr (init, exp);
}
-/* Mark EXP saying that we need to be able to take the
- address of it; it should not be allocated in a register. */
+/* Mark EXP saying that we need to be able to take the address of it; it should
+ not be allocated in a register. When COMPLAIN is true, issue an error if we
+ are marking a register variable. */
tree
-d_mark_addressable (tree exp)
+d_mark_addressable (tree exp, bool complain)
{
switch (TREE_CODE (exp))
{
@@ -713,12 +712,22 @@ d_mark_addressable (tree exp)
d_mark_addressable (TREE_OPERAND (exp, 0));
break;
- case PARM_DECL:
case VAR_DECL:
+ if (complain && DECL_REGISTER (exp))
+ {
+ if (DECL_HARD_REGISTER (exp) || DECL_EXTERNAL (exp))
+ error ("address of explicit register variable %qD requested", exp);
+ else
+ error ("address of register variable %qD requested", exp);
+ }
+
+ /* Fall through. */
+ case PARM_DECL:
case RESULT_DECL:
case CONST_DECL:
case FUNCTION_DECL:
- TREE_ADDRESSABLE (exp) = 1;
+ if (!VAR_P (exp) || !DECL_HARD_REGISTER (exp))
+ TREE_ADDRESSABLE (exp) = 1;
break;
case CONSTRUCTOR:
@@ -1626,7 +1635,7 @@ build_deref (tree exp)
/* Builds pointer offset expression PTR[INDEX]. */
tree
-build_array_index (tree ptr, tree index)
+build_pointer_index (tree ptr, tree index)
{
if (error_operand_p (ptr) || error_operand_p (index))
return error_mark_node;
@@ -2704,7 +2713,16 @@ build_frame_type (tree ffi, FuncDeclaration *fd)
if ((v->edtor && (v->storage_class & STCparameter))
|| v->needsScopeDtor ())
error_at (make_location_t (v->loc),
- "has scoped destruction, cannot build closure");
+ "variable %qs has scoped destruction, "
+ "cannot build closure", v->toChars ());
+ }
+
+ if (DECL_REGISTER (vsym))
+ {
+ /* Because the value will be in memory, not a register. */
+ error_at (make_location_t (v->loc),
+ "explicit register variable %qs cannot be used in nested "
+ "function", v->toChars ());
}
}
diff --git a/gcc/d/d-convert.cc b/gcc/d/d-convert.cc
index 3a6a32a..ec5da6c 100644
--- a/gcc/d/d-convert.cc
+++ b/gcc/d/d-convert.cc
@@ -502,6 +502,15 @@ convert_expr (tree exp, Type *etype, Type *totype)
gcc_assert (totype->size () == etype->size ());
result = build_vconvert (build_ctype (totype), exp);
}
+ else if (tbtype->ty == TY::Tvector && tbtype->size () == ebtype->size ())
+ {
+ /* Allow casting from array to vector as if its an unaligned load. */
+ tree type = build_ctype (totype);
+ tree unaligned_type = build_variant_type_copy (type);
+ SET_TYPE_ALIGN (unaligned_type, 1 * BITS_PER_UNIT);
+ TYPE_USER_ALIGN (unaligned_type) = 1;
+ result = convert (type, build_vconvert (unaligned_type, exp));
+ }
else
{
error ("cannot cast expression of type %qs to type %qs",
@@ -643,6 +652,39 @@ convert_for_rvalue (tree expr, Type *etype, Type *totype)
result = convert (build_ctype (tbtype), result);
}
+ if (tbtype->ty == TY::Tsarray
+ && ebtype->ty == TY::Tsarray
+ && tbtype->nextOf ()->ty == ebtype->nextOf ()->ty
+ && INDIRECT_REF_P (expr)
+ && CONVERT_EXPR_CODE_P (TREE_CODE (TREE_OPERAND (expr, 0)))
+ && TREE_CODE (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)) == ADDR_EXPR)
+ {
+ /* If expression is a vector that was casted to an array either by
+ explicit type cast or by taking the vector's `.array' value, strip the
+ reinterpret cast and build a constructor instead. */
+ tree ptr = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
+
+ if (VECTOR_TYPE_P (TREE_TYPE (TREE_TYPE (ptr))))
+ {
+ /* Rewrite: `*(Array *)&vector'
+ into: `{ vector[0], vector[1], ... }' */
+ tree array = d_save_expr (TREE_OPERAND (ptr, 0));
+ array = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (expr), array);
+
+ uinteger_t dim = tbtype->isTypeSArray ()->dim->toUInteger ();
+ vec <constructor_elt, va_gc> *elms = NULL;
+ for (uinteger_t i = 0; i < dim; i++)
+ {
+ tree index = size_int (i);
+ tree value = build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (array)),
+ array, index, NULL_TREE, NULL_TREE);
+ CONSTRUCTOR_APPEND_ELT (elms, index, value);
+ }
+
+ return build_constructor (build_ctype (totype), elms);
+ }
+ }
+
return result ? result : convert_expr (expr, etype, totype);
}
@@ -703,7 +745,7 @@ convert_for_assignment (tree expr, Type *etype, Type *totype)
return expr;
}
- return convert_expr (expr, etype, totype);
+ return convert_for_rvalue (expr, etype, totype);
}
/* Return a TREE representation of EXPR converted to represent
diff --git a/gcc/d/d-tree.h b/gcc/d/d-tree.h
index 7517463..c3e95e4 100644
--- a/gcc/d/d-tree.h
+++ b/gcc/d/d-tree.h
@@ -549,7 +549,7 @@ extern tree stabilize_expr (tree *);
extern tree build_target_expr (tree, tree);
extern tree force_target_expr (tree);
extern tree build_address (tree);
-extern tree d_mark_addressable (tree);
+extern tree d_mark_addressable (tree, bool = true);
extern tree d_mark_used (tree);
extern tree d_mark_read (tree);
extern tree build_memcmp_call (tree, tree, tree);
@@ -578,7 +578,7 @@ extern tree imaginary_part (tree);
extern tree complex_expr (tree, tree, tree);
extern tree indirect_ref (tree, tree);
extern tree build_deref (tree);
-extern tree build_array_index (tree, tree);
+extern tree build_pointer_index (tree, tree);
extern tree build_offset_op (tree_code, tree, tree);
extern tree build_offset (tree, tree);
extern tree build_memref (tree, tree, tree);
diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc
index 8676a1b..3caa465 100644
--- a/gcc/d/decl.cc
+++ b/gcc/d/decl.cc
@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see
#include "alloc-pool.h"
#include "symbol-summary.h"
#include "symtab-thunks.h"
+#include "gimple-expr.h"
#include "d-tree.h"
#include "d-target.h"
@@ -225,9 +226,9 @@ public:
RootObject *o = (*d->objects)[i];
if (o->dyncast () == DYNCAST_EXPRESSION)
{
- DsymbolExp *de = ((Expression *) o)->isDsymbolExp ();
- if (de != NULL && de->s->isDeclaration ())
- this->build_dsymbol (de->s);
+ VarExp *ve = ((Expression *) o)->isVarExp ();
+ if (ve)
+ this->build_dsymbol (ve->var);
}
}
}
@@ -670,10 +671,14 @@ public:
rest_of_decl_compilation (decl, 1, 0);
}
}
- else if (d->isDataseg () && !(d->storage_class & STCextern))
+ else if (d->isDataseg ())
{
tree decl = get_symbol_decl (d);
+ /* Only need to build the VAR_DECL for extern declarations. */
+ if (d->storage_class & STCextern)
+ return;
+
/* Duplicated VarDeclarations map to the same symbol. Check if this
is the one declaration which will be emitted. */
tree ident = DECL_ASSEMBLER_NAME (decl);
@@ -1343,7 +1348,11 @@ get_symbol_decl (Declaration *decl)
if (decl->storage_class & STCvolatile)
TREE_THIS_VOLATILE (decl->csym) = 1;
- /* Likewise, so could the deprecated attribute. */
+ /* Symbol was marked register. */
+ if (decl->storage_class & STCregister)
+ DECL_REGISTER (decl->csym) = 1;
+
+ /* Symbol was declared with deprecated attribute. */
if (decl->storage_class & STCdeprecated)
TREE_DEPRECATED (decl->csym) = 1;
@@ -1376,6 +1385,18 @@ get_symbol_decl (Declaration *decl)
/* Apply any user attributes that may affect semantic meaning. */
apply_user_attributes (decl, decl->csym);
+ /* Handle any conflicts between D language attributes and compiler-recognized
+ * user attributes. */
+ if (VAR_P (decl->csym) && DECL_HARD_REGISTER (decl->csym))
+ {
+ if (decl->storage_class & STCextern)
+ error_at (make_location_t (decl->loc), "explicit register variable "
+ "%qs declared %<extern%>", decl->toChars ());
+ else if (decl->isThreadlocal ())
+ error_at (make_location_t (decl->loc), "explicit register variable "
+ "%qs declared thread local", decl->toChars ());
+ }
+
/* %% Probably should be a little more intelligent about setting this. */
TREE_USED (decl->csym) = 1;
d_keep (decl->csym);
@@ -1445,11 +1466,7 @@ declare_local_var (VarDeclaration *var)
tree
build_local_temp (tree type)
{
- tree decl = build_decl (input_location, VAR_DECL, NULL_TREE, type);
-
- DECL_CONTEXT (decl) = current_function_decl;
- DECL_ARTIFICIAL (decl) = 1;
- DECL_IGNORED_P (decl) = 1;
+ tree decl = create_tmp_var_raw (type);
d_pushdecl (decl);
return decl;
diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE
index d39658a..8324c1c 100644
--- a/gcc/d/dmd/MERGE
+++ b/gcc/d/dmd/MERGE
@@ -1,4 +1,4 @@
-821ed393d428c7db5a48623e77d43f5647d5c6a2
+56589f0f4d724c1c8022c57509a243f16a04228a
The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository.
diff --git a/gcc/d/dmd/aggregate.h b/gcc/d/dmd/aggregate.h
index f27ca07..d91e35e 100644
--- a/gcc/d/dmd/aggregate.h
+++ b/gcc/d/dmd/aggregate.h
@@ -159,17 +159,6 @@ struct StructFlags
class StructDeclaration : public AggregateDeclaration
{
public:
- bool zeroInit; // !=0 if initialize with 0 fill
- bool hasIdentityAssign; // true if has identity opAssign
- bool hasBlitAssign; // true if opAssign is a blit
- bool hasIdentityEquals; // true if has identity opEquals
- bool hasNoFields; // has no fields
- bool hasCopyCtor; // copy constructor
- // Even if struct is defined as non-root symbol, some built-in operations
- // (e.g. TypeidExp, NewExp, ArrayLiteralExp, etc) request its TypeInfo.
- // For those, today TypeInfo_Struct is generated in COMDAT.
- bool requestTypeInfo;
-
FuncDeclarations postblits; // Array of postblit functions
FuncDeclaration *postblit; // aggregate postblit
@@ -179,18 +168,37 @@ public:
static FuncDeclaration *xerreq; // object.xopEquals
static FuncDeclaration *xerrcmp; // object.xopCmp
- structalign_t alignment; // alignment applied outside of the struct
- ThreeState ispod; // if struct is POD
-
// ABI-specific type(s) if the struct can be passed in registers
TypeTuple *argTypes;
+ structalign_t alignment; // alignment applied outside of the struct
+ ThreeState ispod; // if struct is POD
+private:
+ uint8_t bitFields;
+public:
static StructDeclaration *create(const Loc &loc, Identifier *id, bool inObject);
StructDeclaration *syntaxCopy(Dsymbol *s) override;
Dsymbol *search(const Loc &loc, Identifier *ident, int flags = SearchLocalsOnly) override final;
const char *kind() const override;
void finalizeSize() override final;
bool isPOD();
+ bool zeroInit() const; // !=0 if initialize with 0 fill
+ bool zeroInit(bool v);
+ bool hasIdentityAssign() const; // true if has identity opAssign
+ bool hasIdentityAssign(bool v);
+ bool hasBlitAssign() const; // true if opAssign is a blit
+ bool hasBlitAssign(bool v);
+ bool hasIdentityEquals() const; // true if has identity opEquals
+ bool hasIdentityEquals(bool v);
+ bool hasNoFields() const; // has no fields
+ bool hasNoFields(bool v);
+ bool hasCopyCtor() const; // copy constructor
+ bool hasCopyCtor(bool v);
+ // Even if struct is defined as non-root symbol, some built-in operations
+ // (e.g. TypeidExp, NewExp, ArrayLiteralExp, etc) request its TypeInfo.
+ // For those, today TypeInfo_Struct is generated in COMDAT.
+ bool requestTypeInfo() const;
+ bool requestTypeInfo(bool v);
StructDeclaration *isStructDeclaration() override final { return this; }
void accept(Visitor *v) override { v->visit(this); }
diff --git a/gcc/d/dmd/canthrow.d b/gcc/d/dmd/canthrow.d
index a38cbb1..fe6e1e3 100644
--- a/gcc/d/dmd/canthrow.d
+++ b/gcc/d/dmd/canthrow.d
@@ -270,18 +270,7 @@ private CT Dsymbol_canThrow(Dsymbol s, FuncDeclaration func, bool mustNotThrow)
}
else if (auto td = s.isTupleDeclaration())
{
- for (size_t i = 0; i < td.objects.dim; i++)
- {
- RootObject o = (*td.objects)[i];
- if (o.dyncast() == DYNCAST.expression)
- {
- Expression eo = cast(Expression)o;
- if (auto se = eo.isDsymbolExp())
- {
- result |= Dsymbol_canThrow(se.s, func, mustNotThrow);
- }
- }
- }
+ td.foreachVar(&symbolDg);
}
return result;
}
diff --git a/gcc/d/dmd/clone.d b/gcc/d/dmd/clone.d
index 75a16bd..cf4ccbb 100644
--- a/gcc/d/dmd/clone.d
+++ b/gcc/d/dmd/clone.d
@@ -404,7 +404,12 @@ bool needOpEquals(StructDeclaration sd)
{
//printf("StructDeclaration::needOpEquals() %s\n", sd.toChars());
if (sd.isUnionDeclaration())
- goto Ldontneed;
+ {
+ /* If a union has only one field, treat it like a struct
+ */
+ if (sd.fields.length != 1)
+ goto Ldontneed;
+ }
if (sd.hasIdentityEquals)
goto Lneed;
/* If any of the fields has an opEquals, then we
@@ -421,7 +426,7 @@ bool needOpEquals(StructDeclaration sd)
if (tvbase.ty == Tstruct)
{
TypeStruct ts = cast(TypeStruct)tvbase;
- if (ts.sym.isUnionDeclaration())
+ if (ts.sym.isUnionDeclaration() && ts.sym.fields.length != 1)
continue;
if (needOpEquals(ts.sym))
goto Lneed;
diff --git a/gcc/d/dmd/cparse.d b/gcc/d/dmd/cparse.d
index 62ba889..a3bebb7 100644
--- a/gcc/d/dmd/cparse.d
+++ b/gcc/d/dmd/cparse.d
@@ -1619,6 +1619,12 @@ final class CParser(AST) : Parser!AST
return;
}
+ if (token.value == TOK.__pragma)
+ {
+ uupragmaDirective(scanloc);
+ return;
+ }
+
if (token.value == TOK._import) // import declaration extension
{
auto a = parseImport();
@@ -2322,6 +2328,14 @@ final class CParser(AST) : Parser!AST
break;
}
+ case TOK.__declspec:
+ {
+ /* Microsoft extension
+ */
+ cparseDeclspec(specifier);
+ break;
+ }
+
case TOK.typeof_:
{
nextToken();
@@ -2413,11 +2427,19 @@ final class CParser(AST) : Parser!AST
if (scw & scwx)
error("duplicate storage class");
scw |= scwx;
+ // C11 6.7.1-2 At most one storage-class may be given, except that
+ // _Thread_local may appear with static or extern.
const scw2 = scw & (SCW.xstatic | SCW.xextern | SCW.xauto | SCW.xregister | SCW.xtypedef);
if (scw2 & (scw2 - 1) ||
- scw & (SCW.xauto | SCW.xregister) && scw & (SCW.xinline | SCW.x_Noreturn))
+ scw & (SCW.x_Thread_local) && scw & (SCW.xauto | SCW.xregister | SCW.xtypedef))
{
- error("conflicting storage class");
+ error("multiple storage classes in declaration specifiers");
+ scw &= ~scwx;
+ }
+ if (level == LVL.local &&
+ scw & (SCW.x_Thread_local) && scw & (SCW.xinline | SCW.x_Noreturn))
+ {
+ error("`inline` and `_Noreturn` function specifiers not allowed for `_Thread_local`");
scw &= ~scwx;
}
if (level & (LVL.parameter | LVL.prototype) &&
@@ -2964,7 +2986,8 @@ final class CParser(AST) : Parser!AST
cparseGnuAttributes(specifier);
if (specifier.mod & MOD.xconst)
t = toConst(t);
- auto param = new AST.Parameter(STC.parameter, t, id, null, null);
+ auto param = new AST.Parameter(specifiersToSTC(LVL.parameter, specifier),
+ t, id, null, null);
parameters.push(param);
if (token.value == TOK.rightParenthesis)
break;
@@ -3033,9 +3056,13 @@ final class CParser(AST) : Parser!AST
* extended-decl-modifier:
* dllimport
* dllexport
+ * noreturn
+ * Params:
+ * specifier = filled in with the attribute(s)
*/
- private void cparseDeclspec()
+ private void cparseDeclspec(ref Specifier specifier)
{
+ //printf("cparseDeclspec()\n");
/* Check for dllexport, dllimport
* Ignore the rest
*/
@@ -3064,6 +3091,11 @@ final class CParser(AST) : Parser!AST
dllexport = true;
nextToken();
}
+ else if (token.ident == Id.noreturn)
+ {
+ specifier.noreturn = true;
+ nextToken();
+ }
else
{
nextToken();
@@ -3074,8 +3106,8 @@ final class CParser(AST) : Parser!AST
else
{
error("extended-decl-modifier expected");
+ break;
}
- break;
}
}
@@ -4630,6 +4662,15 @@ final class CParser(AST) : Parser!AST
stc = AST.STC.extern_ | AST.STC.gshared;
else if (specifier.scw & SCW.xstatic)
stc = AST.STC.gshared;
+ else if (specifier.scw & SCW.xregister)
+ stc = AST.STC.register;
+ }
+ else if (level == LVL.parameter)
+ {
+ if (specifier.scw & SCW.xregister)
+ stc = AST.STC.register | AST.STC.parameter;
+ else
+ stc = AST.STC.parameter;
}
else if (level == LVL.member)
{
@@ -4771,6 +4812,8 @@ final class CParser(AST) : Parser!AST
// type function itself.
if (auto tf = t.isTypeFunction())
tf.next = tf.next.addSTC(STC.const_);
+ else if (auto tt = t.isTypeTag())
+ tt.mod |= MODFlags.const_;
else
t = t.addSTC(STC.const_);
return t;
@@ -4943,11 +4986,41 @@ final class CParser(AST) : Parser!AST
return true;
}
}
- error("C preprocessor directive `#%s` is not supported", n.toChars());
+ if (n.ident != Id.undef)
+ error("C preprocessor directive `#%s` is not supported", n.toChars());
return false;
}
/*********************************************
+ * VC __pragma
+ * https://docs.microsoft.com/en-us/cpp/preprocessor/pragma-directives-and-the-pragma-keyword?view=msvc-170
+ * Scanner is on the `__pragma`
+ * Params:
+ * startloc = location to use for error messages
+ */
+ private void uupragmaDirective(const ref Loc startloc)
+ {
+ const loc = startloc;
+ nextToken();
+ if (token.value != TOK.leftParenthesis)
+ {
+ error(loc, "left parenthesis expected to follow `__pragma`");
+ return;
+ }
+ nextToken();
+ if (token.value == TOK.identifier && token.ident == Id.pack)
+ pragmaPack(startloc, false);
+ else
+ error(loc, "unrecognized __pragma");
+ if (token.value != TOK.rightParenthesis)
+ {
+ error(loc, "right parenthesis expected to close `__pragma(...)`");
+ return;
+ }
+ nextToken();
+ }
+
+ /*********************************************
* C11 6.10.6 Pragma directive
* # pragma pp-tokens(opt) new-line
* The C preprocessor sometimes leaves pragma directives in
@@ -4959,7 +5032,7 @@ final class CParser(AST) : Parser!AST
Token n;
scan(&n);
if (n.value == TOK.identifier && n.ident == Id.pack)
- return pragmaPack(loc);
+ return pragmaPack(loc, true);
if (n.value != TOK.endOfLine)
skipToNextLine();
}
@@ -4971,10 +5044,27 @@ final class CParser(AST) : Parser!AST
* Scanner is on the `pack`
* Params:
* startloc = location to use for error messages
+ * useScan = use scan() to retrieve next token, instead of nextToken()
*/
- private void pragmaPack(const ref Loc startloc)
+ private void pragmaPack(const ref Loc startloc, bool useScan)
{
const loc = startloc;
+
+ /* Pull tokens from scan() or nextToken()
+ */
+ void scan(Token* t)
+ {
+ if (useScan)
+ {
+ Lexer.scan(t);
+ }
+ else
+ {
+ nextToken();
+ *t = token;
+ }
+ }
+
Token n;
scan(&n);
if (n.value != TOK.leftParenthesis)
@@ -5137,12 +5227,35 @@ final class CParser(AST) : Parser!AST
{
if (!defines || defines.length < 10) // minimum length of a #define line
return;
- const length = defines.length;
- auto slice = defines.peekChars()[0 .. length];
+ OutBuffer* buf = defines;
+ defines = null; // prevent skipToNextLine() and parseSpecialTokenSequence()
+ // from appending to slice[]
+ const length = buf.length;
+ buf.writeByte(0);
+ auto slice = buf.peekChars()[0 .. length];
resetDefineLines(slice); // reset lexer
const(char)* endp = &slice[length - 7];
+ size_t[void*] defineTab; // hash table of #define's turned into Symbol's
+ // indexed by Identifier, returns index into symbols[]
+ // The memory for this is leaked
+
+ void addVar(AST.VarDeclaration v)
+ {
+ /* If it's already defined, replace the earlier
+ * definition
+ */
+ if (size_t* pd = cast(void*)v.ident in defineTab)
+ {
+ //printf("replacing %s\n", v.toChars());
+ (*symbols)[*pd] = v;
+ return;
+ }
+ defineTab[cast(void*)v.ident] = symbols.length;
+ symbols.push(v);
+ }
+
Token n;
while (p < endp)
@@ -5181,7 +5294,7 @@ final class CParser(AST) : Parser!AST
*/
AST.Expression e = new AST.IntegerExp(scanloc, intvalue, t);
auto v = new AST.VarDeclaration(scanloc, t, id, new AST.ExpInitializer(scanloc, e), STC.manifest);
- symbols.push(v);
+ addVar(v);
nextDefineLine();
continue;
}
@@ -5204,7 +5317,7 @@ final class CParser(AST) : Parser!AST
*/
AST.Expression e = new AST.RealExp(scanloc, floatvalue, t);
auto v = new AST.VarDeclaration(scanloc, t, id, new AST.ExpInitializer(scanloc, e), STC.manifest);
- symbols.push(v);
+ addVar(v);
nextDefineLine();
continue;
}
@@ -5222,7 +5335,7 @@ final class CParser(AST) : Parser!AST
*/
AST.Expression e = new AST.StringExp(scanloc, str[0 .. len], len, 1, postfix);
auto v = new AST.VarDeclaration(scanloc, null, id, new AST.ExpInitializer(scanloc, e), STC.manifest);
- symbols.push(v);
+ addVar(v);
nextDefineLine();
continue;
}
@@ -5234,13 +5347,18 @@ final class CParser(AST) : Parser!AST
}
skipToNextLine();
}
- else if (n.value != TOK.endOfLine)
+ else
{
- skipToNextLine();
+ scan(&n);
+ if (n.value != TOK.endOfLine)
+ {
+ skipToNextLine();
+ }
}
nextDefineLine();
- assert(p - slice.ptr <= length);
}
+
+ defines = buf;
}
//}
diff --git a/gcc/d/dmd/declaration.d b/gcc/d/dmd/declaration.d
index bb0feb6..ffb33d3 100644
--- a/gcc/d/dmd/declaration.d
+++ b/gcc/d/dmd/declaration.d
@@ -656,23 +656,46 @@ extern (C++) final class TupleDeclaration : Declaration
override bool needThis()
{
//printf("TupleDeclaration::needThis(%s)\n", toChars());
- for (size_t i = 0; i < objects.dim; i++)
+ return isexp ? foreachVar((s) { return s.needThis(); }) != 0 : false;
+ }
+
+ /***********************************************************
+ * Calls dg(Dsymbol) for each Dsymbol, which should be a VarDeclaration
+ * inside VarExp (isexp == true).
+ * Params:
+ * dg = delegate to call for each Dsymbol
+ */
+ extern (D) void foreachVar(scope void delegate(Dsymbol) dg)
+ {
+ assert(isexp);
+ foreach (o; *objects)
{
- RootObject o = (*objects)[i];
- if (o.dyncast() == DYNCAST.expression)
- {
- Expression e = cast(Expression)o;
- if (DsymbolExp ve = e.isDsymbolExp())
- {
- Declaration d = ve.s.isDeclaration();
- if (d && d.needThis())
- {
- return true;
- }
- }
- }
+ if (auto e = o.isExpression())
+ if (auto ve = e.isVarExp())
+ dg(ve.var);
}
- return false;
+ }
+
+ /***********************************************************
+ * Calls dg(Dsymbol) for each Dsymbol, which should be a VarDeclaration
+ * inside VarExp (isexp == true).
+ * If dg returns !=0, stops and returns that value else returns 0.
+ * Params:
+ * dg = delegate to call for each Dsymbol
+ * Returns:
+ * last value returned by dg()
+ */
+ extern (D) int foreachVar(scope int delegate(Dsymbol) dg)
+ {
+ assert(isexp);
+ foreach (o; *objects)
+ {
+ if (auto e = o.isExpression())
+ if (auto ve = e.isVarExp())
+ if(auto ret = dg(ve.var))
+ return ret;
+ }
+ return 0;
}
override inout(TupleDeclaration) isTupleDeclaration() inout
@@ -1142,15 +1165,7 @@ extern (C++) class VarDeclaration : Declaration
// If this variable was really a tuple, set the offsets for the tuple fields
TupleDeclaration v2 = aliassym.isTupleDeclaration();
assert(v2);
- for (size_t i = 0; i < v2.objects.dim; i++)
- {
- RootObject o = (*v2.objects)[i];
- assert(o.dyncast() == DYNCAST.expression);
- Expression e = cast(Expression)o;
- assert(e.op == EXP.dSymbol);
- DsymbolExp se = e.isDsymbolExp();
- se.s.setFieldOffset(ad, fieldState, isunion);
- }
+ v2.foreachVar((s) { s.setFieldOffset(ad, fieldState, isunion); });
return;
}
diff --git a/gcc/d/dmd/denum.d b/gcc/d/dmd/denum.d
index aba290b..ef322f1 100644
--- a/gcc/d/dmd/denum.d
+++ b/gcc/d/dmd/denum.d
@@ -54,9 +54,17 @@ extern (C++) final class EnumDeclaration : ScopeDsymbol
Expression maxval;
Expression minval;
Expression defaultval; // default initializer
- bool isdeprecated;
- bool added;
- int inuse;
+
+ // `bool` fields that are compacted into bit fields in a string mixin
+ private extern (D) static struct BitFields
+ {
+ bool isdeprecated;
+ bool added;
+ bool inuse;
+ }
+
+ import dmd.common.bitfields : generateBitFields;
+ mixin(generateBitFields!(BitFields, ubyte));
extern (D) this(const ref Loc loc, Identifier ident, Type memtype)
{
diff --git a/gcc/d/dmd/dinterpret.d b/gcc/d/dmd/dinterpret.d
index bb25210..5841a25 100644
--- a/gcc/d/dmd/dinterpret.d
+++ b/gcc/d/dmd/dinterpret.d
@@ -2306,16 +2306,12 @@ public:
result = null;
// Reserve stack space for all tuple members
- if (!td.objects)
- return;
- foreach (o; *td.objects)
+ td.foreachVar((s)
{
- Expression ex = isExpression(o);
- DsymbolExp ds = ex ? ex.isDsymbolExp() : null;
- VarDeclaration v2 = ds ? ds.s.isVarDeclaration() : null;
+ VarDeclaration v2 = s.isVarDeclaration();
assert(v2);
if (v2.isDataseg() && !v2.isCTFE())
- continue;
+ return 0;
ctfeGlobals.stack.push(v2);
if (v2._init)
@@ -2325,7 +2321,7 @@ public:
{
einit = interpretRegion(ie.exp, istate, goal);
if (exceptionOrCant(einit))
- return;
+ return 1;
}
else if (v2._init.isVoidInitializer())
{
@@ -2335,11 +2331,12 @@ public:
{
e.error("declaration `%s` is not yet implemented in CTFE", e.toChars());
result = CTFEExp.cantexp;
- return;
+ return 1;
}
setValue(v2, einit);
}
- }
+ return 0;
+ });
return;
}
if (v.isStatic())
diff --git a/gcc/d/dmd/dmangle.d b/gcc/d/dmd/dmangle.d
index 7604296..25794e2 100644
--- a/gcc/d/dmd/dmangle.d
+++ b/gcc/d/dmd/dmangle.d
@@ -371,10 +371,20 @@ public:
if (ta.isnogc)
buf.writestring("Ni");
- if (ta.isreturn && !ta.isreturninferred)
- buf.writestring("Nj");
- else if (ta.isScopeQual && !ta.isscopeinferred)
- buf.writestring("Nl");
+ // `return scope` must be in that order
+ if (ta.isreturnscope && !ta.isreturninferred)
+ {
+ buf.writestring("NjNl");
+ }
+ else
+ {
+ // when return ref, the order is `scope return`
+ if (ta.isScopeQual && !ta.isscopeinferred)
+ buf.writestring("Nl");
+
+ if (ta.isreturn && !ta.isreturninferred)
+ buf.writestring("Nj");
+ }
if (ta.islive)
buf.writestring("Nm");
diff --git a/gcc/d/dmd/dmodule.d b/gcc/d/dmd/dmodule.d
index f8e5073a..0be938f 100644
--- a/gcc/d/dmd/dmodule.d
+++ b/gcc/d/dmd/dmodule.d
@@ -680,7 +680,7 @@ extern (C++) final class Module : Package
FileName.equalsExt(srcfile.toString(), c_ext) &&
FileName.exists(srcfile.toString()))
{
- filename = global.preprocess(srcfile, loc, global.params.cppswitches, ifile, &defines); // run C preprocessor
+ filename = global.preprocess(srcfile, loc, ifile, &defines); // run C preprocessor
}
if (auto result = global.fileManager.lookup(filename))
diff --git a/gcc/d/dmd/dstruct.d b/gcc/d/dmd/dstruct.d
index de5f145..4126a8a 100644
--- a/gcc/d/dmd/dstruct.d
+++ b/gcc/d/dmd/dstruct.d
@@ -192,17 +192,6 @@ enum StructFlags : int
*/
extern (C++) class StructDeclaration : AggregateDeclaration
{
- bool zeroInit; // !=0 if initialize with 0 fill
- bool hasIdentityAssign; // true if has identity opAssign
- bool hasBlitAssign; // true if opAssign is a blit
- bool hasIdentityEquals; // true if has identity opEquals
- bool hasNoFields; // has no fields
- bool hasCopyCtor; // copy constructor
- // Even if struct is defined as non-root symbol, some built-in operations
- // (e.g. TypeidExp, NewExp, ArrayLiteralExp, etc) request its TypeInfo.
- // For those, today TypeInfo_Struct is generated in COMDAT.
- bool requestTypeInfo;
-
FuncDeclarations postblits; // Array of postblit functions
FuncDeclaration postblit; // aggregate postblit
@@ -212,11 +201,29 @@ extern (C++) class StructDeclaration : AggregateDeclaration
extern (C++) __gshared FuncDeclaration xerreq; // object.xopEquals
extern (C++) __gshared FuncDeclaration xerrcmp; // object.xopCmp
+ // ABI-specific type(s) if the struct can be passed in registers
+ TypeTuple argTypes;
+
structalign_t alignment; // alignment applied outside of the struct
ThreeState ispod; // if struct is POD
- // ABI-specific type(s) if the struct can be passed in registers
- TypeTuple argTypes;
+ // `bool` fields that are compacted into bit fields in a string mixin
+ private extern (D) static struct BitFields
+ {
+ bool zeroInit; // !=0 if initialize with 0 fill
+ bool hasIdentityAssign; // true if has identity opAssign
+ bool hasBlitAssign; // true if opAssign is a blit
+ bool hasIdentityEquals; // true if has identity opEquals
+ bool hasNoFields; // has no fields
+ bool hasCopyCtor; // copy constructor
+ // Even if struct is defined as non-root symbol, some built-in operations
+ // (e.g. TypeidExp, NewExp, ArrayLiteralExp, etc) request its TypeInfo.
+ // For those, today TypeInfo_Struct is generated in COMDAT.
+ bool requestTypeInfo;
+ }
+
+ import dmd.common.bitfields : generateBitFields;
+ mixin(generateBitFields!(BitFields, ubyte));
extern (D) this(const ref Loc loc, Identifier id, bool inObject)
{
diff --git a/gcc/d/dmd/dsymbolsem.d b/gcc/d/dmd/dsymbolsem.d
index 6dbc129..11a51f1 100644
--- a/gcc/d/dmd/dsymbolsem.d
+++ b/gcc/d/dmd/dsymbolsem.d
@@ -49,6 +49,7 @@ import dmd.identifier;
import dmd.importc;
import dmd.init;
import dmd.initsem;
+import dmd.intrange;
import dmd.hdrgen;
import dmd.mtype;
import dmd.mustuse;
@@ -646,7 +647,7 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
else
ti = dsym._init ? dsym._init.syntaxCopy() : null;
- StorageClass storage_class = STC.temp | STC.local | dsym.storage_class;
+ StorageClass storage_class = STC.temp | dsym.storage_class;
if ((dsym.storage_class & STC.parameter) && (arg.storageClass & STC.parameter))
storage_class |= arg.storageClass;
auto v = new VarDeclaration(dsym.loc, arg.type, id, ti, storage_class);
@@ -655,15 +656,7 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
v.dsymbolSemantic(sc);
- if (sc.scopesym)
- {
- //printf("adding %s to %s\n", v.toChars(), sc.scopesym.toChars());
- if (sc.scopesym.members)
- // Note this prevents using foreach() over members, because the limits can change
- sc.scopesym.members.push(v);
- }
-
- Expression e = new DsymbolExp(dsym.loc, v);
+ Expression e = new VarExp(dsym.loc, v);
(*exps)[i] = e;
}
auto v2 = new TupleDeclaration(dsym.loc, dsym.ident, exps);
@@ -727,6 +720,11 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
else if (!dsym.type.hasPointers())
{
dsym.storage_class &= ~STC.scope_; // silently ignore; may occur in generic code
+ // https://issues.dlang.org/show_bug.cgi?id=23168
+ if (dsym.storage_class & STC.returnScope)
+ {
+ dsym.storage_class &= ~(STC.return_ | STC.returnScope);
+ }
}
}
@@ -2177,6 +2175,13 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
assert(ed.memtype);
int nextValue = 0; // C11 6.7.2.2-3 first member value defaults to 0
+ // C11 6.7.2.2-2 value must be representable as an int.
+ // The sizemask represents all values that int will fit into,
+ // from 0..uint.max. We want to cover int.min..uint.max.
+ const mask = Type.tint32.sizemask();
+ IntRange ir = IntRange(SignExtendedNumber(~(mask >> 1), true),
+ SignExtendedNumber(mask));
+
void emSemantic(EnumMember em, ref int nextValue)
{
static void errorReturn(EnumMember em)
@@ -2206,21 +2211,32 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
em.error("enum member must be an integral constant expression, not `%s` of type `%s`", e.toChars(), e.type.toChars());
return errorReturn(em);
}
- const sinteger_t v = ie.toInteger();
- if (v < int.min || v > uint.max)
+ if (!ir.contains(getIntRange(ie)))
{
// C11 6.7.2.2-2
em.error("enum member value `%s` does not fit in an `int`", e.toChars());
return errorReturn(em);
}
- em.value = new IntegerExp(em.loc, cast(int)v, Type.tint32);
- nextValue = cast(int)v;
+ nextValue = cast(int)ie.toInteger();
+ em.value = new IntegerExp(em.loc, nextValue, Type.tint32);
}
else
{
+ // C11 6.7.2.2-3 add 1 to value of previous enumeration constant
+ bool first = (em == (*em.ed.members)[0]);
+ if (!first)
+ {
+ import core.checkedint : adds;
+ bool overflow;
+ nextValue = adds(nextValue, 1, overflow);
+ if (overflow)
+ {
+ em.error("initialization with `%d+1` causes overflow for type `int`", nextValue - 1);
+ return errorReturn(em);
+ }
+ }
em.value = new IntegerExp(em.loc, nextValue, Type.tint32);
}
- ++nextValue; // C11 6.7.2.2-3 add 1 to value of previous enumeration constant
em.semanticRun = PASS.semanticdone;
}
@@ -3189,10 +3205,19 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
sc.stc |= STC.scope_;
// If 'this' has no pointers, remove 'scope' as it has no meaning
+ // Note: this is already covered by semantic of `VarDeclaration` and `TypeFunction`,
+ // but existing code relies on `hasPointers()` being called here to resolve forward references:
+ // https://github.com/dlang/dmd/pull/14232#issuecomment-1162906573
if (sc.stc & STC.scope_ && ad && ad.isStructDeclaration() && !ad.type.hasPointers())
{
sc.stc &= ~STC.scope_;
tf.isScopeQual = false;
+ if (tf.isreturnscope)
+ {
+ sc.stc &= ~(STC.return_ | STC.returnScope);
+ tf.isreturn = false;
+ tf.isreturnscope = false;
+ }
}
sc.linkage = funcdecl._linkage;
@@ -6821,7 +6846,12 @@ bool determineFields(AggregateDeclaration ad)
return 1;
if (v.aliassym)
- return 0; // If this variable was really a tuple, skip it.
+ {
+ // If this variable was really a tuple, process each element.
+ if (auto tup = v.aliassym.isTupleDeclaration())
+ return tup.foreachVar(tv => tv.apply(&func, ad));
+ return 0;
+ }
if (v.storage_class & (STC.static_ | STC.extern_ | STC.tls | STC.gshared | STC.manifest | STC.ctfe | STC.templateparameter))
return 0;
diff --git a/gcc/d/dmd/dtoh.d b/gcc/d/dmd/dtoh.d
index 9afcc7f..c570068 100644
--- a/gcc/d/dmd/dtoh.d
+++ b/gcc/d/dmd/dtoh.d
@@ -873,7 +873,11 @@ public:
// Tuple field are expanded into multiple VarDeclarations
// (we'll visit them later)
if (vd.type && vd.type.isTypeTuple())
+ {
+ assert(vd.aliassym);
+ vd.toAlias().accept(this);
return;
+ }
if (vd.originalType && vd.type == AST.Type.tsize_t)
origType = vd.originalType;
@@ -1263,41 +1267,38 @@ public:
size_t varCount;
bool first = true;
buf.level++;
- foreach (m; *sd.members)
+ foreach (vd; sd.fields)
{
- if (auto vd = m.isVarDeclaration())
- {
- if (!memberField(vd))
- continue;
- varCount++;
+ if (!memberField(vd) || vd.overlapped)
+ continue;
+ varCount++;
- if (!vd._init && !vd.type.isTypeBasic() && !vd.type.isTypePointer && !vd.type.isTypeStruct &&
- !vd.type.isTypeClass && !vd.type.isTypeDArray && !vd.type.isTypeSArray)
- {
- continue;
- }
- if (vd._init && vd._init.isVoidInitializer())
- continue;
+ if (!vd._init && !vd.type.isTypeBasic() && !vd.type.isTypePointer && !vd.type.isTypeStruct &&
+ !vd.type.isTypeClass && !vd.type.isTypeDArray && !vd.type.isTypeSArray)
+ {
+ continue;
+ }
+ if (vd._init && vd._init.isVoidInitializer())
+ continue;
- if (first)
- {
- buf.writestringln(" :");
- first = false;
- }
- else
- {
- buf.writestringln(",");
- }
- writeIdentifier(vd, true);
- buf.writeByte('(');
+ if (first)
+ {
+ buf.writestringln(" :");
+ first = false;
+ }
+ else
+ {
+ buf.writestringln(",");
+ }
+ writeIdentifier(vd, true);
+ buf.writeByte('(');
- if (vd._init)
- {
- auto e = AST.initializerToExpression(vd._init);
- printExpressionFor(vd.type, e, true);
- }
- buf.printf(")");
+ if (vd._init)
+ {
+ auto e = AST.initializerToExpression(vd._init);
+ printExpressionFor(vd.type, e, true);
}
+ buf.printf(")");
}
buf.level--;
buf.writenl();
@@ -1308,49 +1309,43 @@ public:
{
buf.printf("%s(", sd.ident.toChars());
first = true;
- foreach (m; *sd.members)
+ foreach (vd; sd.fields)
{
- if (auto vd = m.isVarDeclaration())
+ if (!memberField(vd) || vd.overlapped)
+ continue;
+ if (!first)
+ buf.writestring(", ");
+ assert(vd.type);
+ assert(vd.ident);
+ typeToBuffer(vd.type, vd, true);
+ // Don't print default value for first parameter to not clash
+ // with the default ctor defined above
+ if (!first)
{
- if (!memberField(vd))
- continue;
- if (!first)
- buf.writestring(", ");
- assert(vd.type);
- assert(vd.ident);
- typeToBuffer(vd.type, vd, true);
- // Don't print default value for first parameter to not clash
- // with the default ctor defined above
- if (!first)
- {
- buf.writestring(" = ");
- printExpressionFor(vd.type, findDefaultInitializer(vd));
- }
- first = false;
+ buf.writestring(" = ");
+ printExpressionFor(vd.type, findDefaultInitializer(vd));
}
+ first = false;
}
buf.writestring(") :");
buf.level++;
buf.writenl();
first = true;
- foreach (m; *sd.members)
+ foreach (vd; sd.fields)
{
- if (auto vd = m.isVarDeclaration())
- {
- if (!memberField(vd))
- continue;
-
- if (first)
- first = false;
- else
- buf.writestringln(",");
-
- writeIdentifier(vd, true);
- buf.writeByte('(');
- writeIdentifier(vd, true);
- buf.writeByte(')');
- }
+ if (!memberField(vd) || vd.overlapped)
+ continue;
+
+ if (first)
+ first = false;
+ else
+ buf.writestringln(",");
+
+ writeIdentifier(vd, true);
+ buf.writeByte('(');
+ writeIdentifier(vd, true);
+ buf.writeByte(')');
}
buf.writenl();
buf.writestringln("{}");
@@ -1663,6 +1658,13 @@ public:
assert(false, "This node type should be handled in the EnumDeclaration");
}
+ override void visit(AST.TupleDeclaration tup)
+ {
+ debug (Debug_DtoH) mixin(traceVisit!tup);
+
+ tup.foreachVar((s) { s.accept(this); });
+ }
+
/**
* Prints a member/parameter/variable declaration into `buf`.
*
diff --git a/gcc/d/dmd/enum.h b/gcc/d/dmd/enum.h
index 9ec1300..723cebc 100644
--- a/gcc/d/dmd/enum.h
+++ b/gcc/d/dmd/enum.h
@@ -35,10 +35,15 @@ public:
Expression *maxval;
Expression *minval;
Expression *defaultval; // default initializer
-
- bool isdeprecated;
- bool added;
- int inuse;
+private:
+ uint8_t bitFields;
+public:
+ bool isdeprecated() const;
+ bool isdeprecated(bool v);
+ bool added() const;
+ bool added(bool v);
+ bool inuse() const;
+ bool inuse(bool v);
EnumDeclaration *syntaxCopy(Dsymbol *s) override;
void addMember(Scope *sc, ScopeDsymbol *sds) override;
diff --git a/gcc/d/dmd/escape.d b/gcc/d/dmd/escape.d
index 97a6552..0646f57 100644
--- a/gcc/d/dmd/escape.d
+++ b/gcc/d/dmd/escape.d
@@ -328,12 +328,12 @@ bool checkParamArgumentEscape(Scope* sc, FuncDeclaration fdc, Parameter par, STC
else if (par)
{
result |= sc.setUnsafeDIP1000(gag, arg.loc,
- desc ~ " `%s` assigned to non-scope parameter `%s`", v, par);
+ desc ~ " `%s` assigned to non-scope parameter `%s` calling `%s`", v, par, fdc);
}
else
{
result |= sc.setUnsafeDIP1000(gag, arg.loc,
- desc ~ " `%s` assigned to non-scope parameter `this`", v);
+ desc ~ " `%s` assigned to non-scope parameter `this` calling `%s`", v, fdc);
}
}
@@ -1230,9 +1230,24 @@ private bool checkReturnEscapeImpl(Scope* sc, Expression e, bool refs, bool gag)
!(!refs && sc.func.isFuncDeclaration().getLevel(pfunc, sc.intypeof) > 0)
)
{
- // https://issues.dlang.org/show_bug.cgi?id=17029
- result |= sc.setUnsafeDIP1000(gag, e.loc, "scope variable `%s` may not be returned", v);
- continue;
+ if (v.isParameter() && !(v.storage_class & STC.return_))
+ {
+ // https://issues.dlang.org/show_bug.cgi?id=23191
+ if (!gag)
+ {
+ previewErrorFunc(sc.isDeprecated(), global.params.useDIP1000)(e.loc,
+ "scope parameter `%s` may not be returned", v.toChars()
+ );
+ result = true;
+ continue;
+ }
+ }
+ else
+ {
+ // https://issues.dlang.org/show_bug.cgi?id=17029
+ result |= sc.setUnsafeDIP1000(gag, e.loc, "scope variable `%s` may not be returned", v);
+ continue;
+ }
}
}
else if (v.storage_class & STC.variadic && p == sc.func)
@@ -2492,9 +2507,11 @@ private void addMaybe(VarDeclaration va, VarDeclaration v)
* fmt = printf-style format string
* arg0 = (optional) argument for first %s format specifier
* arg1 = (optional) argument for second %s format specifier
+ * arg2 = (optional) argument for third %s format specifier
* Returns: whether an actual safe error (not deprecation) occured
*/
-private bool setUnsafePreview(Scope* sc, FeatureState fs, bool gag, Loc loc, const(char)* msg, RootObject arg0 = null, RootObject arg1 = null)
+private bool setUnsafePreview(Scope* sc, FeatureState fs, bool gag, Loc loc, const(char)* msg,
+ RootObject arg0 = null, RootObject arg1 = null, RootObject arg2 = null)
{
if (fs == FeatureState.disabled)
{
@@ -2502,7 +2519,7 @@ private bool setUnsafePreview(Scope* sc, FeatureState fs, bool gag, Loc loc, con
}
else if (fs == FeatureState.enabled)
{
- return sc.setUnsafe(gag, loc, msg, arg0, arg1);
+ return sc.setUnsafe(gag, loc, msg, arg0, arg1, arg2);
}
else
{
@@ -2510,22 +2527,23 @@ private bool setUnsafePreview(Scope* sc, FeatureState fs, bool gag, Loc loc, con
{
if (!gag)
previewErrorFunc(sc.isDeprecated(), fs)(
- loc, msg, arg0 ? arg0.toChars() : "", arg1 ? arg1.toChars() : ""
+ loc, msg, arg0 ? arg0.toChars() : "", arg1 ? arg1.toChars() : "", arg2 ? arg2.toChars() : ""
);
}
else if (!sc.func.safetyViolation)
{
import dmd.func : AttributeViolation;
- sc.func.safetyViolation = new AttributeViolation(loc, msg, arg0, arg1);
+ sc.func.safetyViolation = new AttributeViolation(loc, msg, arg0, arg1, arg2);
}
return false;
}
}
// `setUnsafePreview` partially evaluated for dip1000
-private bool setUnsafeDIP1000(Scope* sc, bool gag, Loc loc, const(char)* msg, RootObject arg0 = null, RootObject arg1 = null)
+private bool setUnsafeDIP1000(Scope* sc, bool gag, Loc loc, const(char)* msg,
+ RootObject arg0 = null, RootObject arg1 = null, RootObject arg2 = null)
{
- return setUnsafePreview(sc, global.params.useDIP1000, gag, loc, msg, arg0, arg1);
+ return setUnsafePreview(sc, global.params.useDIP1000, gag, loc, msg, arg0, arg1, arg2);
}
/***************************************
diff --git a/gcc/d/dmd/expression.d b/gcc/d/dmd/expression.d
index 4d17105..397a41b 100644
--- a/gcc/d/dmd/expression.d
+++ b/gcc/d/dmd/expression.d
@@ -348,14 +348,16 @@ int expandAliasThisTuples(Expressions* exps, size_t starti = 0)
if (TupleDeclaration td = exp.isAliasThisTuple)
{
exps.remove(u);
- foreach (i, o; *td.objects)
+ size_t i;
+ td.foreachVar((s)
{
- auto d = o.isExpression().isDsymbolExp().s.isDeclaration();
+ auto d = s.isDeclaration();
auto e = new DotVarExp(exp.loc, exp, d);
assert(d.type);
e.type = d.type;
exps.insert(u + i, e);
- }
+ ++i;
+ });
version (none)
{
printf("expansion ->\n");
@@ -1438,7 +1440,7 @@ extern (C++) abstract class Expression : ASTNode
else if (!sc.func.safetyViolation)
{
import dmd.func : AttributeViolation;
- sc.func.safetyViolation = new AttributeViolation(this.loc, null, f, null);
+ sc.func.safetyViolation = new AttributeViolation(this.loc, null, f, null, null);
}
}
return false;
diff --git a/gcc/d/dmd/expressionsem.d b/gcc/d/dmd/expressionsem.d
index dcc5b50..35ba5fa 100644
--- a/gcc/d/dmd/expressionsem.d
+++ b/gcc/d/dmd/expressionsem.d
@@ -6004,10 +6004,10 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
return setError();
se = se.toUTF8(sc);
- auto namez = se.toStringz().ptr;
+ auto namez = se.toStringz();
if (!global.filePath)
{
- e.error("need `-J` switch to import text file `%s`", namez);
+ e.error("need `-J` switch to import text file `%s`", namez.ptr);
return setError();
}
@@ -6036,8 +6036,8 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
return setError();
}
- auto name = FileName.searchPath(global.filePath, namez, false);
- if (!name)
+ auto resolvedNamez = FileName.searchPath(global.filePath, namez, false);
+ if (!resolvedNamez)
{
e.error("file `%s` cannot be found or not in a path specified with `-J`", se.toChars());
e.errorSupplemental("Path(s) searched (as provided by `-J`):");
@@ -6051,11 +6051,11 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
return setError();
}
- sc._module.contentImportedFiles.push(name);
+ sc._module.contentImportedFiles.push(resolvedNamez.ptr);
if (global.params.verbose)
{
const slice = se.peekString();
- message("file %.*s\t(%s)", cast(int)slice.length, slice.ptr, name);
+ message("file %.*s\t(%s)", cast(int)slice.length, slice.ptr, resolvedNamez.ptr);
}
if (global.params.moduleDeps.buffer !is null)
{
@@ -6072,27 +6072,27 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
ob.writestring("string : ");
ob.write(se.peekString());
ob.writestring(" (");
- escapePath(ob, name);
+ escapePath(ob, resolvedNamez.ptr);
ob.writestring(")");
ob.writenl();
}
if (global.params.makeDeps.doOutput)
{
- global.params.makeDeps.files.push(name);
+ global.params.makeDeps.files.push(resolvedNamez.ptr);
}
{
- auto fileName = FileName(name.toDString);
+ auto fileName = FileName(resolvedNamez);
if (auto fmResult = global.fileManager.lookup(fileName))
{
se = new StringExp(e.loc, fmResult);
}
else
{
- auto readResult = File.read(name.toDString);
+ auto readResult = File.read(resolvedNamez);
if (!readResult.success)
{
- e.error("cannot read file `%s`", name);
+ e.error("cannot read file `%s`", resolvedNamez.ptr);
return setError();
}
else
@@ -6963,18 +6963,8 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
exp.error("cannot take address of `%s`", exp.e1.toChars());
return setError();
}
- if (auto dve = exp.e1.isDotVarExp())
- {
- /* https://issues.dlang.org/show_bug.cgi?id=22749
- * Error about taking address of any bit-field, regardless of
- * whether SCOPE.Cfile is set.
- */
- if (auto bf = dve.var.isBitFieldDeclaration())
- {
- exp.error("cannot take address of bit-field `%s`", bf.toChars());
- return setError();
- }
- }
+ if (!checkAddressable(exp, sc))
+ return setError();
bool hasOverloads;
if (auto f = isFuncAddress(exp, &hasOverloads))
@@ -8323,6 +8313,11 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
t1b = t1b.castMod(tv1.mod);
exp.e1.type = t1b;
}
+ if (t1b.ty == Tsarray || t1b.ty == Tarray)
+ {
+ if (!checkAddressable(exp, sc))
+ return setError();
+ }
/* Run semantic on e2
*/
@@ -11694,6 +11689,14 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
case Terror:
return setError();
+ case Tarray, Tsarray:
+ result = exp.incompatibleTypes();
+ exp.errorSupplemental("`in` is only allowed on associative arrays");
+ const(char)* slice = (t2b.ty == Tsarray) ? "[]" : "";
+ exp.errorSupplemental("perhaps use `std.algorithm.find(%s, %s%s)` instead",
+ exp.e1.toChars(), exp.e2.toChars(), slice);
+ return;
+
default:
result = exp.incompatibleTypes();
return;
@@ -13152,6 +13155,69 @@ bool checkAddressVar(Scope* sc, Expression exp, VarDeclaration v)
return true;
}
+/**************************************
+ * This check ensures that the object in `exp` can have its address taken, or
+ * issue a diagnostic error.
+ * Params:
+ * e = expression to check
+ * sc = context
+ * Returns:
+ * true if the expression is addressable
+ */
+bool checkAddressable(Expression e, Scope* sc)
+{
+ Expression ex = e;
+ while (true)
+ {
+ switch (ex.op)
+ {
+ case EXP.dotVariable:
+ // https://issues.dlang.org/show_bug.cgi?id=22749
+ // Error about taking address of any bit-field, regardless of
+ // whether SCOPE.Cfile is set.
+ if (auto bf = ex.isDotVarExp().var.isBitFieldDeclaration())
+ {
+ e.error("cannot take address of bit-field `%s`", bf.toChars());
+ return false;
+ }
+ goto case EXP.cast_;
+
+ case EXP.index:
+ ex = ex.isBinExp().e1;
+ continue;
+
+ case EXP.address:
+ case EXP.array:
+ case EXP.cast_:
+ ex = ex.isUnaExp().e1;
+ continue;
+
+ case EXP.variable:
+ if (sc.flags & SCOPE.Cfile)
+ {
+ // C11 6.5.3.2: A variable that has its address taken cannot be
+ // stored in a register.
+ // C11 6.3.2.1: An array that has its address computed with `[]`
+ // or cast to an lvalue pointer cannot be stored in a register.
+ if (ex.isVarExp().var.storage_class & STC.register)
+ {
+ if (e.isIndexExp())
+ e.error("cannot index through register variable `%s`", ex.toChars());
+ else
+ e.error("cannot take address of register variable `%s`", ex.toChars());
+ return false;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+ }
+ return true;
+}
+
/*******************************
* Checks the attributes of a function.
diff --git a/gcc/d/dmd/foreachvar.d b/gcc/d/dmd/foreachvar.d
index 53ed62e..63281b5 100644
--- a/gcc/d/dmd/foreachvar.d
+++ b/gcc/d/dmd/foreachvar.d
@@ -75,19 +75,7 @@ void foreachVar(Expression e, void delegate(VarDeclaration) dgVar)
if (!v)
return;
if (TupleDeclaration td = v.toAlias().isTupleDeclaration())
- {
- if (!td.objects)
- return;
- foreach (o; *td.objects)
- {
- Expression ex = isExpression(o);
- DsymbolExp s = ex ? ex.isDsymbolExp() : null;
- assert(s);
- VarDeclaration v2 = s.s.isVarDeclaration();
- assert(v2);
- dgVar(v2);
- }
- }
+ td.foreachVar((s) { dgVar(s.isVarDeclaration()); });
else
dgVar(v);
Dsymbol s = v.toAlias();
diff --git a/gcc/d/dmd/func.d b/gcc/d/dmd/func.d
index d429259..83bc2ea 100644
--- a/gcc/d/dmd/func.d
+++ b/gcc/d/dmd/func.d
@@ -1476,17 +1476,19 @@ extern (C++) class FuncDeclaration : Declaration
* fmt = printf-style format string
* arg0 = (optional) argument for first %s format specifier
* arg1 = (optional) argument for second %s format specifier
+ * arg2 = (optional) argument for third %s format specifier
* Returns: whether there's a safe error
*/
extern (D) final bool setUnsafe(
- bool gag = false, Loc loc = Loc.init, const(char)* fmt = null, RootObject arg0 = null, RootObject arg1 = null)
+ bool gag = false, Loc loc = Loc.init, const(char)* fmt = null,
+ RootObject arg0 = null, RootObject arg1 = null, RootObject arg2 = null)
{
if (flags & FUNCFLAG.safetyInprocess)
{
flags &= ~FUNCFLAG.safetyInprocess;
type.toTypeFunction().trust = TRUST.system;
if (fmt || arg0)
- safetyViolation = new AttributeViolation(loc, fmt, arg0, arg1);
+ safetyViolation = new AttributeViolation(loc, fmt, arg0, arg1, arg2);
if (fes)
fes.func.setUnsafe();
@@ -1494,7 +1496,7 @@ extern (C++) class FuncDeclaration : Declaration
else if (isSafe())
{
if (!gag && fmt)
- .error(loc, fmt, arg0 ? arg0.toChars() : "", arg1 ? arg1.toChars() : "");
+ .error(loc, fmt, arg0 ? arg0.toChars() : "", arg1 ? arg1.toChars() : "", arg2 ? arg2.toChars() : "");
return true;
}
@@ -4370,10 +4372,12 @@ extern (C++) final class NewDeclaration : FuncDeclaration
* fmt = printf-style format string
* arg0 = (optional) argument for first %s format specifier
* arg1 = (optional) argument for second %s format specifier
+ * arg2 = (optional) argument for third %s format specifier
* Returns: whether there's a safe error
*/
bool setUnsafe(Scope* sc,
- bool gag = false, Loc loc = Loc.init, const(char)* fmt = null, RootObject arg0 = null, RootObject arg1 = null)
+ bool gag = false, Loc loc = Loc.init, const(char)* fmt = null,
+ RootObject arg0 = null, RootObject arg1 = null, RootObject arg2 = null)
{
// TODO:
// For @system variables, unsafe initializers at global scope should mark
@@ -4394,13 +4398,13 @@ bool setUnsafe(Scope* sc,
{
// Message wil be gagged, but still call error() to update global.errors and for
// -verrors=spec
- .error(loc, fmt, arg0 ? arg0.toChars() : "", arg1 ? arg1.toChars() : "");
+ .error(loc, fmt, arg0 ? arg0.toChars() : "", arg1 ? arg1.toChars() : "", arg2 ? arg2.toChars() : "");
return true;
}
return false;
}
- return sc.func.setUnsafe(gag, loc, fmt, arg0, arg1);
+ return sc.func.setUnsafe(gag, loc, fmt, arg0, arg1, arg2);
}
/// Stores a reason why a function failed to infer a function attribute like `@safe` or `pure`
@@ -4421,6 +4425,8 @@ struct AttributeViolation
RootObject arg0 = null;
/// ditto
RootObject arg1 = null;
+ /// ditto
+ RootObject arg2 = null;
}
/// Print the reason why `fd` was inferred `@system` as a supplemental error
@@ -4438,7 +4444,8 @@ void errorSupplementalInferredSafety(FuncDeclaration fd, int maxDepth, bool depr
errorFunc(s.loc, deprecation ?
"which would be `@system` because of:" :
"which was inferred `@system` because of:");
- errorFunc(s.loc, s.fmtStr, s.arg0 ? s.arg0.toChars() : "", s.arg1 ? s.arg1.toChars() : "");
+ errorFunc(s.loc, s.fmtStr,
+ s.arg0 ? s.arg0.toChars() : "", s.arg1 ? s.arg1.toChars() : "", s.arg2 ? s.arg2.toChars() : "");
}
else if (FuncDeclaration fd2 = cast(FuncDeclaration) s.arg0)
{
diff --git a/gcc/d/dmd/globals.d b/gcc/d/dmd/globals.d
index 3766a0b..05886f9 100644
--- a/gcc/d/dmd/globals.d
+++ b/gcc/d/dmd/globals.d
@@ -299,7 +299,7 @@ extern (C++) struct Global
enum recursionLimit = 500; /// number of recursive template expansions before abort
- extern (C++) FileName function(FileName, ref const Loc, ref Array!(const(char)*) cppswitches, out bool, OutBuffer* defines) preprocess;
+ extern (C++) FileName function(FileName, ref const Loc, out bool, OutBuffer*) preprocess;
nothrow:
diff --git a/gcc/d/dmd/globals.h b/gcc/d/dmd/globals.h
index 07298dd..41472b2 100644
--- a/gcc/d/dmd/globals.h
+++ b/gcc/d/dmd/globals.h
@@ -272,7 +272,7 @@ struct Global
FileManager* fileManager;
- FileName (*preprocess)(FileName, const Loc&, Array<const char *>& cppswitches, bool&, OutBuffer&);
+ FileName (*preprocess)(FileName, const Loc&, bool&, OutBuffer&);
/* Start gagging. Return the current number of gagged errors
*/
diff --git a/gcc/d/dmd/hdrgen.d b/gcc/d/dmd/hdrgen.d
index fcc9b61..680d9c8 100644
--- a/gcc/d/dmd/hdrgen.d
+++ b/gcc/d/dmd/hdrgen.d
@@ -1449,7 +1449,20 @@ public:
buf.writestring(" = ");
if (stcToBuffer(buf, d.storage_class))
buf.writeByte(' ');
- d.aliassym.accept(this);
+ /*
+ https://issues.dlang.org/show_bug.cgi?id=23223
+ https://issues.dlang.org/show_bug.cgi?id=23222
+ This special case (initially just for modules) avoids some segfaults
+ and nicer -vcg-ast output.
+ */
+ if (d.aliassym.isModule())
+ {
+ buf.writestring(d.aliassym.ident.toString());
+ }
+ else
+ {
+ d.aliassym.accept(this);
+ }
}
else if (d.type.ty == Tfunction)
{
@@ -3916,6 +3929,8 @@ private void typeToBufferx(Type t, OutBuffer* buf, HdrGenState* hgs)
void visitTag(TypeTag t)
{
+ if (t.mod & MODFlags.const_)
+ buf.writestring("const ");
buf.writestring(Token.toChars(t.tok));
buf.writeByte(' ');
if (t.id)
diff --git a/gcc/d/dmd/importc.d b/gcc/d/dmd/importc.d
index bcfbd9a..afec5ef 100644
--- a/gcc/d/dmd/importc.d
+++ b/gcc/d/dmd/importc.d
@@ -81,10 +81,14 @@ Expression arrayFuncConv(Expression e, Scope* sc)
auto t = e.type.toBasetype();
if (auto ta = t.isTypeDArray())
{
+ if (!checkAddressable(e, sc))
+ return ErrorExp.get();
e = e.castTo(sc, ta.next.pointerTo());
}
else if (auto ts = t.isTypeSArray())
{
+ if (!checkAddressable(e, sc))
+ return ErrorExp.get();
e = e.castTo(sc, ts.next.pointerTo());
}
else if (t.isTypeFunction())
diff --git a/gcc/d/dmd/mtype.d b/gcc/d/dmd/mtype.d
index 6b5389d..860cfa9 100644
--- a/gcc/d/dmd/mtype.d
+++ b/gcc/d/dmd/mtype.d
@@ -4437,15 +4437,7 @@ extern (C++) final class TypeFunction : TypeNext
// Check escaping through `this`
if (tthis && tthis.isMutable())
{
- auto tb = tthis.toBasetype();
- AggregateDeclaration ad;
- if (auto tc = tb.isTypeClass())
- ad = tc.sym;
- else if (auto ts = tb.isTypeStruct())
- ad = ts.sym;
- else
- assert(0);
- foreach (VarDeclaration v; ad.fields)
+ foreach (VarDeclaration v; isAggregate(tthis).fields)
{
if (v.hasPointers())
return stc;
@@ -6655,16 +6647,18 @@ extern (C++) final class TypeTag : Type
Type resolved; /// type after semantic() in case there are more others
/// pointing to this instance, which can happen with
/// struct S { int a; } s1, *s2;
+ MOD mod; /// modifiers to apply after type is resolved (only MODFlags.const_ at the moment)
extern (D) this(const ref Loc loc, TOK tok, Identifier id, Type base, Dsymbols* members)
{
- //printf("TypeTag %p\n", this);
+ //printf("TypeTag ctor %s %p\n", id ? id.toChars() : "null".ptr, this);
super(Ttag);
this.loc = loc;
this.tok = tok;
this.id = id;
this.base = base;
this.members = members;
+ this.mod = 0;
}
override const(char)* kind() const
@@ -6674,6 +6668,7 @@ extern (C++) final class TypeTag : Type
override TypeTag syntaxCopy()
{
+ //printf("TypeTag syntaxCopy()\n");
// No semantic analysis done, no need to copy
return this;
}
diff --git a/gcc/d/dmd/ob.d b/gcc/d/dmd/ob.d
index 121a266..5ff73c9 100644
--- a/gcc/d/dmd/ob.d
+++ b/gcc/d/dmd/ob.d
@@ -1407,16 +1407,7 @@ void genKill(ref ObState obstate, ObNode* ob)
}
else if (auto td = s.isTupleDeclaration())
{
- foreach (o; *td.objects)
- {
- if (auto eo = o.isExpression())
- {
- if (auto se = eo.isDsymbolExp())
- {
- Dsymbol_visit(se.s);
- }
- }
- }
+ td.foreachVar(&Dsymbol_visit);
}
}
@@ -2107,16 +2098,7 @@ void checkObErrors(ref ObState obstate)
}
else if (auto td = s.isTupleDeclaration())
{
- foreach (o; *td.objects)
- {
- if (auto eo = o.isExpression())
- {
- if (auto se = eo.isDsymbolExp())
- {
- Dsymbol_visit(se.s);
- }
- }
- }
+ td.foreachVar(&Dsymbol_visit);
}
}
diff --git a/gcc/d/dmd/parse.d b/gcc/d/dmd/parse.d
index 89f8ae3..4e3fd53 100644
--- a/gcc/d/dmd/parse.d
+++ b/gcc/d/dmd/parse.d
@@ -4862,7 +4862,7 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer
if (udas !is null)
{
if (storage_class != 0)
- error("cannot put a storage-class in an alias declaration.");
+ error("cannot put a storage-class in an `alias` declaration.");
// parseAttributes shouldn't have set these variables
assert(link == linkage && !setAlignment && ealign is null);
auto tpl_ = cast(AST.TemplateDeclaration) s;
@@ -4887,7 +4887,7 @@ class Parser(AST, Lexer = dmd.lexer.Lexer) : Lexer
parseAttributes();
// type
if (udas)
- error("user-defined attributes not allowed for alias declarations");
+ error("user-defined attributes not allowed for `alias` declarations");
auto t = parseType();
@@ -5877,7 +5877,8 @@ LagainStc:
{
if (isDeclaration(&token, NeedDeclaratorId.mustIfDstyle, TOK.reserved, null))
goto Ldeclaration;
- if (peekNext() == TOK.leftParenthesis)
+ const tv = peekNext();
+ if (tv == TOK.leftParenthesis)
{
// mixin(string)
AST.Expression e = parseAssignExp();
@@ -5893,6 +5894,14 @@ LagainStc:
}
break;
}
+ else if (tv == TOK.template_)
+ {
+ // mixin template
+ nextToken();
+ AST.Dsymbol d = parseTemplateDeclaration(true);
+ s = new AST.ExpStatement(loc, d);
+ break;
+ }
AST.Dsymbol d = parseMixin();
s = new AST.ExpStatement(loc, d);
if (flags & ParseStatementFlags.scope_)
diff --git a/gcc/d/dmd/root/filename.d b/gcc/d/dmd/root/filename.d
index 3b7b75b0..226141d 100644
--- a/gcc/d/dmd/root/filename.d
+++ b/gcc/d/dmd/root/filename.d
@@ -734,16 +734,15 @@ nothrow:
* Returns:
* index of the first reserved character in path if found, size_t.max otherwise
*/
- extern (D) static size_t findReservedChar(const(char)* name) pure @nogc
+ extern (D) static size_t findReservedChar(const(char)[] name) pure @nogc @safe
{
version (Windows)
{
- size_t idx = 0;
// According to https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions
// the following characters are not allowed in path: < > : " | ? *
- for (const(char)* p = name; *p; p++, idx++)
+ foreach (idx; 0 .. name.length)
{
- char c = *p;
+ char c = name[idx];
if (c == '<' || c == '>' || c == ':' || c == '"' || c == '|' || c == '?' || c == '*')
{
return idx;
@@ -784,21 +783,21 @@ nothrow:
* Returns:
* true if path contains '..' reference to parent directory
*/
- extern (D) static bool refersToParentDir(const(char)* name) pure @nogc
+ extern (D) static bool refersToParentDir(const(char)[] name) pure @nogc @safe
{
- if (name[0] == '.' && name[1] == '.' && (!name[2] || isDirSeparator(name[2])))
+ size_t s = 0;
+ foreach (i; 0 .. name.length)
{
- return true;
- }
-
- for (const(char)* p = name; *p; p++)
- {
- char c = *p;
- if (isDirSeparator(c) && p[1] == '.' && p[2] == '.' && (!p[3] || isDirSeparator(p[3])))
+ if (isDirSeparator(name[i]))
{
- return true;
+ if (name[s..i] == "..")
+ return true;
+ s = i + 1;
}
}
+ if (name[s..$] == "..")
+ return true;
+
return false;
}
unittest
diff --git a/gcc/d/dmd/semantic2.d b/gcc/d/dmd/semantic2.d
index 73dcaa6..bf18a21 100644
--- a/gcc/d/dmd/semantic2.d
+++ b/gcc/d/dmd/semantic2.d
@@ -677,6 +677,11 @@ private extern(C++) final class Semantic2Visitor : Visitor
{
visit(cast(AggregateDeclaration) cd);
}
+
+ override void visit(TupleDeclaration td)
+ {
+ td.foreachVar((s) { s.accept(this); });
+ }
}
/**
diff --git a/gcc/d/dmd/semantic3.d b/gcc/d/dmd/semantic3.d
index a056c99..c5d7667 100644
--- a/gcc/d/dmd/semantic3.d
+++ b/gcc/d/dmd/semantic3.d
@@ -483,7 +483,7 @@ private extern(C++) final class Semantic3Visitor : Visitor
if ((funcdecl.flags & FUNCFLAG.inferScope) && !(fparam.storageClass & STC.scope_))
stc |= STC.maybescope;
- stc |= fparam.storageClass & (STC.IOR | STC.return_ | STC.scope_ | STC.lazy_ | STC.final_ | STC.TYPECTOR | STC.nodtor | STC.returnScope);
+ stc |= fparam.storageClass & (STC.IOR | STC.return_ | STC.scope_ | STC.lazy_ | STC.final_ | STC.TYPECTOR | STC.nodtor | STC.returnScope | STC.register);
v.storage_class = stc;
v.dsymbolSemantic(sc2);
if (!sc2.insert(v))
diff --git a/gcc/d/dmd/statementsem.d b/gcc/d/dmd/statementsem.d
index 06e28a4..f23b988 100644
--- a/gcc/d/dmd/statementsem.d
+++ b/gcc/d/dmd/statementsem.d
@@ -4401,19 +4401,21 @@ public auto makeTupleForeach(Scope* sc, bool isStatic, bool isDecl, ForeachState
Dsymbol ds = null;
if (!(storageClass & STC.manifest))
{
- if ((isStatic || tb.ty == Tfunction || storageClass&STC.alias_) && e.op == EXP.variable)
- ds = (cast(VarExp)e).var;
- else if (e.op == EXP.template_)
- ds = (cast(TemplateExp)e).td;
- else if (e.op == EXP.scope_)
- ds = (cast(ScopeExp)e).sds;
- else if (e.op == EXP.function_)
+ if (isStatic || tb.ty == Tfunction || storageClass & STC.alias_)
{
- auto fe = cast(FuncExp)e;
- ds = fe.td ? cast(Dsymbol)fe.td : fe.fd;
+ if (auto ve = e.isVarExp())
+ ds = ve.var;
+ else if (auto dve = e.isDotVarExp())
+ ds = dve.var;
}
- else if (e.op == EXP.overloadSet)
- ds = (cast(OverExp)e).vars;
+ if (auto te = e.isTemplateExp())
+ ds = te.td;
+ else if (auto se = e.isScopeExp())
+ ds = se.sds;
+ else if (auto fe = e.isFuncExp())
+ ds = fe.td ? fe.td : fe.fd;
+ else if (auto oe = e.isOverExp())
+ ds = oe.vars;
}
else if (storageClass & STC.alias_)
{
@@ -4530,6 +4532,7 @@ public auto makeTupleForeach(Scope* sc, bool isStatic, bool isDecl, ForeachState
auto field = Identifier.idPool(StaticForeach.tupleFieldName.ptr,StaticForeach.tupleFieldName.length);
Expression access = new DotIdExp(loc, e, field);
access = expressionSemantic(access, sc);
+ access = access.optimize(WANTvalue);
if (!tuple) return returnEarly();
//printf("%s\n",tuple.toChars());
foreach (l; 0 .. dim)
diff --git a/gcc/d/dmd/tokens.d b/gcc/d/dmd/tokens.d
index 170a534..86abedf 100644
--- a/gcc/d/dmd/tokens.d
+++ b/gcc/d/dmd/tokens.d
@@ -273,6 +273,7 @@ enum TOK : ubyte
__cdecl,
__declspec,
__stdcall,
+ __pragma,
__attribute__,
}
@@ -582,6 +583,7 @@ private immutable TOK[] keywords =
TOK.__cdecl,
TOK.__declspec,
TOK.__stdcall,
+ TOK.__pragma,
TOK.__attribute__,
];
@@ -610,7 +612,7 @@ static immutable TOK[TOK.max + 1] Ckeywords =
restrict, return_, int16, signed, sizeof_, static_, struct_, switch_, typedef_,
union_, unsigned, void_, volatile, while_, asm_, typeof_,
_Alignas, _Alignof, _Atomic, _Bool, _Complex, _Generic, _Imaginary, _Noreturn,
- _Static_assert, _Thread_local, _import, __cdecl, __declspec, __stdcall, __attribute__ ];
+ _Static_assert, _Thread_local, _import, __cdecl, __declspec, __stdcall, __pragma, __attribute__ ];
foreach (kw; Ckwds)
tab[kw] = cast(TOK) kw;
@@ -880,6 +882,7 @@ extern (C++) struct Token
TOK.__cdecl : "__cdecl",
TOK.__declspec : "__declspec",
TOK.__stdcall : "__stdcall",
+ TOK.__pragma : "__pragma",
TOK.__attribute__ : "__attribute__",
];
diff --git a/gcc/d/dmd/tokens.h b/gcc/d/dmd/tokens.h
index f9b6062..35fd68b 100644
--- a/gcc/d/dmd/tokens.h
+++ b/gcc/d/dmd/tokens.h
@@ -282,6 +282,7 @@ enum class TOK : unsigned char
cdecl_,
declspec,
stdcall,
+ pragma,
attribute__,
MAX,
diff --git a/gcc/d/dmd/typesem.d b/gcc/d/dmd/typesem.d
index 31ecbd2..0469b92 100644
--- a/gcc/d/dmd/typesem.d
+++ b/gcc/d/dmd/typesem.d
@@ -119,7 +119,7 @@ private void resolveTupleIndex(const ref Loc loc, Scope* sc, Dsymbol s, out Expr
const(uinteger_t) d = eindex.toUInteger();
if (d >= tup.objects.dim)
{
- .error(loc, "tuple index `%llu` exceeds length %llu", d, cast(ulong)tup.objects.dim);
+ .error(loc, "tuple index `%llu` out of bounds `[0 .. %llu]`", d, cast(ulong)tup.objects.dim);
pt = Type.terror;
return;
}
@@ -554,7 +554,7 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
uinteger_t d = mtype.dim.toUInteger();
if (d >= tup.objects.dim)
{
- .error(loc, "tuple index %llu exceeds %llu", cast(ulong)d, cast(ulong)tup.objects.dim);
+ .error(loc, "tuple index `%llu` out of bounds `[0 .. %llu]`", cast(ulong)d, cast(ulong)tup.objects.dim);
return error();
}
@@ -649,7 +649,7 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
uinteger_t d = mtype.dim.toUInteger();
if (d >= tt.arguments.dim)
{
- .error(loc, "tuple index %llu exceeds %llu", cast(ulong)d, cast(ulong)tt.arguments.dim);
+ .error(loc, "tuple index `%llu` out of bounds `[0 .. %llu]`", cast(ulong)d, cast(ulong)tt.arguments.dim);
return error();
}
Type telem = (*tt.arguments)[cast(size_t)d].type;
@@ -1224,6 +1224,25 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
continue;
}
+ // -preview=in: Always add `ref` when used with `extern(C++)` functions
+ // Done here to allow passing opaque types with `in`
+ if (global.params.previewIn && (fparam.storageClass & (STC.in_ | STC.ref_)) == STC.in_)
+ {
+ switch (tf.linkage)
+ {
+ case LINK.cpp:
+ fparam.storageClass |= STC.ref_;
+ break;
+ case LINK.default_, LINK.d:
+ break;
+ default:
+ .error(loc, "cannot use `in` parameters with `extern(%s)` functions",
+ linkageToChars(tf.linkage));
+ .errorSupplemental(loc, "parameter `%s` declared as `in` here", fparam.toChars());
+ break;
+ }
+ }
+
if (t.ty == Tfunction)
{
.error(loc, "cannot have parameter of function type `%s`", fparam.type.toChars());
@@ -1759,8 +1778,7 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
{
/* struct S s, *p;
*/
- //printf("already resolved\n");
- return mtype.resolved;
+ return mtype.resolved.addSTC(mtype.mod);
}
/* Find the current scope by skipping tag scopes.
@@ -1831,7 +1849,7 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
{
mtype.id = Identifier.generateId("__tag"[]);
declareTag();
- return mtype.resolved;
+ return mtype.resolved.addSTC(mtype.mod);
}
/* look for pre-existing declaration
@@ -1844,7 +1862,7 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
if (mtype.tok == TOK.enum_ && !mtype.members)
.error(mtype.loc, "`enum %s` is incomplete without members", mtype.id.toChars()); // C11 6.7.2.3-3
declareTag();
- return mtype.resolved;
+ return mtype.resolved.addSTC(mtype.mod);
}
/* A redeclaration only happens if both declarations are in
@@ -1944,7 +1962,7 @@ extern(C++) Type typeSemantic(Type type, const ref Loc loc, Scope* sc)
declareTag();
}
}
- return mtype.resolved;
+ return mtype.resolved.addSTC(mtype.mod);
}
switch (type.ty)
@@ -2572,7 +2590,7 @@ void resolve(Type mt, const ref Loc loc, Scope* sc, out Expression pe, out Type
const d = mt.dim.toUInteger();
if (d >= tup.objects.dim)
{
- error(loc, "tuple index `%llu` exceeds length %llu", d, cast(ulong) tup.objects.dim);
+ error(loc, "tuple index `%llu` out of bounds `[0 .. %llu]`", d, cast(ulong) tup.objects.dim);
return returnError();
}
@@ -4891,9 +4909,9 @@ Expression getMaxMinValue(EnumDeclaration ed, const ref Loc loc, Identifier id)
*/
Expression e = em.value;
Expression ec = new CmpExp(id == Id.max ? EXP.greaterThan : EXP.lessThan, em.loc, e, *pval);
- ed.inuse++;
+ ed.inuse = true;
ec = ec.expressionSemantic(em._scope);
- ed.inuse--;
+ ed.inuse = false;
ec = ec.ctfeInterpret();
if (ec.op == EXP.error)
{
diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc
index fba397b..1bb10a8 100644
--- a/gcc/d/expr.cc
+++ b/gcc/d/expr.cc
@@ -1222,9 +1222,8 @@ public:
}
else
{
- /* Get the data pointer and length for static and dynamic arrays. */
+ /* Get the array and length for static and dynamic arrays. */
tree array = d_save_expr (build_expr (e->e1));
- tree ptr = convert_expr (array, tb1, tb1->nextOf ()->pointerTo ());
tree length = NULL_TREE;
if (tb1->ty != TY::Tpointer)
@@ -1245,10 +1244,35 @@ public:
if (tb1->ty != TY::Tpointer)
index = build_bounds_index_condition (e, index, length);
- /* Index the .ptr. */
- ptr = void_okay_p (ptr);
- this->result_ = indirect_ref (TREE_TYPE (TREE_TYPE (ptr)),
- build_array_index (ptr, index));
+ /* Convert vectors to their underlying array type. */
+ if (VECTOR_TYPE_P (TREE_TYPE (array)))
+ {
+ tree array_type =
+ build_array_type_nelts (TREE_TYPE (TREE_TYPE (array)),
+ TYPE_VECTOR_SUBPARTS (TREE_TYPE (array)));
+ d_mark_addressable (array, false);
+ array = build1 (VIEW_CONVERT_EXPR, array_type, array);
+ }
+
+ if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
+ {
+ /* Generate `array[index]'. When the index is non-constant, we must
+ mark the array as addressable because we'll need to do pointer
+ arithmetic on its address. */
+ if (TREE_CODE (index) != INTEGER_CST)
+ d_mark_addressable (array);
+
+ this->result_ = build4 (ARRAY_REF, TREE_TYPE (TREE_TYPE (array)),
+ array, index, NULL_TREE, NULL_TREE);
+ }
+ else
+ {
+ /* Generate `array.ptr[index]'. */
+ tree ptr = convert_expr (array, tb1, tb1->nextOf ()->pointerTo ());
+ ptr = void_okay_p (ptr);
+ this->result_ = indirect_ref (TREE_TYPE (TREE_TYPE (ptr)),
+ build_pointer_index (ptr, index));
+ }
}
}
@@ -1347,7 +1371,7 @@ public:
if (!integer_zerop (lwr_tree))
{
tree ptrtype = TREE_TYPE (ptr);
- ptr = build_array_index (void_okay_p (ptr), lwr_tree);
+ ptr = build_pointer_index (void_okay_p (ptr), lwr_tree);
ptr = build_nop (ptrtype, ptr);
}
@@ -2893,14 +2917,13 @@ public:
void visit (VectorExp *e) final override
{
- tree type = build_ctype (e->type);
-
/* First handle array literal expressions. */
if (e->e1->op == EXP::arrayLiteral)
{
ArrayLiteralExp *ale = e->e1->isArrayLiteralExp ();
vec <constructor_elt, va_gc> *elms = NULL;
bool constant_p = true;
+ tree type = build_ctype (e->type);
vec_safe_reserve (elms, ale->elements->length);
for (size_t i = 0; i < ale->elements->length; i++)
@@ -2920,9 +2943,16 @@ public:
else
this->result_ = build_constructor (type, elms);
}
+ else if (e->e1->type->toBasetype ()->ty == TY::Tsarray)
+ {
+ /* Build a vector representation from a static array. */
+ this->result_ = convert_expr (build_expr (e->e1, this->constp_),
+ e->e1->type, e->type);
+ }
else
{
/* Build constructor from single value. */
+ tree type = build_ctype (e->type);
tree value = d_convert (TREE_TYPE (type),
build_expr (e->e1, this->constp_, true));
this->result_ = build_vector_from_val (type, value);
diff --git a/gcc/d/intrinsics.cc b/gcc/d/intrinsics.cc
index 4222b8a..75d4318 100644
--- a/gcc/d/intrinsics.cc
+++ b/gcc/d/intrinsics.cc
@@ -29,9 +29,12 @@ along with GCC; see the file COPYING3. If not see
#include "tm.h"
#include "function.h"
#include "tree.h"
+#include "diagnostic.h"
+#include "langhooks.h"
#include "fold-const.h"
#include "stringpool.h"
#include "builtins.h"
+#include "vec-perm-indices.h"
#include "d-tree.h"
@@ -161,6 +164,16 @@ maybe_set_intrinsic (FuncDeclaration *decl)
case INTRINSIC_MULUL:
case INTRINSIC_NEGS:
case INTRINSIC_NEGSL:
+ case INTRINSIC_LOADUNALIGNED:
+ case INTRINSIC_STOREUNALIGNED:
+ case INTRINSIC_SHUFFLE:
+ case INTRINSIC_SHUFFLEVECTOR:
+ case INTRINSIC_CONVERTVECTOR:
+ case INTRINSIC_BLENDVECTOR:
+ case INTRINSIC_EQUALMASK:
+ case INTRINSIC_NOTEQUALMASK:
+ case INTRINSIC_GREATERMASK:
+ case INTRINSIC_GREATEREQUALMASK:
case INTRINSIC_VLOAD8:
case INTRINSIC_VLOAD16:
case INTRINSIC_VLOAD32:
@@ -169,6 +182,8 @@ maybe_set_intrinsic (FuncDeclaration *decl)
case INTRINSIC_VSTORE16:
case INTRINSIC_VSTORE32:
case INTRINSIC_VSTORE64:
+ /* Cannot interpret function during CTFE. If the library
+ provides a definition, its body will be used instead. */
break;
case INTRINSIC_POW:
@@ -196,6 +211,313 @@ maybe_set_intrinsic (FuncDeclaration *decl)
}
}
+/* Helper function for maybe_warn_intrinsic_mismatch. Issue warning about
+ mismatch in the EXPECTED return type in call to the intrinsic function in
+ CALLEXP, and return TRUE. */
+
+static bool
+warn_mismatched_return_type (tree callexp, const char *expected)
+{
+ warning_at (EXPR_LOCATION (callexp), OPT_Wbuiltin_declaration_mismatch,
+ "mismatch in return type of intrinsic function %qD "
+ "(%qT, should be %qs)", get_callee_fndecl (callexp),
+ TREE_TYPE (callexp), expected);
+ return true;
+}
+
+/* Helper function for maybe_warn_intrinsic_mismatch. Issue warning or error
+ about mismatch in the EXPECTED argument type at ARGNO in call to the
+ intrinsic function in CALLEXP, and return TRUE. */
+
+static bool
+warn_mismatched_argument (tree callexp, unsigned argno, const char *expected)
+{
+ warning_at (EXPR_LOCATION (callexp), OPT_Wbuiltin_declaration_mismatch,
+ "mismatch in argument %u type of intrinsic function %qD "
+ "(%qT, should be %qs)", argno + 1, get_callee_fndecl (callexp),
+ TREE_TYPE (CALL_EXPR_ARG (callexp, argno)), expected);
+ return true;
+}
+
+static bool
+warn_mismatched_argument (tree callexp, unsigned argno, tree expected,
+ bool error_p = false)
+{
+ if (error_p)
+ error_at (EXPR_LOCATION (callexp),
+ "mismatch in argument %u type of intrinsic function %qD "
+ "(%qT, should be %qT)", argno + 1, get_callee_fndecl (callexp),
+ TREE_TYPE (CALL_EXPR_ARG (callexp, argno)), expected);
+ else
+ warning_at (EXPR_LOCATION (callexp), OPT_Wbuiltin_declaration_mismatch,
+ "mismatch in argument %u type of intrinsic function %qD "
+ "(%qT, should be %qT)", argno + 1, get_callee_fndecl (callexp),
+ TREE_TYPE (CALL_EXPR_ARG (callexp, argno)), expected);
+
+ return true;
+}
+
+/* Helper function for maybe_warn_intrinsic_mismatch. Builds a vector integer
+ type suitable for the mask argument of INTRINSIC_SHUFFLE from the given
+ input argument TYPE. */
+
+static tree
+build_shuffle_mask_type (tree type)
+{
+ const unsigned bits = GET_MODE_BITSIZE (SCALAR_TYPE_MODE (TREE_TYPE (type)));
+ const int unsignedp = TYPE_UNSIGNED (TREE_TYPE (type));
+ tree inner = lang_hooks.types.type_for_size (bits, unsignedp);
+ gcc_assert (inner && TREE_CODE (inner) == INTEGER_TYPE);
+
+ /* %% Get the front-end type for the vector so the D type will be
+ printed (this should really be handled by a D tree printer). */
+ Type *t = build_frontend_type (inner);
+ gcc_assert (t != NULL);
+ unsigned HOST_WIDE_INT nunits = TYPE_VECTOR_SUBPARTS (type).to_constant ();
+
+ return build_ctype (TypeVector::create (t->sarrayOf (nunits)));
+}
+
+/* Checks if call to intrinsic FUNCTION in CALLEXP matches the internal
+ type and value constraints that we expect from the library definitions.
+ Returns TRUE and issues a warning if there is a mismatch.
+
+ Note: The return type and parameters are encoded into the signature `deco'
+ string that we match on in maybe_set_intrinsic(), so if the deco mangle
+ string has 'i' in the part that specifies the return type, then the matched
+ intrinsic will always have the return type `int'.
+
+ For templated intrinsics however, we rely on template constraints to ensure
+ that the generic type matches what we expect it to be. There is still an
+ enforced relationship between a template argument and its instantiated type.
+ For example: `T func(T)(T*)' would have the generic return type `@1T' and
+ generic parameter type `@1PT', so it can be assumed that if the return type
+ matches what we expect then all parameters are fine as well. Otherwise it
+ can be assumed that some internal_error has occurred for this to be the case.
+ Where a templated intrinsic has multiple template arguments, each generic
+ type will need to be checked for its validity. */
+
+static bool
+maybe_warn_intrinsic_mismatch (tree function, tree callexp)
+{
+ switch (DECL_INTRINSIC_CODE (function))
+ {
+ case INTRINSIC_NONE:
+ default:
+ return false;
+
+ case INTRINSIC_LOADUNALIGNED:
+ {
+ /* Expects the signature:
+ vector(T) loadUnaligned (vector(T)*); */
+ gcc_assert (call_expr_nargs (callexp) == 1);
+
+ tree ptr = TREE_TYPE (CALL_EXPR_ARG (callexp, 0));
+ if (!VECTOR_TYPE_P (TREE_TYPE (callexp))
+ || !POINTER_TYPE_P (ptr) || !VECTOR_TYPE_P (TREE_TYPE (ptr)))
+ return warn_mismatched_return_type (callexp, "__vector(T)");
+
+ return false;
+ }
+
+ case INTRINSIC_STOREUNALIGNED:
+ {
+ /* Expects the signature:
+ vector(T) storeUnaligned (vector(T)*, vector(T)); */
+ gcc_assert (call_expr_nargs (callexp) == 2);
+
+ tree ptr = TREE_TYPE (CALL_EXPR_ARG (callexp, 0));
+ tree val = TREE_TYPE (CALL_EXPR_ARG (callexp, 1));
+ if (!VECTOR_TYPE_P (TREE_TYPE (callexp))
+ || !POINTER_TYPE_P (ptr) || !VECTOR_TYPE_P (TREE_TYPE (ptr))
+ || !VECTOR_TYPE_P (val))
+ return warn_mismatched_return_type (callexp, "__vector(T)");
+
+ return false;
+ }
+
+ case INTRINSIC_SHUFFLE:
+ case INTRINSIC_BLENDVECTOR:
+ {
+ /* Expects the signature:
+ vector(T) shuffle (vector(T), vector(U), vector(V));
+ vector(T) blendvector (vector(T), vector(U), vector(V)); */
+ gcc_assert (call_expr_nargs (callexp) == 3);
+
+ tree vec0 = TREE_TYPE (CALL_EXPR_ARG (callexp, 0));
+ if (!VECTOR_TYPE_P (TREE_TYPE (callexp))
+ || !VECTOR_TYPE_P (vec0))
+ return warn_mismatched_return_type (callexp, "__vector(T)");
+
+ tree vec1 = TREE_TYPE (CALL_EXPR_ARG (callexp, 1));
+ if (!VECTOR_TYPE_P (vec1))
+ return warn_mismatched_argument (callexp, 1, vec0);
+
+ tree mask = TREE_TYPE (CALL_EXPR_ARG (callexp, 2));
+ if (!VECTOR_TYPE_P (mask) || !VECTOR_INTEGER_TYPE_P (mask))
+ {
+ tree expected = build_shuffle_mask_type (vec0);
+ return warn_mismatched_argument (callexp, 2, expected,
+ VECTOR_TYPE_P (mask));
+ }
+
+ /* Types have been validated, now issue errors about violations on the
+ constraints of the intrinsic. */
+ if (TYPE_MAIN_VARIANT (vec0) != TYPE_MAIN_VARIANT (vec1))
+ return warn_mismatched_argument (callexp, 1, vec0, true);
+
+ /* Vector element sizes should be equal between arguments and mask. */
+ if (GET_MODE_BITSIZE (SCALAR_TYPE_MODE (TREE_TYPE (vec0)))
+ != GET_MODE_BITSIZE (SCALAR_TYPE_MODE (TREE_TYPE (mask)))
+ || maybe_ne (TYPE_VECTOR_SUBPARTS (vec0),
+ TYPE_VECTOR_SUBPARTS (mask))
+ || maybe_ne (TYPE_VECTOR_SUBPARTS (vec1),
+ TYPE_VECTOR_SUBPARTS (mask)))
+ {
+ tree expected = build_shuffle_mask_type (vec0);
+ return warn_mismatched_argument (callexp, 2, expected, true);
+ }
+
+ return false;
+ }
+
+ case INTRINSIC_SHUFFLEVECTOR:
+ {
+ /* Expects the signature:
+ vector(T[N]) shufflevector (vector(T), vector(U), N...); */
+ gcc_assert (call_expr_nargs (callexp) >= 3);
+ gcc_assert (VECTOR_TYPE_P (TREE_TYPE (callexp)));
+
+ tree vec0 = TREE_TYPE (CALL_EXPR_ARG (callexp, 0));
+ if (!VECTOR_TYPE_P (vec0))
+ return warn_mismatched_argument (callexp, 0, "__vector(T)");
+
+ tree vec1 = TREE_TYPE (CALL_EXPR_ARG (callexp, 1));
+ if (!VECTOR_TYPE_P (vec1))
+ return warn_mismatched_argument (callexp, 1, vec0);
+
+ for (int i = 2; i < call_expr_nargs (callexp); i++)
+ {
+ tree idx = TREE_TYPE (CALL_EXPR_ARG (callexp, i));
+ if (TREE_CODE (idx) != INTEGER_TYPE)
+ return warn_mismatched_argument (callexp, i, d_int_type);
+ }
+
+ /* Types have been validated, now issue errors about violations on the
+ constraints of the intrinsic. */
+ if (TYPE_MAIN_VARIANT (TREE_TYPE (vec0))
+ != TYPE_MAIN_VARIANT (TREE_TYPE (vec1)))
+ {
+ /* %% Get the front-end type for the vector so the D type will be
+ printed (this should really be handled by a D tree printer). */
+ unsigned HOST_WIDE_INT nunits;
+ if (!TYPE_VECTOR_SUBPARTS (vec1).is_constant (&nunits))
+ break;
+
+ Type *inner = build_frontend_type (TREE_TYPE (vec0));
+ Type *vector = TypeVector::create (inner->sarrayOf (nunits));
+ return warn_mismatched_argument (callexp, 1,
+ build_ctype (vector), true);
+ }
+
+ /* Vector sizes should be known, and number of indices a power of 2. */
+ unsigned HOST_WIDE_INT vec0_length;
+ unsigned HOST_WIDE_INT vec1_length;
+ if (!TYPE_VECTOR_SUBPARTS (vec0).is_constant (&vec0_length)
+ || !TYPE_VECTOR_SUBPARTS (vec1).is_constant (&vec1_length)
+ || !pow2p_hwi (call_expr_nargs (callexp) - 2))
+ break;
+
+ /* All index arguments must be valid constants as well. */
+ for (int i = 2; i < call_expr_nargs (callexp); i++)
+ {
+ tree idx = CALL_EXPR_ARG (callexp, i);
+ if (!tree_fits_shwi_p (idx))
+ {
+ error_at (EXPR_LOCATION (callexp),
+ "argument %qE cannot be read at compile time", idx);
+ return true;
+ }
+
+ HOST_WIDE_INT iidx = tree_to_shwi (idx);
+ if (iidx < 0
+ || (unsigned HOST_WIDE_INT) iidx >= vec0_length + vec1_length)
+ {
+ error_at (EXPR_LOCATION (callexp),
+ "element index %qE is out of bounds %<[0 .. %E]%>",
+ idx, build_integer_cst (vec0_length + vec1_length));
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ case INTRINSIC_CONVERTVECTOR:
+ {
+ /* Expects the signature:
+ vector(T) convertvector (vector(U)); */
+ gcc_assert (call_expr_nargs (callexp) == 1);
+
+ tree ret = TREE_TYPE (callexp);
+ if (!VECTOR_TYPE_P (ret)
+ || (!VECTOR_INTEGER_TYPE_P (ret) && !VECTOR_FLOAT_TYPE_P (ret)))
+ return warn_mismatched_return_type (callexp, "__vector(T)");
+
+ tree arg = TREE_TYPE (CALL_EXPR_ARG (callexp, 0));
+ if (!VECTOR_TYPE_P (arg)
+ || (!VECTOR_INTEGER_TYPE_P (arg) && !VECTOR_FLOAT_TYPE_P (arg)))
+ return warn_mismatched_argument (callexp, 0, "__vector(T)");
+
+ /* Types have been validated, now issue errors about violations on the
+ constraints of the intrinsic. */
+ if (maybe_ne (TYPE_VECTOR_SUBPARTS (ret), TYPE_VECTOR_SUBPARTS (arg)))
+ {
+ /* %% Get the front-end type for the vector so the D type will be
+ printed (this should really be handled by a D tree printer). */
+ unsigned HOST_WIDE_INT nunits;
+ if (!TYPE_VECTOR_SUBPARTS (ret).is_constant (&nunits))
+ break;
+
+ Type *inner = build_frontend_type (TREE_TYPE (arg));
+ Type *vector = TypeVector::create (inner->sarrayOf (nunits));
+ return warn_mismatched_argument (callexp, 0,
+ build_ctype (vector), true);
+ }
+
+ return false;
+ }
+
+ case INTRINSIC_EQUALMASK:
+ case INTRINSIC_NOTEQUALMASK:
+ case INTRINSIC_GREATERMASK:
+ case INTRINSIC_GREATEREQUALMASK:
+ {
+ /* Expects the signature:
+ vector(T) equalMask(vector(T), vector(T));
+ vector(T) notEqualMask(vector(T), vector(T));
+ vector(T) greaterMask(vector(T), vector(T));
+ vector(T) greateOrEqualMask(vector(T), vector(T)); */
+ gcc_assert (call_expr_nargs (callexp) == 2);
+
+ tree vec0 = TREE_TYPE (CALL_EXPR_ARG (callexp, 0));
+ tree vec1 = TREE_TYPE (CALL_EXPR_ARG (callexp, 1));
+ if (!VECTOR_TYPE_P (TREE_TYPE (callexp))
+ || !VECTOR_TYPE_P (vec0)
+ || !VECTOR_TYPE_P (vec1)
+ || TYPE_MAIN_VARIANT (vec0) != TYPE_MAIN_VARIANT (vec1))
+ return warn_mismatched_return_type (callexp, "__vector(T)");
+
+ return false;
+ }
+ }
+
+ /* Generic mismatch warning if it hasn't already been handled. */
+ warning_at (EXPR_LOCATION (callexp), OPT_Wbuiltin_declaration_mismatch,
+ "mismatch in call of intrinsic function %qD", function);
+ return true;
+}
+
/* Construct a function call to the built-in function CODE, N is the number of
arguments, and the `...' parameters are the argument expressions.
The original call expression is held in CALLEXP. */
@@ -306,8 +628,8 @@ expand_intrinsic_bt (intrinsic_code intrinsic, tree callexp)
tree bitsize = fold_convert (type, TYPE_SIZE (TREE_TYPE (ptr)));
/* ptr[bitnum / bitsize] */
- ptr = build_array_index (ptr, fold_build2 (TRUNC_DIV_EXPR, type,
- bitnum, bitsize));
+ ptr = build_pointer_index (ptr, fold_build2 (TRUNC_DIV_EXPR, type,
+ bitnum, bitsize));
ptr = indirect_ref (type, ptr);
/* mask = 1 << (bitnum % bitsize); */
@@ -421,12 +743,8 @@ expand_intrinsic_rotate (intrinsic_code intrinsic, tree callexp)
count = CALL_EXPR_ARG (callexp, 1);
else
{
- tree callee = CALL_EXPR_FN (callexp);
-
- if (TREE_CODE (callee) == ADDR_EXPR)
- callee = TREE_OPERAND (callee, 0);
-
/* Retrieve from the encoded template instantation. */
+ tree callee = get_callee_fndecl (callexp);
TemplateInstance *ti = DECL_LANG_FRONTEND (callee)->isInstantiated ();
gcc_assert (ti && ti->tiargs && ti->tiargs->length == 2);
@@ -754,6 +1072,232 @@ expand_volatile_store (tree callexp)
return modify_expr (result, value);
}
+/* Expand a front-end intrinsic call to a vector comparison intrinsic, which is
+ either a call to equalMask(), notEqualMask(), greaterMask(), or
+ greaterOrEqualMask(). These intrinsics take two arguments, the signature to
+ which can be either:
+
+ vector(T) equalMask(vector(T) vec0, vector(T) vec1);
+ vector(T) notEqualMask(vector(T) vec0, vector(T) vec1);
+ vector(T) greaterMask(vector(T) vec0, vector(T) vec1);
+ vector(T) greaterOrEqualMask(vector(T) vec0, vector(T) vec1);
+
+ This performs an element-wise comparison between two vectors VEC0 and VEC1,
+ returning a vector with signed integral elements. */
+
+static tree
+expand_intrinsic_vec_cond (tree_code code, tree callexp)
+{
+ tree vec0 = CALL_EXPR_ARG (callexp, 0);
+ tree vec1 = CALL_EXPR_ARG (callexp, 1);
+ tree type = TREE_TYPE (callexp);
+
+ tree cmp = fold_build2_loc (EXPR_LOCATION (callexp), code,
+ truth_type_for (type), vec0, vec1);
+ return fold_build3_loc (EXPR_LOCATION (callexp), VEC_COND_EXPR, type, cmp,
+ build_minus_one_cst (type), build_zero_cst (type));
+}
+
+/* Expand a front-end instrinsic call to convertvector(). This takes one
+ argument, the signature to which is:
+
+ vector(T) convertvector (vector(F) vec);
+
+ This converts a vector VEC to TYPE by casting every element in VEC to the
+ element type of TYPE. The original call expression is held in CALLEXP. */
+
+static tree
+expand_intrinsic_vec_convert (tree callexp)
+{
+ tree vec = CALL_EXPR_ARG (callexp, 0);
+ tree type = TREE_TYPE (callexp);
+
+ /* Use VIEW_CONVERT for simple vector conversions. */
+ if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (vec)))
+ == TYPE_MAIN_VARIANT (TREE_TYPE (type)))
+ || (VECTOR_INTEGER_TYPE_P (TREE_TYPE (vec))
+ && VECTOR_INTEGER_TYPE_P (type)
+ && (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (vec)))
+ == TYPE_PRECISION (TREE_TYPE (type)))))
+ return build1_loc (EXPR_LOCATION (callexp), VIEW_CONVERT_EXPR, type, vec);
+
+ return build_call_expr_internal_loc (EXPR_LOCATION (callexp), IFN_VEC_CONVERT,
+ type, 1, vec);
+}
+
+/* Expand a front-end instrinsic call to blendvector(). This expects to take
+ three arguments, the signature to which is:
+
+ vector(T) blendvector (vector(T) vec0, vector(U) vec1, vector(M) mask);
+
+ This builds a VEC_COND_EXPR if VEC0, VEC1, and MASK are vector types, VEC0
+ has the same type as VEC1, and the number of elements of VEC0, VEC1, and MASK
+ are the same. The original call expression is held in CALLEXP. */
+
+static tree
+expand_intrinsic_vec_blend (tree callexp)
+{
+ tree vec0 = CALL_EXPR_ARG (callexp, 0);
+ tree vec1 = CALL_EXPR_ARG (callexp, 1);
+ tree mask = CALL_EXPR_ARG (callexp, 2);
+
+ tree cmp = fold_build2_loc (EXPR_LOCATION (callexp), NE_EXPR,
+ truth_type_for (TREE_TYPE (mask)),
+ mask, build_zero_cst (TREE_TYPE (mask)));
+
+ tree ret = fold_build3_loc (EXPR_LOCATION (callexp), VEC_COND_EXPR,
+ TREE_TYPE (callexp), cmp, vec0, vec1);
+
+ if (!CONSTANT_CLASS_P (vec0) || !CONSTANT_CLASS_P (vec1))
+ ret = force_target_expr (ret);
+
+ return ret;
+}
+
+/* Expand a front-end instrinsic call to shuffle(). This expects to take three
+ arguments, the signature to which is:
+
+ vector(T) shuffle (vector(T) vec0, vector(T) vec1, vector(M) mask);
+
+ This builds a VEC_PERM_EXPR if VEC0, VEC1, and MASK are vector types, VEC0
+ has the same type as VEC1, and the number of elements of VEC0, VEC1, and MASK
+ are the same. The original call expression is held in CALLEXP. */
+
+static tree
+expand_intrinsic_vec_shuffle (tree callexp)
+{
+ tree vec0 = CALL_EXPR_ARG (callexp, 0);
+ tree vec1 = CALL_EXPR_ARG (callexp, 1);
+ tree mask = CALL_EXPR_ARG (callexp, 2);
+
+ return build3_loc (EXPR_LOCATION (callexp), VEC_PERM_EXPR,
+ TREE_TYPE (callexp), vec0, vec1, mask);
+}
+
+/* Expand a front-end instrinsic call to shufflevector(). This takes two
+ positional arguments and a variadic list, the signature to which is:
+
+ vector(TM) shuffle (vector(T) vec1, vector(T) vec2, index...);
+
+ This builds a VEC_PERM_EXPR if VEC0 and VEC1 are vector types, VEC0 has the
+ same element type as VEC1, and the number of elements in INDEX is a valid
+ power of two. The original call expression is held in CALLEXP. */
+
+static tree
+expand_intrinsic_vec_shufflevector (tree callexp)
+{
+ tree vec0 = CALL_EXPR_ARG (callexp, 0);
+ tree vec1 = CALL_EXPR_ARG (callexp, 1);
+
+ unsigned HOST_WIDE_INT v0elems =
+ TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec0)).to_constant ();
+ unsigned HOST_WIDE_INT v1elems =
+ TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec1)).to_constant ();
+
+ unsigned HOST_WIDE_INT num_indices = call_expr_nargs (callexp) - 2;
+ unsigned HOST_WIDE_INT masklen = MAX (num_indices, MAX (v0elems, v1elems));
+ unsigned HOST_WIDE_INT pad_size = (v0elems < masklen ? masklen - v0elems : 0);
+ vec_perm_builder sel (masklen, masklen, 1);
+
+ unsigned n = 0;
+ for (; n < num_indices; ++n)
+ {
+ tree idx = CALL_EXPR_ARG (callexp, n + 2);
+ HOST_WIDE_INT iidx = tree_to_shwi (idx);
+ /* VEC_PERM_EXPR does not allow different sized inputs. */
+ if ((unsigned HOST_WIDE_INT) iidx >= v0elems)
+ iidx += pad_size;
+
+ sel.quick_push (iidx);
+ }
+
+ /* VEC_PERM_EXPR does not support a result that is smaller than the inputs. */
+ for (; n < masklen; ++n)
+ sel.quick_push (n);
+
+ vec_perm_indices indices (sel, 2, masklen);
+
+ /* Pad out arguments to the common vector size. */
+ tree ret_type = build_vector_type (TREE_TYPE (TREE_TYPE (vec0)), masklen);
+ if (v0elems < masklen)
+ {
+ constructor_elt elt = { NULL_TREE, build_zero_cst (TREE_TYPE (vec0)) };
+ vec0 = build_constructor_single (ret_type, NULL_TREE, vec0);
+ for (unsigned i = 1; i < masklen / v0elems; ++i)
+ vec_safe_push (CONSTRUCTOR_ELTS (vec0), elt);
+ }
+
+ if (v1elems < masklen)
+ {
+ constructor_elt elt = { NULL_TREE, build_zero_cst (TREE_TYPE (vec1)) };
+ vec1 = build_constructor_single (ret_type, NULL_TREE, vec1);
+ for (unsigned i = 1; i < masklen / v1elems; ++i)
+ vec_safe_push (CONSTRUCTOR_ELTS (vec1), elt);
+ }
+
+ tree mask_type = build_vector_type (build_nonstandard_integer_type
+ (TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (ret_type))), 1),
+ masklen);
+ tree ret = build3_loc (EXPR_LOCATION (callexp), VEC_PERM_EXPR, ret_type, vec0,
+ vec1, vec_perm_indices_to_tree (mask_type, indices));
+
+ /* Get the low part we are interested in. */
+ if (num_indices < masklen)
+ {
+ ret = build3_loc (EXPR_LOCATION (callexp), BIT_FIELD_REF,
+ TREE_TYPE (callexp), ret,
+ TYPE_SIZE (TREE_TYPE (callexp)), bitsize_zero_node);
+ /* Wrap the low part operation in a TARGET_EXPR so it gets a separate
+ temporary during gimplification. */
+ ret = force_target_expr (ret);
+ }
+
+ return ret;
+}
+
+/* Expand a front-end instrinsic call to loadUnaligned(). This takes one
+ argument, the signature to which is:
+
+ vector(T) loadUnaligned (vector(T)* ptr)
+
+ This generates a load of a vector from an unaligned address PTR.
+ The original call expression is held in CALLEXP. */
+
+static tree
+expand_intrinsic_vec_load_unaligned (tree callexp)
+{
+ tree ptr = CALL_EXPR_ARG (callexp, 0);
+
+ tree unaligned_type = build_variant_type_copy (TREE_TYPE (TREE_TYPE (ptr)));
+ SET_TYPE_ALIGN (unaligned_type, 1 * BITS_PER_UNIT);
+ TYPE_USER_ALIGN (unaligned_type) = 1;
+
+ tree load = indirect_ref (unaligned_type, ptr);
+ return convert (TREE_TYPE (callexp), load);
+}
+
+/* Expand a front-end instrinsic call to storeUnaligned(). This takes two
+ arguments, the signature to which is:
+
+ vector(T) storeUnaligned (vector(T)* ptr, vector(T) value)
+
+ This generates an assignment of a vector VALUE to an unaligned address PTR.
+ The original call expression is held in CALLEXP. */
+
+static tree
+expand_intrinsic_vec_store_unaligned (tree callexp)
+{
+ tree ptr = CALL_EXPR_ARG (callexp, 0);
+ tree vec = CALL_EXPR_ARG (callexp, 1);
+
+ tree unaligned_type = build_variant_type_copy (TREE_TYPE (TREE_TYPE (ptr)));
+ SET_TYPE_ALIGN (unaligned_type, 1 * BITS_PER_UNIT);
+ TYPE_USER_ALIGN (unaligned_type) = 1;
+
+ tree load = indirect_ref (unaligned_type, ptr);
+ return build_assign (MODIFY_EXPR, load, vec);
+}
+
/* If CALLEXP is for an intrinsic , expand and return inlined compiler
generated instructions. Most map directly to GCC builtins, others
require a little extra work around them. */
@@ -761,18 +1305,24 @@ expand_volatile_store (tree callexp)
tree
maybe_expand_intrinsic (tree callexp)
{
- tree callee = CALL_EXPR_FN (callexp);
-
- if (TREE_CODE (callee) == ADDR_EXPR)
- callee = TREE_OPERAND (callee, 0);
+ tree callee = get_callee_fndecl (callexp);
- if (TREE_CODE (callee) != FUNCTION_DECL)
+ if (callee == NULL_TREE || TREE_CODE (callee) != FUNCTION_DECL)
return callexp;
/* Don't expand CTFE-only intrinsics outside of semantic processing. */
if (DECL_BUILT_IN_CTFE (callee) && !doing_semantic_analysis_p)
return callexp;
+ /* Gate the expansion of the intrinsic with constraint checks, if any fail
+ then bail out without any lowering. */
+ if (maybe_warn_intrinsic_mismatch (callee, callexp))
+ {
+ /* Reset the built-in flag so that we don't trip fold_builtin. */
+ set_decl_built_in_function (callee, NOT_BUILT_IN, 0);
+ return callexp;
+ }
+
intrinsic_code intrinsic = DECL_INTRINSIC_CODE (callee);
built_in_function code;
@@ -920,6 +1470,36 @@ maybe_expand_intrinsic (tree callexp)
case INTRINSIC_VSTORE64:
return expand_volatile_store (callexp);
+ case INTRINSIC_LOADUNALIGNED:
+ return expand_intrinsic_vec_load_unaligned (callexp);
+
+ case INTRINSIC_STOREUNALIGNED:
+ return expand_intrinsic_vec_store_unaligned (callexp);
+
+ case INTRINSIC_SHUFFLE:
+ return expand_intrinsic_vec_shuffle (callexp);
+
+ case INTRINSIC_SHUFFLEVECTOR:
+ return expand_intrinsic_vec_shufflevector (callexp);
+
+ case INTRINSIC_CONVERTVECTOR:
+ return expand_intrinsic_vec_convert (callexp);
+
+ case INTRINSIC_BLENDVECTOR:
+ return expand_intrinsic_vec_blend (callexp);
+
+ case INTRINSIC_EQUALMASK:
+ return expand_intrinsic_vec_cond (EQ_EXPR, callexp);
+
+ case INTRINSIC_NOTEQUALMASK:
+ return expand_intrinsic_vec_cond (NE_EXPR, callexp);
+
+ case INTRINSIC_GREATERMASK:
+ return expand_intrinsic_vec_cond (GT_EXPR, callexp);
+
+ case INTRINSIC_GREATEREQUALMASK:
+ return expand_intrinsic_vec_cond (GE_EXPR, callexp);
+
default:
gcc_unreachable ();
}
diff --git a/gcc/d/intrinsics.def b/gcc/d/intrinsics.def
index 61c1737..b8d1ec5 100644
--- a/gcc/d/intrinsics.def
+++ b/gcc/d/intrinsics.def
@@ -252,5 +252,28 @@ DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
DEF_D_BUILTIN (INTRINSIC_VASTART, BUILT_IN_NONE, "va_start", "core.stdc.stdarg",
"FJ@7va_listK@1TZv")
+/* gcc.simd intrinsics. */
+
+DEF_D_BUILTIN (INTRINSIC_LOADUNALIGNED, BUILT_IN_NONE, "loadUnaligned",
+ "gcc.simd", "FP@1VZ@1V")
+DEF_D_BUILTIN (INTRINSIC_STOREUNALIGNED, BUILT_IN_NONE, "storeUnaligned",
+ "gcc.simd", "FP@1V@1VZ@1V")
+DEF_D_BUILTIN (INTRINSIC_SHUFFLE, BUILT_IN_NONE, "shuffle", "gcc.simd",
+ "F@2V0@2V1@1MZ@2V0")
+DEF_D_BUILTIN (INTRINSIC_SHUFFLEVECTOR, BUILT_IN_NONE, "shufflevector",
+ "gcc.simd", "F@2V1@2V2@1MZNhH@1M@")
+DEF_D_BUILTIN (INTRINSIC_CONVERTVECTOR, BUILT_IN_NONE, "convertvector",
+ "gcc.simd", "F@1TZ@1V")
+DEF_D_BUILTIN (INTRINSIC_BLENDVECTOR, BUILT_IN_NONE, "blendvector", "gcc.simd",
+ "F@2V0@2V1@1MZ@2V0")
+DEF_D_BUILTIN (INTRINSIC_EQUALMASK, BUILT_IN_NONE, "equalMask", "gcc.simd",
+ "F@1V@1VZ@1V")
+DEF_D_BUILTIN (INTRINSIC_NOTEQUALMASK, BUILT_IN_NONE, "notEqualMask",
+ "gcc.simd", "F@1V@1VZ@1V")
+DEF_D_BUILTIN (INTRINSIC_GREATERMASK, BUILT_IN_NONE, "greaterMask", "gcc.simd",
+ "F@1V@1VZ@1V")
+DEF_D_BUILTIN (INTRINSIC_GREATEREQUALMASK, BUILT_IN_NONE,
+ "greaterOrEqualMask", "gcc.simd", "F@1V@1VZ@1V")
+
#undef DEF_D_BUILTIN
#undef DEF_CTFE_BUILTIN
diff --git a/gcc/d/toir.cc b/gcc/d/toir.cc
index 50d4415..e5f5751 100644
--- a/gcc/d/toir.cc
+++ b/gcc/d/toir.cc
@@ -1022,6 +1022,7 @@ public:
/* Generate: (<retval> = expr, return <retval>); */
tree expr = build_expr_dtor (s->exp);
tree init = stabilize_expr (&expr);
+ expr = convert_for_rvalue (expr, s->exp->type, type);
expr = build_assign (INIT_EXPR, this->func_->shidden, expr);
add_stmt (compound_expr (init, expr));
}
diff --git a/gcc/d/typeinfo.cc b/gcc/d/typeinfo.cc
index 1f8afdd..d1f0d59 100644
--- a/gcc/d/typeinfo.cc
+++ b/gcc/d/typeinfo.cc
@@ -1050,7 +1050,7 @@ public:
this->layout_string (ti->deco);
/* Default initializer for struct. */
- tree ptr = (sd->zeroInit) ? null_pointer_node
+ tree ptr = (sd->zeroInit ()) ? null_pointer_node
: build_address (aggregate_initializer_decl (sd));
this->layout_field (d_array_value (array_type_node,
size_int (sd->structsize), ptr));
@@ -1771,7 +1771,7 @@ public:
{
if (!ti->needsCodegen ())
{
- if (ti->minst || sd->requestTypeInfo)
+ if (ti->minst || sd->requestTypeInfo ())
return;
this->result_ |= true;
diff --git a/gcc/d/types.cc b/gcc/d/types.cc
index b706c91..38cc7f5 100644
--- a/gcc/d/types.cc
+++ b/gcc/d/types.cc
@@ -392,10 +392,10 @@ layout_aggregate_members (Dsymbols *members, tree context, bool inherited_p)
RootObject *ro = (*td->objects)[j];
gcc_assert (ro->dyncast () == DYNCAST_EXPRESSION);
Expression *e = (Expression *) ro;
- gcc_assert (e->op == EXP::dSymbol);
- DsymbolExp *se = e->isDsymbolExp ();
+ gcc_assert (e->op == EXP::variable);
+ VarExp *ve = e->isVarExp ();
- tmembers.push (se->s);
+ tmembers.push (ve->var);
}
fields += layout_aggregate_members (&tmembers, context,
diff --git a/gcc/dce.cc b/gcc/dce.cc
index 6676cbc..64aa0aa 100644
--- a/gcc/dce.cc
+++ b/gcc/dce.cc
@@ -849,12 +849,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 1 && flag_dce && dbg_cnt (dce_ud);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_ud_dce ();
}
@@ -1280,12 +1280,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_dce && dbg_cnt (dce_fast);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_fast_dce ();
}
diff --git a/gcc/df-core.cc b/gcc/df-core.cc
index e3a56bf..b53464c 100644
--- a/gcc/df-core.cc
+++ b/gcc/df-core.cc
@@ -741,8 +741,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize > 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return optimize > 0; }
+ unsigned int execute (function *) final override
{
return rest_of_handle_df_initialize ();
}
@@ -781,8 +781,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize == 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return optimize == 0; }
+ unsigned int execute (function *) final override
{
return rest_of_handle_df_initialize ();
}
@@ -848,7 +848,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_df_finish ();
}
diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc
index 051fa6c..872c67e 100644
--- a/gcc/diagnostic-format-json.cc
+++ b/gcc/diagnostic-format-json.cc
@@ -101,11 +101,9 @@ json_from_location_range (diagnostic_context *context,
if (loc_range->m_label)
{
- label_text text;
- text = loc_range->m_label->get_text (range_idx);
+ label_text text (loc_range->m_label->get_text (range_idx));
if (text.m_buffer)
result->set ("label", new json::string (text.m_buffer));
- text.maybe_free ();
}
return result;
@@ -345,6 +343,7 @@ diagnostic_output_format_init_json (diagnostic_context *context)
/* The metadata is handled in JSON format, rather than as text. */
context->show_cwe = false;
+ context->show_rules = false;
/* The option is handled in JSON format, rather than as text. */
context->show_option_requested = false;
diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc
index 0c33179..1e4ebc8 100644
--- a/gcc/diagnostic-format-sarif.cc
+++ b/gcc/diagnostic-format-sarif.cc
@@ -584,7 +584,6 @@ sarif_builder::make_location_object (const diagnostic_event &event)
label_text ev_desc = event.get_desc (false);
json::object *message_obj = make_message_object (ev_desc.m_buffer);
location_obj->set ("message", message_obj);
- ev_desc.maybe_free ();
return location_obj;
}
@@ -1556,6 +1555,7 @@ diagnostic_output_format_init_sarif (diagnostic_context *context)
/* The metadata is handled in SARIF format, rather than as text. */
context->show_cwe = false;
+ context->show_rules = false;
/* The option is handled in SARIF format, rather than as text. */
context->show_option_requested = false;
diff --git a/gcc/diagnostic-metadata.h b/gcc/diagnostic-metadata.h
index ae59942..80017d3 100644
--- a/gcc/diagnostic-metadata.h
+++ b/gcc/diagnostic-metadata.h
@@ -24,19 +24,62 @@ along with GCC; see the file COPYING3. If not see
/* A bundle of additional metadata that can be associated with a
diagnostic.
- Currently this only supports associating a CWE identifier with a
- diagnostic. */
+ This supports an optional CWE identifier, and zero or more
+ "rules". */
class diagnostic_metadata
{
public:
+ /* Abstract base class for referencing a rule that has been violated,
+ such as within a coding standard, or within a specification. */
+ class rule
+ {
+ public:
+ virtual char *make_description () const = 0;
+ virtual char *make_url () const = 0;
+ };
+
+ /* Concrete subclass. */
+ class precanned_rule : public rule
+ {
+ public:
+ precanned_rule (const char *desc, const char *url)
+ : m_desc (desc), m_url (url)
+ {}
+
+ char *make_description () const final override
+ {
+ return m_desc ? xstrdup (m_desc) : NULL;
+ }
+
+ char *make_url () const final override
+ {
+ return m_url ? xstrdup (m_url) : NULL;
+ }
+
+ private:
+ const char *m_desc;
+ const char *m_url;
+ };
+
diagnostic_metadata () : m_cwe (0) {}
void add_cwe (int cwe) { m_cwe = cwe; }
int get_cwe () const { return m_cwe; }
+ /* Associate R with the diagnostic. R must outlive
+ the metadata. */
+ void add_rule (const rule &r)
+ {
+ m_rules.safe_push (&r);
+ }
+
+ unsigned get_num_rules () const { return m_rules.length (); }
+ const rule &get_rule (unsigned idx) const { return *(m_rules[idx]); }
+
private:
int m_cwe;
+ auto_vec<const rule *> m_rules;
};
#endif /* ! GCC_DIAGNOSTIC_METADATA_H */
diff --git a/gcc/diagnostic-show-locus.cc b/gcc/diagnostic-show-locus.cc
index 6eafe19..08dab20 100644
--- a/gcc/diagnostic-show-locus.cc
+++ b/gcc/diagnostic-show-locus.cc
@@ -1867,6 +1867,31 @@ layout::print_annotation_line (linenum_type row, const line_bounds lbounds)
print_newline ();
}
+/* A version of label_text that can live inside a vec.
+ Requires manual cleanup via maybe_free. */
+
+struct pod_label_text
+{
+ pod_label_text ()
+ : m_buffer (NULL), m_caller_owned (false)
+ {}
+
+ pod_label_text (label_text &&other)
+ : m_buffer (other.m_buffer), m_caller_owned (other.m_owned)
+ {
+ other.moved_from ();
+ }
+
+ void maybe_free ()
+ {
+ if (m_caller_owned)
+ free (m_buffer);
+ }
+
+ char *m_buffer;
+ bool m_caller_owned;
+};
+
/* Implementation detail of layout::print_any_labels.
A label within the given row of source. */
@@ -1878,10 +1903,10 @@ public:
int state_idx, int column,
label_text text)
: m_state_idx (state_idx), m_column (column),
- m_text (text), m_label_line (0), m_has_vbar (true)
+ m_text (std::move (text)), m_label_line (0), m_has_vbar (true)
{
- const int bytes = strlen (text.m_buffer);
- m_display_width = cpp_display_width (text.m_buffer, bytes, policy);
+ const int bytes = strlen (m_text.m_buffer);
+ m_display_width = cpp_display_width (m_text.m_buffer, bytes, policy);
}
/* Sorting is primarily by column, then by state index. */
@@ -1900,7 +1925,7 @@ public:
int m_state_idx;
int m_column;
- label_text m_text;
+ pod_label_text m_text;
size_t m_display_width;
int m_label_line;
bool m_has_vbar;
@@ -1941,7 +1966,7 @@ layout::print_any_labels (linenum_type row)
if (text.m_buffer == NULL)
continue;
- labels.safe_push (line_label (m_policy, i, disp_col, text));
+ labels.safe_push (line_label (m_policy, i, disp_col, std::move (text)));
}
}
@@ -5508,7 +5533,7 @@ test_tab_expansion (const line_table_case &case_)
static void
test_escaping_bytes_1 (const line_table_case &case_)
{
- const char content[] = "before\0\1\2\3\r\x80\xff""after\n";
+ const char content[] = "before\0\1\2\3\v\x80\xff""after\n";
const size_t sz = sizeof (content);
temp_source_file tmp (SELFTEST_LOCATION, ".c", content, sz);
line_table_test ltt (case_);
@@ -5523,18 +5548,18 @@ test_escaping_bytes_1 (const line_table_case &case_)
if (finish > LINE_MAP_MAX_LOCATION_WITH_COLS)
return;
- /* Locations of the NUL and \r bytes. */
+ /* Locations of the NUL and \v bytes. */
location_t nul_loc
= linemap_position_for_line_and_column (line_table, ord_map, 1, 7);
- location_t r_loc
+ location_t v_loc
= linemap_position_for_line_and_column (line_table, ord_map, 1, 11);
gcc_rich_location richloc (nul_loc);
- richloc.add_range (r_loc);
+ richloc.add_range (v_loc);
{
test_diagnostic_context dc;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
- ASSERT_STREQ (" before \1\2\3 \x80\xff""after\n"
+ ASSERT_STREQ (" before \1\2\3\v\x80\xff""after\n"
" ^ ~\n",
pp_formatted_text (dc.printer));
}
@@ -5544,7 +5569,7 @@ test_escaping_bytes_1 (const line_table_case &case_)
dc.escape_format = DIAGNOSTICS_ESCAPE_FORMAT_UNICODE;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
ASSERT_STREQ
- (" before<U+0000><U+0001><U+0002><U+0003><U+000D><80><ff>after\n"
+ (" before<U+0000><U+0001><U+0002><U+0003><U+000B><80><ff>after\n"
" ^~~~~~~~ ~~~~~~~~\n",
pp_formatted_text (dc.printer));
}
@@ -5552,7 +5577,7 @@ test_escaping_bytes_1 (const line_table_case &case_)
test_diagnostic_context dc;
dc.escape_format = DIAGNOSTICS_ESCAPE_FORMAT_BYTES;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
- ASSERT_STREQ (" before<00><01><02><03><0d><80><ff>after\n"
+ ASSERT_STREQ (" before<00><01><02><03><0b><80><ff>after\n"
" ^~~~ ~~~~\n",
pp_formatted_text (dc.printer));
}
diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc
index f2a82ff..22f7b0b 100644
--- a/gcc/diagnostic.cc
+++ b/gcc/diagnostic.cc
@@ -190,6 +190,7 @@ diagnostic_initialize (diagnostic_context *context, int n_opts)
for (i = 0; i < rich_location::STATICALLY_ALLOCATED_RANGES; i++)
context->caret_chars[i] = '^';
context->show_cwe = false;
+ context->show_rules = false;
context->path_format = DPF_NONE;
context->show_path_depths = false;
context->show_option_requested = false;
@@ -1291,6 +1292,51 @@ print_any_cwe (diagnostic_context *context,
}
}
+/* If DIAGNOSTIC has any rules associated with it, print them.
+
+ For example, if the diagnostic metadata associates it with a rule
+ named "STR34-C", then " [STR34-C]" will be printed, suitably colorized,
+ with any URL provided by the rule. */
+
+static void
+print_any_rules (diagnostic_context *context,
+ const diagnostic_info *diagnostic)
+{
+ if (diagnostic->metadata == NULL)
+ return;
+
+ for (unsigned idx = 0; idx < diagnostic->metadata->get_num_rules (); idx++)
+ {
+ const diagnostic_metadata::rule &rule
+ = diagnostic->metadata->get_rule (idx);
+ if (char *desc = rule.make_description ())
+ {
+ pretty_printer *pp = context->printer;
+ char *saved_prefix = pp_take_prefix (context->printer);
+ pp_string (pp, " [");
+ pp_string (pp,
+ colorize_start (pp_show_color (pp),
+ diagnostic_kind_color[diagnostic->kind]));
+ char *url = NULL;
+ if (pp->url_format != URL_FORMAT_NONE)
+ {
+ url = rule.make_url ();
+ if (url)
+ pp_begin_url (pp, url);
+ }
+ pp_string (pp, desc);
+ pp_set_prefix (context->printer, saved_prefix);
+ if (pp->url_format != URL_FORMAT_NONE)
+ if (url)
+ pp_end_url (pp);
+ free (url);
+ pp_string (pp, colorize_stop (pp_show_color (pp)));
+ pp_character (pp, ']');
+ free (desc);
+ }
+ }
+}
+
/* Print any metadata about the option used to control DIAGNOSTIC to CONTEXT's
printer, e.g. " [-Werror=uninitialized]".
Subroutine of diagnostic_report_diagnostic. */
@@ -1504,6 +1550,8 @@ diagnostic_report_diagnostic (diagnostic_context *context,
pp_output_formatted_text (context->printer);
if (context->show_cwe)
print_any_cwe (context, diagnostic);
+ if (context->show_rules)
+ print_any_rules (context, diagnostic);
if (context->show_option_requested)
print_option_information (context, diagnostic, orig_diag_kind);
(*diagnostic_finalizer (context)) (context, diagnostic, orig_diag_kind);
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 96c9a72..ae6f2df 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -227,6 +227,9 @@ struct diagnostic_context
diagnostics. */
bool show_cwe;
+ /* True if we should print any rules associated with diagnostics. */
+ bool show_rules;
+
/* How should diagnostic_path objects be printed. */
enum diagnostic_path_format path_format;
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 38d943c..e513316 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -14633,8 +14633,6 @@ instructions, but allow the compiler to schedule those calls.
* SH Built-in Functions::
* SPARC VIS Built-in Functions::
* TI C6X Built-in Functions::
-* TILE-Gx Built-in Functions::
-* TILEPro Built-in Functions::
* x86 Built-in Functions::
* x86 transactional memory intrinsics::
* x86 control-flow protection intrinsics::
@@ -21567,75 +21565,6 @@ int _abs (int);
int _abs2 (int);
@end smallexample
-@node TILE-Gx Built-in Functions
-@subsection TILE-Gx Built-in Functions
-
-GCC provides intrinsics to access every instruction of the TILE-Gx
-processor. The intrinsics are of the form:
-
-@smallexample
-
-unsigned long long __insn_@var{op} (...)
-
-@end smallexample
-
-Where @var{op} is the name of the instruction. Refer to the ISA manual
-for the complete list of instructions.
-
-GCC also provides intrinsics to directly access the network registers.
-The intrinsics are:
-
-@smallexample
-unsigned long long __tile_idn0_receive (void);
-unsigned long long __tile_idn1_receive (void);
-unsigned long long __tile_udn0_receive (void);
-unsigned long long __tile_udn1_receive (void);
-unsigned long long __tile_udn2_receive (void);
-unsigned long long __tile_udn3_receive (void);
-void __tile_idn_send (unsigned long long);
-void __tile_udn_send (unsigned long long);
-@end smallexample
-
-The intrinsic @code{void __tile_network_barrier (void)} is used to
-guarantee that no network operations before it are reordered with
-those after it.
-
-@node TILEPro Built-in Functions
-@subsection TILEPro Built-in Functions
-
-GCC provides intrinsics to access every instruction of the TILEPro
-processor. The intrinsics are of the form:
-
-@smallexample
-
-unsigned __insn_@var{op} (...)
-
-@end smallexample
-
-@noindent
-where @var{op} is the name of the instruction. Refer to the ISA manual
-for the complete list of instructions.
-
-GCC also provides intrinsics to directly access the network registers.
-The intrinsics are:
-
-@smallexample
-unsigned __tile_idn0_receive (void);
-unsigned __tile_idn1_receive (void);
-unsigned __tile_sn_receive (void);
-unsigned __tile_udn0_receive (void);
-unsigned __tile_udn1_receive (void);
-unsigned __tile_udn2_receive (void);
-unsigned __tile_udn3_receive (void);
-void __tile_idn_send (unsigned);
-void __tile_sn_send (unsigned);
-void __tile_udn_send (unsigned);
-@end smallexample
-
-The intrinsic @code{void __tile_network_barrier (void)} is used to
-guarantee that no network operations before it are reordered with
-those after it.
-
@node x86 Built-in Functions
@subsection x86 Built-in Functions
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 0a17e9f..50404d0 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -750,7 +750,7 @@ mips64orion, mips64vr, mipsel, mipsisa32, mipsisa32r2, mipsisa64, mipsisa64r2,
mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
msp430, nds32be, nds32le, nios2, nvptx, or1k, pdp11, powerpc, powerpc64,
powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
-s390, s390x, sh, shle, sparc, sparc64, tic6x, tilegx, tilegxbe, tilepro, v850,
+s390, s390x, sh, shle, sparc, sparc64, tic6x, v850,
v850e, v850e1, vax, visium, x86_64, xstormy16, xtensa
@end quotation
@@ -3637,12 +3637,6 @@ information have to.
@item
@uref{#c6x-x-x,,c6x-*-*}
@item
-@uref{#tilegx-x-linux,,tilegx-*-linux*}
-@item
-@uref{#tilegxbe-x-linux,,tilegxbe-*-linux*}
-@item
-@uref{#tilepro-x-linux,,tilepro-*-linux*}
-@item
@uref{#visium-x-elf, visium-*-elf}
@item
@uref{#x-x-vxworks,,*-*-vxworks*}
@@ -4943,30 +4937,6 @@ The C6X family of processors. This port requires binutils-2.22 or newer.
@html
<hr />
@end html
-@anchor{tilegx-*-linux}
-@heading tilegx-*-linux*
-The TILE-Gx processor in little endian mode, running GNU/Linux. This
-port requires binutils-2.22 or newer.
-
-@html
-<hr />
-@end html
-@anchor{tilegxbe-*-linux}
-@heading tilegxbe-*-linux*
-The TILE-Gx processor in big endian mode, running GNU/Linux. This
-port requires binutils-2.23 or newer.
-
-@html
-<hr />
-@end html
-@anchor{tilepro-*-linux}
-@heading tilepro-*-linux*
-The TILEPro processor running GNU/Linux. This port requires
-binutils-2.22 or newer.
-
-@html
-<hr />
-@end html
@anchor{visium-x-elf}
@heading visium-*-elf
CDS VISIUMcore processor.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index b09ef0e..a3797ae 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -268,6 +268,7 @@ Objective-C and Objective-C++ Dialects}.
-fno-diagnostics-show-option -fno-diagnostics-show-caret @gol
-fno-diagnostics-show-labels -fno-diagnostics-show-line-numbers @gol
-fno-diagnostics-show-cwe @gol
+-fno-diagnostics-show-rule @gol
-fdiagnostics-minimum-margin-width=@var{width} @gol
-fdiagnostics-parseable-fixits -fdiagnostics-generate-patch @gol
-fdiagnostics-show-template-tree -fno-elide-type @gol
@@ -572,6 +573,7 @@ Objective-C and Objective-C++ Dialects}.
-fprofile-exclude-files=@var{regex} @gol
-fprofile-reproducible=@r{[}multithreaded@r{|}parallel-runs@r{|}serial@r{]} @gol
-fsanitize=@var{style} -fsanitize-recover -fsanitize-recover=@var{style} @gol
+-fsanitize-trap -fsanitize-trap=@var{style} @gol
-fasan-shadow-offset=@var{number} -fsanitize-sections=@var{s1},@var{s2},... @gol
-fsanitize-undefined-trap-on-error -fbounds-check @gol
-fcf-protection=@r{[}full@r{|}branch@r{|}return@r{|}none@r{|}check@r{]} @gol
@@ -614,7 +616,7 @@ Objective-C and Objective-C++ Dialects}.
@item Linker Options
@xref{Link Options,,Options for Linking}.
@gccoptlist{@var{object-file-name} -fuse-ld=@var{linker} -l@var{library} @gol
--nostartfiles -nodefaultlibs -nolibc -nostdlib @gol
+-nostartfiles -nodefaultlibs -nolibc -nostdlib -nostdlib++ @gol
-e @var{entry} --entry=@var{entry} @gol
-pie -pthread -r -rdynamic @gol
-s -static -static-pie -static-libgcc -static-libstdc++ @gol
@@ -1329,13 +1331,6 @@ See RS/6000 and PowerPC Options.
@emph{System V Options}
@gccoptlist{-Qy -Qn -YP,@var{paths} -Ym,@var{dir}}
-@emph{TILE-Gx Options}
-@gccoptlist{-mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian @gol
--mcmodel=@var{code-model}}
-
-@emph{TILEPro Options}
-@gccoptlist{-mcpu=@var{cpu} -m32}
-
@emph{V850 Options}
@gccoptlist{-mlong-calls -mno-long-calls -mep -mno-ep @gol
-mprolog-function -mno-prolog-function -mspace @gol
@@ -4000,6 +3995,7 @@ a C++ program. The new-style casts (@code{dynamic_cast},
less vulnerable to unintended effects and much easier to search for.
@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
+@itemx -Woverloaded-virtual=@var{n}
@opindex Woverloaded-virtual
@opindex Wno-overloaded-virtual
@cindex overloaded virtual function, warning
@@ -4013,7 +4009,7 @@ struct A @{
@};
struct B: public A @{
- void f(int);
+ void f(int); // does not override
@};
@end smallexample
@@ -4028,6 +4024,29 @@ b->f();
@noindent
fails to compile.
+The optional level suffix controls the behavior when all the
+declarations in the derived class override virtual functions in the
+base class, even if not all of the base functions are overridden:
+
+@smallexample
+struct C @{
+ virtual void f();
+ virtual void f(int);
+@};
+
+struct D: public C @{
+ void f(int); // does override
+@}
+@end smallexample
+
+This pattern is less likely to be a mistake; if D is only used
+virtually, the user might have decided that the base class semantics
+for some of the overloads are fine.
+
+At level 1, this case does not warn; at level 2, it does.
+@option{-Woverloaded-virtual} by itself selects level 2. Level 1 is
+included in @option{-Wall}.
+
@item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
@opindex Wno-pmf-conversions
@opindex Wpmf-conversions
@@ -4990,6 +5009,15 @@ diagnostics. GCC plugins may also provide diagnostics with such metadata.
By default, if this information is present, it will be printed with
the diagnostic. This option suppresses the printing of this metadata.
+@item -fno-diagnostics-show-rules
+@opindex fno-diagnostics-show-rules
+@opindex fdiagnostics-show-rules
+Diagnostic messages can optionally have rules associated with them, such
+as from a coding standard, or a specification.
+GCC itself does not do this for any of its diagnostics, but plugins may do so.
+By default, if this information is present, it will be printed with
+the diagnostic. This option suppresses the printing of this metadata.
+
@item -fno-diagnostics-show-line-numbers
@opindex fno-diagnostics-show-line-numbers
@opindex fdiagnostics-show-line-numbers
@@ -9674,9 +9702,15 @@ This analysis is much more expensive than other GCC warnings.
Enabling this option effectively enables the following warnings:
@gccoptlist{ @gol
+-Wanalyzer-allocation-size @gol
-Wanalyzer-double-fclose @gol
-Wanalyzer-double-free @gol
-Wanalyzer-exposure-through-output-file @gol
+-Wanalyzer-fd-access-mode-mismatch @gol
+-Wanalyzer-fd-double-close @gol
+-Wanalyzer-fd-leak @gol
+-Wanalyzer-fd-use-after-close @gol
+-Wanalyzer-fd-use-without-check @gol
-Wanalyzer-file-leak @gol
-Wanalyzer-free-of-non-heap @gol
-Wanalyzer-malloc-leak @gol
@@ -9721,6 +9755,19 @@ By default, the analysis silently stops if the code is too
complicated for the analyzer to fully explore and it reaches an internal
limit. The @option{-Wanalyzer-too-complex} option warns if this occurs.
+@item -Wno-analyzer-allocation-size
+@opindex Wanalyzer-allocation-size
+@opindex Wno-analyzer-allocation-size
+This warning requires @option{-fanalyzer}, which enables it; use
+@option{-Wno-analyzer-allocation-size}
+to disable it.
+
+This diagnostic warns for paths through the code in which a pointer to
+a buffer is assigned to point at a buffer with a size that is not a
+multiple of @code{sizeof (*pointer)}.
+
+See @url{https://cwe.mitre.org/data/definitions/131.html, CWE-131: Incorrect Calculation of Buffer Size}.
+
@item -Wno-analyzer-double-fclose
@opindex Wanalyzer-double-fclose
@opindex Wno-analyzer-double-fclose
@@ -9751,6 +9798,56 @@ This diagnostic warns for paths through the code in which a
security-sensitive value is written to an output file
(such as writing a password to a log file).
+@item -Wno-analyzer-fd-access-mode-mismatch
+@opindex Wanalyzer-fd-access-mode-mismatch
+@opindex Wno-analyzer-fd-access-mode-mismatch
+This warning requires @option{-fanalyzer}, which enables it; use
+@option{-Wno-analyzer-fd-access-mode-mismatch}
+to disable it.
+
+This diagnostic warns for paths through code in which a
+@code{read} on a write-only file descriptor is attempted, or vice versa
+
+@item -Wno-analyzer-fd-double-close
+@opindex Wanalyzer-fd-double-close
+@opindex Wno-analyzer-fd-double-close
+This warning requires @option{-fanalyzer}, which enables it; use
+@option{-Wno-analyzer-fd-double-close}
+to disable it.
+
+This diagnostic warns for paths through code in which a
+file descriptor can be closed more than once.
+
+@item -Wno-analyzer-fd-leak
+@opindex Wanalyzer-fd-leak
+@opindex Wno-analyzer-fd-leak
+This warning requires @option{-fanalyzer}, which enables it; use
+@option{-Wno-analyzer-fd-leak}
+to disable it.
+
+This diagnostic warns for paths through code in which an
+open file descriptor is leaked.
+
+@item -Wno-analyzer-fd-use-after-close
+@opindex Wanalyzer-fd-use-after-close
+@opindex Wno-analyzer-fd-use-after-close
+This warning requires @option{-fanalyzer}, which enables it; use
+@option{-Wno-analyzer-fd-use-after-close}
+to disable it.
+
+This diagnostic warns for paths through code in which a
+read or write is called on a closed file descriptor.
+
+@item -Wno-analyzer-fd-use-without-check
+@opindex Wanalyzer-fd-use-without-check
+@opindex Wno-analyzer-fd-use-without-check
+This warning requires @option{-fanalyzer}, which enables it; use
+@option{-Wno-analyzer-fd-use-without-check}
+to disable it.
+
+This diagnostic warns for paths through code in which a
+file descriptor is used without being checked for validity.
+
@item -Wno-analyzer-file-leak
@opindex Wanalyzer-file-leak
@opindex Wno-analyzer-file-leak
@@ -12901,6 +12998,20 @@ also at @option{-O0} if @option{-fsection-anchors} is explicitly requested.
Additionally @option{-fno-toplevel-reorder} implies
@option{-fno-section-anchors}.
+@item -funreachable-traps
+@opindex funreachable-traps
+With this option, the compiler turns calls to
+@code{__builtin_unreachable} into traps, instead of using them for
+optimization. This also affects any such calls implicitly generated
+by the compiler.
+
+This option has the same effect as @option{-fsanitize=unreachable
+-fsanitize-trap=unreachable}, but does not affect the values of those
+options. If @option{-fsanitize=unreachable} is enabled, that option
+takes priority over this one.
+
+This option is enabled by default at @option{-O0} and @option{-Og}.
+
@item -fweb
@opindex fweb
Constructs webs as commonly used for register allocation purposes and assign
@@ -15045,9 +15156,6 @@ statement during VRP.
@item evrp-sparse-threshold
Maximum number of basic blocks before EVRP uses a sparse cache.
-@item evrp-mode
-Specifies the mode Early VRP should operate in.
-
@item vrp1-mode
Specifies the mode VRP pass 1 should operate in.
@@ -16079,13 +16187,37 @@ undefined,float-cast-overflow,float-divide-by-zero,bounds-strict
Enable sanitization of local variables to detect use-after-scope bugs.
The option sets @option{-fstack-reuse} to @samp{none}.
+@item -fsanitize-trap@r{[}=@var{opts}@r{]}
+@opindex fsanitize-trap
+@opindex fno-sanitize-trap
+The @option{-fsanitize-trap=} option instructs the compiler to
+report for sanitizers mentioned in comma-separated list of @var{opts}
+undefined behavior using @code{__builtin_trap} rather than a @code{libubsan}
+library routine. If this option is enabled for certain sanitizer,
+it takes precedence over the @option{-fsanitizer-recover=} for that
+sanitizer, @code{__builtin_trap} will be emitted and be fatal regardless
+of whether recovery is enabled or disabled using @option{-fsanitize-recover=}.
+
+The advantage of this is that the @code{libubsan} library is not needed
+and is not linked in, so this is usable even in freestanding environments.
+
+Currently this feature works with @option{-fsanitize=undefined} (and its suboptions
+except for @option{-fsanitize=vptr}), @option{-fsanitize=float-cast-overflow},
+@option{-fsanitize=float-divide-by-zero} and
+@option{-fsanitize=bounds-strict}. @code{-fsanitize-trap=all} can be also
+specified, which enables it for @code{undefined} suboptions,
+@option{-fsanitize=float-cast-overflow},
+@option{-fsanitize=float-divide-by-zero} and
+@option{-fsanitize=bounds-strict}.
+If @code{-fsanitize-trap=undefined} or @code{-fsanitize-trap=all} is used
+and @code{-fsanitize=vptr} is enabled on the command line, the
+instrumentation is silently ignored as the instrumentation always needs
+@code{libubsan} support, @option{-fsanitize-trap=vptr} is not allowed.
+
@item -fsanitize-undefined-trap-on-error
@opindex fsanitize-undefined-trap-on-error
-The @option{-fsanitize-undefined-trap-on-error} option instructs the compiler to
-report undefined behavior using @code{__builtin_trap} rather than
-a @code{libubsan} library routine. The advantage of this is that the
-@code{libubsan} library is not needed and is not linked in, so this
-is usable even in freestanding environments.
+The @option{-fsanitize-undefined-trap-on-error} option is deprecated
+equivalent of @option{-fsanitize-trap=all}.
@item -fsanitize-coverage=trace-pc
@opindex fsanitize-coverage=trace-pc
@@ -16760,6 +16892,10 @@ library subroutines.
constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
GNU Compiler Collection (GCC) Internals}.)
+@item -nostdlib++
+@opindex nostdlib++
+Do not implicitly link with standard C++ libraries.
+
@item -e @var{entry}
@itemx --entry=@var{entry}
@opindex e
@@ -19060,8 +19196,6 @@ platform.
* Solaris 2 Options::
* SPARC Options::
* System V Options::
-* TILE-Gx Options::
-* TILEPro Options::
* V850 Options::
* VAX Options::
* Visium Options::
@@ -24631,7 +24765,8 @@ Set the cost of branches to roughly @var{n} instructions.
@itemx -mno-check-zero-divison
@opindex -mcheck-zero-division
Trap (do not trap) on integer division by zero. The default is
-@option{-mcheck-zero-division}.
+@option{-mcheck-zero-division} for @option{-O0} or @option{-Og}, and
+@option{-mno-check-zero-division} for other optimization levels.
@item -mcond-move-int
@itemx -mno-cond-move-int
@@ -28098,7 +28233,7 @@ Permissible values for this option are: @samp{sifive-e20}, @samp{sifive-e21},
Optimize the output for the given processor, specified by microarchitecture or
particular CPU name. Permissible values for this option are: @samp{rocket},
@samp{sifive-3-series}, @samp{sifive-5-series}, @samp{sifive-7-series},
-@samp{size}, and all valid options for @option{-mcpu=}.
+@samp{thead-c906}, @samp{size}, and all valid options for @option{-mcpu=}.
When @option{-mtune=} is not specified, use the setting from @option{-mcpu},
the default is @samp{rocket} if both are not specified.
@@ -30950,63 +31085,6 @@ The assembler uses this option.
@c the generic assembler that comes with Solaris takes just -Ym.
@end table
-@node TILE-Gx Options
-@subsection TILE-Gx Options
-@cindex TILE-Gx options
-
-These @samp{-m} options are supported on the TILE-Gx:
-
-@table @gcctabopt
-@item -mcmodel=small
-@opindex mcmodel=small
-Generate code for the small model. The distance for direct calls is
-limited to 500M in either direction. PC-relative addresses are 32
-bits. Absolute addresses support the full address range.
-
-@item -mcmodel=large
-@opindex mcmodel=large
-Generate code for the large model. There is no limitation on call
-distance, pc-relative addresses, or absolute addresses.
-
-@item -mcpu=@var{name}
-@opindex mcpu
-Selects the type of CPU to be targeted. Currently the only supported
-type is @samp{tilegx}.
-
-@item -m32
-@itemx -m64
-@opindex m32
-@opindex m64
-Generate code for a 32-bit or 64-bit environment. The 32-bit
-environment sets int, long, and pointer to 32 bits. The 64-bit
-environment sets int to 32 bits and long and pointer to 64 bits.
-
-@item -mbig-endian
-@itemx -mlittle-endian
-@opindex mbig-endian
-@opindex mlittle-endian
-Generate code in big/little endian mode, respectively.
-@end table
-
-@node TILEPro Options
-@subsection TILEPro Options
-@cindex TILEPro options
-
-These @samp{-m} options are supported on the TILEPro:
-
-@table @gcctabopt
-@item -mcpu=@var{name}
-@opindex mcpu
-Selects the type of CPU to be targeted. Currently the only supported
-type is @samp{tilepro}.
-
-@item -m32
-@opindex m32
-Generate code for a 32-bit environment, which sets int, long, and
-pointer to 32 bits. This is the only supported behavior so the flag
-is essentially ignored.
-@end table
-
@node V850 Options
@subsection V850 Options
@cindex V850 Options
@@ -34570,13 +34648,6 @@ Papers p1815 (@uref{https://wg21.link/p1815}) and p2003
exported region may reference (for instance, the entities an exported
template definition may reference). These are not fully implemented.
-@item Language-linkage module attachment
-Declarations with explicit language linkage (@code{extern "C"} or
-@code{extern "C++"}) are attached to the global module, even when in
-the purview of a named module. This is not implemented. Such
-declarations will be attached to the module, if any, in which they are
-declared.
-
@item Standard Library Header Units
The Standard Library is not provided as importable header units. If
you want to import such units, you must explicitly build them first.
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 463471f..04aedfa 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -3859,154 +3859,6 @@ Register B14 (aka DP).
@end table
-@item TILE-Gx---@file{config/tilegx/constraints.md}
-@table @code
-@item R00
-@itemx R01
-@itemx R02
-@itemx R03
-@itemx R04
-@itemx R05
-@itemx R06
-@itemx R07
-@itemx R08
-@itemx R09
-@itemx R10
-Each of these represents a register constraint for an individual
-register, from r0 to r10.
-
-@item I
-Signed 8-bit integer constant.
-
-@item J
-Signed 16-bit integer constant.
-
-@item K
-Unsigned 16-bit integer constant.
-
-@item L
-Integer constant that fits in one signed byte when incremented by one
-(@minus{}129 @dots{} 126).
-
-@item m
-Memory operand. If used together with @samp{<} or @samp{>}, the
-operand can have postincrement which requires printing with @samp{%In}
-and @samp{%in} on TILE-Gx. For example:
-
-@smallexample
-asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
-@end smallexample
-
-@item M
-A bit mask suitable for the BFINS instruction.
-
-@item N
-Integer constant that is a byte tiled out eight times.
-
-@item O
-The integer zero constant.
-
-@item P
-Integer constant that is a sign-extended byte tiled out as four shorts.
-
-@item Q
-Integer constant that fits in one signed byte when incremented
-(@minus{}129 @dots{} 126), but excluding -1.
-
-@item S
-Integer constant that has all 1 bits consecutive and starting at bit 0.
-
-@item T
-A 16-bit fragment of a got, tls, or pc-relative reference.
-
-@item U
-Memory operand except postincrement. This is roughly the same as
-@samp{m} when not used together with @samp{<} or @samp{>}.
-
-@item W
-An 8-element vector constant with identical elements.
-
-@item Y
-A 4-element vector constant with identical elements.
-
-@item Z0
-The integer constant 0xffffffff.
-
-@item Z1
-The integer constant 0xffffffff00000000.
-
-@end table
-
-@item TILEPro---@file{config/tilepro/constraints.md}
-@table @code
-@item R00
-@itemx R01
-@itemx R02
-@itemx R03
-@itemx R04
-@itemx R05
-@itemx R06
-@itemx R07
-@itemx R08
-@itemx R09
-@itemx R10
-Each of these represents a register constraint for an individual
-register, from r0 to r10.
-
-@item I
-Signed 8-bit integer constant.
-
-@item J
-Signed 16-bit integer constant.
-
-@item K
-Nonzero integer constant with low 16 bits zero.
-
-@item L
-Integer constant that fits in one signed byte when incremented by one
-(@minus{}129 @dots{} 126).
-
-@item m
-Memory operand. If used together with @samp{<} or @samp{>}, the
-operand can have postincrement which requires printing with @samp{%In}
-and @samp{%in} on TILEPro. For example:
-
-@smallexample
-asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
-@end smallexample
-
-@item M
-A bit mask suitable for the MM instruction.
-
-@item N
-Integer constant that is a byte tiled out four times.
-
-@item O
-The integer zero constant.
-
-@item P
-Integer constant that is a sign-extended byte tiled out as two shorts.
-
-@item Q
-Integer constant that fits in one signed byte when incremented
-(@minus{}129 @dots{} 126), but excluding -1.
-
-@item T
-A symbolic operand, or a 16-bit fragment of a got, tls, or pc-relative
-reference.
-
-@item U
-Memory operand except postincrement. This is roughly the same as
-@samp{m} when not used together with @samp{<} or @samp{>}.
-
-@item W
-A 4-element vector constant with identical elements.
-
-@item Y
-A 2-element vector constant with identical elements.
-
-@end table
-
@item Visium---@file{config/visium/constraints.md}
@table @code
@item b
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 606ab85..760ff95 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -2681,6 +2681,9 @@ Target supports @code{sysconf}.
@item trampolines
Target supports trampolines.
+@item two_plus_gigs
+Target supports linking programs with 2+GiB of data.
+
@item uclibc
Target supports uClibc.
@@ -2713,6 +2716,7 @@ Target supports @option{-branch-cost=N}.
Target uses @code{__cxa_atexit}.
@item default_packed
+@anchor{default_packed}
Target has packed layout of structure members by default.
@item exceptions
@@ -2783,6 +2787,14 @@ Target uses natural alignment (aligned to type size) for types of
Target uses natural alignment (aligned to type size) for types of
64 bits or less.
+@item no_alignment_constraints
+Target defines __BIGGEST_ALIGNMENT__=1. Hence target imposes
+no alignment constraints. This is similar, but not necessarily
+the same as @ref{default_packed}. Although @code{BIGGEST_FIELD_ALIGNMENT}
+defaults to @code{BIGGEST_ALIGNMENT} for most targets, it is possible
+for a target to set those two with different values and have different
+alignment constraints for aggregate and non-aggregate types.
+
@item noinit
Target supports the @code{noinit} variable attribute.
diff --git a/gcc/dojump.cc b/gcc/dojump.cc
index 17a73da..2af0cd1 100644
--- a/gcc/dojump.cc
+++ b/gcc/dojump.cc
@@ -1131,7 +1131,7 @@ do_compare_rtx_and_jump (rtx op0, rtx op1, enum rtx_code code, int unsignedp,
profile_probability cprob
= profile_probability::guessed_always ();
if (first_code == UNORDERED)
- cprob = cprob.apply_scale (1, 100);
+ cprob /= 100;
else if (first_code == ORDERED)
cprob = cprob.apply_scale (99, 100);
else
diff --git a/gcc/domwalk.cc b/gcc/domwalk.cc
index d633088..e36e9eb 100644
--- a/gcc/domwalk.cc
+++ b/gcc/domwalk.cc
@@ -191,7 +191,8 @@ dom_walker::dom_walker (cdi_direction direction,
m_reachability (reachability),
m_user_bb_to_rpo (bb_index_to_rpo != NULL),
m_unreachable_dom (NULL),
- m_bb_to_rpo (bb_index_to_rpo)
+ m_bb_to_rpo (bb_index_to_rpo == (int *)(uintptr_t)-1
+ ? NULL : bb_index_to_rpo)
{
}
@@ -272,7 +273,8 @@ void
dom_walker::walk (basic_block bb)
{
/* Compute the basic-block index to RPO mapping lazily. */
- if (!m_bb_to_rpo
+ if (!m_user_bb_to_rpo
+ && !m_bb_to_rpo
&& m_dom_direction == CDI_DOMINATORS)
{
int *postorder = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
diff --git a/gcc/domwalk.h b/gcc/domwalk.h
index 17ddc1b..b71d294 100644
--- a/gcc/domwalk.h
+++ b/gcc/domwalk.h
@@ -62,8 +62,9 @@ public:
/* You can provide a mapping of basic-block index to RPO if you
have that readily available or you do multiple walks. If you
- specify NULL as BB_INDEX_TO_RPO dominator children will not be
- walked in RPO order. */
+ specify NULL as BB_INDEX_TO_RPO this mapping will be computed
+ lazily at walk time. If you specify -1 dominator children will
+ not be walked in RPO order. */
dom_walker (cdi_direction direction, enum reachability = ALL_BLOCKS,
int *bb_index_to_rpo = NULL);
diff --git a/gcc/dse.cc b/gcc/dse.cc
index 994c60d..90a4c1f 100644
--- a/gcc/dse.cc
+++ b/gcc/dse.cc
@@ -3755,12 +3755,15 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_dse && dbg_cnt (dse1);
}
- virtual unsigned int execute (function *) { return rest_of_handle_dse (); }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_dse ();
+ }
}; // class pass_rtl_dse1
@@ -3795,12 +3798,15 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_dse && dbg_cnt (dse2);
}
- virtual unsigned int execute (function *) { return rest_of_handle_dse (); }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_dse ();
+ }
}; // class pass_rtl_dse2
diff --git a/gcc/dwarf2cfi.cc b/gcc/dwarf2cfi.cc
index ab7c5cc..bef3165 100644
--- a/gcc/dwarf2cfi.cc
+++ b/gcc/dwarf2cfi.cc
@@ -3788,8 +3788,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return execute_dwarf2_frame (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return execute_dwarf2_frame ();
+ }
}; // class pass_dwarf2_frame
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index b468a4b..e3920c8 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -22539,11 +22539,14 @@ gen_array_type_die (tree type, dw_die_ref context_die)
if (TREE_CODE (type) == VECTOR_TYPE)
{
- /* For VECTOR_TYPEs we use an array die with appropriate bounds. */
+ /* For VECTOR_TYPEs we use an array DIE with appropriate bounds. */
dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
- add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node, NULL);
+ int lb = lower_bound_default ();
+ if (lb == -1)
+ lb = 0;
+ add_bound_info (subrange_die, DW_AT_lower_bound, size_int (lb), NULL);
add_bound_info (subrange_die, DW_AT_upper_bound,
- size_int (TYPE_VECTOR_SUBPARTS (type) - 1), NULL);
+ size_int (lb + TYPE_VECTOR_SUBPARTS (type) - 1), NULL);
}
else
add_subscript_info (array_die, type, collapse_nested_arrays);
diff --git a/gcc/early-remat.cc b/gcc/early-remat.cc
index 2738892..5c36829 100644
--- a/gcc/early-remat.cc
+++ b/gcc/early-remat.cc
@@ -2615,12 +2615,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 1 && NUM_POLY_INT_COEFFS > 1;
}
- virtual unsigned int execute (function *f)
+ unsigned int execute (function *f) final override
{
auto_sbitmap selected_modes (NUM_MACHINE_MODES);
bitmap_clear (selected_modes);
diff --git a/gcc/emit-rtl.cc b/gcc/emit-rtl.cc
index 1e02ae2..3929ee0 100644
--- a/gcc/emit-rtl.cc
+++ b/gcc/emit-rtl.cc
@@ -947,9 +947,11 @@ validate_subreg (machine_mode omode, machine_mode imode,
&& GET_MODE_INNER (omode) == GET_MODE_INNER (imode))
;
/* Subregs involving floating point modes are not allowed to
- change size. Therefore (subreg:DI (reg:DF) 0) is fine, but
+ change size unless it's an insert into a complex mode.
+ Therefore (subreg:DI (reg:DF) 0) and (subreg:CS (reg:SF) 0) are fine, but
(subreg:SI (reg:DF) 0) isn't. */
- else if (FLOAT_MODE_P (imode) || FLOAT_MODE_P (omode))
+ else if ((FLOAT_MODE_P (imode) || FLOAT_MODE_P (omode))
+ && !COMPLEX_MODE_P (omode))
{
if (! (known_eq (isize, osize)
/* LRA can use subreg to store a floating point value in
diff --git a/gcc/except.cc b/gcc/except.cc
index b94de42..7d7ce40 100644
--- a/gcc/except.cc
+++ b/gcc/except.cc
@@ -2047,7 +2047,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return set_nothrow_function_flags ();
}
@@ -2722,8 +2722,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
int ret = convert_to_eh_region_ranges ();
maybe_add_nop_after_section_switch ();
diff --git a/gcc/expmed.cc b/gcc/expmed.cc
index c3e4aa8..9b01b5a 100644
--- a/gcc/expmed.cc
+++ b/gcc/expmed.cc
@@ -738,13 +738,16 @@ store_bit_field_using_insv (const extraction_insn *insv, rtx op0,
If FALLBACK_P is true, fall back to store_fixed_bit_field if we have
no other way of implementing the operation. If FALLBACK_P is false,
- return false instead. */
+ return false instead.
+
+ if UNDEFINED_P is true then STR_RTX is undefined and may be set using
+ a subreg instead. */
static bool
store_bit_field_1 (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum,
poly_uint64 bitregion_start, poly_uint64 bitregion_end,
machine_mode fieldmode,
- rtx value, bool reverse, bool fallback_p)
+ rtx value, bool reverse, bool fallback_p, bool undefined_p)
{
rtx op0 = str_rtx;
@@ -805,8 +808,9 @@ store_bit_field_1 (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum,
return true;
}
}
- else if (constant_multiple_p (bitnum, regsize * BITS_PER_UNIT, &regnum)
- && multiple_p (bitsize, regsize * BITS_PER_UNIT)
+ else if (((constant_multiple_p (bitnum, regsize * BITS_PER_UNIT, &regnum)
+ && multiple_p (bitsize, regsize * BITS_PER_UNIT))
+ || undefined_p)
&& known_ge (GET_MODE_BITSIZE (GET_MODE (op0)), bitsize))
{
sub = simplify_gen_subreg (fieldmode, op0, GET_MODE (op0),
@@ -869,7 +873,7 @@ store_bit_field_1 (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum,
GET_MODE_SIZE (GET_MODE (op0)));
emit_move_insn (temp, op0);
store_bit_field_1 (temp, bitsize, bitnum, 0, 0, fieldmode, value,
- reverse, fallback_p);
+ reverse, fallback_p, undefined_p);
emit_move_insn (op0, temp);
return true;
}
@@ -994,7 +998,7 @@ store_integral_bit_field (rtx op0, opt_scalar_int_mode op0_mode,
bitnum + bit_offset,
bitregion_start, bitregion_end,
word_mode,
- value_word, reverse, fallback_p))
+ value_word, reverse, fallback_p, false))
{
delete_insns_since (last);
return false;
@@ -1084,7 +1088,7 @@ store_integral_bit_field (rtx op0, opt_scalar_int_mode op0_mode,
rtx tempreg = copy_to_reg (xop0);
if (store_bit_field_1 (tempreg, bitsize, bitpos,
bitregion_start, bitregion_end,
- fieldmode, orig_value, reverse, false))
+ fieldmode, orig_value, reverse, false, false))
{
emit_move_insn (xop0, tempreg);
return true;
@@ -1112,13 +1116,15 @@ store_integral_bit_field (rtx op0, opt_scalar_int_mode op0_mode,
FIELDMODE is the machine-mode of the FIELD_DECL node for this field.
- If REVERSE is true, the store is to be done in reverse order. */
+ If REVERSE is true, the store is to be done in reverse order.
+
+ If UNDEFINED_P is true then STR_RTX is currently undefined. */
void
store_bit_field (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum,
poly_uint64 bitregion_start, poly_uint64 bitregion_end,
machine_mode fieldmode,
- rtx value, bool reverse)
+ rtx value, bool reverse, bool undefined_p)
{
/* Handle -fstrict-volatile-bitfields in the cases where it applies. */
unsigned HOST_WIDE_INT ibitsize = 0, ibitnum = 0;
@@ -1151,7 +1157,7 @@ store_bit_field (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum,
gcc_assert (ibitnum + ibitsize <= GET_MODE_BITSIZE (int_mode));
temp = copy_to_reg (str_rtx);
if (!store_bit_field_1 (temp, ibitsize, ibitnum, 0, 0,
- int_mode, value, reverse, true))
+ int_mode, value, reverse, true, undefined_p))
gcc_unreachable ();
emit_move_insn (str_rtx, temp);
@@ -1186,7 +1192,7 @@ store_bit_field (rtx str_rtx, poly_uint64 bitsize, poly_uint64 bitnum,
if (!store_bit_field_1 (str_rtx, bitsize, bitnum,
bitregion_start, bitregion_end,
- fieldmode, value, reverse, true))
+ fieldmode, value, reverse, true, undefined_p))
gcc_unreachable ();
}
diff --git a/gcc/expmed.h b/gcc/expmed.h
index ee1ddc8..0b2538c 100644
--- a/gcc/expmed.h
+++ b/gcc/expmed.h
@@ -715,7 +715,7 @@ extern rtx expand_divmod (int, enum tree_code, machine_mode, rtx, rtx,
extern void store_bit_field (rtx, poly_uint64, poly_uint64,
poly_uint64, poly_uint64,
- machine_mode, rtx, bool);
+ machine_mode, rtx, bool, bool);
extern rtx extract_bit_field (rtx, poly_uint64, poly_uint64, int, rtx,
machine_mode, machine_mode, bool, rtx *);
extern rtx extract_low_bits (machine_mode, machine_mode, rtx);
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 78c839a..f9753d4 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -776,6 +776,32 @@ convert_modes (machine_mode mode, machine_mode oldmode, rtx x, int unsignedp)
convert_move (temp, x, unsignedp);
return temp;
}
+
+/* Variant of convert_modes for ABI parameter passing/return.
+ Return an rtx for a value that would result from converting X from
+ a floating point mode FMODE to wider integer mode MODE. */
+
+rtx
+convert_float_to_wider_int (machine_mode mode, machine_mode fmode, rtx x)
+{
+ gcc_assert (SCALAR_INT_MODE_P (mode) && SCALAR_FLOAT_MODE_P (fmode));
+ scalar_int_mode tmp_mode = int_mode_for_mode (fmode).require ();
+ rtx tmp = force_reg (tmp_mode, gen_lowpart (tmp_mode, x));
+ return convert_modes (mode, tmp_mode, tmp, 1);
+}
+
+/* Variant of convert_modes for ABI parameter passing/return.
+ Return an rtx for a value that would result from converting X from
+ an integer mode IMODE to a narrower floating point mode MODE. */
+
+rtx
+convert_wider_int_to_float (machine_mode mode, machine_mode imode, rtx x)
+{
+ gcc_assert (SCALAR_FLOAT_MODE_P (mode) && SCALAR_INT_MODE_P (imode));
+ scalar_int_mode tmp_mode = int_mode_for_mode (mode).require ();
+ rtx tmp = force_reg (tmp_mode, gen_lowpart (tmp_mode, x));
+ return gen_lowpart_SUBREG (mode, tmp);
+}
/* Return the largest alignment we can use for doing a move (or store)
of MAX_PIECES. ALIGN is the largest alignment we could use. */
@@ -1355,8 +1381,8 @@ op_by_pieces_d::run ()
class move_by_pieces_d : public op_by_pieces_d
{
insn_gen_fn m_gen_fun;
- void generate (rtx, rtx, machine_mode);
- bool prepare_mode (machine_mode, unsigned int);
+ void generate (rtx, rtx, machine_mode) final override;
+ bool prepare_mode (machine_mode, unsigned int) final override;
public:
move_by_pieces_d (rtx to, rtx from, unsigned HOST_WIDE_INT len,
@@ -1451,8 +1477,8 @@ move_by_pieces (rtx to, rtx from, unsigned HOST_WIDE_INT len,
class store_by_pieces_d : public op_by_pieces_d
{
insn_gen_fn m_gen_fun;
- void generate (rtx, rtx, machine_mode);
- bool prepare_mode (machine_mode, unsigned int);
+ void generate (rtx, rtx, machine_mode) final override;
+ bool prepare_mode (machine_mode, unsigned int) final override;
public:
store_by_pieces_d (rtx to, by_pieces_constfn cfn, void *cfn_data,
@@ -1648,9 +1674,9 @@ class compare_by_pieces_d : public op_by_pieces_d
rtx m_accumulator;
int m_count, m_batch;
- void generate (rtx, rtx, machine_mode);
- bool prepare_mode (machine_mode, unsigned int);
- void finish_mode (machine_mode);
+ void generate (rtx, rtx, machine_mode) final override;
+ bool prepare_mode (machine_mode, unsigned int) final override;
+ void finish_mode (machine_mode) final override;
public:
compare_by_pieces_d (rtx op0, rtx op1, by_pieces_constfn op1_cfn,
void *op1_cfn_data, HOST_WIDE_INT len, int align,
@@ -2865,7 +2891,7 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED,
store_bit_field (dest,
adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
- VOIDmode, tmps[i], false);
+ VOIDmode, tmps[i], false, false);
}
/* Optimize the access just a bit. */
@@ -2879,7 +2905,7 @@ emit_group_store (rtx orig_dst, rtx src, tree type ATTRIBUTE_UNUSED,
else
store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
- 0, 0, mode, tmps[i], false);
+ 0, 0, mode, tmps[i], false, false);
}
/* Copy from the pseudo into the (probable) hard reg. */
@@ -3012,7 +3038,7 @@ copy_blkmode_from_reg (rtx target, rtx srcreg, tree type)
xbitpos % BITS_PER_WORD, 1,
NULL_RTX, copy_mode, copy_mode,
false, NULL),
- false);
+ false, false);
}
}
@@ -3114,7 +3140,7 @@ copy_blkmode_to_reg (machine_mode mode_in, tree src)
bitpos % BITS_PER_WORD, 1,
NULL_RTX, word_mode, word_mode,
false, NULL),
- false);
+ false, false);
}
if (mode == BLKmode)
@@ -3282,8 +3308,8 @@ clear_storage_hints (rtx object, rtx size, enum block_op_methods method,
zero = CONST0_RTX (GET_MODE_INNER (mode));
if (zero != NULL)
{
- write_complex_part (object, zero, 0);
- write_complex_part (object, zero, 1);
+ write_complex_part (object, zero, 0, true);
+ write_complex_part (object, zero, 1, false);
return NULL;
}
}
@@ -3444,10 +3470,11 @@ set_storage_via_setmem (rtx object, rtx size, rtx val, unsigned int align,
/* Write to one of the components of the complex value CPLX. Write VAL to
- the real part if IMAG_P is false, and the imaginary part if its true. */
+ the real part if IMAG_P is false, and the imaginary part if its true.
+ If UNDEFINED_P then the value in CPLX is currently undefined. */
void
-write_complex_part (rtx cplx, rtx val, bool imag_p)
+write_complex_part (rtx cplx, rtx val, bool imag_p, bool undefined_p)
{
machine_mode cmode;
scalar_mode imode;
@@ -3502,7 +3529,7 @@ write_complex_part (rtx cplx, rtx val, bool imag_p)
}
store_bit_field (cplx, ibitsize, imag_p ? ibitsize : 0, 0, 0, imode, val,
- false);
+ false, undefined_p);
}
/* Extract one of the components of the complex value CPLX. Extract the
@@ -3755,8 +3782,8 @@ emit_move_complex_parts (rtx x, rtx y)
&& REG_P (x) && !reg_overlap_mentioned_p (x, y))
emit_clobber (x);
- write_complex_part (x, read_complex_part (y, false), false);
- write_complex_part (x, read_complex_part (y, true), true);
+ write_complex_part (x, read_complex_part (y, false), false, true);
+ write_complex_part (x, read_complex_part (y, true), true, false);
return get_last_insn ();
}
@@ -5415,7 +5442,7 @@ expand_assignment (tree to, tree from, bool nontemporal)
}
else
store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg,
- false);
+ false, false);
return;
}
@@ -5637,8 +5664,8 @@ expand_assignment (tree to, tree from, bool nontemporal)
concat_store_slow:;
rtx temp = assign_stack_temp (GET_MODE (to_rtx),
GET_MODE_SIZE (GET_MODE (to_rtx)));
- write_complex_part (temp, XEXP (to_rtx, 0), false);
- write_complex_part (temp, XEXP (to_rtx, 1), true);
+ write_complex_part (temp, XEXP (to_rtx, 0), false, true);
+ write_complex_part (temp, XEXP (to_rtx, 1), true, false);
result = store_field (temp, bitsize, bitpos,
bitregion_start, bitregion_end,
mode1, from, get_alias_set (to),
@@ -6061,6 +6088,17 @@ store_expr (tree exp, rtx target, int call_param_p,
}
str_copy_len = TREE_STRING_LENGTH (str);
+
+ /* Trailing NUL bytes in EXP will be handled by the call to
+ clear_storage, which is more efficient than copying them from
+ the STRING_CST, so trim those from STR_COPY_LEN. */
+ while (str_copy_len)
+ {
+ if (TREE_STRING_POINTER (str)[str_copy_len - 1])
+ break;
+ str_copy_len--;
+ }
+
if ((STORE_MAX_PIECES & (STORE_MAX_PIECES - 1)) == 0)
{
str_copy_len += STORE_MAX_PIECES - 1;
@@ -6196,7 +6234,8 @@ store_expr (tree exp, rtx target, int call_param_p,
store_bit_field (target,
rtx_to_poly_int64 (expr_size (exp))
* BITS_PER_UNIT,
- 0, 0, 0, GET_MODE (temp), temp, reverse);
+ 0, 0, 0, GET_MODE (temp), temp, reverse,
+ false);
}
else
convert_move (target, temp, TYPE_UNSIGNED (TREE_TYPE (exp)));
@@ -7605,7 +7644,7 @@ store_field (rtx target, poly_int64 bitsize, poly_int64 bitpos,
gcc_checking_assert (known_ge (bitpos, 0));
store_bit_field (target, bitsize, bitpos,
bitregion_start, bitregion_end,
- mode, temp, reverse);
+ mode, temp, reverse, false);
return const0_rtx;
}
@@ -8832,7 +8871,8 @@ expand_cond_expr_using_cmove (tree treeop0 ATTRIBUTE_UNUSED,
expanding_cond_expr_using_cmove = true;
start_sequence ();
expand_operands (treeop1, treeop2,
- temp, &op1, &op2, EXPAND_NORMAL);
+ mode == orig_mode ? temp : NULL_RTX, &op1, &op2,
+ EXPAND_NORMAL);
if (TREE_CODE (treeop0) == SSA_NAME
&& (srcstmt = get_def_for_expr_class (treeop0, tcc_comparison)))
@@ -10093,8 +10133,8 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
complex_expr_swap_order:
/* Move the imaginary (op1) and real (op0) parts to their
location. */
- write_complex_part (target, op1, true);
- write_complex_part (target, op0, false);
+ write_complex_part (target, op1, true, true);
+ write_complex_part (target, op0, false, false);
return target;
}
@@ -10123,8 +10163,8 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
}
/* Move the real (op0) and imaginary (op1) parts to their location. */
- write_complex_part (target, op0, false);
- write_complex_part (target, op1, true);
+ write_complex_part (target, op0, false, true);
+ write_complex_part (target, op1, true, false);
return target;
@@ -10363,7 +10403,7 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
rtx dst = gen_reg_rtx (mode);
emit_move_insn (dst, op0);
store_bit_field (dst, bitsize, bitpos, 0, 0,
- TYPE_MODE (TREE_TYPE (treeop1)), op1, false);
+ TYPE_MODE (TREE_TYPE (treeop1)), op1, false, false);
return dst;
}
@@ -10770,6 +10810,15 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
pmode = promote_ssa_mode (ssa_name, &unsignedp);
gcc_assert (GET_MODE (decl_rtl) == pmode);
+ /* Some ABIs require scalar floating point modes to be passed
+ in a wider scalar integer mode. We need to explicitly
+ truncate to an integer mode of the correct precision before
+ using a SUBREG to reinterpret as a floating point value. */
+ if (SCALAR_FLOAT_MODE_P (mode)
+ && SCALAR_INT_MODE_P (pmode)
+ && known_lt (GET_MODE_SIZE (mode), GET_MODE_SIZE (pmode)))
+ return convert_wider_int_to_float (mode, pmode, decl_rtl);
+
temp = gen_lowpart_SUBREG (mode, decl_rtl);
SUBREG_PROMOTED_VAR_P (temp) = 1;
SUBREG_PROMOTED_SET (temp, unsignedp);
@@ -11185,37 +11234,58 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
machine_mode mode1, mode2;
poly_int64 bitsize, bitpos, bytepos;
tree offset;
- int reversep, volatilep = 0, must_force_mem;
+ int reversep, volatilep = 0;
tree tem
= get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode1,
&unsignedp, &reversep, &volatilep);
rtx orig_op0, memloc;
bool clear_mem_expr = false;
+ bool must_force_mem;
/* If we got back the original object, something is wrong. Perhaps
we are evaluating an expression too early. In any event, don't
infinitely recurse. */
gcc_assert (tem != exp);
- /* If tem is a VAR_DECL, we need a memory reference. */
- enum expand_modifier tem_modifier = modifier;
- if (tem_modifier == EXPAND_SUM)
- tem_modifier = EXPAND_NORMAL;
- if (TREE_CODE (tem) == VAR_DECL)
- tem_modifier = EXPAND_MEMORY;
+ /* Make sure bitpos is not negative, this can wreak havoc later. */
+ if (maybe_lt (bitpos, 0))
+ {
+ gcc_checking_assert (offset == NULL_TREE);
+ offset = size_int (bits_to_bytes_round_down (bitpos));
+ bitpos = num_trailing_bits (bitpos);
+ }
+
+ /* If we have either an offset, a BLKmode result, or a reference
+ outside the underlying object, we must force it to memory.
+ Such a case can occur in Ada if we have unchecked conversion
+ of an expression from a scalar type to an aggregate type or
+ for an ARRAY_RANGE_REF whose type is BLKmode, or if we were
+ passed a partially uninitialized object or a view-conversion
+ to a larger size. */
+ must_force_mem = offset != NULL_TREE
+ || mode1 == BLKmode
+ || (mode == BLKmode
+ && !int_mode_for_size (bitsize, 1).exists ());
+
+ const enum expand_modifier tem_modifier
+ = must_force_mem
+ ? EXPAND_MEMORY
+ : modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier;
/* If TEM's type is a union of variable size, pass TARGET to the inner
computation, since it will need a temporary and TARGET is known
to have to do. This occurs in unchecked conversion in Ada. */
+ const rtx tem_target
+ = TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE
+ && COMPLETE_TYPE_P (TREE_TYPE (tem))
+ && TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) != INTEGER_CST
+ && modifier != EXPAND_STACK_PARM
+ ? target
+ : NULL_RTX;
+
orig_op0 = op0
- = expand_expr_real (tem,
- (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE
- && COMPLETE_TYPE_P (TREE_TYPE (tem))
- && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem)))
- != INTEGER_CST)
- && modifier != EXPAND_STACK_PARM
- ? target : NULL_RTX),
- VOIDmode, tem_modifier, NULL, true);
+ = expand_expr_real (tem, tem_target, VOIDmode, tem_modifier, NULL,
+ true);
/* If the field has a mode, we want to access it in the
field's mode, not the computed mode.
@@ -11232,27 +11302,9 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
mode2
= CONSTANT_P (op0) ? TYPE_MODE (TREE_TYPE (tem)) : GET_MODE (op0);
- /* Make sure bitpos is not negative, it can wreak havoc later. */
- if (maybe_lt (bitpos, 0))
- {
- gcc_checking_assert (offset == NULL_TREE);
- offset = size_int (bits_to_bytes_round_down (bitpos));
- bitpos = num_trailing_bits (bitpos);
- }
-
- /* If we have either an offset, a BLKmode result, or a reference
- outside the underlying object, we must force it to memory.
- Such a case can occur in Ada if we have unchecked conversion
- of an expression from a scalar type to an aggregate type or
- for an ARRAY_RANGE_REF whose type is BLKmode, or if we were
- passed a partially uninitialized object or a view-conversion
- to a larger size. */
- must_force_mem = (offset
- || mode1 == BLKmode
- || (mode == BLKmode
- && !int_mode_for_size (bitsize, 1).exists ())
- || maybe_gt (bitpos + bitsize,
- GET_MODE_BITSIZE (mode2)));
+ /* See above for the rationale. */
+ if (maybe_gt (bitpos + bitsize, GET_MODE_BITSIZE (mode2)))
+ must_force_mem = true;
/* Handle CONCAT first. */
if (GET_CODE (op0) == CONCAT && !must_force_mem)
@@ -11310,7 +11362,7 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
}
else
/* Otherwise force into memory. */
- must_force_mem = 1;
+ must_force_mem = true;
}
/* If this is a constant, put it in a register if it is a legitimate
diff --git a/gcc/expr.h b/gcc/expr.h
index 0351183..08b59b8 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -69,7 +69,16 @@ extern void convert_move (rtx, rtx, int);
extern rtx convert_to_mode (machine_mode, rtx, int);
/* Convert an rtx to MODE from OLDMODE and return the result. */
-extern rtx convert_modes (machine_mode, machine_mode, rtx, int);
+extern rtx convert_modes (machine_mode mode, machine_mode oldmode,
+ rtx x, int unsignedp);
+
+/* Variant of convert_modes for ABI parameter passing/return. */
+extern rtx convert_float_to_wider_int (machine_mode mode, machine_mode fmode,
+ rtx x);
+
+/* Variant of convert_modes for ABI parameter passing/return. */
+extern rtx convert_wider_int_to_float (machine_mode mode, machine_mode imode,
+ rtx x);
/* Expand a call to memcpy or memmove or memcmp, and return the result. */
extern rtx emit_block_op_via_libcall (enum built_in_function, rtx, rtx, rtx,
@@ -253,7 +262,7 @@ extern rtx_insn *emit_move_insn_1 (rtx, rtx);
extern rtx_insn *emit_move_complex_push (machine_mode, rtx, rtx);
extern rtx_insn *emit_move_complex_parts (rtx, rtx);
extern rtx read_complex_part (rtx, bool);
-extern void write_complex_part (rtx, rtx, bool);
+extern void write_complex_part (rtx, rtx, bool, bool);
extern rtx read_complex_part (rtx, bool);
extern rtx emit_move_resolve_push (machine_mode, rtx);
diff --git a/gcc/final.cc b/gcc/final.cc
index a986886..0352786 100644
--- a/gcc/final.cc
+++ b/gcc/final.cc
@@ -642,8 +642,7 @@ compute_alignments (void)
flow_loops_dump (dump_file, NULL, 1);
}
loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
- profile_count count_threshold = cfun->cfg->count_max.apply_scale
- (1, param_align_threshold);
+ profile_count count_threshold = cfun->cfg->count_max / param_align_threshold;
if (dump_file)
{
@@ -710,10 +709,9 @@ compute_alignments (void)
if (!has_fallthru
&& (branch_count > count_threshold
- || (bb->count > bb->prev_bb->count.apply_scale (10, 1)
+ || (bb->count > bb->prev_bb->count * 10
&& (bb->prev_bb->count
- <= ENTRY_BLOCK_PTR_FOR_FN (cfun)
- ->count.apply_scale (1, 2)))))
+ <= ENTRY_BLOCK_PTR_FOR_FN (cfun)->count / 2))))
{
align_flags alignment = JUMP_ALIGN (label);
if (dump_file)
@@ -727,9 +725,7 @@ compute_alignments (void)
&& single_succ (bb) == EXIT_BLOCK_PTR_FOR_FN (cfun))
&& optimize_bb_for_speed_p (bb)
&& branch_count + fallthru_count > count_threshold
- && (branch_count
- > fallthru_count.apply_scale
- (param_align_loop_iterations, 1)))
+ && (branch_count > fallthru_count * param_align_loop_iterations))
{
align_flags alignment = LOOP_ALIGN (label);
if (dump_file)
@@ -808,7 +804,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return compute_alignments (); }
+ unsigned int execute (function *) final override
+ {
+ return compute_alignments ();
+ }
}; // class pass_compute_alignments
@@ -4360,7 +4359,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return rest_of_handle_final (); }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_final ();
+ }
}; // class pass_final
@@ -4404,7 +4406,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_shorten_branches ();
}
@@ -4579,7 +4581,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_clean_state ();
}
diff --git a/gcc/flag-types.h b/gcc/flag-types.h
index 2c84981..a11f99a 100644
--- a/gcc/flag-types.h
+++ b/gcc/flag-types.h
@@ -479,15 +479,6 @@ enum threader_debug
THREADER_DEBUG_ALL = 1
};
-/* EVRP mode. */
-enum evrp_mode
-{
- EVRP_MODE_RVRP_ONLY,
- EVRP_MODE_EVRP_ONLY,
- EVRP_MODE_EVRP_FIRST,
- EVRP_MODE_RVRP_FIRST
-};
-
/* VRP modes. */
enum vrp_mode
{
diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index fbdf3c8..99021a8 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -7530,7 +7530,7 @@ tree_swap_operands_p (const_tree arg0, const_tree arg1)
static tree
fold_to_nonsharp_ineq_using_bound (location_t loc, tree ineq, tree bound)
{
- tree a, typea, type = TREE_TYPE (ineq), a1, diff, y;
+ tree a, typea, type = TREE_TYPE (bound), a1, diff, y;
if (TREE_CODE (bound) == LT_EXPR)
a = TREE_OPERAND (bound, 0);
@@ -12037,11 +12037,15 @@ fold_binary_loc (location_t loc, enum tree_code code, tree type,
{
tem = fold_to_nonsharp_ineq_using_bound (loc, arg0, arg1);
if (tem && !operand_equal_p (tem, arg0, 0))
- return fold_build2_loc (loc, code, type, tem, arg1);
+ return fold_convert (type,
+ fold_build2_loc (loc, code, TREE_TYPE (arg1),
+ tem, arg1));
tem = fold_to_nonsharp_ineq_using_bound (loc, arg1, arg0);
if (tem && !operand_equal_p (tem, arg1, 0))
- return fold_build2_loc (loc, code, type, arg0, tem);
+ return fold_convert (type,
+ fold_build2_loc (loc, code, TREE_TYPE (arg0),
+ arg0, tem));
}
if ((tem = fold_truth_andor (loc, code, type, arg0, arg1, op0, op1))
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 27d445a..9bde368 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,93 @@
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * gfortran.h (gfc_omp_namelist): Update by creating 'linear' struct,
+ move 'linear_op' as 'op' to id and add 'old_modifier' to it.
+ * dump-parse-tree.cc (show_omp_namelist): Update accordingly.
+ * module.cc (mio_omp_declare_simd): Likewise.
+ * trans-openmp.cc (gfc_trans_omp_clauses): Likewise.
+ * openmp.cc (resolve_omp_clauses): Likewise; accept new-style
+ 'val' modifier with do/simd.
+ (gfc_match_omp_clauses): Handle OpenMP 5.2 linear clause syntax.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * openmp.cc (gfc_match_omp_requires): Remove sorry.
+ * parse.cc (decode_omp_directive): Don't regard 'declare target'
+ as target usage for 'omp requires'; add more flags to
+ omp_requires_mask.
+
+2022-07-01 Tobias Burnus <tobias@codesourcery.com>
+
+ * dump-parse-tree.cc (show_omp_namelist): For the map-type,
+ also handle the always modifer and release/delete.
+ * openmp.cc (resolve_omp_clauses): Accept tofrom
+ map-type modifier for target enter/exit data,
+ but use 'to' / 'from' internally.
+
+2022-06-30 Harald Anlauf <anlauf@gmx.de>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/103137
+ PR fortran/103138
+ PR fortran/103693
+ PR fortran/105243
+ * decl.cc (gfc_match_data_decl): Reject CLASS entity declaration
+ when it is given the PARAMETER attribute.
+
+2022-06-29 Harald Anlauf <anlauf@gmx.de>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/106121
+ * simplify.cc (gfc_simplify_extends_type_of): Do not attempt to
+ simplify when one of the arguments is a CLASS variable that was
+ not properly declared.
+
+2022-06-28 Jakub Jelinek <jakub@redhat.com>
+
+ * gfortran.h (gfc_real_info): Add use_iec_60559 bitfield.
+ * trans-types.h (gfc_real16_use_iec_60559): Declare.
+ * trans-types.cc (gfc_real16_use_iec_60559): Define.
+ (gfc_init_kinds): When building powerpc64le-linux libgfortran
+ on glibc 2.26 to 2.31, set gfc_real16_use_iec_60559 and
+ use_iec_60559.
+ (gfc_build_real_type): Set gfc_real16_use_iec_60559 and use_iec_60559
+ on glibc 2.26 or later.
+ * trans-intrinsic.cc (gfc_build_intrinsic_lib_fndecls): Adjust
+ comment. Handle gfc_real16_use_iec_60559.
+ (gfc_get_intrinsic_lib_fndecl): Handle use_iec_60559.
+
+2022-06-26 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105691
+ * simplify.cc (gfc_simplify_index): Replace old simplification
+ code by the equivalent of the runtime library implementation. Use
+ HOST_WIDE_INT instead of int for string index, length variables.
+
+2022-06-26 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105954
+ * decl.cc (variable_decl): Adjust upper bounds for explicit-shape
+ specs with constant bound expressions to ensure non-negative
+ extents.
+
+2022-06-24 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105813
+ * check.cc (gfc_check_unpack): Try to simplify MASK argument to
+ UNPACK so that checking of the VECTOR argument can work when MASK
+ is a variable.
+
+2022-06-18 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105986
+ * simplify.cc (gfc_simplify_btest): Add check for POS argument.
+ (gfc_simplify_ibclr): Add check for POS argument.
+ (gfc_simplify_ibits): Add check for POS and LEN arguments.
+ (gfc_simplify_ibset): Add check for POS argument.
+
2022-06-08 Tobias Burnus <tobias@codesourcery.com>
* openmp.cc (gfc_match_omp_clauses): Check also parent namespace
diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc
index 0c2cb50..91d87a1 100644
--- a/gcc/fortran/check.cc
+++ b/gcc/fortran/check.cc
@@ -6353,6 +6353,8 @@ gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
if (!same_type_check (vector, 0, field, 2))
return false;
+ gfc_simplify_expr (mask, 0);
+
if (mask->expr_type == EXPR_ARRAY
&& gfc_array_size (vector, &vector_size))
{
diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
index bd586e7..339f8b1 100644
--- a/gcc/fortran/decl.cc
+++ b/gcc/fortran/decl.cc
@@ -2775,6 +2775,18 @@ variable_decl (int elem)
else
gfc_free_expr (n);
}
+ /* For an explicit-shape spec with constant bounds, ensure
+ that the effective upper bound is not lower than the
+ respective lower bound minus one. Otherwise adjust it so
+ that the extent is trivially derived to be zero. */
+ if (as->lower[i]->expr_type == EXPR_CONSTANT
+ && as->upper[i]->expr_type == EXPR_CONSTANT
+ && as->lower[i]->ts.type == BT_INTEGER
+ && as->upper[i]->ts.type == BT_INTEGER
+ && mpz_cmp (as->upper[i]->value.integer,
+ as->lower[i]->value.integer) < 0)
+ mpz_sub_ui (as->upper[i]->value.integer,
+ as->lower[i]->value.integer, 1);
}
}
}
@@ -6250,6 +6262,14 @@ gfc_match_data_decl (void)
goto cleanup;
}
+ /* F2018:C708. */
+ if (current_ts.type == BT_CLASS && current_attr.flavor == FL_PARAMETER)
+ {
+ gfc_error ("CLASS entity at %C cannot have the PARAMETER attribute");
+ m = MATCH_ERROR;
+ goto cleanup;
+ }
+
if (current_ts.type == BT_CLASS
&& current_ts.u.derived->attr.unlimited_polymorphic)
goto ok;
diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc
index e3affb8..5352008 100644
--- a/gcc/fortran/dump-parse-tree.cc
+++ b/gcc/fortran/dump-parse-tree.cc
@@ -1414,10 +1414,15 @@ show_omp_namelist (int list_type, gfc_omp_namelist *n)
case OMP_MAP_TO: fputs ("to:", dumpfile); break;
case OMP_MAP_FROM: fputs ("from:", dumpfile); break;
case OMP_MAP_TOFROM: fputs ("tofrom:", dumpfile); break;
+ case OMP_MAP_ALWAYS_TO: fputs ("always,to:", dumpfile); break;
+ case OMP_MAP_ALWAYS_FROM: fputs ("always,from:", dumpfile); break;
+ case OMP_MAP_ALWAYS_TOFROM: fputs ("always,tofrom:", dumpfile); break;
+ case OMP_MAP_DELETE: fputs ("delete:", dumpfile); break;
+ case OMP_MAP_RELEASE: fputs ("release:", dumpfile); break;
default: break;
}
- else if (list_type == OMP_LIST_LINEAR)
- switch (n->u.linear_op)
+ else if (list_type == OMP_LIST_LINEAR && n->u.linear.old_modifier)
+ switch (n->u.linear.op)
{
case OMP_LINEAR_REF: fputs ("ref(", dumpfile); break;
case OMP_LINEAR_VAL: fputs ("val(", dumpfile); break;
@@ -1425,7 +1430,7 @@ show_omp_namelist (int list_type, gfc_omp_namelist *n)
default: break;
}
fprintf (dumpfile, "%s", n->sym ? n->sym->name : "omp_all_memory");
- if (list_type == OMP_LIST_LINEAR && n->u.linear_op != OMP_LINEAR_DEFAULT)
+ if (list_type == OMP_LIST_LINEAR && n->u.linear.op != OMP_LINEAR_DEFAULT)
fputc (')', dumpfile);
if (n->expr)
{
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 0bac865..696aadd 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -1345,7 +1345,11 @@ typedef struct gfc_omp_namelist
gfc_omp_reduction_op reduction_op;
gfc_omp_depend_op depend_op;
gfc_omp_map_op map_op;
- gfc_omp_linear_op linear_op;
+ struct
+ {
+ ENUM_BITFIELD (gfc_omp_linear_op) op:4;
+ bool old_modifier;
+ } linear;
struct gfc_common_head *common;
bool lastprivate_conditional;
} u;
@@ -2665,6 +2669,9 @@ typedef struct
unsigned int c_double : 1;
unsigned int c_long_double : 1;
unsigned int c_float128 : 1;
+ /* True if for _Float128 C2X IEC 60559 *f128 APIs should be used
+ instead of libquadmath *q APIs. */
+ unsigned int use_iec_60559 : 1;
}
gfc_real_info;
diff --git a/gcc/fortran/module.cc b/gcc/fortran/module.cc
index 85aa153..5ddabdc 100644
--- a/gcc/fortran/module.cc
+++ b/gcc/fortran/module.cc
@@ -4383,10 +4383,10 @@ mio_omp_declare_simd (gfc_namespace *ns, gfc_omp_declare_simd **odsp)
}
for (n = ods->clauses->lists[OMP_LIST_LINEAR]; n; n = n->next)
{
- if (n->u.linear_op == OMP_LINEAR_DEFAULT)
+ if (n->u.linear.op == OMP_LINEAR_DEFAULT)
mio_name (4, omp_declare_simd_clauses);
else
- mio_name (32 + n->u.linear_op, omp_declare_simd_clauses);
+ mio_name (32 + n->u.linear.op, omp_declare_simd_clauses);
mio_symbol_ref (&n->sym);
mio_expr (&n->expr);
}
@@ -4438,7 +4438,7 @@ mio_omp_declare_simd (gfc_namespace *ns, gfc_omp_declare_simd **odsp)
case 34:
case 35:
*ptrs[1] = n = gfc_get_omp_namelist ();
- n->u.linear_op = (enum gfc_omp_linear_op) (t - 32);
+ n->u.linear.op = (enum gfc_omp_linear_op) (t - 32);
t = 4;
goto finish_namelist;
}
diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc
index aeb8a43..bd4ff25 100644
--- a/gcc/fortran/openmp.cc
+++ b/gcc/fortran/openmp.cc
@@ -2324,6 +2324,7 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
if ((mask & OMP_CLAUSE_LINEAR)
&& gfc_match ("linear (") == MATCH_YES)
{
+ bool old_linear_modifier = false;
gfc_omp_linear_op linear_op = OMP_LINEAR_DEFAULT;
gfc_expr *step = NULL;
@@ -2331,17 +2332,26 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
&c->lists[OMP_LIST_LINEAR],
false, NULL, &head)
== MATCH_YES)
- linear_op = OMP_LINEAR_REF;
+ {
+ linear_op = OMP_LINEAR_REF;
+ old_linear_modifier = true;
+ }
else if (gfc_match_omp_variable_list (" val (",
&c->lists[OMP_LIST_LINEAR],
false, NULL, &head)
== MATCH_YES)
- linear_op = OMP_LINEAR_VAL;
+ {
+ linear_op = OMP_LINEAR_VAL;
+ old_linear_modifier = true;
+ }
else if (gfc_match_omp_variable_list (" uval (",
&c->lists[OMP_LIST_LINEAR],
false, NULL, &head)
== MATCH_YES)
- linear_op = OMP_LINEAR_UVAL;
+ {
+ linear_op = OMP_LINEAR_UVAL;
+ old_linear_modifier = true;
+ }
else if (gfc_match_omp_variable_list ("",
&c->lists[OMP_LIST_LINEAR],
false, &end_colon, &head)
@@ -2364,14 +2374,114 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
break;
}
}
- if (end_colon && gfc_match (" %e )", &step) != MATCH_YES)
+ gfc_gobble_whitespace ();
+ if (old_linear_modifier && end_colon)
{
- gfc_free_omp_namelist (*head, false);
- gfc_current_locus = old_loc;
- *head = NULL;
- break;
+ if (gfc_match (" %e )", &step) != MATCH_YES)
+ {
+ gfc_free_omp_namelist (*head, false);
+ gfc_current_locus = old_loc;
+ *head = NULL;
+ goto error;
+ }
+ }
+ else if (end_colon)
+ {
+ bool has_error = false;
+ bool has_modifiers = false;
+ bool has_step = false;
+ bool duplicate_step = false;
+ bool duplicate_mod = false;
+ while (true)
+ {
+ old_loc = gfc_current_locus;
+ bool close_paren = gfc_match ("val )") == MATCH_YES;
+ if (close_paren || gfc_match ("val , ") == MATCH_YES)
+ {
+ if (linear_op != OMP_LINEAR_DEFAULT)
+ {
+ duplicate_mod = true;
+ break;
+ }
+ linear_op = OMP_LINEAR_VAL;
+ has_modifiers = true;
+ if (close_paren)
+ break;
+ continue;
+ }
+ close_paren = gfc_match ("uval )") == MATCH_YES;
+ if (close_paren || gfc_match ("uval , ") == MATCH_YES)
+ {
+ if (linear_op != OMP_LINEAR_DEFAULT)
+ {
+ duplicate_mod = true;
+ break;
+ }
+ linear_op = OMP_LINEAR_UVAL;
+ has_modifiers = true;
+ if (close_paren)
+ break;
+ continue;
+ }
+ close_paren = gfc_match ("ref )") == MATCH_YES;
+ if (close_paren || gfc_match ("ref , ") == MATCH_YES)
+ {
+ if (linear_op != OMP_LINEAR_DEFAULT)
+ {
+ duplicate_mod = true;
+ break;
+ }
+ linear_op = OMP_LINEAR_REF;
+ has_modifiers = true;
+ if (close_paren)
+ break;
+ continue;
+ }
+ close_paren = (gfc_match ("step ( %e ) )", &step)
+ == MATCH_YES);
+ if (close_paren
+ || gfc_match ("step ( %e ) , ", &step) == MATCH_YES)
+ {
+ if (has_step)
+ {
+ duplicate_step = true;
+ break;
+ }
+ has_modifiers = has_step = true;
+ if (close_paren)
+ break;
+ continue;
+ }
+ if (!has_modifiers
+ && gfc_match ("%e )", &step) == MATCH_YES)
+ {
+ if ((step->expr_type == EXPR_FUNCTION
+ || step->expr_type == EXPR_VARIABLE)
+ && strcmp (step->symtree->name, "step") == 0)
+ {
+ gfc_current_locus = old_loc;
+ gfc_match ("step (");
+ has_error = true;
+ }
+ break;
+ }
+ has_error = true;
+ break;
+ }
+ if (duplicate_mod || duplicate_step)
+ {
+ gfc_error ("Multiple %qs modifiers specified at %C",
+ duplicate_mod ? "linear" : "step");
+ has_error = true;
+ }
+ if (has_error)
+ {
+ gfc_free_omp_namelist (*head, false);
+ *head = NULL;
+ goto error;
+ }
}
- else if (!end_colon)
+ else
{
step = gfc_get_constant_expr (BT_INTEGER,
gfc_default_integer_kind,
@@ -2379,9 +2489,12 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask,
mpz_set_si (step->value.integer, 1);
}
(*head)->expr = step;
- if (linear_op != OMP_LINEAR_DEFAULT)
+ if (linear_op != OMP_LINEAR_DEFAULT || old_linear_modifier)
for (gfc_omp_namelist *n = *head; n; n = n->next)
- n->u.linear_op = linear_op;
+ {
+ n->u.linear.op = linear_op;
+ n->u.linear.old_modifier = old_linear_modifier;
+ }
continue;
}
if ((mask & OMP_CLAUSE_LINK)
@@ -5488,10 +5601,6 @@ gfc_match_omp_requires (void)
else
goto error;
- if (requires_clause & ~(OMP_REQ_ATOMIC_MEM_ORDER_MASK
- | OMP_REQ_DYNAMIC_ALLOCATORS))
- gfc_error_now ("Sorry, %qs clause at %L on REQUIRES directive is not "
- "yet supported", clause, &old_loc);
if (!gfc_omp_requires_add_clause (requires_clause, clause, &old_loc, NULL))
goto error;
requires_clauses |= requires_clause;
@@ -7153,10 +7262,16 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
case OMP_MAP_ALWAYS_TO:
case OMP_MAP_ALLOC:
break;
+ case OMP_MAP_TOFROM:
+ n->u.map_op = OMP_MAP_TO;
+ break;
+ case OMP_MAP_ALWAYS_TOFROM:
+ n->u.map_op = OMP_MAP_ALWAYS_TO;
+ break;
default:
gfc_error ("TARGET ENTER DATA with map-type other "
- "than TO, or ALLOC on MAP clause at %L",
- &n->where);
+ "than TO, TOFROM or ALLOC on MAP clause "
+ "at %L", &n->where);
break;
}
break;
@@ -7168,10 +7283,16 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
case OMP_MAP_RELEASE:
case OMP_MAP_DELETE:
break;
+ case OMP_MAP_TOFROM:
+ n->u.map_op = OMP_MAP_FROM;
+ break;
+ case OMP_MAP_ALWAYS_TOFROM:
+ n->u.map_op = OMP_MAP_ALWAYS_FROM;
+ break;
default:
gfc_error ("TARGET EXIT DATA with map-type other "
- "than FROM, RELEASE, or DELETE on MAP "
- "clause at %L", &n->where);
+ "than FROM, TOFROM, RELEASE, or DELETE on "
+ "MAP clause at %L", &n->where);
break;
}
break;
@@ -7431,28 +7552,38 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
break;
case OMP_LIST_LINEAR:
if (code
- && n->u.linear_op != OMP_LINEAR_DEFAULT
- && n->u.linear_op != linear_op)
+ && n->u.linear.op != OMP_LINEAR_DEFAULT
+ && n->u.linear.op != linear_op)
{
- gfc_error ("LINEAR clause modifier used on DO or SIMD"
- " construct at %L", &n->where);
- linear_op = n->u.linear_op;
+ if (n->u.linear.old_modifier)
+ {
+ gfc_error ("LINEAR clause modifier used on DO or "
+ "SIMD construct at %L", &n->where);
+ linear_op = n->u.linear.op;
+ }
+ else if (n->u.linear.op != OMP_LINEAR_VAL)
+ {
+ gfc_error ("LINEAR clause modifier other than VAL "
+ "used on DO or SIMD construct at %L",
+ &n->where);
+ linear_op = n->u.linear.op;
+ }
}
else if (omp_clauses->orderedc)
gfc_error ("LINEAR clause specified together with "
"ORDERED clause with argument at %L",
&n->where);
- else if (n->u.linear_op != OMP_LINEAR_REF
+ else if (n->u.linear.op != OMP_LINEAR_REF
&& n->sym->ts.type != BT_INTEGER)
gfc_error ("LINEAR variable %qs must be INTEGER "
"at %L", n->sym->name, &n->where);
- else if ((n->u.linear_op == OMP_LINEAR_REF
- || n->u.linear_op == OMP_LINEAR_UVAL)
+ else if ((n->u.linear.op == OMP_LINEAR_REF
+ || n->u.linear.op == OMP_LINEAR_UVAL)
&& n->sym->attr.value)
gfc_error ("LINEAR dummy argument %qs with VALUE "
"attribute with %s modifier at %L",
n->sym->name,
- n->u.linear_op == OMP_LINEAR_REF
+ n->u.linear.op == OMP_LINEAR_REF
? "REF" : "UVAL", &n->where);
else if (n->expr)
{
diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc
index 7356d1b..0b4c596 100644
--- a/gcc/fortran/parse.cc
+++ b/gcc/fortran/parse.cc
@@ -1168,7 +1168,8 @@ decode_omp_directive (void)
}
switch (ret)
{
- case ST_OMP_DECLARE_TARGET:
+ /* Set omp_target_seen; exclude ST_OMP_DECLARE_TARGET.
+ FIXME: Get clarification, cf. OpenMP Spec Issue #3240. */
case ST_OMP_TARGET:
case ST_OMP_TARGET_DATA:
case ST_OMP_TARGET_ENTER_DATA:
@@ -6879,11 +6880,14 @@ done:
/* Fixup for external procedures and resolve 'omp requires'. */
int omp_requires;
+ bool omp_target_seen;
omp_requires = 0;
+ omp_target_seen = false;
for (gfc_current_ns = gfc_global_ns_list; gfc_current_ns;
gfc_current_ns = gfc_current_ns->sibling)
{
omp_requires |= gfc_current_ns->omp_requires;
+ omp_target_seen |= gfc_current_ns->omp_target_seen;
gfc_check_externals (gfc_current_ns);
}
for (gfc_current_ns = gfc_global_ns_list; gfc_current_ns;
@@ -6908,6 +6912,22 @@ done:
break;
}
+ if (omp_target_seen)
+ omp_requires_mask = (enum omp_requires) (omp_requires_mask
+ | OMP_REQUIRES_TARGET_USED);
+ if (omp_requires & OMP_REQ_REVERSE_OFFLOAD)
+ omp_requires_mask = (enum omp_requires) (omp_requires_mask
+ | OMP_REQUIRES_REVERSE_OFFLOAD);
+ if (omp_requires & OMP_REQ_UNIFIED_ADDRESS)
+ omp_requires_mask = (enum omp_requires) (omp_requires_mask
+ | OMP_REQUIRES_UNIFIED_ADDRESS);
+ if (omp_requires & OMP_REQ_UNIFIED_SHARED_MEMORY)
+ omp_requires_mask
+ = (enum omp_requires) (omp_requires_mask
+ | OMP_REQUIRES_UNIFIED_SHARED_MEMORY);
+ if (omp_requires & OMP_REQ_DYNAMIC_ALLOCATORS)
+ omp_requires_mask = (enum omp_requires) (omp_requires_mask
+ | OMP_REQUIRES_DYNAMIC_ALLOCATORS);
/* Do the parse tree dump. */
gfc_current_ns = flag_dump_fortran_original ? gfc_global_ns_list : NULL;
diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc
index 233cc42..ab59fbc 100644
--- a/gcc/fortran/simplify.cc
+++ b/gcc/fortran/simplify.cc
@@ -1644,6 +1644,9 @@ gfc_simplify_btest (gfc_expr *e, gfc_expr *bit)
if (e->expr_type != EXPR_CONSTANT || bit->expr_type != EXPR_CONSTANT)
return NULL;
+ if (!gfc_check_bitfcn (e, bit))
+ return &gfc_bad_expr;
+
if (gfc_extract_int (bit, &b) || b < 0)
return gfc_get_logical_expr (gfc_default_logical_kind, &e->where, false);
@@ -3093,6 +3096,10 @@ gfc_simplify_extends_type_of (gfc_expr *a, gfc_expr *mold)
if (UNLIMITED_POLY (a) || UNLIMITED_POLY (mold))
return NULL;
+ if ((a->ts.type == BT_CLASS && !gfc_expr_attr (a).class_ok)
+ || (mold->ts.type == BT_CLASS && !gfc_expr_attr (mold).class_ok))
+ return NULL;
+
/* Return .false. if the dynamic type can never be an extension. */
if ((a->ts.type == BT_CLASS && mold->ts.type == BT_CLASS
&& !gfc_type_is_extension_of
@@ -3353,6 +3360,9 @@ gfc_simplify_ibclr (gfc_expr *x, gfc_expr *y)
if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT)
return NULL;
+ if (!gfc_check_bitfcn (x, y))
+ return &gfc_bad_expr;
+
gfc_extract_int (y, &pos);
k = gfc_validate_kind (x->ts.type, x->ts.kind, false);
@@ -3384,6 +3394,9 @@ gfc_simplify_ibits (gfc_expr *x, gfc_expr *y, gfc_expr *z)
|| z->expr_type != EXPR_CONSTANT)
return NULL;
+ if (!gfc_check_ibits (x, y, z))
+ return &gfc_bad_expr;
+
gfc_extract_int (y, &pos);
gfc_extract_int (z, &len);
@@ -3438,6 +3451,9 @@ gfc_simplify_ibset (gfc_expr *x, gfc_expr *y)
if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT)
return NULL;
+ if (!gfc_check_bitfcn (x, y))
+ return &gfc_bad_expr;
+
gfc_extract_int (y, &pos);
k = gfc_validate_kind (x->ts.type, x->ts.kind, false);
@@ -3503,17 +3519,15 @@ gfc_expr *
gfc_simplify_index (gfc_expr *x, gfc_expr *y, gfc_expr *b, gfc_expr *kind)
{
gfc_expr *result;
- int back, len, lensub;
- int i, j, k, count, index = 0, start;
+ bool back;
+ HOST_WIDE_INT len, lensub, start, last, i, index = 0;
+ int k, delta;
if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT
|| ( b != NULL && b->expr_type != EXPR_CONSTANT))
return NULL;
- if (b != NULL && b->value.logical != 0)
- back = 1;
- else
- back = 0;
+ back = (b != NULL && b->value.logical != 0);
k = get_kind (BT_INTEGER, kind, "INDEX", gfc_default_integer_kind);
if (k == -1)
@@ -3530,111 +3544,40 @@ gfc_simplify_index (gfc_expr *x, gfc_expr *y, gfc_expr *b, gfc_expr *kind)
return result;
}
- if (back == 0)
+ if (lensub == 0)
{
- if (lensub == 0)
- {
- mpz_set_si (result->value.integer, 1);
- return result;
- }
- else if (lensub == 1)
- {
- for (i = 0; i < len; i++)
- {
- for (j = 0; j < lensub; j++)
- {
- if (y->value.character.string[j]
- == x->value.character.string[i])
- {
- index = i + 1;
- goto done;
- }
- }
- }
- }
+ if (back)
+ index = len + 1;
else
- {
- for (i = 0; i < len; i++)
- {
- for (j = 0; j < lensub; j++)
- {
- if (y->value.character.string[j]
- == x->value.character.string[i])
- {
- start = i;
- count = 0;
-
- for (k = 0; k < lensub; k++)
- {
- if (y->value.character.string[k]
- == x->value.character.string[k + start])
- count++;
- }
-
- if (count == lensub)
- {
- index = start + 1;
- goto done;
- }
- }
- }
- }
- }
+ index = 1;
+ goto done;
+ }
+ if (!back)
+ {
+ last = len + 1 - lensub;
+ start = 0;
+ delta = 1;
}
else
{
- if (lensub == 0)
- {
- mpz_set_si (result->value.integer, len + 1);
- return result;
- }
- else if (lensub == 1)
+ last = -1;
+ start = len - lensub;
+ delta = -1;
+ }
+
+ for (; start != last; start += delta)
+ {
+ for (i = 0; i < lensub; i++)
{
- for (i = 0; i < len; i++)
- {
- for (j = 0; j < lensub; j++)
- {
- if (y->value.character.string[j]
- == x->value.character.string[len - i])
- {
- index = len - i + 1;
- goto done;
- }
- }
- }
+ if (x->value.character.string[start + i]
+ != y->value.character.string[i])
+ break;
}
- else
+ if (i == lensub)
{
- for (i = 0; i < len; i++)
- {
- for (j = 0; j < lensub; j++)
- {
- if (y->value.character.string[j]
- == x->value.character.string[len - i])
- {
- start = len - i;
- if (start <= len - lensub)
- {
- count = 0;
- for (k = 0; k < lensub; k++)
- if (y->value.character.string[k]
- == x->value.character.string[k + start])
- count++;
-
- if (count == lensub)
- {
- index = start + 1;
- goto done;
- }
- }
- else
- {
- continue;
- }
- }
- }
- }
+ index = start + 1;
+ goto done;
}
}
diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc
index 6884060..9d91278 100644
--- a/gcc/fortran/trans-intrinsic.cc
+++ b/gcc/fortran/trans-intrinsic.cc
@@ -692,7 +692,7 @@ gfc_build_intrinsic_lib_fndecls (void)
{
/* If we have soft-float types, we create the decls for their
C99-like library functions. For now, we only handle _Float128
- q-suffixed functions. */
+ q-suffixed or IEC 60559 f128-suffixed functions. */
tree type, complex_type, func_1, func_2, func_cabs, func_frexp;
tree func_iround, func_lround, func_llround, func_scalbn, func_cpow;
@@ -739,7 +739,10 @@ gfc_build_intrinsic_lib_fndecls (void)
builtin_decl_for_float_type(). The others are all constructed by
gfc_get_intrinsic_lib_fndecl(). */
#define OTHER_BUILTIN(ID, NAME, TYPE, CONST) \
- quad_decls[BUILT_IN_ ## ID] = define_quad_builtin (NAME "q", func_ ## TYPE, CONST);
+ quad_decls[BUILT_IN_ ## ID] \
+ = define_quad_builtin (gfc_real16_use_iec_60559 \
+ ? NAME "f128" : NAME "q", func_ ## TYPE, \
+ CONST);
#include "mathbuiltins.def"
@@ -751,8 +754,9 @@ gfc_build_intrinsic_lib_fndecls (void)
/* There is one built-in we defined manually, because it gets called
with builtin_decl_for_precision() or builtin_decl_for_float_type()
even though it is not an OTHER_BUILTIN: it is SQRT. */
- quad_decls[BUILT_IN_SQRT] = define_quad_builtin ("sqrtq", func_1, true);
-
+ quad_decls[BUILT_IN_SQRT]
+ = define_quad_builtin (gfc_real16_use_iec_60559
+ ? "sqrtf128" : "sqrtq", func_1, true);
}
/* Add GCC builtin functions. */
@@ -875,7 +879,8 @@ gfc_get_intrinsic_lib_fndecl (gfc_intrinsic_map_t * m, gfc_expr * expr)
ts->type == BT_COMPLEX ? "c" : "", m->name, "l");
else if (gfc_real_kinds[n].c_float128)
snprintf (name, sizeof (name), "%s%s%s",
- ts->type == BT_COMPLEX ? "c" : "", m->name, "q");
+ ts->type == BT_COMPLEX ? "c" : "", m->name,
+ gfc_real_kinds[n].use_iec_60559 ? "f128" : "q");
else
gcc_unreachable ();
}
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index c6a584d..de27ed5 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -2751,7 +2751,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
OMP_CLAUSE_LINEAR);
OMP_CLAUSE_DECL (node) = t;
omp_clause_linear_kind kind;
- switch (n->u.linear_op)
+ switch (n->u.linear.op)
{
case OMP_LINEAR_DEFAULT:
kind = OMP_CLAUSE_LINEAR_DEFAULT;
@@ -2769,7 +2769,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
gcc_unreachable ();
}
OMP_CLAUSE_LINEAR_KIND (node) = kind;
- OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (node) = 1;
+ OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (node)
+ = n->u.linear.old_modifier;
if (last_step_expr && last_step == NULL_TREE)
{
if (!declare_simd)
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index 3742bf3..0ea7c74 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -72,6 +72,7 @@ tree gfc_float128_type_node = NULL_TREE;
tree gfc_complex_float128_type_node = NULL_TREE;
bool gfc_real16_is_float128 = false;
+bool gfc_real16_use_iec_60559 = false;
static GTY(()) tree gfc_desc_dim_type;
static GTY(()) tree gfc_max_array_element_size;
@@ -522,6 +523,11 @@ gfc_init_kinds (void)
&& (TARGET_GLIBC_MAJOR < 2
|| (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR < 32)))
{
+ if (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 26)
+ {
+ gfc_real16_use_iec_60559 = true;
+ gfc_real_kinds[i].use_iec_60559 = 1;
+ }
gfc_real16_is_float128 = true;
gfc_real_kinds[i].c_float128 = 1;
}
@@ -878,6 +884,12 @@ gfc_build_real_type (gfc_real_info *info)
/* TODO: see PR101835. */
info->c_float128 = 1;
gfc_real16_is_float128 = true;
+ if (TARGET_GLIBC_MAJOR > 2
+ || (TARGET_GLIBC_MAJOR == 2 && TARGET_GLIBC_MINOR >= 26))
+ {
+ info->use_iec_60559 = 1;
+ gfc_real16_use_iec_60559 = true;
+ }
}
if (TYPE_PRECISION (float_type_node) == mode_precision)
diff --git a/gcc/fortran/trans-types.h b/gcc/fortran/trans-types.h
index 09a51e6..6a360de 100644
--- a/gcc/fortran/trans-types.h
+++ b/gcc/fortran/trans-types.h
@@ -58,6 +58,10 @@ extern GTY(()) tree gfc_charlen_type_node;
and _Float128. */
extern bool gfc_real16_is_float128;
+/* True if IEC 60559 *f128 APIs should be used for _Float128 rather than
+ libquadmath *q APIs. */
+extern bool gfc_real16_use_iec_60559;
+
enum gfc_packed {
PACKED_NO = 0,
PACKED_PARTIAL,
diff --git a/gcc/function.cc b/gcc/function.cc
index ad0096a..31256b5 100644
--- a/gcc/function.cc
+++ b/gcc/function.cc
@@ -2029,7 +2029,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return instantiate_virtual_regs ();
}
@@ -3472,6 +3472,17 @@ assign_parm_setup_stack (struct assign_parm_data_all *all, tree parm,
emit_move_insn (tempreg, validize_mem (copy_rtx (data->entry_parm)));
+ /* Some ABIs require scalar floating point modes to be passed
+ in a wider scalar integer mode. We need to explicitly
+ truncate to an integer mode of the correct precision before
+ using a SUBREG to reinterpret as a floating point value. */
+ if (SCALAR_FLOAT_MODE_P (data->nominal_mode)
+ && SCALAR_INT_MODE_P (data->arg.mode)
+ && known_lt (GET_MODE_SIZE (data->nominal_mode),
+ GET_MODE_SIZE (data->arg.mode)))
+ tempreg = convert_wider_int_to_float (data->nominal_mode,
+ data->arg.mode, tempreg);
+
push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn);
to_conversion = true;
@@ -6516,7 +6527,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_check_leaf_regs ();
}
@@ -6617,7 +6628,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_thread_prologue_and_epilogue ();
}
@@ -6655,7 +6666,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_zero_call_used_regs
@@ -6926,7 +6937,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_match_asm_constraints
diff --git a/gcc/fwprop.cc b/gcc/fwprop.cc
index d12fc2f..fc652ab 100644
--- a/gcc/fwprop.cc
+++ b/gcc/fwprop.cc
@@ -1029,8 +1029,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_fwprop (); }
- virtual unsigned int execute (function *) { return fwprop (false); }
+ bool gate (function *) final override { return gate_fwprop (); }
+ unsigned int execute (function *) final override { return fwprop (false); }
}; // class pass_rtl_fwprop
@@ -1065,8 +1065,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_fwprop (); }
- virtual unsigned int execute (function *) { return fwprop (true); }
+ bool gate (function *) final override { return gate_fwprop (); }
+ unsigned int execute (function *) final override { return fwprop (true); }
}; // class pass_rtl_fwprop_addr
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 563f535..5cbb385 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -10313,8 +10313,9 @@ sanitize_spec_function (int argc, const char **argv)
return (flag_sanitize & SANITIZE_THREAD) ? "" : NULL;
if (strcmp (argv[0], "undefined") == 0)
return ((flag_sanitize
- & (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT))
- && !flag_sanitize_undefined_trap_on_error) ? "" : NULL;
+ & ~flag_sanitize_trap
+ & (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT)))
+ ? "" : NULL;
if (strcmp (argv[0], "leak") == 0)
return ((flag_sanitize
& (SANITIZE_ADDRESS | SANITIZE_LEAK | SANITIZE_THREAD))
diff --git a/gcc/gcse.cc b/gcc/gcse.cc
index b673531..f06278a 100644
--- a/gcc/gcse.cc
+++ b/gcc/gcse.cc
@@ -4049,8 +4049,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return execute_rtl_pre (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return execute_rtl_pre ();
+ }
}; // class pass_rtl_pre
@@ -4099,8 +4102,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return execute_rtl_hoist (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return execute_rtl_hoist ();
+ }
}; // class pass_rtl_hoist
diff --git a/gcc/gengtype.cc b/gcc/gengtype.cc
index 1967625..4236343 100644
--- a/gcc/gengtype.cc
+++ b/gcc/gengtype.cc
@@ -1705,6 +1705,7 @@ open_base_files (void)
"stmt.h", "expr.h", "alloc-pool.h", "cselib.h", "insn-addr.h",
"optabs.h", "libfuncs.h", "debug.h", "internal-fn.h",
"gimple-iterator.h", "gimple-fold.h", "value-range.h",
+ "value-range-storage.h",
"tree-eh.h", "gimple-ssa.h", "tree-cfg.h",
"tree-vrp.h", "tree-phinodes.h", "ssa-iterators.h", "stringpool.h",
"tree-ssanames.h", "tree-ssa-loop.h", "tree-ssa-loop-ivopts.h",
diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc
index 2b84b84..a0b22c5 100644
--- a/gcc/genmatch.cc
+++ b/gcc/genmatch.cc
@@ -723,9 +723,9 @@ public:
bool force_leaf;
/* If non-zero, the group for optional handling. */
unsigned char opt_grp;
- virtual void gen_transform (FILE *f, int, const char *, bool, int,
- const char *, capture_info *,
- dt_operand ** = 0, int = 0);
+ void gen_transform (FILE *f, int, const char *, bool, int,
+ const char *, capture_info *,
+ dt_operand ** = 0, int = 0) override;
};
/* An operator that is represented by native C code. This is always
@@ -757,9 +757,9 @@ public:
unsigned nr_stmts;
/* The identifier replacement vector. */
vec<id_tab> ids;
- virtual void gen_transform (FILE *f, int, const char *, bool, int,
- const char *, capture_info *,
- dt_operand ** = 0, int = 0);
+ void gen_transform (FILE *f, int, const char *, bool, int,
+ const char *, capture_info *,
+ dt_operand ** = 0, int = 0) final override;
};
/* A wrapper around another operand that captures its value. */
@@ -778,9 +778,9 @@ public:
bool value_match;
/* The captured value. */
operand *what;
- virtual void gen_transform (FILE *f, int, const char *, bool, int,
- const char *, capture_info *,
- dt_operand ** = 0, int = 0);
+ void gen_transform (FILE *f, int, const char *, bool, int,
+ const char *, capture_info *,
+ dt_operand ** = 0, int = 0) final override;
};
/* if expression. */
@@ -1655,7 +1655,7 @@ public:
: dt_node (type, parent_), op (op_), match_dop (match_dop_),
pos (pos_), value_match (false), for_id (current_id) {}
- void gen (FILE *, int, bool, int);
+ void gen (FILE *, int, bool, int) final override;
unsigned gen_predicate (FILE *, int, const char *, bool);
unsigned gen_match_op (FILE *, int, const char *, bool);
@@ -1681,7 +1681,7 @@ public:
indexes (indexes_), info (NULL) {}
void gen_1 (FILE *, int, bool, operand *);
- void gen (FILE *f, int, bool, int);
+ void gen (FILE *f, int, bool, int) final override;
};
template<>
diff --git a/gcc/gensupport.cc b/gcc/gensupport.cc
index 4268049..8fcacf8 100644
--- a/gcc/gensupport.cc
+++ b/gcc/gensupport.cc
@@ -2310,7 +2310,7 @@ class gen_reader : public rtx_reader
{
public:
gen_reader () : rtx_reader (false) {}
- void handle_unknown_directive (file_location, const char *);
+ void handle_unknown_directive (file_location, const char *) final override;
};
void
diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
index f61bc87..a170478 100644
--- a/gcc/gimple-fold.cc
+++ b/gcc/gimple-fold.cc
@@ -5510,9 +5510,8 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace)
}
else
{
- tree fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
- gimple *new_stmt = gimple_build_call (fndecl, 0);
- gimple_set_location (new_stmt, gimple_location (stmt));
+ location_t loc = gimple_location (stmt);
+ gimple *new_stmt = gimple_build_builtin_unreachable (loc);
/* If the call had a SSA name as lhs morph that into
an uninitialized value. */
if (lhs && TREE_CODE (lhs) == SSA_NAME)
@@ -8396,7 +8395,7 @@ gimple_get_virt_method_for_vtable (HOST_WIDE_INT token,
if (!fn
|| (TREE_CODE (fn) != ADDR_EXPR && TREE_CODE (fn) != FDESC_EXPR)
|| TREE_CODE (TREE_OPERAND (fn, 0)) != FUNCTION_DECL)
- fn = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+ fn = builtin_decl_unreachable ();
else
{
fn = TREE_OPERAND (fn, 0);
diff --git a/gcc/gimple-harden-conditionals.cc b/gcc/gimple-harden-conditionals.cc
index 79c0a57..4ca6776 100644
--- a/gcc/gimple-harden-conditionals.cc
+++ b/gcc/gimple-harden-conditionals.cc
@@ -71,11 +71,15 @@ public:
pass_harden_compares (gcc::context *ctxt)
: gimple_opt_pass (pass_data_harden_compares, ctxt)
{}
- opt_pass *clone () { return new pass_harden_compares (m_ctxt); }
- virtual bool gate (function *) {
+ opt_pass *clone () final override
+ {
+ return new pass_harden_compares (m_ctxt);
+ }
+ bool gate (function *) final override
+ {
return flag_harden_compares;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
};
/* Define a pass to harden conditionals in branches. This pass must
@@ -102,11 +106,15 @@ public:
pass_harden_conditional_branches (gcc::context *ctxt)
: gimple_opt_pass (pass_data_harden_conditional_branches, ctxt)
{}
- opt_pass *clone () { return new pass_harden_conditional_branches (m_ctxt); }
- virtual bool gate (function *) {
+ opt_pass *clone () final override
+ {
+ return new pass_harden_conditional_branches (m_ctxt);
+ }
+ bool gate (function *) final override
+ {
return flag_harden_conditional_branches;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
};
}
diff --git a/gcc/gimple-if-to-switch.cc b/gcc/gimple-if-to-switch.cc
index 5dcfe5b..4441206 100644
--- a/gcc/gimple-if-to-switch.cc
+++ b/gcc/gimple-if-to-switch.cc
@@ -61,9 +61,11 @@ struct condition_info
{
typedef auto_vec<std::pair<gphi *, tree>> mapping_vec;
- condition_info (gcond *cond): m_cond (cond), m_bb (gimple_bb (cond)),
- m_forwarder_bb (NULL), m_ranges (), m_true_edge (NULL), m_false_edge (NULL),
- m_true_edge_phi_mapping (), m_false_edge_phi_mapping ()
+ condition_info (gcond *cond, bool has_side_effect): m_cond (cond),
+ m_bb (gimple_bb (cond)), m_forwarder_bb (NULL), m_ranges (),
+ m_true_edge (NULL), m_false_edge (NULL),
+ m_true_edge_phi_mapping (), m_false_edge_phi_mapping (),
+ m_has_side_effect (has_side_effect)
{
m_ranges.create (0);
}
@@ -80,6 +82,7 @@ struct condition_info
edge m_false_edge;
mapping_vec m_true_edge_phi_mapping;
mapping_vec m_false_edge_phi_mapping;
+ bool m_has_side_effect;
};
/* Recond PHI mapping for an original edge E and save these into vector VEC. */
@@ -389,14 +392,11 @@ find_conditions (basic_block bb,
if (cond == NULL)
return;
- if (!no_side_effect_bb (bb))
- return;
-
tree lhs = gimple_cond_lhs (cond);
tree rhs = gimple_cond_rhs (cond);
tree_code code = gimple_cond_code (cond);
- condition_info *info = new condition_info (cond);
+ condition_info *info = new condition_info (cond, !no_side_effect_bb (bb));
gassign *def;
if (code == NE_EXPR
@@ -478,13 +478,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (jump_table_cluster::is_enabled ()
|| bit_test_cluster::is_enabled ());
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_if_to_switch
@@ -534,6 +534,10 @@ pass_if_to_switch::execute (function *fun)
if ((*info2)->m_false_edge != e)
break;
+ /* Only the first BB in a chain can have a side effect. */
+ if (info->m_has_side_effect)
+ break;
+
chain->m_entries.safe_push (*info2);
bitmap_set_bit (seen_bbs, e->src->index);
info = *info2;
diff --git a/gcc/gimple-isel.cc b/gcc/gimple-isel.cc
index 44d086d..aa9c129 100644
--- a/gcc/gimple-isel.cc
+++ b/gcc/gimple-isel.cc
@@ -355,12 +355,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return true;
}
- virtual unsigned int execute (function *fun)
+ unsigned int execute (function *fun) final override
{
return gimple_expand_vec_exprs (fun);
}
diff --git a/gcc/gimple-laddress.cc b/gcc/gimple-laddress.cc
index 13c7858..11754da 100644
--- a/gcc/gimple-laddress.cc
+++ b/gcc/gimple-laddress.cc
@@ -66,9 +66,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_laddress (m_ctxt); }
- virtual bool gate (function *) { return optimize != 0; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_laddress (m_ctxt); }
+ bool gate (function *) final override { return optimize != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_laddress
diff --git a/gcc/gimple-loop-interchange.cc b/gcc/gimple-loop-interchange.cc
index d5d690b..71772b6 100644
--- a/gcc/gimple-loop-interchange.cc
+++ b/gcc/gimple-loop-interchange.cc
@@ -1705,9 +1705,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_linterchange (m_ctxt); }
- virtual bool gate (function *) { return flag_loop_interchange; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_linterchange (m_ctxt); }
+ bool gate (function *) final override { return flag_loop_interchange; }
+ unsigned int execute (function *) final override;
}; // class pass_linterchange
diff --git a/gcc/gimple-loop-jam.cc b/gcc/gimple-loop-jam.cc
index e33dd90..8cde6c7 100644
--- a/gcc/gimple-loop-jam.cc
+++ b/gcc/gimple-loop-jam.cc
@@ -363,7 +363,6 @@ fuse_loops (class loop *loop)
delete_loop (next);
next = ln;
}
- rewrite_into_loop_closed_ssa_1 (NULL, 0, SSA_OP_USE, loop);
}
/* Return true if any of the access functions for dataref A
@@ -610,6 +609,7 @@ tree_loop_unroll_and_jam (void)
if (todo)
{
+ rewrite_into_loop_closed_ssa (NULL, 0);
scev_reset ();
free_dominance_info (CDI_DOMINATORS);
}
@@ -641,8 +641,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_unroll_jam != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_unroll_jam != 0; }
+ unsigned int execute (function *) final override;
};
diff --git a/gcc/gimple-loop-versioning.cc b/gcc/gimple-loop-versioning.cc
index ab02bdd..6bcf6eb 100644
--- a/gcc/gimple-loop-versioning.cc
+++ b/gcc/gimple-loop-versioning.cc
@@ -1782,8 +1782,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_version_loops_for_strides; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override
+ {
+ return flag_version_loops_for_strides;
+ }
+ unsigned int execute (function *) final override;
};
unsigned int
diff --git a/gcc/gimple-low.cc b/gcc/gimple-low.cc
index 2ec19d5..4cd27dd 100644
--- a/gcc/gimple-low.cc
+++ b/gcc/gimple-low.cc
@@ -192,7 +192,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return lower_function_body (); }
+ unsigned int execute (function *) final override
+ {
+ return lower_function_body ();
+ }
}; // class pass_lower_cf
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 5df7441..9be8bc6 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
#include "ssa.h"
#include "gimple-pretty-print.h"
#include "gimple-range.h"
+#include "value-range-storage.h"
#include "tree-cfg.h"
#include "target.h"
#include "attribs.h"
@@ -320,7 +321,7 @@ block_range_cache::block_range_cache ()
bitmap_obstack_initialize (&m_bitmaps);
m_ssa_ranges.create (0);
m_ssa_ranges.safe_grow_cleared (num_ssa_names);
- m_range_allocator = new vrange_allocator;
+ m_range_allocator = new obstack_vrange_allocator;
}
// Remove any m_block_caches which have been created.
@@ -478,7 +479,7 @@ block_range_cache::dump (FILE *f, basic_block bb, bool print_varying)
ssa_global_cache::ssa_global_cache ()
{
m_tab.create (0);
- m_range_allocator = new vrange_allocator;
+ m_range_allocator = new obstack_vrange_allocator;
}
// Deconstruct a global cache.
diff --git a/gcc/gimple-range-cache.h b/gcc/gimple-range-cache.h
index 1e4b5b3..0341192 100644
--- a/gcc/gimple-range-cache.h
+++ b/gcc/gimple-range-cache.h
@@ -44,7 +44,7 @@ private:
vec<class ssa_block_ranges *> m_ssa_ranges;
ssa_block_ranges &get_block_ranges (tree name);
ssa_block_ranges *query_block_ranges (tree name);
- vrange_allocator *m_range_allocator;
+ class vrange_allocator *m_range_allocator;
bitmap_obstack m_bitmaps;
};
@@ -77,8 +77,8 @@ public:
ranger_cache (int not_executable_flag, bool use_imm_uses);
~ranger_cache ();
- virtual bool range_of_expr (vrange &r, tree name, gimple *stmt);
- virtual bool range_on_edge (vrange &r, edge e, tree expr);
+ bool range_of_expr (vrange &r, tree name, gimple *stmt) final override;
+ bool range_on_edge (vrange &r, edge e, tree expr) final override;
bool block_range (vrange &r, basic_block bb, tree name, bool calc = true);
bool get_global_range (vrange &r, tree name) const;
diff --git a/gcc/gimple-range-edge.cc b/gcc/gimple-range-edge.cc
index 03a804a..194e8f8 100644
--- a/gcc/gimple-range-edge.cc
+++ b/gcc/gimple-range-edge.cc
@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-iterator.h"
#include "tree-cfg.h"
#include "gimple-range.h"
+#include "value-range-storage.h"
// If there is a range control statment at the end of block BB, return it.
// Otherwise return NULL.
@@ -68,6 +69,7 @@ gimple_outgoing_range::gimple_outgoing_range (int max_sw_edges)
{
m_edge_table = NULL;
m_max_edges = max_sw_edges;
+ m_range_allocator = new obstack_vrange_allocator;
}
@@ -75,6 +77,7 @@ gimple_outgoing_range::~gimple_outgoing_range ()
{
if (m_edge_table)
delete m_edge_table;
+ delete m_range_allocator;
}
@@ -162,13 +165,13 @@ gimple_outgoing_range::calc_switch_ranges (gswitch *sw)
// If there was an existing range and it doesn't fit, we lose the memory.
// It'll get reclaimed when the obstack is freed. This seems less
// intrusive than allocating max ranges for each case.
- slot = m_range_allocator.clone <irange> (case_range);
+ slot = m_range_allocator->clone <irange> (case_range);
}
irange *&slot = m_edge_table->get_or_insert (default_edge, &existed);
// This should be the first call into this switch.
gcc_checking_assert (!existed);
- irange *dr = m_range_allocator.clone <irange> (default_range);
+ irange *dr = m_range_allocator->clone <irange> (default_range);
slot = dr;
}
diff --git a/gcc/gimple-range-edge.h b/gcc/gimple-range-edge.h
index a9c4af8..1a4dee9 100644
--- a/gcc/gimple-range-edge.h
+++ b/gcc/gimple-range-edge.h
@@ -47,7 +47,7 @@ private:
int m_max_edges;
hash_map<edge, irange *> *m_edge_table;
- vrange_allocator m_range_allocator;
+ class obstack_vrange_allocator *m_range_allocator;
};
// If there is a range control statement at the end of block BB, return it.
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index 2a8c66e..6f907df 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -1006,19 +1006,21 @@ fold_using_range::range_of_builtin_int_call (irange &r, gcall *call,
switch (func)
{
case CFN_BUILT_IN_CONSTANT_P:
- arg = gimple_call_arg (call, 0);
- if (src.get_operand (r, arg) && r.singleton_p ())
- {
- r.set (build_one_cst (type), build_one_cst (type));
- return true;
- }
- if (cfun->after_inlining)
- {
- r.set_zero (type);
- // r.equiv_clear ();
- return true;
- }
- break;
+ {
+ arg = gimple_call_arg (call, 0);
+ Value_Range tmp (TREE_TYPE (arg));
+ if (src.get_operand (tmp, arg) && tmp.singleton_p ())
+ {
+ r.set (build_one_cst (type), build_one_cst (type));
+ return true;
+ }
+ if (cfun->after_inlining)
+ {
+ r.set_zero (type);
+ return true;
+ }
+ break;
+ }
case CFN_BUILT_IN_TOUPPER:
{
@@ -1335,7 +1337,9 @@ fold_using_range::range_of_ssa_name_with_loop_info (irange &r, tree name,
{
gcc_checking_assert (TREE_CODE (name) == SSA_NAME);
tree min, max, type = TREE_TYPE (name);
- if (bounds_of_var_in_loop (&min, &max, src.query (), l, phi, name))
+ // FIXME: Remove the supports_p() once all this can handle floats, etc.
+ if (irange::supports_p (type)
+ && bounds_of_var_in_loop (&min, &max, src.query (), l, phi, name))
{
if (TREE_CODE (min) != INTEGER_CST)
{
@@ -1397,14 +1401,25 @@ fold_using_range::relation_fold_and_or (irange& lhs_range, gimple *s,
// Ideally we search dependencies for common names, and see what pops out.
// until then, simply try to resolve direct dependencies.
- // Both names will need to have 2 direct dependencies.
- tree ssa1_dep2 = src.gori ()->depend2 (ssa1);
- tree ssa2_dep2 = src.gori ()->depend2 (ssa2);
- if (!ssa1_dep2 || !ssa2_dep2)
+ gimple *ssa1_stmt = SSA_NAME_DEF_STMT (ssa1);
+ gimple *ssa2_stmt = SSA_NAME_DEF_STMT (ssa2);
+
+ range_op_handler handler1 (SSA_NAME_DEF_STMT (ssa1));
+ range_op_handler handler2 (SSA_NAME_DEF_STMT (ssa2));
+
+ // If either handler is not present, no relation can be found.
+ if (!handler1 || !handler2)
+ return;
+
+ // Both stmts will need to have 2 ssa names in the stmt.
+ tree ssa1_dep1 = gimple_range_ssa_p (gimple_range_operand1 (ssa1_stmt));
+ tree ssa1_dep2 = gimple_range_ssa_p (gimple_range_operand2 (ssa1_stmt));
+ tree ssa2_dep1 = gimple_range_ssa_p (gimple_range_operand1 (ssa2_stmt));
+ tree ssa2_dep2 = gimple_range_ssa_p (gimple_range_operand2 (ssa2_stmt));
+
+ if (!ssa1_dep1 || !ssa1_dep2 || !ssa2_dep1 || !ssa2_dep2)
return;
- tree ssa1_dep1 = src.gori ()->depend1 (ssa1);
- tree ssa2_dep1 = src.gori ()->depend1 (ssa2);
// Make sure they are the same dependencies, and detect the order of the
// relationship.
bool reverse_op2 = true;
@@ -1413,13 +1428,6 @@ fold_using_range::relation_fold_and_or (irange& lhs_range, gimple *s,
else if (ssa1_dep1 != ssa2_dep2 || ssa1_dep2 != ssa2_dep1)
return;
- range_op_handler handler1 (SSA_NAME_DEF_STMT (ssa1));
- range_op_handler handler2 (SSA_NAME_DEF_STMT (ssa2));
-
- // If either handler is not present, no relation is found.
- if (!handler1 || !handler2)
- return;
-
int_range<2> bool_one (boolean_true_node, boolean_true_node);
relation_kind relation1 = handler1.op1_op2_relation (bool_one);
diff --git a/gcc/gimple-range-infer.cc b/gcc/gimple-range-infer.cc
index eee1491..2d12f86 100644
--- a/gcc/gimple-range-infer.cc
+++ b/gcc/gimple-range-infer.cc
@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
#include "ssa.h"
#include "gimple-pretty-print.h"
#include "gimple-range.h"
+#include "value-range-storage.h"
#include "tree-cfg.h"
#include "target.h"
#include "attribs.h"
@@ -166,6 +167,7 @@ infer_range_manager::infer_range_manager (bool do_search)
// Non-zero elements are very common, so cache them for each ssa-name.
m_nonzero.create (0);
m_nonzero.safe_grow_cleared (num_ssa_names + 1);
+ m_range_allocator = new obstack_vrange_allocator;
}
// Destruct a range infer manager.
@@ -176,6 +178,7 @@ infer_range_manager::~infer_range_manager ()
obstack_free (&m_list_obstack, NULL);
m_on_exit.release ();
bitmap_obstack_release (&m_bitmaps);
+ delete m_range_allocator;
}
// Return a non-zero range value of the appropriate type for NAME from
@@ -189,7 +192,7 @@ infer_range_manager::get_nonzero (tree name)
m_nonzero.safe_grow_cleared (num_ssa_names + 20);
if (!m_nonzero[v])
{
- m_nonzero[v] = m_range_allocator.alloc_vrange (TREE_TYPE (name));
+ m_nonzero[v] = m_range_allocator->alloc_vrange (TREE_TYPE (name));
m_nonzero[v]->set_nonzero (TREE_TYPE (name));
}
return *(m_nonzero[v]);
@@ -261,7 +264,7 @@ infer_range_manager::add_range (tree name, basic_block bb, const vrange &r)
else
{
vrange &v = cur;
- ptr->range = m_range_allocator.clone (v);
+ ptr->range = m_range_allocator->clone (v);
}
return;
}
@@ -269,7 +272,7 @@ infer_range_manager::add_range (tree name, basic_block bb, const vrange &r)
// Otherwise create a record.
bitmap_set_bit (m_on_exit[bb->index].m_names, SSA_NAME_VERSION (name));
ptr = (exit_range *)obstack_alloc (&m_list_obstack, sizeof (exit_range));
- ptr->range = m_range_allocator.clone (r);
+ ptr->range = m_range_allocator->clone (r);
ptr->name = name;
ptr->next = m_on_exit[bb->index].head;
m_on_exit[bb->index].head = ptr;
diff --git a/gcc/gimple-range-infer.h b/gcc/gimple-range-infer.h
index aafa8bb..468b7d11 100644
--- a/gcc/gimple-range-infer.h
+++ b/gcc/gimple-range-infer.h
@@ -78,7 +78,7 @@ private:
bitmap m_seen;
bitmap_obstack m_bitmaps;
struct obstack m_list_obstack;
- vrange_allocator m_range_allocator;
+ class obstack_vrange_allocator *m_range_allocator;
};
#endif // GCC_GIMPLE_RANGE_SIDE_H
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
index f3a4655..3a9f0b0 100644
--- a/gcc/gimple-range.cc
+++ b/gcc/gimple-range.cc
@@ -422,12 +422,17 @@ gimple_ranger::prefill_stmt_dependencies (tree ssa)
{
gcc_checking_assert (range_op_handler (stmt));
tree op = gimple_range_operand2 (stmt);
- Value_Range r (TREE_TYPE (name));
if (op)
- prefill_name (r, op);
+ {
+ Value_Range r (TREE_TYPE (op));
+ prefill_name (r, op);
+ }
op = gimple_range_operand1 (stmt);
if (op)
- prefill_name (r, op);
+ {
+ Value_Range r (TREE_TYPE (op));
+ prefill_name (r, op);
+ }
}
}
if (idx)
diff --git a/gcc/gimple-ssa-backprop.cc b/gcc/gimple-ssa-backprop.cc
index 74f9811..55986dd 100644
--- a/gcc/gimple-ssa-backprop.cc
+++ b/gcc/gimple-ssa-backprop.cc
@@ -945,9 +945,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_backprop (m_ctxt); }
- virtual bool gate (function *) { return flag_ssa_backprop; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_backprop (m_ctxt); }
+ bool gate (function *) final override { return flag_ssa_backprop; }
+ unsigned int execute (function *) final override;
}; // class pass_backprop
diff --git a/gcc/gimple-ssa-evrp-analyze.cc b/gcc/gimple-ssa-evrp-analyze.cc
deleted file mode 100644
index 82142db..0000000
--- a/gcc/gimple-ssa-evrp-analyze.cc
+++ /dev/null
@@ -1,456 +0,0 @@
-/* Support routines for Value Range Propagation (VRP).
- Copyright (C) 2005-2022 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/>. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "backend.h"
-#include "tree.h"
-#include "gimple.h"
-#include "tree-pass.h"
-#include "ssa.h"
-#include "gimple-pretty-print.h"
-#include "cfganal.h"
-#include "gimple-iterator.h"
-#include "gimple-fold.h"
-#include "tree-eh.h"
-#include "tree-cfg.h"
-#include "tree-ssa-loop-manip.h"
-#include "tree-ssa-loop.h"
-#include "cfgloop.h"
-#include "tree-scalar-evolution.h"
-#include "tree-ssa-propagate.h"
-#include "alloc-pool.h"
-#include "domwalk.h"
-#include "tree-cfgcleanup.h"
-#include "vr-values.h"
-#include "gimple-ssa-evrp-analyze.h"
-
-evrp_range_analyzer::evrp_range_analyzer (bool update_global_ranges)
- : stack (10), m_update_global_ranges (update_global_ranges)
-{
- edge e;
- edge_iterator ei;
- basic_block bb;
- FOR_EACH_BB_FN (bb, cfun)
- {
- bb->flags &= ~BB_VISITED;
- FOR_EACH_EDGE (e, ei, bb->preds)
- e->flags |= EDGE_EXECUTABLE;
- }
-}
-
-/* Push an unwinding marker onto the unwinding stack. */
-
-void
-evrp_range_analyzer::push_marker ()
-{
- stack.safe_push (std::make_pair (NULL_TREE, (value_range_equiv *)NULL));
-}
-
-/* Analyze ranges as we enter basic block BB. */
-
-void
-evrp_range_analyzer::enter (basic_block bb)
-{
- if (!optimize)
- return;
- push_marker ();
- record_ranges_from_incoming_edge (bb);
- record_ranges_from_phis (bb);
- bb->flags |= BB_VISITED;
-}
-
-/* Find new range for NAME such that (OP CODE LIMIT) is true. */
-value_range_equiv *
-evrp_range_analyzer::try_find_new_range (tree name,
- tree op, tree_code code, tree limit)
-{
- value_range_equiv vr;
- const value_range_equiv *old_vr = get_value_range (name);
-
- /* Discover VR when condition is true. */
- extract_range_for_var_from_comparison_expr (name, code, op, limit, &vr);
- /* If we found any usable VR, set the VR to ssa_name and create a
- PUSH old value in the stack with the old VR. */
- if (!vr.undefined_p () && !vr.varying_p ())
- {
- if (old_vr->equal_p (vr, /*ignore_equivs=*/true))
- return NULL;
- value_range_equiv *new_vr = allocate_value_range_equiv ();
- new_vr->move (&vr);
- return new_vr;
- }
- return NULL;
-}
-
-/* For LHS record VR in the SSA info. */
-void
-evrp_range_analyzer::set_ssa_range_info (tree lhs, value_range_equiv *vr)
-{
- gcc_assert (m_update_global_ranges);
-
- /* Set the SSA with the value range. */
- if (INTEGRAL_TYPE_P (TREE_TYPE (lhs)))
- {
- if (!vr->varying_p () && vr->constant_p ())
- set_range_info (lhs, *vr);
- }
- else if (POINTER_TYPE_P (TREE_TYPE (lhs))
- && range_includes_zero_p (vr) == 0)
- set_ptr_nonnull (lhs);
-}
-
-/* Return true if all uses of NAME are dominated by STMT or feed STMT
- via a chain of single immediate uses. */
-
-static bool
-all_uses_feed_or_dominated_by_stmt (tree name, gimple *stmt)
-{
- use_operand_p use_p, use2_p;
- imm_use_iterator iter;
- basic_block stmt_bb = gimple_bb (stmt);
-
- FOR_EACH_IMM_USE_FAST (use_p, iter, name)
- {
- gimple *use_stmt = USE_STMT (use_p), *use_stmt2;
- if (use_stmt == stmt
- || is_gimple_debug (use_stmt)
- || (gimple_bb (use_stmt) != stmt_bb
- && dominated_by_p (CDI_DOMINATORS,
- gimple_bb (use_stmt), stmt_bb)))
- continue;
- while (use_stmt != stmt
- && is_gimple_assign (use_stmt)
- && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
- && single_imm_use (gimple_assign_lhs (use_stmt),
- &use2_p, &use_stmt2))
- use_stmt = use_stmt2;
- if (use_stmt != stmt)
- return false;
- }
- return true;
-}
-
-void
-evrp_range_analyzer::record_ranges_from_incoming_edge (basic_block bb)
-{
- edge pred_e = single_pred_edge_ignoring_loop_edges (bb, false);
- if (pred_e)
- {
- gimple *stmt = last_stmt (pred_e->src);
- tree op0 = NULL_TREE;
-
- if (stmt
- && gimple_code (stmt) == GIMPLE_COND
- && (op0 = gimple_cond_lhs (stmt))
- && TREE_CODE (op0) == SSA_NAME
- && (INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))
- || POINTER_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "Visiting controlling predicate ");
- print_gimple_stmt (dump_file, stmt, 0);
- }
- /* Entering a new scope. Try to see if we can find a VR
- here. */
- tree op1 = gimple_cond_rhs (stmt);
- if (TREE_OVERFLOW_P (op1))
- op1 = drop_tree_overflow (op1);
- tree_code code = gimple_cond_code (stmt);
-
- auto_vec<assert_info, 8> asserts;
- register_edge_assert_for (op0, pred_e, code, op0, op1, asserts);
- if (TREE_CODE (op1) == SSA_NAME)
- register_edge_assert_for (op1, pred_e, code, op0, op1, asserts);
-
- auto_vec<std::pair<tree, value_range_equiv *>, 8> vrs;
- for (unsigned i = 0; i < asserts.length (); ++i)
- {
- value_range_equiv *vr
- = try_find_new_range (asserts[i].name,
- asserts[i].expr,
- asserts[i].comp_code,
- asserts[i].val);
- if (vr)
- vrs.safe_push (std::make_pair (asserts[i].name, vr));
- }
-
- /* If pred_e is really a fallthru we can record value ranges
- in SSA names as well. */
- bool is_fallthru = assert_unreachable_fallthru_edge_p (pred_e);
-
- /* Push updated ranges only after finding all of them to avoid
- ordering issues that can lead to worse ranges. */
- for (unsigned i = 0; i < vrs.length (); ++i)
- {
- /* But make sure we do not weaken ranges like when
- getting first [64, +INF] and then ~[0, 0] from
- conditions like (s & 0x3cc0) == 0). */
- const value_range_equiv *old_vr
- = get_value_range (vrs[i].first);
- value_range tem (*old_vr);
- tem.legacy_verbose_intersect (vrs[i].second);
- if (tem.equal_p (*old_vr))
- {
- free_value_range (vrs[i].second);
- continue;
- }
- push_value_range (vrs[i].first, vrs[i].second);
- if (is_fallthru
- && m_update_global_ranges
- && all_uses_feed_or_dominated_by_stmt (vrs[i].first, stmt)
- /* The condition must post-dominate the definition point. */
- && (SSA_NAME_IS_DEFAULT_DEF (vrs[i].first)
- || (gimple_bb (SSA_NAME_DEF_STMT (vrs[i].first))
- == pred_e->src)))
- {
- set_ssa_range_info (vrs[i].first, vrs[i].second);
- maybe_set_nonzero_bits (pred_e, vrs[i].first);
- }
- }
- }
- }
-}
-
-void
-evrp_range_analyzer::record_ranges_from_phis (basic_block bb)
-{
- /* Visit PHI stmts and discover any new VRs possible. */
- bool has_unvisited_preds = false;
- edge_iterator ei;
- edge e;
- FOR_EACH_EDGE (e, ei, bb->preds)
- if (e->flags & EDGE_EXECUTABLE
- && !(e->src->flags & BB_VISITED))
- {
- has_unvisited_preds = true;
- break;
- }
-
- for (gphi_iterator gpi = gsi_start_phis (bb);
- !gsi_end_p (gpi); gsi_next (&gpi))
- {
- gphi *phi = gpi.phi ();
- tree lhs = PHI_RESULT (phi);
- if (virtual_operand_p (lhs))
- continue;
-
- /* Skips floats and other things we can't represent in a
- range. */
- if (!value_range_equiv::supports_p (TREE_TYPE (lhs)))
- continue;
-
- value_range_equiv vr_result;
- bool interesting = stmt_interesting_for_vrp (phi);
- if (!has_unvisited_preds && interesting)
- extract_range_from_phi_node (phi, &vr_result);
- else
- {
- vr_result.set_varying (TREE_TYPE (lhs));
- /* When we have an unvisited executable predecessor we can't
- use PHI arg ranges which may be still UNDEFINED but have
- to use VARYING for them. But we can still resort to
- SCEV for loop header PHIs. */
- class loop *l;
- if (scev_initialized_p ()
- && interesting
- && (l = loop_containing_stmt (phi))
- && l->header == gimple_bb (phi))
- adjust_range_with_scev (&vr_result, l, phi, lhs);
- }
- update_value_range (lhs, &vr_result);
-
- /* Set the SSA with the value range. */
- if (m_update_global_ranges)
- set_ssa_range_info (lhs, &vr_result);
- }
-}
-
-/* Record ranges from STMT into our VR_VALUES class. If TEMPORARY is
- true, then this is a temporary equivalence and should be recorded
- into the unwind table. Othewise record the equivalence into the
- global table. */
-
-void
-evrp_range_analyzer::record_ranges_from_stmt (gimple *stmt, bool temporary)
-{
- tree output = NULL_TREE;
-
- if (!optimize)
- return;
-
- if (dyn_cast <gcond *> (stmt))
- ;
- else if (stmt_interesting_for_vrp (stmt))
- {
- edge taken_edge;
- value_range_equiv vr;
- extract_range_from_stmt (stmt, &taken_edge, &output, &vr);
- if (output)
- {
- /* Set the SSA with the value range. There are two cases to
- consider. First (the the most common) is we are processing
- STMT in a context where its resulting range globally holds
- and thus it can be reflected into the global ranges and need
- not be unwound as we leave scope.
-
- The second case occurs if we are processing a statement in
- a context where the resulting range must not be reflected
- into the global tables and must be unwound as we leave
- the current context. This happens in jump threading for
- example. */
- if (!temporary)
- {
- /* Case one. We can just update the underlying range
- information as well as the global information. */
- update_value_range (output, &vr);
- if (m_update_global_ranges)
- set_ssa_range_info (output, &vr);
- }
- else
- {
- /* We're going to need to unwind this range. We cannot
- use VR as that's a stack object. We have to allocate
- a new range and push the old range onto the stack. We
- also have to be very careful about sharing the underlying
- bitmaps. Ugh. */
- value_range_equiv *new_vr = allocate_value_range_equiv ();
- new_vr->set (vr.min (), vr.max (), NULL, vr.kind ());
- vr.equiv_clear ();
- push_value_range (output, new_vr);
- }
- }
- else
- set_defs_to_varying (stmt);
- }
- else
- set_defs_to_varying (stmt);
-
- /* See if we can derive a range for any of STMT's operands. */
- tree op;
- ssa_op_iter i;
- FOR_EACH_SSA_TREE_OPERAND (op, stmt, i, SSA_OP_USE)
- {
- tree value;
- enum tree_code comp_code;
-
- /* If OP is used in such a way that we can infer a value
- range for it, and we don't find a previous assertion for
- it, create a new assertion location node for OP. */
- if (infer_value_range (stmt, op, &comp_code, &value))
- {
- /* If we are able to infer a nonzero value range for OP,
- then walk backwards through the use-def chain to see if OP
- was set via a typecast.
- If so, then we can also infer a nonzero value range
- for the operand of the NOP_EXPR. */
- if (comp_code == NE_EXPR && integer_zerop (value))
- {
- tree t = op;
- gimple *def_stmt = SSA_NAME_DEF_STMT (t);
- while (is_gimple_assign (def_stmt)
- && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def_stmt))
- && TREE_CODE
- (gimple_assign_rhs1 (def_stmt)) == SSA_NAME
- && POINTER_TYPE_P
- (TREE_TYPE (gimple_assign_rhs1 (def_stmt))))
- {
- t = gimple_assign_rhs1 (def_stmt);
- def_stmt = SSA_NAME_DEF_STMT (t);
-
- /* Add VR when (T COMP_CODE value) condition is
- true. */
- value_range_equiv *op_range
- = try_find_new_range (t, t, comp_code, value);
- if (op_range)
- push_value_range (t, op_range);
- }
- }
- /* Add VR when (OP COMP_CODE value) condition is true. */
- value_range_equiv *op_range = try_find_new_range (op, op,
- comp_code, value);
- if (op_range)
- push_value_range (op, op_range);
- }
- }
-}
-
-/* Unwind recorded ranges to their most recent state. */
-
-void
-evrp_range_analyzer::pop_to_marker (void)
-{
- gcc_checking_assert (!stack.is_empty ());
- while (stack.last ().first != NULL_TREE)
- pop_value_range ();
- stack.pop ();
-}
-
-/* Restore/pop VRs valid only for BB when we leave BB. */
-
-void
-evrp_range_analyzer::leave (basic_block bb ATTRIBUTE_UNUSED)
-{
- if (!optimize)
- return;
- pop_to_marker ();
-}
-
-
-/* Push the Value Range of VAR to the stack and update it with new VR. */
-
-void
-evrp_range_analyzer::push_value_range (tree var, value_range_equiv *vr)
-{
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "pushing new range for ");
- print_generic_expr (dump_file, var);
- fprintf (dump_file, ": ");
- dump_value_range (dump_file, vr);
- fprintf (dump_file, "\n");
- }
- value_range_equiv *old_vr = swap_vr_value (var, vr);
- stack.safe_push (std::make_pair (var, old_vr));
-}
-
-/* Pop a Value Range from the vrp_stack. */
-
-void
-evrp_range_analyzer::pop_value_range ()
-{
- std::pair<tree, value_range_equiv *> e = stack.pop ();
- tree var = e.first;
- value_range_equiv *vr = e.second;
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "popping range for ");
- print_generic_expr (dump_file, var);
- fprintf (dump_file, ", restoring ");
- dump_value_range (dump_file, vr);
- fprintf (dump_file, "\n");
- }
- /* We saved off a lattice entry, now give it back and release
- the one we popped. */
- value_range_equiv *popped_vr = swap_vr_value (var, vr);
- if (popped_vr)
- free_value_range (popped_vr);
-}
diff --git a/gcc/gimple-ssa-evrp-analyze.h b/gcc/gimple-ssa-evrp-analyze.h
deleted file mode 100644
index 51c3209..0000000
--- a/gcc/gimple-ssa-evrp-analyze.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Support routines for Value Range Propagation (VRP).
- Copyright (C) 2016-2022 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/>. */
-
-#ifndef GCC_GIMPLE_SSA_EVRP_ANALYZE_H
-#define GCC_GIMPLE_SSA_EVRP_ANALYZE_H
-
-class evrp_range_analyzer : public vr_values
-{
- public:
- evrp_range_analyzer (bool update_global_ranges);
- ~evrp_range_analyzer (void)
- {
- stack.release ();
- }
-
- void enter (basic_block);
- void push_marker (void);
- void pop_to_marker (void);
- void leave (basic_block);
- void record_ranges_from_stmt (gimple *, bool);
-
- /* Record a new unwindable range. */
- void push_value_range (tree var, value_range_equiv *vr);
-
- private:
- DISABLE_COPY_AND_ASSIGN (evrp_range_analyzer);
-
- void pop_value_range ();
- value_range_equiv *try_find_new_range (tree, tree op, tree_code code,
- tree limit);
- void record_ranges_from_incoming_edge (basic_block);
- void record_ranges_from_phis (basic_block);
- void set_ssa_range_info (tree, value_range_equiv *);
-
- /* STACK holds the old VR. */
- auto_vec<std::pair <tree, value_range_equiv *> > stack;
-
- /* True if we are updating global ranges, false otherwise. */
- bool m_update_global_ranges;
-};
-
-#endif /* GCC_GIMPLE_SSA_EVRP_ANALYZE_H */
diff --git a/gcc/gimple-ssa-evrp.cc b/gcc/gimple-ssa-evrp.cc
deleted file mode 100644
index 20388ed..0000000
--- a/gcc/gimple-ssa-evrp.cc
+++ /dev/null
@@ -1,395 +0,0 @@
-/* Support routines for Value Range Propagation (VRP).
- Copyright (C) 2005-2022 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/>. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "backend.h"
-#include "tree.h"
-#include "gimple.h"
-#include "tree-pass.h"
-#include "ssa.h"
-#include "gimple-pretty-print.h"
-#include "cfganal.h"
-#include "gimple-iterator.h"
-#include "gimple-fold.h"
-#include "tree-eh.h"
-#include "tree-cfg.h"
-#include "tree-ssa-loop-manip.h"
-#include "tree-ssa-loop.h"
-#include "cfgloop.h"
-#include "tree-scalar-evolution.h"
-#include "tree-ssa-propagate.h"
-#include "alloc-pool.h"
-#include "domwalk.h"
-#include "tree-cfgcleanup.h"
-#include "vr-values.h"
-#include "gimple-ssa-evrp-analyze.h"
-#include "gimple-range.h"
-#include "fold-const.h"
-#include "value-pointer-equiv.h"
-#include "tree-vrp.h"
-
-// This is the classic EVRP folder which uses a dominator walk and pushes
-// ranges into the next block if it is a single predecessor block.
-
-class evrp_folder : public substitute_and_fold_engine
-{
-public:
- evrp_folder () :
- substitute_and_fold_engine (),
- m_range_analyzer (/*update_global_ranges=*/true),
- simplifier (&m_range_analyzer)
- { }
-
- ~evrp_folder ()
- {
- if (dump_file)
- {
- fprintf (dump_file, "\nValue ranges after Early VRP:\n\n");
- m_range_analyzer.dump (dump_file);
- fprintf (dump_file, "\n");
- }
- }
-
- tree value_of_expr (tree name, gimple *stmt) override
- {
- return m_range_analyzer.value_of_expr (name, stmt);
- }
-
- void pre_fold_bb (basic_block bb) override
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- fprintf (dump_file, "evrp visiting BB%d\n", bb->index);
- m_range_analyzer.enter (bb);
- }
-
- void pre_fold_stmt (gimple *stmt) override
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "evrp visiting stmt ");
- print_gimple_stmt (dump_file, stmt, 0);
- }
- m_range_analyzer.record_ranges_from_stmt (stmt, false);
- }
-
- bool fold_stmt (gimple_stmt_iterator *gsi) override
- {
- return simplifier.simplify (gsi);
- }
-
- void post_fold_bb (basic_block bb) override
- {
- m_range_analyzer.leave (bb);
- }
-
- void post_new_stmt (gimple *stmt) override
- {
- m_range_analyzer.set_defs_to_varying (stmt);
- }
-
-protected:
- DISABLE_COPY_AND_ASSIGN (evrp_folder);
- evrp_range_analyzer m_range_analyzer;
- simplify_using_ranges simplifier;
-};
-
-// In a hybrid folder, start with an EVRP folder, and add the required
-// fold_stmt bits to either try the ranger first or second.
-//
-// The 3 value_* routines will always query both EVRP and the ranger for
-// a result, and ensure they return the same value. If either returns a value
-// when the other doesn't, it is flagged in the listing, and the discoverd
-// value is returned.
-//
-// The simplifier is unable to process 2 different sources, thus we try to
-// use one engine, and if it fails to simplify, try using the other engine.
-// It is reported when the first attempt fails and the second succeeds.
-
-class hybrid_folder : public evrp_folder
-{
-public:
- hybrid_folder (bool evrp_first)
- {
- m_ranger = enable_ranger (cfun);
-
- if (evrp_first)
- {
- first = &m_range_analyzer;
- first_exec_flag = 0;
- second = m_ranger;
- second_exec_flag = m_ranger->non_executable_edge_flag;
- }
- else
- {
- first = m_ranger;
- first_exec_flag = m_ranger->non_executable_edge_flag;
- second = &m_range_analyzer;
- second_exec_flag = 0;
- }
- m_pta = new pointer_equiv_analyzer (m_ranger);
- }
-
- ~hybrid_folder ()
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- m_ranger->dump (dump_file);
-
- m_ranger->export_global_ranges ();
- disable_ranger (cfun);
- delete m_pta;
- }
-
- bool fold_stmt (gimple_stmt_iterator *gsi) override
- {
- simplifier.set_range_query (first, first_exec_flag);
- if (simplifier.simplify (gsi))
- return true;
-
- simplifier.set_range_query (second, second_exec_flag);
- if (simplifier.simplify (gsi))
- {
- if (dump_file)
- fprintf (dump_file, "EVRP:hybrid: Second query simplifed stmt\n");
- return true;
- }
- return false;
- }
-
- void pre_fold_stmt (gimple *stmt) override
- {
- evrp_folder::pre_fold_stmt (stmt);
- m_pta->visit_stmt (stmt);
- }
-
- void pre_fold_bb (basic_block bb) override
- {
- evrp_folder::pre_fold_bb (bb);
- m_pta->enter (bb);
- }
-
- void post_fold_bb (basic_block bb) override
- {
- evrp_folder::post_fold_bb (bb);
- m_pta->leave (bb);
- }
-
- tree value_of_expr (tree name, gimple *) override;
- tree value_on_edge (edge, tree name) override;
- tree value_of_stmt (gimple *, tree name) override;
-
-private:
- DISABLE_COPY_AND_ASSIGN (hybrid_folder);
- gimple_ranger *m_ranger;
- range_query *first;
- int first_exec_flag;
- range_query *second;
- int second_exec_flag;
- pointer_equiv_analyzer *m_pta;
- tree choose_value (tree evrp_val, tree ranger_val);
-};
-
-
-tree
-hybrid_folder::value_of_expr (tree op, gimple *stmt)
-{
- tree evrp_ret = evrp_folder::value_of_expr (op, stmt);
- tree ranger_ret;
- if (TREE_CODE (op) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op))
- ranger_ret = NULL;
- else
- {
- ranger_ret = m_ranger->value_of_expr (op, stmt);
- if (!ranger_ret && supported_pointer_equiv_p (op))
- ranger_ret = m_pta->get_equiv (op);
- }
- return choose_value (evrp_ret, ranger_ret);
-}
-
-tree
-hybrid_folder::value_on_edge (edge e, tree op)
-{
- // Call evrp::value_of_expr directly. Otherwise another dual call is made
- // via hybrid_folder::value_of_expr, but without an edge.
- tree evrp_ret = evrp_folder::value_of_expr (op, NULL);
- tree ranger_ret;
- if (TREE_CODE (op) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op))
- ranger_ret = NULL;
- else
- {
- ranger_ret = m_ranger->value_on_edge (e, op);
- if (!ranger_ret && supported_pointer_equiv_p (op))
- ranger_ret = m_pta->get_equiv (op);
- }
- return choose_value (evrp_ret, ranger_ret);
-}
-
-tree
-hybrid_folder::value_of_stmt (gimple *stmt, tree op)
-{
- // Call evrp::value_of_expr directly. Otherwise another dual call is made
- // via hybrid_folder::value_of_expr, but without a stmt.
- tree evrp_ret;
- if (op)
- evrp_ret = evrp_folder::value_of_expr (op, NULL);
- else
- evrp_ret = NULL_TREE;
-
- tree ranger_ret;
- if (op && TREE_CODE (op) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op))
- ranger_ret = NULL;
- else
- ranger_ret = m_ranger->value_of_stmt (stmt, op);
- return choose_value (evrp_ret, ranger_ret);
-}
-
-// Given trees returned by EVRP and Ranger, choose/report the value to use
-// by the folder.
-
-tree
-hybrid_folder::choose_value (tree evrp_val, tree ranger_val)
-{
- // If both found the same value, just return it.
- if (evrp_val && ranger_val && !compare_values (evrp_val, ranger_val))
- return evrp_val;
-
- // If neither returned a value, return NULL_TREE.
- if (!ranger_val && !evrp_val)
- return NULL_TREE;
-
- // Otherwise there is a discrepancy to flag.
- if (dump_file)
- {
- if (evrp_val && ranger_val)
- fprintf (dump_file, "EVRP:hybrid: Disagreement\n");
- if (evrp_val)
- {
- fprintf (dump_file, "EVRP:hybrid: EVRP found singleton ");
- print_generic_expr (dump_file, evrp_val);
- fprintf (dump_file, "\n");
- }
- if (ranger_val)
- {
- fprintf (dump_file, "EVRP:hybrid: RVRP found singleton ");
- print_generic_expr (dump_file, ranger_val);
- fprintf (dump_file, "\n");
- }
- }
-
- // If one value was found, return it.
- if (!evrp_val)
- return ranger_val;
- if (!ranger_val)
- return evrp_val;
-
- // If values are different, return the first calculated value.
- if (param_evrp_mode == EVRP_MODE_RVRP_FIRST)
- return ranger_val;
- return evrp_val;
-}
-
-/* Main entry point for the early vrp pass which is a simplified non-iterative
- version of vrp where basic blocks are visited in dominance order. Value
- ranges discovered in early vrp will also be used by ipa-vrp. */
-
-static unsigned int
-execute_early_vrp ()
-{
- if (param_evrp_mode == EVRP_MODE_RVRP_ONLY)
- return execute_ranger_vrp (cfun, false);
-
- /* Ideally this setup code would move into the ctor for the folder
- However, this setup can change the number of blocks which
- invalidates the internal arrays that are set up by the dominator
- walker in substitute_and_fold_engine. */
- loop_optimizer_init (LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS);
- rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
- scev_initialize ();
- calculate_dominance_info (CDI_DOMINATORS);
-
- // Only the last 2 bits matter for choosing the folder.
- switch (param_evrp_mode)
- {
- case EVRP_MODE_EVRP_ONLY:
- {
- evrp_folder folder;
- folder.substitute_and_fold ();
- break;
- }
- case EVRP_MODE_EVRP_FIRST:
- {
- hybrid_folder folder (true);
- folder.substitute_and_fold ();
- break;
- }
- case EVRP_MODE_RVRP_FIRST:
- {
- hybrid_folder folder (false);
- folder.substitute_and_fold ();
- break;
- }
- default:
- gcc_unreachable ();
- }
-
- scev_finalize ();
- loop_optimizer_finalize ();
- return 0;
-}
-
-namespace {
-
-const pass_data pass_data_early_vrp =
-{
- GIMPLE_PASS, /* type */
- "evrp", /* name */
- OPTGROUP_NONE, /* optinfo_flags */
- TV_TREE_EARLY_VRP, /* tv_id */
- PROP_ssa, /* properties_required */
- 0, /* properties_provided */
- 0, /* properties_destroyed */
- 0, /* todo_flags_start */
- ( TODO_cleanup_cfg | TODO_update_ssa | TODO_verify_all ),
-};
-
-class pass_early_vrp : public gimple_opt_pass
-{
-public:
- pass_early_vrp (gcc::context *ctxt)
- : gimple_opt_pass (pass_data_early_vrp, ctxt)
- {}
-
- /* opt_pass methods: */
- opt_pass * clone () { return new pass_early_vrp (m_ctxt); }
- virtual bool gate (function *)
- {
- return flag_tree_vrp != 0;
- }
- virtual unsigned int execute (function *)
- { return execute_early_vrp (); }
-
-}; // class pass_vrp
-} // anon namespace
-
-gimple_opt_pass *
-make_pass_early_vrp (gcc::context *ctxt)
-{
- return new pass_early_vrp (ctxt);
-}
diff --git a/gcc/gimple-ssa-isolate-paths.cc b/gcc/gimple-ssa-isolate-paths.cc
index cc0ed97..87ecd19 100644
--- a/gcc/gimple-ssa-isolate-paths.cc
+++ b/gcc/gimple-ssa-isolate-paths.cc
@@ -969,8 +969,11 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_isolate_erroneous_paths (m_ctxt); }
- virtual bool gate (function *)
+ opt_pass * clone () final override
+ {
+ return new pass_isolate_erroneous_paths (m_ctxt);
+ }
+ bool gate (function *) final override
{
/* If we do not have a suitable builtin function for the trap statement,
then do not perform the optimization. */
@@ -979,7 +982,7 @@ public:
|| warn_null_dereference);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return gimple_ssa_isolate_erroneous_paths ();
}
diff --git a/gcc/gimple-ssa-nonnull-compare.cc b/gcc/gimple-ssa-nonnull-compare.cc
index cc52b91..f9ce8c7 100644
--- a/gcc/gimple-ssa-nonnull-compare.cc
+++ b/gcc/gimple-ssa-nonnull-compare.cc
@@ -126,9 +126,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return warn_nonnull_compare; }
+ bool gate (function *) final override { return warn_nonnull_compare; }
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_warn_nonnull_compare
diff --git a/gcc/gimple-ssa-split-paths.cc b/gcc/gimple-ssa-split-paths.cc
index 6abe1d5..f2e43e5 100644
--- a/gcc/gimple-ssa-split-paths.cc
+++ b/gcc/gimple-ssa-split-paths.cc
@@ -579,9 +579,12 @@ class pass_split_paths : public gimple_opt_pass
: gimple_opt_pass (pass_data_split_paths, ctxt)
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_split_paths (m_ctxt); }
- virtual bool gate (function *) { return gate_split_paths (); }
- virtual unsigned int execute (function *) { return execute_split_paths (); }
+ opt_pass * clone () final override { return new pass_split_paths (m_ctxt); }
+ bool gate (function *) final override { return gate_split_paths (); }
+ unsigned int execute (function *) final override
+ {
+ return execute_split_paths ();
+ }
}; // class pass_split_paths
diff --git a/gcc/gimple-ssa-store-merging.cc b/gcc/gimple-ssa-store-merging.cc
index b952ce5..0640168 100644
--- a/gcc/gimple-ssa-store-merging.cc
+++ b/gcc/gimple-ssa-store-merging.cc
@@ -1037,12 +1037,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_expensive_optimizations && optimize && BITS_PER_UNIT == 8;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_optimize_bswap
@@ -2433,8 +2433,8 @@ public:
/* Pass not supported for PDP-endian, nor for insane hosts or
target character sizes where native_{encode,interpret}_expr
doesn't work properly. */
- virtual bool
- gate (function *)
+ bool
+ gate (function *) final override
{
return flag_store_merging
&& BYTES_BIG_ENDIAN == WORDS_BIG_ENDIAN
@@ -2442,7 +2442,7 @@ public:
&& BITS_PER_UNIT == 8;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
private:
hash_map<tree_operand_hash, class imm_store_chain_info *> m_stores;
diff --git a/gcc/gimple-ssa-strength-reduction.cc b/gcc/gimple-ssa-strength-reduction.cc
index dad73d3..fb2bb9f 100644
--- a/gcc/gimple-ssa-strength-reduction.cc
+++ b/gcc/gimple-ssa-strength-reduction.cc
@@ -1729,7 +1729,7 @@ class find_candidates_dom_walker : public dom_walker
public:
find_candidates_dom_walker (cdi_direction direction)
: dom_walker (direction) {}
- virtual edge before_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
};
/* Find strength-reduction candidates in block BB. */
@@ -4002,8 +4002,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_slsr; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_tree_slsr; }
+ unsigned int execute (function *) final override;
}; // class pass_strength_reduction
diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc
index eb9297a..04aa849 100644
--- a/gcc/gimple-ssa-warn-access.cc
+++ b/gcc/gimple-ssa-warn-access.cc
@@ -2075,13 +2075,13 @@ class pass_waccess : public gimple_opt_pass
~pass_waccess ();
- opt_pass *clone ();
+ opt_pass *clone () final override;
- virtual bool gate (function *);
+ bool gate (function *) final override;
- void set_pass_param (unsigned, bool);
+ void set_pass_param (unsigned, bool) final override;
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
private:
/* Not copyable or assignable. */
diff --git a/gcc/gimple-ssa-warn-alloca.cc b/gcc/gimple-ssa-warn-alloca.cc
index 273b88e..83a241a 100644
--- a/gcc/gimple-ssa-warn-alloca.cc
+++ b/gcc/gimple-ssa-warn-alloca.cc
@@ -58,8 +58,8 @@ public:
pass_walloca (gcc::context *ctxt)
: gimple_opt_pass(pass_data_walloca, ctxt), xlimit_certain_p (false)
{}
- opt_pass *clone () { return new pass_walloca (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass *clone () final override { return new pass_walloca (m_ctxt); }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
// Set to true to enable only warnings for alloca calls that
@@ -69,8 +69,8 @@ public:
// the "may be too large" kind.
xlimit_certain_p = param;
}
- virtual bool gate (function *);
- virtual unsigned int execute (function *);
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override;
private:
// Set to TRUE the first time we run this pass on a function.
diff --git a/gcc/gimple-ssa-warn-restrict.cc b/gcc/gimple-ssa-warn-restrict.cc
index 734cdd7..6b6097a 100644
--- a/gcc/gimple-ssa-warn-restrict.cc
+++ b/gcc/gimple-ssa-warn-restrict.cc
@@ -64,8 +64,8 @@ class pass_wrestrict : public gimple_opt_pass
public:
pass_wrestrict (gcc::context *);
- virtual bool gate (function *);
- virtual unsigned int execute (function *);
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override;
void check_call (gimple *);
diff --git a/gcc/gimple-warn-recursion.cc b/gcc/gimple-warn-recursion.cc
index 91a3cdb..9b04899 100644
--- a/gcc/gimple-warn-recursion.cc
+++ b/gcc/gimple-warn-recursion.cc
@@ -52,9 +52,9 @@ public:
pass_warn_recursion (gcc::context *);
private:
- virtual bool gate (function *) { return warn_infinite_recursion; }
+ bool gate (function *) final override { return warn_infinite_recursion; }
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
bool find_function_exit (basic_block);
diff --git a/gcc/gimple.cc b/gcc/gimple.cc
index b70ab4d..9b15639 100644
--- a/gcc/gimple.cc
+++ b/gcc/gimple.cc
@@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see
#include "stringpool.h"
#include "attribs.h"
#include "asan.h"
+#include "ubsan.h"
#include "langhooks.h"
#include "attr-fnspec.h"
#include "ipa-modref-tree.h"
@@ -421,6 +422,18 @@ gimple_build_call_from_tree (tree t, tree fnptrtype)
return call;
}
+/* Build a gcall to __builtin_unreachable as rewritten by
+ -fsanitize=unreachable. */
+
+gcall *
+gimple_build_builtin_unreachable (location_t loc)
+{
+ tree data = NULL_TREE;
+ tree fn = sanitize_unreachable_fn (&data, loc);
+ gcall *g = gimple_build_call (fn, data != NULL_TREE, data);
+ gimple_set_location (g, loc);
+ return g;
+}
/* Build a GIMPLE_ASSIGN statement.
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 870629c..1d15ff9 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -1638,6 +1638,7 @@ extern void maybe_remove_unused_call_args (struct function *, gimple *);
extern bool gimple_inexpensive_call_p (gcall *);
extern bool stmt_can_terminate_bb_p (gimple *);
extern location_t gimple_or_expr_nonartificial_location (gimple *, tree);
+gcall *gimple_build_builtin_unreachable (location_t);
/* Return the disposition for a warning (or all warnings by default)
for a statement. */
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 0cda305..7c5c456 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-8db6b78110f84e22c409f334aeaefb80a8b39917
+d295a0a2c96c0f7c3abd94fea3aa4e2303bf2af2
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/go/gofrontend/export.cc b/gcc/go/gofrontend/export.cc
index a30b11a..7373dee 100644
--- a/gcc/go/gofrontend/export.cc
+++ b/gcc/go/gofrontend/export.cc
@@ -530,6 +530,9 @@ struct Sort_bindings
bool
operator()(const Named_object* n1, const Named_object* n2) const
{
+ if (n1 == n2)
+ return false;
+
if (n1->package() != n2->package())
{
if (n1->package() == NULL)
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 734ecb9..2492d9f 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -1426,7 +1426,12 @@ Sink_expression::do_get_backend(Translate_context* context)
Gogo* gogo = context->gogo();
if (this->bvar_ == NULL)
{
- go_assert(this->type_ != NULL && !this->type_->is_sink_type());
+ if (this->type_ == NULL || this->type_->is_sink_type())
+ {
+ go_assert(saw_errors());
+ return gogo->backend()->error_expression();
+ }
+
Named_object* fn = context->function();
go_assert(fn != NULL);
Bfunction* fn_ctx = fn->func_value()->get_or_make_decl(gogo, fn);
@@ -2715,7 +2720,7 @@ Integer_expression::do_import(Import_expression* imp, Location loc)
return Expression::make_error(loc);
}
if (pos == std::string::npos)
- mpfr_set_ui(real, 0, MPFR_RNDN);
+ mpfr_init_set_ui(real, 0, MPFR_RNDN);
else
{
std::string real_str = num.substr(0, pos);
@@ -3347,97 +3352,7 @@ class Find_named_object : public Traverse
bool found_;
};
-// A reference to a const in an expression.
-
-class Const_expression : public Expression
-{
- public:
- Const_expression(Named_object* constant, Location location)
- : Expression(EXPRESSION_CONST_REFERENCE, location),
- constant_(constant), type_(NULL), seen_(false)
- { }
-
- Named_object*
- named_object()
- { return this->constant_; }
-
- const Named_object*
- named_object() const
- { return this->constant_; }
-
- // Check that the initializer does not refer to the constant itself.
- void
- check_for_init_loop();
-
- protected:
- int
- do_traverse(Traverse*);
-
- Expression*
- do_lower(Gogo*, Named_object*, Statement_inserter*, int);
-
- bool
- do_is_constant() const
- { return true; }
-
- bool
- do_is_zero_value() const
- { return this->constant_->const_value()->expr()->is_zero_value(); }
-
- bool
- do_is_static_initializer() const
- { return true; }
-
- bool
- do_numeric_constant_value(Numeric_constant* nc) const;
-
- bool
- do_string_constant_value(std::string* val) const;
-
- bool
- do_boolean_constant_value(bool* val) const;
-
- Type*
- do_type();
-
- // The type of a const is set by the declaration, not the use.
- void
- do_determine_type(const Type_context*);
-
- void
- do_check_types(Gogo*);
-
- Expression*
- do_copy()
- { return this; }
-
- Bexpression*
- do_get_backend(Translate_context* context);
-
- int
- do_inlining_cost() const
- { return 1; }
-
- // When exporting a reference to a const as part of a const
- // expression, we export the value. We ignore the fact that it has
- // a name.
- void
- do_export(Export_function_body* efb) const
- { this->constant_->const_value()->expr()->export_expression(efb); }
-
- void
- do_dump_expression(Ast_dump_context*) const;
-
- private:
- // The constant.
- Named_object* constant_;
- // The type of this reference. This is used if the constant has an
- // abstract type.
- Type* type_;
- // Used to prevent infinite recursion when a constant incorrectly
- // refers to itself.
- mutable bool seen_;
-};
+// Class Const_expression.
// Traversal.
@@ -3449,6 +3364,14 @@ Const_expression::do_traverse(Traverse* traverse)
return TRAVERSE_CONTINUE;
}
+// Whether this is the zero value.
+
+bool
+Const_expression::do_is_zero_value() const
+{
+ return this->constant_->const_value()->expr()->is_zero_value();
+}
+
// Lower a constant expression. This is where we convert the
// predeclared constant iota into an integer value.
@@ -3703,6 +3626,16 @@ Const_expression::do_get_backend(Translate_context* context)
return expr->get_backend(context);
}
+// When exporting a reference to a const as part of a const
+// expression, we export the value. We ignore the fact that it has
+// a name.
+
+void
+Const_expression::do_export(Export_function_body* efb) const
+{
+ this->constant_->const_value()->expr()->export_expression(efb);
+}
+
// Dump ast representation for constant expression.
void
@@ -6824,11 +6757,12 @@ Binary_expression::do_determine_type(const Type_context* context)
{
if ((tleft->integer_type() != NULL && tright->integer_type() != NULL)
|| (tleft->float_type() != NULL && tright->float_type() != NULL)
- || (tleft->complex_type() != NULL && tright->complex_type() != NULL))
+ || (tleft->complex_type() != NULL && tright->complex_type() != NULL)
+ || (tleft->is_boolean_type() && tright->is_boolean_type()))
{
- // Both sides have an abstract integer, abstract float, or
- // abstract complex type. Just let CONTEXT determine
- // whether they may remain abstract or not.
+ // Both sides have an abstract integer, abstract float,
+ // abstract complex, or abstract boolean type. Just let
+ // CONTEXT determine whether they may remain abstract or not.
}
else if (tleft->complex_type() != NULL)
subcontext.type = tleft;
@@ -8552,6 +8486,11 @@ Builtin_call_expression::do_flatten(Gogo* gogo, Named_object* function,
pa != this->args()->end();
++pa)
{
+ if ((*pa)->is_error_expression())
+ {
+ go_assert(saw_errors());
+ return Expression::make_error(loc);
+ }
if ((*pa)->is_nil_expression())
{
Expression* nil = Expression::make_nil(loc);
@@ -13457,6 +13396,7 @@ Array_index_expression::do_check_types(Gogo*)
if (array_type == NULL)
{
go_assert(this->array_->type()->is_error());
+ this->set_is_error();
return;
}
@@ -15235,7 +15175,7 @@ Selector_expression::lower_method_expression(Gogo* gogo)
p != method_parameters->end();
++p, ++i)
{
- if (!p->name().empty())
+ if (!p->name().empty() && !Gogo::is_sink_name(p->name()))
parameters->push_back(*p);
else
{
diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h
index 707c193..a1e3733 100644
--- a/gcc/go/gofrontend/expressions.h
+++ b/gcc/go/gofrontend/expressions.h
@@ -28,6 +28,7 @@ class Map_type;
class Struct_type;
class Struct_field;
class Expression_list;
+class Const_expression;
class Var_expression;
class Enclosed_var_expression;
class Temporary_reference_expression;
@@ -626,6 +627,20 @@ class Expression
is_type_expression() const
{ return this->classification_ == EXPRESSION_TYPE; }
+ // If this is a const reference, return the Const_expression
+ // structure. Otherwise, return NULL. This is a controlled dynamic
+ // cast.
+ Const_expression*
+ const_expression()
+ { return this->convert<Const_expression, EXPRESSION_CONST_REFERENCE>(); }
+
+ const Const_expression*
+ const_expression() const
+ {
+ return this->convert<const Const_expression,
+ EXPRESSION_CONST_REFERENCE>();
+ }
+
// If this is a variable reference, return the Var_expression
// structure. Otherwise, return NULL. This is a controlled dynamic
// cast.
@@ -1453,6 +1468,96 @@ class Parser_expression : public Expression
{ go_unreachable(); }
};
+// A reference to a const in an expression.
+
+class Const_expression : public Expression
+{
+ public:
+ Const_expression(Named_object* constant, Location location)
+ : Expression(EXPRESSION_CONST_REFERENCE, location),
+ constant_(constant), type_(NULL), seen_(false)
+ { }
+
+ Named_object*
+ named_object()
+ { return this->constant_; }
+
+ const Named_object*
+ named_object() const
+ { return this->constant_; }
+
+ // Check that the initializer does not refer to the constant itself.
+ void
+ check_for_init_loop();
+
+ protected:
+ int
+ do_traverse(Traverse*);
+
+ Expression*
+ do_lower(Gogo*, Named_object*, Statement_inserter*, int);
+
+ bool
+ do_is_constant() const
+ { return true; }
+
+ bool
+ do_is_zero_value() const;
+
+ bool
+ do_is_static_initializer() const
+ { return true; }
+
+ bool
+ do_numeric_constant_value(Numeric_constant* nc) const;
+
+ bool
+ do_string_constant_value(std::string* val) const;
+
+ bool
+ do_boolean_constant_value(bool* val) const;
+
+ Type*
+ do_type();
+
+ // The type of a const is set by the declaration, not the use.
+ void
+ do_determine_type(const Type_context*);
+
+ void
+ do_check_types(Gogo*);
+
+ Expression*
+ do_copy()
+ { return this; }
+
+ Bexpression*
+ do_get_backend(Translate_context* context);
+
+ int
+ do_inlining_cost() const
+ { return 1; }
+
+ // When exporting a reference to a const as part of a const
+ // expression, we export the value. We ignore the fact that it has
+ // a name.
+ void
+ do_export(Export_function_body* efb) const;
+
+ void
+ do_dump_expression(Ast_dump_context*) const;
+
+ private:
+ // The constant.
+ Named_object* constant_;
+ // The type of this reference. This is used if the constant has an
+ // abstract type.
+ Type* type_;
+ // Used to prevent infinite recursion when a constant incorrectly
+ // refers to itself.
+ mutable bool seen_;
+};
+
// An expression which is simply a variable.
class Var_expression : public Expression
diff --git a/gcc/go/gofrontend/go.cc b/gcc/go/gofrontend/go.cc
index 404cb12..1512770 100644
--- a/gcc/go/gofrontend/go.cc
+++ b/gcc/go/gofrontend/go.cc
@@ -146,6 +146,9 @@ go_parse_input_files(const char** filenames, unsigned int filename_count,
if (only_check_syntax)
return;
+ // Record global variable initializer dependencies.
+ ::gogo->record_global_init_refs();
+
// Do simple deadcode elimination.
::gogo->remove_deadcode();
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index d35c6ba..9197eef 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -1086,8 +1086,8 @@ class Find_vars : public Traverse
public:
Find_vars()
- : Traverse(traverse_expressions),
- vars_(), seen_objects_()
+ : Traverse(traverse_expressions | traverse_statements),
+ vars_(), seen_objects_(), lhs_is_ref_(false)
{ }
// An iterator through the variables found, after the traversal.
@@ -1104,11 +1104,16 @@ class Find_vars : public Traverse
int
expression(Expression**);
+ int
+ statement(Block*, size_t* index, Statement*);
+
private:
// Accumulated variables.
Vars vars_;
// Objects we have already seen.
Seen_objects seen_objects_;
+ // Whether an assignment to a variable counts as a reference.
+ bool lhs_is_ref_;
};
// Collect global variables referenced by EXPR. Look through function
@@ -1164,7 +1169,11 @@ Find_vars::expression(Expression** pexpr)
if (ins.second)
{
// This is the first time we have seen this name.
- if (f->func_value()->block()->traverse(this) == TRAVERSE_EXIT)
+ bool hold = this->lhs_is_ref_;
+ this->lhs_is_ref_ = true;
+ int r = f->func_value()->block()->traverse(this);
+ this->lhs_is_ref_ = hold;
+ if (r == TRAVERSE_EXIT)
return TRAVERSE_EXIT;
}
}
@@ -1192,6 +1201,29 @@ Find_vars::expression(Expression** pexpr)
return TRAVERSE_CONTINUE;
}
+// Check a statement while searching for variables. This is where we
+// skip variables on the left hand side of assigments if appropriate.
+
+int
+Find_vars::statement(Block*, size_t*, Statement* s)
+{
+ if (this->lhs_is_ref_)
+ return TRAVERSE_CONTINUE;
+ Assignment_statement* as = s->assignment_statement();
+ if (as == NULL)
+ return TRAVERSE_CONTINUE;
+
+ // Only traverse subexpressions of the LHS.
+ if (as->lhs()->traverse_subexpressions(this) == TRAVERSE_EXIT)
+ return TRAVERSE_EXIT;
+
+ Expression* rhs = as->rhs();
+ if (Expression::traverse(&rhs, this) == TRAVERSE_EXIT)
+ return TRAVERSE_EXIT;
+
+ return TRAVERSE_SKIP_COMPONENTS;
+}
+
// Return true if EXPR, PREINIT, or DEP refers to VAR.
static bool
@@ -1230,11 +1262,11 @@ class Var_init
{
public:
Var_init()
- : var_(NULL), init_(NULL), refs_(NULL), dep_count_(0)
+ : var_(NULL), init_(NULL), dep_count_(0)
{ }
Var_init(Named_object* var, Bstatement* init)
- : var_(var), init_(init), refs_(NULL), dep_count_(0)
+ : var_(var), init_(init), dep_count_(0)
{ }
// Return the variable.
@@ -1247,19 +1279,6 @@ class Var_init
init() const
{ return this->init_; }
- // Add a reference.
- void
- add_ref(Named_object* var);
-
- // The variables which this variable's initializers refer to.
- const std::vector<Named_object*>*
- refs()
- { return this->refs_; }
-
- // Clear the references, if any.
- void
- clear_refs();
-
// Return the number of remaining dependencies.
size_t
dep_count() const
@@ -1280,36 +1299,12 @@ class Var_init
Named_object* var_;
// The backend initialization statement.
Bstatement* init_;
- // Variables this refers to.
- std::vector<Named_object*>* refs_;
// The number of initializations this is dependent on. A variable
// initialization should not be emitted if any of its dependencies
// have not yet been resolved.
size_t dep_count_;
};
-// Add a reference.
-
-void
-Var_init::add_ref(Named_object* var)
-{
- if (this->refs_ == NULL)
- this->refs_ = new std::vector<Named_object*>;
- this->refs_->push_back(var);
-}
-
-// Clear the references, if any.
-
-void
-Var_init::clear_refs()
-{
- if (this->refs_ != NULL)
- {
- delete this->refs_;
- this->refs_ = NULL;
- }
-}
-
// For comparing Var_init keys in a map.
inline bool
@@ -1324,7 +1319,7 @@ typedef std::list<Var_init> Var_inits;
// variable V2 then we initialize V1 after V2.
static void
-sort_var_inits(Gogo* gogo, Var_inits* var_inits)
+sort_var_inits(Var_inits* var_inits)
{
if (var_inits->empty())
return;
@@ -1337,33 +1332,13 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits)
Init_deps init_deps;
bool init_loop = false;
- // Compute all variable references.
+ // Map from variable to Var_init.
for (Var_inits::iterator pvar = var_inits->begin();
pvar != var_inits->end();
++pvar)
{
Named_object* var = pvar->var();
var_to_init[var] = &*pvar;
-
- Find_vars find_vars;
- Expression* init = var->var_value()->init();
- if (init != NULL)
- Expression::traverse(&init, &find_vars);
- if (var->var_value()->has_pre_init())
- var->var_value()->preinit()->traverse(&find_vars);
- Named_object* dep = gogo->var_depends_on(var->var_value());
- if (dep != NULL)
- {
- Expression* dinit = dep->var_value()->init();
- if (dinit != NULL)
- Expression::traverse(&dinit, &find_vars);
- if (dep->var_value()->has_pre_init())
- dep->var_value()->preinit()->traverse(&find_vars);
- }
- for (Find_vars::const_iterator p = find_vars.begin();
- p != find_vars.end();
- ++p)
- pvar->add_ref(*p);
}
// Add dependencies to init_deps, and check for cycles.
@@ -1373,7 +1348,8 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits)
{
Named_object* var = pvar->var();
- const std::vector<Named_object*>* refs = pvar->refs();
+ const std::vector<Named_object*>* refs =
+ pvar->var()->var_value()->init_refs();
if (refs == NULL)
continue;
for (std::vector<Named_object*>::const_iterator pdep = refs->begin();
@@ -1383,19 +1359,11 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits)
Named_object* dep = *pdep;
if (var == dep)
{
- // This is a reference from a variable to itself, which
- // may indicate a loop. We only report an error if
- // there is an initializer and there is no dependency.
- // When there is no initializer, it means that the
- // preinitializer sets the variable, which will appear
- // to be a loop here.
- if (var->var_value()->init() != NULL
- && gogo->var_depends_on(var->var_value()) == NULL)
- go_error_at(var->location(),
- ("initialization expression for %qs "
- "depends upon itself"),
- var->message_name().c_str());
-
+ // This is a reference from a variable to itself.
+ go_error_at(var->location(),
+ ("initialization expression for %qs "
+ "depends upon itself"),
+ var->message_name().c_str());
continue;
}
@@ -1412,7 +1380,8 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits)
pvar->add_dependency();
// Check for cycles.
- const std::vector<Named_object*>* deprefs = dep_init->refs();
+ const std::vector<Named_object*>* deprefs =
+ dep_init->var()->var_value()->init_refs();
if (deprefs == NULL)
continue;
for (std::vector<Named_object*>::const_iterator pdepdep =
@@ -1437,10 +1406,6 @@ sort_var_inits(Gogo* gogo, Var_inits* var_inits)
}
var_to_init.clear();
- for (Var_inits::iterator pvar = var_inits->begin();
- pvar != var_inits->end();
- ++pvar)
- pvar->clear_refs();
// If there are no dependencies then the declaration order is sorted.
if (!init_deps.empty() && !init_loop)
@@ -1748,7 +1713,7 @@ Gogo::write_globals()
// workable order.
if (!var_inits.empty())
{
- sort_var_inits(this, &var_inits);
+ sort_var_inits(&var_inits);
for (Var_inits::const_iterator p = var_inits.begin();
p != var_inits.end();
++p)
@@ -2811,7 +2776,7 @@ Specific_type_functions::type(Type* t)
case Type::TYPE_MAP:
{
- Type* key_type = t->map_type()->key_type();
+ Type* key_type = t->map_type()->key_type()->unalias();
if (key_type->needs_specific_type_functions(this->gogo_))
key_type->hash_function(this->gogo_, NULL);
}
@@ -3840,6 +3805,51 @@ Gogo::check_types_in_block(Block* block)
block->traverse(&traverse);
}
+// For each global variable defined in the current package, record the
+// set of variables that its initializer depends on. We do this after
+// lowering so that all unknown names are resolved to their final
+// locations. We do this before write barrier insertion because that
+// makes it harder to distinguish references from assignments in
+// preinit blocks.
+
+void
+Gogo::record_global_init_refs()
+{
+ Bindings* bindings = this->package_->bindings();
+ for (Bindings::const_definitions_iterator pb = bindings->begin_definitions();
+ pb != bindings->end_definitions();
+ pb++)
+ {
+ Named_object* no = *pb;
+ if (!no->is_variable())
+ continue;
+
+ Variable* var = no->var_value();
+ go_assert(var->is_global());
+
+ Find_vars find_vars;
+ Expression* init = var->init();
+ if (init != NULL)
+ Expression::traverse(&init, &find_vars);
+ if (var->has_pre_init())
+ var->preinit()->traverse(&find_vars);
+ Named_object* dep = this->var_depends_on(var);
+ if (dep != NULL)
+ {
+ Expression* dinit = dep->var_value()->init();
+ if (dinit != NULL)
+ Expression::traverse(&dinit, &find_vars);
+ if (dep->var_value()->has_pre_init())
+ dep->var_value()->preinit()->traverse(&find_vars);
+ }
+
+ for (Find_vars::const_iterator pv = find_vars.begin();
+ pv != find_vars.end();
+ ++pv)
+ var->add_init_ref(*pv);
+ }
+}
+
// A traversal class which finds all the expressions which must be
// evaluated in order within a statement or larger expression. This
// is used to implement the rules about order of evaluation.
@@ -5302,16 +5312,16 @@ Gogo::write_c_header()
Named_object* no = types.front();
types.pop_front();
- std::vector<const Named_object*> requires;
+ std::vector<const Named_object*> needs;
std::vector<const Named_object*> declare;
- if (!no->type_value()->struct_type()->can_write_to_c_header(&requires,
+ if (!no->type_value()->struct_type()->can_write_to_c_header(&needs,
&declare))
continue;
bool ok = true;
for (std::vector<const Named_object*>::const_iterator pr
- = requires.begin();
- pr != requires.end() && ok;
+ = needs.begin();
+ pr != needs.end() && ok;
++pr)
{
for (std::list<Named_object*>::const_iterator pt = types.begin();
@@ -5342,10 +5352,10 @@ Gogo::write_c_header()
if (*pd == no)
continue;
- std::vector<const Named_object*> drequires;
+ std::vector<const Named_object*> dneeds;
std::vector<const Named_object*> ddeclare;
if (!(*pd)->type_value()->struct_type()->
- can_write_to_c_header(&drequires, &ddeclare))
+ can_write_to_c_header(&dneeds, &ddeclare))
continue;
bool done = false;
@@ -7422,16 +7432,16 @@ Variable::Variable(Type* type, Expression* init, bool is_global,
bool is_parameter, bool is_receiver,
Location location)
: type_(type), init_(init), preinit_(NULL), location_(location),
- embeds_(NULL), backend_(NULL), is_global_(is_global),
- is_parameter_(is_parameter), is_closure_(false), is_receiver_(is_receiver),
- is_varargs_parameter_(false), is_global_sink_(false), is_used_(false),
- is_address_taken_(false), is_non_escaping_address_taken_(false),
- seen_(false), init_is_lowered_(false), init_is_flattened_(false),
+ toplevel_decl_(NULL), init_refs_(NULL), embeds_(NULL), backend_(NULL),
+ is_global_(is_global), is_parameter_(is_parameter), is_closure_(false),
+ is_receiver_(is_receiver), is_varargs_parameter_(false),
+ is_global_sink_(false), is_used_(false), is_address_taken_(false),
+ is_non_escaping_address_taken_(false), seen_(false),
+ init_is_lowered_(false), init_is_flattened_(false),
type_from_init_tuple_(false), type_from_range_index_(false),
type_from_range_value_(false), type_from_chan_element_(false),
is_type_switch_var_(false), determined_type_(false),
- in_unique_section_(false), is_referenced_by_inline_(false),
- toplevel_decl_(NULL)
+ in_unique_section_(false), is_referenced_by_inline_(false)
{
go_assert(type != NULL || init != NULL);
go_assert(!is_parameter || init == NULL);
@@ -7921,6 +7931,16 @@ Variable::get_init_block(Gogo* gogo, Named_object* function,
return block_stmt;
}
+// Add an initializer reference.
+
+void
+Variable::add_init_ref(Named_object* var)
+{
+ if (this->init_refs_ == NULL)
+ this->init_refs_ = new std::vector<Named_object*>;
+ this->init_refs_->push_back(var);
+}
+
// Export the variable
void
diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h
index 2ee0fda..433fdae 100644
--- a/gcc/go/gofrontend/gogo.h
+++ b/gcc/go/gofrontend/gogo.h
@@ -842,6 +842,11 @@ class Gogo
void
check_return_statements();
+ // Gather references from global variables initializers to other
+ // variables.
+ void
+ record_global_init_refs();
+
// Remove deadcode.
void
remove_deadcode();
@@ -2333,6 +2338,15 @@ class Variable
this->toplevel_decl_ = s;
}
+ // Note that the initializer of this global variable refers to VAR.
+ void
+ add_init_ref(Named_object* var);
+
+ // The variables that this variable's initializers refer to.
+ const std::vector<Named_object*>*
+ init_refs() const
+ { return this->init_refs_; }
+
// Traverse the initializer expression.
int
traverse_expression(Traverse*, unsigned int traverse_mask);
@@ -2389,6 +2403,12 @@ class Variable
Block* preinit_;
// Location of variable definition.
Location location_;
+ // The top-level declaration for this variable. Only used for local
+ // variables. Must be a Temporary_statement if not NULL.
+ Statement* toplevel_decl_;
+ // Variables that the initializer of a global variable refers to.
+ // Used for initializer ordering.
+ std::vector<Named_object*>* init_refs_;
// Any associated go:embed comments.
std::vector<std::string>* embeds_;
// Backend representation.
@@ -2439,9 +2459,6 @@ class Variable
// True if this variable is referenced from an inlined body that
// will be put into the export data.
bool is_referenced_by_inline_ : 1;
- // The top-level declaration for this variable. Only used for local
- // variables. Must be a Temporary_statement if not NULL.
- Statement* toplevel_decl_;
};
// A variable which is really the name for a function return value, or
diff --git a/gcc/go/gofrontend/names.cc b/gcc/go/gofrontend/names.cc
index f85d84c..dac7f20 100644
--- a/gcc/go/gofrontend/names.cc
+++ b/gcc/go/gofrontend/names.cc
@@ -831,15 +831,28 @@ Struct_type::do_mangled_name(Gogo* gogo, std::string* ret,
ret->push_back(' ');
}
- // For an anonymous field with an alias type, the field name
- // is the alias name.
- if (p->is_anonymous()
- && p->type()->named_type() != NULL
- && p->type()->named_type()->is_alias())
- p->type()->named_type()->append_symbol_type_name(gogo, true, ret,
- is_non_identifier);
+ const Type* ft = p->type();
+ const Named_type* nt = ft->named_type();
+
+ if (p->is_anonymous() && nt != NULL && nt->is_builtin())
+ {
+ // For an embedded field with a builtin type, we must
+ // include a package path. Otherwise embedding builtin
+ // types in different packages will produce identical
+ // types, which shouldn't happen because the builtin
+ // types are not exported.
+ ret->append(gogo->pkgpath());
+ ret->push_back('.');
+ nt->append_symbol_type_name(gogo, true, ret, is_non_identifier);
+ }
+ else if (p->is_anonymous() && nt != NULL && nt->is_alias())
+ {
+ // For an anonymous field with an alias type, the field name
+ // is the alias name.
+ nt->append_symbol_type_name(gogo, true, ret, is_non_identifier);
+ }
else
- this->append_mangled_name(p->type(), gogo, ret, is_non_identifier);
+ this->append_mangled_name(ft, gogo, ret, is_non_identifier);
if (p->has_tag())
{
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc
index cc197e5..c93d82b 100644
--- a/gcc/go/gofrontend/parse.cc
+++ b/gcc/go/gofrontend/parse.cc
@@ -191,7 +191,11 @@ Parse::qualified_ident(std::string* pname, Named_object** ppackage)
Named_object* package = this->gogo_->lookup(name, NULL);
if (package == NULL || !package->is_package())
{
- go_error_at(this->location(), "expected package");
+ if (package == NULL)
+ go_error_at(this->location(), "reference to undefined name %qs",
+ Gogo::message_name(name).c_str());
+ else
+ go_error_at(this->location(), "expected package");
// We expect . IDENTIFIER; skip both.
if (this->advance_token()->is_identifier())
this->advance_token();
@@ -1468,6 +1472,7 @@ Parse::const_spec(int iota, Type** last_type, Expression_list** last_expr_list)
{
Expression* copy = (*p)->copy();
copy->set_location(loc);
+ this->update_references(&copy);
expr_list->push_back(copy);
}
}
@@ -1513,6 +1518,94 @@ Parse::const_spec(int iota, Type** last_type, Expression_list** last_expr_list)
return;
}
+// Update any references to names to refer to the current names,
+// for weird cases like
+//
+// const X = 1
+// func F() {
+// const (
+// X = X + X
+// Y
+// )
+// }
+//
+// where the X + X for the first X is the outer X, but the X + X
+// copied for Y is the inner X.
+
+class Update_references : public Traverse
+{
+ public:
+ Update_references(Gogo* gogo)
+ : Traverse(traverse_expressions),
+ gogo_(gogo)
+ { }
+
+ int
+ expression(Expression**);
+
+ private:
+ Gogo* gogo_;
+};
+
+int
+Update_references::expression(Expression** pexpr)
+{
+ Named_object* old_no;
+ switch ((*pexpr)->classification())
+ {
+ case Expression::EXPRESSION_CONST_REFERENCE:
+ old_no = (*pexpr)->const_expression()->named_object();
+ break;
+ case Expression::EXPRESSION_VAR_REFERENCE:
+ old_no = (*pexpr)->var_expression()->named_object();
+ break;
+ case Expression::EXPRESSION_ENCLOSED_VAR_REFERENCE:
+ old_no = (*pexpr)->enclosed_var_expression()->variable();
+ break;
+ case Expression::EXPRESSION_FUNC_REFERENCE:
+ old_no = (*pexpr)->func_expression()->named_object();
+ break;
+ case Expression::EXPRESSION_UNKNOWN_REFERENCE:
+ old_no = (*pexpr)->unknown_expression()->named_object();
+ break;
+ default:
+ return TRAVERSE_CONTINUE;
+ }
+
+ if (old_no->package() != NULL)
+ {
+ // This is a qualified reference, so it can't have changed in
+ // scope. FIXME: This probably doesn't handle dot imports
+ // correctly.
+ return TRAVERSE_CONTINUE;
+ }
+
+ Named_object* in_function;
+ Named_object* new_no = this->gogo_->lookup(old_no->name(), &in_function);
+ if (new_no == old_no)
+ return TRAVERSE_CONTINUE;
+
+ // The new name must be a constant, since that is all we have
+ // introduced into scope.
+ if (!new_no->is_const())
+ {
+ go_assert(saw_errors());
+ return TRAVERSE_CONTINUE;
+ }
+
+ *pexpr = Expression::make_const_reference(new_no, (*pexpr)->location());
+
+ return TRAVERSE_CONTINUE;
+}
+
+void
+Parse::update_references(Expression** pexpr)
+{
+ Update_references ur(this->gogo_);
+ ur.expression(pexpr);
+ (*pexpr)->traverse_subexpressions(&ur);
+}
+
// TypeDecl = "type" Decl<TypeSpec> .
void
@@ -1888,7 +1981,11 @@ Parse::init_vars_from_map(const Typed_identifier_list* vars, Type* type,
else if (!val_no->is_sink())
{
if (val_no->is_variable())
- val_no->var_value()->add_preinit_statement(this->gogo_, s);
+ {
+ val_no->var_value()->add_preinit_statement(this->gogo_, s);
+ if (no->is_variable())
+ this->gogo_->record_var_depends_on(no->var_value(), val_no);
+ }
}
else if (!no->is_sink())
{
@@ -1955,7 +2052,11 @@ Parse::init_vars_from_receive(const Typed_identifier_list* vars, Type* type,
else if (!val_no->is_sink())
{
if (val_no->is_variable())
- val_no->var_value()->add_preinit_statement(this->gogo_, s);
+ {
+ val_no->var_value()->add_preinit_statement(this->gogo_, s);
+ if (no->is_variable())
+ this->gogo_->record_var_depends_on(no->var_value(), val_no);
+ }
}
else if (!no->is_sink())
{
@@ -2021,7 +2122,11 @@ Parse::init_vars_from_type_guard(const Typed_identifier_list* vars,
else if (!val_no->is_sink())
{
if (val_no->is_variable())
- val_no->var_value()->add_preinit_statement(this->gogo_, s);
+ {
+ val_no->var_value()->add_preinit_statement(this->gogo_, s);
+ if (no->is_variable())
+ this->gogo_->record_var_depends_on(no->var_value(), val_no);
+ }
}
else if (!no->is_sink())
{
diff --git a/gcc/go/gofrontend/parse.h b/gcc/go/gofrontend/parse.h
index 6e300ef..cda0bee 100644
--- a/gcc/go/gofrontend/parse.h
+++ b/gcc/go/gofrontend/parse.h
@@ -185,6 +185,7 @@ class Parse
void list(void (Parse::*)(), bool);
void const_decl();
void const_spec(int, Type**, Expression_list**);
+ void update_references(Expression**);
void type_decl();
void type_spec();
void var_decl();
diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc
index b3db843..b442830 100644
--- a/gcc/go/gofrontend/statements.cc
+++ b/gcc/go/gofrontend/statements.cc
@@ -1594,9 +1594,9 @@ Tuple_map_assignment_statement::do_lower(Gogo* gogo, Named_object*,
// var present_temp bool
Temporary_statement* present_temp =
- Statement::make_temporary((this->present_->type()->is_sink_type())
- ? Type::make_boolean_type()
- : this->present_->type(),
+ Statement::make_temporary((this->present_->type()->is_boolean_type()
+ ? this->present_->type()
+ : Type::lookup_bool_type()),
NULL, loc);
b->add_statement(present_temp);
@@ -1789,9 +1789,9 @@ Tuple_receive_assignment_statement::do_lower(Gogo*, Named_object*,
// var closed_temp bool
Temporary_statement* closed_temp =
- Statement::make_temporary((this->closed_->type()->is_sink_type())
- ? Type::make_boolean_type()
- : this->closed_->type(),
+ Statement::make_temporary((this->closed_->type()->is_boolean_type()
+ ? this->closed_->type()
+ : Type::lookup_bool_type()),
NULL, loc);
b->add_statement(closed_temp);
@@ -1965,6 +1965,8 @@ Tuple_type_guard_assignment_statement::do_lower(Gogo*, Named_object*,
b->add_statement(s);
res = Expression::make_call_result(call, 1);
+ if (!this->ok_->type()->is_boolean_type())
+ res = Expression::make_cast(Type::lookup_bool_type(), res, loc);
s = Statement::make_assignment(this->ok_, res, loc);
b->add_statement(s);
}
@@ -2001,7 +2003,9 @@ Tuple_type_guard_assignment_statement::lower_to_object_type(
Temporary_statement* ok_temp = NULL;
if (!this->ok_->is_sink_expression())
{
- ok_temp = Statement::make_temporary(this->ok_->type(),
+ ok_temp = Statement::make_temporary((this->ok_->type()->is_boolean_type()
+ ? this->ok_->type()
+ : Type::lookup_bool_type()),
NULL, loc);
b->add_statement(ok_temp);
}
diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc
index eb3afd9..9f34801 100644
--- a/gcc/go/gofrontend/types.cc
+++ b/gcc/go/gofrontend/types.cc
@@ -1764,6 +1764,9 @@ Type::needs_specific_type_functions(Gogo* gogo)
Named_object*
Type::hash_function(Gogo* gogo, Function_type* hash_fntype)
{
+ if (this->named_type() != NULL)
+ go_assert(!this->named_type()->is_alias());
+
if (!this->is_comparable())
return NULL;
@@ -2067,6 +2070,9 @@ Type::write_identity_hash(Gogo* gogo, int64_t size)
Named_object*
Type::equal_function(Gogo* gogo, Named_type* name, Function_type* equal_fntype)
{
+ if (this->named_type() != NULL)
+ go_assert(!this->named_type()->is_alias());
+
// If the unaliased type is not a named type, then the type does not
// have a name after all.
if (name != NULL)
@@ -4648,8 +4654,11 @@ class Sink_type : public Type
{ return false; }
Btype*
- do_get_backend(Gogo*)
- { go_unreachable(); }
+ do_get_backend(Gogo* gogo)
+ {
+ go_assert(saw_errors());
+ return gogo->backend()->error_type();
+ }
Expression*
do_type_descriptor(Gogo*, Named_type*)
@@ -6700,7 +6709,8 @@ Struct_type::write_hash_function(Gogo* gogo, Function_type* hash_fntype)
subkey = Expression::make_cast(key_arg_type, subkey, bloc);
// Get the hash function to use for the type of this field.
- Named_object* hash_fn = pf->type()->hash_function(gogo, hash_fntype);
+ Named_object* hash_fn =
+ pf->type()->unalias()->hash_function(gogo, hash_fntype);
// Call the hash function for the field, passing retval as the seed.
ref = Expression::make_temporary_reference(retval, bloc);
@@ -6957,7 +6967,7 @@ Struct_type::do_import(Import* imp)
bool
Struct_type::can_write_to_c_header(
- std::vector<const Named_object*>* requires,
+ std::vector<const Named_object*>* needs,
std::vector<const Named_object*>* declare) const
{
const Struct_field_list* fields = this->fields_;
@@ -6968,7 +6978,7 @@ Struct_type::can_write_to_c_header(
p != fields->end();
++p)
{
- if (!this->can_write_type_to_c_header(p->type(), requires, declare))
+ if (!this->can_write_type_to_c_header(p->type(), needs, declare))
return false;
if (Gogo::message_name(p->field_name()) == "_")
sinks++;
@@ -6983,7 +6993,7 @@ Struct_type::can_write_to_c_header(
bool
Struct_type::can_write_type_to_c_header(
const Type* t,
- std::vector<const Named_object*>* requires,
+ std::vector<const Named_object*>* needs,
std::vector<const Named_object*>* declare) const
{
t = t->forwarded();
@@ -7017,13 +7027,13 @@ Struct_type::can_write_type_to_c_header(
return true;
case TYPE_STRUCT:
- return t->struct_type()->can_write_to_c_header(requires, declare);
+ return t->struct_type()->can_write_to_c_header(needs, declare);
case TYPE_ARRAY:
if (t->is_slice_type())
return true;
return this->can_write_type_to_c_header(t->array_type()->element_type(),
- requires, declare);
+ needs, declare);
case TYPE_NAMED:
{
@@ -7039,10 +7049,10 @@ Struct_type::can_write_type_to_c_header(
// We will accept empty struct fields, but not print them.
if (t->struct_type()->total_field_count() == 0)
return true;
- requires->push_back(no);
- return t->struct_type()->can_write_to_c_header(requires, declare);
+ needs->push_back(no);
+ return t->struct_type()->can_write_to_c_header(needs, declare);
}
- return this->can_write_type_to_c_header(t->base(), requires, declare);
+ return this->can_write_type_to_c_header(t->base(), needs, declare);
}
case TYPE_CALL_MULTIPLE_RESULT:
@@ -7140,9 +7150,9 @@ Struct_type::write_field_to_c_header(std::ostream& os, const std::string& name,
case TYPE_POINTER:
{
- std::vector<const Named_object*> requires;
+ std::vector<const Named_object*> needs;
std::vector<const Named_object*> declare;
- if (!this->can_write_type_to_c_header(t->points_to(), &requires,
+ if (!this->can_write_type_to_c_header(t->points_to(), &needs,
&declare))
os << "void*";
else
@@ -7419,7 +7429,10 @@ bool
Array_type::do_verify()
{
if (this->element_type()->is_error_type())
- return false;
+ {
+ this->set_is_error();
+ return false;
+ }
if (!this->verify_length())
{
this->length_ = Expression::make_error(this->length_->location());
@@ -7553,8 +7566,8 @@ Array_type::write_hash_function(Gogo* gogo, Function_type* hash_fntype)
gogo->start_block(bloc);
// Get the hash function for the element type.
- Named_object* hash_fn = this->element_type_->hash_function(gogo,
- hash_fntype);
+ Named_object* hash_fn =
+ this->element_type_->unalias()->hash_function(gogo, hash_fntype);
// Get a pointer to this element in the loop.
Expression* subkey = Expression::make_temporary_reference(key, bloc);
@@ -8441,8 +8454,8 @@ Map_type::do_type_descriptor(Gogo* gogo, Named_type* name)
++p;
go_assert(p->is_field_name("hasher"));
Function_type* hasher_fntype = p->type()->function_type();
- Named_object* hasher_fn = this->key_type_->hash_function(gogo,
- hasher_fntype);
+ Named_object* hasher_fn =
+ this->key_type_->unalias()->hash_function(gogo, hasher_fntype);
if (hasher_fn == NULL)
vals->push_back(Expression::make_cast(hasher_fntype,
Expression::make_nil(bloc),
diff --git a/gcc/graphite.cc b/gcc/graphite.cc
index ab8683b..fd4f7a1 100644
--- a/gcc/graphite.cc
+++ b/gcc/graphite.cc
@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-loop-manip.h"
#include "tree-ssa.h"
#include "tree-into-ssa.h"
+#include "tree-ssa-propagate.h"
#include "graphite.h"
/* Print global statistics to FILE. */
@@ -337,7 +338,9 @@ canonicalize_loop_closed_ssa (loop_p loop, edge e)
/* Iterate over the next phis and remove duplicates. */
gsi_next (&gsi);
while (!gsi_end_p (gsi))
- if (gimple_phi_arg_def (phi, 0) == gimple_phi_arg_def (gsi.phi (), 0))
+ if (gimple_phi_arg_def (phi, 0) == gimple_phi_arg_def (gsi.phi (), 0)
+ && may_propagate_copy (gimple_phi_result (gsi.phi ()),
+ gimple_phi_result (phi)))
{
replace_uses_by (gimple_phi_result (gsi.phi ()),
gimple_phi_result (phi));
@@ -574,7 +577,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_graphite_transforms (); }
+ bool gate (function *) final override { return gate_graphite_transforms (); }
}; // class pass_graphite
@@ -609,8 +612,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_graphite_transforms (); }
- virtual unsigned int execute (function *fun) { return graphite_transforms (fun); }
+ bool gate (function *) final override { return gate_graphite_transforms (); }
+ unsigned int execute (function *fun) final override
+ {
+ return graphite_transforms (fun);
+ }
}; // class pass_graphite_transforms
diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index b983e87..2e8ab39 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -999,7 +999,8 @@ noce_emit_move_insn (rtx x, rtx y)
}
gcc_assert (start < (MEM_P (op) ? BITS_PER_UNIT : BITS_PER_WORD));
- store_bit_field (op, size, start, 0, 0, GET_MODE (x), y, false);
+ store_bit_field (op, size, start, 0, 0, GET_MODE (x), y, false,
+ false);
return;
}
@@ -1056,7 +1057,7 @@ noce_emit_move_insn (rtx x, rtx y)
outmode = GET_MODE (outer);
bitpos = SUBREG_BYTE (outer) * BITS_PER_UNIT;
store_bit_field (inner, GET_MODE_BITSIZE (outmode), bitpos,
- 0, 0, outmode, y, false);
+ 0, 0, outmode, y, false, false);
}
/* Return the CC reg if it is used in COND. */
@@ -2833,18 +2834,19 @@ noce_try_sign_mask (struct noce_if_info *if_info)
return FALSE;
/* This is only profitable if T is unconditionally executed/evaluated in the
- original insn sequence or T is cheap. The former happens if B is the
- non-zero (T) value and if INSN_B was taken from TEST_BB, or there was no
- INSN_B which can happen for e.g. conditional stores to memory. For the
- cost computation use the block TEST_BB where the evaluation will end up
- after the transformation. */
+ original insn sequence or T is cheap and can't trap or fault. The former
+ happens if B is the non-zero (T) value and if INSN_B was taken from
+ TEST_BB, or there was no INSN_B which can happen for e.g. conditional
+ stores to memory. For the cost computation use the block TEST_BB where
+ the evaluation will end up after the transformation. */
t_unconditional
= (t == if_info->b
&& (if_info->insn_b == NULL_RTX
|| BLOCK_FOR_INSN (if_info->insn_b) == if_info->test_bb));
if (!(t_unconditional
- || (set_src_cost (t, mode, if_info->speed_p)
- < COSTS_N_INSNS (2))))
+ || ((set_src_cost (t, mode, if_info->speed_p)
+ < COSTS_N_INSNS (2))
+ && !may_trap_or_fault_p (t))))
return FALSE;
if (!noce_can_force_operand (t))
@@ -5933,12 +5935,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize > 0) && dbg_cnt (if_conversion);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_if_conversion ();
}
@@ -5980,13 +5982,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_if_conversion
&& dbg_cnt (if_after_combine);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
if_convert (true);
return 0;
@@ -6026,13 +6028,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return optimize > 0 && flag_if_conversion2
&& dbg_cnt (if_after_reload);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
if_convert (true);
return 0;
diff --git a/gcc/init-regs.cc b/gcc/init-regs.cc
index 220ef70..652befe 100644
--- a/gcc/init-regs.cc
+++ b/gcc/init-regs.cc
@@ -153,8 +153,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize > 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return optimize > 0; }
+ unsigned int execute (function *) final override
{
initialize_uninitialized_regs ();
return 0;
diff --git a/gcc/input.cc b/gcc/input.cc
index 2acbfde..060ca16 100644
--- a/gcc/input.cc
+++ b/gcc/input.cc
@@ -646,6 +646,37 @@ file_cache_slot::maybe_read_data ()
return read_data ();
}
+/* Helper function for file_cache_slot::get_next_line (), to find the end of
+ the next line. Returns with the memchr convention, i.e. nullptr if a line
+ terminator was not found. We need to determine line endings in the same
+ manner that libcpp does: any of \n, \r\n, or \r is a line ending. */
+
+static char *
+find_end_of_line (char *s, size_t len)
+{
+ for (const auto end = s + len; s != end; ++s)
+ {
+ if (*s == '\n')
+ return s;
+ if (*s == '\r')
+ {
+ const auto next = s + 1;
+ if (next == end)
+ {
+ /* Don't find the line ending if \r is the very last character
+ in the buffer; we do not know if it's the end of the file or
+ just the end of what has been read so far, and we wouldn't
+ want to break in the middle of what's actually a \r\n
+ sequence. Instead, we will handle the case of a file ending
+ in a \r later. */
+ break;
+ }
+ return (*next == '\n' ? next : s);
+ }
+ }
+ return nullptr;
+}
+
/* Read a new line from file FP, using C as a cache for the data
coming from the file. Upon successful completion, *LINE is set to
the beginning of the line found. *LINE points directly in the
@@ -671,17 +702,16 @@ file_cache_slot::get_next_line (char **line, ssize_t *line_len)
char *next_line_start = NULL;
size_t len = 0;
- char *line_end = (char *) memchr (line_start, '\n', remaining_size);
+ char *line_end = find_end_of_line (line_start, remaining_size);
if (line_end == NULL)
{
- /* We haven't found the end-of-line delimiter in the cache.
- Fill the cache with more data from the file and look for the
- '\n'. */
+ /* We haven't found an end-of-line delimiter in the cache.
+ Fill the cache with more data from the file and look again. */
while (maybe_read_data ())
{
line_start = m_data + m_line_start_idx;
remaining_size = m_nb_read - m_line_start_idx;
- line_end = (char *) memchr (line_start, '\n', remaining_size);
+ line_end = find_end_of_line (line_start, remaining_size);
if (line_end != NULL)
{
next_line_start = line_end + 1;
@@ -690,14 +720,22 @@ file_cache_slot::get_next_line (char **line, ssize_t *line_len)
}
if (line_end == NULL)
{
- /* We've loadded all the file into the cache and still no
- '\n'. Let's say the line ends up at one byte passed the
+ /* We've loaded all the file into the cache and still no
+ terminator. Let's say the line ends up at one byte past the
end of the file. This is to stay consistent with the case
- of when the line ends up with a '\n' and line_end points to
- that terminal '\n'. That consistency is useful below in
- the len calculation. */
- line_end = m_data + m_nb_read ;
- m_missing_trailing_newline = true;
+ of when the line ends up with a terminator and line_end points to
+ that. That consistency is useful below in the len calculation.
+
+ If the file ends in a \r, we didn't identify it as a line
+ terminator above, so do that now instead. */
+ line_end = m_data + m_nb_read;
+ if (m_nb_read && line_end[-1] == '\r')
+ {
+ --line_end;
+ m_missing_trailing_newline = false;
+ }
+ else
+ m_missing_trailing_newline = true;
}
else
m_missing_trailing_newline = false;
@@ -711,9 +749,8 @@ file_cache_slot::get_next_line (char **line, ssize_t *line_len)
if (m_fp && ferror (m_fp))
return false;
- /* At this point, we've found the end of the of line. It either
- points to the '\n' or to one byte after the last byte of the
- file. */
+ /* At this point, we've found the end of the of line. It either points to
+ the line terminator or to one byte after the last byte of the file. */
gcc_assert (line_end != NULL);
len = line_end - line_start;
diff --git a/gcc/internal-fn.cc b/gcc/internal-fn.cc
index 91588f8..d666ccc 100644
--- a/gcc/internal-fn.cc
+++ b/gcc/internal-fn.cc
@@ -815,9 +815,9 @@ expand_arith_set_overflow (tree lhs, rtx target)
{
if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (lhs))) == 1
&& !TYPE_UNSIGNED (TREE_TYPE (TREE_TYPE (lhs))))
- write_complex_part (target, constm1_rtx, true);
+ write_complex_part (target, constm1_rtx, true, false);
else
- write_complex_part (target, const1_rtx, true);
+ write_complex_part (target, const1_rtx, true, false);
}
/* Helper for expand_*_overflow. Store RES into the __real__ part
@@ -872,7 +872,7 @@ expand_arith_overflow_result_store (tree lhs, rtx target,
expand_arith_set_overflow (lhs, target);
emit_label (done_label);
}
- write_complex_part (target, lres, false);
+ write_complex_part (target, lres, false, false);
}
/* Helper for expand_*_overflow. Store RES into TARGET. */
@@ -917,7 +917,7 @@ expand_addsub_overflow (location_t loc, tree_code code, tree lhs,
{
target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
if (!is_ubsan)
- write_complex_part (target, const0_rtx, true);
+ write_complex_part (target, const0_rtx, true, false);
}
/* We assume both operands and result have the same precision
@@ -1362,7 +1362,7 @@ expand_neg_overflow (location_t loc, tree lhs, tree arg1, bool is_ubsan,
{
target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
if (!is_ubsan)
- write_complex_part (target, const0_rtx, true);
+ write_complex_part (target, const0_rtx, true, false);
}
enum insn_code icode = optab_handler (negv3_optab, mode);
@@ -1487,7 +1487,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
{
target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
if (!is_ubsan)
- write_complex_part (target, const0_rtx, true);
+ write_complex_part (target, const0_rtx, true, false);
}
if (is_ubsan)
@@ -2304,7 +2304,7 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
do_compare_rtx_and_jump (op1, res, NE, true, mode, NULL_RTX, NULL,
all_done_label, profile_probability::very_unlikely ());
emit_label (set_noovf);
- write_complex_part (target, const0_rtx, true);
+ write_complex_part (target, const0_rtx, true, false);
emit_label (all_done_label);
}
@@ -2573,7 +2573,7 @@ expand_arith_overflow (enum tree_code code, gimple *stmt)
{
/* The infinity precision result will always fit into result. */
rtx target = expand_expr (lhs, NULL_RTX, VOIDmode, EXPAND_WRITE);
- write_complex_part (target, const0_rtx, true);
+ write_complex_part (target, const0_rtx, true, false);
scalar_int_mode mode = SCALAR_INT_TYPE_MODE (type);
struct separate_ops ops;
ops.code = code;
diff --git a/gcc/ipa-comdats.cc b/gcc/ipa-comdats.cc
index 566faf3..da79206 100644
--- a/gcc/ipa-comdats.cc
+++ b/gcc/ipa-comdats.cc
@@ -420,8 +420,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return ipa_comdats (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override { return ipa_comdats (); }
}; // class pass_ipa_comdats
diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index a94041c..543a933 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -1020,7 +1020,7 @@ ipcp_vr_lattice::meet_with_1 (const value_range *other_vr)
value_range save (m_vr);
m_vr.union_ (*other_vr);
- return !m_vr.equal_p (save);
+ return m_vr != save;
}
/* Return true if value range information in the lattice is yet unknown. */
@@ -4652,8 +4652,7 @@ update_counts_for_self_gen_clones (cgraph_node *orig_node,
{
profile_count orig_count = n->count;
profile_count new_count
- = (redist_sum.apply_scale (1, self_gen_clones.length ())
- + other_edges_count[i]);
+ = (redist_sum / self_gen_clones.length () + other_edges_count[i]);
new_count = lenient_count_portion_handling (new_count, orig_node);
n->count = new_count;
profile_count::adjust_for_ipa_scaling (&new_count, &orig_count);
@@ -4685,7 +4684,7 @@ update_counts_for_self_gen_clones (cgraph_node *orig_node,
for (cgraph_edge *e = cs; e; e = get_next_cgraph_edge_clone (e))
if (e->callee->ultimate_alias_target () == orig_node
&& processed_edges.contains (e))
- e->count = e->count.apply_scale (1, den);
+ e->count /= den;
}
}
@@ -4713,8 +4712,7 @@ update_counts_for_self_gen_clones (cgraph_node *orig_node,
&& desc.unproc_orig_rec_edges > 0)
{
desc.count = n->count - desc.count;
- desc.count
- = desc.count.apply_scale (1, desc.unproc_orig_rec_edges);
+ desc.count = desc.count /= desc.unproc_orig_rec_edges;
adjust_clone_incoming_counts (n, &desc);
}
else if (dump_file)
@@ -6084,7 +6082,7 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
if (node->count.ipa ().nonzero_p ())
{
unsigned dem = self_gen_clones->length () + 1;
- rec_count_sum = node->count.ipa ().apply_scale (1, dem);
+ rec_count_sum = node->count.ipa () / dem;
}
else
rec_count_sum = profile_count::zero ();
@@ -6659,14 +6657,14 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* FIXME: We should remove the optimize check after we ensure we never run
IPA passes when not optimizing. */
return (flag_ipa_cp && optimize) || in_lto_p;
}
- virtual unsigned int execute (function *) { return ipcp_driver (); }
+ unsigned int execute (function *) final override { return ipcp_driver (); }
}; // class pass_ipa_cp
diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc
index 9f1442d..412ca14 100644
--- a/gcc/ipa-devirt.cc
+++ b/gcc/ipa-devirt.cc
@@ -3969,7 +3969,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* In LTO, always run the IPA passes and decide on function basis if the
pass is enabled. */
@@ -3982,7 +3982,7 @@ public:
&& optimize);
}
- virtual unsigned int execute (function *) { return ipa_devirt (); }
+ unsigned int execute (function *) final override { return ipa_devirt (); }
}; // class pass_ipa_devirt
@@ -4361,12 +4361,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (in_lto_p || flag_lto);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return 0;
}
diff --git a/gcc/ipa-fnsummary.cc b/gcc/ipa-fnsummary.cc
index b12e7a1..e2a8668 100644
--- a/gcc/ipa-fnsummary.cc
+++ b/gcc/ipa-fnsummary.cc
@@ -250,8 +250,8 @@ static struct cgraph_edge *
redirect_to_unreachable (struct cgraph_edge *e)
{
struct cgraph_node *callee = !e->inline_failed ? e->callee : NULL;
- struct cgraph_node *target = cgraph_node::get_create
- (builtin_decl_implicit (BUILT_IN_UNREACHABLE));
+ struct cgraph_node *target
+ = cgraph_node::get_create (builtin_decl_unreachable ());
if (e->speculative)
e = cgraph_edge::resolve_speculation (e, target->decl);
@@ -4846,8 +4846,11 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_local_fn_summary (m_ctxt); }
- virtual unsigned int execute (function *)
+ opt_pass * clone () final override
+ {
+ return new pass_local_fn_summary (m_ctxt);
+ }
+ unsigned int execute (function *) final override
{
return compute_fn_summary_for_current ();
}
@@ -4889,14 +4892,17 @@ public:
{}
/* opt_pass methods: */
- opt_pass *clone () { return new pass_ipa_free_fn_summary (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass *clone () final override
+ {
+ return new pass_ipa_free_fn_summary (m_ctxt);
+ }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
small_p = param;
}
- virtual bool gate (function *) { return true; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return true; }
+ unsigned int execute (function *) final override
{
ipa_free_fn_summary ();
/* Free ipa-prop structures if they are no longer needed. */
@@ -4950,7 +4956,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return 0; }
+ unsigned int execute (function *) final override { return 0; }
}; // class pass_ipa_fn_summary
diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc
index f99f7be..ccdbf84 100644
--- a/gcc/ipa-free-lang-data.cc
+++ b/gcc/ipa-free-lang-data.cc
@@ -1173,7 +1173,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return free_lang_data (); }
+ unsigned int execute (function *) final override { return free_lang_data (); }
}; // class pass_ipa_free_lang_data
diff --git a/gcc/ipa-icf-gimple.h b/gcc/ipa-icf-gimple.h
index 1545e4a..8f498b3 100644
--- a/gcc/ipa-icf-gimple.h
+++ b/gcc/ipa-icf-gimple.h
@@ -282,11 +282,13 @@ private:
public:
/* Return true if two operands are equal. The flags fields can be used
to specify OEP flags described above. */
- virtual bool operand_equal_p (const_tree, const_tree, unsigned int flags);
+ bool operand_equal_p (const_tree, const_tree, unsigned int flags)
+ final override;
/* Generate a hash value for an expression. This can be used iteratively
by passing a previous result as the HSTATE argument. */
- virtual void hash_operand (const_tree, inchash::hash &, unsigned flags);
+ void hash_operand (const_tree, inchash::hash &, unsigned flags)
+ final override;
void hash_operand (const_tree, inchash::hash &, unsigned flags,
operand_access_type access);
};
diff --git a/gcc/ipa-icf.cc b/gcc/ipa-icf.cc
index 765ae74..65baa84 100644
--- a/gcc/ipa-icf.cc
+++ b/gcc/ipa-icf.cc
@@ -2411,10 +2411,11 @@ sem_item_optimizer::filter_removed_items (void)
{
/* Filter out non-readonly variables. */
tree decl = item->decl;
- if (TREE_READONLY (decl))
- filtered.safe_push (item);
- else
+ varpool_node *vnode = static_cast <sem_variable *>(item)->get_node ();
+ if (!TREE_READONLY (decl) || vnode->body_removed)
remove_item (item);
+ else
+ filtered.safe_push (item);
}
}
}
@@ -3637,12 +3638,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return in_lto_p || flag_ipa_icf_variables || flag_ipa_icf_functions;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return ipa_icf_driver();
}
diff --git a/gcc/ipa-icf.h b/gcc/ipa-icf.h
index dbae2cc..bb55092 100644
--- a/gcc/ipa-icf.h
+++ b/gcc/ipa-icf.h
@@ -317,16 +317,18 @@ public:
~sem_function ();
- virtual void init (ipa_icf_gimple::func_checker *);
- virtual bool equals_wpa (sem_item *item,
- hash_map <symtab_node *, sem_item *> &ignored_nodes);
- virtual hashval_t get_hash (void);
- virtual bool equals (sem_item *item,
- hash_map <symtab_node *, sem_item *> &ignored_nodes);
- virtual bool merge (sem_item *alias_item);
+ void init (ipa_icf_gimple::func_checker *) final override;
+ bool equals_wpa (sem_item *item,
+ hash_map <symtab_node *, sem_item *> &ignored_nodes)
+ final override;
+ hashval_t get_hash (void) final override;
+ bool equals (sem_item *item,
+ hash_map <symtab_node *, sem_item *> &ignored_nodes)
+ final override;
+ bool merge (sem_item *alias_item) final override;
/* Dump symbol to FILE. */
- virtual void dump_to_file (FILE *file)
+ void dump_to_file (FILE *file) final override
{
gcc_assert (file);
dump_function_to_file (decl, file, TDF_DETAILS);
@@ -426,17 +428,19 @@ public:
sem_variable (varpool_node *_node, bitmap_obstack *stack);
/* Semantic variable initialization function. */
- virtual void init (ipa_icf_gimple::func_checker *);
+ void init (ipa_icf_gimple::func_checker *) final override;
- virtual hashval_t get_hash (void);
- virtual bool merge (sem_item *alias_item);
- virtual void dump_to_file (FILE *file);
- virtual bool equals (sem_item *item,
- hash_map <symtab_node *, sem_item *> &ignored_nodes);
+ hashval_t get_hash (void) final override;
+ bool merge (sem_item *alias_item) final override;
+ void dump_to_file (FILE *file) final override;
+ bool equals (sem_item *item,
+ hash_map <symtab_node *, sem_item *> &ignored_nodes)
+ final override;
/* Fast equality variable based on knowledge known in WPA. */
- virtual bool equals_wpa (sem_item *item,
- hash_map <symtab_node *, sem_item *> &ignored_nodes);
+ bool equals_wpa (sem_item *item,
+ hash_map <symtab_node *, sem_item *> &ignored_nodes)
+ final override;
/* Returns varpool_node. */
inline varpool_node *get_node (void)
diff --git a/gcc/ipa-inline-analysis.cc b/gcc/ipa-inline-analysis.cc
index 11d8d09..1ca685d 100644
--- a/gcc/ipa-inline-analysis.cc
+++ b/gcc/ipa-inline-analysis.cc
@@ -254,7 +254,7 @@ do_estimate_edge_time (struct cgraph_edge *edge, sreal *ret_nonspec_time)
probability that caller will call the callee is low however, since it
may hurt optimization of the caller's hot path. */
if (edge->count.ipa ().initialized_p () && edge->maybe_hot_p ()
- && (edge->count.ipa ().apply_scale (2, 1)
+ && (edge->count.ipa () * 2
> (edge->caller->inlined_to
? edge->caller->inlined_to->count.ipa ()
: edge->caller->count.ipa ())))
diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc
index 22a009b..1496919 100644
--- a/gcc/ipa-inline.cc
+++ b/gcc/ipa-inline.cc
@@ -3100,7 +3100,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_early_inline
@@ -3150,7 +3150,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return ipa_inline (); }
+ unsigned int execute (function *) final override { return ipa_inline (); }
}; // class pass_ipa_inline
diff --git a/gcc/ipa-modref.cc b/gcc/ipa-modref.cc
index c053f8b..0d9abac 100644
--- a/gcc/ipa-modref.cc
+++ b/gcc/ipa-modref.cc
@@ -3508,15 +3508,15 @@ class pass_modref : public gimple_opt_pass
: gimple_opt_pass (pass_data_modref, ctxt) {}
/* opt_pass methods: */
- opt_pass *clone ()
+ opt_pass *clone () final override
{
return new pass_modref (m_ctxt);
}
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_ipa_modref;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
};
/* Encode TT to the output block OB using the summary streaming API. */
@@ -4170,12 +4170,12 @@ public:
{}
/* opt_pass methods: */
- opt_pass *clone () { return new pass_ipa_modref (m_ctxt); }
- virtual bool gate (function *)
+ opt_pass *clone () final override { return new pass_ipa_modref (m_ctxt); }
+ bool gate (function *) final override
{
return true;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
};
diff --git a/gcc/ipa-profile.cc b/gcc/ipa-profile.cc
index 8763b38..e0acc5d 100644
--- a/gcc/ipa-profile.cc
+++ b/gcc/ipa-profile.cc
@@ -1053,8 +1053,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_ipa_profile || in_lto_p; }
- virtual unsigned int execute (function *) { return ipa_profile (); }
+ bool gate (function *) final override { return flag_ipa_profile || in_lto_p; }
+ unsigned int execute (function *) final override { return ipa_profile (); }
}; // class pass_ipa_profile
diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc
index c037668..fb8f973 100644
--- a/gcc/ipa-prop.cc
+++ b/gcc/ipa-prop.cc
@@ -126,7 +126,7 @@ struct ipa_vr_ggc_hash_traits : public ggc_cache_remove <value_range *>
static bool
equal (const value_range *a, const value_range *b)
{
- return (a->equal_p (*b)
+ return (*a == *b
&& types_compatible_p (a->type (), b->type ()));
}
static const bool empty_zero_p = true;
@@ -3008,7 +3008,7 @@ public:
analysis_dom_walker (struct ipa_func_body_info *fbi)
: dom_walker (CDI_DOMINATORS), m_fbi (fbi) {}
- virtual edge before_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
private:
struct ipa_func_body_info *m_fbi;
@@ -3410,7 +3410,7 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
ie->caller->dump_name ());
}
- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+ target = builtin_decl_unreachable ();
callee = cgraph_node::get_create (target);
unreachable = true;
}
@@ -3821,7 +3821,7 @@ ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
"No devirtualization target in %s\n",
ie->caller->dump_name ());
}
- tree new_target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+ tree new_target = builtin_decl_unreachable ();
cgraph_node::get_create (new_target);
return new_target;
}
@@ -5655,7 +5655,7 @@ public:
: dom_walker (CDI_DOMINATORS), m_fbi (fbi), m_descriptors (descs),
m_aggval (av), m_something_changed (sc) {}
- virtual edge before_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
bool cleanup_eh ()
{ return gimple_purge_all_dead_eh_edges (m_need_eh_cleanup); }
diff --git a/gcc/ipa-pure-const.cc b/gcc/ipa-pure-const.cc
index 6f8006a..572a6da 100644
--- a/gcc/ipa-pure-const.cc
+++ b/gcc/ipa-pure-const.cc
@@ -168,8 +168,8 @@ public:
pass_ipa_pure_const(gcc::context *ctxt);
/* opt_pass methods: */
- bool gate (function *) { return gate_pure_const (); }
- unsigned int execute (function *fun);
+ bool gate (function *) final override { return gate_pure_const (); }
+ unsigned int execute (function *fun) final override;
void register_hooks (void);
@@ -2154,9 +2154,12 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_local_pure_const (m_ctxt); }
- virtual bool gate (function *) { return gate_pure_const (); }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override
+ {
+ return new pass_local_pure_const (m_ctxt);
+ }
+ bool gate (function *) final override { return gate_pure_const (); }
+ unsigned int execute (function *) final override;
}; // class pass_local_pure_const
@@ -2270,8 +2273,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return warn_suggest_attribute_noreturn; }
- virtual unsigned int execute (function *fun)
+ bool gate (function *) final override
+ {
+ return warn_suggest_attribute_noreturn;
+ }
+ unsigned int execute (function *fun) final override
{
if (!TREE_THIS_VOLATILE (current_function_decl)
&& EDGE_COUNT (EXIT_BLOCK_PTR_FOR_FN (fun)->preds) == 0)
@@ -2316,9 +2322,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_nothrow (m_ctxt); }
- virtual bool gate (function *) { return optimize; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_nothrow (m_ctxt); }
+ bool gate (function *) final override { return optimize; }
+ unsigned int execute (function *) final override;
}; // class pass_nothrow
diff --git a/gcc/ipa-reference.cc b/gcc/ipa-reference.cc
index 40b0209e..bd6ee0d 100644
--- a/gcc/ipa-reference.cc
+++ b/gcc/ipa-reference.cc
@@ -1299,14 +1299,14 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return ((in_lto_p || flag_ipa_reference)
/* Don't bother doing anything if the program has errors. */
&& !seen_error ());
}
- virtual unsigned int execute (function *) { return propagate (); }
+ unsigned int execute (function *) final override { return propagate (); }
}; // class pass_ipa_reference
diff --git a/gcc/ipa-split.cc b/gcc/ipa-split.cc
index 60021ba..1673461 100644
--- a/gcc/ipa-split.cc
+++ b/gcc/ipa-split.cc
@@ -1915,8 +1915,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return execute_split_functions ();
}
@@ -1974,8 +1974,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return execute_feedback_split_functions ();
}
diff --git a/gcc/ipa-sra.cc b/gcc/ipa-sra.cc
index 96b020f..2237ac6 100644
--- a/gcc/ipa-sra.cc
+++ b/gcc/ipa-sra.cc
@@ -4049,14 +4049,17 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* TODO: We should remove the optimize check after we ensure we never run
IPA passes when not optimizing. */
return (flag_ipa_sra && optimize);
}
- virtual unsigned int execute (function *) { return ipa_sra_analysis (); }
+ unsigned int execute (function *) final override
+ {
+ return ipa_sra_analysis ();
+ }
}; // class pass_ipa_sra
diff --git a/gcc/ipa-visibility.cc b/gcc/ipa-visibility.cc
index e95a0dd..8a27e7b 100644
--- a/gcc/ipa-visibility.cc
+++ b/gcc/ipa-visibility.cc
@@ -959,12 +959,12 @@ public:
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Do not re-run on ltrans stage. */
return !flag_ltrans;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return whole_program_function_and_variable_visibility ();
}
@@ -988,7 +988,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return function_and_variable_visibility (flag_whole_program && !flag_lto);
}
diff --git a/gcc/ipa.cc b/gcc/ipa.cc
index f53f15f..d17aa86 100644
--- a/gcc/ipa.cc
+++ b/gcc/ipa.cc
@@ -232,8 +232,7 @@ walk_polymorphic_call_targets (hash_set<void *> *reachable_call_targets,
if (targets.length () == 1)
target = targets[0];
else
- target = cgraph_node::get_create
- (builtin_decl_implicit (BUILT_IN_UNREACHABLE));
+ target = cgraph_node::get_create (builtin_decl_unreachable ());
if (dump_enabled_p ())
{
@@ -1343,8 +1342,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return ipa_cdtor_merge (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return ipa_cdtor_merge ();
+ }
}; // class pass_ipa_cdtor_merge
@@ -1566,7 +1568,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return ipa_single_use (); }
+ unsigned int execute (function *) final override { return ipa_single_use (); }
}; // class pass_ipa_single_use
diff --git a/gcc/ira.cc b/gcc/ira.cc
index e3b3c54..42c9cea 100644
--- a/gcc/ira.cc
+++ b/gcc/ira.cc
@@ -6074,11 +6074,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return !targetm.no_register_allocation;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
ira (dump_file);
return 0;
@@ -6117,11 +6117,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return !targetm.no_register_allocation;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
do_reload ();
return 0;
diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog
index 4cb2d01..d16b573 100644
--- a/gcc/jit/ChangeLog
+++ b/gcc/jit/ChangeLog
@@ -1,3 +1,17 @@
+2022-06-29 Antoni Boucher <bouanto@zoho.com>
+
+ PR jit/105812
+ * jit-playback.cc: Use the correct return type when folding in
+ as_truth_value.
+
+2022-06-29 Sergei Trofimovich <siarheit@google.com>
+
+ PR c++/106102
+ * jit-playback.cc: Include <pthread.h> via "system.h" to avoid calloc()
+ poisoning.
+ * jit-recording.cc: Ditto.
+ * libgccjit.cc: Ditto.
+
2022-06-10 Antoni Boucher <bouanto@zoho.com>
PR jit/105829
diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc
index 6be6bdf..d227d36 100644
--- a/gcc/jit/jit-playback.cc
+++ b/gcc/jit/jit-playback.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#include "config.h"
+#define INCLUDE_PTHREAD_H
#include "system.h"
#include "coretypes.h"
#include "target.h"
@@ -41,8 +42,6 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic.h"
#include "stmt.h"
-#include <pthread.h>
-
#include "jit-playback.h"
#include "jit-result.h"
#include "jit-builtins.h"
@@ -1025,8 +1024,9 @@ as_truth_value (tree expr, location *loc)
if (loc)
set_tree_location (typed_zero, loc);
+ tree type = TREE_TYPE (expr);
expr = fold_build2_loc (UNKNOWN_LOCATION,
- NE_EXPR, integer_type_node, expr, typed_zero);
+ NE_EXPR, type, expr, typed_zero);
if (loc)
set_tree_location (expr, loc);
diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc
index 697dee6..f78daed 100644
--- a/gcc/jit/jit-recording.cc
+++ b/gcc/jit/jit-recording.cc
@@ -19,13 +19,13 @@ along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#include "config.h"
+#define INCLUDE_PTHREAD_H
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "pretty-print.h"
#include "toplev.h"
-#include <pthread.h>
#include "jit-builtins.h"
#include "jit-recording.h"
diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc
index 0e76097..ca86266 100644
--- a/gcc/jit/libgccjit.cc
+++ b/gcc/jit/libgccjit.cc
@@ -19,12 +19,12 @@ along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#include "config.h"
+#define INCLUDE_PTHREAD_H
#include "system.h"
#include "coretypes.h"
#include "timevar.h"
#include "typed-splay-tree.h"
#include "cppbuiltin.h"
-#include <pthread.h>
#include "libgccjit.h"
#include "jit-recording.h"
diff --git a/gcc/jump.cc b/gcc/jump.cc
index 332f868..e620716 100644
--- a/gcc/jump.cc
+++ b/gcc/jump.cc
@@ -182,7 +182,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return cleanup_barriers (); }
+ unsigned int execute (function *) final override
+ {
+ return cleanup_barriers ();
+ }
}; // class pass_cleanup_barriers
diff --git a/gcc/loop-init.cc b/gcc/loop-init.cc
index 1e4f6cf..b9e0797 100644
--- a/gcc/loop-init.cc
+++ b/gcc/loop-init.cc
@@ -194,7 +194,7 @@ loop_fini_done:
If CHANGED_BBS is not NULL, basic blocks whose loop depth has changed are
marked in it.
- Returns the number of new discovered loops. */
+ Returns the number of new discovered plus the number of removed loops. */
unsigned
fix_loop_structure (bitmap changed_bbs)
@@ -277,7 +277,7 @@ fix_loop_structure (bitmap changed_bbs)
}
/* Finally free deleted loops. */
- bool any_deleted = false;
+ unsigned n_deleted = 0;
class loop *loop;
FOR_EACH_VEC_ELT (*get_loops (cfun), i, loop)
if (loop && loop->header == NULL)
@@ -311,12 +311,12 @@ fix_loop_structure (bitmap changed_bbs)
}
(*get_loops (cfun))[i] = NULL;
flow_loop_free (loop);
- any_deleted = true;
+ n_deleted++;
}
/* If we deleted loops then the cached scalar evolutions refering to
those loops become invalid. */
- if (any_deleted && scev_initialized_p ())
+ if (n_deleted > 0 && scev_initialized_p ())
scev_reset_htab ();
loops_state_clear (LOOPS_NEED_FIXUP);
@@ -328,7 +328,7 @@ fix_loop_structure (bitmap changed_bbs)
timevar_pop (TV_LOOP_INIT);
- return number_of_loops (cfun) - old_nloops;
+ return number_of_loops (cfun) - old_nloops + n_deleted;
}
/* The RTL loop superpass. The actual passes are subpasses. See passes.cc for
@@ -357,7 +357,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
+ bool gate (function *) final override;
}; // class pass_loop2
@@ -429,7 +429,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return rtl_loop_init (); }
+ unsigned int execute (function *) final override { return rtl_loop_init (); }
}; // class pass_rtl_loop_init
@@ -467,7 +467,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_rtl_loop_done
@@ -523,8 +523,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_move_loop_invariants; }
- virtual unsigned int execute (function *fun)
+ bool gate (function *) final override { return flag_move_loop_invariants; }
+ unsigned int execute (function *fun) final override
{
if (number_of_loops (fun) > 1)
move_loop_invariants ();
@@ -565,12 +565,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (flag_unroll_loops || flag_unroll_all_loops || cfun->has_unroll);
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_rtl_unroll_loops
@@ -625,8 +625,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *);
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override;
}; // class pass_rtl_doloop
diff --git a/gcc/loop-unroll.cc b/gcc/loop-unroll.cc
index 69df1ae..1956c54 100644
--- a/gcc/loop-unroll.cc
+++ b/gcc/loop-unroll.cc
@@ -978,7 +978,7 @@ unroll_loop_runtime_iterations (class loop *loop)
/* Compute count increments for each switch block and initialize
innermost switch block. Switch blocks and peeled loop copies are built
from innermost outward. */
- iter_count = new_count = swtch->count.apply_scale (1, max_unroll + 1);
+ iter_count = new_count = swtch->count / (max_unroll + 1);
swtch->count = new_count;
for (i = 0; i < n_peel; i++)
@@ -995,7 +995,7 @@ unroll_loop_runtime_iterations (class loop *loop)
/* Create item for switch. */
unsigned j = n_peel - i - (extra_zero_check ? 0 : 1);
- p = profile_probability::always ().apply_scale (1, i + 2);
+ p = profile_probability::always () / (i + 2);
preheader = split_edge (loop_preheader_edge (loop));
/* Add in count of edge from switch block. */
@@ -1021,12 +1021,12 @@ unroll_loop_runtime_iterations (class loop *loop)
if (extra_zero_check)
{
/* Add branch for zero iterations. */
- p = profile_probability::always ().apply_scale (1, max_unroll + 1);
+ p = profile_probability::always () / (max_unroll + 1);
swtch = ezc_swtch;
preheader = split_edge (loop_preheader_edge (loop));
/* Recompute count adjustments since initial peel copy may
have exited and reduced those values that were computed above. */
- iter_count = swtch->count.apply_scale (1, max_unroll + 1);
+ iter_count = swtch->count / (max_unroll + 1);
/* Add in count of edge from switch block. */
preheader->count += iter_count;
branch_code = compare_and_jump_seq (copy_rtx (niter), const0_rtx, EQ,
diff --git a/gcc/lower-subreg.cc b/gcc/lower-subreg.cc
index d30bbee..03e9326 100644
--- a/gcc/lower-subreg.cc
+++ b/gcc/lower-subreg.cc
@@ -1769,8 +1769,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_split_wide_types != 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_split_wide_types != 0; }
+ unsigned int execute (function *) final override
{
decompose_multiword_subregs (false);
return 0;
@@ -1811,9 +1811,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_split_wide_types
- && flag_split_wide_types_early; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override
+ {
+ return flag_split_wide_types && flag_split_wide_types_early;
+ }
+ unsigned int execute (function *) final override
{
decompose_multiword_subregs (true);
return 0;
@@ -1854,8 +1856,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_split_wide_types; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_split_wide_types; }
+ unsigned int execute (function *) final override
{
decompose_multiword_subregs (true);
return 0;
diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc
index 237743e..6d9c36e 100644
--- a/gcc/lto-cgraph.cc
+++ b/gcc/lto-cgraph.cc
@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see
#include "pass_manager.h"
#include "ipa-utils.h"
#include "omp-offload.h"
+#include "omp-general.h"
#include "stringpool.h"
#include "attribs.h"
#include "alloc-pool.h"
@@ -1068,7 +1069,10 @@ read_string (class lto_input_block *ib)
void
output_offload_tables (void)
{
- if (vec_safe_is_empty (offload_funcs) && vec_safe_is_empty (offload_vars))
+ bool output_requires = (flag_openmp
+ && (omp_requires_mask & OMP_REQUIRES_TARGET_USED) != 0);
+ if (vec_safe_is_empty (offload_funcs) && vec_safe_is_empty (offload_vars)
+ && !output_requires)
return;
struct lto_simple_output_block *ob
@@ -1098,6 +1102,19 @@ output_offload_tables (void)
(*offload_vars)[i]);
}
+ if (output_requires)
+ {
+ HOST_WIDE_INT val = ((HOST_WIDE_INT) omp_requires_mask
+ & (OMP_REQUIRES_UNIFIED_ADDRESS
+ | OMP_REQUIRES_UNIFIED_SHARED_MEMORY
+ | OMP_REQUIRES_REVERSE_OFFLOAD
+ | OMP_REQUIRES_TARGET_USED));
+ /* (Mis)use LTO_symtab_edge for this variable. */
+ streamer_write_enum (ob->main_stream, LTO_symtab_tags,
+ LTO_symtab_last_tag, LTO_symtab_edge);
+ streamer_write_hwi_stream (ob->main_stream, val);
+ }
+
streamer_write_uhwi_stream (ob->main_stream, 0);
lto_destroy_simple_output_block (ob);
@@ -1764,6 +1781,20 @@ input_symtab (void)
}
}
+static void
+omp_requires_to_name (char *buf, size_t size, HOST_WIDE_INT requires_mask)
+{
+ char *end = buf + size, *p = buf;
+ if (requires_mask & GOMP_REQUIRES_UNIFIED_ADDRESS)
+ p += snprintf (p, end - p, "unified_address");
+ if (requires_mask & GOMP_REQUIRES_UNIFIED_SHARED_MEMORY)
+ p += snprintf (p, end - p, "%sunified_shared_memory",
+ (p == buf ? "" : ", "));
+ if (requires_mask & GOMP_REQUIRES_REVERSE_OFFLOAD)
+ p += snprintf (p, end - p, "%sreverse_offload",
+ (p == buf ? "" : ", "));
+}
+
/* Input function/variable tables that will allow libgomp to look up offload
target code, and store them into OFFLOAD_FUNCS and OFFLOAD_VARS. */
@@ -1773,6 +1804,10 @@ input_offload_tables (bool do_force_output)
struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data ();
struct lto_file_decl_data *file_data;
unsigned int j = 0;
+ const char *requires_fn = NULL;
+ tree requires_decl = NULL_TREE;
+
+ omp_requires_mask = (omp_requires) 0;
while ((file_data = file_data_vec[j++]))
{
@@ -1784,6 +1819,7 @@ input_offload_tables (bool do_force_output)
if (!ib)
continue;
+ tree tmp_decl = NULL_TREE;
enum LTO_symtab_tags tag
= streamer_read_enum (ib, LTO_symtab_tags, LTO_symtab_last_tag);
while (tag)
@@ -1799,6 +1835,7 @@ input_offload_tables (bool do_force_output)
LTO mode. */
if (do_force_output)
cgraph_node::get (fn_decl)->mark_force_output ();
+ tmp_decl = fn_decl;
}
else if (tag == LTO_symtab_variable)
{
@@ -1810,6 +1847,72 @@ input_offload_tables (bool do_force_output)
may be no refs to var_decl in offload LTO mode. */
if (do_force_output)
varpool_node::get (var_decl)->force_output = 1;
+ tmp_decl = var_decl;
+ }
+ else if (tag == LTO_symtab_edge)
+ {
+ static bool error_emitted = false;
+ HOST_WIDE_INT val = streamer_read_hwi (ib);
+
+ if (omp_requires_mask == 0)
+ {
+ omp_requires_mask = (omp_requires) val;
+ requires_decl = tmp_decl;
+ requires_fn = file_data->file_name;
+ }
+ else if (omp_requires_mask != val && !error_emitted)
+ {
+ const char *fn1 = requires_fn;
+ if (requires_decl != NULL_TREE)
+ {
+ while (DECL_CONTEXT (requires_decl) != NULL_TREE
+ && TREE_CODE (requires_decl) != TRANSLATION_UNIT_DECL)
+ requires_decl = DECL_CONTEXT (requires_decl);
+ if (requires_decl != NULL_TREE)
+ fn1 = IDENTIFIER_POINTER (DECL_NAME (requires_decl));
+ }
+
+ const char *fn2 = file_data->file_name;
+ if (tmp_decl != NULL_TREE)
+ {
+ while (DECL_CONTEXT (tmp_decl) != NULL_TREE
+ && TREE_CODE (tmp_decl) != TRANSLATION_UNIT_DECL)
+ tmp_decl = DECL_CONTEXT (tmp_decl);
+ if (tmp_decl != NULL_TREE)
+ fn2 = IDENTIFIER_POINTER (DECL_NAME (tmp_decl));
+ }
+
+ char buf1[sizeof ("unified_address, unified_shared_memory, "
+ "reverse_offload")];
+ char buf2[sizeof ("unified_address, unified_shared_memory, "
+ "reverse_offload")];
+ omp_requires_to_name (buf2, sizeof (buf2),
+ val != OMP_REQUIRES_TARGET_USED
+ ? val
+ : (HOST_WIDE_INT) omp_requires_mask);
+ if (val != OMP_REQUIRES_TARGET_USED
+ && omp_requires_mask != OMP_REQUIRES_TARGET_USED)
+ {
+ omp_requires_to_name (buf1, sizeof (buf1),
+ omp_requires_mask);
+ error ("OpenMP %<requires%> directive with non-identical "
+ "clauses in multiple compilation units: %qs vs. "
+ "%qs", buf1, buf2);
+ inform (UNKNOWN_LOCATION, "%qs has %qs", fn1, buf1);
+ inform (UNKNOWN_LOCATION, "%qs has %qs", fn2, buf2);
+ }
+ else
+ {
+ error ("OpenMP %<requires%> directive with %qs specified "
+ "only in some compilation units", buf2);
+ inform (UNKNOWN_LOCATION, "%qs has %qs",
+ val != OMP_REQUIRES_TARGET_USED ? fn2 : fn1,
+ buf2);
+ inform (UNKNOWN_LOCATION, "but %qs has not",
+ val != OMP_REQUIRES_TARGET_USED ? fn1 : fn2);
+ }
+ error_emitted = true;
+ }
}
else
fatal_error (input_location,
@@ -1821,6 +1924,18 @@ input_offload_tables (bool do_force_output)
lto_destroy_simple_input_block (file_data, LTO_section_offload_table,
ib, data, len);
}
+#ifdef ACCEL_COMPILER
+ char *omp_requires_file = getenv ("GCC_OFFLOAD_OMP_REQUIRES_FILE");
+ if (omp_requires_file == NULL || omp_requires_file[0] == '\0')
+ fatal_error (input_location, "GCC_OFFLOAD_OMP_REQUIRES_FILE unset");
+ FILE *f = fopen (omp_requires_file, "wb");
+ if (!f)
+ fatal_error (input_location, "Cannot open omp_requires file %qs",
+ omp_requires_file);
+ uint32_t req_mask = omp_requires_mask;
+ fwrite (&req_mask, sizeof (req_mask), 1, f);
+ fclose (f);
+#endif
}
/* True when we need optimization summary for NODE. */
diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc
index 26e06e7..795ab74 100644
--- a/gcc/lto-wrapper.cc
+++ b/gcc/lto-wrapper.cc
@@ -170,13 +170,14 @@ get_options_from_collect_gcc_options (const char *collect_gcc,
return decoded;
}
-/* Find option in OPTIONS based on OPT_INDEX. -1 value is returned
- if the option is not present. */
+/* Find option in OPTIONS based on OPT_INDEX, starting at START. -1
+ value is returned if the option is not present. */
static int
-find_option (vec<cl_decoded_option> &options, size_t opt_index)
+find_option (vec<cl_decoded_option> &options, size_t opt_index,
+ unsigned start = 0)
{
- for (unsigned i = 0; i < options.length (); ++i)
+ for (unsigned i = start; i < options.length (); ++i)
if (options[i].opt_index == opt_index)
return i;
@@ -575,13 +576,16 @@ merge_and_complain (vec<cl_decoded_option> &decoded_options,
else
j++;
+ int existing_opt_index, existing_opt2_index;
if (!xassembler_options_error)
- for (i = j = 0; ; i++, j++)
+ for (existing_opt_index = existing_opt2_index = 0; ;
+ existing_opt_index++, existing_opt2_index++)
{
- int existing_opt_index
- = find_option (decoded_options, OPT_Xassembler);
- int existing_opt2_index
- = find_option (fdecoded_options, OPT_Xassembler);
+ existing_opt_index
+ = find_option (decoded_options, OPT_Xassembler, existing_opt_index);
+ existing_opt2_index
+ = find_option (fdecoded_options, OPT_Xassembler,
+ existing_opt2_index);
cl_decoded_option *existing_opt = NULL;
cl_decoded_option *existing_opt2 = NULL;
@@ -1100,7 +1104,7 @@ find_crtoffloadtable (int save_temps, const char *dumppfx)
static bool
find_and_merge_options (int fd, off_t file_offset, const char *prefix,
- vec<cl_decoded_option> decoded_cl_options,
+ vec<cl_decoded_option> decoded_cl_options, bool first,
vec<cl_decoded_option> *opts, const char *collect_gcc)
{
off_t offset, length;
@@ -1110,6 +1114,9 @@ find_and_merge_options (int fd, off_t file_offset, const char *prefix,
int err;
vec<cl_decoded_option> fdecoded_options;
+ if (!first)
+ fdecoded_options = *opts;
+
simple_object_read *sobj;
sobj = simple_object_start_read (fd, file_offset, "__GNU_LTO",
&errmsg, &err);
@@ -1130,7 +1137,6 @@ find_and_merge_options (int fd, off_t file_offset, const char *prefix,
data = (char *)xmalloc (length);
read (fd, data, length);
fopts = data;
- bool first = true;
do
{
vec<cl_decoded_option> f2decoded_options
@@ -1417,8 +1423,10 @@ run_gcc (unsigned argc, char *argv[])
int auto_parallel = 0;
bool no_partition = false;
const char *jobserver_error = NULL;
+ bool fdecoded_options_first = true;
vec<cl_decoded_option> fdecoded_options;
fdecoded_options.create (16);
+ bool offload_fdecoded_options_first = true;
vec<cl_decoded_option> offload_fdecoded_options = vNULL;
struct obstack argv_obstack;
int new_head_argc;
@@ -1510,11 +1518,13 @@ run_gcc (unsigned argc, char *argv[])
}
if (find_and_merge_options (fd, file_offset, LTO_SECTION_NAME_PREFIX,
- decoded_options, &fdecoded_options,
+ decoded_options, fdecoded_options_first,
+ &fdecoded_options,
collect_gcc))
{
have_lto = true;
ltoobj_argv[ltoobj_argc++] = argv[i];
+ fdecoded_options_first = false;
}
close (fd);
}
@@ -1773,9 +1783,12 @@ cont1:
fatal_error (input_location, "cannot open %s: %m", filename);
if (!find_and_merge_options (fd, file_offset,
OFFLOAD_SECTION_NAME_PREFIX,
- decoded_options, &offload_fdecoded_options,
+ decoded_options,
+ offload_fdecoded_options_first,
+ &offload_fdecoded_options,
collect_gcc))
fatal_error (input_location, "cannot read %s: %m", filename);
+ offload_fdecoded_options_first = false;
close (fd);
if (filename != offload_argv[i])
XDELETEVEC (filename);
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 31c3bc2..3cf57fa 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,13 @@
+2022-07-08 Martin Liska <mliska@suse.cz>
+
+ * lto-dump.cc (lto_main): Exit in the function
+ as we don't want any LTO bytecode processing.
+
+2022-06-27 David Malcolm <dmalcolm@redhat.com>
+
+ * lto-dump.cc: Add "final" and "override" to various vfunc
+ implementations, removing redundant "virtual" as appropriate.
+
2022-05-16 Martin Liska <mliska@suse.cz>
* lto-common.cc (lto_resolution_read): Use ARRAY_SIZE.
diff --git a/gcc/lto/lto-dump.cc b/gcc/lto/lto-dump.cc
index 1fb3fb8..f3d852d 100644
--- a/gcc/lto/lto-dump.cc
+++ b/gcc/lto/lto-dump.cc
@@ -80,7 +80,7 @@ public:
virtual ~variable_entry ()
{}
- virtual size_t get_size () const
+ size_t get_size () const final override
{
varpool_node *vnode = dyn_cast<varpool_node *> (node);
if (DECL_SIZE (vnode->decl) && tree_fits_shwi_p (DECL_SIZE (vnode->decl)))
@@ -88,7 +88,7 @@ public:
return 0;
}
- virtual void dump ()
+ void dump () final override
{
symbol_entry :: dump ();
varpool_node *vnode = dyn_cast<varpool_node *> (node);
@@ -111,13 +111,13 @@ public:
virtual ~function_entry ()
{}
- virtual void dump ()
+ void dump () final override
{
symbol_entry :: dump ();
printf ("\n");
}
- virtual size_t get_size () const
+ size_t get_size () const final override
{
cgraph_node *cnode = dyn_cast<cgraph_node *> (node);
gcc_assert (cnode);
@@ -316,7 +316,10 @@ lto_main (void)
{
quiet_flag = true;
if (flag_lto_dump_tool_help)
- dump_tool_help ();
+ {
+ dump_tool_help ();
+ exit (SUCCESS_EXIT_CODE);
+ }
/* LTO is called as a front end, even though it is not a front end.
Because it is called as a front end, TV_PHASE_PARSING and
@@ -369,11 +372,12 @@ lto_main (void)
{
/* Dump specific gimple body of specified function. */
dump_body ();
- return;
}
else if (flag_dump_callgraph)
- {
- dump_symtab_graphviz ();
- return;
- }
+ dump_symtab_graphviz ();
+ else
+ dump_tool_help ();
+
+ /* Exit right now. */
+ exit (SUCCESS_EXIT_CODE);
}
diff --git a/gcc/match.pd b/gcc/match.pd
index 3e9572e..8bbc0db 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1881,6 +1881,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& !TYPE_UNSIGNED (TREE_TYPE (@0)))
(mult (convert @0) @1)))
+/* Narrow integer multiplication by a zero_one_valued_p operand.
+ Multiplication by [0,1] is guaranteed not to overflow. */
+(simplify
+ (convert (mult@0 zero_one_valued_p@1 INTEGER_CST@2))
+ (if (INTEGRAL_TYPE_P (type)
+ && INTEGRAL_TYPE_P (TREE_TYPE (@0))
+ && TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (@0)))
+ (mult (convert @1) (convert @2))))
+
/* Convert ~ (-A) to A - 1. */
(simplify
(bit_not (convert? (negate @0)))
@@ -2080,6 +2089,19 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0)))
(op @0 @1))))
+
+/* As a special case, X + C < Y + C is the same as (signed) X < (signed) Y
+ when C is an unsigned integer constant with only the MSB set, and X and
+ Y have types of equal or lower integer conversion rank than C's. */
+(for op (lt le ge gt)
+ (simplify
+ (op (plus @1 INTEGER_CST@0) (plus @2 @0))
+ (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
+ && TYPE_UNSIGNED (TREE_TYPE (@0))
+ && wi::only_sign_bit_p (wi::to_wide (@0)))
+ (with { tree stype = signed_type_for (TREE_TYPE (@0)); }
+ (op (convert:stype @1) (convert:stype @2))))))
+
/* For equality and subtraction, this is also true with wrapping overflow. */
(for op (eq ne minus)
(simplify
@@ -3550,6 +3572,29 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& wi::lshift (wi::to_wide (@0), cand) == wi::to_wide (@2))
(cmp @1 { build_int_cst (TREE_TYPE (@1), cand); }))))))
+/* Fold ((X << C1) & C2) cmp C3 into (X & (C2 >> C1)) cmp (C3 >> C1)
+ ((X >> C1) & C2) cmp C3 into (X & (C2 << C1)) cmp (C3 << C1). */
+(for cmp (ne eq)
+ (simplify
+ (cmp (bit_and:s (lshift:s @0 INTEGER_CST@1) INTEGER_CST@2) INTEGER_CST@3)
+ (if (tree_fits_shwi_p (@1)
+ && tree_to_shwi (@1) > 0
+ && tree_to_shwi (@1) < TYPE_PRECISION (TREE_TYPE (@0))
+ && tree_to_shwi (@1) <= wi::ctz (wi::to_wide (@3)))
+ (with { wide_int c1 = wi::to_wide (@1);
+ wide_int c2 = wi::lrshift (wi::to_wide (@2), c1);
+ wide_int c3 = wi::lrshift (wi::to_wide (@3), c1); }
+ (cmp (bit_and @0 { wide_int_to_tree (TREE_TYPE (@0), c2); })
+ { wide_int_to_tree (TREE_TYPE (@0), c3); }))))
+ (simplify
+ (cmp (bit_and:s (rshift:s @0 INTEGER_CST@1) INTEGER_CST@2) INTEGER_CST@3)
+ (if (tree_fits_shwi_p (@1)
+ && tree_to_shwi (@1) > 0
+ && tree_to_shwi (@1) < TYPE_PRECISION (TREE_TYPE (@0))
+ && tree_to_shwi (@1) <= wi::clz (wi::to_wide (@2))
+ && tree_to_shwi (@1) <= wi::clz (wi::to_wide (@3)))
+ (cmp (bit_and @0 (lshift @2 @1)) (lshift @3 @1)))))
+
/* Fold (X << C1) & C2 into (X << C1) & (C2 | ((1 << C1) - 1))
(X >> C1) & C2 into (X >> C1) & (C2 | ~((type) -1 >> C1))
if the new mask might be further optimized. */
@@ -4356,6 +4401,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
)
#endif
+(simplify
+ (convert (cond@0 @1 INTEGER_CST@2 INTEGER_CST@3))
+ (if (INTEGRAL_TYPE_P (type)
+ && INTEGRAL_TYPE_P (TREE_TYPE (@0)))
+ (cond @1 (convert @2) (convert @3))))
+
/* Simplification moved from fold_cond_expr_with_comparison. It may also
be extended. */
/* This pattern implements two kinds simplification:
@@ -4546,12 +4597,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(cond (cmp:c (nop_convert1?@c0 @0) (nop_convert2?@c1 @1))
(convert3? @0) (convert4? @1))
(if (!HONOR_SIGNED_ZEROS (type)
- && ((INTEGRAL_TYPE_P (type)
- /* Allow widening conversions of the data. */
+ && (/* Allow widening conversions of the compare operands as data. */
+ (INTEGRAL_TYPE_P (type)
+ && types_match (TREE_TYPE (@c0), TREE_TYPE (@0))
+ && types_match (TREE_TYPE (@c1), TREE_TYPE (@1))
&& TYPE_PRECISION (TREE_TYPE (@0)) <= TYPE_PRECISION (type)
&& TYPE_PRECISION (TREE_TYPE (@1)) <= TYPE_PRECISION (type))
- || (tree_nop_conversion_p (type, TREE_TYPE (@0))
- && tree_nop_conversion_p (type, TREE_TYPE (@1)))))
+ /* Or sign conversions for the comparison. */
+ || (types_match (type, TREE_TYPE (@0))
+ && types_match (type, TREE_TYPE (@1)))))
(switch
(if (cmp == EQ_EXPR)
(if (VECTOR_TYPE_P (type))
@@ -5488,7 +5542,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& (TYPE_UNSIGNED (TREE_TYPE (@00)) == TYPE_UNSIGNED (TREE_TYPE (@0))
|| cmp == NE_EXPR
|| cmp == EQ_EXPR)
- && !POINTER_TYPE_P (TREE_TYPE (@00)))
+ && !POINTER_TYPE_P (TREE_TYPE (@00))
+ /* (int)bool:32 != (int)uint is not the same as
+ bool:32 != (bool:32)uint since boolean types only have two valid
+ values independent of their precision. */
+ && (TREE_CODE (TREE_TYPE (@00)) != BOOLEAN_TYPE
+ || TREE_CODE (TREE_TYPE (@10)) == BOOLEAN_TYPE))
/* ??? The special-casing of INTEGER_CST conversion was in the original
code and here to avoid a spurious overflow flag on the resulting
constant which fold_convert produces. */
@@ -5949,10 +6008,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(cmp (bit_and:c@2 @0 cst@1) integer_zerop)
(with { tree csts = bitmask_inv_cst_vector_p (@1); }
(if (csts && (VECTOR_TYPE_P (TREE_TYPE (@1)) || single_use (@2)))
- (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
- (icmp @0 { csts; })
- (with { tree utype = unsigned_type_for (TREE_TYPE (@1)); }
- (icmp (view_convert:utype @0) { csts; }))))))))
+ (with { auto optab = VECTOR_TYPE_P (TREE_TYPE (@1))
+ ? optab_vector : optab_default;
+ tree utype = unsigned_type_for (TREE_TYPE (@1)); }
+ (if (target_supports_op_p (utype, icmp, optab)
+ || (optimize_vectors_before_lowering_p ()
+ && (!target_supports_op_p (type, cmp, optab)
+ || !target_supports_op_p (type, BIT_AND_EXPR, optab))))
+ (if (TYPE_UNSIGNED (TREE_TYPE (@1)))
+ (icmp @0 { csts; })
+ (icmp (view_convert:utype @0) { csts; })))))))))
/* When one argument is a constant, overflow detection can be simplified.
Currently restricted to single use so as not to interfere too much with
@@ -7961,3 +8026,15 @@ and,
(match (bitwise_induction_p @0 @2 @3)
(bit_not
(nop_convert1? (bit_xor@0 (convert2? (lshift integer_onep@1 @2)) @3))))
+
+/* n - (((n > C1) ? n : C1) & -C2) -> n & C1 for unsigned case.
+ n - (((n > C1) ? n : C1) & -C2) -> (n <= C1) ? n : (n & C1) for signed case. */
+(simplify
+ (minus @0 (bit_and (max @0 INTEGER_CST@1) INTEGER_CST@2))
+ (with { auto i = wi::neg (wi::to_wide (@2)); }
+ /* Check if -C2 is a power of 2 and C1 = -C2 - 1. */
+ (if (wi::popcount (i) == 1
+ && (wi::to_wide (@1)) == (i - 1))
+ (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
+ (bit_and @0 @1)
+ (cond (le @0 @1) @0 (bit_and @0 @1))))))
diff --git a/gcc/mode-switching.cc b/gcc/mode-switching.cc
index 6e3f1dc..b0f6e7c 100644
--- a/gcc/mode-switching.cc
+++ b/gcc/mode-switching.cc
@@ -893,8 +893,8 @@ public:
/* opt_pass methods: */
/* The epiphany backend creates a second instance of this pass, so we need
a clone method. */
- opt_pass * clone () { return new pass_mode_switching (m_ctxt); }
- virtual bool gate (function *)
+ opt_pass * clone () final override { return new pass_mode_switching (m_ctxt); }
+ bool gate (function *) final override
{
#ifdef OPTIMIZE_MODE_SWITCHING
return true;
@@ -903,7 +903,7 @@ public:
#endif
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
#ifdef OPTIMIZE_MODE_SWITCHING
optimize_mode_switching ();
diff --git a/gcc/modulo-sched.cc b/gcc/modulo-sched.cc
index 1e1fa70..162de19 100644
--- a/gcc/modulo-sched.cc
+++ b/gcc/modulo-sched.cc
@@ -1439,10 +1439,10 @@ sms_schedule (void)
/* Perform SMS only on loops that their average count is above threshold. */
- if ( latch_edge->count () > profile_count::zero ()
- && (latch_edge->count()
- < single_exit (loop)->count ().apply_scale
- (param_sms_loop_average_count_threshold, 1)))
+ if (latch_edge->count () > profile_count::zero ()
+ && (latch_edge->count ()
+ < (single_exit (loop)->count ()
+ * param_sms_loop_average_count_threshold)))
{
if (dump_file)
{
@@ -1464,12 +1464,12 @@ sms_schedule (void)
}
/* Make sure this is a doloop. */
- if ( !(count_reg = doloop_register_get (head, tail)))
- {
- if (dump_file)
- fprintf (dump_file, "SMS doloop_register_get failed\n");
- continue;
- }
+ if (!(count_reg = doloop_register_get (head, tail)))
+ {
+ if (dump_file)
+ fprintf (dump_file, "SMS doloop_register_get failed\n");
+ continue;
+ }
/* Don't handle BBs with calls or barriers
or !single_set with the exception of do-loop control part insns.
@@ -3338,12 +3338,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize > 0 && flag_modulo_sched);
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_sms
diff --git a/gcc/multiple_target.cc b/gcc/multiple_target.cc
index 7fe02fb..3e2d268 100644
--- a/gcc/multiple_target.cc
+++ b/gcc/multiple_target.cc
@@ -526,8 +526,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return ipa_target_clone (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return ipa_target_clone ();
+ }
};
bool
diff --git a/gcc/omp-expand.cc b/gcc/omp-expand.cc
index e7a8af4..1023c56 100644
--- a/gcc/omp-expand.cc
+++ b/gcc/omp-expand.cc
@@ -3120,8 +3120,7 @@ extract_omp_for_update_vars (struct omp_for_data *fd, tree *nonrect_bounds,
if (i < fd->collapse - 1)
{
e = make_edge (last_bb, bb, EDGE_FALSE_VALUE);
- e->probability
- = profile_probability::guessed_always ().apply_scale (1, 8);
+ e->probability = profile_probability::guessed_always () / 8;
struct omp_for_data_loop *l = &fd->loops[i + 1];
if (l->m1 == NULL_TREE || l->outer != 1)
@@ -3240,8 +3239,7 @@ extract_omp_for_update_vars (struct omp_for_data *fd, tree *nonrect_bounds,
if (update_bb == NULL)
update_bb = this_bb;
e = make_edge (this_bb, bb, EDGE_FALSE_VALUE);
- e->probability
- = profile_probability::guessed_always ().apply_scale (1, 8);
+ e->probability = profile_probability::guessed_always () / 8;
if (prev_bb == NULL)
set_immediate_dominator (CDI_DOMINATORS, this_bb, bb);
prev_bb = this_bb;
@@ -3533,7 +3531,7 @@ expand_omp_ordered_sink (gimple_stmt_iterator *gsi, struct omp_for_data *fd,
GSI_CONTINUE_LINKING);
gsi_insert_after (gsi, gimple_build_cond_empty (cond), GSI_NEW_STMT);
edge e3 = make_edge (e1->src, e2->dest, EDGE_FALSE_VALUE);
- e3->probability = profile_probability::guessed_always ().apply_scale (1, 8);
+ e3->probability = profile_probability::guessed_always () / 8;
e1->probability = e3->probability.invert ();
e1->flags = EDGE_TRUE_VALUE;
set_immediate_dominator (CDI_DOMINATORS, e2->dest, e1->src);
@@ -3687,7 +3685,7 @@ expand_omp_for_ordered_loops (struct omp_for_data *fd, tree *counts,
remove_edge (e1);
make_edge (body_bb, new_header, EDGE_FALLTHRU);
e3->flags = EDGE_FALSE_VALUE;
- e3->probability = profile_probability::guessed_always ().apply_scale (1, 8);
+ e3->probability = profile_probability::guessed_always () / 8;
e1 = make_edge (new_header, new_body, EDGE_TRUE_VALUE);
e1->probability = e3->probability.invert ();
@@ -5484,16 +5482,14 @@ expand_omp_for_static_nochunk (struct omp_region *region,
ep->probability = profile_probability::guessed_always ().apply_scale (3, 4);
ep = find_edge (entry_bb, second_bb);
ep->flags = EDGE_TRUE_VALUE;
- ep->probability = profile_probability::guessed_always ().apply_scale (1, 4);
+ ep->probability = profile_probability::guessed_always () / 4;
if (fourth_bb)
{
ep = make_edge (third_bb, fifth_bb, EDGE_FALSE_VALUE);
- ep->probability
- = profile_probability::guessed_always ().apply_scale (1, 2);
+ ep->probability = profile_probability::guessed_always () / 2;
ep = find_edge (third_bb, fourth_bb);
ep->flags = EDGE_TRUE_VALUE;
- ep->probability
- = profile_probability::guessed_always ().apply_scale (1, 2);
+ ep->probability = profile_probability::guessed_always () / 2;
ep = find_edge (fourth_bb, fifth_bb);
redirect_edge_and_branch (ep, sixth_bb);
}
@@ -5504,12 +5500,10 @@ expand_omp_for_static_nochunk (struct omp_region *region,
if (exit1_bb)
{
ep = make_edge (exit_bb, exit2_bb, EDGE_FALSE_VALUE);
- ep->probability
- = profile_probability::guessed_always ().apply_scale (1, 2);
+ ep->probability = profile_probability::guessed_always () / 2;
ep = find_edge (exit_bb, exit1_bb);
ep->flags = EDGE_TRUE_VALUE;
- ep->probability
- = profile_probability::guessed_always ().apply_scale (1, 2);
+ ep->probability = profile_probability::guessed_always () / 2;
ep = find_edge (exit1_bb, exit2_bb);
redirect_edge_and_branch (ep, exit3_bb);
}
@@ -10631,7 +10625,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
bool gate = ((flag_openacc != 0 || flag_openmp != 0
|| flag_openmp_simd != 0)
@@ -10678,12 +10672,18 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
return !(fun->curr_properties & PROP_gimple_eomp);
}
- virtual unsigned int execute (function *) { return execute_expand_omp (); }
- opt_pass * clone () { return new pass_expand_omp_ssa (m_ctxt); }
+ unsigned int execute (function *) final override
+ {
+ return execute_expand_omp ();
+ }
+ opt_pass * clone () final override
+ {
+ return new pass_expand_omp_ssa (m_ctxt);
+ }
}; // class pass_expand_omp_ssa
diff --git a/gcc/omp-general.h b/gcc/omp-general.h
index 7a94831..74e90e1 100644
--- a/gcc/omp-general.h
+++ b/gcc/omp-general.h
@@ -126,12 +126,12 @@ extern int oacc_get_ifn_dim_arg (const gimple *stmt);
enum omp_requires {
OMP_REQUIRES_ATOMIC_DEFAULT_MEM_ORDER = 0xf,
- OMP_REQUIRES_UNIFIED_ADDRESS = 0x10,
- OMP_REQUIRES_UNIFIED_SHARED_MEMORY = 0x20,
+ OMP_REQUIRES_UNIFIED_ADDRESS = GOMP_REQUIRES_UNIFIED_ADDRESS,
+ OMP_REQUIRES_UNIFIED_SHARED_MEMORY = GOMP_REQUIRES_UNIFIED_SHARED_MEMORY,
OMP_REQUIRES_DYNAMIC_ALLOCATORS = 0x40,
- OMP_REQUIRES_REVERSE_OFFLOAD = 0x80,
+ OMP_REQUIRES_REVERSE_OFFLOAD = GOMP_REQUIRES_REVERSE_OFFLOAD,
OMP_REQUIRES_ATOMIC_DEFAULT_MEM_ORDER_USED = 0x100,
- OMP_REQUIRES_TARGET_USED = 0x200
+ OMP_REQUIRES_TARGET_USED = GOMP_REQUIRES_TARGET_USED,
};
extern GTY(()) enum omp_requires omp_requires_mask;
diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc
index f976e3a..d73c165 100644
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -12701,6 +12701,11 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
gcc_unreachable ();
}
+ /* Ensure that requires map is written via output_offload_tables, even if only
+ 'target (enter/exit) data' is used in the translation unit. */
+ if (ENABLE_OFFLOADING && (omp_requires_mask & OMP_REQUIRES_TARGET_USED))
+ g->have_offload = true;
+
clauses = gimple_omp_target_clauses (stmt);
gimple_seq dep_ilist = NULL;
@@ -14697,7 +14702,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return execute_lower_omp (); }
+ unsigned int execute (function *) final override
+ {
+ return execute_lower_omp ();
+ }
}; // class pass_lower_omp
@@ -15005,11 +15013,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_openacc || flag_openmp || flag_openmp_simd;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return diagnose_omp_structured_block_errors ();
}
diff --git a/gcc/omp-oacc-kernels-decompose.cc b/gcc/omp-oacc-kernels-decompose.cc
index ec9b0fa..524060e 100644
--- a/gcc/omp-oacc-kernels-decompose.cc
+++ b/gcc/omp-oacc-kernels-decompose.cc
@@ -1615,12 +1615,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (flag_openacc
&& param_openacc_kernels == OPENACC_KERNELS_DECOMPOSE);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return omp_oacc_kernels_decompose ();
}
diff --git a/gcc/omp-oacc-neuter-broadcast.cc b/gcc/omp-oacc-neuter-broadcast.cc
index 81e3223..b617779 100644
--- a/gcc/omp-oacc-neuter-broadcast.cc
+++ b/gcc/omp-oacc-neuter-broadcast.cc
@@ -1945,7 +1945,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
if (!flag_openacc)
return false;
@@ -1961,7 +1961,7 @@ public:
return true;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_omp_oacc_neuter_broadcast ();
}
diff --git a/gcc/omp-offload.cc b/gcc/omp-offload.cc
index fcbe6cf..3a89119 100644
--- a/gcc/omp-offload.cc
+++ b/gcc/omp-offload.cc
@@ -2450,9 +2450,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_openacc; };
+ bool gate (function *) final override { return flag_openacc; };
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_oacc_loop_designation ();
}
@@ -2480,9 +2480,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_openacc; };
+ bool gate (function *) final override { return flag_openacc; };
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_oacc_device_lower ();
}
@@ -2714,13 +2714,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
return (!(fun->curr_properties & PROP_gimple_lomp_dev)
|| (flag_openmp
&& cgraph_node::get (fun->decl)->calls_declare_variant_alt));
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_omp_device_lower ();
}
@@ -2760,7 +2760,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
#ifdef ACCEL_COMPILER
return offloading_function_p (fun->decl);
@@ -2770,7 +2770,7 @@ public:
#endif
}
- virtual unsigned execute (function *);
+ unsigned execute (function *) final override;
};
/* Callback for walk_gimple_stmt used to scan for link var operands. */
diff --git a/gcc/omp-simd-clone.cc b/gcc/omp-simd-clone.cc
index 04fe03c..32649bc 100644
--- a/gcc/omp-simd-clone.cc
+++ b/gcc/omp-simd-clone.cc
@@ -1819,8 +1819,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return ipa_omp_simd_clone (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return ipa_omp_simd_clone ();
+ }
};
bool
diff --git a/gcc/opts.cc b/gcc/opts.cc
index 55859f5..54e57f3 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -1122,6 +1122,10 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
opts->x_flag_no_inline = 1;
}
+ /* At -O0 or -Og, turn __builtin_unreachable into a trap. */
+ if (!opts->x_optimize || opts->x_optimize_debug)
+ SET_OPTION_IF_UNSET (opts, opts_set, flag_unreachable_traps, true);
+
/* Pipelining of outer loops is only possible when general pipelining
capabilities are requested. */
if (!opts->x_flag_sel_sched_pipelining)
@@ -1210,7 +1214,9 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
/* Address sanitizers conflict with the thread sanitizer. */
report_conflicting_sanitizer_options (opts, loc, SANITIZE_THREAD,
- SANITIZE_ADDRESS | SANITIZE_HWADDRESS);
+ SANITIZE_ADDRESS);
+ report_conflicting_sanitizer_options (opts, loc, SANITIZE_THREAD,
+ SANITIZE_HWADDRESS);
/* The leak sanitizer conflicts with the thread sanitizer. */
report_conflicting_sanitizer_options (opts, loc, SANITIZE_LEAK,
SANITIZE_THREAD);
@@ -1232,6 +1238,18 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
error_at (loc, "%<-fsanitize-recover=%s%> is not supported",
sanitizer_opts[i].name);
+ /* Check -fsanitize-trap option. */
+ for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
+ if ((opts->x_flag_sanitize_trap & sanitizer_opts[i].flag)
+ && !sanitizer_opts[i].can_trap
+ /* Allow -fsanitize-trap=all or -fsanitize-trap=undefined
+ to set flag_sanitize_trap & SANITIZE_VPTR bit which will
+ effectively disable -fsanitize=vptr, just disallow
+ explicit -fsanitize-trap=vptr. */
+ && sanitizer_opts[i].flag != SANITIZE_VPTR)
+ error_at (loc, "%<-fsanitize-trap=%s%> is not supported",
+ sanitizer_opts[i].name);
+
/* When instrumenting the pointers, we don't want to remove
the null pointer checks. */
if (opts->x_flag_sanitize & (SANITIZE_NULL | SANITIZE_NONNULL_ATTRIBUTE
@@ -2020,48 +2038,50 @@ enable_fdo_optimizations (struct gcc_options *opts,
/* -f{,no-}sanitize{,-recover}= suboptions. */
const struct sanitizer_opts_s sanitizer_opts[] =
{
-#define SANITIZER_OPT(name, flags, recover) \
- { #name, flags, sizeof #name - 1, recover }
- SANITIZER_OPT (address, (SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS), true),
+#define SANITIZER_OPT(name, flags, recover, trap) \
+ { #name, flags, sizeof #name - 1, recover, trap }
+ SANITIZER_OPT (address, (SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS), true,
+ false),
SANITIZER_OPT (hwaddress, (SANITIZE_HWADDRESS | SANITIZE_USER_HWADDRESS),
- true),
+ true, false),
SANITIZER_OPT (kernel-address, (SANITIZE_ADDRESS | SANITIZE_KERNEL_ADDRESS),
- true),
+ true, false),
SANITIZER_OPT (kernel-hwaddress,
(SANITIZE_HWADDRESS | SANITIZE_KERNEL_HWADDRESS),
+ true, false),
+ SANITIZER_OPT (pointer-compare, SANITIZE_POINTER_COMPARE, true, false),
+ SANITIZER_OPT (pointer-subtract, SANITIZE_POINTER_SUBTRACT, true, false),
+ SANITIZER_OPT (thread, SANITIZE_THREAD, false, false),
+ SANITIZER_OPT (leak, SANITIZE_LEAK, false, false),
+ SANITIZER_OPT (shift, SANITIZE_SHIFT, true, true),
+ SANITIZER_OPT (shift-base, SANITIZE_SHIFT_BASE, true, true),
+ SANITIZER_OPT (shift-exponent, SANITIZE_SHIFT_EXPONENT, true, true),
+ SANITIZER_OPT (integer-divide-by-zero, SANITIZE_DIVIDE, true, true),
+ SANITIZER_OPT (undefined, SANITIZE_UNDEFINED, true, true),
+ SANITIZER_OPT (unreachable, SANITIZE_UNREACHABLE, false, true),
+ SANITIZER_OPT (vla-bound, SANITIZE_VLA, true, true),
+ SANITIZER_OPT (return, SANITIZE_RETURN, false, true),
+ SANITIZER_OPT (null, SANITIZE_NULL, true, true),
+ SANITIZER_OPT (signed-integer-overflow, SANITIZE_SI_OVERFLOW, true, true),
+ SANITIZER_OPT (bool, SANITIZE_BOOL, true, true),
+ SANITIZER_OPT (enum, SANITIZE_ENUM, true, true),
+ SANITIZER_OPT (float-divide-by-zero, SANITIZE_FLOAT_DIVIDE, true, true),
+ SANITIZER_OPT (float-cast-overflow, SANITIZE_FLOAT_CAST, true, true),
+ SANITIZER_OPT (bounds, SANITIZE_BOUNDS, true, true),
+ SANITIZER_OPT (bounds-strict, SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT, true,
true),
- SANITIZER_OPT (pointer-compare, SANITIZE_POINTER_COMPARE, true),
- SANITIZER_OPT (pointer-subtract, SANITIZE_POINTER_SUBTRACT, true),
- SANITIZER_OPT (thread, SANITIZE_THREAD, false),
- SANITIZER_OPT (leak, SANITIZE_LEAK, false),
- SANITIZER_OPT (shift, SANITIZE_SHIFT, true),
- SANITIZER_OPT (shift-base, SANITIZE_SHIFT_BASE, true),
- SANITIZER_OPT (shift-exponent, SANITIZE_SHIFT_EXPONENT, true),
- SANITIZER_OPT (integer-divide-by-zero, SANITIZE_DIVIDE, true),
- SANITIZER_OPT (undefined, SANITIZE_UNDEFINED, true),
- SANITIZER_OPT (unreachable, SANITIZE_UNREACHABLE, false),
- SANITIZER_OPT (vla-bound, SANITIZE_VLA, true),
- SANITIZER_OPT (return, SANITIZE_RETURN, false),
- SANITIZER_OPT (null, SANITIZE_NULL, true),
- SANITIZER_OPT (signed-integer-overflow, SANITIZE_SI_OVERFLOW, true),
- SANITIZER_OPT (bool, SANITIZE_BOOL, true),
- SANITIZER_OPT (enum, SANITIZE_ENUM, true),
- SANITIZER_OPT (float-divide-by-zero, SANITIZE_FLOAT_DIVIDE, true),
- SANITIZER_OPT (float-cast-overflow, SANITIZE_FLOAT_CAST, true),
- SANITIZER_OPT (bounds, SANITIZE_BOUNDS, true),
- SANITIZER_OPT (bounds-strict, SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT, true),
- SANITIZER_OPT (alignment, SANITIZE_ALIGNMENT, true),
- SANITIZER_OPT (nonnull-attribute, SANITIZE_NONNULL_ATTRIBUTE, true),
+ SANITIZER_OPT (alignment, SANITIZE_ALIGNMENT, true, true),
+ SANITIZER_OPT (nonnull-attribute, SANITIZE_NONNULL_ATTRIBUTE, true, true),
SANITIZER_OPT (returns-nonnull-attribute, SANITIZE_RETURNS_NONNULL_ATTRIBUTE,
- true),
- SANITIZER_OPT (object-size, SANITIZE_OBJECT_SIZE, true),
- SANITIZER_OPT (vptr, SANITIZE_VPTR, true),
- SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true),
- SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true),
- SANITIZER_OPT (shadow-call-stack, SANITIZE_SHADOW_CALL_STACK, false),
- SANITIZER_OPT (all, ~0U, true),
+ true, true),
+ SANITIZER_OPT (object-size, SANITIZE_OBJECT_SIZE, true, true),
+ SANITIZER_OPT (vptr, SANITIZE_VPTR, true, false),
+ SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true, true),
+ SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true, true),
+ SANITIZER_OPT (shadow-call-stack, SANITIZE_SHADOW_CALL_STACK, false, false),
+ SANITIZER_OPT (all, ~0U, true, true),
#undef SANITIZER_OPT
- { NULL, 0U, 0UL, false }
+ { NULL, 0U, 0UL, false, false }
};
/* -fzero-call-used-regs= suboptions. */
@@ -2114,7 +2134,7 @@ struct edit_distance_traits<const string_fragment &>
/* Given ARG, an unrecognized sanitizer option, return the best
matching sanitizer option, or NULL if there isn't one.
OPTS is array of candidate sanitizer options.
- CODE is OPT_fsanitize_ or OPT_fsanitize_recover_.
+ CODE is OPT_fsanitize_, OPT_fsanitize_recover_ or OPT_fsanitize_trap_.
VALUE is non-zero for the regular form of the option, zero
for the "no-" form (e.g. "-fno-sanitize-recover="). */
@@ -2139,6 +2159,13 @@ get_closest_sanitizer_option (const string_fragment &arg,
&& value)
continue;
+ /* For -fsanitize-trap= (and not -fno-sanitize-trap=),
+ don't offer the non-trapping options. */
+ if (code == OPT_fsanitize_trap_
+ && !opts[i].can_trap
+ && value)
+ continue;
+
bm.consider (opts[i].name);
}
return bm.get_best_meaningful_candidate ();
@@ -2183,10 +2210,13 @@ parse_sanitizer_options (const char *p, location_t loc, int scode,
if (complain)
error_at (loc, "%<-fsanitize=all%> option is not valid");
}
- else
+ else if (code == OPT_fsanitize_recover_)
flags |= ~(SANITIZE_THREAD | SANITIZE_LEAK
| SANITIZE_UNREACHABLE | SANITIZE_RETURN
| SANITIZE_SHADOW_CALL_STACK);
+ else /* if (code == OPT_fsanitize_trap_) */
+ flags |= (SANITIZE_UNDEFINED
+ | SANITIZE_UNDEFINED_NONDEFAULT);
}
else if (value)
{
@@ -2197,6 +2227,10 @@ parse_sanitizer_options (const char *p, location_t loc, int scode,
&& sanitizer_opts[i].flag == SANITIZE_UNDEFINED)
flags |= (SANITIZE_UNDEFINED
& ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN));
+ else if (code == OPT_fsanitize_trap_
+ && sanitizer_opts[i].flag == SANITIZE_VPTR)
+ error_at (loc, "%<-fsanitize-trap=%s%> is not supported",
+ sanitizer_opts[i].name);
else
flags |= sanitizer_opts[i].flag;
}
@@ -2215,6 +2249,8 @@ parse_sanitizer_options (const char *p, location_t loc, int scode,
const char *suffix;
if (code == OPT_fsanitize_recover_)
suffix = "-recover";
+ else if (code == OPT_fsanitize_trap_)
+ suffix = "-trap";
else
suffix = "";
@@ -2647,6 +2683,12 @@ common_handle_option (struct gcc_options *opts,
opts->x_flag_sanitize_recover, value, true);
break;
+ case OPT_fsanitize_trap_:
+ opts->x_flag_sanitize_trap
+ = parse_sanitizer_options (arg, loc, code,
+ opts->x_flag_sanitize_trap, value, true);
+ break;
+
case OPT_fasan_shadow_offset_:
/* Deferred. */
break;
@@ -2665,6 +2707,15 @@ common_handle_option (struct gcc_options *opts,
&= ~(SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT);
break;
+ case OPT_fsanitize_trap:
+ if (value)
+ opts->x_flag_sanitize_trap
+ |= (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT);
+ else
+ opts->x_flag_sanitize_trap
+ &= ~(SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT);
+ break;
+
case OPT_O:
case OPT_Os:
case OPT_Ofast:
@@ -2827,6 +2878,10 @@ common_handle_option (struct gcc_options *opts,
dc->show_cwe = value;
break;
+ case OPT_fdiagnostics_show_rules:
+ dc->show_rules = value;
+ break;
+
case OPT_fdiagnostics_path_format_:
dc->path_format = (enum diagnostic_path_format)value;
break;
diff --git a/gcc/opts.h b/gcc/opts.h
index a43ce66..73a96f3 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -473,6 +473,7 @@ extern const struct sanitizer_opts_s
unsigned int flag;
size_t len;
bool can_recover;
+ bool can_trap;
} sanitizer_opts[];
extern const struct zero_call_used_regs_opts_s
diff --git a/gcc/params.opt b/gcc/params.opt
index bcf1423..2f9c9cf 100644
--- a/gcc/params.opt
+++ b/gcc/params.opt
@@ -134,25 +134,6 @@ Maximum number of basic blocks before EVRP uses a sparse cache.
Common Joined UInteger Var(param_evrp_switch_limit) Init(50) Optimization Param
Maximum number of outgoing edges in a switch before EVRP will not process it.
--param=evrp-mode=
-Common Joined Var(param_evrp_mode) Enum(evrp_mode) Init(EVRP_MODE_RVRP_ONLY) Param Optimization
---param=evrp-mode=[legacy|ranger|legacy-first|ranger-first] Specifies the mode Early VRP should operate in.
-
-Enum
-Name(evrp_mode) Type(enum evrp_mode) UnknownError(unknown evrp mode %qs)
-
-EnumValue
-Enum(evrp_mode) String(legacy) Value(EVRP_MODE_EVRP_ONLY)
-
-EnumValue
-Enum(evrp_mode) String(ranger) Value(EVRP_MODE_RVRP_ONLY)
-
-EnumValue
-Enum(evrp_mode) String(legacy-first) Value(EVRP_MODE_EVRP_FIRST)
-
-EnumValue
-Enum(evrp_mode) String(ranger-first) Value(EVRP_MODE_RVRP_FIRST)
-
-param=fsm-scale-path-blocks=
Common Joined UInteger Var(param_fsm_scale_path_blocks) Init(3) IntegerRange(1, 10) Param Optimization
Scale factor to apply to the number of blocks in a threading path when comparing to the number of (scaled) statements.
diff --git a/gcc/passes.cc b/gcc/passes.cc
index 36e5b4a..78a07f8 100644
--- a/gcc/passes.cc
+++ b/gcc/passes.cc
@@ -417,13 +417,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Don't bother doing anything if the program has errors. */
return (!seen_error () && !in_lto_p);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_build_ssa_passes ();
}
@@ -451,7 +451,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Don't bother doing anything if the program has errors. */
return (!seen_error () && !in_lto_p);
@@ -480,7 +480,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Don't bother doing anything if the program has errors. */
return (!seen_error () && !in_lto_p);
@@ -531,7 +531,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize >= 1
/* Don't bother doing anything if the program has errors. */
@@ -571,7 +571,10 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize >= 1 && !optimize_debug; }
+ bool gate (function *) final override
+ {
+ return optimize >= 1 && !optimize_debug;
+ }
}; // class pass_all_optimizations
@@ -606,7 +609,10 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize >= 1 && optimize_debug; }
+ bool gate (function *) final override
+ {
+ return optimize >= 1 && optimize_debug;
+ }
}; // class pass_all_optimizations_g
@@ -641,7 +647,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Early return if there were errors. We can run afoul of our
consistency checks, and there's not really much point in fixing them. */
@@ -681,7 +687,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return reload_completed; }
+ bool gate (function *) final override { return reload_completed; }
}; // class pass_postreload
@@ -716,7 +722,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return reload_completed || targetm.no_register_allocation;
}
@@ -756,15 +762,15 @@ public:
{
}
- virtual bool
- gate (function *fun)
+ bool
+ gate (function *fun) final override
{
return flag_tree_slp_vectorize
&& (fun->pending_TODOs & PENDING_TODO_force_next_scalar_cleanup);
}
- virtual unsigned int
- execute (function *fun)
+ unsigned int
+ execute (function *fun) final override
{
fun->pending_TODOs &= ~PENDING_TODO_force_next_scalar_cleanup;
return 0;
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 4443b48..695e14a 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,7 @@
+2022-06-25 Xi Ruoyao <xry111@xry111.site>
+
+ * exgettext: Remove unneeded fgrep command.
+
2022-06-09 Joseph Myers <joseph@codesourcery.com>
* sv.po: Update.
diff --git a/gcc/po/exgettext b/gcc/po/exgettext
index 95cb0e7..43b2e81 100644
--- a/gcc/po/exgettext
+++ b/gcc/po/exgettext
@@ -99,7 +99,7 @@ echo "scanning for keywords, %e and %n strings..." >&2
lang_subdirs=`echo */config-lang.in */*/config-lang.in | sed -e 's|/config-lang\.in||g'`
{ for dir in "" c-family/ common/ common/config/ common/config/*/ \
config/ config/*/ \
- `find $lang_subdirs -type d -print | fgrep -v .svn | sort | sed -e 's|$|/|'`
+ `find $lang_subdirs -type d -print | sort | sed -e 's|$|/|'`
do for glob in '*.c' '*.cc' '*.h' '*.def'
do eval echo $dir$glob
done
diff --git a/gcc/postreload-gcse.cc b/gcc/postreload-gcse.cc
index fc63f0b..1c795b4 100644
--- a/gcc/postreload-gcse.cc
+++ b/gcc/postreload-gcse.cc
@@ -1447,13 +1447,16 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
return (optimize > 0 && flag_gcse_after_reload
&& optimize_function_for_speed_p (fun));
}
- virtual unsigned int execute (function *) { return rest_of_handle_gcse2 (); }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_gcse2 ();
+ }
}; // class pass_gcse2
diff --git a/gcc/postreload.cc b/gcc/postreload.cc
index 4a67d0d..d1c99fe 100644
--- a/gcc/postreload.cc
+++ b/gcc/postreload.cc
@@ -2339,9 +2339,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return (optimize > 0 && reload_completed); }
+ bool gate (function *) final override
+ {
+ return (optimize > 0 && reload_completed);
+ }
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_postreload_cse
diff --git a/gcc/predict.cc b/gcc/predict.cc
index 5734e4c..b36caa3 100644
--- a/gcc/predict.cc
+++ b/gcc/predict.cc
@@ -172,7 +172,7 @@ maybe_hot_count_p (struct function *fun, profile_count count)
if (node->frequency == NODE_FREQUENCY_EXECUTED_ONCE
&& count < (ENTRY_BLOCK_PTR_FOR_FN (fun)->count.apply_scale (2, 3)))
return false;
- if (count.apply_scale (param_hot_bb_frequency_fraction, 1)
+ if (count * param_hot_bb_frequency_fraction
< ENTRY_BLOCK_PTR_FOR_FN (fun)->count)
return false;
return true;
@@ -219,7 +219,7 @@ probably_never_executed (struct function *fun, profile_count count)
if (count.precise_p () && profile_status_for_fn (fun) == PROFILE_READ)
{
const int unlikely_frac = param_unlikely_bb_count_fraction;
- if (count.apply_scale (unlikely_frac, 1) >= profile_info->runs)
+ if (count * unlikely_frac >= profile_info->runs)
return false;
return true;
}
@@ -916,12 +916,12 @@ set_even_probabilities (basic_block bb,
else
{
profile_probability remainder = prob.invert ();
- remainder -= profile_probability::very_unlikely ()
- .apply_scale (unlikely_count, 1);
+ remainder -= (profile_probability::very_unlikely ()
+ * unlikely_count);
int count = nedges - unlikely_count - 1;
gcc_assert (count >= 0);
- e->probability = remainder.apply_scale (1, count);
+ e->probability = remainder / count;
}
}
else
@@ -940,7 +940,7 @@ set_even_probabilities (basic_block bb,
if (unlikely_edges != NULL && unlikely_edges->contains (e))
e->probability = profile_probability::very_unlikely ();
else
- e->probability = all.apply_scale (1, scale);
+ e->probability = all / scale;
}
else
e->probability = profile_probability::never ();
@@ -3619,7 +3619,7 @@ handle_missing_profiles (void)
if (call_count > 0
&& fn && fn->cfg
- && call_count.apply_scale (unlikely_frac, 1) >= profile_info->runs)
+ && call_count * unlikely_frac >= profile_info->runs)
{
drop_profile (node, call_count);
worklist.safe_push (node);
@@ -3684,8 +3684,7 @@ expensive_function_p (int threshold)
if (!ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.nonzero_p ())
return true;
- profile_count limit = ENTRY_BLOCK_PTR_FOR_FN
- (cfun)->count.apply_scale (threshold, 1);
+ profile_count limit = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count * threshold;
profile_count sum = profile_count::zero ();
FOR_EACH_BB_FN (bb, cfun)
{
@@ -4079,8 +4078,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_guess_branch_prob; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_guess_branch_prob; }
+ unsigned int execute (function *) final override;
}; // class pass_profile
@@ -4233,14 +4232,17 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_strip_predict_hints (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass * clone () final override
+ {
+ return new pass_strip_predict_hints (m_ctxt);
+ }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
early_p = param;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
private:
bool early_p;
diff --git a/gcc/profile-count.h b/gcc/profile-count.h
index 7c66f8d..141a882 100644
--- a/gcc/profile-count.h
+++ b/gcc/profile-count.h
@@ -185,7 +185,7 @@ public:
static profile_probability very_unlikely ()
{
/* Be consistent with PROB_VERY_UNLIKELY in predict.h. */
- profile_probability r = guessed_always ().apply_scale (1, 2000);
+ profile_probability r = guessed_always () / 2000;
r.m_val--;
return r;
}
@@ -193,14 +193,14 @@ public:
static profile_probability unlikely ()
{
/* Be consistent with PROB_VERY_LIKELY in predict.h. */
- profile_probability r = guessed_always ().apply_scale (1, 5);
+ profile_probability r = guessed_always () / 5;
r.m_val--;
return r;
}
static profile_probability even ()
{
- return guessed_always ().apply_scale (1, 2);
+ return guessed_always () / 2;
}
static profile_probability very_likely ()
@@ -600,6 +600,28 @@ public:
return initialized_p () && other.initialized_p () && m_val >= other.m_val;
}
+ profile_probability operator* (int64_t num) const
+ {
+ return apply_scale (num, 1);
+ }
+
+ profile_probability operator*= (int64_t num)
+ {
+ *this = apply_scale (num, 1);
+ return *this;
+ }
+
+ profile_probability operator/ (int64_t den) const
+ {
+ return apply_scale (1, den);
+ }
+
+ profile_probability operator/= (int64_t den)
+ {
+ *this = apply_scale (1, den);
+ return *this;
+ }
+
/* Get the value of the count. */
uint32_t value () const { return m_val; }
@@ -992,6 +1014,28 @@ public:
return ipa ().initialized_p () && ipa ().m_val >= (uint64_t) other;
}
+ profile_count operator* (int64_t num) const
+ {
+ return apply_scale (num, 1);
+ }
+
+ profile_count operator*= (int64_t num)
+ {
+ *this = apply_scale (num, 1);
+ return *this;
+ }
+
+ profile_count operator/ (int64_t den) const
+ {
+ return apply_scale (1, den);
+ }
+
+ profile_count operator/= (int64_t den)
+ {
+ *this = apply_scale (1, den);
+ return *this;
+ }
+
/* Return true when value is not zero and can be used for scaling.
This is different from *this > 0 because that requires counter to
be IPA. */
diff --git a/gcc/profile.cc b/gcc/profile.cc
index a67cce5..08af512 100644
--- a/gcc/profile.cc
+++ b/gcc/profile.cc
@@ -716,7 +716,7 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum)
FOR_EACH_EDGE (e, ei, bb->succs)
if (!(e->flags & (EDGE_COMPLEX | EDGE_FAKE)))
e->probability
- = profile_probability::guessed_always ().apply_scale (1, total);
+ = profile_probability::guessed_always () / total;
else
e->probability = profile_probability::never ();
}
@@ -724,8 +724,7 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum)
{
total += EDGE_COUNT (bb->succs);
FOR_EACH_EDGE (e, ei, bb->succs)
- e->probability
- = profile_probability::guessed_always ().apply_scale (1, total);
+ e->probability = profile_probability::guessed_always () / total;
}
if (bb->index >= NUM_FIXED_BLOCKS
&& block_ends_with_condjump_p (bb)
diff --git a/gcc/read-md.h b/gcc/read-md.h
index 34a64fa..7d8cd4a 100644
--- a/gcc/read-md.h
+++ b/gcc/read-md.h
@@ -330,7 +330,7 @@ class noop_reader : public md_reader
noop_reader () : md_reader (false) {}
/* A dummy implementation which skips unknown directives. */
- void handle_unknown_directive (file_location, const char *);
+ void handle_unknown_directive (file_location, const char *) override;
};
/* An md_reader subclass that actually handles full hierarchical
diff --git a/gcc/read-rtl-function.cc b/gcc/read-rtl-function.cc
index eacbe4c..3bcff15 100644
--- a/gcc/read-rtl-function.cc
+++ b/gcc/read-rtl-function.cc
@@ -188,7 +188,7 @@ class fixup_insn_uid : public operand_fixup
m_insn_uid (insn_uid)
{}
- void apply (function_reader *reader) const;
+ void apply (function_reader *reader) const final override;
private:
int m_insn_uid;
@@ -206,7 +206,7 @@ class fixup_note_insn_basic_block : public operand_fixup
m_bb_idx (bb_idx)
{}
- void apply (function_reader *reader) const;
+ void apply (function_reader *reader) const final override;
private:
int m_bb_idx;
@@ -225,7 +225,7 @@ class fixup_expr : public fixup
~fixup_expr () { free (m_desc); }
- void apply (function_reader *reader) const;
+ void apply (function_reader *reader) const final override;
private:
char *m_desc;
diff --git a/gcc/recog.cc b/gcc/recog.cc
index cd2410a..dac172b 100644
--- a/gcc/recog.cc
+++ b/gcc/recog.cc
@@ -4358,9 +4358,12 @@ public:
/* opt_pass methods: */
/* The epiphany backend creates a second instance of this pass, so we need
a clone method. */
- opt_pass * clone () { return new pass_peephole2 (m_ctxt); }
- virtual bool gate (function *) { return (optimize > 0 && flag_peephole2); }
- virtual unsigned int execute (function *)
+ opt_pass * clone () final override { return new pass_peephole2 (m_ctxt); }
+ bool gate (function *) final override
+ {
+ return (optimize > 0 && flag_peephole2);
+ }
+ unsigned int execute (function *) final override
{
return rest_of_handle_peephole2 ();
}
@@ -4400,8 +4403,11 @@ public:
/* opt_pass methods: */
/* The epiphany backend creates a second instance of this pass, so
we need a clone method. */
- opt_pass * clone () { return new pass_split_all_insns (m_ctxt); }
- virtual unsigned int execute (function *)
+ opt_pass * clone () final override
+ {
+ return new pass_split_all_insns (m_ctxt);
+ }
+ unsigned int execute (function *) final override
{
split_all_insns ();
return 0;
@@ -4440,13 +4446,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* If optimizing, then go ahead and split insns now. */
return optimize > 0;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
split_all_insns ();
return 0;
@@ -4495,12 +4501,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return enable_split_before_sched2 ();
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
split_all_insns ();
return 0;
@@ -4539,8 +4545,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
split_all_insns ();
return 0;
@@ -4598,7 +4604,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* The placement of the splitting that we do for shorten_branches
depends on whether regstack is used by the target or not. */
@@ -4609,7 +4615,7 @@ public:
#endif
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return split_all_insns_noflow ();
}
diff --git a/gcc/ree.cc b/gcc/ree.cc
index de4f18e..da64ef6 100644
--- a/gcc/ree.cc
+++ b/gcc/ree.cc
@@ -1403,8 +1403,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return (optimize > 0 && flag_ree); }
- virtual unsigned int execute (function *) { return rest_of_handle_ree (); }
+ bool gate (function *) final override { return (optimize > 0 && flag_ree); }
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_ree ();
+ }
}; // class pass_ree
diff --git a/gcc/reg-stack.cc b/gcc/reg-stack.cc
index 5afeadf..fd03250 100644
--- a/gcc/reg-stack.cc
+++ b/gcc/reg-stack.cc
@@ -3413,7 +3413,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
#ifdef STACK_REGS
return true;
@@ -3468,7 +3468,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_stack_regs ();
}
diff --git a/gcc/regcprop.cc b/gcc/regcprop.cc
index 1fdc367..ce9d32a 100644
--- a/gcc/regcprop.cc
+++ b/gcc/regcprop.cc
@@ -1293,12 +1293,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize > 0 && (flag_cprop_registers));
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_cprop_hardreg
@@ -1383,7 +1383,9 @@ pass_cprop_hardreg::execute (function *fun)
auto_sbitmap visited (last_basic_block_for_fn (fun));
bitmap_clear (visited);
- auto_vec<int> worklist;
+ auto_vec<int> worklist1, worklist2;
+ auto_vec<int> *curr = &worklist1;
+ auto_vec<int> *next = &worklist2;
bool any_debug_changes = false;
/* We need accurate notes. Earlier passes such as if-conversion may
@@ -1404,7 +1406,7 @@ pass_cprop_hardreg::execute (function *fun)
FOR_EACH_BB_FN (bb, fun)
{
if (cprop_hardreg_bb (bb, all_vd, visited))
- worklist.safe_push (bb->index);
+ curr->safe_push (bb->index);
if (all_vd[bb->index].n_debug_insn_changes)
any_debug_changes = true;
}
@@ -1416,16 +1418,22 @@ pass_cprop_hardreg::execute (function *fun)
if (MAY_HAVE_DEBUG_BIND_INSNS && any_debug_changes)
cprop_hardreg_debug (fun, all_vd);
- /* Second pass if we've changed anything, only for the bbs where we have
- changed anything though. */
- if (!worklist.is_empty ())
+ /* Repeat pass up to PASSES times, but only processing basic blocks
+ that have changed on the previous iteration. CURR points to the
+ current worklist, and each iteration populates the NEXT worklist,
+ swapping pointers after each cycle. */
+
+ unsigned int passes = optimize > 1 ? 3 : 2;
+ for (unsigned int pass = 2; pass <= passes && !curr->is_empty (); pass++)
{
any_debug_changes = false;
bitmap_clear (visited);
- for (int index : worklist)
+ next->truncate (0);
+ for (int index : *curr)
{
bb = BASIC_BLOCK_FOR_FN (fun, index);
- cprop_hardreg_bb (bb, all_vd, visited);
+ if (cprop_hardreg_bb (bb, all_vd, visited))
+ next->safe_push (bb->index);
if (all_vd[bb->index].n_debug_insn_changes)
any_debug_changes = true;
}
@@ -1433,6 +1441,7 @@ pass_cprop_hardreg::execute (function *fun)
df_analyze ();
if (MAY_HAVE_DEBUG_BIND_INSNS && any_debug_changes)
cprop_hardreg_debug (fun, all_vd);
+ std::swap (curr, next);
}
free (all_vd);
diff --git a/gcc/reginfo.cc b/gcc/reginfo.cc
index 2ab7bbb..705779d 100644
--- a/gcc/reginfo.cc
+++ b/gcc/reginfo.cc
@@ -953,7 +953,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return reginfo_init (); }
+ unsigned int execute (function *) final override { return reginfo_init (); }
}; // class pass_reginfo_init
diff --git a/gcc/regrename.cc b/gcc/regrename.cc
index f651351..b15eb80 100644
--- a/gcc/regrename.cc
+++ b/gcc/regrename.cc
@@ -2012,12 +2012,15 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize > 0 && (flag_rename_registers));
}
- virtual unsigned int execute (function *) { return regrename_optimize (); }
+ unsigned int execute (function *) final override
+ {
+ return regrename_optimize ();
+ }
}; // class pass_regrename
diff --git a/gcc/reorg.cc b/gcc/reorg.cc
index 7624f51..07b2045 100644
--- a/gcc/reorg.cc
+++ b/gcc/reorg.cc
@@ -3866,8 +3866,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return rest_of_handle_delay_slots ();
}
@@ -3917,12 +3917,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return targetm.machine_dependent_reorg != 0;
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
targetm.machine_dependent_reorg ();
return 0;
diff --git a/gcc/rtl-ssa/blocks.cc b/gcc/rtl-ssa/blocks.cc
index 959fad8..6b03dd0 100644
--- a/gcc/rtl-ssa/blocks.cc
+++ b/gcc/rtl-ssa/blocks.cc
@@ -85,8 +85,8 @@ class function_info::bb_walker : public dom_walker
{
public:
bb_walker (function_info *, build_info &);
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
private:
// Information about the function we're building.
diff --git a/gcc/sancov.cc b/gcc/sancov.cc
index 9c10252..052fa4e 100644
--- a/gcc/sancov.cc
+++ b/gcc/sancov.cc
@@ -308,17 +308,17 @@ public:
static const pass_data data;
opt_pass *
- clone ()
+ clone () final override
{
return new pass_sancov<O0> (m_ctxt);
}
- virtual bool
- gate (function *fun)
+ bool
+ gate (function *fun) final override
{
return sanitize_coverage_p (fun->decl) && (!O0 || !optimize);
}
- virtual unsigned int
- execute (function *fun)
+ unsigned int
+ execute (function *fun) final override
{
return sancov_pass (fun);
}
diff --git a/gcc/sanopt.cc b/gcc/sanopt.cc
index 125e0c9..e9d188d 100644
--- a/gcc/sanopt.cc
+++ b/gcc/sanopt.cc
@@ -392,11 +392,11 @@ maybe_optimize_ubsan_null_ifn (class sanopt_ctx *ctx, gimple *stmt)
stmts have same location. */
else if (integer_zerop (align))
remove = (flag_sanitize_recover & SANITIZE_NULL) == 0
- || flag_sanitize_undefined_trap_on_error
+ || (flag_sanitize_trap & SANITIZE_NULL) != 0
|| gimple_location (g) == gimple_location (stmt);
else if (tree_int_cst_le (cur_align, align))
remove = (flag_sanitize_recover & SANITIZE_ALIGNMENT) == 0
- || flag_sanitize_undefined_trap_on_error
+ || (flag_sanitize_trap & SANITIZE_ALIGNMENT) != 0
|| gimple_location (g) == gimple_location (stmt);
if (!remove && gimple_bb (g) == gimple_bb (stmt)
@@ -942,8 +942,16 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_sanitize; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override
+ {
+ /* SANITIZE_RETURN is handled in the front-end. When trapping,
+ SANITIZE_UNREACHABLE is handled by builtin_decl_unreachable. */
+ unsigned int mask = SANITIZE_RETURN;
+ if (flag_sanitize_trap & SANITIZE_UNREACHABLE)
+ mask |= SANITIZE_UNREACHABLE;
+ return flag_sanitize & ~mask;
+ }
+ unsigned int execute (function *) final override;
}; // class pass_sanopt
diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc
index a0dfdb7..0dc2a8f 100644
--- a/gcc/sched-rgn.cc
+++ b/gcc/sched-rgn.cc
@@ -3779,7 +3779,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
#ifdef INSN_SCHEDULING
return flag_live_range_shrinkage;
@@ -3788,7 +3788,7 @@ public:
#endif
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return rest_of_handle_live_range_shrinkage ();
}
@@ -3826,8 +3826,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return rest_of_handle_sched (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
+ {
+ return rest_of_handle_sched ();
+ }
}; // class pass_sched
@@ -3872,8 +3875,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return rest_of_handle_sched2 ();
}
@@ -3922,8 +3925,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return rest_of_handle_sched_fusion ();
}
diff --git a/gcc/stack-ptr-mod.cc b/gcc/stack-ptr-mod.cc
index b14bef9..4ccbb1c 100644
--- a/gcc/stack-ptr-mod.cc
+++ b/gcc/stack-ptr-mod.cc
@@ -71,7 +71,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_stack_ptr_mod
diff --git a/gcc/statistics.cc b/gcc/statistics.cc
index 0d596e3..01ad353 100644
--- a/gcc/statistics.cc
+++ b/gcc/statistics.cc
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h"
#include "context.h"
#include "pass_manager.h"
+#include "tree.h"
static int statistics_dump_nr;
static dump_flags_t statistics_dump_flags;
@@ -113,6 +114,22 @@ curr_statistics_hash (void)
return statistics_hashes[idx];
}
+/* Helper function to return asmname or name of FN
+ depending on whether asmname option is set. */
+
+static const char *
+get_function_name (struct function *fn)
+{
+ if ((statistics_dump_flags & TDF_ASMNAME)
+ && fn && DECL_ASSEMBLER_NAME_SET_P (fn->decl))
+ {
+ tree asmname = decl_assembler_name (fn->decl);
+ if (asmname)
+ return IDENTIFIER_POINTER (asmname);
+ }
+ return function_name (fn);
+}
+
/* Helper for statistics_fini_pass. Print the counter difference
since the last dump for the pass dump files. */
@@ -152,7 +169,7 @@ statistics_fini_pass_2 (statistics_counter **slot,
current_pass->static_pass_number,
current_pass->name,
counter->id, counter->val,
- current_function_name (),
+ get_function_name (cfun),
count);
else
fprintf (statistics_dump_file,
@@ -160,7 +177,7 @@ statistics_fini_pass_2 (statistics_counter **slot,
current_pass->static_pass_number,
current_pass->name,
counter->id,
- current_function_name (),
+ get_function_name (cfun),
count);
counter->prev_dumped_count = counter->count;
return 1;
@@ -329,7 +346,7 @@ statistics_counter_event (struct function *fn, const char *id, int incr)
current_pass ? current_pass->static_pass_number : -1,
current_pass ? current_pass->name : "none",
id,
- function_name (fn),
+ get_function_name (fn),
incr);
}
@@ -359,5 +376,5 @@ statistics_histogram_event (struct function *fn, const char *id, int val)
current_pass->static_pass_number,
current_pass->name,
id, val,
- function_name (fn));
+ get_function_name (fn));
}
diff --git a/gcc/stmt.cc b/gcc/stmt.cc
index ea78a50..11cc70f 100644
--- a/gcc/stmt.cc
+++ b/gcc/stmt.cc
@@ -822,9 +822,8 @@ emit_case_dispatch_table (tree index_expr, tree index_type,
through the indirect jump or the direct conditional jump
before that. Split the probability of reaching the
default label among these two jumps. */
- new_default_prob
- = conditional_probability (default_prob.apply_scale (1, 2), base);
- default_prob = default_prob.apply_scale (1, 2);
+ new_default_prob = conditional_probability (default_prob / 2, base);
+ default_prob /= 2;
base -= default_prob;
}
else
diff --git a/gcc/stor-layout.cc b/gcc/stor-layout.cc
index 765f22f6..88923c4 100644
--- a/gcc/stor-layout.cc
+++ b/gcc/stor-layout.cc
@@ -1781,7 +1781,12 @@ finalize_record_size (record_layout_info rli)
&& simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
&& input_location != BUILTINS_LOCATION
&& !TYPE_ARTIFICIAL (rli->t))
- warning (OPT_Wpadded, "padding struct size to alignment boundary");
+ {
+ tree pad_size
+ = size_binop (MINUS_EXPR, TYPE_SIZE_UNIT (rli->t), unpadded_size_unit);
+ warning (OPT_Wpadded,
+ "padding struct size to alignment boundary with %E bytes", pad_size);
+ }
if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
&& TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
diff --git a/gcc/store-motion.cc b/gcc/store-motion.cc
index 0f70870..b61c068 100644
--- a/gcc/store-motion.cc
+++ b/gcc/store-motion.cc
@@ -1243,8 +1243,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *)
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override
{
return execute_rtl_store_motion ();
}
diff --git a/gcc/symtab-thunks.cc b/gcc/symtab-thunks.cc
index b1d9c5d..b043970 100644
--- a/gcc/symtab-thunks.cc
+++ b/gcc/symtab-thunks.cc
@@ -579,11 +579,11 @@ expand_thunk (cgraph_node *node, bool output_asm_thunks,
adjustment, because that's why we're emitting a
thunk. */
then_bb = create_basic_block (NULL, bb);
- then_bb->count = cfg_count - cfg_count.apply_scale (1, 16);
+ then_bb->count = cfg_count - cfg_count / 16;
return_bb = create_basic_block (NULL, then_bb);
return_bb->count = cfg_count;
else_bb = create_basic_block (NULL, else_bb);
- else_bb->count = cfg_count.apply_scale (1, 16);
+ else_bb->count = cfg_count / 16;
add_bb_to_loop (then_bb, bb->loop_father);
add_bb_to_loop (return_bb, bb->loop_father);
add_bb_to_loop (else_bb, bb->loop_father);
@@ -594,11 +594,9 @@ expand_thunk (cgraph_node *node, bool output_asm_thunks,
NULL_TREE, NULL_TREE);
gsi_insert_after (&bsi, stmt, GSI_NEW_STMT);
e = make_edge (bb, then_bb, EDGE_TRUE_VALUE);
- e->probability = profile_probability::guessed_always ()
- .apply_scale (1, 16);
+ e->probability = profile_probability::guessed_always () / 16;
e = make_edge (bb, else_bb, EDGE_FALSE_VALUE);
- e->probability = profile_probability::guessed_always ()
- .apply_scale (1, 16);
+ e->probability = profile_probability::guessed_always () / 16;
make_single_succ_edge (return_bb,
EXIT_BLOCK_PTR_FOR_FN (cfun), 0);
make_single_succ_edge (then_bb, return_bb, EDGE_FALLTHRU);
diff --git a/gcc/system.h b/gcc/system.h
index 67158b7..f8d42ff 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -753,6 +753,10 @@ extern int vsnprintf (char *, size_t, const char *, va_list);
#endif
#endif
+#ifdef INCLUDE_PTHREAD_H
+#include <pthread.h>
+#endif
+
#ifdef INCLUDE_ISL
#ifdef HAVE_isl
#include <isl/options.h>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5cdb390..2030900 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,843 @@
+2022-07-09 Vit Kabele <vit.kabele@sysgo.com>
+
+ * c-c++-common/Wpadded.c: New test.
+
+2022-07-09 Sam Feifer <sfeifer@redhat.com>
+
+ PR tree-optimization/98304
+ * gcc.c-torture/execute/pr98304-2.c: New test.
+ * gcc.dg/pr98304-1.c: New test.
+
+2022-07-09 Andrew Pinski <apinski@marvell.com>
+
+ PR tree-optimization/106087
+ * gcc.c-torture/compile/inline-asm-1.c: New test.
+
+2022-07-08 Martin Jambor <mjambor@suse.cz>
+
+ PR testsuite/106216
+ * gcc.dg/tree-ssa/alias-access-path-13.c (union foo): Replace a long
+ int field with a struct that is larger than an int also on 32bit
+ platforms.
+
+2022-07-08 Lewis Hyatt <lhyatt@gmail.com>
+
+ PR preprocessor/91733
+ * c-c++-common/pr91733.c: New test.
+
+2022-07-08 Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/106132
+ * c-c++-common/hwasan/arguments-3.c: Cover new ICE.
+
+2022-07-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106226
+ * gfortran.dg/pr106226.f: New testcase.
+
+2022-07-08 Tamar Christina <tamar.christina@arm.com>
+
+ PR tree-optimization/106063
+ * gcc.dg/pr106063.c: New test.
+
+2022-07-08 Tamar Christina <tamar.christina@arm.com>
+
+ * g++.target/aarch64/complex-init.C: New test.
+
+2022-07-08 Haochen Jiang <haochen.jiang@intel.com>
+
+ PR target/106180
+ * g++.target/i386/pr106180-1.C: New test.
+
+2022-07-08 Lulu Cheng <chenglulu@loongson.cn>
+
+ * gcc.target/loongarch/prolog-opt.c: New test.
+
+2022-07-07 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/105956
+ * g++.dg/cpp0x/variadic183.C: New test.
+
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ PR analyzer/106225
+ * gcc.dg/analyzer/taint-divisor-1.c: Add test coverage for various
+ correct and incorrect checks against zero.
+
+2022-07-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/87729
+ * g++.dg/warn/Woverloaded-virt3.C: New test.
+
+2022-07-07 Richard Biener <rguenther@suse.de>
+
+ PR target/106219
+ * g++.dg/pr106219.C: New testcase.
+
+2022-07-07 Jonathan Wakely <jwakely@redhat.com>
+
+ * gcc.target/powerpc/ppc-fortran/pr80108-1.f90: Change
+ -mfloat128-type to -mfloat128.
+
+2022-07-06 Lewis Hyatt <lhyatt@gmail.com>
+
+ PR preprocessor/53920
+ PR c++/53431
+ * c-c++-common/pragma-diag-11.c: New test.
+ * c-c++-common/pragma-diag-12.c: New test.
+ * c-c++-common/pragma-diag-13.c: New test.
+
+2022-07-06 Immad Mir <mirimmad@outlook.com>
+
+ * gcc.dg/analyzer/fd-4.c: Add a new testcase to demonstrate
+ passsing of a closed file descriptor to a function that does
+ not emit any warning.
+
+2022-07-06 Immad Mir <mirimmad@outlook.com>
+
+ * gcc.dg/analyzer/fd-4.c (test_3): change the message note to conform to the
+ changes in analyzer/sm-fd.cc
+ (test_4): Likewise.
+
+2022-07-06 David Malcolm <dmalcolm@redhat.com>
+
+ PR analyzer/106204
+ * gcc.dg/analyzer/torture/uninit-pr106204.c: New test.
+ * gcc.dg/analyzer/uninit-pr106204.c: New test.
+
+2022-07-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/106179
+ PR c++/106024
+ * g++.dg/template/operator16.C: New test.
+
+2022-07-05 Marek Polacek <polacek@redhat.com>
+
+ PR c++/105626
+ * g++.dg/warn/Wformat-char8_t-1.C: New test.
+
+2022-07-05 Roger Sayle <roger@nextmovesoftware.com>
+
+ * gcc.target/i386/testnot-3.c: New test case.
+
+2022-07-05 Roger Sayle <roger@nextmovesoftware.com>
+ Hongtao Liu <hongtao.liu@intel.com>
+
+ * gcc.target/i386/ssse3-palignr-2.c: New test case.
+
+2022-07-05 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ PR rtl-optimization/96692
+ * gcc.target/i386/bmi-andn-4.c: New test case.
+
+2022-07-05 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/modules/loc-prune-1.C: Adjust.
+ * g++.dg/modules/loc-prune-4.C: New.
+ * g++.dg/modules/pr98718_a.C: Adjust.
+ * g++.dg/modules/pr98718_b.C: Adjust.
+ * g++.dg/modules/pr99072.H: Adjust.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106198
+ * gcc.dg/pr106198.c: New testcase.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106196
+ * gcc.dg/torture/pr106196.c: New testcase.
+
+2022-07-05 Alexandre Oliva <oliva@adacore.com>
+
+ * lib/target-supports.exp (check_effective_target_two_plus_gigs):
+ Fix array element type. Reported by Hans-Peter Nilsson.
+
+2022-07-05 Piotr Trojanek <trojanek@adacore.com>
+
+ * gnat.dg/renaming1.adb: Update WITH clause.
+ * gnat.dg/renaming1.ads: Likewise.
+ * gnat.dg/warn29.adb: Likewise.
+
+2022-07-05 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.dg/vect/vect-reduc-dot-9.c: Reduce target requirements
+ from i8mm to dotprod.
+ * gcc.dg/vect/vect-reduc-dot-10.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-11.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-12.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-13.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-14.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-15.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-16.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-17.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-18.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-19.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-20.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-21.c: Likewise.
+ * gcc.dg/vect/vect-reduc-dot-22.c: Likewise.
+
+2022-07-05 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106182
+ * gcc.dg/torture/pr106182.c: New testcase.
+
+2022-07-05 Hans-Peter Nilsson <hp@axis.com>
+
+ * gcc.dg/analyzer/allocation-size-1.c,
+ gcc.dg/analyzer/allocation-size-2.c,
+ gcc.dg/analyzer/allocation-size-3.c,
+ gcc.dg/analyzer/allocation-size-4.c,
+ gcc.dg/analyzer/allocation-size-5.c: Handle int32_t being "long int".
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * c-c++-common/gomp/linear-4.c: New test.
+ * gfortran.dg/gomp/linear-2.f90: New test.
+ * gfortran.dg/gomp/linear-3.f90: New test.
+ * gfortran.dg/gomp/linear-4.f90: New test.
+ * gfortran.dg/gomp/linear-5.f90: New test.
+ * gfortran.dg/gomp/linear-6.f90: New test.
+ * gfortran.dg/gomp/linear-7.f90: New test.
+ * gfortran.dg/gomp/linear-8.f90: New test.
+
+2022-07-04 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/105860
+ * gcc.dg/tree-ssa/alias-access-path-13.c: New test.
+ * gcc.dg/tree-ssa/pr105860.c: Likewise.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-c++-common/gomp/requires-4.c: Update dg-*.
+ * c-c++-common/gomp/reverse-offload-1.c: Likewise.
+ * c-c++-common/gomp/target-device-ancestor-2.c: Likewise.
+ * c-c++-common/gomp/target-device-ancestor-3.c: Likewise.
+ * c-c++-common/gomp/target-device-ancestor-4.c: Likewise.
+ * c-c++-common/gomp/target-device-ancestor-5.c: Likewise.
+ * gfortran.dg/gomp/target-device-ancestor-3.f90: Likewise.
+ * gfortran.dg/gomp/target-device-ancestor-4.f90: Likewise.
+ * gfortran.dg/gomp/target-device-ancestor-5.f90: Likewise.
+ * gfortran.dg/gomp/target-device-ancestor-2.f90: Likewise. Move
+ post-FE checks to ...
+ * gfortran.dg/gomp/target-device-ancestor-2a.f90: ... this new file.
+ * gfortran.dg/gomp/requires-8.f90: Update as we don't regard
+ 'declare target' for the 'requires' usage requirement.
+
+2022-07-04 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106055
+ * gcc.dg/graphite/pr106055.c: New testcase.
+
+2022-07-04 Haochen Jiang <haochen.jiang@intel.com>
+
+ PR target/43618
+ * gcc.target/i386/pr43618-1.c: New test.
+
+2022-07-03 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/106022
+ * gcc.target/i386/pr106022-1.c: New test.
+ * gcc.target/i386/pr106022-2.c: Likewise.
+ * gcc.target/i386/pr106022-3.c: Likewise.
+ * gcc.target/i386/pr106022-4.c: Likewise.
+
+2022-07-03 Xi Ruoyao <xry111@xry111.site>
+ Lulu Cheng <chenglulu@loongson.cn>
+
+ * gcc.c-torture/execute/20101011-1.c (dg-additional-options):
+ add -mcheck-zero-division for LoongArch targets.
+
+2022-07-03 Tim Lange <mail@tim-lange.me>
+
+ * gcc.dg/analyzer/allocation-size-1.c: Use fixed-length types.
+ * gcc.dg/analyzer/allocation-size-2.c: Likewise.
+ * gcc.dg/analyzer/allocation-size-3.c: Likewise.
+ * gcc.dg/analyzer/allocation-size-4.c: Likewise.
+ * gcc.dg/analyzer/allocation-size-5.c: Likewise.
+
+2022-07-03 Ian Lance Taylor <iant@golang.org>
+
+ * g++.dg/torture/except-1.C: New test.
+
+2022-07-02 Tim Lange <mail@tim-lange.me>
+
+ PR analyzer/105900
+ * gcc.dg/analyzer/pr96639.c: Changed buffer size to omit warning.
+ * gcc.dg/analyzer/allocation-size-1.c: New test.
+ * gcc.dg/analyzer/allocation-size-2.c: New test.
+ * gcc.dg/analyzer/allocation-size-3.c: New test.
+ * gcc.dg/analyzer/allocation-size-4.c: New test.
+ * gcc.dg/analyzer/allocation-size-5.c: New test.
+
+2022-07-02 Immad Mir <mirimmad17@gmail.com>
+
+ PR analyzer/106003
+ * gcc.dg/analyzer/fd-1.c: New test.
+ * gcc.dg/analyzer/fd-2.c: New test.
+ * gcc.dg/analyzer/fd-3.c: New test.
+ * gcc.dg/analyzer/fd-4.c: New test.
+
+2022-07-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/105550
+ * g++.dg/cpp1y/nsdmi-aggr16.C: Remove FIXME.
+ * g++.dg/cpp1y/nsdmi-aggr17.C: Remove FIXME.
+ * g++.dg/cpp0x/constexpr-elision1.C: New test.
+ * g++.dg/cpp1y/constexpr-elision1.C: New test.
+
+2022-07-01 Tobias Burnus <tobias@codesourcery.com>
+
+ * c-c++-common/gomp/target-data-2.c: New test.
+ * c-c++-common/gomp/target-data-3.c: New test.
+ * gfortran.dg/gomp/target-data-1.f90: New test.
+ * gfortran.dg/gomp/target-data-2.f90: New test.
+
+2022-07-01 Marek Polacek <polacek@redhat.com>
+
+ PR c++/106111
+ * g++.dg/cpp0x/keywords1.C: New test.
+ * g++.dg/cpp2a/keywords1.C: New test.
+
+2022-07-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/106024
+ * g++.dg/cpp2a/lambda-generic10.C: New test.
+
+2022-07-01 Kito Cheng <kito.cheng@sifive.com>
+
+ Revert:
+ 2022-06-30 Kito Cheng <kito.cheng@sifive.com>
+
+ PR testsuite/102690
+ * g++.dg/warn/Warray-bounds-16.C: XFAIL only on lp64 for the
+ warning.
+
+2022-07-01 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR target/106122
+ * gcc.target/i386/pr106122.c: New test case.
+
+2022-07-01 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106131
+ * g++.dg/torture/pr106131.C: New testcase.
+
+2022-07-01 Martin Liska <mliska@suse.cz>
+
+ PR tree-optimization/106126
+ * gcc.dg/tree-ssa/pr106126.c: New test.
+
+2022-06-30 Harald Anlauf <anlauf@gmx.de>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/103137
+ PR fortran/103138
+ PR fortran/103693
+ PR fortran/105243
+ * gfortran.dg/class_58.f90: Fix test.
+ * gfortran.dg/class_73.f90: New test.
+
+2022-06-30 Jonathan Wakely <jwakely@redhat.com>
+
+ * g++.dg/spellcheck-stdlib.C: Check <ctime> types and functions.
+
+2022-06-30 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/modules/inext-1.H: Check include-next happened.
+
+2022-06-30 Roger Sayle <roger@nextmovesoftware.com>
+ Uroš Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/xchg-3.c: New test case.
+
+2022-06-30 Kito Cheng <kito.cheng@sifive.com>
+
+ PR testsuite/102690
+ * g++.dg/warn/Warray-bounds-16.C: XFAIL only on lp64 for the
+ warning.
+
+2022-06-30 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/106114
+ * gcc.dg/pr106114.c: New.
+
+2022-06-30 Antoni Boucher <bouanto@zoho.com>
+
+ PR target/106095
+ * gcc.target/i386/pr106095.c: Add test using those AVX builtins.
+
+2022-06-29 Antoni Boucher <bouanto@zoho.com>
+
+ PR jit/105812
+ * jit.dg/test-asm.cc: Add include missing to make the test pass.
+ * jit.dg/test-pr105812-bool-operations.c: New test.
+
+2022-06-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/106139
+ * gdc.dg/pr106139a.d: New test.
+ * gdc.dg/pr106139b.d: New test.
+ * gdc.dg/pr106139c.d: New test.
+ * gdc.dg/pr106139d.d: New test.
+
+2022-06-29 Harald Anlauf <anlauf@gmx.de>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/106121
+ * gfortran.dg/extends_type_of_4.f90: New test.
+
+2022-06-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/106112
+ * gcc.dg/torture/pr106112.c: New testcase.
+
+2022-06-29 Jan Beulich <jbeulich@suse.com>
+
+ * gcc.target/i386/avx512fp16-reduce-op-2.c: Force SSE2 for i?86.
+ * gcc.target/i386/pr99464.c: Likewise.
+
+2022-06-29 Jan Beulich <jbeulich@suse.com>
+
+ * c-c++-common/torture/builtin-shufflevector-2.c: Prune ix86 MMX
+ ABI warning.
+
+2022-06-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * gdc.dg/Wbuiltin_declaration_mismatch.d: Rename to...
+ * gdc.dg/Wbuiltin_declaration_mismatch1.d: ...this.
+ * gdc.dg/Wbuiltin_declaration_mismatch2.d: New test.
+ * gdc.dg/torture/simd_blendvector.d: New test.
+ * gdc.dg/torture/simd_cond.d: New test.
+ * gdc.dg/torture/simd_convertvector.d: New test.
+ * gdc.dg/torture/simd_load.d: New test.
+ * gdc.dg/torture/simd_logical.d: New test.
+ * gdc.dg/torture/simd_shuffle.d: New test.
+ * gdc.dg/torture/simd_shufflevector.d: New test.
+ * gdc.dg/torture/simd_store.d: New test.
+
+2022-06-28 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * gdc.dg/attr_simd1.d: New test.
+ * gdc.dg/attr_simd2.d: New test.
+
+2022-06-28 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * c-c++-common/Wcast-align.c: Silence warnings for targets with
+ no_alignment_constraints.
+ * gcc.dg/c11-align-4.c: Skip for no_alignment_constraints.
+ * gcc.dg/strlenopt-10.c: Replace checks for avr with checks for
+ any target with no_alignment_constraints.
+ * gcc.dg/strlenopt-11.c: Ditto.
+ * gcc.dg/strlenopt-13.c: Ditto.
+ * lib/target-supports.exp
+ (check_effective_target_no_alignment_constraints): New.
+
+2022-06-28 Aldy Hernandez <aldyh@redhat.com>
+
+ * g++.dg/pr100774.C: Remove --param=evrp-mode.
+ * gcc.dg/pr100781.c: Same.
+
+2022-06-28 Xi Ruoyao <xry111@xry111.site>
+
+ PR target/106096
+ * g++.target/loongarch/loongarch.exp: New test support file.
+ * g++.target/loongarch/pr106096.C: New test.
+
+2022-06-28 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/106053
+ * gcc.target/i386/pr106053.c: New testcase.
+
+2022-06-27 Marek Polacek <polacek@redhat.com>
+
+ PR c++/89197
+ * g++.dg/cpp0x/initlist130.C: New test.
+
+2022-06-27 Andrew Stubbs <ams@codesourcery.com>
+
+ * lib/target-supports.exp (check_effective_target_global_constructor):
+ Remove amdgcn.
+
+2022-06-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/106070
+ * gcc.dg/torture/pr106070.c: Use unsigned long long instead of
+ unsigned long and -1ULL instead of 0xffffffffffffffff, deobcuscate
+ and improve formatting.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.dg/atomic/c11-atomic-exec-4.c: Call sched_yield.
+ * gcc.dg/atomic/c11-atomic-exec-5.c: Likewise.
+ * gcc.dg/atomic/pr80640-2.c: Likewise.
+ * gcc.dg/atomic/pr80640.c: Likewise.
+ * gcc.dg/atomic/pr81316.c: Likewise.
+ * gcc.dg/di-sync-multithread.c: Likewise.
+
+2022-06-27 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR rtl-optimization/7061
+ * gcc.target/i386/pr7061-2.c: Update to look for shufps.
+
+2022-06-27 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR tree-optimization/94026
+ * gcc.dg/pr94026.c: New test case.
+
+2022-06-26 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105691
+ * gfortran.dg/index_6.f90: New test.
+
+2022-06-26 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105954
+ * gfortran.dg/pr105954.f90: New test.
+
+2022-06-26 Vineet Gupta <vineetg@rivosinc.com>
+
+ * gcc.dg/torture/fp-double-convert-float-1.c: Add
+ dg-require-effective-target hard_float.
+ * gcc.dg/torture/fp-int-convert-timode-3.c: Ditto.
+ * gcc.dg/torture/fp-int-convert-timode-4.c: Ditto.
+ * gcc.dg/torture/fp-uint64-convert-double-1.c: Ditto.
+ * gcc.dg/torture/fp-uint64-convert-double-2.c: Ditto.
+
+2022-06-26 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.dg/debug/btf/btf-bitfields-1.c: Adjust the checked offsets
+ for targets which pack structures by default.
+
+2022-06-26 Aldy Hernandez <aldyh@redhat.com>
+
+ * g++.dg/warn/Wstringop-overflow-4.C: XFAIL a test.
+
+2022-06-25 Aldy Hernandez <aldyh@redhat.com>
+
+ * gcc.dg/sancov/cmp0.c: Adjust for conversion to ranger.
+ * gcc.dg/tree-ssa/ssa-dom-branch-1.c: Same.
+ * gcc.dg/tree-ssa/ssa-dom-thread-7.c: Same.
+ * gcc.dg/vect/bb-slp-pr81635-2.c: Same.
+ * gcc.dg/vect/bb-slp-pr81635-4.c: Same.
+ * g++.dg/warn/Wstringop-overflow-4.C: Likewise.
+ * gcc.target/mips/data-sym-multi-pool.c: Likewise.
+ * gcc.target/mips/mips.exp: Likewise.
+
+2022-06-25 Jeff Law <jeffreyalaw@gmail.com>
+
+ * gcc.dg/lower-subreg-1.c: Remove tilegx and tilepro entries.
+ * gcc.misc-tests/linkage.exp: Remove tilegx and
+ tilepro entries.
+
+2022-06-25 Iain Sandoe <iain@sandoe.co.uk>
+
+ * gcc.dg/darwin-comm-1.c: Check for the correct error message for
+ Darwin <= 10.
+
+2022-06-24 Jason Merrill <jason@redhat.com>
+
+ PR c++/87729
+ PR c++/20423
+ * g++.dg/warn/Woverloaded-virt1.C: New test.
+ * g++.dg/warn/Woverloaded-virt2.C: New test.
+
+2022-06-24 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.dg/debug/btf/btf-bitfields-1.c: Skip if int is less than
+ 32-bits.
+
+2022-06-24 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105813
+ * gfortran.dg/unpack_vector_1.f90: New test.
+
+2022-06-24 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.dg/builtin-object-size-20.c: Remove cases which
+ work on default_packed targets.
+ * gcc.dg/builtin-object-size-22.c: New test with the cases
+ removed above.
+
+2022-06-24 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.dg/sso/memcpy-1.c (__big_endian__, __little_endian__):
+ Rename macros to avoid conflicts with predefined ones.
+
+2022-06-24 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ PR tree-optimization/101868
+ * gcc.dg/lto/pr101868_0.c (zero): New volatile variable.
+ (main): Use it instead of argc.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * gdc.dg/attr_section1.d: Update dg-error.
+ * gdc.dg/attr_visibility1.d: Likewise.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/105413
+ * gdc.dg/attr_register1.d: New test.
+ * gdc.dg/attr_register2.d: New test.
+ * gdc.dg/attr_register3.d: New test.
+
+2022-06-24 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/106070
+ * gcc.dg/torture/pr106070.c: New testcase.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * g++.dg/abi/pure-virtual1.C: Use -nostdlib++.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * lib/target-supports.exp
+ (check_effective_target_two_plus_gigs): New.
+ * gcc.target/aarch64/symbol-range.c: Link only on
+ two_plus_gigs targets, compile otherwise.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105925
+ * g++.dg/ext/desig4.C: Remove extra errors.
+ * g++.dg/cpp2a/desig26.C: New test.
+
+2022-06-23 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/105931
+ * g++.dg/cpp0x/decltype82a.C: New test.
+
+2022-06-23 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/105982
+ * g++.dg/cpp1z/class-deduction111.C: New test.
+
+2022-06-23 David Malcolm <dmalcolm@redhat.com>
+
+ * gcc.dg/plugin/diagnostic-test-metadata.c: Expect " [STR34-C]" to
+ be emitted at the "gets" call.
+ * gcc.dg/plugin/diagnostic_plugin_test_metadata.c
+ (pass_test_metadata::execute): Associate the "gets" diagnostic
+ with a rule named "STR34-C".
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/94554
+ * g++.dg/cpp1z/constexpr-if38.C: New test.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105885
+ * g++.dg/cpp1z/constexpr-if37.C: New test.
+
+2022-06-23 Martin Liska <mliska@suse.cz>
+
+ PR c++/106062
+ * gfortran.dg/ubsan/pr106062.f90: New test.
+
+2022-06-23 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/modules/loc-prune-1.C: New.
+ * g++.dg/modules/loc-prune-2.C: New.
+ * g++.dg/modules/loc-prune-3.C: New.
+ * g++.dg/modules/pr98718_a.C: Adjust.
+ * g++.dg/modules/pr98718_b.C: Adjust.
+
+2022-06-23 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.dg/tree-ssa/slsr-39.c: Force vectorization off.
+
+2022-06-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/105964
+ * g++.dg/cpp1z/nontype-auto21.C: New test.
+
+2022-06-22 Jason Merrill <jason@redhat.com>
+
+ PR c++/105908
+ * g++.dg/cpp0x/trailing16.C: New test.
+
+2022-06-22 Jason Merrill <jason@redhat.com>
+
+ PR c++/104642
+ * g++.dg/ubsan/return-8a.C: New test.
+ * g++.dg/ubsan/return-8b.C: New test.
+ * g++.dg/ubsan/return-8d.C: New test.
+ * g++.dg/ubsan/return-8e.C: New test.
+
+2022-06-22 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/106019
+ * gcc.dg/vect/bb-slp-pr106019.c: New test.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.misc-tests/outputs.exp: Clean up left-overs first.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.misc-tests/outputs.exp (outest): Introduce quiet mode,
+ create and return lists of passes and fails. Use it to catch
+ skip_atsave cases where -L flags are implicitly added by
+ driver self specs.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * g++.dg/lto/pr90990_0.C: Require lto_incremental target.
+
+2022-06-22 Haochen Jiang <haochen.jiang@intel.com>
+
+ * gcc.target/i386/amx-check.h (request_perm_xtile_data):
+ New function to check if AMX is usable and enable AMX.
+ (main): Run test if AMX is usable.
+
+2022-06-21 Roger Sayle <roger@nextmovesoftware.com>
+ Marek Polacek <polacek@redhat.com>
+ Segher Boessenkool <segher@kernel.crashing.org>
+ Kewen Lin <linkw@linux.ibm.com>
+
+ PR target/105991
+ * gcc.target/powerpc/pr105991.c: New test case.
+
+2022-06-21 Arjun Shankar <arjun@redhat.com>
+
+ * gcc.dg/pr94899.c: New test.
+
+2022-06-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/106032
+ * gcc.c-torture/execute/pr106032.c: New test.
+
+2022-06-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/106030
+ * gcc.c-torture/compile/pr106030.c: New test.
+
+2022-06-21 Xionghu Luo <xionghuluo@tencent.com>
+
+ PR target/105740
+ * gcc.dg/tree-ssa/if-to-switch-11.c: New test.
+
+2022-06-21 Siddhesh Poyarekar <siddhesh@gotplt.org>
+
+ PR tree-optimization/105736
+ * gcc.dg/builtin-dynamic-object-size-0.c (TV4): New struct.
+ (val3): New variable.
+ (test_pr105736): New test.
+ (main): Call it.
+
+2022-06-20 Iain Sandoe <iain@sandoe.co.uk>
+
+ * lib/asan-dg.exp: Do not apply color to asan output when
+ under test.
+
+2022-06-20 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/105960
+ * gcc.target/i386/pr105960.c: New test.
+
+2022-06-20 Iain Sandoe <iain@sandoe.co.uk>
+
+ * g++.dg/modules/pr105169_a.C: Skip the test on Darwin.
+ * g++.dg/modules/pr105169_b.C: Likewise.
+
+2022-06-20 Iain Sandoe <iain@sandoe.co.uk>
+
+ * g++.dg/init/array61.C: Allow for two CTOR bodies on Darwin, where
+ aliases are not currently supported.
+
+2022-06-20 Richard Earnshaw <rearnsha@arm.com>
+
+ * gcc.target/arm/simd/mve-vcmp-f32-2.c: Adjust expected output.
+ * gcc.target/arm/simd/pr100757.c: Likewise.
+ * gcc.target/arm/simd/pr100757-2.c: Likewise.
+ * gcc.target/arm/simd/pr100757-3.c: Likewise.
+ * gcc.target/arm/simd/pr100757-4.c: Likewise.
+
+2022-06-20 Iain Sandoe <iain@sandoe.co.uk>
+
+ * g++.dg/modules/init-2_b.C: Add a missing USER_LABEL_PREFIX
+ to a regex.
+
+2022-06-20 Iain Sandoe <iain@sandoe.co.uk>
+
+ * c-c++-common/attr-cdtor-1.c: Requite init_priority support.
+
+2022-06-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/106027
+ * gcc.dg/pr106027.c: New testcase.
+
+2022-06-20 yulong <shiyulong@iscas.ac.cn>
+
+ * gcc.target/riscv/cmo-zicbom-1.c: modified the input parameters.
+ * gcc.target/riscv/cmo-zicbom-2.c: modified the input parameters.
+ * gcc.target/riscv/cmo-zicboz-1.c: modified the input parameters.
+ * gcc.target/riscv/cmo-zicboz-2.c: modified the input parameters.
+
+2022-06-18 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/105986
+ * gfortran.dg/check_bits_3.f90: New test.
+
+2022-06-18 Jakub Jelinek <jakub@redhat.com>
+
+ * c-c++-common/ubsan/nonnull-4.c: Use -fsanitize-trap=all
+ instead of -fsanitize-undefined-trap-on-error.
+ * c-c++-common/ubsan/div-by-zero-4.c: Use
+ -fsanitize-trap=signed-integer-overflow instead of
+ -fsanitize-undefined-trap-on-error.
+ * c-c++-common/ubsan/overflow-add-4.c: Use -fsanitize-trap=undefined
+ instead of -fsanitize-undefined-trap-on-error.
+ * c-c++-common/ubsan/pr56956.c: Likewise.
+ * c-c++-common/ubsan/pr68142.c: Likewise.
+ * c-c++-common/ubsan/pr80932.c: Use
+ -fno-sanitize-trap=all -fsanitize-trap=shift,undefined
+ instead of -fsanitize-undefined-trap-on-error.
+ * c-c++-common/ubsan/align-8.c: Use -fsanitize-trap=alignment
+ instead of -fsanitize-undefined-trap-on-error.
+
+2022-06-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/105998
+ * c-c++-common/pr105998.c: New test.
+
+2022-06-18 Roger Sayle <roger@nextmovesoftware.com>
+
+ PR tree-optimization/105835
+ * gcc.dg/pr105835.c: New test case.
+
+2022-06-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/106001
+ * g++.dg/ext/builtin-shufflevector-4.C: New test.
+
+2022-06-17 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105209
+ * gcc.target/alpha/pr105209.c: New test.
+
+2022-06-17 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105970
+ * gcc.target/i386/pr105970.c: New test.
+
+2022-06-17 Uroš Bizjak <ubizjak@gmail.com>
+
+ PR target/105993
+ * gcc.target/i386/pr105993.c: New test.
+
+2022-06-17 Richard Earnshaw <rearnsha@arm.com>
+
+ * gcc.target/arm/acle/cde-mve-full-assembly.c: Adjust expected
+ output.
+
2022-06-16 David Malcolm <dmalcolm@redhat.com>
* gcc.dg/analyzer/stdarg-1.c
diff --git a/gcc/testsuite/c-c++-common/Wcast-align.c b/gcc/testsuite/c-c++-common/Wcast-align.c
index c296c7f..1087b10 100644
--- a/gcc/testsuite/c-c++-common/Wcast-align.c
+++ b/gcc/testsuite/c-c++-common/Wcast-align.c
@@ -16,8 +16,8 @@ struct t { double x; } *q;
void
foo (void)
{
- y = (c *) x; /* { dg-warning "7:cast \[^\n\r]* required alignment of target type" } */
- z = (d *) x; /* { dg-warning "7:cast \[^\n\r]* required alignment of target type" } */
+ y = (c *) x; /* { dg-warning "7:cast \[^\n\r]* required alignment of target type" "" { target { ! no_alignment_constraints } } } */
+ z = (d *) x; /* { dg-warning "7:cast \[^\n\r]* required alignment of target type" "" { target { ! no_alignment_constraints } } } */
(long long *) p; /* { dg-bogus "alignment" } */
(double *) q; /* { dg-bogus "alignment" } */
}
diff --git a/gcc/testsuite/c-c++-common/Wpadded.c b/gcc/testsuite/c-c++-common/Wpadded.c
new file mode 100644
index 0000000..c5be468
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wpadded.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-Wpadded" } */
+
+/*
+ * The struct is on single line, because C++ compiler emits the -Wpadded
+ * warning at the first line of the struct definition, while the C compiler at
+ * the last line. This way the test passes on both.
+ *
+ * Attribute aligned is needed for the test to pass on targets where
+ * the default behaviour is to pack the struct and also on targets that align
+ * 4 byte fields to 2 byte boundary.
+ */
+struct S { __UINT32_TYPE__ i; char c; } __attribute__((aligned(4))); /* { dg-warning "padding struct size to alignment boundary with 3 bytes" } */
+
diff --git a/gcc/testsuite/c-c++-common/attr-cdtor-1.c b/gcc/testsuite/c-c++-common/attr-cdtor-1.c
index ea61336..a0d069b 100644
--- a/gcc/testsuite/c-c++-common/attr-cdtor-1.c
+++ b/gcc/testsuite/c-c++-common/attr-cdtor-1.c
@@ -1,5 +1,5 @@
/* PR c/90658 */
-/* { dg-do compile } */
+/* { dg-do compile { target init_priority } } */
void f ();
void g1 () __attribute__ ((constructor(f))); /* { dg-error "priorities must be integers" } */
diff --git a/gcc/testsuite/c-c++-common/gomp/linear-4.c b/gcc/testsuite/c-c++-common/gomp/linear-4.c
new file mode 100644
index 0000000..59c22b8
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/linear-4.c
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+int step (int x, int y, int z) { return x + y + z; }
+
+int
+foo (int x)
+{
+ int i;
+ #pragma omp parallel for linear (x : step (step (1, 2, 3)))
+ for (i = 0; i < 64; i++)
+ x += 6;
+ return x;
+}
+
+int
+bar (int x)
+{
+ int i;
+ #pragma omp parallel for linear (x : step (1, 2, 3)) /* { dg-error "expected" } */
+ for (i = 0; i < 64; i++)
+ x += 6;
+ return x;
+}
+
+int
+bar2 (int x)
+{
+ int i;
+ #pragma omp parallel for linear (x : step (1, 2, 3) * 1)
+ for (i = 0; i < 64; i++)
+ x += 6;
+ return x;
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/requires-4.c b/gcc/testsuite/c-c++-common/gomp/requires-4.c
index 88ba774..8f45d83 100644
--- a/gcc/testsuite/c-c++-common/gomp/requires-4.c
+++ b/gcc/testsuite/c-c++-common/gomp/requires-4.c
@@ -9,5 +9,3 @@ foo (void)
#pragma omp requires unified_shared_memory /* { dg-error "'unified_shared_memory' clause used lexically after first target construct or offloading API" } */
#pragma omp requires unified_address /* { dg-error "'unified_address' clause used lexically after first target construct or offloading API" } */
#pragma omp requires reverse_offload /* { dg-error "'reverse_offload' clause used lexically after first target construct or offloading API" } */
-
-/* { dg-prune-output "not supported yet" } */
diff --git a/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c b/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
index 9a3fa52..3452156 100644
--- a/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
+++ b/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
@@ -43,7 +43,7 @@ tg_fn (int *x, int *y)
x2 = x2 + 2 + called_in_target1 ();
y2 = y2 + 7;
- #pragma omp target device(ancestor : 1) map(tofrom: x2)
+ #pragma omp target device(ancestor : 1) map(tofrom: x2) /* { dg-message "sorry, unimplemented: 'ancestor' not yet supported" } */
check_offload(&x2, &y2);
if (x2 != 2+2+3+42 || y2 != 3 + 7)
diff --git a/gcc/testsuite/c-c++-common/gomp/target-data-2.c b/gcc/testsuite/c-c++-common/gomp/target-data-2.c
new file mode 100644
index 0000000..e324870
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/target-data-2.c
@@ -0,0 +1,20 @@
+/* { dg-additional-options "-fdump-tree-original" } */
+
+/* In OpenMP 5.2 permits tofrom for enter/exit data
+ in the FE, it is already converted to 'to' and 'from', respectively. */
+int x, y, z;
+
+void
+copyin ()
+{
+ #pragma omp target enter data map(x) map(tofrom: y) map(always, tofrom: z)
+}
+
+void
+copyout ()
+{
+ #pragma omp target exit data map(x) map(tofrom: y) map(always, tofrom: z)
+}
+
+/* { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(always,to:z\\) map\\(to:y\\) map\\(to:x\\)" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(always,from:z\\) map\\(from:y\\) map\\(from:x\\)" 1 "original" } } */
diff --git a/gcc/testsuite/c-c++-common/gomp/target-data-3.c b/gcc/testsuite/c-c++-common/gomp/target-data-3.c
new file mode 100644
index 0000000..8c6d5cb
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/target-data-3.c
@@ -0,0 +1,17 @@
+/* In OpenMP 5.2 permits tofrom for enter/exit data
+ in the FE, it is already converted to 'to' and 'from', respectively. */
+int y, z;
+
+void
+copyin ()
+{
+ #pragma omp target enter data map(from: y) /* { dg-error "'#pragma omp target enter data' with map-type other than 'to', 'tofrom' or 'alloc' on 'map' clause" } */
+ #pragma omp target enter data map(always, from: z) /* { dg-error "'#pragma omp target enter data' with map-type other than 'to', 'tofrom' or 'alloc' on 'map' clause" } */
+}
+
+void
+copyout ()
+{
+ #pragma omp target exit data map(to: y) /* { dg-error "'#pragma omp target exit data' with map-type other than 'from', 'tofrom', 'release' or 'delete' on 'map' clause" } */
+ #pragma omp target exit data map(always, to: z) /* { dg-error "'#pragma omp target exit data' with map-type other than 'from', 'tofrom', 'release' or 'delete' on 'map' clause" } */
+}
diff --git a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-2.c b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-2.c
index cf05c50..b16e701 100644
--- a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-2.c
+++ b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-2.c
@@ -1,13 +1,11 @@
/* { dg-do compile } */
-#pragma omp requires reverse_offload /* { dg-message "sorry, unimplemented: 'reverse_offload' clause on 'requires' directive not supported yet" } */
+#pragma omp requires reverse_offload
void
foo (int n)
{
- /* The following test is marked with 'xfail' because a previous 'sorry' from
- 'reverse_offload' suppresses the 'sorry' for 'ancestor'. */
- #pragma omp target device (ancestor: 1) /* { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } } */
+ #pragma omp target device (ancestor: 1)
;
@@ -19,9 +17,9 @@ foo (int n)
#pragma omp target device (ancestor : 42) /* { dg-error "the 'device' clause expression must evaluate to '1'" } */
;
- #pragma omp target device (ancestor : n) /* { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } } */
+ #pragma omp target device (ancestor : n)
;
- #pragma omp target device (ancestor : n + 1) /* { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } } */
+ #pragma omp target device (ancestor : n + 1)
;
diff --git a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-3.c b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-3.c
index ea6e5a0..d165901 100644
--- a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-3.c
+++ b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-3.c
@@ -11,7 +11,7 @@ int bar (void);
/* { dg-do compile } */
-#pragma omp requires reverse_offload /* { dg-message "sorry, unimplemented: 'reverse_offload' clause on 'requires' directive not supported yet" } */
+#pragma omp requires reverse_offload
void
foo (void)
diff --git a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c
index b4b5620..241234f 100644
--- a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c
+++ b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c
@@ -4,12 +4,12 @@
/* Test to ensure that device-modifier 'ancestor' is parsed correctly in
device clauses. */
-#pragma omp requires reverse_offload /* { dg-message "sorry, unimplemented: 'reverse_offload' clause on 'requires' directive not supported yet" } */
+#pragma omp requires reverse_offload
void
foo (void)
{
- #pragma omp target device (ancestor: 1) /* { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } } */
+ #pragma omp target device (ancestor: 1) /* { dg-message "sorry, unimplemented: 'ancestor' not yet supported" } */
;
}
diff --git a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-5.c b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-5.c
index b6ff84b..b1520ff 100644
--- a/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-5.c
+++ b/gcc/testsuite/c-c++-common/gomp/target-device-ancestor-5.c
@@ -1,4 +1,4 @@
-#pragma omp requires reverse_offload /* { dg-message "sorry, unimplemented: 'reverse_offload' clause on 'requires' directive not supported yet" } */
+#pragma omp requires reverse_offload
void
foo ()
diff --git a/gcc/testsuite/c-c++-common/hwasan/arguments-3.c b/gcc/testsuite/c-c++-common/hwasan/arguments-3.c
index 6e907b4..2bf8917 100644
--- a/gcc/testsuite/c-c++-common/hwasan/arguments-3.c
+++ b/gcc/testsuite/c-c++-common/hwasan/arguments-3.c
@@ -1,3 +1,5 @@
/* { dg-do compile } */
-/* { dg-additional-options "-fsanitize=thread" } */
+/* { dg-additional-options "-fsanitize=thread,address" } */
+/* { dg-error ".*'-fsanitize=thread' is incompatible with '-fsanitize=address'.*" "" { target *-*-* } 0 } */
/* { dg-error ".*'-fsanitize=thread' is incompatible with '-fsanitize=hwaddress'.*" "" { target *-*-* } 0 } */
+/* { dg-error ".*'-fsanitize=hwaddress' is incompatible with '-fsanitize=address'.*" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/c-c++-common/pr105998.c b/gcc/testsuite/c-c++-common/pr105998.c
new file mode 100644
index 0000000..85277b9
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr105998.c
@@ -0,0 +1,12 @@
+/* PR middle-end/105998 */
+
+typedef int __attribute__((__vector_size__ (sizeof (long long)))) V;
+
+V v;
+
+long long
+foo (void)
+{
+ long long l = (long long) ((0 | v) - ((V) { } == 0));
+ return l;
+}
diff --git a/gcc/testsuite/c-c++-common/pr91733.c b/gcc/testsuite/c-c++-common/pr91733.c
new file mode 100644
index 0000000..1539bb4
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr91733.c
@@ -0,0 +1,17 @@
+/* { dg-do preprocess } */
+/* { dg-additional-options "-fdiagnostics-show-caret" } */
+
+const char *s = " ";
+
+/* { dg-warning "missing terminating \"" "test1" { target *-*-* } 4 } */
+/* { dg-warning "missing terminating \"" "test2" { target *-*-* } 5 } */
+
+/* { dg-begin-multiline-output "test3" }
+ const char *s = "
+ ^
+{ dg-end-multiline-output "test3" } */
+
+/* { dg-begin-multiline-output "test4" }
+ ";
+ ^
+{ dg-end-multiline-output "test4" } */
diff --git a/gcc/testsuite/c-c++-common/pragma-diag-11.c b/gcc/testsuite/c-c++-common/pragma-diag-11.c
new file mode 100644
index 0000000..2eef5c4
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pragma-diag-11.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-Wundef" } */
+#pragma GCC diagnostic ignored "-Wundef"
+#if FOO
+#endif
+#define P _Pragma ("GCC diagnostic push") _Pragma ("GCC diagnostic warning \"-Wundef\"")
+P
+#if FOO2 /* { dg-warning "is not defined" } */
+#endif
+#pragma GCC diagnostic pop
+#if FOO3
+#endif
+int i;
diff --git a/gcc/testsuite/c-c++-common/pragma-diag-12.c b/gcc/testsuite/c-c++-common/pragma-diag-12.c
new file mode 100644
index 0000000..0043a42
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pragma-diag-12.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-E -Wdate-time" } */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdate-time"
+const char *date = __DATE__;
+_Pragma ("GCC diagnostic pop");
+const char *date2 = __DATE__; /* { dg-warning "__DATE__" } */
+/* { dg-final { scan-assembler "#pragma GCC diagnostic push" } } */
+/* { dg-final { scan-assembler "#pragma GCC diagnostic ignored \"-Wdate-time\"" } } */
+/* { dg-final { scan-assembler "#pragma GCC diagnostic pop" } } */
diff --git a/gcc/testsuite/c-c++-common/pragma-diag-13.c b/gcc/testsuite/c-c++-common/pragma-diag-13.c
new file mode 100644
index 0000000..d67b365
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pragma-diag-13.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+#pragma GCC diagnostic /* { dg-warning "missing" } */
+#pragma GCC diagnostic warn /* { dg-warning "24:expected" } */
+#pragma GCC diagnostic ignored "-Wfoo" /* { dg-warning "32:unknown" } */
diff --git a/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-2.c b/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-2.c
index 7c4999e..b1ffc95 100644
--- a/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-2.c
+++ b/gcc/testsuite/c-c++-common/torture/builtin-shufflevector-2.c
@@ -24,3 +24,6 @@ main (void)
__builtin_abort ();
return 0;
}
+
+// On i?86-*-* an ABI warning would actually surface.
+// { dg-prune-output "MMX vector (argument|return) without MMX enabled changes the ABI" }
diff --git a/gcc/testsuite/c-c++-common/ubsan/align-8.c b/gcc/testsuite/c-c++-common/ubsan/align-8.c
index 5fe0e0f..53b2b6c 100644
--- a/gcc/testsuite/c-c++-common/ubsan/align-8.c
+++ b/gcc/testsuite/c-c++-common/ubsan/align-8.c
@@ -1,6 +1,6 @@
/* Limit this to known non-strict alignment targets. */
/* { dg-do run { target { i?86-*-linux* x86_64-*-linux* } } } */
-/* { dg-options "-O -fsanitize=alignment -fsanitize-undefined-trap-on-error -Wno-address-of-packed-member -fdump-tree-sanopt-details" } */
+/* { dg-options "-O -fsanitize=alignment -fsanitize-trap=alignment -Wno-address-of-packed-member -fdump-tree-sanopt-details" } */
/* { dg-skip-if "" { *-*-* } { "-flto -fno-fat-lto-objects" } } */
/* { dg-shouldfail "ubsan" } */
diff --git a/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c b/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c
index ef431c9..e2cc9fe 100644
--- a/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c
+++ b/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-fsanitize=signed-integer-overflow -fsanitize-undefined-trap-on-error -Wno-overflow" } */
+/* { dg-options "-fsanitize=signed-integer-overflow -fsanitize-trap=signed-integer-overflow -Wno-overflow" } */
#define INT_MIN (-__INT_MAX__ - 1)
diff --git a/gcc/testsuite/c-c++-common/ubsan/nonnull-4.c b/gcc/testsuite/c-c++-common/ubsan/nonnull-4.c
index b49c72e..65b6dfb 100644
--- a/gcc/testsuite/c-c++-common/ubsan/nonnull-4.c
+++ b/gcc/testsuite/c-c++-common/ubsan/nonnull-4.c
@@ -1,6 +1,6 @@
/* { dg-do run } */
/* { dg-shouldfail "ubsan" } */
-/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
+/* { dg-options "-fsanitize=undefined -fsanitize-trap=all" } */
int q, r;
void *a, *b, *c = (void *) &q, *d, *e, *f = (void *) &q, *g, *h;
diff --git a/gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c b/gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c
index 3f6f6bd..ac9df4d 100644
--- a/gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c
+++ b/gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable -fsanitize-undefined-trap-on-error" } */
+/* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable -fsanitize-trap=undefined" } */
/* { dg-shouldfail "ubsan" } */
#define INT_MAX __INT_MAX__
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr56956.c b/gcc/testsuite/c-c++-common/ubsan/pr56956.c
index 996e1dd..a3280c2 100644
--- a/gcc/testsuite/c-c++-common/ubsan/pr56956.c
+++ b/gcc/testsuite/c-c++-common/ubsan/pr56956.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
+/* { dg-options "-fsanitize=undefined -fsanitize-trap=undefined" } */
unsigned int __attribute__((noinline,noclone))
foo (unsigned int x)
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr68142.c b/gcc/testsuite/c-c++-common/ubsan/pr68142.c
index 9498f08..13b7ef6 100644
--- a/gcc/testsuite/c-c++-common/ubsan/pr68142.c
+++ b/gcc/testsuite/c-c++-common/ubsan/pr68142.c
@@ -1,5 +1,5 @@
/* { dg-do run } */
-/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
+/* { dg-options "-fsanitize=undefined -fsanitize-trap=undefined" } */
int __attribute__((noinline,noclone))
h(int a)
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr80932.c b/gcc/testsuite/c-c++-common/ubsan/pr80932.c
index 92903f7..3ee56c8 100644
--- a/gcc/testsuite/c-c++-common/ubsan/pr80932.c
+++ b/gcc/testsuite/c-c++-common/ubsan/pr80932.c
@@ -1,6 +1,6 @@
/* PR sanitizer/80932 */
/* { dg-do run } */
-/* { dg-options "-fsanitize=undefined -fsanitize-undefined-trap-on-error" } */
+/* { dg-options "-fsanitize=undefined -fno-sanitize-trap=all -fsanitize-trap=shift,undefined" } */
int x = 1;
diff --git a/gcc/testsuite/g++.dg/abi/pure-virtual1.C b/gcc/testsuite/g++.dg/abi/pure-virtual1.C
index 538e2cb..59eaf22 100644
--- a/gcc/testsuite/g++.dg/abi/pure-virtual1.C
+++ b/gcc/testsuite/g++.dg/abi/pure-virtual1.C
@@ -1,7 +1,7 @@
// Test that we don't need libsupc++ just for __cxa_pure_virtual.
// { dg-do link }
// { dg-require-weak }
-// { dg-additional-options "-fno-rtti -nodefaultlibs -lc" }
+// { dg-additional-options "-fno-rtti -nostdlib++" }
// { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } }
// { dg-xfail-if "AIX weak" { powerpc-ibm-aix* } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-elision1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-elision1.C
new file mode 100644
index 0000000..9e7b9ec
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-elision1.C
@@ -0,0 +1,16 @@
+// PR c++/105550
+// { dg-do compile { target c++11 } }
+
+template <typename, typename> struct pair {
+ constexpr pair(int, int) {}
+};
+template <typename _Tp, typename _Compare>
+pair<const _Tp &, const _Tp &> minmax(const _Tp &__a, const _Tp &__b,
+ _Compare) {
+ return 0 ? pair<const _Tp &, const _Tp &>(__b, __a)
+ : pair<const _Tp &, const _Tp &>(__a, __b);
+}
+typedef int value_type;
+typedef int compare_type;
+template pair<const value_type &, const value_type &>
+minmax(const value_type &, const value_type &, compare_type);
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype82a.C b/gcc/testsuite/g++.dg/cpp0x/decltype82a.C
new file mode 100644
index 0000000..cbbcdfd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype82a.C
@@ -0,0 +1,11 @@
+// PR c++/105931
+// { dg-do compile { target c++11 } }
+// A version of decltype82.C where N is unsigned.
+
+template<unsigned N>
+void f() {
+ using ty1 = decltype((5 % N) == 0);
+ using ty2 = decltype((5 / N) == 0);
+}
+
+template void f<0>();
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist130.C b/gcc/testsuite/g++.dg/cpp0x/initlist130.C
new file mode 100644
index 0000000..662a5a3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist130.C
@@ -0,0 +1,5 @@
+// PR c++/89197
+// { dg-options "-Wno-c++11-extensions" }
+// This used to ICE with std=c++03, therefore we run it in C++03 too.
+
+template <int> void foo(int i) { const int c = int{i}; }
diff --git a/gcc/testsuite/g++.dg/cpp0x/keywords1.C b/gcc/testsuite/g++.dg/cpp0x/keywords1.C
new file mode 100644
index 0000000..2b2ab64
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/keywords1.C
@@ -0,0 +1,15 @@
+// PR c++/106111
+// { dg-do compile { target c++98_only } }
+// { dg-options "-Wc++11-compat" }
+
+int alignof; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int alignas; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int constexpr; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int decltype; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int noexcept; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int nullptr; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int static_assert; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int thread_local; // { dg-warning "is a keyword in C\\\+\\\+11" }
+int _Alignas;
+int _Alignof;
+int _Thread_local;
diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing16.C b/gcc/testsuite/g++.dg/cpp0x/trailing16.C
new file mode 100644
index 0000000..4feb3f81
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/trailing16.C
@@ -0,0 +1,17 @@
+// PR c++/105908
+// { dg-do compile { target c++11 } }
+
+struct test
+{
+ template <typename T>
+ int templated_func();
+
+ template <typename T>
+ auto call_templated_func() -> decltype(templated_func<T>());
+};
+
+template <typename T>
+auto test::call_templated_func() -> decltype(templated_func<T>())
+{
+ return templated_func<T>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic183.C b/gcc/testsuite/g++.dg/cpp0x/variadic183.C
new file mode 100644
index 0000000..27444eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic183.C
@@ -0,0 +1,14 @@
+// PR c++/105956
+// { dg-do compile { target c++11 } }
+
+template<int...> struct list;
+
+template<int... Ns> struct impl {
+ static const int idx = 0;
+ using type = list<(idx + Ns)...>;
+
+ static constexpr const int* a[2] = {(Ns, &idx)...};
+ static_assert(a[0] == &idx && a[1] == &idx, "");
+};
+
+template struct impl<0, 1>;
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-elision1.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-elision1.C
new file mode 100644
index 0000000..b225ae2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-elision1.C
@@ -0,0 +1,53 @@
+// PR c++/105550
+// { dg-do compile { target c++14 } }
+
+struct A {
+ const A *p = this;
+};
+
+struct B {
+ const B *p = this;
+ constexpr operator A() const { return {}; }
+};
+
+constexpr A
+bar (A)
+{
+ return {};
+}
+
+constexpr A baz() { return {}; }
+
+struct E {
+ A a1 = true ? A{} : A{};
+ A a2 = true ? A{} : B{};
+ A a3 = false ? A{} : B{};
+ A a4 = false ? B{} : B{};
+ A a5 = A{};
+ A a6 = B{};
+ A a7 = false ? B{} : (true ? A{} : A{});
+ A a8 = false ? (true ? A{} : B{}) : (true ? A{} : A{});
+ A a9 = (A{});
+ A a10 = (true, A{});
+ A a11 = bar (A{});
+ A a12 = baz ();
+ A a13 = (A{}, A{});
+};
+
+constexpr E e{};
+
+constexpr A a1 = true ? A{} : A{};
+constexpr A a2 = true ? A{} : B{};
+constexpr A a3 = false ? A{} : B{};
+constexpr A a4 = false ? B{} : B{};
+constexpr A a5 = A{};
+constexpr A a6 = B{};
+constexpr A a7 = false ? B{} : (true ? A{} : A{});
+constexpr A a8 = false ? (true ? A{} : B{}) : (true ? A{} : A{});
+constexpr A a9 = (A{});
+constexpr A a10 = (true, A{});
+constexpr A a11 = bar (A{});
+//static_assert(a10.p == &a10, ""); // bug, 105619
+constexpr A a12 = baz ();
+//static_assert(a11.p == &a11, ""); // bug, 105619
+constexpr A a13 = (A{}, A{});
diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr16.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr16.C
index dc6492c..5e66bdd 100644
--- a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr16.C
+++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr16.C
@@ -40,9 +40,8 @@ struct E {
A d = true ? (false ? A{} : A{}) : (false ? A{} : A{});
};
-// FIXME: When fixing this, also fix nsdmi-aggr17.C.
-constexpr E e; // { dg-bogus "" "PR105550" { xfail *-*-* } }
-SA (e.a.p == &e.a); // { dg-bogus "" "PR105550" { xfail *-*-* } }
+constexpr E e;
+SA (e.a.p == &e.a);
E e1 = { };
diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr17.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr17.C
index fc27a2c..ca9637b 100644
--- a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr17.C
+++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr17.C
@@ -56,9 +56,8 @@ struct F {
A a = true ? A{x} : A{x};
};
-// FIXME: Doesn't work due to PR105550.
-//constexpr F f;
-//SA (f.a.p == &f.a);
+constexpr F f;
+SA (f.a.p == &f.a);
SA (e.x == 42);
F f2 = { };
F f3 = { 42 };
diff --git a/gcc/testsuite/g++.dg/cpp1z/class-deduction111.C b/gcc/testsuite/g++.dg/cpp1z/class-deduction111.C
new file mode 100644
index 0000000..2406529
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/class-deduction111.C
@@ -0,0 +1,10 @@
+// PR c++/105982
+// { dg-do compile { target c++17 } }
+
+template<class T>
+struct A {
+ struct B { struct C { }; };
+ A(T, typename B::C);
+};
+
+A a(0, {});
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if37.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if37.C
new file mode 100644
index 0000000..e11e02c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if37.C
@@ -0,0 +1,21 @@
+// PR c++/105885
+// { dg-do compile { target c++17 } }
+// { dg-additional-options -Wall }
+
+int i;
+
+template<const char* ARG = nullptr>
+void test() {
+ if constexpr(ARG == nullptr) {
+ ++i;
+ } else {
+ --i;
+ }
+}
+
+const char CONSTSTR[] = {'\n', '\t', ' ', '\0'};
+
+int main() {
+ test();
+ test<CONSTSTR>();
+}
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if38.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if38.C
new file mode 100644
index 0000000..3e4fd44
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if38.C
@@ -0,0 +1,16 @@
+// PR c++/94554
+// { dg-do compile { target c++17 } }
+// { dg-additional-options -Wall }
+
+int meow() { return 1; }
+void kitty(int);
+template <int (*F)()>
+void test() {
+ if constexpr (F) {
+ kitty(F());
+ } else {
+ kitty(2);
+ }
+}
+template void test<nullptr>();
+template void test<meow>();
diff --git a/gcc/testsuite/g++.dg/cpp1z/nontype-auto21.C b/gcc/testsuite/g++.dg/cpp1z/nontype-auto21.C
new file mode 100644
index 0000000..376d632
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/nontype-auto21.C
@@ -0,0 +1,20 @@
+// PR c++/105964
+// { dg-do compile { target c++17 } }
+
+struct token {};
+
+struct example {};
+
+template< typename >
+struct helper
+{
+ static constexpr auto c() { return 42; }
+};
+
+struct impostor_c
+{
+ template< typename T, auto= helper< T >::c >
+ static example func();
+};
+
+example c= impostor_c::func< token >();
diff --git a/gcc/testsuite/g++.dg/cpp2a/desig26.C b/gcc/testsuite/g++.dg/cpp2a/desig26.C
new file mode 100644
index 0000000..443fa3d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/desig26.C
@@ -0,0 +1,22 @@
+// PR c++/105925
+// { dg-do compile { target c++20 } }
+
+struct V
+{
+ int i;
+ double d;
+};
+
+struct X
+{
+ union
+ {
+ int x;
+ V y;
+ };
+};
+
+X foo()
+{
+ return {.y = {0, 0.0}};
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/keywords1.C b/gcc/testsuite/g++.dg/cpp2a/keywords1.C
new file mode 100644
index 0000000..7f4dba2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/keywords1.C
@@ -0,0 +1,12 @@
+// PR c++/106111
+// { dg-do compile { target c++17_down } }
+// { dg-options "-Wc++20-compat -Wc++11-compat -Wc++14-compat -Wc++17-compat" }
+
+int constinit; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int consteval; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int requires; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int concept; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int co_await; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int co_yield; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int co_return; // { dg-warning "is a keyword in C\\\+\\\+20" }
+int char8_t; // { dg-warning "is a keyword in C\\\+\\\+20" }
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-generic10.C b/gcc/testsuite/g++.dg/cpp2a/lambda-generic10.C
new file mode 100644
index 0000000..47a87bb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-generic10.C
@@ -0,0 +1,14 @@
+// PR c++/106024
+// { dg-do compile { target c++20 } }
+
+void sink(...);
+template <int... args> void f()
+{
+ sink ([] <int T> (int...) { return 1; }
+ .operator()<args>(args...)...); // { dg-warning "-Wmissing-template-keyword" }
+} // { dg-prune-output {expected '\)'} }
+
+int main()
+{
+ f<1,2,3>();
+}
diff --git a/gcc/testsuite/g++.dg/ext/builtin-shufflevector-4.C b/gcc/testsuite/g++.dg/ext/builtin-shufflevector-4.C
new file mode 100644
index 0000000..dae129b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/builtin-shufflevector-4.C
@@ -0,0 +1,18 @@
+// PR c++/106001
+// { dg-do compile }
+
+typedef int V __attribute__((vector_size (2 * sizeof (int))));
+
+template <int>
+void
+foo ()
+{
+ V v = {};
+ v = __builtin_shufflevector (v, v, static_cast<char>(1), static_cast<char>(0));
+}
+
+void
+bar ()
+{
+ foo <0> ();
+}
diff --git a/gcc/testsuite/g++.dg/ext/desig4.C b/gcc/testsuite/g++.dg/ext/desig4.C
index 902bd1f..9b92a6d 100644
--- a/gcc/testsuite/g++.dg/ext/desig4.C
+++ b/gcc/testsuite/g++.dg/ext/desig4.C
@@ -6,13 +6,9 @@ int a = { .foo = 6 }; // { dg-error "designator" }
int b = { [0] = 1 }; // { dg-error "12:designator .0." }
_Complex float c = { .foo = 0, 1 }; // { dg-error "designator" }
// { dg-error "either all initializer clauses should be designated or none of them should be" "" { target c++2a } .-1 }
- // { dg-error "cannot convert" "" { target *-*-* } .-2 }
_Complex float d = { [0] = 0, 1 }; // { dg-error "23:designator .0." }
// { dg-error "either all initializer clauses should be designated or none of them should be" "" { target c++2a } .-1 }
- // { dg-error "cannot convert" "" { target *-*-* } .-2 }
_Complex float e = { 0, .foo = 1 }; // { dg-error "designator" }
// { dg-error "either all initializer clauses should be designated or none of them should be" "" { target c++2a } .-1 }
- // { dg-error "cannot convert" "" { target *-*-* } .-2 }
_Complex float f = { 0, [0] = 1 }; // { dg-error "26:designator .0." }
// { dg-error "either all initializer clauses should be designated or none of them should be" "" { target c++2a } .-1 }
- // { dg-error "cannot convert" "" { target *-*-* } .-2 }
diff --git a/gcc/testsuite/g++.dg/init/array61.C b/gcc/testsuite/g++.dg/init/array61.C
index eaf535c..c8f82b9 100644
--- a/gcc/testsuite/g++.dg/init/array61.C
+++ b/gcc/testsuite/g++.dg/init/array61.C
@@ -1,7 +1,8 @@
// PR c++/92385
// { dg-do compile { target c++11 } }
// { dg-additional-options -fdump-tree-gimple }
-// { dg-final { scan-tree-dump-times "item::item" 1 "gimple" } }
+// { dg-final { scan-tree-dump-times "item::item" 1 "gimple" { target { ! *-*-darwin* } } } }
+// { dg-final { scan-tree-dump-times "item::item" 2 "gimple" { target { *-*-darwin* } } } }
struct item {
int i;
diff --git a/gcc/testsuite/g++.dg/lto/pr90990_0.C b/gcc/testsuite/g++.dg/lto/pr90990_0.C
index 22a5e3f..74cc2bb 100644
--- a/gcc/testsuite/g++.dg/lto/pr90990_0.C
+++ b/gcc/testsuite/g++.dg/lto/pr90990_0.C
@@ -1,5 +1,6 @@
// { dg-lto-do link }
/* { dg-extra-ld-options { -r -nostdlib } } */
+// { dg-require-effective-target lto_incremental }
class A {
public:
float m_floats;
diff --git a/gcc/testsuite/g++.dg/modules/inext-1.H b/gcc/testsuite/g++.dg/modules/inext-1.H
index 7708c39..25a9b26 100644
--- a/gcc/testsuite/g++.dg/modules/inext-1.H
+++ b/gcc/testsuite/g++.dg/modules/inext-1.H
@@ -9,3 +9,4 @@
#endif
+// { dg-final { scan-lang-dump {Wrote section:1 named-by:'::foo'} module } }
diff --git a/gcc/testsuite/g++.dg/modules/init-2_b.C b/gcc/testsuite/g++.dg/modules/init-2_b.C
index a98e676..e30a555 100644
--- a/gcc/testsuite/g++.dg/modules/init-2_b.C
+++ b/gcc/testsuite/g++.dg/modules/init-2_b.C
@@ -8,4 +8,4 @@ import Foo;
// There should be an idempotency check
// { dg-final { scan-assembler {_ZZ9_ZGIW3BarE9__in_chrg} } }
// { dg-final { scan-assembler {call[ \t]+_?_ZGIW3Foo} { target i?86-*-* x86_64-*-* } } }
-// { dg-final { scan-assembler {.(quad|long)[ \t]+_ZGIW3Bar} { target i?86-*-* x86_64-*-* } } }
+// { dg-final { scan-assembler {.(quad|long)[ \t]+_?_ZGIW3Bar} { target i?86-*-* x86_64-*-* } } }
diff --git a/gcc/testsuite/g++.dg/modules/loc-prune-1.C b/gcc/testsuite/g++.dg/modules/loc-prune-1.C
new file mode 100644
index 0000000..55d46e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/loc-prune-1.C
@@ -0,0 +1,19 @@
+// { dg-additional-options {-fmodules-ts -fdump-lang-module-lineno} }
+
+export module foo;
+// { dg-module-cmi foo }
+#define NOT 1
+#define YES 1
+#define AGAIN_NO (1 + 2)
+#if NOT
+int foo (int = YES)
+{
+ return AGAIN_NO;
+}
+#endif
+
+// { dg-final { scan-lang-dump { Macro maps:1} module } }
+// { dg-final { scan-lang-dump { Macro:0 YES 1/1.2 locations } module } }
+// { dg-final { scan-lang-dump { Macro maps:1 locs:1} module } }
+// { dg-final { scan-lang-dump-not {Macro:. NOT } module } }
+// { dg-final { scan-lang-dump-not {Macro:. AGAIN_NO } module } }
diff --git a/gcc/testsuite/g++.dg/modules/loc-prune-2.C b/gcc/testsuite/g++.dg/modules/loc-prune-2.C
new file mode 100644
index 0000000..fc4ed78
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/loc-prune-2.C
@@ -0,0 +1,14 @@
+// { dg-additional-options {-fmodules-ts -fdump-lang-module-lineno} }
+
+export module Eve;
+// { dg-module-cmi Eve }
+
+#define BEGIN_NAMESPACE(X) inline namespace X {
+#define END_NAMESPACE(X) }
+
+BEGIN_NAMESPACE (BOB)
+void Alice ();
+END_NAMESPACE (BOB)
+
+// { dg-final { scan-lang-dump { Macro maps:1} module } }
+// { dg-final { scan-lang-dump { Macro:0 BEGIN_NAMESPACE 5/6.2 locations } module } }
diff --git a/gcc/testsuite/g++.dg/modules/loc-prune-3.C b/gcc/testsuite/g++.dg/modules/loc-prune-3.C
new file mode 100644
index 0000000..40e8aa6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/loc-prune-3.C
@@ -0,0 +1,16 @@
+// { dg-additional-options {-fmodules-ts -fdump-lang-module-lineno} }
+
+export module Eve;
+// { dg-module-cmi Eve }
+
+#define BEGIN_NAMESPACE(X) inline namespace X {
+#define END_NAMESPACE(X) }
+
+BEGIN_NAMESPACE (BOB)
+namespace inner {
+void Alice ();
+}
+END_NAMESPACE (BOB)
+
+// { dg-final { scan-lang-dump { Macro maps:1} module } }
+// { dg-final { scan-lang-dump { Macro:0 BEGIN_NAMESPACE 5/6.2 locations } module } }
diff --git a/gcc/testsuite/g++.dg/modules/loc-prune-4.C b/gcc/testsuite/g++.dg/modules/loc-prune-4.C
new file mode 100644
index 0000000..765c378
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/loc-prune-4.C
@@ -0,0 +1,22 @@
+// { dg-additional-options {-Wno-pedantic -fmodules-ts -fdump-lang-module-lineno} }
+
+# 4 "unused" 1
+# 5 "" 2
+
+export module foo;
+
+int foo (int) // separate
+{
+
+
+ return 0;
+}
+
+int bar (int); // merge lines
+int baz (int);
+
+
+// { dg-final { scan-lang-dump {Ordinary maps:2 locs:12288 range_bits:5} module } }
+// { dg-final { scan-lang-dump { 1 source file names\n Source file...=[^\n]*loc-prune-4.C\n} module } }
+// { dg-final { scan-lang-dump { Span:0 ordinary \[2.....\+12288,\+4096\)->\[0,\+4096\)} module } }
+// { dg-final { scan-lang-dump { Span:1 ordinary \[2.....\+40960,\+8192\)->\[4096,\+8192\)} module } }
diff --git a/gcc/testsuite/g++.dg/modules/pr105169_a.C b/gcc/testsuite/g++.dg/modules/pr105169_a.C
index 02660b3..e4ec855 100644
--- a/gcc/testsuite/g++.dg/modules/pr105169_a.C
+++ b/gcc/testsuite/g++.dg/modules/pr105169_a.C
@@ -1,4 +1,4 @@
-/* { dg-module-do link } */
+/* { dg-module-do link { target { ! *-*-darwin* } } } */
/* { dg-options "-std=c++11 -fpatchable-function-entry=2 -O2" } */
/* { dg-additional-options "-std=c++11 -fpatchable-function-entry=2 -O2" } */
diff --git a/gcc/testsuite/g++.dg/modules/pr105169_b.C b/gcc/testsuite/g++.dg/modules/pr105169_b.C
index 7a9c586..afbb129 100644
--- a/gcc/testsuite/g++.dg/modules/pr105169_b.C
+++ b/gcc/testsuite/g++.dg/modules/pr105169_b.C
@@ -1,4 +1,4 @@
-/* { dg-module-do link } */
+/* { dg-module-do link { target { ! *-*-darwin* } } } */
/* { dg-options "-std=c++11 -fpatchable-function-entry=2 -O2" } */
/* { dg-additional-options "-std=c++11 -fpatchable-function-entry=2 -O2" } */
diff --git a/gcc/testsuite/g++.dg/modules/pr98718_a.C b/gcc/testsuite/g++.dg/modules/pr98718_a.C
index 0be5f90..01242d9 100644
--- a/gcc/testsuite/g++.dg/modules/pr98718_a.C
+++ b/gcc/testsuite/g++.dg/modules/pr98718_a.C
@@ -14,5 +14,5 @@ namespace std _GLIBCXX_VISIBILITY(default)
export module hello:format;
// { dg-module-cmi hello:format }
-// { dg-final { scan-lang-dump { Ordinary:4 maps hwm:[0-9]* macro:1 maps lwm:214[0-9]*} module } }
-// { dg-final { scan-lang-dump { Span:2 macro:0 _GLIBCXX_VISIBILITY 10/11\*2 locations } module } }
+// { dg-final { scan-lang-dump { Macro maps:0 locs:0} module } }
+// { dg-final { scan-lang-dump-not { Macro:. _GLIBCXX_VISIBILITY} module } }
diff --git a/gcc/testsuite/g++.dg/modules/pr98718_b.C b/gcc/testsuite/g++.dg/modules/pr98718_b.C
index 50679c8..d2a1c53 100644
--- a/gcc/testsuite/g++.dg/modules/pr98718_b.C
+++ b/gcc/testsuite/g++.dg/modules/pr98718_b.C
@@ -14,7 +14,5 @@ export module hello;
export import :format;
// { dg-module-cmi hello }
-// { dg-final { scan-lang-dump {Macro:0 _GLIBCXX_VISIBILITY 10/11\*2 locations } module } }
-// { dg-final { scan-lang-dump { Ordinary:8 maps hwm:[0-9]* macro:2 maps lwm:214[0-9]*} module } }
-// { dg-final { scan-lang-dump { Span:2 macro:0 _GLIBCXX_VISIBILITY 10/11\*2 locations } module } }
-// { dg-final { scan-lang-dump { Span:4 macro:1 _GLIBCXX_VISIBILITY 10/11\*2 locations } module } }
+// { dg-final { scan-lang-dump { Macro maps:0 locs:0} module } }
+// { dg-final { scan-lang-dump-not { Macro:. _GLIBCXX_VISIBILITY} module } }
diff --git a/gcc/testsuite/g++.dg/modules/pr99072.H b/gcc/testsuite/g++.dg/modules/pr99072.H
index eda0c07..3be6996 100644
--- a/gcc/testsuite/g++.dg/modules/pr99072.H
+++ b/gcc/testsuite/g++.dg/modules/pr99072.H
@@ -7,4 +7,6 @@
# 1 "REALNAME"
// { dg-additional-options {-fmodule-header -fpreprocessed -fdump-lang-module-lineno} }
-// { dg-final { scan-lang-dump { 4 source file names\n Source file\[0\]=REALNAME\n Source file\[1\]=<built-in>\n Source file\[2\]=<command-line>\n Source file\[3\]=/usr/include/stdc-predef.h\n} module } }
+// All locations are pruned.
+// { dg-final { scan-lang-dump-not {Writing ordinary location maps} module } }
+// { dg-final { scan-lang-dump-not { Span:. ordinary } module } }
diff --git a/gcc/testsuite/g++.dg/pr100774.C b/gcc/testsuite/g++.dg/pr100774.C
index 345fcfa..63320ef 100644
--- a/gcc/testsuite/g++.dg/pr100774.C
+++ b/gcc/testsuite/g++.dg/pr100774.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-forwprop --param=evrp-mode=ranger -fcompare-debug " } */
+/* { dg-options "-O2 -fno-tree-forwprop -fcompare-debug " } */
extern void __attribute__((noreturn)) error();
diff --git a/gcc/testsuite/g++.dg/pr106219.C b/gcc/testsuite/g++.dg/pr106219.C
new file mode 100644
index 0000000..3cad150
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr106219.C
@@ -0,0 +1,31 @@
+// { dg-do compile }
+// { dg-options "-O3" }
+// { dg-additional-options "-march=bdver2" { target x86_64-*-* } }
+
+int max(int __b) {
+ if (0 < __b)
+ return __b;
+ return 0;
+}
+struct Plane {
+ Plane(int, int);
+ int *Row();
+};
+#ifdef __x86_64__
+#pragma GCC target "sse2,ssse3,avx,avx2"
+#endif
+float *ConvolveXSampleAndTranspose_rowp;
+int ConvolveXSampleAndTranspose_res, ConvolveXSampleAndTranspose_r;
+void ConvolveXSampleAndTranspose() {
+ Plane out(0, ConvolveXSampleAndTranspose_res);
+ for (int y;;) {
+ float sum;
+ for (int i = ConvolveXSampleAndTranspose_r; i; ++i)
+ sum += i;
+ for (; ConvolveXSampleAndTranspose_r; ++ConvolveXSampleAndTranspose_r)
+ sum +=
+ ConvolveXSampleAndTranspose_rowp[max(ConvolveXSampleAndTranspose_r)] *
+ ConvolveXSampleAndTranspose_r;
+ out.Row()[y] = sum;
+ }
+}
diff --git a/gcc/testsuite/g++.dg/spellcheck-stdlib.C b/gcc/testsuite/g++.dg/spellcheck-stdlib.C
index 87736b2..7a70641 100644
--- a/gcc/testsuite/g++.dg/spellcheck-stdlib.C
+++ b/gcc/testsuite/g++.dg/spellcheck-stdlib.C
@@ -158,6 +158,35 @@ void test_cstdlib (void *q)
// { dg-message "'#include <cstdlib>'" "" { target *-*-* } .-1 }
}
+/* Missing <ctime>. */
+
+void test_ctime (void *q, long s, double d)
+{
+ clock_t c; // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ time_t t; // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ tm t2; // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ d = difftime (0, 0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ s = mktime (q); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ s = time (0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ q = asctime (0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ q = ctime (0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ q = gmtime (0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ q = localtime (0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+ char c[2];
+ strftime (c, 2, "", 0); // { dg-error "was not declared" }
+ // { dg-message "'#include <ctime>'" "" { target *-*-* } .-1 }
+}
+
/* Verify that we don't offer suggestions to stdlib globals names when
there's an explicit namespace. */
diff --git a/gcc/testsuite/g++.dg/template/operator16.C b/gcc/testsuite/g++.dg/template/operator16.C
new file mode 100644
index 0000000..434a266
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/operator16.C
@@ -0,0 +1,9 @@
+// PR c++/106179
+
+struct Mat {
+ template <typename> Mat();
+};
+template <typename> struct Mat_;
+template <typename _Tp> Mat::Mat() {
+ _Tp commaInitializer = commaInitializer.operator Mat_<_Tp>;
+}
diff --git a/gcc/testsuite/g++.dg/torture/except-1.C b/gcc/testsuite/g++.dg/torture/except-1.C
new file mode 100644
index 0000000..7050a33
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/except-1.C
@@ -0,0 +1,44 @@
+// { dg-do run { target { i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } }
+// { dg-additional-options "-fexceptions -fnon-call-exceptions -fno-delete-dead-exceptions" }
+
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+sighandler (int signo, siginfo_t* si, void* uc)
+{
+ throw (5);
+}
+
+struct S { void *p1, *p2; };
+
+struct S v;
+
+__attribute__ ((noinline))
+int
+dosegv ()
+{
+ struct S *p = 0;
+ struct S s __attribute__((unused)) = *p;
+ return 0;
+}
+
+int main ()
+{
+ struct sigaction sa;
+
+ memset (&sa, 0, sizeof sa);
+ sa.sa_sigaction = sighandler;
+ sigaction (SIGSEGV, &sa, NULL);
+ sigaction (SIGBUS, &sa, NULL);
+
+ try {
+ dosegv ();
+ }
+ catch (int x) {
+ return (x != 5);
+ }
+
+ return 1;
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr106131.C b/gcc/testsuite/g++.dg/torture/pr106131.C
new file mode 100644
index 0000000..e110f4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr106131.C
@@ -0,0 +1,34 @@
+// { dg-do run { target c++11 } }
+
+struct Pair {
+ int a, b;
+ Pair(const Pair &) = default;
+ Pair(int _a, int _b) : a(_a), b(_b) {}
+ Pair &operator=(const Pair &z) {
+ a = z.a;
+ b = z.b;
+ return *this;
+ }
+};
+
+const int &max(const int &a, const int &b)
+{
+ return a < b ? b : a;
+}
+
+int foo(Pair x, Pair y)
+{
+ return max(x.b, y.b);
+}
+
+int main()
+{
+ auto f = new Pair[3] {{0, -11}, {0, -8}, {0, 2}};
+ for (int i = 0; i < 1; i++) {
+ f[i] = f[0];
+ if(i == 0)
+ f[i] = f[2];
+ if (foo(f[i], f[1]) != 2)
+ __builtin_abort();
+ }
+}
diff --git a/gcc/testsuite/g++.dg/ubsan/return-8a.C b/gcc/testsuite/g++.dg/ubsan/return-8a.C
new file mode 100644
index 0000000..54f1c7b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/return-8a.C
@@ -0,0 +1,16 @@
+// PR c++/104642
+
+// At -O0 and -Og we default to -funreachable-traps
+// so the below should abort at runtime.
+
+// { dg-do run }
+// { dg-shouldfail { *-*-* } }
+// { dg-additional-options "-O0" }
+
+bool b;
+
+int f() {
+ if (b) return 42;
+} // { dg-warning "-Wreturn-type" }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/ubsan/return-8b.C b/gcc/testsuite/g++.dg/ubsan/return-8b.C
new file mode 100644
index 0000000..bdaea60
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/return-8b.C
@@ -0,0 +1,17 @@
+// PR c++/104642
+
+// With -fsanitize=unreachable we shouldn't optimize away the call to f.
+
+// { dg-do run }
+// { dg-shouldfail { *-*-* } }
+// { dg-additional-options "-O -fsanitize=unreachable" }
+
+bool b;
+
+int f() {
+ if (b) return 42;
+ __builtin_unreachable ();
+ return 24;
+}
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/ubsan/return-8d.C b/gcc/testsuite/g++.dg/ubsan/return-8d.C
new file mode 100644
index 0000000..7eaded0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/return-8d.C
@@ -0,0 +1,16 @@
+// PR c++/104642
+
+// At -O0 and -Og we default to -funreachable-traps
+// so the below should abort at runtime.
+
+// { dg-do run }
+// { dg-shouldfail { *-*-* } }
+// { dg-additional-options "-Og" }
+
+bool b;
+
+int f() {
+ if (b) return 42;
+} // { dg-warning "-Wreturn-type" }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/ubsan/return-8e.C b/gcc/testsuite/g++.dg/ubsan/return-8e.C
new file mode 100644
index 0000000..fba402b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ubsan/return-8e.C
@@ -0,0 +1,17 @@
+// PR c++/104642
+
+// At -O0 and -Og we default to -funreachable-traps
+// so the below should abort at runtime.
+
+// { dg-do run }
+// { dg-shouldfail { *-*-* } }
+// { dg-additional-options "-O2" }
+
+bool b;
+
+__attribute__ ((optimize ("Og")))
+int f() {
+ if (b) return 42;
+} // { dg-warning "-Wreturn-type" }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C b/gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C
new file mode 100644
index 0000000..ba6f388
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C
@@ -0,0 +1,10 @@
+// PR c++/105626
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wformat" }
+// { dg-additional-options "-fchar8_t" { target c++17_down } }
+
+int main()
+{
+ __builtin_printf((const char*) u8"test %d\n", 1); // { dg-bogus "format string" }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/warn/Woverloaded-virt1.C b/gcc/testsuite/g++.dg/warn/Woverloaded-virt1.C
new file mode 100644
index 0000000..92f8327
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Woverloaded-virt1.C
@@ -0,0 +1,14 @@
+// PR c++/87729
+// { dg-additional-options -Wall }
+
+class Foo
+{
+public:
+ virtual void f(int); // { dg-warning "hidden" }
+};
+
+class Bar : public Foo
+{
+public:
+ virtual void f(short); // { dg-message "by" }
+};
diff --git a/gcc/testsuite/g++.dg/warn/Woverloaded-virt2.C b/gcc/testsuite/g++.dg/warn/Woverloaded-virt2.C
new file mode 100644
index 0000000..763ab29
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Woverloaded-virt2.C
@@ -0,0 +1,15 @@
+// PR c++/20423
+// { dg-additional-options -Wall }
+
+class Foo
+{
+public:
+ virtual void f(int);
+ virtual void f(short);
+};
+
+class Bar : public Foo
+{
+public:
+ virtual void f(short);
+};
diff --git a/gcc/testsuite/g++.dg/warn/Woverloaded-virt3.C b/gcc/testsuite/g++.dg/warn/Woverloaded-virt3.C
new file mode 100644
index 0000000..34214ba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Woverloaded-virt3.C
@@ -0,0 +1,7 @@
+// PR c++/87729
+// { dg-additional-options -Woverloaded-virtual }
+
+struct S1 {};
+struct S2: S1 { virtual ~S2(); };
+struct S3 { virtual ~S3(); };
+struct S4: S2, S3 { virtual ~S4(); };
diff --git a/gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C b/gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C
index c80977d..c9d6393 100644
--- a/gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C
+++ b/gcc/testsuite/g++.dg/warn/Wstringop-overflow-4.C
@@ -161,7 +161,41 @@ void test_strcpy_new_int16_t (size_t n, const size_t vals[])
ptrdiff_t r_dmin_dmax = SR (DIFF_MIN, DIFF_MAX);
T (S (1), new int16_t[r_dmin_dmax]);
- T (S (2), new int16_t[r_dmin_dmax + 1]);
+ /* ?? The above SR(DIFF_MIN, DIFF_MAX) implies r_dmin_dmax can be
+ the entire domain, including negative numbers because ptrdiff_t
+ is a signed entity.
+
+ This causes a warning in the following line after the
+ DOM/threader changes for C++98.
+
+ <bb 2> [local count: 1073741824]:
+ _26 ={v} signed_value_source; ;; could be -1
+ r_dmin_dmax.1_8 = (sizetype) _26;
+ if (r_dmin_dmax.1_8 <= 4611686018427387900) ;; placement new rounding
+ goto <bb 3>; [50.00%]
+ else
+ goto <bb 9>; [50.00%]
+
+ ...
+ ...
+
+ <bb 9> [local count: 536870912]:
+ # iftmp.0_39 = PHI <18446744073709551615(2)>
+ _41 = operator new [] (iftmp.0_39);
+ __builtin_memcpy (_41, "z", 2);
+ sink (_41);
+ _44 = _26 + 1; ;; _44 = 0
+ _45 = (sizetype) _44; ;; _45 = 0
+ if (_45 <= 4611686018427387900)
+ goto <bb 8>; [0.00%]
+ else
+ goto <bb 7>; [100.00%]
+
+ <bb 8> [local count: 0]:
+ iftmp.2_33 = _45 * 2; ;; iftmp.2_33 = 0
+ _34 = operator new [] (iftmp.2_33); ;; new [] (0)
+ */
+ T (S (2), new int16_t[r_dmin_dmax + 1]); // { dg-bogus "into a region of size" "" { xfail *-*-*} }
T (S (9), new int16_t[r_dmin_dmax * 2 + 1]);
}
diff --git a/gcc/testsuite/g++.target/aarch64/complex-init.C b/gcc/testsuite/g++.target/aarch64/complex-init.C
new file mode 100644
index 0000000..c3637d8
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/complex-init.C
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { check-function-bodies "**" "" "" { target { le } } } } */
+
+/*
+** _Z1fii:
+** ...
+** bfi x0, x1, 32, 32
+** ret
+*/
+_Complex int f(int a, int b) {
+ _Complex int t = a + b * 1i;
+ return t;
+}
+
+/*
+** _Z2f2ii:
+** ...
+** bfi x0, x1, 32, 32
+** ret
+*/
+_Complex int f2(int a, int b) {
+ _Complex int t = {a, b};
+ return t;
+}
+
+/*
+** _Z12f_convolutedii:
+** ...
+** bfi x0, x1, 32, 32
+** ret
+*/
+_Complex int f_convoluted(int a, int b) {
+ _Complex int t = (_Complex int)a;
+ __imag__ t = b;
+ return t;
+}
diff --git a/gcc/testsuite/g++.target/i386/pr106180-1.C b/gcc/testsuite/g++.target/i386/pr106180-1.C
new file mode 100644
index 0000000..7f73453
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr106180-1.C
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -c -ffloat-store -std=c++11" } */
+
+struct PointT
+{
+ double x, y;
+};
+using PointF = PointT;
+
+template <int _Nm> struct __array_traits { typedef PointT _Type[_Nm]; };
+template <int _Nm> struct array
+{
+ typename __array_traits<_Nm>::_Type _M_elems;
+};
+
+float SampleGrid_low, SampleGrid_high;
+using QuadrilateralF = array<4>;
+struct PerspectiveTransform
+{
+ PerspectiveTransform (QuadrilateralF, QuadrilateralF);
+};
+
+void SampleGrid()
+{
+ PerspectiveTransform
+ {
+ { PointF {SampleGrid_high, SampleGrid_low},
+ SampleGrid_low, SampleGrid_high },
+ {}
+ };
+}
diff --git a/gcc/testsuite/g++.target/loongarch/loongarch.exp b/gcc/testsuite/g++.target/loongarch/loongarch.exp
new file mode 100644
index 0000000..4fd1194
--- /dev/null
+++ b/gcc/testsuite/g++.target/loongarch/loongarch.exp
@@ -0,0 +1,34 @@
+# Copyright (C) 2019-2022 Free Software Foundation, Inc.
+
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't a LoongArch target.
+if ![istarget loongarch*-*-*] then {
+ return
+}
+
+# Load support procs.
+load_lib g++-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" ""
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/g++.target/loongarch/pr106096.C b/gcc/testsuite/g++.target/loongarch/pr106096.C
new file mode 100644
index 0000000..5edbda2
--- /dev/null
+++ b/gcc/testsuite/g++.target/loongarch/pr106096.C
@@ -0,0 +1,75 @@
+/* PR target/106096
+ Reduced from gimple-range-path.cc. It was miscompiled with -O2 and
+ caused ICE (segfault) building stage 2 libgcc. */
+
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+enum E
+{
+ TS_TYPED
+} a;
+int b, c;
+char d, e;
+
+__attribute__ ((cold, noipa, noinline)) void
+cold (int *, E, char *, int, char *)
+{
+ __builtin_trap ();
+}
+
+int *
+contains_struct_check (E x)
+{
+ if (a)
+ cold (&b, x, &d, c, &e);
+ return &b;
+}
+
+struct vrange
+{
+ virtual void set_varying (int *);
+};
+
+struct int_range : vrange
+{
+ int *m_ranges[510];
+};
+
+__attribute__ ((noipa, noinline)) void
+vrange::set_varying (int *)
+{
+}
+
+struct Value_Range
+{
+ Value_Range (int *);
+ int_range m_irange;
+};
+
+__attribute__ ((noipa, noinline)) Value_Range::Value_Range (int *) {}
+
+struct path_range_query
+{
+ void ssa_range_in_phi (vrange &);
+ bool m_resolve;
+};
+
+__attribute__ ((noipa, noinline)) void
+path_range_query::ssa_range_in_phi (vrange &r)
+{
+ if (m_resolve)
+ {
+ Value_Range (contains_struct_check (TS_TYPED));
+ return;
+ }
+ r.set_varying (contains_struct_check (TS_TYPED));
+}
+
+int
+main ()
+{
+ path_range_query prq{ 0 };
+ vrange vr;
+ prq.ssa_range_in_phi (vr);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/inline-asm-1.c b/gcc/testsuite/gcc.c-torture/compile/inline-asm-1.c
new file mode 100644
index 0000000..0044cb7
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/inline-asm-1.c
@@ -0,0 +1,14 @@
+/* PR tree-opt/106087,
+ simple_dce_from_worklist would delete the
+ inline-asm when it was still being referenced
+ by the other ssa name. */
+
+static int t;
+
+int f(void)
+{
+ int tt, tt1;
+ asm("":"=r"(tt), "=r"(tt1));
+ t = tt1;
+ return tt;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr106030.c b/gcc/testsuite/gcc.c-torture/compile/pr106030.c
new file mode 100644
index 0000000..7514b34
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr106030.c
@@ -0,0 +1,16 @@
+/* PR middle-end/106030 */
+
+int a, b, c;
+
+char
+foo (int x, int y)
+{
+ return x * y;
+}
+
+void
+bar (void)
+{
+ char d = (foo <= b) * a;
+ c = foo (2 != bar, d);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20101011-1.c b/gcc/testsuite/gcc.c-torture/execute/20101011-1.c
index 649e168..d2c0f9a 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20101011-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/20101011-1.c
@@ -1,6 +1,7 @@
/* { dg-options "-fnon-call-exceptions" } */
/* With -fnon-call-exceptions 0 / 0 should not be eliminated. */
/* { dg-additional-options "-DSIGNAL_SUPPRESS" { target { ! signal } } } */
+/* { dg-additional-options "-mcheck-zero-division" { target { loongarch*-*-* } } } */
#ifdef SIGNAL_SUPPRESS
# define DO_TEST 0
diff --git a/gcc/testsuite/gcc.c-torture/execute/mul-sext.c b/gcc/testsuite/gcc.c-torture/execute/mul-sext.c
new file mode 100644
index 0000000..8b68008
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/mul-sext.c
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+
+typedef __INT64_TYPE__ int64_t;
+typedef __INT32_TYPE__ int32_t;
+
+/* f() was misoptimized to a single "mul.d" instruction on LA64. */
+__attribute__((noipa, noinline)) int64_t
+f(int64_t a, int64_t b)
+{
+ return (int64_t)(int32_t)a * (int64_t)(int32_t)b;
+}
+
+int
+main()
+{
+ int64_t a = 0x1145140000000001;
+ int64_t b = 0x1919810000000001;
+ if (f(a, b) != 1)
+ __builtin_abort();
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr106032.c b/gcc/testsuite/gcc.c-torture/execute/pr106032.c
new file mode 100644
index 0000000..d2ccf6a5
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr106032.c
@@ -0,0 +1,21 @@
+/* PR rtl-optimization/106032 */
+
+__attribute__((noipa)) int
+foo (int x, int *y)
+{
+ int a = 0;
+ if (x < 0)
+ a = *y;
+ return a;
+}
+
+int
+main ()
+{
+ int a = 42;
+ if (foo (0, 0) != 0 || foo (1, 0) != 0)
+ __builtin_abort ();
+ if (foo (-1, &a) != 42 || foo (-42, &a) != 42)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr98304-2.c b/gcc/testsuite/gcc.c-torture/execute/pr98304-2.c
new file mode 100644
index 0000000..114c612
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr98304-2.c
@@ -0,0 +1,37 @@
+/* PR tree-optimization/98304 */
+
+#include "../../gcc.dg/pr98304-1.c"
+
+/* Runtime tests. */
+int main() {
+
+ /* Signed tests. */
+ if (foo(-42) != -42
+ || foo(0) != 0
+ || foo(63) != 63
+ || foo(64) != 0
+ || foo(65) != 1
+ || foo(99) != 35) {
+ __builtin_abort();
+ }
+
+ /* Unsigned tests. */
+ if (bar(42) != 42
+ || bar(0) != 0
+ || bar(63) != 63
+ || bar(64) != 0
+ || bar(65) != 1
+ || bar(99) != 35) {
+ __builtin_abort();
+ }
+
+ /* Should not simplify. */
+ if (corge(13) != 13
+ || thud(13) != 13
+ || qux(13) != 13
+ || quux(13) != 13) {
+ __builtin_abort();
+ }
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
new file mode 100644
index 0000000..b5bed53
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
@@ -0,0 +1,117 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+/* Tests with constant buffer sizes. */
+
+void test_1 (void)
+{
+ int16_t *ptr = malloc (21 * sizeof (int16_t));
+ free (ptr);
+}
+
+void test_2 (void)
+{
+ int32_t *ptr = malloc (21 * sizeof (int16_t)); /* { dg-line malloc2 } */
+ free (ptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
+ /* { dg-message "42 bytes" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } malloc2 } */
+}
+
+void test_3 (void)
+{
+ void *ptr = malloc (21 * sizeof (int16_t));
+ int16_t *sptr = (int16_t *)ptr;
+ free (sptr);
+}
+
+void test_4 (void)
+{
+ void *ptr = malloc (21 * sizeof (int16_t)); /* { dg-message "42 bytes" } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign4 } */
+ free (iptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign4 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign4 } */
+}
+
+void test_5 (void)
+{
+ int32_t user_input;
+ scanf("%i", &user_input);
+ int32_t n;
+ if (user_input == 0)
+ n = 21 * sizeof (int16_t);
+ else
+ n = 42 * sizeof (int16_t);
+ void *ptr = malloc (n);
+ int16_t *sptr = (int16_t *)ptr;
+ free (sptr);
+}
+
+void test_6 (void)
+{
+ int32_t user_input;
+ scanf("%i", &user_input);
+ int32_t n;
+ if (user_input == 0)
+ n = 21 * sizeof (int16_t);
+ else
+ n = 42 * sizeof (int16_t);
+ void *ptr = malloc (n); /* { dg-message "" "note" } */
+ /* ^^^ on widening_svalues no expr is returned
+ by get_representative_tree at the moment. */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign6 } */
+ free (iptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign6 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign6 } */
+}
+
+void test_7 (void)
+{
+ int32_t user_input;
+ scanf("%i", &user_input);
+ int32_t n;
+ if (user_input == 0)
+ n = 1;
+ else if (user_input == 2)
+ n = 5;
+ else
+ n = 7;
+ /* n is an unknown_svalue at this point. */
+ void *ptr = malloc (n);
+ int32_t *iptr = (int32_t *)ptr;
+ free (iptr);
+}
+
+void *create_buffer (int32_t n)
+{
+ return malloc(n);
+}
+
+void test_8 (void)
+{
+ int32_t *buf = create_buffer(4 * sizeof (int));
+ free (buf);
+}
+
+void test_9 (void)
+{
+ /* FIXME: At the moment, region_model::set_value (lhs, <return_value>)
+ is called at the src_node of the return edge. This edge has no stmts
+ associated with it, leading to a rejection of the warning inside
+ impl_region_model_context::warn. To ensure that the indentation
+ in the diagnostic is right, the warning has to be emitted on an EN
+ that is after the return edge. */
+ int32_t *buf = create_buffer(42); /* { dg-warning "" "" { xfail *-*-* } } */
+ free (buf);
+}
+
+void test_10 (int32_t n)
+{
+ char *ptr = malloc (7 * n);
+ free (ptr);
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
new file mode 100644
index 0000000..42c39e2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
@@ -0,0 +1,156 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+/* Tests with symbolic buffer sizes. */
+
+void test_1 (int32_t n)
+{
+ int16_t *ptr = malloc (n * sizeof (int16_t));
+ free (ptr);
+}
+
+void test_2 (int32_t n)
+{
+ int32_t *ptr = malloc (n * sizeof (int16_t)); /* { dg-line malloc2 } */
+ free (ptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
+ /* { dg-message "'\[a-z0-9\\*\\(\\)\\s\]*' bytes" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4" "note" { target *-*-* } malloc2 } */
+}
+
+void test_3 (int32_t n)
+{
+ void *ptr = malloc (n * sizeof (int16_t));
+ int16_t *sptr = (int16_t *)ptr;
+ free (sptr);
+}
+
+void test_4 (int32_t n)
+{
+ void *ptr = malloc (n * sizeof (int16_t)); /* { dg-message "'\[a-z0-9\\*\\(\\)\\s\]*'" "note" } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign4 } */
+ free (iptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign4 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign4 } */
+}
+
+void test_5 (void)
+{
+ int32_t user_input;
+ scanf("%i", &user_input);
+ int32_t n;
+ if (user_input == 0)
+ n = 3 * user_input * sizeof (int16_t);
+ else
+ n = 5 * user_input * sizeof (int16_t);
+ void *ptr = malloc (n);
+ int16_t *sptr = (int16_t *)ptr;
+ free (sptr);
+}
+
+void test_6 (void)
+{
+ int32_t user_input;
+ scanf("%i", &user_input);
+ int32_t n;
+ if (user_input == 0)
+ n = user_input;
+ else if (user_input == 2)
+ n = user_input * 3;
+ else
+ n = user_input * 5;
+ /* n is an unknown_svalue at this point. */
+ void *ptr = malloc (n);
+ int32_t *iptr = (int32_t *)ptr;
+ free (iptr);
+}
+
+void *create_buffer(int32_t n)
+{
+ return malloc(n);
+}
+
+void test_7(int32_t n)
+{
+ int32_t *buf = create_buffer(n * sizeof (int32_t));
+ free (buf);
+}
+
+void test_8(int32_t n)
+{
+ /* FIXME: At the moment, region_model::set_value (lhs, <return_value>)
+ is called at the src_node of the return edge. This edge has no stmts
+ associated with it, leading to a rejection of the warning inside
+ impl_region_model_context::warn. To ensure that the indentation
+ in the diagnostic is right, the warning has to be emitted on an EN
+ that is after the return edge. */
+ int32_t *buf = create_buffer(n * sizeof(int16_t)); /* { dg-warning "" "" { xfail *-*-* } } */
+ free (buf);
+}
+
+void test_9 (void)
+{
+ int32_t n;
+ scanf("%i", &n);
+ /* n is a conjured_svalue. */
+ void *ptr = malloc (n); /* { dg-message "'n' bytes" "note" } */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign9 } */
+ free (iptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign9 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign9 } */
+}
+
+void test_11 (void)
+{
+ int32_t n;
+ scanf("%i", &n);
+ void *ptr = malloc (n);
+ if (n == sizeof (int32_t))
+ {
+ /* n is a conjured_svalue but guarded such that we
+ know the value is a multiple of sizeof (*iptr). */
+ int32_t *iptr = (int32_t *)ptr;
+ free (iptr);
+ }
+ else
+ free (ptr);
+}
+
+void test_12 (void)
+{
+ int32_t n;
+ scanf("%i", &n);
+ void *ptr = malloc (n); /* { dg-message "'n' bytes" } */
+ if (n == 5)
+ {
+ /* n is a conjured_svalue but guarded such that we
+ know the value isn't a multiple of sizeof (*iptr). */
+ int32_t *iptr = (int32_t *)ptr; /* { dg-line assign12 } */
+ free (iptr);
+ }
+ else
+ free (ptr);
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign12 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign12 } */
+}
+
+void test_13 (void)
+{
+ int32_t n;
+ scanf("%i", &n);
+ void *ptr = malloc (n);
+ if (n == n * n)
+ {
+ /* n is a conjured_svalue but guarded such that we don't have an
+ equivalence class for it. In such cases, we assume that the
+ condition ensures that the value is okay. */
+ int32_t *iptr = (int32_t *)ptr;
+ free (iptr);
+ }
+ else
+ free (ptr);
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
new file mode 100644
index 0000000..0c86f09
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
@@ -0,0 +1,46 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+/* CWE-131 example 5 */
+void test_1 (void)
+{
+ int32_t *id_sequence = (int32_t *) malloc (3); /* { dg-line malloc1 } */
+ if (id_sequence == NULL) exit (1);
+
+ id_sequence[0] = 13579;
+ id_sequence[1] = 24680;
+ id_sequence[2] = 97531;
+
+ free (id_sequence);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc1 } */
+ /* { dg-message "3 bytes" "note" { target *-*-* } malloc1 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } malloc1 } */
+}
+
+void test_2 (void)
+{
+ int32_t *ptr = malloc (10 + sizeof(int32_t)); /* { dg-line malloc2 } */
+ free (ptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
+ /* { dg-message "14 bytes" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } malloc2 } */
+}
+
+void test_3 (int32_t n)
+{
+ int32_t *ptr = malloc (n + sizeof (int32_t)); /* { dg-line malloc3 } */
+ free (ptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc3 } */
+ /* { dg-message "'\[a-z0-9\\+\\(\\)\\s\]*' bytes" "note" { target *-*-* } malloc3 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } malloc3 } */
+}
+
+void test_4 (int32_t n, int32_t m)
+{
+ int32_t *ptr = malloc ((n + m) * sizeof (int32_t));
+ free (ptr);
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
new file mode 100644
index 0000000..235c156
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
@@ -0,0 +1,61 @@
+#include <stdlib.h>
+#include <stdint.h>
+
+/* Tests related to structs. */
+
+struct base {
+ int16_t i;
+};
+
+struct sub {
+ struct base b;
+ int16_t j;
+};
+
+struct var_len {
+ int16_t i;
+ char arr[];
+};
+
+
+void test_1 (void)
+{
+ struct base *ptr = malloc (5 * sizeof (struct base));
+ free (ptr);
+}
+
+void test_2 (void)
+{
+ int32_t *ptr = malloc (5 * sizeof (struct base)); /* { dg-line malloc2 } */
+ free (ptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc2 } */
+ /* { dg-message "\\d+ bytes" "note" { target *-*-* } malloc2 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } malloc2 } */
+}
+
+void test_3 (void)
+{
+ /* Even though 10 bytes is not a multiple of 4, we do not warn to prevent
+ a false positive in case s is the base struct of a struct inheritance. */
+ struct base *ptr = malloc (10);
+ free (ptr);
+}
+
+void test_4 (void)
+{
+ struct var_len *ptr = malloc (10);
+ free (ptr);
+}
+
+void test_5 (void)
+{
+ /* For constant sizes, we warn if the buffer
+ is too small to hold a single struct. */
+ struct base *ptr = malloc (1); /* { dg-line malloc5 } */
+ free (ptr);
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } malloc5 } */
+ /* { dg-message "1 bytes" "note" { target *-*-* } malloc5 } */
+ /* { dg-message "'struct base \\*' here; 'sizeof \\(struct base\\)' is '\\d+'" "note" { target *-*-* } malloc5 } */
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c b/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
new file mode 100644
index 0000000..a15e18d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
@@ -0,0 +1,37 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+
+/* Tests related to statically allocated buffers. */
+
+typedef struct a {
+ int16_t s;
+} a;
+
+int32_t *test_1 (void)
+{
+ a A; /* { dg-message "\\d+ bytes" "note" } */
+ A.s = 1;
+ int32_t *ptr = (int32_t *) &A; /* { dg-line assign1 } */
+ return ptr;
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign1 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign1 } */
+}
+
+int32_t *test2 (void)
+{
+ char arr[sizeof (int32_t)];
+ int32_t *ptr = (int32_t *)arr;
+ return ptr;
+}
+
+int32_t *test3 (void)
+{
+ char arr[sizeof (int16_t)]; /* { dg-message "\\d+ bytes" "note" } */
+ int32_t *ptr = (int32_t *)arr; /* { dg-line assign3 } */
+ return ptr;
+
+ /* { dg-warning "allocated buffer size is not a multiple of the pointee's size \\\[CWE-131\\\]" "warning" { target *-*-* } assign3 } */
+ /* { dg-message "'int32_t \\*' (\\\{aka '(long )?int \\*'\\\})? here; 'sizeof \\(int32_t (\\\{aka (long )?int\\\})?\\)' is '4'" "note" { target *-*-* } assign3 } */
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-1.c b/gcc/testsuite/gcc.dg/analyzer/fd-1.c
new file mode 100644
index 0000000..8a72e63
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/fd-1.c
@@ -0,0 +1,39 @@
+int open(const char *, int mode);
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+
+void
+test_1 (const char *path)
+{
+ int fd = open (path, O_RDONLY); /* { dg-message "\\(1\\) opened here" } */
+ return; /* { dg-warning "leak of file descriptor 'fd' \\\[CWE-775\\\]" "warning" } */
+ /* { dg-message "\\(2\\) 'fd' leaks here; was opened at \\(1\\)" "event" { target *-*-* } .-1 } */
+}
+
+void
+test_2 (const char *path)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ if (fd >= 0) /* { dg-message "\\(2\\) assuming 'fd' is a valid file descriptor" "event1" } */
+ /* { dg-message "\\(3\\) following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+ {
+ return; /* { dg-warning "leak of file descriptor 'fd' \\\[CWE-775\\\]" "warning" } */
+ /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */
+ /* { dg-message "\\(5\\) 'fd' leaks here; was opened at \\(1\\)" "event2" { target *-*-* } .-2 } */
+ }
+}
+
+void
+test_3 (const char *path)
+{
+ int fd = open (path, O_WRONLY); /* { dg-message "\\(1\\) opened here" } */
+ return; /* { dg-warning "leak of file descriptor 'fd' \\\[CWE-775\\\]" "warning" } */
+}
+
+void test_4 (const char *path)
+{
+ open(path, O_RDONLY); /* { dg-warning "leak of file descriptor \\\[CWE-775\\\]" } */
+ /* { dg-message "\\(1\\) leaks here" "" { target *-*-* } .-1 } */
+}
+
diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-2.c b/gcc/testsuite/gcc.dg/analyzer/fd-2.c
new file mode 100644
index 0000000..96ccf2f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/fd-2.c
@@ -0,0 +1,49 @@
+int open(const char *, int mode);
+void close(int fd);
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+#define STDIN 0
+
+void
+test_1 (const char *path)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ close (fd); /* { dg-message "\\(2\\) first 'close' here" "event1" } */
+ close (fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */
+ /* { dg-message "\\(3\\) second 'close' here; first 'close' was at \\(2\\)" "event2" { target *-*-* } .-1 } */
+}
+
+void
+test_2 (const char *path)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ if (fd < 0) /* { dg-message "\\(2\\) assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */
+ /* { dg-message "\\(3\\) following 'false' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+ return;
+ close (fd); /* { dg-message "\\(4\\) ...to here" "event1" } */
+ /* { dg-message "\\(5\\) first 'close' here" "event2" { target *-*-* } .-1 } */
+ close (fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */
+ /* {dg-message "\\(6\\) second 'close' here; first was at \\(5\\)" "" { target *-*-* } .-1 } */
+}
+
+void
+test_3 ()
+{
+ /* FD 0 is stdin at the entry to "main" and thus read-only, but we have no
+ guarantees here that it hasn't been closed and then reopened for
+ writing, so we can't issue a warning */
+
+ int fd = STDIN;
+ close(fd); /* { dg-message "\\(1\\) first 'close' here" } */
+ close(fd); /* { dg-warning "double 'close' of file descriptor 'fd' \\\[CWE-1341\\\]" "warning" } */
+ /* { dg-message "\\(2\\) second 'close' here; first 'close' was at \\(1\\)" "event2" { target *-*-* } .-1 } */
+}
+
+void
+test_4 ()
+{
+ int fd = -1;
+ close(fd);
+ close(fd);
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-3.c b/gcc/testsuite/gcc.dg/analyzer/fd-3.c
new file mode 100644
index 0000000..40fc8af
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/fd-3.c
@@ -0,0 +1,85 @@
+int open(const char *, int mode);
+void close(int fd);
+int write (int fd, void *buf, int nbytes);
+int read (int fd, void *buf, int nbytes);
+int some_condition();
+
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+#define STDIN 0
+#define O_NOATIME 262144
+
+void
+test_1 (const char *path, void *buf)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ write (fd, buf, 1); /* { dg-message "\\(2\\) 'fd' could be invalid: unchecked value from \\(1\\)" } */
+ /* { dg-warning "'write' on possibly invalid file descriptor 'fd'" "warning" { target *-*-* } .-1 } */
+ close(fd);
+}
+
+void
+test_2 (const char *path, void *buf)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ read (fd, buf, 1); /* { dg-message "\\(2\\) 'fd' could be invalid: unchecked value from \\(1\\)" } */
+ /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" "warning" { target *-*-* } .-1 } */
+ close (fd);
+}
+
+void
+test_3 (void *buf)
+{
+ int fd = -1;
+ read (fd, buf, 1); /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" } */
+ /* { dg-message "\\(1\\) 'fd' could be invalid" "" { target *-*-* } .-1 } */
+}
+
+void
+test_4 (void *buf)
+{
+ int fd = STDIN;
+ read (fd, buf, 1);
+ close(fd);
+}
+
+void
+test_5 (char *path, void *buf)
+{
+ int flags = O_RDONLY;
+ if (some_condition())
+ flags |= O_NOATIME;
+ int fd = open (path, flags);
+ read (fd, buf, 1); /* { dg-warning "'read' on possibly invalid file descriptor 'fd'" } */
+ /* { dg-message "\\(1\\) 'fd' could be invalid" "" { target *-*-* } .-1 } */
+ close (fd);
+}
+
+
+void
+test_6 (char *path, void *buf)
+{
+ int fd = open (path, O_RDONLY);
+ if (fd != -1)
+ {
+ read (fd, buf, 1);
+ }
+ close (fd);
+}
+
+
+void
+test_7 (char *path, void *buf)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ if (fd != -1) /* { dg-message "\\(2\\) assuming 'fd' is an invalid file descriptor \\(< 0\\)" } */
+ {
+ read (fd, buf, 1);
+ } else
+ {
+ write (fd, buf, 1); /* { dg-warning "'write' on possibly invalid file descriptor 'fd'" } */
+
+ }
+ close(fd);
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-4.c b/gcc/testsuite/gcc.dg/analyzer/fd-4.c
new file mode 100644
index 0000000..fcfa616
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/fd-4.c
@@ -0,0 +1,72 @@
+#include <stdio.h>
+
+int open(const char *, int mode);
+void close(int fd);
+int write (int fd, void *buf, int nbytes);
+int read (int fd, void *buf, int nbytes);
+
+#define O_RDONLY 0
+#define O_WRONLY 1
+#define O_RDWR 2
+
+
+void
+test_1 (const char *path, void *buf)
+{
+ int fd = open (path, O_RDONLY); /* { dg-message "opened here as read-only" } */
+ if (fd >= 0) /* { dg-message "assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */
+ /* { dg-message "following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+ {
+ write (fd, buf, 1); /* { dg-warning "'write' on 'read-only' file descriptor 'fd'" "warning" } */
+ /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */
+ /* { dg-message "\\(5\\) 'write' on 'read-only' file descriptor 'fd'" "event2" { target *-*-* } .-2 } */
+ close (fd);
+ }
+}
+
+void
+test_2 (const char *path, void *buf)
+{
+ int fd = open (path, O_WRONLY); /* { dg-message "opened here as write-only" } */
+ if (fd >= 0) /* { dg-message "assuming 'fd' is a valid file descriptor \\(>= 0\\)" "event1" } */
+ /* { dg-message "following 'true' branch \\(when 'fd >= 0'\\)..." "event2" { target *-*-* } .-1 } */
+ {
+ read (fd, buf, 1); /* { dg-warning "'read' on 'write-only' file descriptor 'fd'" "warning" } */
+ /* { dg-message "\\(4\\) ...to here" "event1" { target *-*-* } .-1 } */
+ /* { dg-message "\\(5\\) 'read' on 'write-only' file descriptor 'fd'" "event2" { target *-*-* } .-2 } */
+ close (fd);
+ }
+}
+
+
+void
+test_3 (const char *path, void *buf)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ if (fd >= 0)
+ {
+ close(fd); /* {dg-message "\\(2\\) closed here"} */
+ read(fd, buf, 1); /* { dg-warning "'read' on closed file descriptor 'fd'" } */
+ /* {dg-message "\\(3\\) 'read' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */
+ }
+}
+
+void
+test_4 (const char *path, void *buf)
+{
+ int fd = open (path, O_RDWR); /* { dg-message "\\(1\\) opened here" } */
+ if (fd >= 0)
+ {
+ close(fd); /* {dg-message "\\(2\\) closed here"} */
+ write(fd, buf, 1); /* { dg-warning "'write' on closed file descriptor 'fd'" } */
+ /* {dg-message "\\(3\\) 'write' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */
+ }
+}
+
+void
+test_5 (const char *path)
+{
+ int fd = open (path, O_RDWR);
+ close(fd);
+ printf("%d", fd); /* { dg-bogus "'printf' on a closed file descriptor 'fd'" } */
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/analyzer/pr96639.c b/gcc/testsuite/gcc.dg/analyzer/pr96639.c
index 02ca3f0..aedf046 100644
--- a/gcc/testsuite/gcc.dg/analyzer/pr96639.c
+++ b/gcc/testsuite/gcc.dg/analyzer/pr96639.c
@@ -3,7 +3,7 @@ void *calloc (__SIZE_TYPE__, __SIZE_TYPE__);
int
x7 (void)
{
- int **md = calloc (1, 1);
+ int **md = calloc (1, sizeof (void *));
return md[0][0]; /* { dg-warning "possibly-NULL" "unchecked deref" } */
/* { dg-warning "leak of 'md'" "leak" { target *-*-* } .-1 } */
diff --git a/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c b/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
index 5a5a0b9..b7c1fae 100644
--- a/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
@@ -24,3 +24,69 @@ int test_2 (FILE *f)
fread (&s, sizeof (s), 1, f);
return s.a % s.b; /* { dg-warning "use of attacker-controlled value 's\\.b' as divisor without checking for zero" } */
}
+
+/* We shouldn't complain if the divisor has been checked for zero. */
+
+int test_checked_ne_zero (FILE *f)
+{
+ struct st1 s;
+ fread (&s, sizeof (s), 1, f);
+ if (s.b)
+ return s.a / s.b; /* { dg-bogus "divisor" } */
+ else
+ return 0;
+}
+
+int test_checked_gt_zero (FILE *f)
+{
+ struct st1 s;
+ fread (&s, sizeof (s), 1, f);
+ if (s.b > 0)
+ return s.a / s.b; /* { dg-bogus "divisor" } */
+ else
+ return 0;
+}
+
+int test_checked_lt_zero (FILE *f)
+{
+ struct st1 s;
+ fread (&s, sizeof (s), 1, f);
+ if (s.b < 0)
+ return s.a / s.b; /* { dg-bogus "divisor" } */
+ else
+ return 0;
+}
+
+/* We should complain if the check on the divisor still allows it to be
+ zero. */
+
+int test_checked_ge_zero (FILE *f)
+{
+ struct st1 s;
+ fread (&s, sizeof (s), 1, f);
+ if (s.b >= 0)
+ return s.a / s.b; /* { dg-warning "use of attacker-controlled value 's\\.b' as divisor without checking for zero" } */
+ else
+ return 0;
+}
+
+int test_checked_le_zero (FILE *f)
+{
+ struct st1 s;
+ fread (&s, sizeof (s), 1, f);
+ if (s.b <= 0)
+ return s.a / s.b; /* { dg-warning "use of attacker-controlled value 's\\.b' as divisor without checking for zero" } */
+ else
+ return 0;
+}
+
+int test_checked_eq_zero (FILE *f)
+{
+ struct st1 s;
+ fread (&s, sizeof (s), 1, f);
+ /* Wrong sense of test. */
+ if (s.b != 0)
+ return 0;
+ else
+ return s.a / s.b; /* { dg-warning "use of attacker-controlled value 's\\.b' as divisor without checking for zero" } */
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/torture/uninit-pr106204.c b/gcc/testsuite/gcc.dg/analyzer/torture/uninit-pr106204.c
new file mode 100644
index 0000000..25edcf5e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/torture/uninit-pr106204.c
@@ -0,0 +1,13 @@
+/* { dg-additional-options "-ftrivial-auto-var-init=zero" } */
+
+int foo(unsigned *len);
+int test_1()
+{
+ unsigned len; /* { dg-bogus "uninit" } */
+ int rc;
+
+ rc = foo(&len);
+ if (!rc)
+ rc = len;
+ return rc;
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/uninit-pr106204.c b/gcc/testsuite/gcc.dg/analyzer/uninit-pr106204.c
new file mode 100644
index 0000000..7d7cf7b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/analyzer/uninit-pr106204.c
@@ -0,0 +1,17 @@
+/* { dg-additional-options "-ftrivial-auto-var-init=zero" } */
+
+int foo(unsigned *len);
+
+/* Modified version of reproducer that does use "len" before init. */
+
+int test_2()
+{
+ unsigned len;
+ int rc;
+
+ rc = len; /* { dg-warning "use of uninitialized value 'len'" } */
+ rc = foo(&len);
+ if (!rc)
+ rc = len;
+ return rc;
+}
diff --git a/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c b/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c
index d6bb629..669e7c0 100644
--- a/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c
+++ b/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-4.c
@@ -32,7 +32,10 @@ test_thread_##NAME (void *arg) \
{ \
thread_ready = true; \
for (int i = 0; i < ITER_COUNT; i++) \
- PRE var_##NAME POST; \
+ { \
+ sched_yield (); \
+ PRE var_##NAME POST; \
+ } \
return NULL; \
} \
\
@@ -49,9 +52,12 @@ test_main_##NAME (void) \
return 1; \
} \
while (!thread_ready) \
- ; \
+ sched_yield (); \
for (int i = 0; i < ITER_COUNT; i++) \
- PRE var_##NAME POST; \
+ { \
+ PRE var_##NAME POST; \
+ sched_yield (); \
+ } \
pthread_join (thread_id, NULL); \
if (var_##NAME != (FINAL)) \
{ \
diff --git a/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c b/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
index 692c64a..f8bfa63 100644
--- a/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
+++ b/gcc/testsuite/gcc.dg/atomic/c11-atomic-exec-5.c
@@ -53,8 +53,11 @@ test_thread_##NAME (void *arg) \
thread_ready = true; \
while (!thread_stop) \
{ \
+ sched_yield (); \
var_##NAME = (INIT1); \
+ sched_yield (); \
var_##NAME = (INIT2); \
+ sched_yield (); \
} \
return NULL; \
} \
@@ -75,13 +78,14 @@ test_main_##NAME (void) \
} \
int num_1_pass = 0, num_1_fail = 0, num_2_pass = 0, num_2_fail = 0; \
while (!thread_ready) \
- ; \
+ sched_yield (); \
for (int i = 0; i < ITER_COUNT; i++) \
{ \
feclearexcept (FE_ALL_EXCEPT); \
feraiseexcept (BEXC); \
LHSTYPE r = (PRE var_##NAME POST); \
int rexc = fetestexcept (TEST_ALL_EXCEPT); \
+ sched_yield (); \
if (VALTEST1 (r)) \
{ \
if (rexc == ((BEXC) | (EXC1))) \
diff --git a/gcc/testsuite/gcc.dg/atomic/pr80640-2.c b/gcc/testsuite/gcc.dg/atomic/pr80640-2.c
index a735054..e33dcc3 100644
--- a/gcc/testsuite/gcc.dg/atomic/pr80640-2.c
+++ b/gcc/testsuite/gcc.dg/atomic/pr80640-2.c
@@ -12,7 +12,8 @@ static void *f(void *va)
void **p = va;
if (*p) return *p;
sem1 = 1;
- while (!__atomic_load_n(&sem2, __ATOMIC_ACQUIRE));
+ while (!__atomic_load_n(&sem2, __ATOMIC_ACQUIRE))
+ sched_yield ();
// GCC used to RTL-CSE this and the first load, causing 0 to be returned
return *p;
}
@@ -23,7 +24,8 @@ int main()
pthread_t thr;
if (pthread_create(&thr, 0, f, &p))
return 2;
- while (!sem1);
+ while (!sem1)
+ sched_yield ();
__atomic_thread_fence(__ATOMIC_ACQUIRE);
p = &p;
__atomic_store_n(&sem2, 1, __ATOMIC_RELEASE);
diff --git a/gcc/testsuite/gcc.dg/atomic/pr80640.c b/gcc/testsuite/gcc.dg/atomic/pr80640.c
index fd17978..2577e0d 100644
--- a/gcc/testsuite/gcc.dg/atomic/pr80640.c
+++ b/gcc/testsuite/gcc.dg/atomic/pr80640.c
@@ -12,7 +12,8 @@ static void *f(void *va)
void **p = va;
if (*p) return *p;
sem1 = 1;
- while (!sem2);
+ while (!sem2)
+ sched_yield ();
__atomic_thread_fence(__ATOMIC_ACQUIRE);
// GCC used to RTL-CSE this and the first load, causing 0 to be returned
return *p;
@@ -24,7 +25,8 @@ int main()
pthread_t thr;
if (pthread_create(&thr, 0, f, &p))
return 2;
- while (!sem1);
+ while (!sem1)
+ sched_yield ();
__atomic_thread_fence(__ATOMIC_ACQUIRE);
p = &p;
__atomic_thread_fence(__ATOMIC_RELEASE);
diff --git a/gcc/testsuite/gcc.dg/atomic/pr81316.c b/gcc/testsuite/gcc.dg/atomic/pr81316.c
index ef10095..dc6569a 100644
--- a/gcc/testsuite/gcc.dg/atomic/pr81316.c
+++ b/gcc/testsuite/gcc.dg/atomic/pr81316.c
@@ -10,7 +10,8 @@ static _Atomic int sem1;
static void *f(void *va)
{
void **p = va;
- while (!__atomic_load_n(&sem1, __ATOMIC_ACQUIRE));
+ while (!__atomic_load_n(&sem1, __ATOMIC_ACQUIRE))
+ sched_yield ();
exit(!*p);
}
@@ -24,6 +25,10 @@ int main(int argc)
p = &p;
__atomic_store_n(&sem1, 1, __ATOMIC_RELEASE);
int r = -1;
- while (r < 0) asm("":"+r"(r));
+ while (r < 0)
+ {
+ sched_yield ();
+ asm("":"+r"(r));
+ }
return r;
}
diff --git a/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-0.c b/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-0.c
index b5b0b3a..01a280b 100644
--- a/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-0.c
+++ b/gcc/testsuite/gcc.dg/builtin-dynamic-object-size-0.c
@@ -479,6 +479,20 @@ test_loop (int *obj, size_t sz, size_t start, size_t end, int incr)
return __builtin_dynamic_object_size (ptr, 0);
}
+/* Other tests. */
+
+struct TV4
+{
+ __attribute__((vector_size (sizeof (int) * 4))) int v;
+};
+
+struct TV4 val3;
+int *
+test_pr105736 (struct TV4 *a)
+{
+ return &a->v[0];
+}
+
unsigned nfails = 0;
#define FAIL() ({ \
@@ -633,6 +647,10 @@ main (int argc, char **argv)
FAIL ();
if (test_loop (arr, 42, 20, 52, 1) != 0)
FAIL ();
+ /* pr105736. */
+ int *t = test_pr105736 (&val3);
+ if (__builtin_dynamic_object_size (t, 0) != -1)
+ FAIL ();
if (nfails > 0)
__builtin_abort ();
diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-20.c b/gcc/testsuite/gcc.dg/builtin-object-size-20.c
index bed973c..f40e3dc 100644
--- a/gcc/testsuite/gcc.dg/builtin-object-size-20.c
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-20.c
@@ -1,7 +1,8 @@
/* PR middle-end/92815 - spurious -Wstringop-overflow writing into
a flexible array of an extern struct
{ dg-do compile }
- { dg-options "-O -Wall -fdump-tree-optimized" } */
+ { dg-options "-O -Wall -fdump-tree-optimized" }
+ { dg-skip-if "test assumes that structs have padding" { default_packed } } */
#define ASSERT(expr) ((expr) ? (void)0 : fail (__LINE__))
#define bos0(expr) __builtin_object_size (expr, 1)
@@ -18,44 +19,6 @@ typedef __SIZE_TYPE__ size_t;
extern void fail (int);
-/* Verify sizes of a struct with a flexible array member and no padding. */
-
-struct ACX { char n, a[]; };
-
-struct ACX ac0 = { };
-struct ACX ac1 = { 1, { 1 } };
-struct ACX ac2 = { 2, { 1, 2 } };
-struct ACX ac3 = { 3, { 1, 2, 3 } };
-
-extern struct ACX eacx;
-
-void facx (void)
-{
- ASSERT (bos0 (&ac0) == sizeof ac0);
- ASSERT (bos0 (&ac1) == 2);
- ASSERT (bos0 (&ac2) == 3);
- ASSERT (bos0 (&ac3) == 4);
- ASSERT (bos0 (&eacx) == (size_t)-1);
-
- ASSERT (bos1 (&ac0) == sizeof ac0);
- ASSERT (bos1 (&ac1) == 2);
- ASSERT (bos1 (&ac2) == 3);
- ASSERT (bos1 (&ac3) == 4);
- ASSERT (bos1 (&eacx) == (size_t)-1);
-
- ASSERT (bos2 (&ac0) == sizeof ac0);
- ASSERT (bos2 (&ac1) == 2);
- ASSERT (bos2 (&ac2) == 3);
- ASSERT (bos2 (&ac3) == 4);
- ASSERT (bos2 (&eacx) == sizeof eacx);
-
- ASSERT (bos3 (&ac0) == sizeof ac0);
- ASSERT (bos3 (&ac1) == 2);
- ASSERT (bos3 (&ac2) == 3);
- ASSERT (bos3 (&ac3) == 4);
- ASSERT (bos3 (&eacx) == sizeof eacx);
-}
-
/* Verify sizes of a struct with a flexible array member and 1 byte
@@ -289,27 +252,4 @@ void fai64cx (void)
ASSERT (bos3 (&eai64cx) == sizeof eai64cx);
}
-
-/* Also verify sizes of a struct with a zero length array member. */
-
-struct A0C0 { char n, a[0]; };
-
-struct A0C0 a0c0 = { };
-extern struct A0C0 ea0c0;
-
-void fa0c0 (void)
-{
- ASSERT (bos0 (&a0c0) == sizeof a0c0);
- ASSERT (bos0 (&ea0c0) == sizeof ea0c0);
-
- ASSERT (bos1 (&a0c0) == sizeof a0c0);
- ASSERT (bos1 (&a0c0) == sizeof ea0c0);
-
- ASSERT (bos2 (&a0c0) == sizeof a0c0);
- ASSERT (bos2 (&a0c0) == sizeof ea0c0);
-
- ASSERT (bos3 (&a0c0) == sizeof a0c0);
- ASSERT (bos3 (&a0c0) == sizeof ea0c0);
-}
-
/* { dg-final { scan-tree-dump-not "fail" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-22.c b/gcc/testsuite/gcc.dg/builtin-object-size-22.c
new file mode 100644
index 0000000..1e55229
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-22.c
@@ -0,0 +1,79 @@
+/* PR middle-end/92815 - a variant of gcc.dg/builtin-object-size-20.c
+ prepared for all targets, irregardless if they pack or not
+ the structs by default.
+ { dg-do compile }
+ { dg-options "-O -Wall -fdump-tree-optimized" } */
+
+#define ASSERT(expr) ((expr) ? (void)0 : fail (__LINE__))
+#define bos0(expr) __builtin_object_size (expr, 1)
+#define bos1(expr) __builtin_object_size (expr, 1)
+#define bos2(expr) __builtin_object_size (expr, 2)
+#define bos3(expr) __builtin_object_size (expr, 3)
+
+typedef __SIZE_TYPE__ size_t;
+
+
+extern void fail (int);
+
+
+/* Verify sizes of a struct with a flexible array member and no padding. */
+
+struct ACX { char n, a[]; };
+
+struct ACX ac0 = { };
+struct ACX ac1 = { 1, { 1 } };
+struct ACX ac2 = { 2, { 1, 2 } };
+struct ACX ac3 = { 3, { 1, 2, 3 } };
+
+extern struct ACX eacx;
+
+void facx (void)
+{
+ ASSERT (bos0 (&ac0) == sizeof ac0);
+ ASSERT (bos0 (&ac1) == 2);
+ ASSERT (bos0 (&ac2) == 3);
+ ASSERT (bos0 (&ac3) == 4);
+ ASSERT (bos0 (&eacx) == (size_t)-1);
+
+ ASSERT (bos1 (&ac0) == sizeof ac0);
+ ASSERT (bos1 (&ac1) == 2);
+ ASSERT (bos1 (&ac2) == 3);
+ ASSERT (bos1 (&ac3) == 4);
+ ASSERT (bos1 (&eacx) == (size_t)-1);
+
+ ASSERT (bos2 (&ac0) == sizeof ac0);
+ ASSERT (bos2 (&ac1) == 2);
+ ASSERT (bos2 (&ac2) == 3);
+ ASSERT (bos2 (&ac3) == 4);
+ ASSERT (bos2 (&eacx) == sizeof eacx);
+
+ ASSERT (bos3 (&ac0) == sizeof ac0);
+ ASSERT (bos3 (&ac1) == 2);
+ ASSERT (bos3 (&ac2) == 3);
+ ASSERT (bos3 (&ac3) == 4);
+ ASSERT (bos3 (&eacx) == sizeof eacx);
+}
+
+/* Also verify sizes of a struct with a zero length array member. */
+
+struct A0C0 { char n, a[0]; };
+
+struct A0C0 a0c0 = { };
+extern struct A0C0 ea0c0;
+
+void fa0c0 (void)
+{
+ ASSERT (bos0 (&a0c0) == sizeof a0c0);
+ ASSERT (bos0 (&ea0c0) == sizeof ea0c0);
+
+ ASSERT (bos1 (&a0c0) == sizeof a0c0);
+ ASSERT (bos1 (&a0c0) == sizeof ea0c0);
+
+ ASSERT (bos2 (&a0c0) == sizeof a0c0);
+ ASSERT (bos2 (&a0c0) == sizeof ea0c0);
+
+ ASSERT (bos3 (&a0c0) == sizeof a0c0);
+ ASSERT (bos3 (&a0c0) == sizeof ea0c0);
+}
+
+/* { dg-final { scan-tree-dump-not "fail" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/c11-align-4.c b/gcc/testsuite/gcc.dg/c11-align-4.c
index 57f93ff..eb9071b 100644
--- a/gcc/testsuite/gcc.dg/c11-align-4.c
+++ b/gcc/testsuite/gcc.dg/c11-align-4.c
@@ -2,7 +2,7 @@
are at least some alignment constraints). */
/* { dg-do compile } */
/* { dg-options "-std=c11 -pedantic-errors" } */
-/* { dg-skip-if "no alignment constraints" { "avr-*-*" } } */
+/* { dg-skip-if "no alignment constraints" { no_alignment_constraints } } */
#include <stddef.h>
diff --git a/gcc/testsuite/gcc.dg/darwin-comm-1.c b/gcc/testsuite/gcc.dg/darwin-comm-1.c
index 4651998..2ea11d6 100644
--- a/gcc/testsuite/gcc.dg/darwin-comm-1.c
+++ b/gcc/testsuite/gcc.dg/darwin-comm-1.c
@@ -1,5 +1,6 @@
-/* { dg-do compile { target *-*-darwin[912]* } } */
+/* { dg-do compile { target *-*-darwin* } } */
/* { dg-options "-fcommon" } */
/* In all cases, common has a max alignment of 2^15. */
-int badcommon __attribute__ ((aligned (65536))); /* { dg-error "common variables must have an alignment" } */
+int badcommon __attribute__ ((aligned (65536))); /* { dg-error "common variables must have an alignment" "" { target { *-*-darwin1[1-9]* *-*-darwin2* } } } */
+/* { dg-error "requested alignment .65536. exceeds object file maximum 32768" "" { target { *-*-darwin[4-9]* *-*-darwin10* } } .-1 } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c
index c6bf521..793b4c8 100644
--- a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c
+++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-1.c
@@ -5,16 +5,19 @@
(bit_size << 24) | bit_offset
- (0xa << 24) | 0x20
- (0x7 << 24) | 0x2a
- - (0x13 << 24) | 0x40 - note that this is aligned to 0x40. */
+ - (0x13 << 24) | 0x40 - note that this is aligned to 0x40.
+ - (0x13 << 24) | 0x31 - in case structures are packed. */
/* { dg-do compile ) */
/* { dg-options "-O0 -gbtf -dA" } */
+/* { dg-require-effective-target int32plus } */
/* { dg-final { scan-assembler-times "\[\t \]0x84000004\[\t \]+\[^\n\]*btt_info" 1 } } */
/* { dg-final { scan-assembler-times "\[\t \]0xa000020\[\t \]+\[^\n\]*btm_offset" 1 } } */
/* { dg-final { scan-assembler-times "\[\t \]0x700002a\[\t \]+\[^\n\]*btm_offset" 1 } } */
-/* { dg-final { scan-assembler-times "\[\t \]0x13000040\[\t \]+\[^\n\]*btm_offset" 1 } } */
+/* { dg-final { scan-assembler-times "\[\t \]0x13000040\[\t \]+\[^\n\]*btm_offset" 1 { target { ! default_packed } } } } */
+/* { dg-final { scan-assembler-times "\[\t \]0x13000031\[\t \]+\[^\n\]*btm_offset" 1 { target { default_packed } } } } */
struct bitt {
int a;
diff --git a/gcc/testsuite/gcc.dg/di-sync-multithread.c b/gcc/testsuite/gcc.dg/di-sync-multithread.c
index 493f1e2..1a97df7 100644
--- a/gcc/testsuite/gcc.dg/di-sync-multithread.c
+++ b/gcc/testsuite/gcc.dg/di-sync-multithread.c
@@ -70,6 +70,8 @@ worker (void* data)
case this to carry across the 32bit boundary. */
for (tmp2 = 0; tmp2 < 64; tmp2++)
{
+ sched_yield ();
+
/* Add 2 using the two different adds. */
tmp1 = __sync_add_and_fetch (&workspace, add1bit);
tmp3 = __sync_fetch_and_add (&workspace, add1bit);
@@ -103,6 +105,8 @@ worker (void* data)
for (tmp2 = 0; tmp2 < 64; tmp2++)
{
+ sched_yield ();
+
/* Subtract 2 using the two different subs. */
tmp1=__sync_sub_and_fetch (&workspace, add1bit);
tmp3=__sync_fetch_and_sub (&workspace, add1bit);
@@ -178,6 +182,8 @@ main ()
t, err);
};
+ sched_yield ();
+
#ifdef _WIN32
Sleep (5000);
#else
@@ -187,6 +193,8 @@ main ()
/* Stop please. */
__sync_lock_test_and_set (&doquit, 1ll);
+ sched_yield ();
+
for (t = 0; t < 3; t++)
{
err=pthread_join (threads[t], NULL);
diff --git a/gcc/testsuite/gcc.dg/graphite/pr106055.c b/gcc/testsuite/gcc.dg/graphite/pr106055.c
new file mode 100644
index 0000000..22be62b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr106055.c
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -floop-parallelize-all -fno-tree-dce" } */
+
+__attribute__ ((returns_twice)) int
+bar (void);
+
+void
+quux (void);
+
+void
+empty (void)
+{
+}
+
+unsigned int
+choose (unsigned int x, unsigned int y)
+{
+ return y ? x : 0;
+}
+
+int
+foo (int *p, unsigned int x, int y)
+{
+ unsigned int acc = 0;
+
+ empty ();
+
+ while (x)
+ {
+ bar ();
+ ++x;
+ }
+
+ while (y)
+ acc += y;
+
+ *p = choose (acc, 1);
+ quux ();
+
+ return x;
+}
diff --git a/gcc/testsuite/gcc.dg/lower-subreg-1.c b/gcc/testsuite/gcc.dg/lower-subreg-1.c
index 595938a..c62db2c 100644
--- a/gcc/testsuite/gcc.dg/lower-subreg-1.c
+++ b/gcc/testsuite/gcc.dg/lower-subreg-1.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { ! { mips64 || { aarch64*-*-* arm*-*-* i?86-*-* ia64-*-* pru-*-* sparc*-*-* tilegx-*-* x86_64-*-* } } } } } */
+/* { dg-do compile { target { ! { mips64 || { aarch64*-*-* arm*-*-* i?86-*-* ia64-*-* pru-*-* sparc*-*-* x86_64-*-* } } } } } */
/* { dg-options "-O -fdump-rtl-subreg1" } */
/* { dg-require-effective-target ilp32 } */
diff --git a/gcc/testsuite/gcc.dg/lto/pr101868_0.c b/gcc/testsuite/gcc.dg/lto/pr101868_0.c
index c84d19b..0312430 100644
--- a/gcc/testsuite/gcc.dg/lto/pr101868_0.c
+++ b/gcc/testsuite/gcc.dg/lto/pr101868_0.c
@@ -22,12 +22,13 @@ repro(VALUE dummy, VALUE hash)
static VALUE (*that)(VALUE dummy, VALUE hash) = repro;
+volatile int zero = 0;
+
int
main(int argc, char **argv)
{
- argc--;
- that(0, argc);
+ that(0, zero);
- rb_check_type(argc, argc);
+ rb_check_type(zero, zero);
}
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata.c
index d2babd3..38ecf0a 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata.c
@@ -5,5 +5,5 @@ extern char *gets (char *s);
void test_cwe (void)
{
char buf[1024];
- gets (buf); /* { dg-warning "never use 'gets' \\\[CWE-242\\\]" } */
+ gets (buf); /* { dg-warning "never use 'gets' \\\[CWE-242\\\] \\\[STR34-C\\\]" } */
}
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c
index 4b13afc..b86a8b3 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_metadata.c
@@ -106,9 +106,16 @@ pass_test_metadata::execute (function *fun)
if (gcall *call = check_for_named_call (stmt, "gets", 1))
{
gcc_rich_location richloc (gimple_location (call));
- /* CWE-242: Use of Inherently Dangerous Function. */
diagnostic_metadata m;
+
+ /* CWE-242: Use of Inherently Dangerous Function. */
m.add_cwe (242);
+
+ /* Example of a diagnostic_metadata::rule. */
+ diagnostic_metadata::precanned_rule
+ test_rule ("STR34-C", "https://example.com/");
+ m.add_rule (test_rule);
+
warning_meta (&richloc, m, 0,
"never use %qs", "gets");
}
diff --git a/gcc/testsuite/gcc.dg/pr100781.c b/gcc/testsuite/gcc.dg/pr100781.c
index c0e008a..96f0a7a 100644
--- a/gcc/testsuite/gcc.dg/pr100781.c
+++ b/gcc/testsuite/gcc.dg/pr100781.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 --param=evrp-mode=ranger -fcompare-debug " } */
+/* { dg-options "-O2 -fcompare-debug " } */
struct a {
int b;
diff --git a/gcc/testsuite/gcc.dg/pr105835.c b/gcc/testsuite/gcc.dg/pr105835.c
new file mode 100644
index 0000000..354c81c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr105835.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-optimized" } */
+
+void foo();
+
+static int b;
+
+static short a(short c, unsigned short d) { return c - d; }
+
+int main() {
+ int e = -(0 < b);
+ if (a(1, e))
+ b = 0;
+ else
+ foo();
+}
+
+/* { dg-final { scan-tree-dump-not "goto" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr106027.c b/gcc/testsuite/gcc.dg/pr106027.c
new file mode 100644
index 0000000..735205f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr106027.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+int
+foo (unsigned int x, int y)
+{
+ return x <= (((y != y) < 0) ? y < 1 : 0);
+}
diff --git a/gcc/testsuite/gcc.dg/pr106063.c b/gcc/testsuite/gcc.dg/pr106063.c
new file mode 100644
index 0000000..467b31d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr106063.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2 -fno-tree-forwprop --disable-tree-evrp" } */
+typedef __int128 __attribute__((__vector_size__ (16))) V;
+
+V
+foo (V v)
+{
+ return (v & (V){15}) == v;
+}
diff --git a/gcc/testsuite/gcc.dg/pr106114.c b/gcc/testsuite/gcc.dg/pr106114.c
new file mode 100644
index 0000000..64c8b8d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr106114.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-dom2" } */
+
+int printf(const char *, ...);
+char a = 139, b;
+int main() {
+ char c = 173;
+ b = a;
+ while (c <= a || a < -117)
+ c = printf("0\n");
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "if" 2 "dom2" } } */
diff --git a/gcc/testsuite/gcc.dg/pr106198.c b/gcc/testsuite/gcc.dg/pr106198.c
new file mode 100644
index 0000000..00d2758
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr106198.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+int printf(const char *, ...);
+long a;
+int b;
+volatile int c;
+int main() {
+ long e = a;
+ int f = a;
+ L:
+ if (b > 0) {
+ printf("0");
+ goto L;
+ }
+ if (f) {
+ printf("%ld", (long)b);
+ goto L;
+ }
+ e >= b && c;
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr94026.c b/gcc/testsuite/gcc.dg/pr94026.c
new file mode 100644
index 0000000..deb4efd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr94026.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+int f1(int x) { return ((x >> 8) & 6) != 0; }
+int f2(int x) { return ((x << 2) & 24) != 0; }
+int f3(unsigned x) { return ((x << 2) & 15) != 0; }
+int f4(unsigned x) { return ((x >> 2) & 14) != 0; }
+
+int fifth (int c)
+{
+ int a = (c >> 8) & 7;
+
+ if (a >= 2) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+/* { dg-final { scan-tree-dump-not " << " "optimized" } } */
+/* { dg-final { scan-tree-dump-not " >> " "optimized" } } */
+
diff --git a/gcc/testsuite/gcc.dg/pr94899.c b/gcc/testsuite/gcc.dg/pr94899.c
new file mode 100644
index 0000000..9fad057
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr94899.c
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+typedef __INT16_TYPE__ int16_t;
+typedef __INT32_TYPE__ int32_t;
+typedef __UINT16_TYPE__ uint16_t;
+typedef __UINT32_TYPE__ uint32_t;
+
+#define MAGIC (~ (uint32_t) 0 / 2 + 1)
+
+int
+f_i16_i16 (int16_t x, int16_t y)
+{
+ return x + MAGIC < y + MAGIC;
+}
+
+int
+f_i16_i32 (int16_t x, int32_t y)
+{
+ return x + MAGIC < y + MAGIC;
+}
+
+int
+f_i32_i32 (int32_t x, int32_t y)
+{
+ return x + MAGIC < y + MAGIC;
+}
+
+int
+f_u32_i32 (uint32_t x, int32_t y)
+{
+ return x + MAGIC < y + MAGIC;
+}
+
+int
+f_u32_u32 (uint32_t x, uint32_t y)
+{
+ return x + MAGIC < y + MAGIC;
+}
+
+int
+f_i32_i32_sub (int32_t x, int32_t y)
+{
+ return x - MAGIC < y - MAGIC;
+}
+
+/* The addition/subtraction of constants should be optimized away. */
+/* { dg-final { scan-tree-dump-not " \\+ " "optimized"} } */
+/* { dg-final { scan-tree-dump-not " \\- " "optimized"} } */
diff --git a/gcc/testsuite/gcc.dg/pr98304-1.c b/gcc/testsuite/gcc.dg/pr98304-1.c
new file mode 100644
index 0000000..dce54dd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr98304-1.c
@@ -0,0 +1,57 @@
+/* PR tree-optimization/98304 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+/* Signed test function. */
+__attribute__((noipa)) int foo(int n) {
+ return n - (((n > 63) ? n : 63) & -64);
+}
+
+/* Unsigned test function. */
+__attribute__((noipa)) unsigned int bar(unsigned int n) {
+ return n - (((n > 63) ? n : 63) & -64);
+}
+
+/* Different power of 2. */
+__attribute__((noipa)) int goo(int n) {
+ return n - (((n > 31) ? n : 31) & -32);
+}
+
+/* Commutative property (should be identical to foo) */
+__attribute__((noipa)) int baz(int n) {
+ return n - (((64 > n) ? 63 : n) & -64);
+}
+
+/* < instead of >. */
+__attribute__((noipa)) int fred(int n) {
+ return n - (((63 < n) ? n : 63) & -64);
+}
+
+/* Constant is not a power of 2 so should not simplify. */
+__attribute__((noipa)) int qux(int n) {
+ return n - (((n > 62) ? n : 62) & -63);
+}
+
+/* Constant is not a power of 2 so should not simplify. */
+__attribute__((noipa)) unsigned int quux(unsigned int n) {
+ return n - (((n > 62) ? n : 62) & -63);
+}
+
+/* Constant is a variable so should not simplify. */
+__attribute__((noipa)) int waldo(int n, int x) {
+ return n - (((n > 63) ? n : 63) & x);
+}
+
+/* Difference between constants is not -1. */
+__attribute__((noipa)) int corge(int n) {
+ return n - (((n > 1) ? n : 1) & -64);
+}
+
+/* Difference between constants is not -1. */
+__attribute__((noipa)) unsigned int thud(unsigned int n)
+{
+ return n - (((n > 1) ? n : 1) & -64);
+}
+
+/* { dg-final { scan-tree-dump-times " - " 5 "optimized" } } */
+/* { dg-final { scan-tree-dump-times " <= " 4 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/sancov/cmp0.c b/gcc/testsuite/gcc.dg/sancov/cmp0.c
index 8bbf06e..9fd7f5c 100644
--- a/gcc/testsuite/gcc.dg/sancov/cmp0.c
+++ b/gcc/testsuite/gcc.dg/sancov/cmp0.c
@@ -1,6 +1,6 @@
/* Basic test on number of inserted callbacks. */
/* { dg-do compile } */
-/* { dg-options "-fsanitize-coverage=trace-cmp -fdump-tree-optimized" } */
+/* { dg-options "-fsanitize-coverage=trace-cmp -fdump-tree-optimized -fno-thread-jumps" } */
/* { dg-skip-if "different type layout" { avr-*-* } } */
#if __SIZEOF_INT__ < 4
diff --git a/gcc/testsuite/gcc.dg/sso/memcpy-1.c b/gcc/testsuite/gcc.dg/sso/memcpy-1.c
index b4e1c87..0dea955 100644
--- a/gcc/testsuite/gcc.dg/sso/memcpy-1.c
+++ b/gcc/testsuite/gcc.dg/sso/memcpy-1.c
@@ -3,20 +3,20 @@
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
-#define __big_endian__ scalar_storage_order("big-endian")
-#define __little_endian__ scalar_storage_order("little-endian")
+#define __big_endian_attr__ scalar_storage_order("big-endian")
+#define __little_endian_attr__ scalar_storage_order("little-endian")
typedef union
{
uint32_t val;
uint8_t v[4];
-} __attribute__((__big_endian__)) upal_u32be_t;
+} __attribute__((__big_endian_attr__)) upal_u32be_t;
typedef union
{
uint32_t val;
uint8_t v[4];
-} __attribute__((__little_endian__)) upal_u32le_t;
+} __attribute__((__little_endian_attr__)) upal_u32le_t;
static inline uint32_t native_to_big_endian(uint32_t t)
{
diff --git a/gcc/testsuite/gcc.dg/strlenopt-10.c b/gcc/testsuite/gcc.dg/strlenopt-10.c
index ce959c3..6e2c259 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-10.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-10.c
@@ -70,10 +70,10 @@ main ()
}
/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen1" } } */
-/* avr has BIGGEST_ALIGNMENT 8, allowing fold_builtin_memory_op
+/* Some targets have BIGGEST_ALIGNMENT 8-bits, allowing fold_builtin_memory_op
to expand the memcpy call at the end of fn2. */
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 8 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 7 "strlen1" { target { avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 8 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 7 "strlen1" { target { no_alignment_constraints} } } } */
/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen1" } } */
diff --git a/gcc/testsuite/gcc.dg/strlenopt-11.c b/gcc/testsuite/gcc.dg/strlenopt-11.c
index abd9fae..952de07 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-11.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-11.c
@@ -59,17 +59,17 @@ main ()
}
/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen1" } } */
-/* avr has BIGGEST_ALIGNMENT 8, allowing fold_builtin_memory_op
+/* Some targets have BIGGEST_ALIGNMENT 8-bits, allowing fold_builtin_memory_op
to expand the memcpy call at the end of fn1. */
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 7 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen1" { target { avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 7 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen1" { target { no_alignment_constraints } } } } */
/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen1" } } */
/* Where the memcpy is expanded, the assignemts to elements of l are
propagated. */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.0. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.6. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.9. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;" 3 "strlen1" { target { avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.0. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.6. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.9. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;" 3 "strlen1" { target { no_alignment_constraints } } } } */
diff --git a/gcc/testsuite/gcc.dg/strlenopt-13.c b/gcc/testsuite/gcc.dg/strlenopt-13.c
index 27ecc79..4c6d526 100644
--- a/gcc/testsuite/gcc.dg/strlenopt-13.c
+++ b/gcc/testsuite/gcc.dg/strlenopt-13.c
@@ -56,18 +56,18 @@ main ()
}
/* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen1" } } */
-/* avr has BIGGEST_ALIGNMENT 8, allowing fold_builtin_memory_op
+/* Some targets have BIGGEST_ALIGNMENT 8-bits, allowing fold_builtin_memory_op
to expand the memcpy call at the end of fn1. */
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 7 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen1" { target { avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 7 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 6 "strlen1" { target { no_alignment_constraints } } } } */
/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen1" } } */
/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen1" } } */
/* Where the memcpy is expanded, the assignemts to elements of l are
propagated. */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.0. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.1. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.5. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.6. = " 1 "strlen1" { target { ! avr-*-* } } } } */
-/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;" 4 "strlen1" { target { avr-*-* } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.0. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.1. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.5. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;\[\n\r\]* l.6. = " 1 "strlen1" { target { ! no_alignment_constraints } } } } */
+/* { dg-final { scan-tree-dump-times " _\[0-9\]* = strlen \\(\[^\n\r\]*;" 4 "strlen1" { target { no_alignment_constraints } } } } */
diff --git a/gcc/testsuite/gcc.dg/torture/fp-double-convert-float-1.c b/gcc/testsuite/gcc.dg/torture/fp-double-convert-float-1.c
index ec23274..1c28a9e 100644
--- a/gcc/testsuite/gcc.dg/torture/fp-double-convert-float-1.c
+++ b/gcc/testsuite/gcc.dg/torture/fp-double-convert-float-1.c
@@ -1,6 +1,7 @@
/* PR57245 */
/* { dg-do run } */
/* { dg-require-effective-target fenv } */
+/* { dg-require-effective-target hard_float } */
/* { dg-additional-options "-frounding-math" } */
#include <fenv.h>
diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c b/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c
index 707d539..6f9a8d3 100644
--- a/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c
+++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-3.c
@@ -3,6 +3,7 @@
/* { dg-do run } */
/* { dg-require-effective-target int128 } */
/* { dg-require-effective-target fenv } */
+/* { dg-require-effective-target hard_float } */
/* { dg-options "-frounding-math" } */
#include <fenv.h>
diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c b/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c
index 09600f9..15f478d 100644
--- a/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c
+++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode-4.c
@@ -3,6 +3,7 @@
/* { dg-do run } */
/* { dg-require-effective-target int128 } */
/* { dg-require-effective-target fenv } */
+/* { dg-require-effective-target hard_float } */
/* { dg-options "-frounding-math" } */
#include <fenv.h>
diff --git a/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-1.c b/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-1.c
index fadad8c..0c7bf00 100644
--- a/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-1.c
+++ b/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-1.c
@@ -1,6 +1,7 @@
/* PR84407 */
/* { dg-do run } */
/* { dg-require-effective-target fenv } */
+/* { dg-require-effective-target hard_float } */
/* { dg-additional-options "-frounding-math -fexcess-precision=standard" } */
#include <fenv.h>
diff --git a/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-2.c b/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-2.c
index 952f96b..ac24b35 100644
--- a/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-2.c
+++ b/gcc/testsuite/gcc.dg/torture/fp-uint64-convert-double-2.c
@@ -1,6 +1,7 @@
/* PR84407 */
/* { dg-do run } */
/* { dg-require-effective-target fenv } */
+/* { dg-require-effective-target hard_float } */
/* { dg-additional-options "-frounding-math" } */
#include <fenv.h>
diff --git a/gcc/testsuite/gcc.dg/torture/pr106070.c b/gcc/testsuite/gcc.dg/torture/pr106070.c
new file mode 100644
index 0000000..f031516
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr106070.c
@@ -0,0 +1,22 @@
+/* { dg-do run } */
+
+unsigned int a = 1;
+int b = -1;
+int c = 4;
+unsigned long long d;
+
+void __attribute__((noipa))
+test (void)
+{
+ for (int i = 0; i < c; i += 2)
+ d = a != (int) b ? (unsigned long long) b : (unsigned long long) a;
+}
+
+int
+main ()
+{
+ test ();
+ if (d != -1ULL)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr106112.c b/gcc/testsuite/gcc.dg/torture/pr106112.c
new file mode 100644
index 0000000..bd7f63c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr106112.c
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+
+__INT32_TYPE__ a = 5, b, c, d;
+__UINT64_TYPE__ e = 20862985922;
+int main()
+{
+ __UINT32_TYPE__ f = 4294967292;
+ e = e | f;
+ c = -1 % ((~f ^ 4294967292) - (e - d));
+ b = ~-~e % ~-d;
+ if (b)
+ a = 0;
+ if (a < 1)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr106182.c b/gcc/testsuite/gcc.dg/torture/pr106182.c
new file mode 100644
index 0000000..6b5c249
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr106182.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-funswitch-loops" } */
+
+short var_32;
+int test_var_0;
+unsigned char test_var_6;
+char test_var_13;
+void test(int var_2)
+{
+ for (;;)
+ for (short i_7; i_7 < test_var_13; i_7 += 1)
+ for (; test_var_0;) {
+ for (; var_2;)
+ var_32 = 0;
+ for (char i_19; i_19 < test_var_6 + 135; i_19 += 200)
+ ;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr106196.c b/gcc/testsuite/gcc.dg/torture/pr106196.c
new file mode 100644
index 0000000..56723de
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr106196.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-ftree-vectorize -fno-vect-cost-model" } */
+
+extern char a[];
+char *b;
+void e() {
+ char *d;
+ int c;
+ d = a;
+ for (; c; c++) {
+ d[2] = d[1] = d[0] = b[c];
+ d += 3;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-13.c b/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-13.c
new file mode 100644
index 0000000..87a94f5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-13.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-fre1" } */
+
+struct inn
+{
+ int val;
+};
+
+struct biggerstruct
+{
+ int a, b;
+};
+
+union foo
+{
+ struct inn inn;
+ struct biggerstruct baz;
+} *fooptr;
+
+struct bar
+{
+ union foo foo;
+ int val2;
+} *barptr;
+
+int
+test ()
+{
+ union foo foo;
+ foo.inn.val = 0;
+ barptr->val2 = 123;
+ *fooptr = foo;
+ return barptr->val2;
+}
+
+/* { dg-final { scan-tree-dump-times "return 123" 1 "fre1"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-11.c b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-11.c
new file mode 100644
index 0000000..3dffee04
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/if-to-switch-11.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-iftoswitch-optimized" } */
+
+struct f {
+ int len;
+ int arr[4];
+};
+
+int
+test (struct f const *const f)
+{
+ if (f->arr[3] == 1) {
+ return 12;
+ } else if (f->arr[3] == 2) {
+ return 27;
+ } else if (f->arr[3] == 3) {
+ return 38;
+ } else if (f->arr[3] == 4) {
+ return 18;
+ } else if (f->arr[3] == 5) {
+ return 58;
+ } else if (f->arr[3] == 6) {
+ return 68;
+ }
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump "Canonical GIMPLE case clusters: 1 2 3 4 5 6" "iftoswitch" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr105860.c b/gcc/testsuite/gcc.dg/tree-ssa/pr105860.c
new file mode 100644
index 0000000..77bcb4a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr105860.c
@@ -0,0 +1,63 @@
+/* { dg-do run } */
+/* { dg-options "-O1" } */
+
+struct S1 {
+ unsigned int _0;
+ unsigned int _1;
+} ;
+struct S2 {
+ struct S1 _s1;
+ unsigned long _x2;
+} ;
+
+struct ufld_type1 {
+ unsigned int _u1t;
+ struct S2 _s2;
+} ;
+
+struct ufld_type2 {
+ unsigned int _u2t;
+ struct S1 _s1;
+} ;
+struct parm_type {
+ union {
+ struct ufld_type1 var_1;
+ struct ufld_type2 var_2;
+ } U;
+};
+
+struct parm_type bad_function( struct parm_type arg0 )
+{
+ struct parm_type rv;
+ struct S2 var4;
+ switch( arg0.U.var_2._u2t ) {
+ case 4294967041:
+ var4._s1 = arg0.U.var_1._s2._s1;
+ rv.U.var_1._u1t = 4294967041;
+ rv.U.var_1._s2 = var4;
+ break;
+ case 4294967043:
+ rv.U.var_2._u2t = 4294967043;
+ rv.U.var_2._s1 = arg0.U.var_2._s1;
+ break;
+ default:
+ break;
+ }
+ return rv;
+}
+
+int main() {
+ struct parm_type val;
+ struct parm_type out;
+ val.U.var_2._u2t = 4294967043;
+ val.U.var_2._s1._0 = 0x01010101;
+ val.U.var_2._s1._1 = 0x02020202;
+ out = bad_function(val);
+ if (val.U.var_2._u2t != 4294967043)
+ __builtin_abort ();
+ if (out.U.var_2._s1._0 != 0x01010101)
+ __builtin_abort ();
+ if (val.U.var_2._s1._1 != 0x02020202 )
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr106126.c b/gcc/testsuite/gcc.dg/tree-ssa/pr106126.c
new file mode 100644
index 0000000..2f0fd44
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr106126.c
@@ -0,0 +1,12 @@
+/* PR tree-optimization/106126 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+char *var_1;
+void pool_conda_matchspec() {
+ for (; var_1 && *var_1 &&
+ *var_1 != '<' && *var_1 != '>' &&
+ *var_1 != '!' && *var_1 != '~';)
+ if (*var_1 >= 'A' && *var_1 <= 'Z')
+ *var_1 += 'A';
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/slsr-39.c b/gcc/testsuite/gcc.dg/tree-ssa/slsr-39.c
index 4a27ede..33e34fa 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/slsr-39.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/slsr-39.c
@@ -6,7 +6,7 @@
*PINDEX: C1 + (C2 * C3) + C4 */
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-slsr-details" } */
+/* { dg-options "-O2 -fno-tree-vectorize -fdump-tree-slsr-details" } */
typedef int arr_2[50][50];
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-branch-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-branch-1.c
index fae5bde..ede3274 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-branch-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-branch-1.c
@@ -19,10 +19,9 @@ try_combine (rtx i1, rtx newpat)
else if (i1 && foo ());
}
-/* There should be four tests against i1. One from the hash table
- dumps, one from the EVRP analyzer one from EVRP evaluation and one
+/* There should be 3 tests against i1. Two from DOM machinery and one
in the code itself. */
-/* { dg-final { scan-tree-dump-times "if .i1_" 4 "dom2"} } */
+/* { dg-final { scan-tree-dump-times "if .i1_" 3 "dom2"} } */
/* There should be no actual jump threads realized by DOM. The
legitimize jump threads are handled in VRP and those discovered
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
index b64e71d..aa06db5 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c
@@ -11,7 +11,7 @@
to change decisions in switch expansion which in turn can expose new
jump threading opportunities. Skip the later tests on aarch64. */
/* { dg-final { scan-tree-dump-not "Jumps threaded" "dom3" { target { ! aarch64*-*-* } } } } */
-/* { dg-final { scan-tree-dump "Jumps threaded: 7" "thread2" { target { ! aarch64*-*-* } } } } */
+/* { dg-final { scan-tree-dump "Jumps threaded: 8" "thread2" { target { ! aarch64*-*-* } } } } */
/* { dg-final { scan-tree-dump "Jumps threaded: 18" "thread2" { target { aarch64*-*-* } } } } */
enum STATE {
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr106019.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr106019.c
new file mode 100644
index 0000000..218d7cc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr106019.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+
+void f(double *p, long i)
+{
+ p[i+0] += 1;
+ p[i+1] += 1;
+}
+void g(double *p, long i)
+{
+ double *q = p + i;
+ q[0] += 1;
+ q[1] += 1;
+}
+
+/* { dg-final { scan-tree-dump-not "can't determine dependence" slp2 } } */
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-2.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-2.c
index 6b213d4..56c4bbf 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-2.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-additional-options "-fno-tree-loop-vectorize -fno-tree-dominator-opts" } */
/* { dg-require-effective-target lp64 } */
double p[1000];
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-4.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-4.c
index 599f718..67ee809 100644
--- a/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-4.c
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr81635-4.c
@@ -1,7 +1,11 @@
/* { dg-do compile } */
-/* { dg-additional-options "-fno-tree-loop-vectorize" } */
+/* { dg-additional-options "-fno-tree-loop-vectorize -fno-tree-dominator-opts" } */
/* { dg-require-effective-target lp64 } */
+/* A ranger based DOM causes many more SSA names to be exported, which
+ causes slp1 to vectorize more things. Disabling DOM to avoid
+ disturbing this test. */
+
void
f1 (double *p, double *q, unsigned int n)
{
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c
index 7ce8696..34e25ab 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-10.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 unsigned
#define SIGNEDNESS_2 unsigned
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump-not "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c
index 0f7cbbb..3af8df5 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-11.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 unsigned
#define SIGNEDNESS_2 signed
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c
index 0841261..77ceef3 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-12.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 unsigned
#define SIGNEDNESS_2 signed
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c
index 7ee0f45..d3c0c86 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-13.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 signed
#define SIGNEDNESS_2 unsigned
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump-not "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c
index 2de1434..86a5c85 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-14.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 signed
#define SIGNEDNESS_2 unsigned
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump-not "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c
index dc48f95..25de094 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-15.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 signed
#define SIGNEDNESS_2 signed
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c
index aec6287..4a1dec0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-16.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#define SIGNEDNESS_1 signed
#define SIGNEDNESS_2 signed
@@ -10,4 +10,4 @@
#include "vect-reduc-dot-9.c"
/* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c
index 38f86fe..90d2118 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-17.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
@@ -50,4 +50,4 @@ main (void)
}
/* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c
index 2e86ebe..81ecb15 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-18.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
@@ -50,4 +50,4 @@ main (void)
}
/* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c
index d00f24a..cbcd4f12 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-19.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c
index 17adbca8..e81ed1d 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-20.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c
index 6cc6a4f..81ce5cd 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-21.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c
index e13d3d5..b8c9d3c 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-22.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c
index d1049c9..e0b132f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-dot-9.c
@@ -1,6 +1,6 @@
/* { dg-require-effective-target vect_int } */
-/* { dg-require-effective-target arm_v8_2a_i8mm_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
-/* { dg-add-options arm_v8_2a_i8mm } */
+/* { dg-require-effective-target arm_v8_2a_dotprod_neon_hw { target { aarch64*-*-* || arm*-*-* } } } */
+/* { dg-add-options arm_v8_2a_dotprod_neon } */
#include "tree-vect.h"
@@ -50,4 +50,4 @@ main (void)
}
/* { dg-final { scan-tree-dump-not "vect_recog_dot_prod_pattern: detected" "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_usdot_qi } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_sdot_qi } } } */
diff --git a/gcc/testsuite/gcc.misc-tests/linkage.exp b/gcc/testsuite/gcc.misc-tests/linkage.exp
index c955332..64da5d1 100644
--- a/gcc/testsuite/gcc.misc-tests/linkage.exp
+++ b/gcc/testsuite/gcc.misc-tests/linkage.exp
@@ -98,13 +98,6 @@ if { [isnative] && ![is_remote host] } then {
} elseif [ string match "*ppc" $file_string ] {
set native_cflags "-m32"
}
- } elseif [istarget "tilegx-*-linux*"] {
- set file_string [exec file "linkage-x.o"]
- if [ string match "*64-bit*" $file_string ] {
- set native_cflags "-m64"
- } elseif [ string match "*32-bit*" $file_string ] {
- set native_cflags "-m32"
- }
} elseif [istarget "*86*-*-darwin*"] {
set file_string [exec file "linkage-x.o"]
if [ string match "*64*" $file_string ] {
diff --git a/gcc/testsuite/gcc.misc-tests/outputs.exp b/gcc/testsuite/gcc.misc-tests/outputs.exp
index afae735..ab919db 100644
--- a/gcc/testsuite/gcc.misc-tests/outputs.exp
+++ b/gcc/testsuite/gcc.misc-tests/outputs.exp
@@ -116,8 +116,23 @@ if [info exists env(MAKEFLAGS)] {
# it weren't for
# https://core.tcl-lang.org/tcl/tktview?name=5bbd044812), but .{i,s,o}
# and .[iso] will pass even if only the .o is present.
+
+# Return a list containing two lists, the first naming the passes, the
+# second naming the fails. If test ends with a question mark, the
+# test is taken as a preparatory test or cleanup, and no pass or fail
+# results will be logged, though the lists will still be built and
+# returned.
array unset outests *
proc outest { test sources opts dirs outputs } {
+ if { [string index $test end] == "?" } {
+ set quiet 1
+ } else {
+ set quiet 0
+ }
+
+ set passes {}
+ set fails {}
+
global b srcdir subdir
global outests
@@ -182,15 +197,15 @@ proc outest { test sources opts dirs outputs } {
set o "$og"
}
if { [file exists $d$o] } then {
- pass "$test: $d$o"
+ lappend passes "$d$o"
file delete $d$o
} else {
set ogl [glob -nocomplain -path $d -- $o]
if { $ogl != {} } {
- pass "$test: $d$o"
+ lappend passes "$d$o"
file delete $ogl
} else {
- fail "$test: $d$o"
+ lappend fails "$d$o"
}
}
}
@@ -219,17 +234,27 @@ proc outest { test sources opts dirs outputs } {
}
if { [llength $outb] == 0 } then {
- pass "$test: extra"
+ lappend passes "extra"
} else {
- fail "$test: extra\n$outb"
+ lappend fails "extra\n$outb"
}
if { [string equal "$gcc_output" ""] } then {
- pass "$test: std out"
+ lappend passes "std out"
} else {
- fail "$test: std out\n$gcc_output"
+ lappend fails "std out\n$gcc_output"
+ }
+
+ if !$quiet {
+ foreach p $passes {
+ pass "$test: $p"
+ }
+ foreach f $fails {
+ fail "$test: $f"
+ }
}
+ return [list $passes $fails]
}
set sing {-0.c}
@@ -279,6 +304,19 @@ if { "$aout" != "" } then {
set oaout "-o $aout"
}
+# Clean up any left-overs from an earlier interrupted run.
+outest "$b-cleanup?" $sing "$oaout" {alt/ dir/ o/ od/ obj/} {{} {} {} {} {} {$aout}}
+
+# Sometimes the -I or -L flags that cause the compiler driver to save
+# .args.[01], instead of leaving it for the linker to save .ld1_args,
+# is hiding in driver self specs.
+if !$skip_atsave {
+ set atsave_test_out [outest "$b-skip-atsave?" $sing "@/dev/null -o $b.exe -save-temps" {} {{.args.1}}]
+ if { [lindex [lindex $atsave_test_out 0] 0] == "$b.args.1" } {
+ set skip_atsave 1
+ }
+}
+
# Driver-chosen outputs.
outest "$b-1 asm default 1" $sing "-S" {} {{-0.s}}
outest "$b-2 asm default 2" $mult "-S" {} {{-1.s -2.s}}
diff --git a/gcc/testsuite/gcc.target/aarch64/symbol-range.c b/gcc/testsuite/gcc.target/aarch64/symbol-range.c
index d8e82fa..6b15f08 100644
--- a/gcc/testsuite/gcc.target/aarch64/symbol-range.c
+++ b/gcc/testsuite/gcc.target/aarch64/symbol-range.c
@@ -1,4 +1,5 @@
-/* { dg-do link } */
+/* { dg-do link { target two_plus_gigs } } */
+/* { dg-do compile { target { ! two_plus_gigs } } } */
/* { dg-options "-O3 -save-temps -mcmodel=small" } */
char fixed_regs[0x80000000];
diff --git a/gcc/testsuite/gcc.target/alpha/pr105209.c b/gcc/testsuite/gcc.target/alpha/pr105209.c
new file mode 100644
index 0000000..b89be96
--- /dev/null
+++ b/gcc/testsuite/gcc.target/alpha/pr105209.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftrapv -mcpu=ev4" } */
+
+typedef struct tnode_t {
+ struct tnode_t *tn_left, *tn_right;
+ int v_quad;
+} tnode_t;
+
+int constant_addr(const tnode_t *, long *);
+int constant_addr(const tnode_t *tn, long *offsp)
+{
+ long offs1 = 0, offs2 = 0;
+
+ if (tn->v_quad > 0) {
+ offs1 = tn->v_quad;
+ return 0;
+ } else if (tn->v_quad > -1) {
+ offs2 = tn->tn_right->v_quad;
+ if (!constant_addr(tn->tn_left, &offs1))
+ return 0;
+ } else {
+ return 0;
+ }
+ *offsp = offs1 + offs2;
+ return 1;
+}
diff --git a/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c b/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c
index 917a95b..2440cef 100644
--- a/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c
+++ b/gcc/testsuite/gcc.target/arm/simd/mve-vcmp-f32-2.c
@@ -28,5 +28,7 @@ FUNC(>=, vcmpge)
/* { dg-final { scan-assembler-times {\tvcmp.f32\tle, q[0-9]+, q[0-9]+\n} 1 } } */
/* { dg-final { scan-assembler-times {\tvcmp.f32\tgt, q[0-9]+, q[0-9]+\n} 1 } } */
/* { dg-final { scan-assembler-times {\tvcmp.f32\tge, q[0-9]+, q[0-9]+\n} 1 } } */
-/* { dg-final { scan-assembler-times {\t.word\t1073741824\n} 24 } } */ /* Constant 2.0f. */
-/* { dg-final { scan-assembler-times {\t.word\t1077936128\n} 24 } } */ /* Constant 3.0f. */
+/* { dg-final { scan-assembler-times {\tvmov\.f32\tq[0-7], #2\.0e\+0 @ v4sf} 6 } } */
+/* { dg-final { scan-assembler-not {\t.word\t1073741824\n} } } */ /* Constant 2.0f. */
+/* { dg-final { scan-assembler-times {\tvmov\.f32\tq[0-7], #3\.0e\+0 @ v4sf} 6 } } */
+/* { dg-final { scan-assembler-not {\t.word\t1077936128\n} } } */ /* Constant 3.0f. */
diff --git a/gcc/testsuite/gcc.target/arm/simd/pr100757-2.c b/gcc/testsuite/gcc.target/arm/simd/pr100757-2.c
index c2262b4..21426fe 100644
--- a/gcc/testsuite/gcc.target/arm/simd/pr100757-2.c
+++ b/gcc/testsuite/gcc.target/arm/simd/pr100757-2.c
@@ -13,8 +13,11 @@ int fn1(int d) {
return c;
}
-/* { dg-final { scan-assembler-times {\t.word\t1073741824\n} 4 } } */ /* Constant 2.0f. */
-/* { dg-final { scan-assembler-times {\t.word\t4\n} 4 } } */ /* Initial value for c. */
-/* { dg-final { scan-assembler-times {\t.word\t5\n} 4 } } */ /* Possible value for c. */
+/* { dg-final { scan-assembler-times {\tvmov\.f32\tq[0-7], #2\.0e\+0 @ v4sf} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t1073741824\n} } } */
+/* { dg-final { scan-assembler-times {\tvmov\.i32\tq[0-7], #0x4 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t4\n} } } */
+/* { dg-final { scan-assembler-times {\tvmov\.i32\tq[0-7], #0x5 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t5\n} } } */
/* { dg-final { scan-assembler-not {\t.word\t1\n} } } */ /* 'true' mask. */
/* { dg-final { scan-assembler-not {\t.word\t0\n} } } */ /* 'false' mask. */
diff --git a/gcc/testsuite/gcc.target/arm/simd/pr100757-3.c b/gcc/testsuite/gcc.target/arm/simd/pr100757-3.c
index e604555..1640a44 100644
--- a/gcc/testsuite/gcc.target/arm/simd/pr100757-3.c
+++ b/gcc/testsuite/gcc.target/arm/simd/pr100757-3.c
@@ -13,8 +13,11 @@ float fn1(int d) {
return c;
}
-/* { dg-final { scan-assembler-times {\t.word\t1073741824\n} 4 } } */ /* Constant 2.0f. */
-/* { dg-final { scan-assembler-times {\t.word\t1084227584\n} 4 } } */ /* Initial value for c (4.0). */
-/* { dg-final { scan-assembler-times {\t.word\t1082130432\n} 4 } } */ /* Possible value for c (5.0). */
+/* { dg-final { scan-assembler-times {\tvmov\.f32\tq[0-7], #2\.0e\+0 @ v4sf} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t1073741824\n} } } */
+/* { dg-final { scan-assembler-times {\tvmov\.f32\tq[0-7], #4\.0e\+0 @ v4sf} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t1084227584\n} } } */
+/* { dg-final { scan-assembler-times {\tvmov\.f32\tq[0-7], #5\.0e\+0 @ v4sf} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t1082130432\n} } } */
/* { dg-final { scan-assembler-not {\t.word\t1\n} } } */ /* 'true' mask. */
/* { dg-final { scan-assembler-not {\t.word\t0\n} } } */ /* 'false' mask. */
diff --git a/gcc/testsuite/gcc.target/arm/simd/pr100757-4.c b/gcc/testsuite/gcc.target/arm/simd/pr100757-4.c
index c12040c..7431494 100644
--- a/gcc/testsuite/gcc.target/arm/simd/pr100757-4.c
+++ b/gcc/testsuite/gcc.target/arm/simd/pr100757-4.c
@@ -13,7 +13,11 @@ int fn1(int d) {
return c;
}
-/* { dg-final { scan-assembler-times {\t.word\t0\n} 4 } } */ /* 'false' mask. */
+
+/* { dg-final { scan-assembler-times {\tvmov\.i32\tq[0-7], #0 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t0\n} } } */ /* 'false' mask. */
/* { dg-final { scan-assembler-not {\t.word\t1\n} } } */ /* 'true' mask. */
-/* { dg-final { scan-assembler-times {\t.word\t2\n} 4 } } */ /* Initial value for c. */
-/* { dg-final { scan-assembler-times {\t.word\t3\n} 4 } } */ /* Possible value for c. */
+/* { dg-final { scan-assembler-times {vmov\.i32\tq[0-7], #0x2 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t2\n} } } */ /* Initial value for c. */
+/* { dg-final { scan-assembler-times {vmov\.i32\tq[0-7], #0x3 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t3\n} } } */ /* Possible value for c. */
diff --git a/gcc/testsuite/gcc.target/arm/simd/pr100757.c b/gcc/testsuite/gcc.target/arm/simd/pr100757.c
index 41d6e4e..f1ef1bd 100644
--- a/gcc/testsuite/gcc.target/arm/simd/pr100757.c
+++ b/gcc/testsuite/gcc.target/arm/simd/pr100757.c
@@ -13,7 +13,10 @@ int fn1(int d) {
return c;
}
-/* { dg-final { scan-assembler-times {\t.word\t0\n} 4 } } */ /* 'false' mask. */
+/* { dg-final { scan-assembler-times {\tvmov\.i32\tq[0-7], #0 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t0\n} } } */ /* 'false' mask. */
/* { dg-final { scan-assembler-not {\t.word\t1\n} } } */ /* 'true' mask. */
-/* { dg-final { scan-assembler-times {\t.word\t2\n} 4 } } */ /* Initial value for c. */
-/* { dg-final { scan-assembler-times {\t.word\t3\n} 4 } } */ /* Possible value for c. */
+/* { dg-final { scan-assembler-times {\tvmov\.i32\tq[0-7], #0x2 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t2\n} } } */ /* Initial value for c. */
+/* { dg-final { scan-assembler-times {\tvmov\.i32\tq[0-7], #0x3 @ v4si} 1 } } */
+/* { dg-final { scan-assembler-not {\t.word\t3\n} } } */ /* Possible value for c. */
diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h b/gcc/testsuite/gcc.target/i386/amx-check.h
index 434b0e5..6fff5ff4 100644
--- a/gcc/testsuite/gcc.target/i386/amx-check.h
+++ b/gcc/testsuite/gcc.target/i386/amx-check.h
@@ -4,11 +4,24 @@
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
+#include <unistd.h>
+#ifdef __linux__
+#include <sys/syscall.h>
+#endif
#ifdef DEBUG
#include <stdio.h>
#endif
#include "cpuid.h"
+#define XFEATURE_XTILECFG 17
+#define XFEATURE_XTILEDATA 18
+#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
+#define XFEATURE_MASK_XTILEDATA (1 << XFEATURE_XTILEDATA)
+#define XFEATURE_MASK_XTILE (XFEATURE_MASK_XTILECFG | XFEATURE_MASK_XTILEDATA)
+
+#define ARCH_GET_XCOMP_PERM 0x1022
+#define ARCH_REQ_XCOMP_PERM 0x1023
+
/* TODO: The tmm emulation is temporary for current
AMX implementation with no tmm regclass, should
be changed in the future. */
@@ -44,6 +57,20 @@ typedef struct __tile
/* Stride (colum width in byte) used for tileload/store */
#define _STRIDE 64
+#ifdef __linux__
+/* We need syscall to use amx functions */
+int request_perm_xtile_data()
+{
+ unsigned long bitmask;
+
+ if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM, XFEATURE_XTILEDATA) ||
+ syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
+ return 0;
+
+ return (bitmask & XFEATURE_MASK_XTILE) != 0;
+}
+#endif
+
/* Initialize tile config by setting all tmm size to 16x64 */
void init_tile_config (__tilecfg_u *dst)
{
@@ -186,6 +213,9 @@ main ()
#ifdef AMX_BF16
&& __builtin_cpu_supports ("amx-bf16")
#endif
+#ifdef __linux__
+ && request_perm_xtile_data ()
+#endif
)
{
DO_TEST ();
diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-2.c b/gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-2.c
index 593340e..72e4a81 100644
--- a/gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-2.c
+++ b/gcc/testsuite/gcc.target/i386/avx512fp16-reduce-op-2.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -mprefer-vector-width=512 -fdump-tree-optimized" } */
+/* { dg-additional-options "-msse2" { target i?86-*-* } } */
/* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 3 "optimized" } } */
/* { dg-final { scan-tree-dump-times "\.REDUC_MIN" 3 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/i386/bmi-andn-4.c b/gcc/testsuite/gcc.target/i386/bmi-andn-4.c
new file mode 100644
index 0000000..fb89529
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/bmi-andn-4.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mbmi" } */
+
+int f(int a, int b, int c)
+{
+ return (a ^ b) ^ (a | c);
+}
+
+/* { dg-final { scan-assembler "andn\[ \\t\]+" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr105960.c b/gcc/testsuite/gcc.target/i386/pr105960.c
new file mode 100644
index 0000000..db137a1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr105960.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-require-ifunc "" } */
+/* { dg-options "-O2 -fpic" } */
+
+__attribute__((target_clones("default","fma")))
+static inline double
+expfull_ref(double x)
+{
+ return __builtin_pow(x, 0.1234);
+}
+
+double
+exp_ref(double x)
+{
+ return expfull_ref(x);
+}
+
+/* { dg-final { scan-assembler "jmp\[ \t\]*expfull_ref@PLT" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler "call\[ \t\]*expfull_ref@PLT" { target ia32 } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr105970.c b/gcc/testsuite/gcc.target/i386/pr105970.c
new file mode 100644
index 0000000..326486f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr105970.c
@@ -0,0 +1,6 @@
+/* PR target/105970 */
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-mx32 -mgeneral-regs-only -maddress-mode=long" } */
+
+#include "../../gcc.dg/torture/pr68037-1.c"
diff --git a/gcc/testsuite/gcc.target/i386/pr105993.c b/gcc/testsuite/gcc.target/i386/pr105993.c
new file mode 100644
index 0000000..79e3414
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr105993.c
@@ -0,0 +1,18 @@
+/* PR target/105993 */
+/* { dg-do compile } */
+/* { dg-options "-O -mxop" } */
+
+typedef unsigned short __attribute__((__vector_size__ (16))) V;
+V x, y, z;
+
+char c;
+short s;
+
+V
+foo (void)
+{
+ V u = __builtin_shufflevector (z, y, 2, 1, 0, 8, 4, 1, 7, 2);
+ V v = ~(__builtin_bswap16 (s) & (u ^ c));
+
+ return v;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr106022-1.c b/gcc/testsuite/gcc.target/i386/pr106022-1.c
new file mode 100644
index 0000000..6643b4c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106022-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=x86-64" } */
+
+void
+foo (char *c)
+{
+ c[0] = 0;
+ c[1] = 1;
+ c[2] = 2;
+ c[3] = 3;
+}
+
+/* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$50462976," 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr106022-2.c b/gcc/testsuite/gcc.target/i386/pr106022-2.c
new file mode 100644
index 0000000..0e79fb5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106022-2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=x86-64" } */
+
+void
+foo (int *c)
+{
+ c = __builtin_assume_aligned (c, 16);
+ c[0] = -1;
+ c[1] = -1;
+}
+
+/* { dg-final { scan-assembler-times "movq\[ \\t\]+\[^\n\]*%xmm" 2 { target { ia32 } } } } */
+/* { dg-final { scan-assembler-times "movq\[ \\t\]+\\\$-1," 1 { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-not "xmm" { target { ! ia32 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr106022-3.c b/gcc/testsuite/gcc.target/i386/pr106022-3.c
new file mode 100644
index 0000000..8b0c2a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106022-3.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=x86-64" } */
+
+void
+foo (int *c)
+{
+ c[0] = 0;
+ c[1] = 1;
+ c[2] = 2;
+ c[3] = 3;
+}
+
+/* { dg-final { scan-assembler-times "movdqa\[ \\t\]+\[^\n\]*%xmm" 1 } } */
+/* { dg-final { scan-assembler-times "movups\[ \\t\]+\[^\n\]*%xmm" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr106022-4.c b/gcc/testsuite/gcc.target/i386/pr106022-4.c
new file mode 100644
index 0000000..8ecda17
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106022-4.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=x86-64" } */
+
+void
+foo (float *c)
+{
+ c[0] = 2.3;
+ c[1] = 0.0;
+}
+
+/* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$0x40133333" 1 { target { ia32 } } } } */
+/* { dg-final { scan-assembler-times "movl\[ \\t\]+\\\$0x00000000" 1 { target { ia32 } } } } */
+/* { dg-final { scan-assembler-times "movq\[ \\t\]+\\\$1075000115," 1 { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-not "xmm" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr106053.c b/gcc/testsuite/gcc.target/i386/pr106053.c
new file mode 100644
index 0000000..69baa3e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106053.c
@@ -0,0 +1,37 @@
+/* { dg-do run { target lp64 } } */
+/* { dg-options "-O -fno-tree-fre -w -mno-avx" } */
+
+typedef unsigned __attribute__((__vector_size__ (32))) v256u8;
+typedef unsigned __attribute__((__vector_size__ (64))) v512u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+typedef unsigned long long u64;
+typedef unsigned long __attribute__((__vector_size__ (64))) v512u64;
+typedef unsigned __int128 __attribute__((__vector_size__ (32))) v256u128;
+unsigned u;
+v512u64 foo0_v512u64_0;
+
+static inline v256u8
+foo (u32 u32_0, u64 u64_0, v256u128 v256u128_0)
+{
+ int o = __builtin_add_overflow_p (u64_0, 0, 0);
+ v512u64 v512u64_1 =
+ foo0_v512u64_0 & (u32) __builtin_sub_overflow_p (0, o, 0);
+ u64_0 |= u;
+ v256u128 v256u128_2 = u64_0 < v256u128_0;
+ v256u128 v256u128_3 = -v256u128_2 == u64_0 * u32_0;
+ v256u8 v256u8_r = ((union {
+ v512u8 a; v256u8 b[2];
+ }) (v512u8) v512u64_1).b[0] + (v256u8) v256u128_3;
+ return v256u8_r;
+}
+
+int
+main (void)
+{
+ v256u8 x = foo (3095179400, 23725760132, (v256u128) { 2, 2 });
+ for (unsigned i = 0; i < sizeof (x) / sizeof (x[0]); i++)
+ if (x[i])
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr106095.c b/gcc/testsuite/gcc.target/i386/pr106095.c
new file mode 100644
index 0000000..dfa6136
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106095.c
@@ -0,0 +1,47 @@
+/* PR gcc/106095 */
+/* { dg-do assemble } */
+/* { dg-options "-mavx512vl -masm=intel" } */
+/* { dg-require-effective-target masm_intel } */
+
+#include <immintrin.h>
+#include <stdlib.h>
+
+typedef int v4si __attribute__ ((vector_size (16)));
+typedef long long v2di __attribute__ ((vector_size (16)));
+typedef long long v4di __attribute__ ((vector_size (32)));
+typedef double v2df __attribute__ ((vector_size (16)));
+typedef float v4sf __attribute__ ((vector_size (16)));
+
+void bug1(void) {
+ v4si ints4 = {0, 1, 2, 3};
+ unsigned long long *addr = malloc(sizeof(*addr));
+ __builtin_ia32_pmovdw128mem_mask(addr, ints4, 0);
+}
+
+int bug2(void) {
+ v2df a = {0.0, 0.0};
+ v4sf b = {0.0, 0.0, 0.0, 0.0};
+ v2df src = {0.0, 0.0};
+ v2df res = __builtin_ia32_cvtss2sd_mask_round(a, b, src, 0, _MM_FROUND_NO_EXC);
+ return (int)res[0];
+}
+
+int bug3(void) {
+ v4sf a = {0.0, 0.0, 0.0, 0.0};
+ v2df b = {0.0, 0.0};
+ v4sf src = {0.0, 0.0, 0.0, 0.0};
+ v4sf res = __builtin_ia32_cvtsd2ss_mask_round(a, b, src, 0, _MM_FROUND_NO_EXC);
+ return (int)res[0];
+}
+
+int bug4(void) {
+ v4di ints4 = {0, 1, 2, 3};
+ unsigned long long *addr = malloc(sizeof(*addr));
+ __builtin_ia32_pmovqw256mem_mask(addr, ints4, 0);
+}
+
+int bug5(void) {
+ v2di ints4 = {0, 1};
+ unsigned int *addr = malloc(sizeof(*addr));
+ __builtin_ia32_pmovqw128mem_mask(addr, ints4, 0);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr106122.c b/gcc/testsuite/gcc.target/i386/pr106122.c
new file mode 100644
index 0000000..7d24ed3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr106122.c
@@ -0,0 +1,15 @@
+/* PR middle-end/106122 */
+/* { dg-do compile } */
+/* { dg-options "-Oz" } */
+
+register volatile int a __asm__("%esp");
+void foo (void *);
+void bar (void *);
+
+void
+baz (void)
+{
+ foo (__builtin_return_address (0));
+ a = 0;
+ bar (__builtin_return_address (0));
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr43618-1.c b/gcc/testsuite/gcc.target/i386/pr43618-1.c
new file mode 100644
index 0000000..7d16f0e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr43618-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-not "movq" } } */
+/* { dg-final { scan-assembler "cvtps2pd" } } */
+
+void
+foo (float a[2], double b[2])
+{
+ int i;
+ for (i = 0; i < 2; i++)
+ b[i] = a[i];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr7061-2.c b/gcc/testsuite/gcc.target/i386/pr7061-2.c
index ac33340..837cd83 100644
--- a/gcc/testsuite/gcc.target/i386/pr7061-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr7061-2.c
@@ -1,5 +1,9 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-options "-O2" } */
float im(float _Complex a) { return __imag__ a; }
+/* { dg-final { scan-assembler "shufps" } } */
+/* { dg-final { scan-assembler-not "movd" } } */
+/* { dg-final { scan-assembler-not "movq" } } */
/* { dg-final { scan-assembler-not "movss" } } */
/* { dg-final { scan-assembler-not "rsp" } } */
+/* { dg-final { scan-assembler-not "shr" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr99464.c b/gcc/testsuite/gcc.target/i386/pr99464.c
index 98dd938..3c1ac6f 100644
--- a/gcc/testsuite/gcc.target/i386/pr99464.c
+++ b/gcc/testsuite/gcc.target/i386/pr99464.c
@@ -1,6 +1,7 @@
/* PR target/99464 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
+/* { dg-additional-options "-msse2" { target i?86-*-* } } */
#pragma GCC target("arch=cannonlake")
diff --git a/gcc/testsuite/gcc.target/i386/ssse3-palignr-2.c b/gcc/testsuite/gcc.target/i386/ssse3-palignr-2.c
new file mode 100644
index 0000000..791222d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/ssse3-palignr-2.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mssse3" } */
+
+typedef long long __attribute__ ((__vector_size__ (8))) T;
+
+T x;
+T y;
+T z;
+
+void foo()
+{
+ z = __builtin_ia32_palignr (x, y, 0);
+}
+
+void bar()
+{
+ z = __builtin_ia32_palignr (x, y, 64);
+}
+/* { dg-final { scan-assembler-not "punpcklqdq" } } */
+/* { dg-final { scan-assembler-not "pshufd" } } */
+/* { dg-final { scan-assembler-not "psrldq" } } */
diff --git a/gcc/testsuite/gcc.target/i386/testnot-3.c b/gcc/testsuite/gcc.target/i386/testnot-3.c
new file mode 100644
index 0000000..7c54dbc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/testnot-3.c
@@ -0,0 +1,9 @@
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-O2" } */
+
+int foo(__int128 x, __int128 y)
+{
+ return (x & y) == y;
+}
+
+/* { dg-final { scan-assembler-not "xorq" } } */
diff --git a/gcc/testsuite/gcc.target/i386/xchg-3.c b/gcc/testsuite/gcc.target/i386/xchg-3.c
new file mode 100644
index 0000000..eec05f0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/xchg-3.c
@@ -0,0 +1,12 @@
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "-O2" } */
+
+unsigned long long bar();
+
+unsigned long long foo()
+{
+ unsigned long long x = bar();
+ return (x>>32) | (x<<32);
+}
+
+/*{ dg-final { scan-assembler "xchgl" } } */
diff --git a/gcc/testsuite/gcc.target/loongarch/div-1.c b/gcc/testsuite/gcc.target/loongarch/div-1.c
new file mode 100644
index 0000000..b1683f8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/div-1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcheck-zero-division" } */
+/* { dg-final { scan-assembler "div.\[wd\]\t\\\$r4,\\\$r4,\\\$r5" } } */
+
+long
+div(long a, long b)
+{
+ return a / b;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/div-2.c b/gcc/testsuite/gcc.target/loongarch/div-2.c
new file mode 100644
index 0000000..4c2beb5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/div-2.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mno-check-zero-division" } */
+/* { dg-final { scan-assembler "div.\[wd\]\t\\\$r4,\\\$r5,\\\$r4" } } */
+
+long
+div(long a, long b)
+{
+ return b / a;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/div-3.c b/gcc/testsuite/gcc.target/loongarch/div-3.c
new file mode 100644
index 0000000..d259692
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/div-3.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mcheck-zero-division" } */
+/* { dg-final { scan-assembler-not "div.\[wd\]\t\\\$r4,\\\$r5,\\\$r4" } } */
+
+long
+div(long a, long b)
+{
+ return b / a;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/div-4.c b/gcc/testsuite/gcc.target/loongarch/div-4.c
new file mode 100644
index 0000000..a52f87d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/div-4.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler-not "slli" } } */
+
+int
+div(int a, int b)
+{
+ return a / b;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c b/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c
new file mode 100644
index 0000000..4ab7df8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mabi=lp64d" } */
+/* { dg-final { scan-assembler "mulw.d.w" } } */
+
+/* This should be optimized to mulw.d.w for LA64. */
+__attribute__((noipa, noinline)) long
+f(long a, long b)
+{
+ return (long)(int)a * (long)(int)b;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/prolog-opt.c b/gcc/testsuite/gcc.target/loongarch/prolog-opt.c
new file mode 100644
index 0000000..0470a1f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/prolog-opt.c
@@ -0,0 +1,15 @@
+/* Test that LoongArch backend stack drop operation optimized. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -mabi=lp64d" } */
+/* { dg-final { scan-assembler "addi.d\t\\\$r3,\\\$r3,-16" } } */
+
+extern int printf (char *, ...);
+
+int main()
+{
+ char buf[1024 * 12];
+ printf ("%p\n", buf);
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c b/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
index 26a622a..3cf2d4f 100644
--- a/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
+++ b/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-mips16 -mcode-readable=yes -fno-tree-vrp" } */
+/* { dg-options "-mips16 -mcode-readable=yes -fno-tree-vrp -fno-tree-dominator-opts" } */
/* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */
/* This testcase generates multiple constant pools within a function body. */
diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp
index 8a62267..42a0dbb 100644
--- a/gcc/testsuite/gcc.target/mips/mips.exp
+++ b/gcc/testsuite/gcc.target/mips/mips.exp
@@ -335,6 +335,7 @@ foreach option {
split-wide-types
tree-vectorize
tree-vrp
+ tree-dominator-opts
unroll-all-loops
unroll-loops
ipa-ra
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f90 b/gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f90
index 844166d..dac5c36 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f90
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-fortran/pr80108-1.f90
@@ -1,7 +1,7 @@
! Originally contributed by Tobias Burnas.
! { dg-do compile { target { powerpc*-*-* } } }
! { dg-require-effective-target powerpc_p9vector_ok }
-! { dg-options "-mdejagnu-cpu=405 -mpower9-minmax -mfloat128-type" }
+! { dg-options "-mdejagnu-cpu=405 -mpower9-minmax -mfloat128" }
! { dg-excess-errors "expect error due to conflicting target options" }
! Since the error message is not associated with a particular line
! number, we cannot use the dg-error directive and cannot specify a
diff --git a/gcc/testsuite/gcc.target/powerpc/pr105991.c b/gcc/testsuite/gcc.target/powerpc/pr105991.c
new file mode 100644
index 0000000..439d10f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr105991.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-require-effective-target lp64 } */
+unsigned long long
+foo (unsigned long long value)
+{
+ value &= 0xffffffff;
+ value |= value << 32;
+ return value;
+}
+/* { dg-final { scan-assembler {\mrldimi\M} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cmo-zicbom-1.c b/gcc/testsuite/gcc.target/riscv/cmo-zicbom-1.c
index e2ba218..6341f78 100644
--- a/gcc/testsuite/gcc.target/riscv/cmo-zicbom-1.c
+++ b/gcc/testsuite/gcc.target/riscv/cmo-zicbom-1.c
@@ -1,21 +1,29 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gc_zicbom -mabi=lp64" } */
-int foo1()
+int var;
+
+void foo1()
{
- return __builtin_riscv_zicbom_cbo_clean();
+ __builtin_riscv_zicbom_cbo_clean(0);
+ __builtin_riscv_zicbom_cbo_clean(&var);
+ __builtin_riscv_zicbom_cbo_clean((void*)0x111);
}
-int foo2()
+void foo2()
{
- return __builtin_riscv_zicbom_cbo_flush();
+ __builtin_riscv_zicbom_cbo_flush(0);
+ __builtin_riscv_zicbom_cbo_flush(&var);
+ __builtin_riscv_zicbom_cbo_flush((void*)0x111);
}
-int foo3()
+void foo3()
{
- return __builtin_riscv_zicbom_cbo_inval();
+ __builtin_riscv_zicbom_cbo_inval(0);
+ __builtin_riscv_zicbom_cbo_inval(&var);
+ __builtin_riscv_zicbom_cbo_inval((void*)0x111);
}
-/* { dg-final { scan-assembler-times "cbo.clean" 1 } } */
-/* { dg-final { scan-assembler-times "cbo.flush" 1 } } */
-/* { dg-final { scan-assembler-times "cbo.inval" 1 } } */
+/* { dg-final { scan-assembler-times "cbo.clean" 3 } } */
+/* { dg-final { scan-assembler-times "cbo.flush" 3 } } */
+/* { dg-final { scan-assembler-times "cbo.inval" 3 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cmo-zicbom-2.c b/gcc/testsuite/gcc.target/riscv/cmo-zicbom-2.c
index a605e8b..a04f106 100644
--- a/gcc/testsuite/gcc.target/riscv/cmo-zicbom-2.c
+++ b/gcc/testsuite/gcc.target/riscv/cmo-zicbom-2.c
@@ -1,21 +1,29 @@
/* { dg-do compile } */
/* { dg-options "-march=rv32gc_zicbom -mabi=ilp32" } */
-int foo1()
+int var;
+
+void foo1()
{
- return __builtin_riscv_zicbom_cbo_clean();
+ __builtin_riscv_zicbom_cbo_clean(0);
+ __builtin_riscv_zicbom_cbo_clean(&var);
+ __builtin_riscv_zicbom_cbo_clean((void*)0x111);
}
-int foo2()
+void foo2()
{
- return __builtin_riscv_zicbom_cbo_flush();
+ __builtin_riscv_zicbom_cbo_flush(0);
+ __builtin_riscv_zicbom_cbo_flush(&var);
+ __builtin_riscv_zicbom_cbo_flush((void*)0x111);
}
-int foo3()
+void foo3()
{
- return __builtin_riscv_zicbom_cbo_inval();
+ __builtin_riscv_zicbom_cbo_inval(0);
+ __builtin_riscv_zicbom_cbo_inval(&var);
+ __builtin_riscv_zicbom_cbo_inval((void*)0x111);
}
-/* { dg-final { scan-assembler-times "cbo.clean" 1 } } */
-/* { dg-final { scan-assembler-times "cbo.flush" 1 } } */
-/* { dg-final { scan-assembler-times "cbo.inval" 1 } } */
+/* { dg-final { scan-assembler-times "cbo.clean" 3 } } */
+/* { dg-final { scan-assembler-times "cbo.flush" 3 } } */
+/* { dg-final { scan-assembler-times "cbo.inval" 3 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cmo-zicboz-1.c b/gcc/testsuite/gcc.target/riscv/cmo-zicboz-1.c
index 96c1674..5eb78ab 100644
--- a/gcc/testsuite/gcc.target/riscv/cmo-zicboz-1.c
+++ b/gcc/testsuite/gcc.target/riscv/cmo-zicboz-1.c
@@ -1,9 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gc_zicboz -mabi=lp64" } */
-int foo1()
+int var;
+
+void foo1()
{
- return __builtin_riscv_zicboz_cbo_zero();
+ __builtin_riscv_zicboz_cbo_zero(0);
+ __builtin_riscv_zicboz_cbo_zero(&var);
+ __builtin_riscv_zicboz_cbo_zero((void*)0x121);
}
-/* { dg-final { scan-assembler-times "cbo.zero" 1 } } */
+/* { dg-final { scan-assembler-times "cbo.zero" 3 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cmo-zicboz-2.c b/gcc/testsuite/gcc.target/riscv/cmo-zicboz-2.c
index 9d99839..fdc9c71 100644
--- a/gcc/testsuite/gcc.target/riscv/cmo-zicboz-2.c
+++ b/gcc/testsuite/gcc.target/riscv/cmo-zicboz-2.c
@@ -1,9 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-march=rv32gc_zicboz -mabi=ilp32" } */
-int foo1()
+int var;
+
+void foo1()
{
- return __builtin_riscv_zicboz_cbo_zero();
+ __builtin_riscv_zicboz_cbo_zero(0);
+ __builtin_riscv_zicboz_cbo_zero(&var);
+ __builtin_riscv_zicboz_cbo_zero((void*)0x121);
}
-/* { dg-final { scan-assembler-times "cbo.zero" 1 } } */
+/* { dg-final { scan-assembler-times "cbo.zero" 3 } } */
diff --git a/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch.d b/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch1.d
index 5340647..5340647 100644
--- a/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch.d
+++ b/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch1.d
diff --git a/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d b/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d
new file mode 100644
index 0000000..9e90c15
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/Wbuiltin_declaration_mismatch2.d
@@ -0,0 +1,250 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-do compile { target { avx_runtime || vect_sizes_16B_8B } } }
+module gcc.simd;
+
+alias int4 = __vector(int[4]);
+alias short8 = __vector(short[8]);
+alias float4 = __vector(float[4]);
+alias byte16 = __vector(byte[16]);
+struct fake4 { int[4] v; }
+enum f = fake4();
+
+void test_load_store()
+{
+ loadUnaligned!int(null); // { dg-warning "mismatch in return type" }
+ loadUnaligned!double(null); // { dg-warning "mismatch in return type" }
+ loadUnaligned!int4(null);
+ loadUnaligned!short8(null);
+ loadUnaligned!float4(null);
+ loadUnaligned!byte16(null);
+ loadUnaligned!fake4(null); // { dg-warning "mismatch in return type" }
+
+ storeUnaligned!int(null, 1); // { dg-warning "mismatch in return type" }
+ storeUnaligned!double(null, 1); // { dg-warning "mismatch in return type" }
+ storeUnaligned!int4(null, 1);
+ storeUnaligned!short8(null, 1);
+ storeUnaligned!float4(null, 1);
+ storeUnaligned!byte16(null, 1);
+ storeUnaligned!fake4(null, f); // { dg-warning "mismatch in return type" }
+}
+
+void test_shuffle()
+{
+ shuffle!(int, int, int)(0, 0, 0); // { dg-warning "mismatch in return type" }
+ shuffle!(double, int, int)(0, 0, 0); // { dg-warning "mismatch in return type" }
+ shuffle!(fake4, int, int)(f, 0, 0); // { dg-warning "mismatch in return type" }
+
+ shuffle!(int4, int, int)(0, 0, 0); // { dg-warning "mismatch in argument 2" }
+ shuffle!(int4, double, int)(0, 0, 0); // { dg-warning "mismatch in argument 2" }
+ shuffle!(int4, fake4, int)(0, f, 0); // { dg-warning "mismatch in argument 2" }
+
+ shuffle!(int4, int4, int)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ shuffle!(int4, int4, double)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ shuffle!(int4, int4, fake4)(0, 0, f); // { dg-warning "mismatch in argument 3" }
+
+ shuffle!(int4, int4, int4)(0, 0, 0);
+ shuffle!(int4, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(int4, float4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(int4, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(int4, int4, short8)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(int4, int4, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(int4, int4, byte16)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+
+ shuffle!(float4, int4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(float4, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(float4, float4, int4)(0, 0, 0);
+ shuffle!(float4, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(float4, float4, short8)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(float4, float4, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(float4, float4, byte16)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+
+ shuffle!(short8, int4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(short8, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(short8, float4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(short8, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(short8, short8, short8)(0, 0, 0);
+ shuffle!(short8, short8, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(short8, short8, byte16)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+
+ shuffle!(byte16, int4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(byte16, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(byte16, float4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shuffle!(byte16, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(byte16, byte16, short8)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(byte16, byte16, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ shuffle!(byte16, byte16, byte16)(0, 0, 0);
+}
+
+void test_shufflevector()
+{
+ shufflevector!(int, int4, int)(0, 0, 0); // { dg-warning "mismatch in argument 1" }
+ shufflevector!(double, int4, int)(0, 0, 0); // { dg-warning "mismatch in argument 1" }
+ shufflevector!(fake4, int4, int)(f, 0, 0); // { dg-warning "mismatch in argument 1" }
+
+ shufflevector!(int4, int, int)(0, 0, 0); // { dg-warning "mismatch in argument 2" }
+ shufflevector!(int4, double, int)(0, 0, 0); // { dg-warning "mismatch in argument 2" }
+ shufflevector!(int4, int4, int)(0, 0, 0);
+ shufflevector!(int4, short8, int)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shufflevector!(int4, float4, int)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shufflevector!(int4, byte16, int)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ shufflevector!(int4, fake4, int)(0, f, 0); // { dg-warning "mismatch in argument 2" }
+
+ shufflevector!(int4, int4, double)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ shufflevector!(int4, int4, int4)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ shufflevector!(int4, int4, short8)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ shufflevector!(int4, int4, float4)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ shufflevector!(int4, int4, byte16)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+
+ shufflevector!(int4, int4, int, double)(0, 0, 0, 0); // { dg-warning "mismatch in argument 4" }
+ shufflevector!(int4, int4, int, int, double, int)(0, 0, 0, 0, 0, 0); // { dg-warning "mismatch in argument 5" }
+ shufflevector!(int4, int4, int, int, int, double)(0, 0, 0, 0, 0, 0); // { dg-warning "mismatch in argument 6" }
+
+ int i;
+ shufflevector!(int4, int4, int)(0, 0, i); // { dg-error "argument .i. cannot be read at compile time" }
+ shufflevector!(int4, int4, int)(0, 0, -1u); // { dg-error "element index .-1. is out of bounds" }
+ shufflevector!(int4, int4, int)(0, 0, 8); // { dg-error "element index .8. is out of bounds" }
+}
+
+void test_convertvector()
+{
+ convertvector!(int, int)(0); // { dg-warning "mismatch in return type" }
+ convertvector!(double, int)(0); // { dg-warning "mismatch in return type" }
+ convertvector!(fake4, int)(0); // { dg-warning "mismatch in return type" }
+
+ convertvector!(int4, int)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(int4, double)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(int4, int4)(0);
+ convertvector!(int4, short8)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(int4, float4)(0);
+ convertvector!(int4, byte16)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(int4, fake4)(f); // { dg-warning "mismatch in argument 1" }
+
+ convertvector!(short8, int)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(short8, double)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(short8, int4)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(short8, short8)(0);
+ convertvector!(short8, float4)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(short8, byte16)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(short8, fake4)(f); // { dg-warning "mismatch in argument 1" }
+
+ convertvector!(float4, int)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(float4, double)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(float4, int4)(0);
+ convertvector!(float4, short8)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(float4, float4)(0);
+ convertvector!(float4, byte16)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(float4, fake4)(f); // { dg-warning "mismatch in argument 1" }
+
+ convertvector!(byte16, int)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(byte16, double)(0); // { dg-warning "mismatch in argument 1" }
+ convertvector!(byte16, int4)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(byte16, short8)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(byte16, float4)(0); // { dg-error "mismatch in argument 1" }
+ convertvector!(byte16, byte16)(0);
+ convertvector!(byte16, fake4)(f); // { dg-warning "mismatch in argument 1" }
+}
+
+void test_blendvector()
+{
+ blendvector!(int, int, int)(0, 0, 0); // { dg-warning "mismatch in return type" }
+ blendvector!(double, int, int)(0, 0, 0); // { dg-warning "mismatch in return type" }
+ blendvector!(fake4, int, int)(f, 0, 0); // { dg-warning "mismatch in return type" }
+
+ blendvector!(int4, int, int)(0, 0, 0); // { dg-warning "mismatch in argument 2" }
+ blendvector!(int4, double, int)(0, 0, 0); // { dg-warning "mismatch in argument 2" }
+ blendvector!(int4, fake4, int)(0, f, 0); // { dg-warning "mismatch in argument 2" }
+
+ blendvector!(int4, int4, int)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ blendvector!(int4, int4, double)(0, 0, 0); // { dg-warning "mismatch in argument 3" }
+ blendvector!(int4, int4, fake4)(0, 0, f); // { dg-warning "mismatch in argument 3" }
+
+ blendvector!(int4, int4, int4)(0, 0, 0);
+ blendvector!(int4, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(int4, float4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(int4, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(int4, int4, short8)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(int4, int4, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(int4, int4, byte16)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+
+ blendvector!(float4, int4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(float4, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(float4, float4, int4)(0, 0, 0);
+ blendvector!(float4, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(float4, float4, short8)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(float4, float4, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(float4, float4, byte16)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+
+ blendvector!(short8, int4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(short8, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(short8, float4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(short8, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(short8, short8, short8)(0, 0, 0);
+ blendvector!(short8, short8, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(short8, short8, byte16)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+
+ blendvector!(byte16, int4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(byte16, short8, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(byte16, float4, int4)(0, 0, 0); // { dg-error "mismatch in argument 2" }
+ blendvector!(byte16, byte16, int4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(byte16, byte16, short8)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(byte16, byte16, float4)(0, 0, 0); // { dg-error "mismatch in argument 3" }
+ blendvector!(byte16, byte16, byte16)(0, 0, 0);
+}
+
+void test_comparison()
+{
+ equalMask!int(0, 0); // { dg-warning "mismatch in return type" }
+ equalMask!double(0, 0); // { dg-warning "mismatch in return type" }
+ equalMask!int4(0, 0);
+ equalMask!short8(0, 0);
+ equalMask!float4(0, 0);
+ equalMask!byte16(0, 0);
+ equalMask!fake4(f, f); // { dg-warning "mismatch in return type" }
+
+ notEqualMask!int(0, 0); // { dg-warning "mismatch in return type" }
+ notEqualMask!double(0, 0); // { dg-warning "mismatch in return type" }
+ notEqualMask!int4(0, 0);
+ notEqualMask!short8(0, 0);
+ notEqualMask!float4(0, 0);
+ notEqualMask!byte16(0, 0);
+ notEqualMask!fake4(f, f); // { dg-warning "mismatch in return type" }
+
+ greaterMask!int(0, 0); // { dg-warning "mismatch in return type" }
+ greaterMask!double(0, 0); // { dg-warning "mismatch in return type" }
+ greaterMask!int4(0, 0);
+ greaterMask!short8(0, 0);
+ greaterMask!float4(0, 0);
+ greaterMask!byte16(0, 0);
+ greaterMask!fake4(f, f); // { dg-warning "mismatch in return type" }
+
+ greaterOrEqualMask!int(0, 0); // { dg-warning "mismatch in return type" }
+ greaterOrEqualMask!double(0, 0); // { dg-warning "mismatch in return type" }
+ greaterOrEqualMask!int4(0, 0);
+ greaterOrEqualMask!short8(0, 0);
+ greaterOrEqualMask!float4(0, 0);
+ greaterOrEqualMask!byte16(0, 0);
+ greaterOrEqualMask!fake4(f, f); // { dg-warning "mismatch in return type" }
+}
+
+// The following declarations of the simd intrinsics are without any guards
+// to verify `d/intrinsics.cc` is doing checks to prevent invalid lowerings.
+V loadUnaligned(V)(const V*);
+V storeUnaligned(V)(V*, V);
+
+V0 shuffle(V0, V1, M)(V0, V1, M);
+
+// Use overloads to test different argument positions.
+template E(V) { alias typeof(V.array[0]) E; }
+enum isV(T) = is(T : __vector(V[N]), V, size_t N);
+
+__vector(E!V1[M.length]) shufflevector(V1, V2, M...)(V1, V2, M) if (isV!V1 && !isV!V2);
+__vector(E!V2[M.length]) shufflevector(V1, V2, M...)(V1, V2, M) if (isV!V2 && !isV!V1);
+__vector(E!V1[M.length]) shufflevector(V1, V2, M...)(V1, V2, M) if (isV!V1 && isV!V2);
+
+V convertvector(V, T)(T);
+V0 blendvector(V0, V1, M)(V0, V1, M);
+
+V equalMask(V)(V, V);
+V notEqualMask(V)(V, V);
+V greaterMask(V)(V, V);
+V greaterOrEqualMask(V)(V, V);
diff --git a/gcc/testsuite/gdc.dg/attr_register1.d b/gcc/testsuite/gdc.dg/attr_register1.d
new file mode 100644
index 0000000..01fc245
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/attr_register1.d
@@ -0,0 +1,55 @@
+// { dg-do compile }
+
+import gcc.attributes;
+
+@attribute("register", null) int var1; // { dg-error "attribute argument not a string constant" }
+
+@attribute("register", "") int var2; // { dg-error "register name not specified for .var2." }
+
+@attribute("register", "invalid") __gshared int var3; // { dg-error "invalid register name for .var3." }
+
+void f1(ref int r) { }
+
+void test1()
+{
+ @register("ref") int var6;
+ f1(var6); // { dg-error "address of explicit register variable .var6. requested" }
+}
+
+void f2(out int r) { }
+
+void test2()
+{
+ @register("out") int var7;
+ f2(var7); // { dg-error "address of explicit register variable .var7. requested" }
+}
+
+void f3(lazy int r) { }
+
+void test3()
+{
+ @register("lazy") int var8; // { dg-error "explicit register variable .var8. cannot be used in nested function" }
+ f3(var8);
+}
+
+void test4()
+{
+ @register("addr") int var9;
+ auto ptr3 = &var9; // { dg-error "address of explicit register variable .var9. requested" }
+}
+
+ref int test5()
+{
+ @register("refreturn") __gshared int var10; // { dg-error "invalid register name" }
+ return var10; // { dg-error "address of explicit register variable .var10. requested" }
+}
+
+auto test6()
+{
+ @register("closure") int var11; // { dg-error "explicit register variable .var11. cannot be used in nested function" }
+ int nested()
+ {
+ return var11;
+ }
+ return &nested;
+}
diff --git a/gcc/testsuite/gdc.dg/attr_register2.d b/gcc/testsuite/gdc.dg/attr_register2.d
new file mode 100644
index 0000000..9061a64
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/attr_register2.d
@@ -0,0 +1,11 @@
+// { dg-do compile { target x86_64-*-* } }
+
+import gcc.attributes;
+
+@register("ebx") static int var1 = void; // { dg-error "explicit register variable .var1. declared thread local" }
+
+@register("ebx") extern int var2; // { dg-error "explicit register variable .var2. declared .extern." }
+
+@register("r12") __gshared int var3 = 0x2a; // { dg-error "global register variable has initial value" }
+
+@register("r12") __gshared int[256] var4 = void; // { dg-error "data type of .var4. isn.t suitable for a register" }
diff --git a/gcc/testsuite/gdc.dg/attr_register3.d b/gcc/testsuite/gdc.dg/attr_register3.d
new file mode 100644
index 0000000..706a399
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/attr_register3.d
@@ -0,0 +1,22 @@
+// { dg-do compile }
+// { dg-options "-Wall -O2 -fdump-tree-optimized" }
+
+import gcc.attributes;
+
+pragma(inline, true)
+void syscall()(int val)
+{
+ @register("4") int reg = val;
+ asm { "/* Some Code %0 */" :: "r" (reg); }
+}
+
+void do_syscalls()
+{
+ for (int s = 0; s < 2; s++)
+ {
+ syscall (0);
+ syscall (1);
+ }
+}
+
+// { dg-final { scan-tree-dump-times "reg = " 4 "optimized" } }
diff --git a/gcc/testsuite/gdc.dg/attr_section1.d b/gcc/testsuite/gdc.dg/attr_section1.d
index c24634f..759b203 100644
--- a/gcc/testsuite/gdc.dg/attr_section1.d
+++ b/gcc/testsuite/gdc.dg/attr_section1.d
@@ -7,7 +7,7 @@ import gcc.attributes;
struct S {} // { dg-warning ".section. attribute does not apply to types" }
@attribute("section", 123)
-int f1(); // { dg-error "section attribute argument not a string constant" }
+int f1(); // { dg-error ".section. attribute argument not a string constant" }
int f2(@section("param") int a) // { dg-error "section attribute not allowed for .a." }
{
diff --git a/gcc/testsuite/gdc.dg/attr_simd1.d b/gcc/testsuite/gdc.dg/attr_simd1.d
new file mode 100644
index 0000000..8e83d80
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/attr_simd1.d
@@ -0,0 +1,40 @@
+// { dg-do compile }
+// { dg-options "-fdump-tree-optimized" }
+
+import gcc.attributes;
+
+extern(C) @simd int simd_attr() { return 0; }
+
+// { dg-final { scan-tree-dump "simd_attr\[ \\t\]simdclone|vector" "optimized" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVbN4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVbM4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVcN4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVcM4_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVdN8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVdM8_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16_simd_attr:" 1 { target { i?86-*-* x86_64-*-* } } } }
+
+extern(C) @simd_clones("notinbranch") int simd_notinbranch() { return 0; }
+
+// { dg-final { scan-tree-dump "simd_notinbranch\[ \\t\]simdclone|vector" "optimized" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVbN4_simd_notinbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVcN4_simd_notinbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVdN8_simd_notinbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeN16_simd_notinbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVbM4_simd_notinbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVcM4_simd_notinbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVdM8_simd_notinbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVeM16_simd_notinbranch:" { target { i?86-*-* x86_64-*-* } } } }
+
+extern(C) @simd_clones("inbranch") int simd_inbranch() { return 0; }
+
+// { dg-final { scan-tree-dump "simd_inbranch\[ \\t\]simdclone|vector" "optimized" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVbN4_simd_inbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVcN4_simd_inbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVdN8_simd_inbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-not "_ZGVeN16_simd_inbranch:" { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVbM4_simd_inbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVcM4_simd_inbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVdM8_simd_inbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
+// { dg-final { scan-assembler-times "_ZGVeM16_simd_inbranch:" 1 { target { i?86-*-* x86_64-*-* } } } }
diff --git a/gcc/testsuite/gdc.dg/attr_simd2.d b/gcc/testsuite/gdc.dg/attr_simd2.d
new file mode 100644
index 0000000..49cb642
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/attr_simd2.d
@@ -0,0 +1,16 @@
+// { dg-do compile }
+// { dg-options "-fdump-tree-optimized" }
+
+import gcc.attributes;
+
+@attribute("simd")
+int simd_ignored; // { dg-warning ".simd. attribute ignored" }
+
+@attribute("simd", 123)
+int simd_string() { return 0; } // { dg-error ".simd. attribute argument not a string constant" }
+
+@attribute("simd", "invalid")
+int simd_invalid() { return 0; } // { dg-error "only .inbranch. and .notinbranch. flags are allowed for .simd. attribute" }
+
+@attribute("simd", "notinbranch", "inbranch")
+int simd_wrong_args() { return 0; } // { dg-error "wrong number of arguments specified for .simd. attribute" }
diff --git a/gcc/testsuite/gdc.dg/attr_visibility1.d b/gcc/testsuite/gdc.dg/attr_visibility1.d
index a7ed406..932e6e6 100644
--- a/gcc/testsuite/gdc.dg/attr_visibility1.d
+++ b/gcc/testsuite/gdc.dg/attr_visibility1.d
@@ -13,7 +13,7 @@ void nested()
}
@attribute("visibility", 123)
-int not_a_string(); // { dg-error "visibility argument not a string" }
+int not_a_string(); // { dg-error ".visibility. attribute argument not a string constant" }
@attribute("visibility", "invalid argument")
int invalid_argument(); // { dg-error ".visibility. argument must be one of" }
diff --git a/gcc/testsuite/gdc.dg/pr106139a.d b/gcc/testsuite/gdc.dg/pr106139a.d
new file mode 100644
index 0000000..f635eab
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr106139a.d
@@ -0,0 +1,36 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106139
+// { dg-do compile }
+
+alias A = int[4];
+
+static if (__traits(compiles, __vector(A))):
+
+A vector2array(__vector(A) v)
+{
+ return cast(A)v;
+}
+
+void vector2array(ref A a, __vector(A) v)
+{
+ a = cast(A)v;
+}
+
+__vector(A) array2vector(A a)
+{
+ return cast(__vector(A)) a;
+}
+
+void array2vector(ref __vector(A) v, A a)
+{
+ v = cast(__vector(A))a;
+}
+
+A vector2array_array(__vector(A) v)
+{
+ return v.array;
+}
+
+void vector2array_array(ref A a, __vector(A) v)
+{
+ a = v.array;
+}
diff --git a/gcc/testsuite/gdc.dg/pr106139b.d b/gcc/testsuite/gdc.dg/pr106139b.d
new file mode 100644
index 0000000..f9caf02
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr106139b.d
@@ -0,0 +1,36 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106139
+// { dg-do compile }
+
+alias A = float[4];
+
+static if (__traits(compiles, __vector(A))):
+
+A vector2array(__vector(A) v)
+{
+ return cast(A)v;
+}
+
+void vector2array(ref A a, __vector(A) v)
+{
+ a = cast(A)v;
+}
+
+__vector(A) array2vector(A a)
+{
+ return cast(__vector(A)) a;
+}
+
+void array2vector(ref __vector(A) v, A a)
+{
+ v = cast(__vector(A))a;
+}
+
+A vector2array_array(__vector(A) v)
+{
+ return v.array;
+}
+
+void vector2array_array(ref A a, __vector(A) v)
+{
+ a = v.array;
+}
diff --git a/gcc/testsuite/gdc.dg/pr106139c.d b/gcc/testsuite/gdc.dg/pr106139c.d
new file mode 100644
index 0000000..3b6b7a8
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr106139c.d
@@ -0,0 +1,27 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106139
+// { dg-do compile }
+
+alias V = int[4];
+alias A = float[4];
+
+static if (__traits(compiles, __vector(V))):
+
+A vector2array(__vector(V) v)
+{
+ return cast(A)v;
+}
+
+void vector2array(ref A a, __vector(V) v)
+{
+ a = cast(A)v;
+}
+
+__vector(V) array2vector(A a)
+{
+ return cast(__vector(V)) a;
+}
+
+void array2vector(ref __vector(V) v, A a)
+{
+ v = cast(__vector(V))a;
+}
diff --git a/gcc/testsuite/gdc.dg/pr106139d.d b/gcc/testsuite/gdc.dg/pr106139d.d
new file mode 100644
index 0000000..4c6f0ef
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr106139d.d
@@ -0,0 +1,27 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106139
+// { dg-do compile }
+
+alias V = float[4];
+alias A = int[4];
+
+static if (__traits(compiles, __vector(V))):
+
+A vector2array(__vector(V) v)
+{
+ return cast(A)v;
+}
+
+void vector2array(ref A a, __vector(V) v)
+{
+ a = cast(A)v;
+}
+
+__vector(V) array2vector(A a)
+{
+ return cast(__vector(V)) a;
+}
+
+void array2vector(ref __vector(V) v, A a)
+{
+ v = cast(__vector(V))a;
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_blendvector.d b/gcc/testsuite/gdc.dg/torture/simd_blendvector.d
new file mode 100644
index 0000000..42459bd
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_blendvector.d
@@ -0,0 +1,345 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+import gcc.simd;
+
+void testblendvector(V, VI = V)()
+{
+ alias E = typeof(V.array[0]);
+ enum numElements = V.sizeof / E.sizeof;
+
+ static if (numElements == 16)
+ {
+ // Test fragment for vectors with 16 elements
+ immutable V[5] in1 =
+ [[ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ]];
+
+ immutable V in2 =
+ [ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 ];
+
+ immutable VI[5] mask1 =
+ [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ],
+ [ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 ],
+ [ 7, 6, 5, 4, 16, 17, 18, 19, 31, 30, 29, 28, 3, 2, 1, 0 ],
+ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
+ [ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 ]];
+
+ immutable V[5] out1 =
+ [[30, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25],
+ [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25],
+ [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 45],
+ [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45],
+ [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]];
+ }
+ else static if (numElements == 8)
+ {
+ // Test fragment for vectors with 8 elements
+ static if (is(E == uint))
+ {
+ enum E A1 = 0x11121314;
+ enum E B1 = 0x21222324;
+ enum E C1 = 0x31323334;
+ enum E D1 = 0x41424344;
+ enum E E1 = 0x51525354;
+ enum E F1 = 0x61626364;
+ enum E G1 = 0x71727374;
+ enum E H1 = 0x81828384;
+
+ enum E A2 = 0x91929394;
+ enum E B2 = 0xa1a2a3a4;
+ enum E C2 = 0xb1b2b3b4;
+ enum E D2 = 0xc1c2c3c4;
+ enum E E2 = 0xd1d2d3d4;
+ enum E F2 = 0xe1e2e3e4;
+ enum E G2 = 0xf1f2f3f4;
+ enum E H2 = 0x01020304;
+ }
+ else static if (is(E == ushort))
+ {
+ enum E A1 = 0x1112;
+ enum E B1 = 0x2122;
+ enum E C1 = 0x3132;
+ enum E D1 = 0x4142;
+ enum E E1 = 0x5152;
+ enum E F1 = 0x6162;
+ enum E G1 = 0x7172;
+ enum E H1 = 0x8182;
+
+ enum E A2 = 0x9192;
+ enum E B2 = 0xa1a2;
+ enum E C2 = 0xb1b2;
+ enum E D2 = 0xc1c2;
+ enum E E2 = 0xd1d2;
+ enum E F2 = 0xe1e2;
+ enum E G2 = 0xf1f2;
+ enum E H2 = 0x0102;
+ }
+ else static if (is(E == ubyte))
+ {
+ enum E A1 = 0x11;
+ enum E B1 = 0x12;
+ enum E C1 = 0x13;
+ enum E D1 = 0x14;
+ enum E E1 = 0x15;
+ enum E F1 = 0x16;
+ enum E G1 = 0x17;
+ enum E H1 = 0x18;
+
+ enum E A2 = 0xf1;
+ enum E B2 = 0xf2;
+ enum E C2 = 0xf3;
+ enum E D2 = 0xf4;
+ enum E E2 = 0xf5;
+ enum E F2 = 0xf6;
+ enum E G2 = 0xf7;
+ enum E H2 = 0xf8;
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ immutable V[6] in1 =
+ [[ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ]];
+
+
+ immutable V in2 =
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ];
+
+ immutable VI[6] mask1 =
+ [[ 0, 1, 2 , 3 , 4 , 5 , 6 , 0 ],
+ [ 8, 9, 0, 11, 12, 13, 0, 15 ],
+ [ 0, 8, 1, 0, 2, 0, 3, 11 ],
+ [ 0, 15, 4, 11, 0, 3, 7, 8 ],
+ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
+ [ 0x1e, 0x2e, 0x3e, 0x4e, 0x5e, 0x6e, 0x7e, 0x8e ]];
+
+ immutable V[6] out1 =
+ [[ A2, B1, C1, D1, E1, F1, G1, H2 ],
+ [ A1, B1, C2, D1, E1, F1, G2, H1 ],
+ [ A2, B1, C1, D2, E1, F2, G1, H1 ],
+ [ A2, B1, C1, D1, E2, F1, G1, H1 ],
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ]];
+ }
+ }
+ else static if (numElements == 4)
+ {
+ // Test fragment for vectors with 4 elements
+ static if (is(E == double))
+ {
+ enum E A = 0.69314718055994530942;
+ enum E B = 2.7182818284590452354;
+ enum E C = 2.30258509299404568402;
+ enum E D = 1.4426950408889634074;
+
+ enum E W = 0.31830988618379067154;
+ enum E X = 3.14159265358979323846;
+ enum E Y = 1.41421356237309504880;
+ enum E Z = 0.70710678118654752440;
+ }
+ else static if (is(E == float))
+ {
+ enum E A = 0.69314718055994530942f;
+ enum E B = 2.7182818284590452354f;
+ enum E C = 2.30258509299404568402f;
+ enum E D = 1.4426950408889634074f;
+
+ enum E W = 0.31830988618379067154f;
+ enum E X = 3.14159265358979323846f;
+ enum E Y = 1.41421356237309504880f;
+ enum E Z = 0.70710678118654752440f;
+ }
+ else static if (is(E == ulong))
+ {
+ enum E A = 0x1112131415161718;
+ enum E B = 0x2122232425262728;
+ enum E C = 0x3132333435363738;
+ enum E D = 0x4142434445464748;
+
+ enum E W = 0xc1c2c3c4c5c6c7c8;
+ enum E X = 0xd1d2d3d4d5d6d7d8;
+ enum E Y = 0xe1e2e3e4e5e6e7e8;
+ enum E Z = 0xf1f2f3f4f5f6f7f8;
+ }
+ else static if (is(E == uint))
+ {
+ enum E A = 0x11121314;
+ enum E B = 0x21222324;
+ enum E C = 0x31323334;
+ enum E D = 0x41424344;
+
+ enum E W = 0xc1c2c3c4;
+ enum E X = 0xd1d2d3d4;
+ enum E Y = 0xe1e2e3e4;
+ enum E Z = 0xf1f2f3f4;
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ immutable V[6] in1 =
+ [[ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ]];
+
+ immutable V in2 = [ W, X, Y, Z ];
+
+ immutable VI[6] mask1 =
+ [[ 0, 1, 2, 3 ],
+ [ 4, 0, 6, 7 ],
+ [ 0, 4, 0, 5 ],
+ [ 0, 7, 4, 0 ],
+ [ 0, 0, 0, 0 ],
+ [ 7, 7, 7, 7 ]];
+
+ immutable V[6] out1 =
+ [[ W, B, C, D ],
+ [ A, X, C, D ],
+ [ W, B, Y, D ],
+ [ W, B, C, Z ],
+ [ W, X, Y, Z ],
+ [ A, B, C, D ]];
+ }
+ }
+ else static if (numElements == 2)
+ {
+ // Test fragment for vectors with 2 elements
+ static if (is(E == double))
+ {
+ enum E A = 0.69314718055994530942;
+ enum E B = 2.7182818284590452354;
+
+ enum E X = 3.14159265358979323846;
+ enum E Y = 1.41421356237309504880;
+ }
+ else static if (is(E == float))
+ {
+ enum E A = 0.69314718055994530942f;
+ enum E B = 2.7182818284590452354f;
+
+ enum E X = 3.14159265358979323846f;
+ enum E Y = 1.41421356237309504880f;
+ }
+ else static if (is(E == ulong))
+ {
+ enum E A = 0x1112131415161718;
+ enum E B = 0x2122232425262728;
+
+ enum E X = 0xc1c2c3c4c5c6c7c8;
+ enum E Y = 0xd1d2d3d4d5d6d7d8;
+ }
+ else static if (is(E == uint))
+ {
+ enum E A = 0x11121314;
+ enum E B = 0x21222324;
+
+ enum E X = 0xd1d2d3d4;
+ enum E Y = 0xe1e2e3e4;
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ immutable V[7] in1 =
+ [[ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ]];
+
+ immutable V in2 = [ X, Y ];
+
+ immutable VI[7] mask1 =
+ [[ 0, 1 ],
+ [ 2, 3 ],
+ [ 0, 2 ],
+ [ 2, 1 ],
+ [ 3, 0 ],
+ [ 0, 0 ],
+ [ 3, 3 ]];
+
+ immutable V[7] out1 =
+ [[ X, B ],
+ [ A, B ],
+ [ X, B ],
+ [ A, B ],
+ [ A, Y ],
+ [ X, Y ],
+ [ A, B ]];
+ }
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ static foreach (i; 0 .. in1.length)
+ assert(blendvector(in1[i], in2, mask1[i]).array == out1[i].array);
+ }
+}
+
+void main()
+{
+ static if (__traits(compiles, __vector(ubyte[16])))
+ testblendvector!(__vector(ubyte[16]))();
+
+ static if (__traits(compiles, __vector(ushort[16])))
+ testblendvector!(__vector(ushort[16]))();
+
+ static if (__traits(compiles, __vector(ubyte[8])))
+ testblendvector!(__vector(ubyte[8]))();
+
+ static if (__traits(compiles, __vector(ushort[8])))
+ testblendvector!(__vector(ushort[8]))();
+
+ static if (__traits(compiles, __vector(uint[8])))
+ testblendvector!(__vector(uint[8]))();
+
+ static if (__traits(compiles, __vector(ulong[4])))
+ {
+ testblendvector!(__vector(ulong[4]));
+
+ static if (__traits(compiles, __vector(double[4])))
+ testblendvector!(__vector(double[4]), __vector(ulong[4]));
+ }
+
+ static if (__traits(compiles, __vector(uint[4])))
+ {
+ testblendvector!(__vector(uint[4]));
+
+ static if (__traits(compiles, __vector(float[4])))
+ testblendvector!(__vector(float[4]), __vector(uint[4]));
+ }
+
+ static if (__traits(compiles, __vector(ulong[2])))
+ {
+ testblendvector!(__vector(ulong[2]));
+
+ static if (__traits(compiles, __vector(double[2])))
+ testblendvector!(__vector(double[2]), __vector(ulong[2]));
+ }
+
+ static if (__traits(compiles, __vector(uint[2])))
+ {
+ testblendvector!(__vector(uint[2]));
+
+ static if (__traits(compiles, __vector(float[2])))
+ testblendvector!(__vector(float[2]), __vector(uint[2]));
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_cond.d b/gcc/testsuite/gdc.dg/torture/simd_cond.d
new file mode 100644
index 0000000..1548956
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_cond.d
@@ -0,0 +1,17 @@
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+import gcc.simd;
+
+void main()
+{
+ static if (__traits(compiles, __vector(int[4])))
+ {
+ __gshared __vector(int[4]) a = [1,3,5,7];
+ __gshared __vector(int[4]) b = [2,3,4,5];
+
+ assert(equalMask(a, b).array == [0,-1,0,0]);
+ assert(notEqualMask(a, b).array == [-1,0,-1,-1]);
+ assert(greaterMask(a, b).array == [0,0,-1,-1]);
+ assert(greaterOrEqualMask(a, b).array == [0,-1,-1,-1]);
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_convertvector.d b/gcc/testsuite/gdc.dg/torture/simd_convertvector.d
new file mode 100644
index 0000000..0d6b18e
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_convertvector.d
@@ -0,0 +1,122 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+import gcc.simd;
+
+void main ()
+{
+ static if (__traits(compiles, __vector(int[4])))
+ alias int4 = __vector(int[4]);
+ static if (__traits(compiles, __vector(uint[4])))
+ alias uint4 = __vector(uint[4]);
+ static if (__traits(compiles, __vector(float[4])))
+ alias float4 = __vector(float[4]);
+ static if (__traits(compiles, __vector(double[4])))
+ alias double4 = __vector(double[4]);
+
+ static if (__traits(compiles, int4))
+ {
+ union U1 { int4 v; int[4] a; }
+ U1 u1;
+ }
+ static if (__traits(compiles, uint4))
+ {
+ union U2 { uint4 v; uint[4] a; }
+ U2 u2;
+ }
+ static if (__traits(compiles, float4))
+ {
+ union U3 { float4 v; float[4] a; }
+ U3 u3;
+ }
+ static if (__traits(compiles, double4))
+ {
+ union U4 { double4 v; double[4] a; }
+ U4 u4;
+ }
+
+ static if (__traits(compiles, u1) && __traits(compiles, u2))
+ {
+ static void f1(ref uint4 x, out int4 y)
+ {
+ y = convertvector!int4(x);
+ }
+ static foreach (i; 0 .. 4)
+ u2.a[i] = i * 2;
+ f1(u2.v, u1.v);
+ static foreach (i; 0 .. 4)
+ assert(u1.a[i] == i * 2);
+ }
+
+ static if (__traits(compiles, u1) && __traits(compiles, u3))
+ {
+ static void f2(ref float4 x, out int4 y)
+ {
+ y = convertvector!int4(x);
+ }
+
+ static void f3(ref int4 x, out float4 y)
+ {
+ y = convertvector!float4(x);
+ }
+
+ static foreach (i; 0 .. 4)
+ u3.a[i] = i - 2.25f;
+ f2(u3.v, u1.v);
+ static foreach (i; 0 .. 4)
+ assert(u1.a[i] == (i == 3 ? 0 : i - 2));
+
+ static foreach (i; 0 .. 4)
+ u3.a[i] = i + 0.75f;
+ f2(u3.v, u1.v);
+ static foreach (i; 0 .. 4)
+ assert(u1.a[i] == i);
+
+ static foreach (i; 0 .. 4)
+ u1.a[i] = 7 * i - 5;
+ f3(u1.v, u3.v);
+ static foreach (i; 0 .. 4)
+ assert(u3.a[i] == 7 * i - 5);
+ }
+ static if (__traits(compiles, u1) && __traits(compiles, u4))
+ {
+ static void f4(ref double4 x, out int4 y)
+ {
+ y = convertvector!int4(x);
+ }
+
+ static void f5(ref int4 x, out double4 y)
+ {
+ y = convertvector!double4(x);
+ }
+
+ static foreach (i; 0 .. 4)
+ u4.a[i] = i - 2.25;
+ f4(u4.v, u1.v);
+ static foreach (i; 0 .. 4)
+ assert(u1.a[i] == (i == 3 ? 0 : i - 2));
+
+ static foreach (i; 0 .. 4)
+ u4.a[i] = i + 0.75;
+ f4(u4.v, u1.v);
+ static foreach (i; 0 .. 4)
+ assert(u1.a[i] == i);
+
+ static foreach (i; 0 .. 4)
+ u1.a[i] = 7 * i - 5;
+ f5(u1.v, u4.v);
+ static foreach (i; 0 .. 4)
+ assert(u4.a[i] == 7 * i - 5);
+ }
+ static if (__traits(compiles, u4))
+ {
+ static void f6(out double4 x)
+ {
+ int4 a = [1, 2, -3, -4];
+ x = convertvector!double4(a);
+ }
+
+ f6(u4.v);
+ static foreach (i; 0 .. 4)
+ assert(u4.a[i] == (i >= 2 ? -1 - i : i + 1));
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_load.d b/gcc/testsuite/gdc.dg/torture/simd_load.d
new file mode 100644
index 0000000..188ffda
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_load.d
@@ -0,0 +1,52 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+import gcc.simd;
+
+void main()
+{
+ ubyte[32] data;
+ foreach (i; 0..data.length)
+ {
+ data[i] = cast(ubyte)i;
+ }
+
+ // to test all alignments from 1 ~ 16
+ foreach (i; 0..16)
+ {
+ ubyte* d = &data[i];
+
+ void test(T)()
+ {
+ // load the data
+ T v = loadUnaligned(cast(T*)d);
+
+ // check that the data was loaded correctly
+ ubyte* ptrToV = cast(ubyte*)&v;
+ foreach (j; 0..T.sizeof)
+ assert(ptrToV[j] == d[j]);
+ }
+
+ static if (__traits(compiles, __vector(void[16])))
+ test!(__vector(void[16]))();
+ static if (__traits(compiles, __vector(byte[16])))
+ test!(__vector(byte[16]))();
+ static if (__traits(compiles, __vector(ubyte[16])))
+ test!(__vector(ubyte[16]))();
+ static if (__traits(compiles, __vector(short[8])))
+ test!(__vector(short[8]))();
+ static if (__traits(compiles, __vector(ushort[8])))
+ test!(__vector(ushort[8]))();
+ static if (__traits(compiles, __vector(int[4])))
+ test!(__vector(int[4]))();
+ static if (__traits(compiles, __vector(uint[4])))
+ test!(__vector(uint[4]))();
+ static if (__traits(compiles, __vector(long[2])))
+ test!(__vector(long[2]))();
+ static if (__traits(compiles, __vector(ulong[2])))
+ test!(__vector(ulong[2]))();
+ static if (__traits(compiles, __vector(double[2])))
+ test!(__vector(double[2]))();
+ static if (__traits(compiles, __vector(float[4])))
+ test!(__vector(float[4]))();
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_logical.d b/gcc/testsuite/gdc.dg/torture/simd_logical.d
new file mode 100644
index 0000000..e9c23f5
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_logical.d
@@ -0,0 +1,19 @@
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+
+import gcc.simd;
+
+void main()
+{
+ static if (__traits(compiles, __vector(int[4])))
+ {
+ __gshared __vector(int[4]) a = [1,0,-1,2];
+
+ assert(notMask(a).array == [0,-1,0,0]);
+
+ assert(andAndMask(a, 1).array == [-1,0,-1,-1]);
+ assert(andAndMask(a, 0).array == [0,0,0,0]);
+
+ assert(orOrMask(a, 1).array == [-1,-1,-1,-1]);
+ assert(orOrMask(a, 0).array == [-1,0,-1,-1]);
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_shuffle.d b/gcc/testsuite/gdc.dg/torture/simd_shuffle.d
new file mode 100644
index 0000000..3629cee
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_shuffle.d
@@ -0,0 +1,454 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+import gcc.simd;
+
+void testshuffle(V, VI = V)()
+{
+ alias E = typeof(V.array[0]);
+ enum numElements = V.sizeof / E.sizeof;
+
+ static if (numElements == 16)
+ {
+ // Test fragment for vectors with 16 elements
+ immutable V[5] in1 =
+ [[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ],
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ],
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ],
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ],
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]];
+
+ immutable VI[5] mask1 =
+ [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ],
+ [ 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87,
+ 0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0xff ] ,
+ [ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ],
+ [ 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15 ],
+ [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ]];
+
+ immutable V[5] out1 =
+ [[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ],
+ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ],
+ [ 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ],
+ [ 1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14, 16 ],
+ [ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ]];
+
+ immutable V[5] in2 =
+ [[ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ]];
+
+ immutable V in3 =
+ [ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 ];
+
+ immutable VI[5] mask2 =
+ [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ],
+ [ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 ],
+ [ 7, 6, 5, 4, 16, 17, 18, 19, 31, 30, 29, 28, 3, 2, 1, 0 ],
+ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
+ [ 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 ]];
+
+ immutable V[5] out2 =
+ [[ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ],
+ [ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 ],
+ [ 17, 16, 15, 14, 30, 31, 32, 33, 45, 44, 43, 42, 13, 12, 11, 10 ],
+ [ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 ],
+ [ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 ]];
+ }
+ else static if (numElements == 8)
+ {
+ // Test fragment for vectors with 8 elements
+ static if (is(E == uint))
+ {
+ enum E A1 = 0x11121314;
+ enum E B1 = 0x21222324;
+ enum E C1 = 0x31323334;
+ enum E D1 = 0x41424344;
+ enum E E1 = 0x51525354;
+ enum E F1 = 0x61626364;
+ enum E G1 = 0x71727374;
+ enum E H1 = 0x81828384;
+
+ enum E A2 = 0x91929394;
+ enum E B2 = 0xa1a2a3a4;
+ enum E C2 = 0xb1b2b3b4;
+ enum E D2 = 0xc1c2c3c4;
+ enum E E2 = 0xd1d2d3d4;
+ enum E F2 = 0xe1e2e3e4;
+ enum E G2 = 0xf1f2f3f4;
+ enum E H2 = 0x01020304;
+ }
+ else static if (is(E == ushort))
+ {
+ enum E A1 = 0x1112;
+ enum E B1 = 0x2122;
+ enum E C1 = 0x3132;
+ enum E D1 = 0x4142;
+ enum E E1 = 0x5152;
+ enum E F1 = 0x6162;
+ enum E G1 = 0x7172;
+ enum E H1 = 0x8182;
+
+ enum E A2 = 0x9192;
+ enum E B2 = 0xa1a2;
+ enum E C2 = 0xb1b2;
+ enum E D2 = 0xc1c2;
+ enum E E2 = 0xd1d2;
+ enum E F2 = 0xe1e2;
+ enum E G2 = 0xf1f2;
+ enum E H2 = 0x0102;
+ }
+ else static if (is(E == ubyte))
+ {
+ enum E A1 = 0x11;
+ enum E B1 = 0x12;
+ enum E C1 = 0x13;
+ enum E D1 = 0x14;
+ enum E E1 = 0x15;
+ enum E F1 = 0x16;
+ enum E G1 = 0x17;
+ enum E H1 = 0x18;
+
+ enum E A2 = 0xf1;
+ enum E B2 = 0xf2;
+ enum E C2 = 0xf3;
+ enum E D2 = 0xf4;
+ enum E E2 = 0xf5;
+ enum E F2 = 0xf6;
+ enum E G2 = 0xf7;
+ enum E H2 = 0xf8;
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ immutable V[8] in1 =
+ [[ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ],
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ],
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ]];
+
+ immutable VI[8] mask1 =
+ [[ 0, 1, 2, 3, 4, 5, 6, 7 ],
+ [ 0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87 ],
+ [ 7, 6, 5, 4, 3, 2, 1, 0 ],
+ [ 7, 0, 5, 3, 2, 4, 1, 6 ],
+ [ 0, 2, 1, 3, 4, 6, 5, 7 ],
+ [ 3, 1, 2, 0, 7, 5, 6, 4 ],
+ [ 0, 0, 0, 0 ],
+ [ 1, 6, 1, 6, 1, 6, 1, 6 ]];
+
+ immutable V[8] out1 =
+ [[ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ H1, G1, F1, E1, D1, C1, B1, A1 ],
+ [ H1, A1, F1, D1, C1, E1, B1, G1 ],
+ [ A1, C1, B1, D1, E1, G1, F1, H1 ],
+ [ D2, B2, C2, A2, H2, F2, G2, E2 ],
+ [ A2, A2, A2, A2, A2, A2, A2, A2 ],
+ [ B2, G2, B2, G2, B2, G2, B2, G2 ]];
+
+ immutable V[6] in2 =
+ [[ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A1, B1, C1, D1, E1, F1, G1, H1 ]];
+
+
+ immutable V in3 =
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ];
+
+ immutable VI[6] mask2 =
+ [[ 0, 1, 2, 3, 4, 5, 6, 7 ],
+ [ 8, 9, 10, 11, 12, 13, 14, 15 ],
+ [ 0, 8, 1, 9, 2, 10, 3, 11 ],
+ [ 0, 15, 4, 11, 12, 3, 7, 8 ],
+ [ 0, 0, 0, 0, 0, 0, 0, 0 ],
+ [ 0x1e, 0x2e, 0x3e, 0x4e, 0x5e, 0x6e, 0x7e, 0x8e ]];
+
+ immutable V[6] out2 =
+ [[ A1, B1, C1, D1, E1, F1, G1, H1 ],
+ [ A2, B2, C2, D2, E2, F2, G2, H2 ],
+ [ A1, A2, B1, B2, C1, C2, D1, D2 ],
+ [ A1, H2, E1, D2, E2, D1, H1, A2 ],
+ [ A1, A1, A1, A1, A1, A1, A1, A1 ],
+ [ G2, G2, G2, G2, G2, G2, G2, G2 ]];
+ }
+ }
+ else static if (numElements == 4)
+ {
+ // Test fragment for vectors with 4 elements
+ static if (is(E == double))
+ {
+ enum E A = 0.69314718055994530942;
+ enum E B = 2.7182818284590452354;
+ enum E C = 2.30258509299404568402;
+ enum E D = 1.4426950408889634074;
+
+ enum E W = 0.31830988618379067154;
+ enum E X = 3.14159265358979323846;
+ enum E Y = 1.41421356237309504880;
+ enum E Z = 0.70710678118654752440;
+ }
+ else static if (is(E == float))
+ {
+ enum E A = 0.69314718055994530942f;
+ enum E B = 2.7182818284590452354f;
+ enum E C = 2.30258509299404568402f;
+ enum E D = 1.4426950408889634074f;
+
+ enum E W = 0.31830988618379067154f;
+ enum E X = 3.14159265358979323846f;
+ enum E Y = 1.41421356237309504880f;
+ enum E Z = 0.70710678118654752440f;
+ }
+ else static if (is(E == ulong))
+ {
+ enum E A = 0x1112131415161718;
+ enum E B = 0x2122232425262728;
+ enum E C = 0x3132333435363738;
+ enum E D = 0x4142434445464748;
+
+ enum E W = 0xc1c2c3c4c5c6c7c8;
+ enum E X = 0xd1d2d3d4d5d6d7d8;
+ enum E Y = 0xe1e2e3e4e5e6e7e8;
+ enum E Z = 0xf1f2f3f4f5f6f7f8;
+ }
+ else static if (is(E == uint))
+ {
+ enum E A = 0x11121314;
+ enum E B = 0x21222324;
+ enum E C = 0x31323334;
+ enum E D = 0x41424344;
+
+ enum E W = 0xc1c2c3c4;
+ enum E X = 0xd1d2d3d4;
+ enum E Y = 0xe1e2e3e4;
+ enum E Z = 0xf1f2f3f4;
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ immutable V[8] in1 =
+ [[ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ W, X, Y, Z ],
+ [ W, X, Y, Z ],
+ [ W, X, Y, Z ]];
+
+ immutable VI[8] mask1 =
+ [[ 0, 1, 2, 3 ],
+ [ 0+1*4, 1+2*4, 2+3*4, 3+4*4 ],
+ [ 3, 2, 1, 0 ],
+ [ 0, 3, 2, 1 ],
+ [ 0, 2, 1, 3 ],
+ [ 3, 1, 2, 0 ],
+ [ 0, 0, 0, 0 ],
+ [ 1, 2, 1, 2 ]];
+
+ immutable V[8] out1 =
+ [[ A, B, C, D ],
+ [ A, B, C, D ],
+ [ D, C, B, A ],
+ [ A, D, C, B ],
+ [ A, C, B, D ],
+ [ Z, X, Y, W ],
+ [ W, W, W, W ],
+ [ X, Y, X, Y ]];
+
+
+ immutable V[6] in2 =
+ [[ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ],
+ [ A, B, C, D ]];
+
+ immutable V in3 = [ W, X, Y, Z ];
+
+ immutable VI[6] mask2 =
+ [[ 0, 1, 2, 3 ],
+ [ 4, 5, 6, 7 ],
+ [ 0, 4, 1, 5 ],
+ [ 0, 7, 4, 3 ],
+ [ 0, 0, 0, 0 ],
+ [ 7, 7, 7, 7 ]];
+
+ immutable V[6] out2 =
+ [[ A, B, C, D ],
+ [ W, X, Y, Z ],
+ [ A, W, B, X ],
+ [ A, Z, W, D ],
+ [ A, A, A, A ],
+ [ Z, Z, Z, Z ]];
+ }
+ }
+ else static if (numElements == 2)
+ {
+ // Test fragment for vectors with 2 elements
+ static if (is(E == double))
+ {
+ enum E A = 0.69314718055994530942;
+ enum E B = 2.7182818284590452354;
+
+ enum E X = 3.14159265358979323846;
+ enum E Y = 1.41421356237309504880;
+ }
+ else static if (is(E == float))
+ {
+ enum E A = 0.69314718055994530942f;
+ enum E B = 2.7182818284590452354f;
+
+ enum E X = 3.14159265358979323846f;
+ enum E Y = 1.41421356237309504880f;
+ }
+ else static if (is(E == ulong))
+ {
+ enum E A = 0x1112131415161718;
+ enum E B = 0x2122232425262728;
+
+ enum E X = 0xc1c2c3c4c5c6c7c8;
+ enum E Y = 0xd1d2d3d4d5d6d7d8;
+ }
+ else static if (is(E == uint))
+ {
+ enum E A = 0x11121314;
+ enum E B = 0x21222324;
+
+ enum E X = 0xd1d2d3d4;
+ enum E Y = 0xe1e2e3e4;
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ immutable V[6] in1 =
+ [[ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ X, Y ],
+ [ X, Y ]];
+
+ immutable VI[6] mask1 =
+ [[ 0, 1 ],
+ [ -16, 1 ],
+ [ 1, 0 ],
+ [ 0, 0 ],
+ [ 1, 1 ],
+ [ 1, 0 ]];
+
+ immutable V[6] out1 =
+ [[ A, B ],
+ [ A, B ],
+ [ B, A ],
+ [ A, A ],
+ [ Y, Y ],
+ [ Y, X ]];
+
+ immutable V[7] in2 =
+ [[ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ],
+ [ A, B ]];
+
+ immutable V in3 = [ X, Y ];
+
+ immutable VI[7] mask2 =
+ [[ 0, 1 ],
+ [ 2, 3 ],
+ [ 0, 2 ],
+ [ 2, 1 ],
+ [ 3, 0 ],
+ [ 0, 0 ],
+ [ 3, 3 ]];
+
+ immutable V[7] out2 =
+ [[ A, B ],
+ [ X, Y ],
+ [ A, X ],
+ [ X, B ],
+ [ Y, A ],
+ [ A, A ],
+ [ Y, Y ]];
+ }
+ }
+ else
+ enum unsupported = true;
+
+ static if (!__traits(compiles, unsupported))
+ {
+ static foreach (i; 0 .. in1.length)
+ assert(shuffle(in1[i], mask1[i]).array == out1[i].array);
+ static foreach (i; 0 .. in2.length)
+ assert(shuffle(in2[i], in3, mask2[i]).array == out2[i].array);
+ }
+}
+
+void main()
+{
+ static if (__traits(compiles, __vector(ubyte[16])))
+ testshuffle!(__vector(ubyte[16]))();
+
+ static if (__traits(compiles, __vector(ushort[16])))
+ testshuffle!(__vector(ushort[16]))();
+
+ static if (__traits(compiles, __vector(ubyte[8])))
+ testshuffle!(__vector(ubyte[8]))();
+
+ static if (__traits(compiles, __vector(ushort[8])))
+ testshuffle!(__vector(ushort[8]))();
+
+ static if (__traits(compiles, __vector(uint[8])))
+ testshuffle!(__vector(uint[8]))();
+
+ static if (__traits(compiles, __vector(ulong[4])))
+ {
+ testshuffle!(__vector(ulong[4]));
+
+ static if (__traits(compiles, __vector(double[4])))
+ testshuffle!(__vector(double[4]), __vector(ulong[4]));
+ }
+
+ static if (__traits(compiles, __vector(uint[4])))
+ {
+ testshuffle!(__vector(uint[4]));
+
+ static if (__traits(compiles, __vector(float[4])))
+ testshuffle!(__vector(float[4]), __vector(uint[4]));
+ }
+
+ static if (__traits(compiles, __vector(ulong[2])))
+ {
+ testshuffle!(__vector(ulong[2]));
+
+ static if (__traits(compiles, __vector(double[2])))
+ testshuffle!(__vector(double[2]), __vector(ulong[2]));
+ }
+
+ static if (__traits(compiles, __vector(uint[2])))
+ {
+ testshuffle!(__vector(uint[2]));
+
+ static if (__traits(compiles, __vector(float[2])))
+ testshuffle!(__vector(float[2]), __vector(uint[2]));
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_shufflevector.d b/gcc/testsuite/gdc.dg/torture/simd_shufflevector.d
new file mode 100644
index 0000000..cc55999
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_shufflevector.d
@@ -0,0 +1,55 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+import gcc.simd;
+import gcc.attributes;
+
+void main()
+{
+ static if (__traits(compiles, __vector(int[4])))
+ alias int4 = __vector(int[4]);
+ static if (__traits(compiles, __vector(int[8])))
+ alias int8 = __vector(int[8]);
+
+ static if (__traits(compiles, int4) && __traits(compiles, int8))
+ {
+ __gshared int4[5] res;
+ __gshared int4 a;
+ __gshared int4 b;
+ __gshared int8[3] res8;
+ __gshared int8 a8;
+ __gshared int8 b8;
+
+ @noipa static void foo()
+ {
+ res[0] = shufflevector(a, b, 0, 1, 4, 5);
+ res[1] = shufflevector(a, b, 0, 1, 2, 5);
+ res8[0] = shufflevector(a, b, 0, 1, 2, 2 + 1, 4, 5, 6, 7);
+ res[2] = shufflevector(a8, b8, 0, 8, 1, 9);
+ res[3] = shufflevector(a8, b, 0, 8, 1, 9);
+ res[4] = shufflevector(a, b8, 0, 4, 1, 5);
+ res8[1] = shufflevector(a8, b, 0, 8, 1, 9, 10, 11, 2, 3);
+ res8[2] = shufflevector(a, b8, 0, 4, 1, 5, 4, 5, 6, 7);
+ }
+
+ a = [0, 1, 2, 3];
+ b = [4, 5, 6, 7];
+ a8 = [0, 1, 2, 3, 4, 5, 6, 7];
+ b8 = [8, 9, 10, 11, 12, 13, 14, 15];
+ foo();
+ assert(res[0].array == [0, 1, 4, 5]);
+
+ res[1][2] = 9;
+ assert(res[1].array == [0, 1, 9, 5]);
+ assert(res8[0].array == [0, 1, 2, 3, 4, 5, 6, 7]);
+ assert(res[2].array == [0, 8, 1, 9]);
+ assert(res[3].array == [0, 4, 1, 5]);
+ assert(res[4].array == [0, 8, 1, 9]);
+ assert(res8[1].array == [0, 4, 1, 5, 6, 7, 2, 3]);
+
+ res8[2][4] = 42;
+ res8[2][5] = 42;
+ res8[2][6] = 42;
+ res8[2][7] = 42;
+ assert(res8[2].array == [0, 8, 1, 9, 42, 42, 42, 42]);
+ }
+}
diff --git a/gcc/testsuite/gdc.dg/torture/simd_store.d b/gcc/testsuite/gdc.dg/torture/simd_store.d
new file mode 100644
index 0000000..b96ed42
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/torture/simd_store.d
@@ -0,0 +1,54 @@
+// { dg-additional-options "-mavx" { target avx_runtime } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
+import gcc.simd;
+
+void main()
+{
+ ubyte[32] data;
+
+ // to test all alignments from 1 ~ 16
+ foreach (i; 0..16)
+ {
+ ubyte* d = &data[i];
+
+ void test(T)()
+ {
+ T v;
+
+ // populate v` with data
+ ubyte* ptrToV = cast(ubyte*)&v;
+ foreach (j; 0..T.sizeof)
+ ptrToV[j] = cast(ubyte)j;
+
+ // store `v` to location pointed to by `d`
+ storeUnaligned(cast(T*)d, v);
+
+ // check that the the data was stored correctly
+ foreach (j; 0..T.sizeof)
+ assert(ptrToV[j] == d[j]);
+ }
+
+ static if (__traits(compiles, __vector(void[16])))
+ test!(__vector(void[16]))();
+ static if (__traits(compiles, __vector(byte[16])))
+ test!(__vector(byte[16]))();
+ static if (__traits(compiles, __vector(ubyte[16])))
+ test!(__vector(ubyte[16]))();
+ static if (__traits(compiles, __vector(short[8])))
+ test!(__vector(short[8]))();
+ static if (__traits(compiles, __vector(ushort[8])))
+ test!(__vector(ushort[8]))();
+ static if (__traits(compiles, __vector(int[4])))
+ test!(__vector(int[4]))();
+ static if (__traits(compiles, __vector(uint[4])))
+ test!(__vector(uint[4]))();
+ static if (__traits(compiles, __vector(long[2])))
+ test!(__vector(long[2]))();
+ static if (__traits(compiles, __vector(ulong[2])))
+ test!(__vector(ulong[2]))();
+ static if (__traits(compiles, __vector(double[2])))
+ test!(__vector(double[2]))();
+ static if (__traits(compiles, __vector(float[4])))
+ test!(__vector(float[4]))();
+ }
+}
diff --git a/gcc/testsuite/gdc.test/compilable/b16360.d b/gcc/testsuite/gdc.test/compilable/b16360.d
deleted file mode 100644
index 1141579..0000000
--- a/gcc/testsuite/gdc.test/compilable/b16360.d
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-REQUIRED_ARGS: -inline -wi
-
-TEST_OUTPUT:
----
-compilable/b16360.d(12): Warning: cannot inline function `b16360.foo`
-compilable/b16360.d(25): Warning: cannot inline function `b16360.bar`
----
-*/
-
-pragma(inline, true)
-auto foo()
-{
- static struct U
- {
- int a = 42;
- float b;
- ~this(){} // __dtor: inline not allowed
- }
- U u;
- return u.a;
-}
-
-pragma(inline, true)
-auto bar()
-{
- class U // class : inline not allowed
- {
- int a = 42;
- float b;
- }
- return (new U).a;
-}
-
-void main()
-{
- auto f = foo();
- auto b = bar();
-}
diff --git a/gcc/testsuite/gdc.test/compilable/dtoh_AnonDeclaration.d b/gcc/testsuite/gdc.test/compilable/dtoh_AnonDeclaration.d
index 20134f5..a4c6ce4 100644
--- a/gcc/testsuite/gdc.test/compilable/dtoh_AnonDeclaration.d
+++ b/gcc/testsuite/gdc.test/compilable/dtoh_AnonDeclaration.d
@@ -61,9 +61,21 @@ struct S final
int32_t innerPrivate;
int32_t innerBar;
};
- S()
+ S() :
+ y(),
+ z(),
+ outerPrivate(),
+ innerPrivate(),
+ innerBar()
{
}
+ S(int32_t y, double z = NAN, int32_t outerPrivate = 0, int32_t innerPrivate = 0, int32_t innerBar = 0) :
+ y(y),
+ z(z),
+ outerPrivate(outerPrivate),
+ innerPrivate(innerPrivate),
+ innerBar(innerBar)
+ {}
};
extern void foo();
diff --git a/gcc/testsuite/gdc.test/compilable/dtoh_StructDeclaration.d b/gcc/testsuite/gdc.test/compilable/dtoh_StructDeclaration.d
index 8c7ba9b..2e36c7d 100644
--- a/gcc/testsuite/gdc.test/compilable/dtoh_StructDeclaration.d
+++ b/gcc/testsuite/gdc.test/compilable/dtoh_StructDeclaration.d
@@ -173,12 +173,16 @@ struct A final
A() :
a(),
- s()
+ s(),
+ x(),
+ y()
{
}
- A(int32_t a, S s = S()) :
+ A(int32_t a, S s = S(), int32_t x = 0, int32_t y = 0) :
a(a),
- s(s)
+ s(s),
+ x(x),
+ y(y)
{}
};
@@ -196,11 +200,13 @@ private:
char smallarray[1$?:32=u|64=LLU$];
public:
Array() :
- length()
+ length(),
+ data()
{
}
- Array(uint32_t length) :
- length(length)
+ Array(uint32_t length, _d_dynamicArray< char > data = {}) :
+ length(length),
+ data(data)
{}
};
diff --git a/gcc/testsuite/gdc.test/compilable/dtoh_TemplateDeclaration.d b/gcc/testsuite/gdc.test/compilable/dtoh_TemplateDeclaration.d
index 1e2be90..1ed6318 100644
--- a/gcc/testsuite/gdc.test/compilable/dtoh_TemplateDeclaration.d
+++ b/gcc/testsuite/gdc.test/compilable/dtoh_TemplateDeclaration.d
@@ -219,9 +219,13 @@ struct ImportedBuffer final
{
typedef ActualBuffer Buffer;
ActualBuffer buffer2;
- ImportedBuffer()
+ ImportedBuffer() :
+ buffer2()
{
}
+ ImportedBuffer(ActualBuffer buffer2) :
+ buffer2(buffer2)
+ {}
};
---
*/
diff --git a/gcc/testsuite/gdc.test/compilable/dtoh_mangling.d b/gcc/testsuite/gdc.test/compilable/dtoh_mangling.d
index 10967c8..fda9efa 100644
--- a/gcc/testsuite/gdc.test/compilable/dtoh_mangling.d
+++ b/gcc/testsuite/gdc.test/compilable/dtoh_mangling.d
@@ -64,9 +64,15 @@ struct HasMangleMember final
int32_t someAttrC;
int32_t someAttrCpp;
void hasDefaultVar(int32_t i = someAttrC);
- HasMangleMember()
+ HasMangleMember() :
+ someAttrC(),
+ someAttrCpp()
{
}
+ HasMangleMember(int32_t someAttrC, int32_t someAttrCpp = 0) :
+ someAttrC(someAttrC),
+ someAttrCpp(someAttrCpp)
+ {}
};
extern "C" void hasDefaultVar(int32_t i = someVarC);
diff --git a/gcc/testsuite/gdc.test/compilable/dtoh_protection.d b/gcc/testsuite/gdc.test/compilable/dtoh_protection.d
index 3fd54c7..dc07c7b 100644
--- a/gcc/testsuite/gdc.test/compilable/dtoh_protection.d
+++ b/gcc/testsuite/gdc.test/compilable/dtoh_protection.d
@@ -50,9 +50,21 @@ protected:
private:
int32_t e;
public:
- S1()
+ S1() :
+ a(),
+ b(),
+ c(),
+ d(),
+ e()
{
}
+ S1(int32_t a, int32_t b = 0, int32_t c = 0, int32_t d = 0, int32_t e = 0) :
+ a(a),
+ b(b),
+ c(c),
+ d(d),
+ e(e)
+ {}
};
class S2 final
@@ -102,10 +114,12 @@ public:
public:
int32_t publicInner;
PublicInnerStruct() :
+ privateInner(),
publicInner()
{
}
- PublicInnerStruct(int32_t publicInner) :
+ PublicInnerStruct(int32_t privateInner, int32_t publicInner = 0) :
+ privateInner(privateInner),
publicInner(publicInner)
{}
};
@@ -118,10 +132,12 @@ private:
public:
int32_t publicInner;
PrivateInnerClass() :
+ privateInner(),
publicInner()
{
}
- PrivateInnerClass(int32_t publicInner) :
+ PrivateInnerClass(int32_t privateInner, int32_t publicInner = 0) :
+ privateInner(privateInner),
publicInner(publicInner)
{}
};
@@ -142,9 +158,13 @@ private:
public:
typedef PrivateInnerEnum PublicAlias;
- Outer()
+ Outer() :
+ privateOuter()
{
}
+ Outer(int32_t privateOuter) :
+ privateOuter(privateOuter)
+ {}
};
---
*/
diff --git a/gcc/testsuite/gdc.test/compilable/inliner.d b/gcc/testsuite/gdc.test/compilable/inliner.d
new file mode 100644
index 0000000..1273809
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/inliner.d
@@ -0,0 +1,21 @@
+// REQUIRED_ARGS: -inline -O -unittest
+
+struct Cent
+{
+ ulong lo;
+ ulong hi;
+}
+
+Cent add(Cent, Cent);
+
+Cent sub(Cent c1, Cent c2)
+{
+ return add(c1, c2);
+}
+
+Cent udivmod(Cent c3, Cent c4)
+{
+ Cent quotient;
+ Cent rem = sub(c3, c4);
+ return quotient;
+}
diff --git a/gcc/testsuite/gdc.test/compilable/inliner2.d b/gcc/testsuite/gdc.test/compilable/inliner2.d
new file mode 100644
index 0000000..7ffa5cc
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/inliner2.d
@@ -0,0 +1,27 @@
+// REQUIRED_ARGS: -O -inline
+
+struct Cent
+{
+ ulong lo; // low 64 bits
+ ulong hi; // high 64 bits
+}
+
+pure bool tst(Cent c)
+{
+ return c.hi || c.lo;
+}
+
+pure Cent dec(Cent c);
+pure Cent shl(Cent c, uint n);
+
+pure Cent udivmod(Cent c1, Cent c2, out Cent modulus)
+{
+ ulong v1 = shl(c2, 3).hi;
+
+ Cent quotient;
+
+ if (tst(quotient))
+ quotient = dec(quotient);
+
+ return quotient;
+}
diff --git a/gcc/testsuite/gdc.test/compilable/test23168.d b/gcc/testsuite/gdc.test/compilable/test23168.d
new file mode 100644
index 0000000..61a4ff3
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test23168.d
@@ -0,0 +1,30 @@
+// https://issues.dlang.org/show_bug.cgi?id=23168
+// Issue 23168 - [DIP1000] return scope wrongly rewritten for structs with no indirections
+
+@safe:
+struct Ptr
+{
+ int* fun() return scope { return null; }
+}
+
+int* funf(ref return scope Ptr p) { return null; }
+
+int* use()
+{
+ Ptr ptr;
+ return ptr.fun;
+ return funf(ptr);
+}
+
+// Prevent forward reference 'regression'
+// See https://github.com/dlang/dmd/pull/14232#issuecomment-1162906573
+struct S
+{
+ void f() scope {}
+ alias x = _get_value;
+
+ static if (true)
+ int _get_value() {return 3;}
+ else
+ int _get_value() {return 4;}
+}
diff --git a/gcc/testsuite/gdc.test/compilable/test23169.d b/gcc/testsuite/gdc.test/compilable/test23169.d
new file mode 100644
index 0000000..6237661
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test23169.d
@@ -0,0 +1,14 @@
+// https://issues.dlang.org/show_bug.cgi?id=23169
+// Issue 23169 - [DIP1000] Mangling does not distinguish return and return scope
+
+struct Ptr
+{
+ int* impl;
+ void* fun0() return scope {return impl;}
+ void* fun1() scope return {return impl;}
+ void* fun2() return {return &this;}
+}
+
+static assert(Ptr.fun0.mangleof == "_D9test231693Ptr4fun0MFNjNlZPv");
+static assert(Ptr.fun1.mangleof == "_D9test231693Ptr4fun1MFNlNjZPv");
+static assert(Ptr.fun2.mangleof == "_D9test231693Ptr4fun2MFNjZPv");
diff --git a/gcc/testsuite/gdc.test/compilable/test3004.d b/gcc/testsuite/gdc.test/compilable/test3004.d
index 9912b88..23ec46f 100644
--- a/gcc/testsuite/gdc.test/compilable/test3004.d
+++ b/gcc/testsuite/gdc.test/compilable/test3004.d
@@ -1,15 +1,13 @@
// https://issues.dlang.org/show_bug.cgi?id=3004
/*
REQUIRED_ARGS: -ignore -v
-TRANSFORM_OUTPUT: remove_lines("^(predefs|binary|version|config|DFLAG|parse|import|semantic|entry|library|function object|\s*$)")
+TRANSFORM_OUTPUT: remove_lines("^(predefs|binary|version|config|DFLAG|parse|import|semantic|entry|library|function object|function core|\s*$)")
TEST_OUTPUT:
---
pragma GNU_attribute (__error)
pragma GNU_attribute (__error)
code test3004
function test3004.test
-function core.internal.array.appending._d_arrayappendcTXImpl!(char[], char)._d_arrayappendcTX
-function core.internal.array.utils._d_HookTraceImpl!(char[], _d_arrayappendcTX, "Cannot append to array if compiling without support for runtime type information!")._d_HookTraceImpl
---
*/
diff --git a/gcc/testsuite/gdc.test/compilable/testparse.d b/gcc/testsuite/gdc.test/compilable/testparse.d
index 99378a9..cef1575 100644
--- a/gcc/testsuite/gdc.test/compilable/testparse.d
+++ b/gcc/testsuite/gdc.test/compilable/testparse.d
@@ -191,3 +191,13 @@ void test22019()
break;
}
}
+
+/***************************************************/
+// https://issues.dlang.org/show_bug.cgi?id=23205
+
+void test23205()
+{
+ mixin template tpl() { int x; }
+ mixin tpl!();
+ x = 123;
+}
diff --git a/gcc/testsuite/gdc.test/compilable/vcg-ast.d b/gcc/testsuite/gdc.test/compilable/vcg-ast.d
index cbb150c..4a7b8bc 100644
--- a/gcc/testsuite/gdc.test/compilable/vcg-ast.d
+++ b/gcc/testsuite/gdc.test/compilable/vcg-ast.d
@@ -7,6 +7,9 @@ TEST_OUTPUT_FILE: extra-files/vcg-ast.d.cg
module vcg;
+alias xyz = __traits(parent, {});
+alias named = vcg;
+
template Seq(A...)
{
alias Seq = A;
diff --git a/gcc/testsuite/gdc.test/fail_compilation/diag_in_array.d b/gcc/testsuite/gdc.test/fail_compilation/diag_in_array.d
new file mode 100644
index 0000000..f869b32
--- /dev/null
+++ b/gcc/testsuite/gdc.test/fail_compilation/diag_in_array.d
@@ -0,0 +1,20 @@
+/**
+TEST_OUTPUT:
+---
+fail_compilation/diag_in_array.d(17): Error: incompatible types for `(3) in (a)`: `int` and `int[4]`
+fail_compilation/diag_in_array.d(17): `in` is only allowed on associative arrays
+fail_compilation/diag_in_array.d(17): perhaps use `std.algorithm.find(3, a[])` instead
+fail_compilation/diag_in_array.d(19): Error: incompatible types for `("s") in (b)`: `string` and `string[]`
+fail_compilation/diag_in_array.d(19): `in` is only allowed on associative arrays
+fail_compilation/diag_in_array.d(19): perhaps use `std.algorithm.find("s", b)` instead
+---
+*/
+
+void main()
+{
+ int[4] a;
+ string[] b;
+ if (3 in a)
+ return;
+ auto c = "s" in b;
+}
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail17927.d b/gcc/testsuite/gdc.test/fail_compilation/fail17927.d
index 410f307..cf610ff 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/fail17927.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/fail17927.d
@@ -1,10 +1,10 @@
/* REQUIRED_ARGS: -preview=dip1000
* TEST_OUTPUT:
---
-fail_compilation/fail17927.d(13): Error: scope variable `this` may not be returned
-fail_compilation/fail17927.d(15): Error: scope variable `this` may not be returned
-fail_compilation/fail17927.d(21): Error: scope variable `ptr` may not be returned
-fail_compilation/fail17927.d(23): Error: scope variable `ptr` may not be returned
+fail_compilation/fail17927.d(13): Error: scope parameter `this` may not be returned
+fail_compilation/fail17927.d(15): Error: scope parameter `this` may not be returned
+fail_compilation/fail17927.d(21): Error: scope parameter `ptr` may not be returned
+fail_compilation/fail17927.d(23): Error: scope parameter `ptr` may not be returned
---
*/
// https://issues.dlang.org/show_bug.cgi?id=17927
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail20108.d b/gcc/testsuite/gdc.test/fail_compilation/fail20108.d
index f768b89..15845e1 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/fail20108.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/fail20108.d
@@ -3,7 +3,7 @@
TEST_OUTPUT:
---
fail_compilation/fail20108.d(15): Error: address of variable `y` assigned to `x` with longer lifetime
-fail_compilation/fail20108.d(16): Error: scope variable `x` may not be returned
+fail_compilation/fail20108.d(16): Error: scope parameter `x` may not be returned
fail_compilation/fail20108.d(23): Error: address of variable `y` assigned to `x` with longer lifetime
fail_compilation/fail20108.d(24): Error: scope variable `x` may not be returned
---
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail_scope.d b/gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
index 3e7637f..3fac167 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/fail_scope.d
@@ -2,7 +2,10 @@
REQUIRED_ARGS:
TEST_OUTPUT:
---
-fail_compilation/fail_scope.d(40): Deprecation: scope variable `p` may not be returned
+fail_compilation/fail_scope.d(30): Deprecation: scope parameter `da` may not be returned
+fail_compilation/fail_scope.d(32): Deprecation: scope parameter `o` may not be returned
+fail_compilation/fail_scope.d(33): Deprecation: scope parameter `dg` may not be returned
+fail_compilation/fail_scope.d(40): Deprecation: scope parameter `p` may not be returned
fail_compilation/fail_scope.d(45): Error: returning `cast(char[])string` escapes a reference to local variable `string`
fail_compilation/fail_scope.d(63): Error: returning `s.bar()` escapes a reference to local variable `s`
fail_compilation/fail_scope.d(74): Error: `fail_scope.foo8` called with argument types `(int)` matches both:
@@ -16,9 +19,6 @@ fail_compilation/fail_scope.d(108): Deprecation: escaping reference to outer loc
fail_compilation/fail_scope.d(127): Deprecation: returning `s.bar()` escapes a reference to local variable `s`
fail_compilation/fail_scope.d(137): Error: returning `foo16226(i)` escapes a reference to local variable `i`
---
-//fail_compilation/fail_scope.d(30): Error: scope variable `da` may not be returned
-//fail_compilation/fail_scope.d(32): Error: scope variable `o` may not be returned
-//fail_compilation/fail_scope.d(33): Error: scope variable `dg` may not be returned
//fail_compilation/fail_scope.d(35): Error: scope variable `da` may not be returned
//fail_compilation/fail_scope.d(37): Error: scope variable `o` may not be returned
//fail_compilation/fail_scope.d(38): Error: scope variable `dg` may not be returned
diff --git a/gcc/testsuite/gdc.test/fail_compilation/ice12574.d b/gcc/testsuite/gdc.test/fail_compilation/ice12574.d
index 420b6b7..93e5f1d 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/ice12574.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/ice12574.d
@@ -1,7 +1,7 @@
/*
TEST_OUTPUT:
---
-fail_compilation/ice12574.d(40): Error: tuple index `2` exceeds length 2
+fail_compilation/ice12574.d(40): Error: tuple index `2` out of bounds `[0 .. 2]`
fail_compilation/ice12574.d(53): Error: template instance `ice12574.reduce!("a", "a").reduce!(Tuple!(int, int, int))` error instantiating
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/previewin.d b/gcc/testsuite/gdc.test/fail_compilation/previewin.d
index b3beaf4..ce0cf92 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/previewin.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/previewin.d
@@ -10,7 +10,7 @@ fail_compilation/previewin.d(6): Error: function `previewin.takeFunction(void fu
fail_compilation/previewin.d(6): cannot pass argument `__lambda3` of type `void function(ref const(real) x) pure nothrow @nogc @safe` to parameter `void function(in real) f`
fail_compilation/previewin.d(15): Error: scope variable `arg` assigned to non-scope `myGlobal`
fail_compilation/previewin.d(16): Error: scope variable `arg` assigned to non-scope `myGlobal`
-fail_compilation/previewin.d(17): Error: scope variable `arg` may not be returned
+fail_compilation/previewin.d(17): Error: scope parameter `arg` may not be returned
fail_compilation/previewin.d(18): Error: scope variable `arg` assigned to `escape` with longer lifetime
fail_compilation/previewin.d(22): Error: returning `arg` escapes a reference to parameter `arg`
fail_compilation/previewin.d(22): perhaps annotate the parameter with `return`
diff --git a/gcc/testsuite/gdc.test/fail_compilation/previewin2.d b/gcc/testsuite/gdc.test/fail_compilation/previewin2.d
new file mode 100644
index 0000000..e9fe6a1
--- /dev/null
+++ b/gcc/testsuite/gdc.test/fail_compilation/previewin2.d
@@ -0,0 +1,18 @@
+/*
+REQUIRED_ARGS: -preview=in -preview=dip1000
+TEST_OUTPUT:
+---
+fail_compilation/previewin2.d(1): Error: cannot use `in` parameters with `extern(C)` functions
+fail_compilation/previewin2.d(1): parameter `a` declared as `in` here
+fail_compilation/previewin2.d(2): Error: cannot use `in` parameters with `extern(Windows)` functions
+fail_compilation/previewin2.d(2): parameter `a` declared as `in` here
+fail_compilation/previewin2.d(4): Error: cannot use `in` parameters with `extern(C)` functions
+fail_compilation/previewin2.d(4): parameter `__anonymous_param` declared as `in` here
+---
+*/
+
+#line 1
+extern(C) void wrongLink1 (in int a);
+extern(Windows) void wrongLink2 (in void* a);
+struct Large { ulong[64] data; }
+extern(C) void wrongLink3 (in Large);
diff --git a/gcc/testsuite/gdc.test/fail_compilation/retscope.d b/gcc/testsuite/gdc.test/fail_compilation/retscope.d
index 27d5663..9394404 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/retscope.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/retscope.d
@@ -2,7 +2,7 @@
REQUIRED_ARGS: -preview=dip1000
TEST_OUTPUT:
---
-fail_compilation/retscope.d(22): Error: scope variable `p` may not be returned
+fail_compilation/retscope.d(22): Error: scope parameter `p` may not be returned
fail_compilation/retscope.d(32): Error: returning `b ? nested1(& i) : nested2(& j)` escapes a reference to local variable `j`
fail_compilation/retscope.d(45): Error: scope variable `p` assigned to non-scope `q`
fail_compilation/retscope.d(47): Error: address of variable `i` assigned to `q` with longer lifetime
@@ -85,7 +85,7 @@ struct HTTP
/*
TEST_OUTPUT:
---
-fail_compilation/retscope.d(96): Error: reference to local variable `sa` assigned to non-scope parameter `a`
+fail_compilation/retscope.d(96): Error: reference to local variable `sa` assigned to non-scope parameter `a` calling `bar8`
---
*/
// https://issues.dlang.org/show_bug.cgi?id=8838
@@ -149,7 +149,7 @@ S10* test10()
/*
TEST_OUTPUT:
---
-fail_compilation/retscope.d(158): Error: scope variable `this` may not be returned
+fail_compilation/retscope.d(158): Error: scope parameter `this` may not be returned
---
*/
@@ -218,7 +218,7 @@ void* escape3 (scope void* p) @safe {
/*
TEST_OUTPUT:
---
-fail_compilation/retscope.d(229): Error: scope variable `ptr` may not be returned
+fail_compilation/retscope.d(229): Error: scope parameter `ptr` may not be returned
---
*/
@@ -403,7 +403,7 @@ class Foo13
/*
TEST_OUTPUT:
---
-fail_compilation/retscope.d(1205): Error: scope variable `f14` assigned to non-scope parameter `this`
+fail_compilation/retscope.d(1205): Error: scope variable `f14` assigned to non-scope parameter `this` calling `foo`
---
*/
@@ -454,7 +454,7 @@ fail_compilation/retscope.d(1311): Error: scope variable `u2` assigned to `ek` w
/*
TEST_OUTPUT:
---
-fail_compilation/retscope.d(1405): Error: reference to local variable `buf` assigned to non-scope parameter `__anonymous_param`
+fail_compilation/retscope.d(1405): Error: reference to local variable `buf` assigned to non-scope parameter `__anonymous_param` calling `myprintf`
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/retscope2.d b/gcc/testsuite/gdc.test/fail_compilation/retscope2.d
index 17d2182..9f1e13d 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/retscope2.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/retscope2.d
@@ -86,8 +86,8 @@ fail_compilation/retscope2.d(504): Error: scope variable `c` may not be returned
/*
TEST_OUTPUT:
---
-fail_compilation/retscope2.d(604): Error: scope variable `_param_0` assigned to non-scope parameter `__anonymous_param`
-fail_compilation/retscope2.d(604): Error: scope variable `_param_1` assigned to non-scope parameter `__anonymous_param`
+fail_compilation/retscope2.d(604): Error: scope variable `_param_0` assigned to non-scope parameter `__anonymous_param` calling `foo600`
+fail_compilation/retscope2.d(604): Error: scope variable `_param_1` assigned to non-scope parameter `__anonymous_param` calling `foo600`
fail_compilation/retscope2.d(614): Error: template instance `retscope2.test600!(int*, int*)` error instantiating
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/retscope6.d b/gcc/testsuite/gdc.test/fail_compilation/retscope6.d
index b9a85ae..a8e5de5 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/retscope6.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/retscope6.d
@@ -76,9 +76,9 @@ void foo() @safe
/* TEST_OUTPUT:
---
fail_compilation/retscope6.d(8016): Error: address of variable `i` assigned to `p` with longer lifetime
-fail_compilation/retscope6.d(8031): Error: reference to local variable `i` assigned to non-scope parameter `p`
-fail_compilation/retscope6.d(8031): Error: reference to local variable `j` assigned to non-scope parameter `q`
-fail_compilation/retscope6.d(8048): Error: reference to local variable `j` assigned to non-scope parameter `q`
+fail_compilation/retscope6.d(8031): Error: reference to local variable `i` assigned to non-scope parameter `p` calling `betty`
+fail_compilation/retscope6.d(8031): Error: reference to local variable `j` assigned to non-scope parameter `q` calling `betty`
+fail_compilation/retscope6.d(8048): Error: reference to local variable `j` assigned to non-scope parameter `q` calling `archie`
---
*/
@@ -172,7 +172,7 @@ T9 testfred()
/* TEST_OUTPUT:
---
-fail_compilation/retscope6.d(10003): Error: scope variable `values` assigned to non-scope parameter `values`
+fail_compilation/retscope6.d(10003): Error: scope variable `values` assigned to non-scope parameter `values` calling `escape`
---
*/
@@ -234,7 +234,7 @@ const(int)* f_c_20150() @safe nothrow
/* TEST_OUTPUT:
---
-fail_compilation/retscope6.d(13010): Error: reference to local variable `str` assigned to non-scope parameter `x`
+fail_compilation/retscope6.d(13010): Error: reference to local variable `str` assigned to non-scope parameter `x` calling `f_throw`
---
*/
@@ -254,7 +254,7 @@ void escape_throw_20150() @safe
/* TEST_OUTPUT:
---
-fail_compilation/retscope6.d(14019): Error: scope variable `scopePtr` assigned to non-scope parameter `x`
+fail_compilation/retscope6.d(14019): Error: scope variable `scopePtr` assigned to non-scope parameter `x` calling `noInfer23021`
fail_compilation/retscope6.d(14022): Error: scope variable `scopePtr` may not be returned
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/test14238.d b/gcc/testsuite/gdc.test/fail_compilation/test14238.d
index e0d0b35..a0e4d69 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/test14238.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/test14238.d
@@ -1,7 +1,7 @@
/* REQUIRED_ARGS: -preview=dip1000
TEST_OUTPUT:
---
-fail_compilation/test14238.d(20): Error: scope variable `fn` may not be returned
+fail_compilation/test14238.d(20): Error: scope parameter `fn` may not be returned
fail_compilation/test14238.d(28): Error: escaping reference to stack allocated value returned by `&baz`
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/test17423.d b/gcc/testsuite/gdc.test/fail_compilation/test17423.d
index ec86646..3afb63b 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/test17423.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/test17423.d
@@ -1,7 +1,7 @@
/* REQUIRED_ARGS: -preview=dip1000
TEST_OUTPUT:
---
-fail_compilation/test17423.d(26): Error: reference to local `this` assigned to non-scope parameter `dlg`
+fail_compilation/test17423.d(26): Error: reference to local `this` assigned to non-scope parameter `dlg` calling `opApply`
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/test17450.d b/gcc/testsuite/gdc.test/fail_compilation/test17450.d
index 098adaa..ddf3f46 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/test17450.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/test17450.d
@@ -33,8 +33,8 @@ struct S {
/*
TEST_OUTPUT:
---
-fail_compilation/test17450.d(103): Error: scope variable `c` may not be returned
-fail_compilation/test17450.d(106): Error: scope variable `this` may not be returned
+fail_compilation/test17450.d(103): Error: scope parameter `c` may not be returned
+fail_compilation/test17450.d(106): Error: scope parameter `this` may not be returned
---
*/
// https://issues.dlang.org/show_bug.cgi?id=17450
diff --git a/gcc/testsuite/gdc.test/fail_compilation/test20245.d b/gcc/testsuite/gdc.test/fail_compilation/test20245.d
index daa0697..1713c9d 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/test20245.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/test20245.d
@@ -2,15 +2,15 @@
REQUIRED_ARGS: -preview=dip1000
TEST_OUTPUT:
---
-fail_compilation/test20245.d(20): Error: reference to local variable `x` assigned to non-scope parameter `ptr`
+fail_compilation/test20245.d(20): Error: reference to local variable `x` assigned to non-scope parameter `ptr` calling `escape`
fail_compilation/test20245.d(21): Error: copying `&x` into allocated memory escapes a reference to parameter `x`
fail_compilation/test20245.d(22): Error: scope variable `a` may not be returned
fail_compilation/test20245.d(26): Error: cannot take address of `scope` variable `x` since `scope` applies to first indirection only
-fail_compilation/test20245.d(32): Error: reference to local variable `x` assigned to non-scope parameter `ptr`
+fail_compilation/test20245.d(32): Error: reference to local variable `x` assigned to non-scope parameter `ptr` calling `escape`
fail_compilation/test20245.d(33): Error: copying `&x` into allocated memory escapes a reference to parameter `x`
fail_compilation/test20245.d(49): Error: reference to local variable `price` assigned to non-scope `this.minPrice`
-fail_compilation/test20245.d(68): Error: reference to local variable `this` assigned to non-scope parameter `msg`
-fail_compilation/test20245.d(88): Error: reference to local variable `this` assigned to non-scope parameter `content`
+fail_compilation/test20245.d(68): Error: reference to local variable `this` assigned to non-scope parameter `msg` calling `this`
+fail_compilation/test20245.d(88): Error: reference to local variable `this` assigned to non-scope parameter `content` calling `listUp`
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/test22818.d b/gcc/testsuite/gdc.test/fail_compilation/test22818.d
index ae96b3b..5759415 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/test22818.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/test22818.d
@@ -1,7 +1,7 @@
/* REQUIRED_ARGS: -preview=dip1000
* TEST_OUTPUT:
---
-fail_compilation/test22818.d(104): Error: scope variable `c` may not be returned
+fail_compilation/test22818.d(104): Error: scope parameter `c` may not be returned
---
*/
diff --git a/gcc/testsuite/gdc.test/fail_compilation/typeerrors.d b/gcc/testsuite/gdc.test/fail_compilation/typeerrors.d
index 37395d4..9d527b7 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/typeerrors.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/typeerrors.d
@@ -2,7 +2,7 @@
TEST_OUTPUT:
---
fail_compilation/typeerrors.d(32): Deprecation: `scope` as a type constraint is deprecated. Use `scope` at the usage site.
-fail_compilation/typeerrors.d(37): Error: tuple index 4 exceeds 4
+fail_compilation/typeerrors.d(37): Error: tuple index `4` out of bounds `[0 .. 4]`
fail_compilation/typeerrors.d(39): Error: variable `x` cannot be read at compile time
fail_compilation/typeerrors.d(40): Error: cannot have array of `void()`
fail_compilation/typeerrors.d(41): Error: cannot have array of scope `typeerrors.C`
diff --git a/gcc/testsuite/gdc.test/fail_compilation/udaparams.d b/gcc/testsuite/gdc.test/fail_compilation/udaparams.d
index 5d0390f..ec47967 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/udaparams.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/udaparams.d
@@ -12,8 +12,8 @@ fail_compilation/udaparams.d(40): Error: `@safe` attribute for function paramete
fail_compilation/udaparams.d(43): Error: `@system` attribute for function parameter is not supported
fail_compilation/udaparams.d(44): Error: `@trusted` attribute for function parameter is not supported
fail_compilation/udaparams.d(45): Error: `@nogc` attribute for function parameter is not supported
-fail_compilation/udaparams.d(51): Error: cannot put a storage-class in an alias declaration.
-fail_compilation/udaparams.d(52): Error: cannot put a storage-class in an alias declaration.
+fail_compilation/udaparams.d(51): Error: cannot put a storage-class in an `alias` declaration.
+fail_compilation/udaparams.d(52): Error: cannot put a storage-class in an `alias` declaration.
fail_compilation/udaparams.d(53): Error: semicolon expected to close `alias` declaration
fail_compilation/udaparams.d(53): Error: declaration expected, not `=>`
fail_compilation/udaparams.d(54): Error: semicolon expected to close `alias` declaration
diff --git a/gcc/testsuite/gdc.test/fail_compilation/udatypes.d b/gcc/testsuite/gdc.test/fail_compilation/udatypes.d
new file mode 100644
index 0000000..a7f2bfc
--- /dev/null
+++ b/gcc/testsuite/gdc.test/fail_compilation/udatypes.d
@@ -0,0 +1,8 @@
+/*
+TEST_OUTPUT:
+---
+fail_compilation/udatypes.d(8): Error: user-defined attributes not allowed for `alias` declarations
+---
+*/
+
+alias c_typedef = extern(C) @(1) void* function(size_t);
diff --git a/gcc/testsuite/gdc.test/runnable/ice10086b.d b/gcc/testsuite/gdc.test/runnable/ice10086b.d
index abb6f78..910c5c4 100644
--- a/gcc/testsuite/gdc.test/runnable/ice10086b.d
+++ b/gcc/testsuite/gdc.test/runnable/ice10086b.d
@@ -5,3 +5,53 @@ import imports.ice10086y;
import imports.ice10086x;
void main() { test(); }
+
+static if (0)
+{
+/* this is a reduced one-file version that triggers a seg fault
+because the use of OPframeptr gets inlined, and the offests
+to it are not updated.
+Compile with: -O -inline
+*/
+
+pragma(inline, false)
+auto bind(alias f, bindValues...)()
+{
+ pragma(inline, false)
+ auto bind(Types...)(Types values)
+ {
+ return f(bindValues, values);
+ }
+ return bind();
+}
+
+
+struct SS
+{
+ int a1 = 123;
+}
+
+pragma(inline, false)
+@safe auto ff(SS rr)
+{
+ return rr;
+}
+
+// pragma(inline, false)
+@safe auto gg(SS ss) // this getting inlined triggers the problem
+{
+ return bind!(ff, ss);
+}
+
+pragma(inline, false)
+void test()
+{
+ SS s1;
+
+ auto zb = bind!(gg, s1)();
+ assert(zb.a1 == 123);
+}
+
+
+void main() { test(); }
+}
diff --git a/gcc/testsuite/gdc.test/runnable/inline3.d b/gcc/testsuite/gdc.test/runnable/inline3.d
new file mode 100644
index 0000000..01af5c8
--- /dev/null
+++ b/gcc/testsuite/gdc.test/runnable/inline3.d
@@ -0,0 +1,44 @@
+// REQUIRED_ARGS: -inline -O
+
+// Test operator overloading
+
+extern (C) int printf(const(char*) fmt, ...);
+
+struct Tuple6798(T...)
+{
+ T field;
+ alias field this;
+
+ bool opEquals(Tuple6798 rxx)
+ {
+ foreach (i, _; T)
+ {
+ if (!__equals(this[i], rxx[i]))
+ assert(0);
+ //return false;
+ }
+ return true;
+ }
+}
+
+auto tuple(T...)(T args)
+{
+ return Tuple6798!T(args);
+}
+
+int zzzz()
+{
+ if (!__equals("mno", "mno"))
+ assert(0);
+
+ assert(tuple("abcd", "x") == tuple("abcd", "x"));
+ return 0;
+}
+
+int main()
+{
+ zzzz();
+
+ printf("Success\n");
+ return 0;
+}
diff --git a/gcc/testsuite/gdc.test/runnable/staticforeach.d b/gcc/testsuite/gdc.test/runnable/staticforeach.d
index bf6dc98..6a9ac5d 100644
--- a/gcc/testsuite/gdc.test/runnable/staticforeach.d
+++ b/gcc/testsuite/gdc.test/runnable/staticforeach.d
@@ -39,7 +39,36 @@ void test19479()
}
}
+/**********************************/
+// https://issues.dlang.org/show_bug.cgi?id=23192
+
+alias AliasSeq(Args...) = Args;
+
+struct S23192
+{
+ int x;
+ int y;
+
+ int fun()
+ {
+ static foreach (sym; AliasSeq!(S23192.x))
+ int i = sym;
+
+ static foreach (sym; AliasSeq!(this.y))
+ int j = sym;
+
+ return i + j;
+ }
+}
+
+void test23192()
+{
+ assert(S23192(1, 2).fun() == 3);
+ static assert(S23192(1, 2).fun() == 3);
+}
+
void main()
{
test19479();
+ test23192();
}
diff --git a/gcc/testsuite/gdc.test/runnable/test23010.d b/gcc/testsuite/gdc.test/runnable/test23010.d
new file mode 100644
index 0000000..1cbacfc
--- /dev/null
+++ b/gcc/testsuite/gdc.test/runnable/test23010.d
@@ -0,0 +1,43 @@
+// https://issues.dlang.org/show_bug.cgi?id=23010
+
+alias AliasSeq(T...) = T;
+
+mixin template faz() {
+ alias T = AliasSeq!(int);
+ T bar = 12345;
+
+ void write1() {
+ assert(bar[0] == 12345);
+ }
+
+ AliasSeq!(string, float) foo = AliasSeq!("qwerty", 1.25f);
+
+ void write2() {
+ assert(foo == AliasSeq!("qwerty", 1.25f));
+ foo = AliasSeq!("asdfg", 2.5f); // this even crashed before
+ assert(foo == AliasSeq!("asdfg", 2.5f));
+ }
+}
+
+void main() {
+ mixin faz!();
+ write1;
+ write2;
+ fun;
+}
+
+// Testing static symbol generation ('toobj.d' changes)
+
+static AliasSeq!(int, string) tup;
+
+void fun()
+{
+ auto v = tup;
+
+ struct S(T...) {
+ static T b;
+ }
+
+ alias T = S!(int, float);
+ auto p = T.b;
+}
diff --git a/gcc/testsuite/gdc.test/runnable_cxx/cppa.d b/gcc/testsuite/gdc.test/runnable_cxx/cppa.d
index e315889..cd91dd5 100644
--- a/gcc/testsuite/gdc.test/runnable_cxx/cppa.d
+++ b/gcc/testsuite/gdc.test/runnable_cxx/cppa.d
@@ -1,3 +1,4 @@
+// REQUIRED_ARGS: -preview=in
// PERMUTE_ARGS: -g
// EXTRA_CPP_SOURCES: cppb.cpp
// EXTRA_FILES: extra-files/cppb.h
@@ -1637,7 +1638,13 @@ void test19134()
}
// https://issues.dlang.org/show_bug.cgi?id=18955
-alias std_string = std.basic_string!(char);
+version (linux)
+ alias std_string = std.basic_string!(char);
+else
+{
+ import core.stdcpp.string : core_basic_string = basic_string;
+ alias std_string = core_basic_string!(char);
+}
extern(C++) void callback18955(ref const(std_string) str)
{
@@ -1646,6 +1653,16 @@ extern(C++) void test18955();
/****************************************/
+extern(C++) void testPreviewIn();
+
+extern(C++) void previewInFunction(in int a, in std_string b, ref const(std_string) c)
+{
+ assert(a == 42);
+ assert(&b is &c);
+}
+
+/****************************************/
+
void main()
{
test1();
@@ -1695,6 +1712,7 @@ void main()
test18966();
test19134();
test18955();
+ testPreviewIn();
printf("Success\n");
}
diff --git a/gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp b/gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp
index 4fa87ef..83667cb 100644
--- a/gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp
+++ b/gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp
@@ -4,30 +4,8 @@
#include <exception>
#include <cstdarg>
-#if _WIN32 // otherwise defined in C header files!
-// https://issues.dlang.org/show_bug.cgi?id=18955
-namespace std
-{
- template<typename Char>
- struct char_traits
- {
- };
- template<typename Char>
- class allocator
- {
- };
- template<typename Char, typename Traits, typename Alloc>
- class basic_string
- {
- };
- typedef basic_string<char, char_traits<char>, allocator<char> > string;
-}
-#else // if POSIX
-
#include <string>
-#endif // _WIN32
-
#include "cppb.h"
/**************************************/
@@ -936,3 +914,11 @@ void test18955()
callback18955(s);
#endif
}
+
+void previewInFunction(const int& a, const std::string& b, const std::string& c);
+
+void testPreviewIn()
+{
+ std::string s = "Hello World";
+ previewInFunction(42, s, s);
+}
diff --git a/gcc/testsuite/gfortran.dg/check_bits_3.f90 b/gcc/testsuite/gfortran.dg/check_bits_3.f90
new file mode 100644
index 0000000..3018e69
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/check_bits_3.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! PR fortran/105986
+! Contributed by G.Steinmetz
+
+program p
+ integer :: i
+ logical, parameter :: a(*) = [(btest(8_4,i), i=-1,-1)] ! { dg-error "nonnegative" }
+ integer, parameter :: b(*) = [(ibclr(8_4,i), i=-1,-1)] ! { dg-error "nonnegative" }
+ integer, parameter :: c(*) = [(ibset(8_4,i), i=-1,-1)] ! { dg-error "nonnegative" }
+ logical, parameter :: d(*) = [(btest(8_1,i), i= 8, 8)] ! { dg-error "must be less" }
+ integer, parameter :: e(*) = [(ibclr(8_2,i), i=16,16)] ! { dg-error "must be less" }
+ integer, parameter :: f(*) = [(ibset(8_4,i), i=32,32)] ! { dg-error "must be less" }
+ integer, parameter :: g(*) = [(ibits(8_4,i,1),i=-1,-1)] ! { dg-error "nonnegative" }
+ integer, parameter :: h(*) = [(ibits(8_4,1,i),i=-1,-1)] ! { dg-error "nonnegative" }
+ integer, parameter :: j(*) = [(ibits(8_4,i,i),i=32,32)] ! { dg-error "must be less" }
+end
diff --git a/gcc/testsuite/gfortran.dg/class_58.f90 b/gcc/testsuite/gfortran.dg/class_58.f90
index 20b601a..fceb575 100644
--- a/gcc/testsuite/gfortran.dg/class_58.f90
+++ b/gcc/testsuite/gfortran.dg/class_58.f90
@@ -9,5 +9,5 @@ subroutine s
end type
class(t), parameter :: x = t() ! { dg-error "cannot have the PARAMETER attribute" }
class(t), parameter :: y = x ! { dg-error "cannot have the PARAMETER attribute" }
- class(t) :: z = x ! { dg-error "must be dummy, allocatable or pointer" }
+ class(t) :: z = t() ! { dg-error "must be dummy, allocatable or pointer" }
end
diff --git a/gcc/testsuite/gfortran.dg/class_73.f90 b/gcc/testsuite/gfortran.dg/class_73.f90
new file mode 100644
index 0000000..c11ee38
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_73.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! Error recovery on invalid CLASS(), PARAMETER declarations
+! PR fortran/103137
+! PR fortran/103138
+! PR fortran/103693
+! PR fortran/105243
+! Contributed by G.Steinmetz
+
+program p
+ type t
+ character(3) :: c = '(a)'
+ end type
+ class(t), parameter :: x = 1. ! { dg-error "PARAMETER attribute" }
+ class(*), parameter :: y = t() ! { dg-error "PARAMETER attribute" }
+ class(*), parameter :: z = 1 ! { dg-error "PARAMETER attribute" }
+ print x%c ! { dg-error "Syntax error" }
+end
diff --git a/gcc/testsuite/gfortran.dg/extends_type_of_4.f90 b/gcc/testsuite/gfortran.dg/extends_type_of_4.f90
new file mode 100644
index 0000000..6437332
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/extends_type_of_4.f90
@@ -0,0 +1,20 @@
+! { dg-do compile }
+! PR fortran/106121 - ICE in gfc_simplify_extends_type_of
+! Contributed by G.Steinmetz
+
+program p
+ type t
+ end type
+ type(t) :: x
+ class(t) :: y ! { dg-error "dummy, allocatable or pointer" }
+ print *, extends_type_of (x, y)
+end
+
+subroutine s
+ type t
+ integer :: i
+ end type
+ type(t) :: x
+ class(t) :: y ! { dg-error "dummy, allocatable or pointer" }
+ stop extends_type_of (x, y) ! { dg-error "STOP code" }
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-2.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-2.f90
new file mode 100644
index 0000000..05f007f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-2.f90
@@ -0,0 +1,112 @@
+! { dg-do compile }
+! { dg-options "-fopenmp -fdump-tree-original" }
+
+module m
+ implicit none (type, external)
+
+ integer i
+
+ interface
+ integer function bar (x, y, z)
+ integer, value :: x, y, z
+ !$omp declare simd linear (x : val, step (1)) linear (y : step (2))
+ end
+
+ integer function baz (x, y, z)
+ integer, value :: x, y, z
+ !$omp declare simd linear (x : step (1), val)
+ end
+
+ integer function qux (x, val)
+ integer, value :: x, val
+ !$omp declare simd linear (val (x) : val) uniform (val)
+ end
+
+ integer function corge (x, val)
+ integer, value :: x, val
+ !$omp declare simd linear (x : val, step (val)) uniform (val)
+ end
+
+ integer function grault (x)
+ integer, value :: x
+ !$omp declare simd linear (x : val)
+ end
+
+ integer function step (x)
+ integer, value :: x
+ end
+ end interface
+
+contains
+
+subroutine foo (x,y)
+ integer :: x, y
+ integer :: val
+
+ val = 1
+
+ !$omp simd linear (i: step (3))
+ do i = 0, 32, 3
+ end do
+
+ !$omp simd linear (i: val, step (3))
+ do i = 0, 32, 3
+ end do
+
+ !$omp simd linear (x: step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp simd linear (x: step (y + 1), val)
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do linear (x: step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do linear (x: val, step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (i: step (3))
+ do i = 0, 32, 3
+ end do
+
+ !$omp parallel do simd linear (i: step (3), val)
+ do i = 0, 32, 3
+ end do
+
+ !$omp parallel do simd linear (x: step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (x: val, step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (i: val + 0)
+ do i = 0, 9
+ end do
+
+ !$omp parallel do simd linear (i: step (1) * 1)
+ do i = 0, 9
+ end do
+end
+end module
+
+! { dg-final { scan-tree-dump-times "#pragma omp parallel" 8 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp for nowait" 6 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp for linear\\(x:D\\.\[0-9\]+\\) nowait" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp for linear\\(x:val,step\\(D\\.\[0-9\]+\\)\\) nowait" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(count\\.\[0-9\]:1\\) linear\\(i:3\\)" 2 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(count\\.\[0-9\]:1\\) linear\\(i:val,step\\(3\\)\\)" 2 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) linear\\(x:D\\.\[0-9\]+\\)" 2 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) linear\\(x:val,step\\(D\\.\[0-9\]+\\)\\)" 2 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:D\\.\[0-9\]+\\)" 2 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-3.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-3.f90
new file mode 100644
index 0000000..dee87b1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-3.f90
@@ -0,0 +1,39 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module m2
+ implicit none (type, external)
+
+ integer :: val
+
+contains
+integer function step (x)
+ integer, value :: x
+end
+subroutine foo(x)
+ integer, value :: x
+ !$omp declare simd linear (val (x) : step (1)) ! { dg-error "requires a constant integer linear-step expression or dummy argument" }
+end
+end module m2
+
+
+module m
+ implicit none (type, external)
+
+ integer :: val
+
+contains
+integer function step (x)
+ integer, value :: x
+ !$omp declare simd linear (val (x) : step (1)) ! { dg-error "Failed to match clause" }
+end
+
+integer function bar (x, y, z)
+ integer, value :: x, y, z
+ !$omp declare simd linear (val (x) : val) ! { dg-error "requires a constant integer linear-step expression or dummy argument" }
+end
+
+integer function baz (x, y, z)
+ integer, value :: x, y, z
+end
+end module m
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-4.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-4.f90
new file mode 100644
index 0000000..ac532f8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-4.f90
@@ -0,0 +1,102 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module m
+implicit none
+
+integer :: i
+
+interface
+ integer function bar (x, y, z)
+ integer :: x, y
+ integer, value :: z
+ !$omp declare simd linear (x : ref, step (1)) linear (y : step (2), uval)
+ end
+
+ integer function baz (x, y, z)
+ integer :: x
+ integer, value :: y, z
+ !$omp declare simd linear (x : step (1), uval)
+ end
+
+ integer function qux (x, ref)
+ integer :: x
+ integer, value :: ref
+ !$omp declare simd linear (ref (x) : ref) uniform (ref)
+ end
+
+ integer function corge (x, ref)
+ integer :: x
+ integer, value :: ref
+ !$omp declare simd linear (x : ref, step (ref)) uniform (ref)
+ end
+
+ integer function grault (x)
+ integer :: x
+ !$omp declare simd linear (x : ref)
+ end
+
+ integer function waldo (x)
+ integer :: x
+ !$omp declare simd linear (x : uval)
+ end
+end interface
+
+contains
+
+integer function step (x)
+ integer, value :: x
+ step = x
+end
+
+subroutine foo (x, y)
+ integer :: x, y
+ !$omp simd linear (x: step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp simd linear (x: val, step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do linear (x: step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do linear (x: step (y + 1), val)
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (x: step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (x: val, step (y + 1))
+ do i = 0, 9
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (x: step (1) + 0)
+ do i = 0, 9
+ x = x + step (1) + 0
+ end do
+
+ block
+ integer, parameter :: ref = 1, uval = 2
+ !$omp parallel do simd linear (x: ref + 0)
+ do i = 0, 9
+ x = x + ref + 0
+ end do
+
+ !$omp parallel do simd linear (x: uval * 1)
+ do i = 0, 9
+ x = x + uval
+ end do
+ end block
+end
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-5.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-5.f90
new file mode 100644
index 0000000..b00492d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-5.f90
@@ -0,0 +1,43 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module m
+implicit none
+integer :: i
+
+contains
+
+subroutine foo (x, y)
+ integer :: x, y
+
+ !$omp simd linear (x: step (y + 1), ref) ! { dg-error "LINEAR clause modifier other than VAL used on DO or SIMD construct" }
+ do i = 0, 10
+ x = x + y + 1
+ end do
+
+ !$omp simd linear (x: uval, step (y + 1)) ! { dg-error "LINEAR clause modifier other than VAL used on DO or SIMD construct" }
+ do i = 0, 10
+ x = x + y + 1
+ end do
+
+ !$omp parallel do linear (x: ref, step (y + 1)) ! { dg-error "LINEAR clause modifier other than VAL used on DO or SIMD construct" }
+ do i = 0, 10
+ x = x + y + 1
+ end do
+
+ !$omp parallel do linear (x: step (y + 1), uval) ! { dg-error "LINEAR clause modifier other than VAL used on DO or SIMD construct" }
+ do i = 0, 10
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (x: step (y + 1), ref) ! { dg-error "LINEAR clause modifier other than VAL used on DO or SIMD construct" }
+ do i = 0, 10
+ x = x + y + 1
+ end do
+
+ !$omp parallel do simd linear (x: uval, step (y + 1)) ! { dg-error "LINEAR clause modifier other than VAL used on DO or SIMD construct" }
+ do i = 0, 10
+ x = x + y + 1
+ end do
+end
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-6.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-6.f90
new file mode 100644
index 0000000..57693ba
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-6.f90
@@ -0,0 +1,54 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module m
+implicit none
+integer, parameter :: val = 1
+integer, parameter :: ref = 2
+integer, parameter :: uval = 3
+
+interface
+ integer function foo (x, y, z)
+ import
+ implicit none
+ integer, value :: x
+ integer :: y, z
+ !$omp declare simd linear (val (x) : step (1)) linear (ref (y) : step (2)) linear (uval (z) : step (3))
+
+! STEP is a function - thus:
+! { dg-error "'x' in LINEAR clause at .1. requires a constant integer linear-step expression or dummy argument specified in UNIFORM clause" "" { target *-*-* } .-3 }
+! { dg-error "'y' in LINEAR clause at .1. requires a constant integer linear-step expression or dummy argument specified in UNIFORM clause" "" { target *-*-* } .-4 }
+! { dg-error "'z' in LINEAR clause at .1. requires a constant integer linear-step expression or dummy argument specified in UNIFORM clause" "" { target *-*-* } .-5 }
+
+ end
+
+ integer function bar (x, y, z)
+ import
+ implicit none
+ integer, value :: x
+ integer :: y, z
+ !$omp declare simd linear (val (x) : val) linear (ref (y) : ref) linear (uval (z) : uval)
+ end
+
+ integer function baz (x, y, z)
+ import
+ implicit none
+ integer, value :: x
+ integer :: y, z
+ !$omp declare simd linear (val (x) : ref) linear (ref (y) : uval) linear (uval (z) : val)
+ end
+
+ integer function qux (x, y, z)
+ import
+ implicit none
+ integer, value :: x
+ integer :: y, z
+ !$omp declare simd linear (val (x) : uval) linear (ref (y) : val) linear (uval (z) : ref)
+ end
+end interface
+contains
+ integer function step (x)
+ integer, value :: x
+ step = x
+ end
+end module
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-7.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-7.f90
new file mode 100644
index 0000000..5e763a9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-7.f90
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module m
+ implicit none (type, external)
+
+ integer i
+
+ interface
+ integer function s1 (x, y, z)
+ integer, value :: x, y, z
+ !$omp declare simd linear (x : val, step (1), val) ! { dg-error "Multiple 'linear' modifiers specified" }
+ end
+
+ integer function s2 (x, y, z)
+ integer, value :: x, y, z
+ !$omp declare simd linear (x : val, step (1), step(2)) ! { dg-error "Multiple 'step' modifiers specified" }
+ end
+
+ integer function s3 (x, y, z)
+ integer, value :: x, y, z
+ !$omp declare simd linear (x : val, ref, step(2)) ! { dg-error "Multiple 'linear' modifiers specified" }
+ end
+
+ end interface
+
+end module
diff --git a/gcc/testsuite/gfortran.dg/gomp/linear-8.f90 b/gcc/testsuite/gfortran.dg/gomp/linear-8.f90
new file mode 100644
index 0000000..d23dd84
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/linear-8.f90
@@ -0,0 +1,44 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+module m
+ implicit none (type, external)
+
+ interface
+ integer function step (x, y, z)
+ integer :: x, y, z
+ end function step
+ end interface
+
+contains
+
+integer function foo (x)
+ integer, value :: x
+ integer :: i
+ !$omp parallel do linear (x : step (step (1, 2, 3)))
+ do i = 0, 63
+ x = x + 6
+ end do
+ foo = x
+end
+
+integer function bar (x)
+ integer, value :: x
+ integer :: i
+ !$omp parallel do linear (x : step (1, 2, 3)) ! { dg-error "40: Invalid character in name" }
+ do i = 0, 63
+ x = x + 6
+ end do
+ bar = x
+end
+
+integer function bar2 (x)
+ integer, value :: x
+ integer :: i
+ !$omp parallel do linear (x : step (1, 2, 3) * 1)
+ do i = 0, 63
+ x = x + 6
+ end do
+ bar2 = x
+end
+end module
diff --git a/gcc/testsuite/gfortran.dg/gomp/requires-8.f90 b/gcc/testsuite/gfortran.dg/gomp/requires-8.f90
index e84d609..583c5a5 100644
--- a/gcc/testsuite/gfortran.dg/gomp/requires-8.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/requires-8.f90
@@ -1,3 +1,7 @@
+module m0
+ integer :: x
+end module m0
+
module m ! { dg-error "has OpenMP device constructs/routines but does not set !.OMP REQUIRES UNIFIED_SHARED_MEMORY but other program units do" }
!$omp requires reverse_offload
contains
@@ -13,10 +17,14 @@ contains
end subroutine foo
end module m
-subroutine bar ! { dg-error "has OpenMP device constructs/routines but does not set !.OMP REQUIRES REVERSE_OFFLOAD but other program units do" }
+subroutine bar
!use m
- !$omp requires unified_shared_memory
+ !$omp requires unified_shared_memory ! Possibly OK - needs OpenMP Lang Spec clarification (-> #3240)
!$omp declare target
end subroutine bar
-! { dg-prune-output "not yet supported" }
+subroutine foobar ! { dg-error "has OpenMP device constructs/routines but does not set !.OMP REQUIRES REVERSE_OFFLOAD but other program units do" }
+ use m0
+ !$omp requires unified_shared_memory
+ !$omp target enter data map(to:x)
+end subroutine foobar
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-data-1.f90 b/gcc/testsuite/gfortran.dg/gomp/target-data-1.f90
new file mode 100644
index 0000000..0f086f5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/target-data-1.f90
@@ -0,0 +1,17 @@
+! { dg-additional-options "-fdump-tree-original" }
+!
+! In OpenMP 5.2 permits tofrom for enter/exit data
+! in the FE, it is already converted to 'to' and 'from', respectively.
+module m
+ integer :: x, y, z
+contains
+subroutine copyin
+ !$omp target enter data map(x) map(tofrom: y) map(always, tofrom: z)
+end
+subroutine copyout
+ !$omp target exit data map(x) map(tofrom: y) map(always, tofrom: z)
+end
+end
+
+! { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(to:x\\) map\\(to:y\\) map\\(always,to:z\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(from:x\\) map\\(from:y\\) map\\(always,from:z\\)" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-data-2.f90 b/gcc/testsuite/gfortran.dg/gomp/target-data-2.f90
new file mode 100644
index 0000000..71ee1eb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/target-data-2.f90
@@ -0,0 +1,14 @@
+! In OpenMP 5.2 permits tofrom for enter/exit data
+! in the FE, it is already converted to 'to' and 'from', respectively.
+module m
+ integer :: y, z
+contains
+subroutine copyin
+ !$omp target enter data map(from: y) ! { dg-error "TARGET ENTER DATA with map-type other than TO, TOFROM or ALLOC on MAP clause" }
+ !$omp target enter data map(always, from: z) ! { dg-error "TARGET ENTER DATA with map-type other than TO, TOFROM or ALLOC on MAP clause" }
+end
+subroutine copyout
+ !$omp target exit data map(to: y) ! { dg-error "TARGET EXIT DATA with map-type other than FROM, TOFROM, RELEASE, or DELETE on MAP clause" }
+ !$omp target exit data map(always, to: z) ! { dg-error "TARGET EXIT DATA with map-type other than FROM, TOFROM, RELEASE, or DELETE on MAP clause" }
+end
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2.f90 b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2.f90
index 117a1d0..230c690 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2.f90
@@ -4,19 +4,16 @@ implicit none
integer :: a, b, c
-!$omp requires reverse_offload ! { dg-error "Sorry, 'reverse_offload' clause at \\(1\\) on REQUIRES directive is not yet supported" }
+!$omp requires reverse_offload
-! The following test case is marked with 'xfail' because a previous 'sorry' from
-! 'reverse_offload' suppresses the 'sorry' for 'ancestor'.
-
-!$omp target device (ancestor: 1) ! { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } }
+!$omp target device (ancestor: 1)
!$omp end target
-!$omp target device (ancestor : a) ! { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } }
+!$omp target device (ancestor : a)
!$omp end target
-!$omp target device (ancestor : a + 1) ! { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } }
+!$omp target device (ancestor : a + 1)
!$omp end target
@@ -32,61 +29,4 @@ integer :: a, b, c
!$omp target device (42)
!$omp end target
-
-! Ensure that no OpenMP constructs appear inside target regions with 'ancestor'.
-! The following test case is marked with 'xfail' because a previous 'sorry' from
-! 'reverse_offload' suppresses the 'sorry' for 'ancestor'.
-
-!$omp target device (ancestor: 1)
- !$omp teams ! { dg-error "" "OpenMP constructs are not allowed in target region with 'ancestor'" { xfail *-*-* } }
- !$omp end teams
-!$omp end target
-
-!$omp target device (device_num: 1)
- !$omp teams
- !$omp end teams
-!$omp end target
-
-!$omp target device (1)
- !$omp teams
- !$omp end teams
-!$omp end target
-
-
-! Ensure that with 'ancestor' only the 'device', 'firstprivate', 'private',
-! 'defaultmap', and 'map' clauses appear on the construct.
-! The following test case is marked with 'xfail' because a previous 'sorry' from
-! 'reverse_offload' suppresses the 'sorry' for 'ancestor'.
-
-!$omp target nowait device (ancestor: 1) ! { dg-error "" "with 'ancestor', only the 'device', 'firstprivate', 'private', 'defaultmap', and 'map' clauses may appear on the construct" { xfail *-*-* } }
-!$omp end target
-
-!$omp target device (ancestor: 1) nowait ! { dg-error "" "with 'ancestor', only the 'device', 'firstprivate', 'private', 'defaultmap', and 'map' clauses may appear on the construct" { xfail *-*-* } }
-!$omp end target
-
-!$omp target nowait device (device_num: 1)
-!$omp end target
-
-!$omp target nowait device (1)
-!$omp end target
-
-!$omp target device (ancestor: 1) firstprivate (a) private (b) defaultmap (none) map (c)
-!$omp end target
-
-
-! Ensure that 'ancestor' is only used with 'target' constructs (not with
-! 'target data', 'target update' etc.).
-! The following test case is marked with 'xfail' because a previous 'sorry' from
-! 'reverse_offload' suppresses the 'sorry' for 'ancestor'.
-
-!$omp target data map (a) device (ancestor: 1) ! { dg-error "" "'device' clause with 'ancestor' is only allowed on 'target' construct" { xfail *-*-* } }
-!$omp end target data
-
-!$omp target enter data map (to: a) device (ancestor: 1) ! { dg-error "" "'device' clause with 'ancestor' is only allowed on 'target' construct" { xfail *-*-* } }
-!$omp target exit data map (from: a) device (ancestor: 1) ! { dg-error "" "'device' clause with 'ancestor' is only allowed on 'target' construct" { xfail *-*-* } }
-
-!$omp target update to (a) device (ancestor: 1) ! { dg-error "'device' clause with 'ancestor' is only allowed on 'target' construct" "" { xfail *-*-* } }
-! { dg-error "with 'ancestor', only the 'device', 'firstprivate', 'private', 'defaultmap', and 'map' clauses may appear on the construct" "" { xfail *-*-* } .-1 }
-
-
-end \ No newline at end of file
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2a.f90 b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2a.f90
new file mode 100644
index 0000000..feb76fe
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-2a.f90
@@ -0,0 +1,80 @@
+! { dg-do compile }
+
+implicit none
+
+integer :: a, b, c
+
+!$omp requires reverse_offload
+
+!$omp target device (ancestor: 1)
+!$omp end target
+
+!$omp target device (ancestor : a)
+!$omp end target
+
+!$omp target device (ancestor : a + 1)
+!$omp end target
+
+
+!$omp target device (device_num:42)
+!$omp end target
+
+!$omp target device (42)
+!$omp end target
+
+
+! Ensure that no OpenMP constructs appear inside target regions with 'ancestor'.
+
+!$omp target device (ancestor: 1)
+ !$omp teams ! { dg-error "OpenMP constructs are not allowed in target region with 'ancestor'" }
+ !$omp end teams
+!$omp end target
+
+!$omp target device (device_num: 1)
+ !$omp teams
+ !$omp end teams
+!$omp end target
+
+!$omp target device (1)
+ !$omp teams
+ !$omp end teams
+!$omp end target
+
+
+! Ensure that with 'ancestor' only the 'device', 'firstprivate', 'private',
+! 'defaultmap', and 'map' clauses appear on the construct.
+
+!$omp target nowait device (ancestor: 1) ! { dg-error "with 'ancestor', only the 'device', 'firstprivate', 'private', 'defaultmap', and 'map' clauses may appear on the construct" }
+!$omp end target
+
+!$omp target device (ancestor: 1) nowait ! { dg-error "with 'ancestor', only the 'device', 'firstprivate', 'private', 'defaultmap', and 'map' clauses may appear on the construct" }
+!$omp end target
+
+!$omp target nowait device (device_num: 1)
+!$omp end target
+
+!$omp target nowait device (1)
+!$omp end target
+
+!$omp target device (ancestor: 1) firstprivate (a) private (b) defaultmap (none) map (c)
+!$omp end target
+
+
+! Ensure that 'ancestor' is only used with 'target' constructs (not with
+! 'target data', 'target update' etc.).
+! The following test case is marked with 'xfail' because a previous 'sorry' from
+! 'reverse_offload' suppresses the 'sorry' for 'ancestor'.
+
+!$omp target data map (a) device (ancestor: 1) ! { dg-error "'device' clause with 'ancestor' is only allowed on 'target' construct" }
+!$omp end target data
+
+!$omp target enter data map (to: a) device (ancestor: 1) ! { dg-error "'device' clause with 'ancestor' is only allowed on 'target' construct" }
+!$omp target exit data map (from: a) device (ancestor: 1) ! { dg-error "'device' clause with 'ancestor' is only allowed on 'target' construct" }
+
+!$omp target update to (a) device (ancestor: 1) ! { dg-error "'device' clause with 'ancestor' is only allowed on 'target' construct" }
+
+!$omp target device (ancestor: 1) if(.false.)
+! { dg-error "with 'ancestor', only the 'device', 'firstprivate', 'private', 'defaultmap', and 'map' clauses may appear on the construct" "" { target *-*-* } .-1 }
+!$omp end target
+
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-3.f90 b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-3.f90
index f1145bd..e8975e6 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-3.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-3.f90
@@ -16,10 +16,10 @@ subroutine f1 ()
implicit none
integer :: n
- !$omp requires reverse_offload ! { dg-error "Sorry, 'reverse_offload' clause at \\(1\\) on REQUIRES directive is not yet supported" }
+ !$omp requires reverse_offload
!$omp target device (ancestor : 1)
- n = omp_get_thread_num () ! { dg-error "" "OpenMP runtime API call 'omp_get_thread_num' in a region with 'device\\(ancestor\\)' clause" { xfail *-*-* } }
+ n = omp_get_thread_num () ! { dg-error "OpenMP runtime API call 'omp_get_thread_num' in a region with 'device\\(ancestor\\)' clause" }
!$omp end target
!$omp target device (device_num : 1)
@@ -30,4 +30,4 @@ subroutine f1 ()
n = omp_get_thread_num ()
!$omp end target
-end \ No newline at end of file
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90 b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90
index 63872fa..ab56e2d 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90
@@ -4,11 +4,11 @@
! Test to ensure that device-modifier 'ancestor' is parsed correctly in
! device clauses.
-!$omp requires reverse_offload ! { dg-error "Sorry, 'reverse_offload' clause at \\(1\\) on REQUIRES directive is not yet supported" }
+!$omp requires reverse_offload
-!$omp target device (ancestor : 1) ! { dg-message "" "sorry, unimplemented: 'ancestor' not yet supported" { xfail *-*-* } }
+!$omp target device (ancestor : 1) ! { dg-message "sorry, unimplemented: 'ancestor' not yet supported" }
!$omp end target
end
-! TODO: dg-final { scan-tree-dump-times "pragma omp target \[^\n\r)]*device\\(ancestor:1\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "pragma omp target \[^\n\r)]*device\\(ancestor:1\\)" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-5.f90 b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-5.f90
index 06a11eb..ca8d4b2 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-5.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-5.f90
@@ -6,7 +6,7 @@
!
module m
- !$omp requires reverse_offload ! { dg-error "REQUIRES directive is not yet supported" }
+ !$omp requires reverse_offload
contains
subroutine foo()
!$omp target device(ancestor:1)
@@ -17,7 +17,7 @@ contains
block
block
block
- !$omp target device(ancestor:1)
+ !$omp target device(ancestor:1) ! { dg-message "sorry, unimplemented: 'ancestor' not yet supported" }
!$omp end target
end block
end block
@@ -26,7 +26,7 @@ contains
end module m
subroutine foo()
- !$omp requires reverse_offload ! { dg-error "REQUIRES directive is not yet supported" }
+ !$omp requires reverse_offload
block
block
block
@@ -49,7 +49,7 @@ contains
end subroutine foo
program main
- !$omp requires reverse_offload ! { dg-error "REQUIRES directive is not yet supported" }
+ !$omp requires reverse_offload
contains
subroutine foo()
!$omp target device(ancestor:1)
diff --git a/gcc/testsuite/gfortran.dg/index_6.f90 b/gcc/testsuite/gfortran.dg/index_6.f90
new file mode 100644
index 0000000..61d4929
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/index_6.f90
@@ -0,0 +1,31 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+! PR fortran/105691 - Incorrect calculation of INDEX(str1,str2) at compile time
+
+program main
+ implicit none
+ integer :: i
+ character(*), parameter :: s1 = "fortran.f90"
+ character(*), parameter :: s2 = "fortran"
+ character(*), parameter :: s3 = s2 // "*"
+ integer, parameter :: i0 = index(s1, s2)
+ integer, parameter :: i1 = index(s1, s2, back= .true.)
+ integer, parameter :: i2(*) = index(s1, s2, back=[.true.,.false.])
+ integer, parameter :: i3(*) = index(s1, s2, back=[(i==1, i=1,2)] )
+ integer, parameter :: i4 = index(s1, s3)
+ integer, parameter :: i5 = index(s1, s3, back= .true.)
+ integer, parameter :: i6(*) = index(s1, s3, back=[.true.,.false.])
+ integer, parameter :: i7(*) = index(s1, s3, back=[(i==1, i=1,2)] )
+ integer, parameter :: i8 = index(s1, "f", back= .true.)
+ if ( i0 /= 1 ) stop 1
+ if ( i1 /= 1 ) stop 2
+ if (any (i2 /= 1)) stop 3
+ if (any (i3 /= 1)) stop 4
+ if ( i4 /= 0 ) stop 5
+ if ( i5 /= 0 ) stop 6
+ if (any (i6 /= 0)) stop 7
+ if (any (i7 /= 0)) stop 8
+ if (i8 /= len(s1)-2) stop 9
+end program
+
+! { dg-final { scan-tree-dump-not "_gfortran_stop_numeric" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pr105954.f90 b/gcc/testsuite/gfortran.dg/pr105954.f90
new file mode 100644
index 0000000..89004bf
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr105954.f90
@@ -0,0 +1,26 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+! PR fortran/105954 - ICE in gfc_element_size, at fortran/target-memory.cc:132
+! Contributed by G.Steinmetz
+
+program p
+ use iso_c_binding, only: c_float, c_sizeof
+ implicit none
+ integer, parameter :: n = -99
+ type t
+ real :: b(3,7:n)
+ end type
+ type, bind(c) :: u
+ real(c_float) :: b(3,7:n)
+ end type
+ type(t) :: d
+ type(u) :: e
+ integer, parameter :: k = storage_size(d)
+ integer, parameter :: m = sizeof(d)
+ integer, parameter :: l = c_sizeof(e)
+ if (k /= 0) stop 1
+ if (m /= 0) stop 2
+ if (l /= 0) stop 3
+end
+
+! { dg-final { scan-tree-dump-not "_gfortran_stop_numeric" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pr106226.f b/gcc/testsuite/gfortran.dg/pr106226.f
new file mode 100644
index 0000000..19237bc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr106226.f
@@ -0,0 +1,37 @@
+! { dg-do compile }
+! { dg-options "-O3 -std=legacy" }
+
+ SUBROUTINE EFTORD(DM,CHDINT,L4)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ PARAMETER (MXPT=100, MXFRG=50, MXFGPT=MXPT*MXFRG)
+ DIMENSION DM(*),CHDINT(L4)
+ COMMON /FGRAD / DEF0,DEFT0,TORQ0
+ * ,ATORQ(3,MXFRG)
+ COMMON /CSSTV / CX,CY,CZ
+ * EFBTRM(MXFGPT),EFATRM2(MXFGPT),EFBTRM2(MXFGPT),
+ * EFDIP(3,MXFGPT),EFQAD(6,MXFGPT),
+ * EFOCT(10,MXFGPT),FRGNME(MXFGPT)
+ IF(NROOTS.EQ.5) CALL ROOT5
+ IF(NROOTS.EQ.6) CALL ROOT6
+ IF(NROOTS.GE.7) THEN
+ CALL ABRT
+ END IF
+ DO 403 I = 1,IJ
+ CHDINT(ICC)=CHDINT(ICC)-DUM*DUMY
+ ICC=ICC+1
+ 403 CONTINUE
+ CHDINT(ICC)=CHDINT(ICC)-DUM*DUMY
+ DO 550 J=MINJ,MAX
+ LJ=LOCJ+J
+ IF (LI-LJ) 920,940,940
+ 920 ID = LJ
+ GO TO 960
+ 940 ID = LI
+ 960 NN = (ID*(ID-1))/2+JD
+ DUM = DM(NN)
+ ATORQ(1,INF)=ATORQ(1,INF)-DUM*(CHDINT(ICC+1)*EFDIP(3,IC)
+ $ -CHDINT(ICC+2)*EFDIP(2,IC))
+ ICC=ICC+1
+ ICC=ICC+1
+ 550 CONTINUE
+ END
diff --git a/gcc/testsuite/gfortran.dg/ubsan/pr106062.f90 b/gcc/testsuite/gfortran.dg/ubsan/pr106062.f90
new file mode 100644
index 0000000..879a67e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ubsan/pr106062.f90
@@ -0,0 +1,11 @@
+! PR c++/106062
+! { dg-do compile }
+! { dg-options "-O2 -fsanitize=undefined" }
+
+call test (reshape ((/ 'a', 'b', 'c', 'd' /), (/ 2, 2 /)))
+contains
+ subroutine test (a)
+ character (*), dimension (:, :) :: a
+ if (len (a) .ne. 1) STOP
+ end
+end
diff --git a/gcc/testsuite/gfortran.dg/unpack_vector_1.f90 b/gcc/testsuite/gfortran.dg/unpack_vector_1.f90
new file mode 100644
index 0000000..5347c11
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unpack_vector_1.f90
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! PR fortran/105813
+! Fix checking of VECTOR argument to UNPACK when MASK is a variable.
+! Contributed by G.Steinmetz
+
+program p
+ logical, parameter :: mask(2,2) = reshape ([.true., .true., &
+ .false., .true.], &
+ shape (mask))
+ print *, unpack ([1,2,3], mask, 0) ! OK
+ print *, unpack ([1,2], mask, 0) ! { dg-error "must provide at least" }
+end
diff --git a/gcc/testsuite/gnat.dg/renaming1.adb b/gcc/testsuite/gnat.dg/renaming1.adb
index d033c9a..c85e50a 100644
--- a/gcc/testsuite/gnat.dg/renaming1.adb
+++ b/gcc/testsuite/gnat.dg/renaming1.adb
@@ -1,12 +1,12 @@
-- { dg-do compile}
-- { dg-options "-gnatwa" }
-with Text_IO;
-use Text_IO;
+with Ada.Text_IO;
+use Ada.Text_IO;
package body renaming1 is
- procedure Fo (A : Text_IO.File_Access) is
+ procedure Fo (A : Ada.Text_IO.File_Access) is
begin
- if A = Text_IO.Standard_Output then
+ if A = Ada.Text_IO.Standard_Output then
null;
end if;
end Fo;
diff --git a/gcc/testsuite/gnat.dg/renaming1.ads b/gcc/testsuite/gnat.dg/renaming1.ads
index 893f423..fba216a 100644
--- a/gcc/testsuite/gnat.dg/renaming1.ads
+++ b/gcc/testsuite/gnat.dg/renaming1.ads
@@ -1,4 +1,4 @@
-with Text_IO;
+with Ada.Text_IO;
package renaming1 is
- procedure Fo (A : Text_IO.File_Access);
+ procedure Fo (A : Ada.Text_IO.File_Access);
end;
diff --git a/gcc/testsuite/gnat.dg/warn29.adb b/gcc/testsuite/gnat.dg/warn29.adb
index ec3b9ee..eeb3a89 100644
--- a/gcc/testsuite/gnat.dg/warn29.adb
+++ b/gcc/testsuite/gnat.dg/warn29.adb
@@ -1,7 +1,7 @@
-- { dg-do compile }
-- { dg-options "-gnatwa" }
-with Text_IO; use Text_IO;
+with Ada.Text_IO; use Ada.Text_IO;
package body Warn29 is
procedure P (X : T; Y : Integer) is
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue27938.go b/gcc/testsuite/go.test/test/fixedbugs/issue27938.go
index ed974e6..aecc676 100644
--- a/gcc/testsuite/go.test/test/fixedbugs/issue27938.go
+++ b/gcc/testsuite/go.test/test/fixedbugs/issue27938.go
@@ -11,13 +11,13 @@
package p
type _ struct {
- F sync.Mutex // ERROR "undefined: sync|expected package"
+ F sync.Mutex // ERROR "undefined: sync|expected package|reference to undefined name"
}
type _ struct {
- sync.Mutex // ERROR "undefined: sync|expected package"
+ sync.Mutex // ERROR "undefined: sync|expected package|reference to undefined name"
}
type _ interface {
- sync.Mutex // ERROR "undefined: sync|expected package|expected signature or type name"
+ sync.Mutex // ERROR "undefined: sync|expected package|expected signature or type name|reference to undefined name"
}
diff --git a/gcc/testsuite/jit.dg/test-asm.cc b/gcc/testsuite/jit.dg/test-asm.cc
index a3b45da..d436f58 100644
--- a/gcc/testsuite/jit.dg/test-asm.cc
+++ b/gcc/testsuite/jit.dg/test-asm.cc
@@ -1,5 +1,6 @@
/* { dg-do compile { target x86_64-*-* } } */
+#include <stdint.h>
#include "libgccjit++.h"
#include "harness.h"
diff --git a/gcc/testsuite/jit.dg/test-pr105812-bool-operations.c b/gcc/testsuite/jit.dg/test-pr105812-bool-operations.c
new file mode 100644
index 0000000..1daa1c3
--- /dev/null
+++ b/gcc/testsuite/jit.dg/test-pr105812-bool-operations.c
@@ -0,0 +1,89 @@
+#include "libgccjit.h"
+
+#include "harness.h"
+
+void
+create_code (gcc_jit_context *ctxt, void *user_data)
+{
+ gcc_jit_type* bool_type =
+ gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_BOOL);
+ gcc_jit_type* bool_ptr_type =
+ gcc_jit_type_get_pointer (gcc_jit_type_get_aligned (bool_type, 1));
+
+ /* Function 1 */
+
+ gcc_jit_param* param1 = gcc_jit_context_new_param (ctxt, NULL, bool_type,
+ "param1");
+ gcc_jit_function* function1 =
+ gcc_jit_context_new_function (ctxt, NULL,
+ GCC_JIT_FUNCTION_EXPORTED, bool_type,
+ "function1", 1, &param1, 0);
+ gcc_jit_block* block1 = gcc_jit_function_new_block (function1, "start1");
+
+ gcc_jit_lvalue* var1 =
+ gcc_jit_function_new_local (function1, NULL, bool_type, "var1");
+ gcc_jit_rvalue* addr1 =
+ gcc_jit_lvalue_get_address (var1, NULL);
+ gcc_jit_rvalue* ptr1 =
+ gcc_jit_context_new_cast (ctxt, NULL, addr1, bool_ptr_type);
+ gcc_jit_lvalue* deref1 =
+ gcc_jit_rvalue_dereference (ptr1, NULL);
+ gcc_jit_rvalue* param1_rvalue =
+ gcc_jit_param_as_rvalue (param1);
+ gcc_jit_block_add_assignment (block1, NULL, deref1, param1_rvalue);
+
+ gcc_jit_rvalue* one = gcc_jit_context_one (ctxt, bool_type);
+ gcc_jit_block_end_with_return (block1, NULL, one);
+
+ /* Function 2 */
+
+ gcc_jit_param* param2 = gcc_jit_context_new_param (ctxt, NULL, bool_type,
+ "param2");
+ gcc_jit_function* function2 =
+ gcc_jit_context_new_function (ctxt, NULL,
+ GCC_JIT_FUNCTION_EXPORTED, bool_type,
+ "function2", 1, &param2, 0);
+ gcc_jit_block* block2 = gcc_jit_function_new_block (function2, "start2");
+
+ gcc_jit_lvalue* var2 =
+ gcc_jit_function_new_local (function2, NULL, bool_type, "var2");
+ gcc_jit_rvalue* addr2 =
+ gcc_jit_lvalue_get_address (var2, NULL);
+ gcc_jit_rvalue* ptr2 =
+ gcc_jit_context_new_cast (ctxt, NULL, addr2, bool_ptr_type);
+ gcc_jit_lvalue* deref2 =
+ gcc_jit_rvalue_dereference (ptr2, NULL);
+ gcc_jit_rvalue* param2_rvalue =
+ gcc_jit_param_as_rvalue (param2);
+ gcc_jit_block_add_assignment (block2, NULL, deref2, param2_rvalue);
+
+ gcc_jit_lvalue* return_value =
+ gcc_jit_function_new_local (function2, NULL, bool_type, "return_value");
+ gcc_jit_rvalue* call =
+ gcc_jit_context_new_call (ctxt, NULL, function1, 1, &param2_rvalue);
+ gcc_jit_block_add_assignment (block2, NULL, return_value, call);
+
+ gcc_jit_block* block2_1 =
+ gcc_jit_function_new_block (function2, "end2");
+ gcc_jit_block_end_with_jump (block2, NULL, block2_1);
+
+ gcc_jit_rvalue* value =
+ gcc_jit_context_new_unary_op (ctxt, NULL,
+ GCC_JIT_UNARY_OP_LOGICAL_NEGATE, bool_type,
+ param2_rvalue);
+ gcc_jit_rvalue* return_rvalue =
+ gcc_jit_lvalue_as_rvalue (return_value);
+ gcc_jit_rvalue* and =
+ gcc_jit_context_new_binary_op (ctxt, NULL,
+ GCC_JIT_BINARY_OP_BITWISE_AND, bool_type,
+ return_rvalue, value);
+
+ gcc_jit_block_end_with_return (block2_1, NULL, and);
+}
+
+extern void
+verify_code (gcc_jit_context *ctxt, gcc_jit_result *result)
+{
+ /* Verify that no errors were emitted. */
+ CHECK_NON_NULL (result);
+}
diff --git a/gcc/testsuite/lib/asan-dg.exp b/gcc/testsuite/lib/asan-dg.exp
index 7e0f85d..87c70d0 100644
--- a/gcc/testsuite/lib/asan-dg.exp
+++ b/gcc/testsuite/lib/asan-dg.exp
@@ -111,6 +111,8 @@ proc asan_init { args } {
global asan_saved_TEST_ALWAYS_FLAGS
global asan_saved_ALWAYS_CXXFLAGS
+ setenv ASAN_OPTIONS "color=never"
+
set link_flags ""
if ![is_remote host] {
if [info exists TOOL_OPTIONS] {
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index d1f4eb7..4ed7b25 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -851,7 +851,6 @@ proc check_effective_target_nonlocal_goto {} {
proc check_effective_target_global_constructor {} {
if { [istarget nvptx-*-*]
- || [istarget amdgcn-*-*]
|| [istarget bpf-*-*] } {
return 0
}
@@ -2906,6 +2905,15 @@ proc check_effective_target_le { } {
}]
}
+# Return 1 if we can link a program with 2+GB of data.
+
+proc check_effective_target_two_plus_gigs { } {
+ return [check_no_compiler_messages two_plus_gigs executable {
+ char dummy[0x80000000];
+ int main () { return 0; }
+ }]
+}
+
# Return 1 if we're generating 32-bit code using default options, 0
# otherwise.
@@ -7541,6 +7549,19 @@ proc check_effective_target_vect_aligned_arrays { } {
return $et_vect_aligned_arrays
}
+# Return 1 if the biggest alignment required by target is 1 * BITS_PER_UNIT.
+# In such case the target does not impose any alignment constraints.
+
+proc check_effective_target_no_alignment_constraints { } {
+ return [check_runtime_nocache no_alignment_constraints {
+ int
+ main (void)
+ {
+ return __BIGGEST_ALIGNMENT__ == 1 ? 0 : 1;
+ }
+ }]
+}
+
# Return 1 if types of size 32 bit or less are naturally aligned
# (aligned to their type-size), 0 otherwise.
#
diff --git a/gcc/toplev.cc b/gcc/toplev.cc
index 055e064..61d234a 100644
--- a/gcc/toplev.cc
+++ b/gcc/toplev.cc
@@ -721,7 +721,7 @@ init_asm_output (const char *name)
"cannot open %qs for writing: %m", asm_file_name);
}
- if (!flag_syntax_only)
+ if (!flag_syntax_only && !(global_dc->lang_mask & CL_LTODump))
{
targetm.asm_out.file_start ();
@@ -1038,6 +1038,8 @@ general_init (const char *argv0, bool init_signals)
= global_options_init.x_flag_diagnostics_show_line_numbers;
global_dc->show_cwe
= global_options_init.x_flag_diagnostics_show_cwe;
+ global_dc->show_rules
+ = global_options_init.x_flag_diagnostics_show_rules;
global_dc->path_format
= (enum diagnostic_path_format)global_options_init.x_flag_diagnostics_path_format;
global_dc->show_path_depths
diff --git a/gcc/tracer.cc b/gcc/tracer.cc
index 4d054fe..6451784 100644
--- a/gcc/tracer.cc
+++ b/gcc/tracer.cc
@@ -424,12 +424,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize > 0 && flag_tracer && flag_reorder_blocks);
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_tracer
diff --git a/gcc/trans-mem.cc b/gcc/trans-mem.cc
index ae2921f..131dce0 100644
--- a/gcc/trans-mem.cc
+++ b/gcc/trans-mem.cc
@@ -864,8 +864,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tm; }
- virtual unsigned int execute (function *) { return diagnose_tm_blocks (); }
+ bool gate (function *) final override { return flag_tm; }
+ unsigned int execute (function *) final override
+ {
+ return diagnose_tm_blocks ();
+ }
}; // class pass_diagnose_tm_blocks
@@ -1850,8 +1853,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tm; }
- virtual unsigned int execute (function *) { return execute_lower_tm (); }
+ bool gate (function *) final override { return flag_tm; }
+ unsigned int execute (function *) final override
+ {
+ return execute_lower_tm ();
+ }
}; // class pass_lower_tm
@@ -2144,7 +2150,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_tm_init (); }
+ bool gate (function *) final override { return gate_tm_init (); }
}; // class pass_tm_init
@@ -3162,7 +3168,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return execute_tm_mark (); }
+ unsigned int execute (function *) final override
+ {
+ return execute_tm_mark ();
+ }
}; // class pass_tm_mark
@@ -3324,7 +3333,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_tm_edges
@@ -4085,8 +4094,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tm && optimize > 0; }
- virtual unsigned int execute (function *) { return execute_tm_memopt (); }
+ bool gate (function *) final override { return flag_tm && optimize > 0; }
+ unsigned int execute (function *) final override
+ {
+ return execute_tm_memopt ();
+ }
}; // class pass_tm_memopt
@@ -5667,8 +5679,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tm; }
- virtual unsigned int execute (function *) { return ipa_tm_execute (); }
+ bool gate (function *) final override { return flag_tm; }
+ unsigned int execute (function *) final override { return ipa_tm_execute (); }
}; // class pass_ipa_tm
diff --git a/gcc/tree-call-cdce.cc b/gcc/tree-call-cdce.cc
index 83991fe..feb61f3 100644
--- a/gcc/tree-call-cdce.cc
+++ b/gcc/tree-call-cdce.cc
@@ -1171,7 +1171,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* The limit constants used in the implementation
assume IEEE floating point format. Other formats
@@ -1179,7 +1179,7 @@ public:
return flag_tree_builtin_call_dce != 0;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_call_cdce
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index c67c278..bfcb142 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -407,7 +407,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return execute_build_cfg (); }
+ unsigned int execute (function *) final override
+ {
+ return execute_build_cfg ();
+ }
}; // class pass_build_cfg
@@ -9209,9 +9212,15 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return split_critical_edges (); }
+ unsigned int execute (function *) final override
+ {
+ return split_critical_edges ();
+ }
- opt_pass * clone () { return new pass_split_crit_edges (m_ctxt); }
+ opt_pass * clone () final override
+ {
+ return new pass_split_crit_edges (m_ctxt);
+ }
}; // class pass_split_crit_edges
} // anon namespace
@@ -9468,7 +9477,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_warn_function_return
@@ -9503,9 +9512,8 @@ pass_warn_function_return::execute (function *fun)
with __builtin_unreachable () call. */
if (optimize && gimple_code (last) == GIMPLE_RETURN)
{
- tree fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
- gimple *new_stmt = gimple_build_call (fndecl, 0);
- gimple_set_location (new_stmt, gimple_location (last));
+ location_t loc = gimple_location (last);
+ gimple *new_stmt = gimple_build_builtin_unreachable (loc);
gimple_stmt_iterator gsi = gsi_for_stmt (last);
gsi_replace (&gsi, new_stmt, true);
remove_edge (e);
@@ -9675,8 +9683,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_warn_unused_result; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_warn_unused_result; }
+ unsigned int execute (function *) final override
{
do_warn_unused_result (gimple_body (current_function_decl));
return 0;
@@ -9834,7 +9842,7 @@ execute_fixup_cfg (void)
{
if (stmt && is_gimple_call (stmt))
gimple_call_set_ctrl_altering (stmt, false);
- tree fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+ tree fndecl = builtin_decl_unreachable ();
stmt = gimple_build_call (fndecl, 0);
gimple_stmt_iterator gsi = gsi_last_bb (bb);
gsi_insert_after (&gsi, stmt, GSI_NEW_STMT);
@@ -9885,8 +9893,11 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_fixup_cfg (m_ctxt); }
- virtual unsigned int execute (function *) { return execute_fixup_cfg (); }
+ opt_pass * clone () final override { return new pass_fixup_cfg (m_ctxt); }
+ unsigned int execute (function *) final override
+ {
+ return execute_fixup_cfg ();
+ }
}; // class pass_fixup_cfg
diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc
index 893619e..b9ff689 100644
--- a/gcc/tree-cfgcleanup.cc
+++ b/gcc/tree-cfgcleanup.cc
@@ -1170,22 +1170,22 @@ static void
repair_loop_structures (void)
{
bitmap changed_bbs;
- unsigned n_new_loops;
+ unsigned n_new_or_deleted_loops;
calculate_dominance_info (CDI_DOMINATORS);
timevar_push (TV_REPAIR_LOOPS);
changed_bbs = BITMAP_ALLOC (NULL);
- n_new_loops = fix_loop_structure (changed_bbs);
+ n_new_or_deleted_loops = fix_loop_structure (changed_bbs);
/* This usually does nothing. But sometimes parts of cfg that originally
were inside a loop get out of it due to edge removal (since they
become unreachable by back edges from latch). Also a former
irreducible loop can become reducible - in this case force a full
rewrite into loop-closed SSA form. */
- if (loops_state_satisfies_p (LOOP_CLOSED_SSA))
- rewrite_into_loop_closed_ssa (n_new_loops ? NULL : changed_bbs,
- TODO_update_ssa);
+ if (loops_state_satisfies_p (LOOP_CLOSED_SSA)
+ && (!bitmap_empty_p (changed_bbs) || n_new_or_deleted_loops))
+ rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
BITMAP_FREE (changed_bbs);
@@ -1406,8 +1406,8 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_merge_phi (m_ctxt); }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_merge_phi (m_ctxt); }
+ unsigned int execute (function *) final override;
}; // class pass_merge_phi
@@ -1584,7 +1584,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return execute_cleanup_cfg_post_optimizing ();
}
diff --git a/gcc/tree-complex.cc b/gcc/tree-complex.cc
index f722057..61950a0 100644
--- a/gcc/tree-complex.cc
+++ b/gcc/tree-complex.cc
@@ -1915,8 +1915,11 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_lower_complex (m_ctxt); }
- virtual unsigned int execute (function *) { return tree_lower_complex (); }
+ opt_pass * clone () final override { return new pass_lower_complex (m_ctxt); }
+ unsigned int execute (function *) final override
+ {
+ return tree_lower_complex ();
+ }
}; // class pass_lower_complex
@@ -1952,14 +1955,17 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
/* With errors, normal optimization passes are not run. If we don't
lower complex operations at all, rtl expansion will abort. */
return !(fun->curr_properties & PROP_gimple_lcx);
}
- virtual unsigned int execute (function *) { return tree_lower_complex (); }
+ unsigned int execute (function *) final override
+ {
+ return tree_lower_complex ();
+ }
}; // class pass_lower_complex_O0
diff --git a/gcc/tree-data-ref.cc b/gcc/tree-data-ref.cc
index ae05fe7..ff9327f 100644
--- a/gcc/tree-data-ref.cc
+++ b/gcc/tree-data-ref.cc
@@ -2968,6 +2968,25 @@ dr_may_alias_p (const struct data_reference *a, const struct data_reference *b,
disambiguation. */
if (!loop_nest)
{
+ tree tree_size_a = TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (a)));
+ tree tree_size_b = TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (b)));
+
+ if (DR_BASE_ADDRESS (a)
+ && DR_BASE_ADDRESS (b)
+ && operand_equal_p (DR_BASE_ADDRESS (a), DR_BASE_ADDRESS (b))
+ && operand_equal_p (DR_OFFSET (a), DR_OFFSET (b))
+ && poly_int_tree_p (tree_size_a)
+ && poly_int_tree_p (tree_size_b)
+ && !ranges_maybe_overlap_p (wi::to_widest (DR_INIT (a)),
+ wi::to_widest (tree_size_a),
+ wi::to_widest (DR_INIT (b)),
+ wi::to_widest (tree_size_b)))
+ {
+ gcc_assert (integer_zerop (DR_STEP (a))
+ && integer_zerop (DR_STEP (b)));
+ return false;
+ }
+
aff_tree off1, off2;
poly_widest_int size1, size2;
get_inner_reference_aff (DR_REF (a), &off1, &size1);
diff --git a/gcc/tree-diagnostic-path.cc b/gcc/tree-diagnostic-path.cc
index ae2f8a2..2f297fa 100644
--- a/gcc/tree-diagnostic-path.cc
+++ b/gcc/tree-diagnostic-path.cc
@@ -66,7 +66,6 @@ class path_label : public range_label
pp_show_color (&pp) = pp_show_color (global_dc->printer);
diagnostic_event_id_t event_id (event_idx);
pp_printf (&pp, "%@ %s", &event_id, event_text.m_buffer);
- event_text.maybe_free ();
label_text result = label_text::take (xstrdup (pp_formatted_text (&pp)));
return result;
}
@@ -176,7 +175,6 @@ struct event_range
pretty_printer *pp = dc->printer;
pp_printf (pp, " %@: %s", &event_id, event_text.m_buffer);
pp_newline (pp);
- event_text.maybe_free ();
}
return;
}
@@ -484,7 +482,6 @@ default_tree_diagnostic_path_printer (diagnostic_context *context,
else
inform (event.get_location (),
"%@ %s", &event_id, event_text.m_buffer);
- event_text.maybe_free ();
}
}
break;
@@ -523,7 +520,6 @@ default_tree_make_json_for_path (diagnostic_context *context,
event.get_location ()));
label_text event_text (event.get_desc (false));
event_obj->set ("description", new json::string (event_text.m_buffer));
- event_text.maybe_free ();
if (tree fndecl = event.get_fndecl ())
{
const char *function
diff --git a/gcc/tree-eh.cc b/gcc/tree-eh.cc
index c37a584..076ecd3e 100644
--- a/gcc/tree-eh.cc
+++ b/gcc/tree-eh.cc
@@ -2176,7 +2176,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_lower_eh
@@ -3295,8 +3295,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_exceptions != 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_exceptions != 0; }
+ unsigned int execute (function *) final override
{
refactor_eh_r (gimple_body (current_function_decl));
return 0;
@@ -3497,8 +3497,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_exceptions != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_exceptions != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_lower_resx
@@ -3922,8 +3922,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun) { return fun->eh->region_tree != NULL; }
- virtual unsigned int execute (function *);
+ bool gate (function *fun) final override
+ {
+ return fun->eh->region_tree != NULL;
+ }
+ unsigned int execute (function *) final override;
}; // class pass_lower_eh_dispatch
@@ -4859,13 +4862,13 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_cleanup_eh (m_ctxt); }
- virtual bool gate (function *fun)
+ opt_pass * clone () final override { return new pass_cleanup_eh (m_ctxt); }
+ bool gate (function *fun) final override
{
return fun->eh != NULL && fun->eh->region_tree != NULL;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_cleanup_eh
diff --git a/gcc/tree-emutls.cc b/gcc/tree-emutls.cc
index 5f68703..b5aa307 100644
--- a/gcc/tree-emutls.cc
+++ b/gcc/tree-emutls.cc
@@ -838,13 +838,16 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* If the target supports TLS natively, we need do nothing here. */
return !targetm.have_tls;
}
- virtual unsigned int execute (function *) { return ipa_lower_emutls (); }
+ unsigned int execute (function *) final override
+ {
+ return ipa_lower_emutls ();
+ }
}; // class pass_ipa_lower_emutls
diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc
index 2245b6b..1c8e1a4 100644
--- a/gcc/tree-if-conv.cc
+++ b/gcc/tree-if-conv.cc
@@ -2934,7 +2934,7 @@ version_loop_for_if_conversion (class loop *loop, vec<gimple *> *preds)
if (preds)
preds->safe_push (g);
gsi_insert_before (&gsi, g, GSI_SAME_STMT);
- update_ssa (TODO_update_ssa);
+ update_ssa (TODO_update_ssa_no_phi);
return new_loop;
}
@@ -3424,8 +3424,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *);
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override;
}; // class pass_if_conversion
diff --git a/gcc/tree-into-ssa.cc b/gcc/tree-into-ssa.cc
index 22c2e5b..9f45e62 100644
--- a/gcc/tree-into-ssa.cc
+++ b/gcc/tree-into-ssa.cc
@@ -587,6 +587,8 @@ add_to_repl_tbl (tree new_tree, tree old)
bitmap_set_bit (*set, SSA_NAME_VERSION (old));
}
+/* Debugging aid to fence old_ssa_names changes when iterating over it. */
+static bool iterating_old_ssa_names;
/* Add a new mapping NEW_TREE -> OLD REPL_TBL. Every entry N_i in REPL_TBL
represents the set of names O_1 ... O_j replaced by N_i. This is
@@ -602,10 +604,15 @@ add_new_name_mapping (tree new_tree, tree old)
/* We may need to grow NEW_SSA_NAMES and OLD_SSA_NAMES because our
caller may have created new names since the set was created. */
- if (SBITMAP_SIZE (new_ssa_names) <= num_ssa_names - 1)
+ if (SBITMAP_SIZE (new_ssa_names) <= SSA_NAME_VERSION (new_tree))
{
unsigned int new_sz = num_ssa_names + NAME_SETS_GROWTH_FACTOR;
new_ssa_names = sbitmap_resize (new_ssa_names, new_sz, 0);
+ }
+ if (SBITMAP_SIZE (old_ssa_names) <= SSA_NAME_VERSION (old))
+ {
+ gcc_assert (!iterating_old_ssa_names);
+ unsigned int new_sz = num_ssa_names + NAME_SETS_GROWTH_FACTOR;
old_ssa_names = sbitmap_resize (old_ssa_names, new_sz, 0);
}
@@ -619,8 +626,11 @@ add_new_name_mapping (tree new_tree, tree old)
/* Register NEW_TREE and OLD in NEW_SSA_NAMES and OLD_SSA_NAMES,
respectively. */
+ if (iterating_old_ssa_names)
+ gcc_assert (bitmap_bit_p (old_ssa_names, SSA_NAME_VERSION (old)));
+ else
+ bitmap_set_bit (old_ssa_names, SSA_NAME_VERSION (old));
bitmap_set_bit (new_ssa_names, SSA_NAME_VERSION (new_tree));
- bitmap_set_bit (old_ssa_names, SSA_NAME_VERSION (old));
}
@@ -1462,8 +1472,8 @@ public:
rewrite_dom_walker (cdi_direction direction)
: dom_walker (direction, ALL_BLOCKS, NULL) {}
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
};
/* SSA Rewriting Step 1. Initialization, create a block local stack
@@ -2146,10 +2156,10 @@ class rewrite_update_dom_walker : public dom_walker
{
public:
rewrite_update_dom_walker (cdi_direction direction)
- : dom_walker (direction, ALL_BLOCKS, NULL) {}
+ : dom_walker (direction, ALL_BLOCKS, (int *)(uintptr_t)-1) {}
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
};
/* Initialization of block data structures for the incremental SSA
@@ -2214,15 +2224,11 @@ rewrite_update_dom_walker::before_dom_children (basic_block bb)
}
/* Step 2. Rewrite every variable used in each statement in the block. */
- if (bitmap_bit_p (interesting_blocks, bb->index))
- {
- gcc_checking_assert (bitmap_bit_p (blocks_to_update, bb->index));
- for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); )
- if (rewrite_update_stmt (gsi_stmt (gsi), gsi))
- gsi_remove (&gsi, true);
- else
- gsi_next (&gsi);
- }
+ for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); )
+ if (rewrite_update_stmt (gsi_stmt (gsi), gsi))
+ gsi_remove (&gsi, true);
+ else
+ gsi_next (&gsi);
/* Step 3. Update PHI nodes. */
rewrite_update_phi_arguments (bb);
@@ -2300,7 +2306,7 @@ public:
mark_def_dom_walker (cdi_direction direction);
~mark_def_dom_walker ();
- virtual edge before_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
private:
/* Notice that this bitmap is indexed using variable UIDs, so it must be
@@ -2403,13 +2409,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
/* Do nothing for funcions that was produced already in SSA form. */
return !(fun->curr_properties & PROP_ssa);
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_build_ssa
@@ -2460,6 +2466,7 @@ pass_build_ssa::execute (function *fun)
free (dfs);
sbitmap_free (interesting_blocks);
+ interesting_blocks = NULL;
fini_ssa_renamer ();
@@ -3109,7 +3116,7 @@ release_ssa_name_after_update_ssa (tree name)
/* Insert new PHI nodes to replace VAR. DFS contains dominance
- frontier information. BLOCKS is the set of blocks to be updated.
+ frontier information.
This is slightly different than the regular PHI insertion
algorithm. The value of UPDATE_FLAGS controls how PHI nodes for
@@ -3132,8 +3139,8 @@ release_ssa_name_after_update_ssa (tree name)
names is not pruned. PHI nodes are inserted at every IDF block. */
static void
-insert_updated_phi_nodes_for (tree var, bitmap_head *dfs, bitmap blocks,
- unsigned update_flags)
+insert_updated_phi_nodes_for (tree var, bitmap_head *dfs,
+ unsigned update_flags)
{
basic_block entry;
def_blocks *db;
@@ -3197,16 +3204,16 @@ insert_updated_phi_nodes_for (tree var, bitmap_head *dfs, bitmap blocks,
/* FIXME, this is not needed if we are updating symbols. We are
already starting at the ENTRY block anyway. */
- bitmap_ior_into (blocks, pruned_idf);
EXECUTE_IF_SET_IN_BITMAP (pruned_idf, 0, i, bi)
{
edge e;
edge_iterator ei;
basic_block bb = BASIC_BLOCK_FOR_FN (cfun, i);
+ mark_block_for_update (bb);
FOR_EACH_EDGE (e, ei, bb->preds)
if (e->src->index >= 0)
- bitmap_set_bit (blocks, e->src->index);
+ mark_block_for_update (e->src);
}
insert_phi_nodes_for (var, pruned_idf, true);
@@ -3463,26 +3470,18 @@ update_ssa (unsigned update_flags)
bitmap_initialize (&dfs[bb->index], &bitmap_default_obstack);
compute_dominance_frontiers (dfs);
- if (bitmap_first_set_bit (old_ssa_names) >= 0)
- {
- sbitmap_iterator sbi;
-
- /* insert_update_phi_nodes_for will call add_new_name_mapping
- when inserting new PHI nodes, so the set OLD_SSA_NAMES
- will grow while we are traversing it (but it will not
- gain any new members). Copy OLD_SSA_NAMES to a temporary
- for traversal. */
- auto_sbitmap tmp (SBITMAP_SIZE (old_ssa_names));
- bitmap_copy (tmp, old_ssa_names);
- EXECUTE_IF_SET_IN_BITMAP (tmp, 0, i, sbi)
- insert_updated_phi_nodes_for (ssa_name (i), dfs, blocks_to_update,
- update_flags);
- }
+ /* insert_update_phi_nodes_for will call add_new_name_mapping
+ when inserting new PHI nodes, but it will not add any
+ new members to OLD_SSA_NAMES. */
+ iterating_old_ssa_names = true;
+ sbitmap_iterator sbi;
+ EXECUTE_IF_SET_IN_BITMAP (old_ssa_names, 0, i, sbi)
+ insert_updated_phi_nodes_for (ssa_name (i), dfs, update_flags);
+ iterating_old_ssa_names = false;
symbols_to_rename.qsort (insert_updated_phi_nodes_compare_uids);
FOR_EACH_VEC_ELT (symbols_to_rename, i, sym)
- insert_updated_phi_nodes_for (sym, dfs, blocks_to_update,
- update_flags);
+ insert_updated_phi_nodes_for (sym, dfs, update_flags);
FOR_EACH_BB_FN (bb, cfun)
bitmap_clear (&dfs[bb->index]);
@@ -3505,15 +3504,8 @@ update_ssa (unsigned update_flags)
get_var_info (sym)->info.current_def = NULL_TREE;
/* Now start the renaming process at START_BB. */
- interesting_blocks = sbitmap_alloc (last_basic_block_for_fn (cfun));
- bitmap_clear (interesting_blocks);
- EXECUTE_IF_SET_IN_BITMAP (blocks_to_update, 0, i, bi)
- bitmap_set_bit (interesting_blocks, i);
-
rewrite_blocks (start_bb, REWRITE_UPDATE);
- sbitmap_free (interesting_blocks);
-
/* Debugging dumps. */
if (dump_file)
{
diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc
index 086b59c..ed7f432 100644
--- a/gcc/tree-loop-distribution.cc
+++ b/gcc/tree-loop-distribution.cc
@@ -2751,7 +2751,7 @@ version_loop_by_alias_check (vec<struct partition *> *partitions,
gimple_stmt_iterator cond_gsi = gsi_last_bb (cond_bb);
gsi_insert_seq_before (&cond_gsi, cond_stmts, GSI_SAME_STMT);
}
- update_ssa (TODO_update_ssa);
+ update_ssa (TODO_update_ssa_no_phi);
}
/* Return true if loop versioning is needed to distrubute PARTITIONS.
@@ -3897,13 +3897,13 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_tree_loop_distribution
|| flag_tree_loop_distribute_patterns;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_loop_distribution
diff --git a/gcc/tree-nrv.cc b/gcc/tree-nrv.cc
index b96d5b8..1faa481 100644
--- a/gcc/tree-nrv.cc
+++ b/gcc/tree-nrv.cc
@@ -125,9 +125,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize > 0; }
+ bool gate (function *) final override { return optimize > 0; }
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_nrv
@@ -344,7 +344,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_return_slot
diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc
index 5ca87ae..4eb454a 100644
--- a/gcc/tree-object-size.cc
+++ b/gcc/tree-object-size.cc
@@ -695,19 +695,21 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
var_size = pt_var_size;
bytes = compute_object_offset (TREE_OPERAND (ptr, 0), var);
if (bytes != error_mark_node)
- bytes = size_for_offset (var_size, bytes);
- if (var != pt_var
- && pt_var_size
- && TREE_CODE (pt_var) == MEM_REF
- && bytes != error_mark_node)
{
- tree bytes2 = compute_object_offset (TREE_OPERAND (ptr, 0), pt_var);
- if (bytes2 != error_mark_node)
+ bytes = size_for_offset (var_size, bytes);
+ if (var != pt_var && pt_var_size && TREE_CODE (pt_var) == MEM_REF)
{
- bytes2 = size_for_offset (pt_var_size, bytes2);
- bytes = size_binop (MIN_EXPR, bytes, bytes2);
+ tree bytes2 = compute_object_offset (TREE_OPERAND (ptr, 0),
+ pt_var);
+ if (bytes2 != error_mark_node)
+ {
+ bytes2 = size_for_offset (pt_var_size, bytes2);
+ bytes = size_binop (MIN_EXPR, bytes, bytes2);
+ }
}
}
+ else
+ bytes = size_unknown (object_size_type);
wholebytes
= object_size_type & OST_SUBOBJECT ? var_size : pt_var_wholesize;
@@ -2122,8 +2124,8 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_object_sizes (m_ctxt); }
- virtual unsigned int execute (function *fun)
+ opt_pass * clone () final override { return new pass_object_sizes (m_ctxt); }
+ unsigned int execute (function *fun) final override
{
return object_sizes_execute (fun, false);
}
@@ -2162,7 +2164,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *fun)
+ unsigned int execute (function *fun) final override
{
return object_sizes_execute (fun, true);
}
diff --git a/gcc/tree-parloops.cc b/gcc/tree-parloops.cc
index da10696..2d3aa78 100644
--- a/gcc/tree-parloops.cc
+++ b/gcc/tree-parloops.cc
@@ -2355,12 +2355,6 @@ transform_to_exit_first_loop_alt (class loop *loop,
tree control = gimple_cond_lhs (cond_stmt);
edge e;
- /* Rewriting virtuals into loop-closed ssa normal form makes this
- transformation simpler. It also ensures that the virtuals are in
- loop-closed ssa normal from after the transformation, which is required by
- create_parallel_loop. */
- rewrite_virtuals_into_loop_closed_ssa (loop);
-
/* Create the new_header block. */
basic_block new_header = split_block_before_cond_jump (exit->src);
edge edge_at_split = single_pred_edge (new_header);
@@ -4173,16 +4167,19 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
if (oacc_kernels_p)
return flag_openacc;
else
return flag_tree_parallelize_loops > 1;
}
- virtual unsigned int execute (function *);
- opt_pass * clone () { return new pass_parallelize_loops (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ unsigned int execute (function *) final override;
+ opt_pass * clone () final override
+ {
+ return new pass_parallelize_loops (m_ctxt);
+ }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
oacc_kernels_p = param;
@@ -4220,7 +4217,9 @@ pass_parallelize_loops::execute (function *fun)
checking_verify_loop_structure ();
- todo |= TODO_update_ssa;
+ update_ssa (TODO_update_ssa);
+ if (in_loop_pipeline)
+ rewrite_into_loop_closed_ssa (NULL, 0);
}
if (!in_loop_pipeline)
diff --git a/gcc/tree-predcom.cc b/gcc/tree-predcom.cc
index fb45725..5d923fb 100644
--- a/gcc/tree-predcom.cc
+++ b/gcc/tree-predcom.cc
@@ -3514,8 +3514,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool
- gate (function *)
+ bool
+ gate (function *) final override
{
if (flag_predictive_commoning != 0)
return true;
@@ -3529,8 +3529,8 @@ public:
return false;
}
- virtual unsigned int
- execute (function *fun)
+ unsigned int
+ execute (function *fun) final override
{
bool allow_unroll_p = flag_predictive_commoning != 0;
return run_tree_predictive_commoning (fun, allow_unroll_p);
diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc
index bfabe9e..47371d8 100644
--- a/gcc/tree-pretty-print.cc
+++ b/gcc/tree-pretty-print.cc
@@ -2077,7 +2077,11 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags,
for (tmp = TREE_TYPE (node); TREE_CODE (tmp) == ARRAY_TYPE;
tmp = TREE_TYPE (tmp))
;
- dump_generic_node (pp, tmp, spc, flags, false);
+
+ /* Avoid to print recursively the array. */
+ /* FIXME : Not implemented correctly, see print_struct_decl. */
+ if (TREE_CODE (tmp) != POINTER_TYPE || TREE_TYPE (tmp) != node)
+ dump_generic_node (pp, tmp, spc, flags, false);
/* Print the dimensions. */
for (tmp = node; TREE_CODE (tmp) == ARRAY_TYPE; tmp = TREE_TYPE (tmp))
diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc
index 97aab88..2beb492 100644
--- a/gcc/tree-profile.cc
+++ b/gcc/tree-profile.cc
@@ -884,8 +884,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *);
- virtual unsigned int execute (function *) { return tree_profiling (); }
+ bool gate (function *) final override;
+ unsigned int execute (function *) final override { return tree_profiling (); }
}; // class pass_ipa_tree_profile
diff --git a/gcc/tree-sra.cc b/gcc/tree-sra.cc
index 081c51b..1a3e12f 100644
--- a/gcc/tree-sra.cc
+++ b/gcc/tree-sra.cc
@@ -1667,7 +1667,18 @@ build_ref_for_offset (location_t loc, tree base, poly_int64 offset,
static tree
build_reconstructed_reference (location_t, tree base, struct access *model)
{
- tree expr = model->expr, prev_expr = NULL;
+ tree expr = model->expr;
+ /* We have to make sure to start just below the outermost union. */
+ tree start_expr = expr;
+ while (handled_component_p (expr))
+ {
+ if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == UNION_TYPE)
+ start_expr = expr;
+ expr = TREE_OPERAND (expr, 0);
+ }
+
+ expr = start_expr;
+ tree prev_expr = NULL_TREE;
while (!types_compatible_p (TREE_TYPE (expr), TREE_TYPE (base)))
{
if (!handled_component_p (expr))
@@ -4743,8 +4754,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_intra_sra (); }
- virtual unsigned int execute (function *) { return early_intra_sra (); }
+ bool gate (function *) final override { return gate_intra_sra (); }
+ unsigned int execute (function *) final override
+ {
+ return early_intra_sra ();
+ }
}; // class pass_sra_early
@@ -4779,8 +4793,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_intra_sra (); }
- virtual unsigned int execute (function *) { return late_intra_sra (); }
+ bool gate (function *) final override { return gate_intra_sra (); }
+ unsigned int execute (function *) final override { return late_intra_sra (); }
}; // class pass_sra
diff --git a/gcc/tree-ssa-alias.cc b/gcc/tree-ssa-alias.cc
index b1e7a2d..782266b 100644
--- a/gcc/tree-ssa-alias.cc
+++ b/gcc/tree-ssa-alias.cc
@@ -87,10 +87,11 @@ along with GCC; see the file COPYING3. If not see
This function tries to disambiguate two reference trees.
- bool ptr_deref_may_alias_global_p (tree)
+ bool ptr_deref_may_alias_global_p (tree, bool)
This function queries if dereferencing a pointer variable may
- alias global memory.
+ alias global memory. If bool argument is true, global memory
+ is considered to also include function local memory that escaped.
More low-level disambiguators are available and documented in
this file. Low-level disambiguators dealing with points-to
@@ -3333,11 +3334,18 @@ stmt_kills_ref_p (gimple *stmt, ao_ref *ref)
&& TREE_CODE (gimple_get_lhs (stmt)) != SSA_NAME
/* The assignment is not necessarily carried out if it can throw
and we can catch it in the current function where we could inspect
- the previous value.
+ the previous value. Similarly if the function can throw externally
+ and the ref does not die on the function return.
??? We only need to care about the RHS throwing. For aggregate
assignments or similar calls and non-call exceptions the LHS
- might throw as well. */
- && !stmt_can_throw_internal (cfun, stmt))
+ might throw as well.
+ ??? We also should care about possible longjmp, but since we
+ do not understand that longjmp is not using global memory we will
+ not consider a kill here since the function call will be considered
+ as possibly using REF. */
+ && !stmt_can_throw_internal (cfun, stmt)
+ && (!stmt_can_throw_external (cfun, stmt)
+ || !ref_may_alias_global_p (ref, false)))
{
tree lhs = gimple_get_lhs (stmt);
/* If LHS is literally a base of the access we are done. */
@@ -3434,8 +3442,12 @@ stmt_kills_ref_p (gimple *stmt, ao_ref *ref)
&& node->binds_to_current_def_p ()
&& (summary = get_modref_function_summary (node)) != NULL
&& summary->kills.length ()
+ /* Check that we can not trap while evaulating function
+ parameters. This check is overly conservative. */
&& (!cfun->can_throw_non_call_exceptions
- || !stmt_can_throw_internal (cfun, stmt)))
+ || (!stmt_can_throw_internal (cfun, stmt)
+ && (!stmt_can_throw_external (cfun, stmt)
+ || !ref_may_alias_global_p (ref, false)))))
{
for (auto kill : summary->kills)
{
diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
index 58e0fac..85c0460 100644
--- a/gcc/tree-ssa-ccp.cc
+++ b/gcc/tree-ssa-ccp.cc
@@ -2994,14 +2994,17 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_ccp (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass * clone () final override { return new pass_ccp (m_ctxt); }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
nonzero_p = param;
}
- virtual bool gate (function *) { return flag_tree_ccp != 0; }
- virtual unsigned int execute (function *) { return do_ssa_ccp (nonzero_p); }
+ bool gate (function *) final override { return flag_tree_ccp != 0; }
+ unsigned int execute (function *) final override
+ {
+ return do_ssa_ccp (nonzero_p);
+ }
private:
/* Determines whether the pass instance records nonzero bits. */
@@ -4202,8 +4205,8 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_fold_builtins (m_ctxt); }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_fold_builtins (m_ctxt); }
+ unsigned int execute (function *) final override;
}; // class pass_fold_builtins
@@ -4553,9 +4556,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_post_ipa_warn (m_ctxt); }
- virtual bool gate (function *) { return warn_nonnull != 0; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_post_ipa_warn (m_ctxt); }
+ bool gate (function *) final override { return warn_nonnull != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_fold_builtins
diff --git a/gcc/tree-ssa-copy.cc b/gcc/tree-ssa-copy.cc
index 050a6d1..782ceb5 100644
--- a/gcc/tree-ssa-copy.cc
+++ b/gcc/tree-ssa-copy.cc
@@ -642,9 +642,12 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_copy_prop (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_copy_prop != 0; }
- virtual unsigned int execute (function *) { return execute_copy_prop (); }
+ opt_pass * clone () final override { return new pass_copy_prop (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_copy_prop != 0; }
+ unsigned int execute (function *) final override
+ {
+ return execute_copy_prop ();
+ }
}; // class pass_copy_prop
diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc
index a6b2840..daf0782 100644
--- a/gcc/tree-ssa-dce.cc
+++ b/gcc/tree-ssa-dce.cc
@@ -1026,7 +1026,8 @@ remove_dead_phis (basic_block bb)
{
/* Virtual PHI nodes with one or identical arguments
can be removed. */
- if (degenerate_phi_p (phi))
+ if (!loops_state_satisfies_p (LOOP_CLOSED_SSA)
+ && degenerate_phi_p (phi))
{
tree vdef = gimple_phi_result (phi);
tree vuse = gimple_phi_arg_def (phi, 0);
@@ -1974,9 +1975,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_dce (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_dce != 0; }
- virtual unsigned int execute (function *) { return tree_ssa_dce (); }
+ opt_pass * clone () final override { return new pass_dce (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_dce != 0; }
+ unsigned int execute (function *) final override { return tree_ssa_dce (); }
}; // class pass_dce
@@ -2011,14 +2012,14 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_cd_dce (m_ctxt); }
- void set_pass_param (unsigned n, bool param)
+ opt_pass * clone () final override { return new pass_cd_dce (m_ctxt); }
+ void set_pass_param (unsigned n, bool param) final override
{
gcc_assert (n == 0);
update_address_taken_p = param;
}
- virtual bool gate (function *) { return flag_tree_dce != 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_tree_dce != 0; }
+ unsigned int execute (function *) final override
{
return (tree_ssa_cd_dce ()
| (update_address_taken_p ? TODO_update_address_taken : 0));
@@ -2060,6 +2061,13 @@ simple_dce_from_worklist (bitmap worklist)
if (gimple_has_side_effects (t))
continue;
+ /* The defining statement needs to be defining only this name.
+ ASM is the only statement that can define more than one
+ (non-virtual) name. */
+ if (is_a<gasm *>(t)
+ && !single_ssa_def_operand (t, SSA_OP_DEF))
+ continue;
+
/* Don't remove statements that are needed for non-call
eh to work. */
if (stmt_unremovable_because_of_non_call_eh_p (cfun, t))
diff --git a/gcc/tree-ssa-dom.cc b/gcc/tree-ssa-dom.cc
index 9a84321..2bc2c3d 100644
--- a/gcc/tree-ssa-dom.cc
+++ b/gcc/tree-ssa-dom.cc
@@ -48,7 +48,8 @@ along with GCC; see the file COPYING3. If not see
#include "alloc-pool.h"
#include "tree-vrp.h"
#include "vr-values.h"
-#include "gimple-ssa-evrp-analyze.h"
+#include "gimple-range.h"
+#include "gimple-range-path.h"
#include "alias.h"
/* This file implements optimizations on the dominator tree. */
@@ -587,133 +588,63 @@ record_edge_info (basic_block bb)
class dom_jt_state : public jt_state
{
public:
- dom_jt_state (const_and_copies *copies, avail_exprs_stack *avails,
- evrp_range_analyzer *evrp)
- : m_copies (copies), m_avails (avails), m_evrp (evrp)
+ dom_jt_state (const_and_copies *copies, avail_exprs_stack *avails)
+ : m_copies (copies), m_avails (avails)
{
}
void push (edge e) override
{
m_copies->push_marker ();
m_avails->push_marker ();
- m_evrp->push_marker ();
jt_state::push (e);
}
void pop () override
{
m_copies->pop_to_marker ();
m_avails->pop_to_marker ();
- m_evrp->pop_to_marker ();
jt_state::pop ();
}
void register_equivs_edge (edge e) override
{
record_temporary_equivalences (e, m_copies, m_avails);
}
- void record_ranges_from_stmt (gimple *stmt, bool temporary) override
- {
- m_evrp->record_ranges_from_stmt (stmt, temporary);
- }
void register_equiv (tree dest, tree src, bool update) override;
private:
const_and_copies *m_copies;
avail_exprs_stack *m_avails;
- evrp_range_analyzer *m_evrp;
};
void
-dom_jt_state::register_equiv (tree dest, tree src, bool update)
+dom_jt_state::register_equiv (tree dest, tree src, bool)
{
m_copies->record_const_or_copy (dest, src);
-
- /* If requested, update the value range associated with DST, using
- the range from SRC. */
- if (update)
- {
- /* Get new VR we can pass to push_value_range. */
- value_range_equiv *new_vr = m_evrp->allocate_value_range_equiv ();
- new (new_vr) value_range_equiv ();
-
- /* There are three cases to consider:
-
- First if SRC is an SSA_NAME, then we can copy the value range
- from SRC into NEW_VR.
-
- Second if SRC is an INTEGER_CST, then we can just set NEW_VR
- to a singleton range. Note that even if SRC is a constant we
- need to set a suitable output range so that VR_UNDEFINED
- ranges do not leak through.
-
- Otherwise set NEW_VR to varying. This may be overly
- conservative. */
- if (TREE_CODE (src) == SSA_NAME)
- new_vr->deep_copy (m_evrp->get_value_range (src));
- else if (TREE_CODE (src) == INTEGER_CST)
- new_vr->set (src);
- else
- new_vr->set_varying (TREE_TYPE (src));
-
- /* This is a temporary range for DST, so push it. */
- m_evrp->push_value_range (dest, new_vr);
- }
}
-class dom_jt_simplifier : public jt_simplifier
+class dom_jt_simplifier : public hybrid_jt_simplifier
{
public:
- dom_jt_simplifier (vr_values *v, avail_exprs_stack *avails)
- : m_vr_values (v), m_avails (avails) { }
+ dom_jt_simplifier (avail_exprs_stack *avails, gimple_ranger *ranger,
+ path_range_query *query)
+ : hybrid_jt_simplifier (ranger, query), m_avails (avails) { }
private:
tree simplify (gimple *, gimple *, basic_block, jt_state *) override;
- vr_values *m_vr_values;
avail_exprs_stack *m_avails;
};
tree
dom_jt_simplifier::simplify (gimple *stmt, gimple *within_stmt,
- basic_block, jt_state *)
+ basic_block bb, jt_state *state)
{
/* First see if the conditional is in the hash table. */
tree cached_lhs = m_avails->lookup_avail_expr (stmt, false, true);
if (cached_lhs)
return cached_lhs;
- if (gcond *cond_stmt = dyn_cast <gcond *> (stmt))
- {
- simplify_using_ranges simplifier (m_vr_values);
- return simplifier.vrp_evaluate_conditional (gimple_cond_code (cond_stmt),
- gimple_cond_lhs (cond_stmt),
- gimple_cond_rhs (cond_stmt),
- within_stmt);
- }
- if (gswitch *switch_stmt = dyn_cast <gswitch *> (stmt))
- {
- tree op = gimple_switch_index (switch_stmt);
- if (TREE_CODE (op) != SSA_NAME)
- return NULL_TREE;
+ /* Otherwise call the ranger if possible. */
+ if (state)
+ return hybrid_jt_simplifier::simplify (stmt, within_stmt, bb, state);
- const value_range *vr = m_vr_values->get_value_range (op);
- return find_case_label_range (switch_stmt, vr);
- }
- if (gassign *assign_stmt = dyn_cast <gassign *> (stmt))
- {
- tree lhs = gimple_assign_lhs (assign_stmt);
- if (TREE_CODE (lhs) == SSA_NAME
- && (INTEGRAL_TYPE_P (TREE_TYPE (lhs))
- || POINTER_TYPE_P (TREE_TYPE (lhs)))
- && stmt_interesting_for_vrp (stmt))
- {
- edge dummy_e;
- tree dummy_tree;
- value_range_equiv new_vr;
- m_vr_values->extract_range_from_stmt (stmt, &dummy_e, &dummy_tree,
- &new_vr);
- tree singleton;
- if (new_vr.singleton_p (&singleton))
- return singleton;
- }
- }
return NULL;
}
@@ -723,12 +654,12 @@ public:
dom_opt_dom_walker (cdi_direction direction,
jump_threader *threader,
jt_state *state,
- evrp_range_analyzer *analyzer,
+ gimple_ranger *ranger,
const_and_copies *const_and_copies,
avail_exprs_stack *avail_exprs_stack)
: dom_walker (direction, REACHABLE_BLOCKS)
{
- m_evrp_range_analyzer = analyzer;
+ m_ranger = ranger;
m_state = state;
m_dummy_cond = gimple_build_cond (NE_EXPR, integer_zero_node,
integer_zero_node, NULL, NULL);
@@ -737,8 +668,8 @@ public:
m_threader = threader;
}
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
private:
@@ -755,11 +686,13 @@ private:
value. */
edge optimize_stmt (basic_block, gimple_stmt_iterator *, bool *);
+ void set_global_ranges_from_unreachable_edges (basic_block);
void test_for_singularity (gimple *, avail_exprs_stack *);
+ edge fold_cond (gcond *cond);
jump_threader *m_threader;
- evrp_range_analyzer *m_evrp_range_analyzer;
+ gimple_ranger *m_ranger;
jt_state *m_state;
};
@@ -793,14 +726,14 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_dominator (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass * clone () final override { return new pass_dominator (m_ctxt); }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
may_peel_loop_headers_p = param;
}
- virtual bool gate (function *) { return flag_tree_dom != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_tree_dom != 0; }
+ unsigned int execute (function *) final override;
private:
/* This flag is used to prevent loops from being peeled repeatedly in jump
@@ -856,18 +789,22 @@ pass_dominator::execute (function *fun)
record_edge_info (bb);
/* Recursively walk the dominator tree optimizing statements. */
- evrp_range_analyzer analyzer (true);
- dom_jt_simplifier simplifier (&analyzer, avail_exprs_stack);
- dom_jt_state state (const_and_copies, avail_exprs_stack, &analyzer);
+ gimple_ranger *ranger = enable_ranger (fun);
+ path_range_query path_query (/*resolve=*/true, ranger);
+ dom_jt_simplifier simplifier (avail_exprs_stack, ranger, &path_query);
+ dom_jt_state state (const_and_copies, avail_exprs_stack);
jump_threader threader (&simplifier, &state);
dom_opt_dom_walker walker (CDI_DOMINATORS,
&threader,
&state,
- &analyzer,
+ ranger,
const_and_copies,
avail_exprs_stack);
walker.walk (fun->cfg->x_entry_block_ptr);
+ ranger->export_global_ranges ();
+ disable_ranger (fun);
+
/* Look for blocks where we cleared EDGE_EXECUTABLE on an outgoing
edge. When found, remove jump threads which contain any outgoing
edge from the affected block. */
@@ -1252,6 +1189,77 @@ record_equivalences_from_phis (basic_block bb)
}
}
+/* Return true if all uses of NAME are dominated by STMT or feed STMT
+ via a chain of single immediate uses. */
+
+static bool
+all_uses_feed_or_dominated_by_stmt (tree name, gimple *stmt)
+{
+ use_operand_p use_p, use2_p;
+ imm_use_iterator iter;
+ basic_block stmt_bb = gimple_bb (stmt);
+
+ FOR_EACH_IMM_USE_FAST (use_p, iter, name)
+ {
+ gimple *use_stmt = USE_STMT (use_p), *use_stmt2;
+ if (use_stmt == stmt
+ || is_gimple_debug (use_stmt)
+ || (gimple_bb (use_stmt) != stmt_bb
+ && dominated_by_p (CDI_DOMINATORS,
+ gimple_bb (use_stmt), stmt_bb)))
+ continue;
+ while (use_stmt != stmt
+ && is_gimple_assign (use_stmt)
+ && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
+ && single_imm_use (gimple_assign_lhs (use_stmt),
+ &use2_p, &use_stmt2))
+ use_stmt = use_stmt2;
+ if (use_stmt != stmt)
+ return false;
+ }
+ return true;
+}
+
+/* Set global ranges that can be determined from the C->M edge:
+
+ <bb C>:
+ ...
+ if (something)
+ goto <bb N>;
+ else
+ goto <bb M>;
+ <bb N>:
+ __builtin_unreachable ();
+ <bb M>:
+*/
+
+void
+dom_opt_dom_walker::set_global_ranges_from_unreachable_edges (basic_block bb)
+{
+ edge pred_e = single_pred_edge_ignoring_loop_edges (bb, false);
+
+ if (!pred_e)
+ return;
+
+ gimple *stmt = last_stmt (pred_e->src);
+ tree name;
+ int_range_max r;
+ if (stmt
+ && gimple_code (stmt) == GIMPLE_COND
+ && (name = gimple_cond_lhs (stmt))
+ && TREE_CODE (name) == SSA_NAME
+ && r.supports_type_p (TREE_TYPE (name))
+ && assert_unreachable_fallthru_edge_p (pred_e)
+ && all_uses_feed_or_dominated_by_stmt (name, stmt)
+ && m_ranger->range_on_edge (r, pred_e, name)
+ && !r.varying_p ()
+ && !r.undefined_p ())
+ {
+ update_global_range (r, name);
+ maybe_set_nonzero_bits (pred_e, name);
+ }
+}
+
/* Record any equivalences created by the incoming edge to BB into
CONST_AND_COPIES and AVAIL_EXPRS_STACK. If BB has more than one
incoming edge, then no equivalence is created. */
@@ -1505,8 +1513,6 @@ dom_opt_dom_walker::before_dom_children (basic_block bb)
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "\n\nOptimizing block #%d\n\n", bb->index);
- m_evrp_range_analyzer->enter (bb);
-
/* Push a marker on the stacks of local information so that we know how
far to unwind when we finalize this block. */
m_avail_exprs_stack->push_marker ();
@@ -1514,6 +1520,7 @@ dom_opt_dom_walker::before_dom_children (basic_block bb)
record_equivalences_from_incoming_edge (bb, m_const_and_copies,
m_avail_exprs_stack);
+ set_global_ranges_from_unreachable_edges (bb);
/* PHI nodes can create equivalences too. */
record_equivalences_from_phis (bb);
@@ -1542,7 +1549,6 @@ dom_opt_dom_walker::before_dom_children (basic_block bb)
continue;
}
- m_state->record_ranges_from_stmt (gsi_stmt (gsi), false);
bool removed_p = false;
taken_edge = this->optimize_stmt (bb, &gsi, &removed_p);
if (!removed_p)
@@ -1590,7 +1596,6 @@ dom_opt_dom_walker::after_dom_children (basic_block bb)
m_threader->thread_outgoing_edges (bb);
m_avail_exprs_stack->pop_to_marker ();
m_const_and_copies->pop_to_marker ();
- m_evrp_range_analyzer->leave (bb);
}
/* Search for redundant computations in STMT. If any are found, then
@@ -1832,7 +1837,7 @@ cprop_operand (gimple *stmt, use_operand_p op_p, range_query *query)
val = SSA_NAME_VALUE (op);
if (!val)
{
- value_range r;
+ Value_Range r (TREE_TYPE (op));
tree single;
if (query->range_of_expr (r, op, stmt) && r.singleton_p (&single))
val = single;
@@ -2073,6 +2078,24 @@ reduce_vector_comparison_to_scalar_comparison (gimple *stmt)
}
}
+/* If possible, rewrite the conditional as TRUE or FALSE, and return
+ the taken edge. Otherwise, return NULL. */
+
+edge
+dom_opt_dom_walker::fold_cond (gcond *cond)
+{
+ simplify_using_ranges simplify (m_ranger);
+ if (simplify.fold_cond (cond))
+ {
+ basic_block bb = gimple_bb (cond);
+ if (gimple_cond_true_p (cond))
+ return find_taken_edge (bb, boolean_true_node);
+ if (gimple_cond_false_p (cond))
+ return find_taken_edge (bb, boolean_false_node);
+ }
+ return NULL;
+}
+
/* Optimize the statement in block BB pointed to by iterator SI.
We try to perform some simplistic global redundancy elimination and
@@ -2121,7 +2144,7 @@ dom_opt_dom_walker::optimize_stmt (basic_block bb, gimple_stmt_iterator *si,
opt_stats.num_stmts++;
/* Const/copy propagate into USES, VUSES and the RHS of VDEFs. */
- cprop_into_stmt (stmt, m_evrp_range_analyzer);
+ cprop_into_stmt (stmt, m_ranger);
/* If the statement has been modified with constant replacements,
fold its RHS before checking for redundant computations. */
@@ -2218,17 +2241,9 @@ dom_opt_dom_walker::optimize_stmt (basic_block bb, gimple_stmt_iterator *si,
IL because we've attached range information to new
SSA_NAMES. */
update_stmt_if_modified (stmt);
- edge taken_edge = NULL;
- simplify_using_ranges simpl (m_evrp_range_analyzer);
- simpl.vrp_visit_cond_stmt (as_a <gcond *> (stmt), &taken_edge);
+ edge taken_edge = fold_cond (as_a <gcond *> (stmt));
if (taken_edge)
{
- if (taken_edge->flags & EDGE_TRUE_VALUE)
- gimple_cond_make_true (as_a <gcond *> (stmt));
- else if (taken_edge->flags & EDGE_FALSE_VALUE)
- gimple_cond_make_false (as_a <gcond *> (stmt));
- else
- gcc_unreachable ();
gimple_set_modified (stmt, true);
update_stmt (stmt);
cfg_altered = true;
diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc
index ea50de7..8d1739a 100644
--- a/gcc/tree-ssa-dse.cc
+++ b/gcc/tree-ssa-dse.cc
@@ -1463,7 +1463,8 @@ dse_optimize_stmt (function *fun, gimple_stmt_iterator *gsi, sbitmap live_bytes)
gimple_call_set_lhs (stmt, NULL_TREE);
update_stmt (stmt);
}
- else
+ else if (!stmt_could_throw_p (fun, stmt)
+ || fun->can_delete_dead_exceptions)
delete_dead_or_redundant_assignment (gsi, "dead", need_eh_cleanup,
need_ab_cleanup);
}
@@ -1491,9 +1492,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_dse (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_dse != 0; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_dse (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_dse != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_dse
diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index c387e84..69567ab 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -3266,9 +3266,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_forwprop (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_forwprop; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_forwprop (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_forwprop; }
+ unsigned int execute (function *) final override;
}; // class pass_forwprop
diff --git a/gcc/tree-ssa-ifcombine.cc b/gcc/tree-ssa-ifcombine.cc
index 88a9f06..80c41c4 100644
--- a/gcc/tree-ssa-ifcombine.cc
+++ b/gcc/tree-ssa-ifcombine.cc
@@ -829,7 +829,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_tree_ifcombine
diff --git a/gcc/tree-ssa-loop-ch.cc b/gcc/tree-ssa-loop-ch.cc
index 26d96c0..3b91a89 100644
--- a/gcc/tree-ssa-loop-ch.cc
+++ b/gcc/tree-ssa-loop-ch.cc
@@ -54,8 +54,7 @@ entry_loop_condition_is_static (class loop *l, path_range_query *query)
edge e = loop_preheader_edge (l);
gcond *last = safe_dyn_cast <gcond *> (last_stmt (e->dest));
- if (!last
- || !irange::supports_p (TREE_TYPE (gimple_cond_lhs (last))))
+ if (!last)
return false;
edge true_e, false_e;
@@ -311,16 +310,16 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_ch != 0; }
+ bool gate (function *) final override { return flag_tree_ch != 0; }
/* Initialize and finalize loop structures, copying headers inbetween. */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
- opt_pass * clone () { return new pass_ch (m_ctxt); }
+ opt_pass * clone () final override { return new pass_ch (m_ctxt); }
protected:
/* ch_base method: */
- virtual bool process_loop_p (class loop *loop);
+ bool process_loop_p (class loop *loop) final override;
}; // class pass_ch
const pass_data pass_data_ch_vect =
@@ -347,18 +346,18 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
return flag_tree_ch != 0
&& (flag_tree_loop_vectorize != 0 || fun->has_force_vectorize_loops);
}
/* Just copy headers, no initialization/finalization of loop structures. */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
protected:
/* ch_base method: */
- virtual bool process_loop_p (class loop *loop);
+ bool process_loop_p (class loop *loop) final override;
}; // class pass_ch_vect
/* For all loops, copy the condition at the end of the loop body in front
diff --git a/gcc/tree-ssa-loop-im.cc b/gcc/tree-ssa-loop-im.cc
index bfd6126..2ea8150 100644
--- a/gcc/tree-ssa-loop-im.cc
+++ b/gcc/tree-ssa-loop-im.cc
@@ -3600,9 +3600,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_lim (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_loop_im != 0; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_lim (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_loop_im != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_lim
diff --git a/gcc/tree-ssa-loop-ivcanon.cc b/gcc/tree-ssa-loop-ivcanon.cc
index 2ee00a3..766bffa 100644
--- a/gcc/tree-ssa-loop-ivcanon.cc
+++ b/gcc/tree-ssa-loop-ivcanon.cc
@@ -505,9 +505,8 @@ remove_exits_and_undefined_stmts (class loop *loop, unsigned int npeeled)
&& wi::ltu_p (elt->bound, npeeled))
{
gimple_stmt_iterator gsi = gsi_for_stmt (elt->stmt);
- gcall *stmt = gimple_build_call
- (builtin_decl_implicit (BUILT_IN_UNREACHABLE), 0);
- gimple_set_location (stmt, gimple_location (elt->stmt));
+ location_t loc = gimple_location (elt->stmt);
+ gcall *stmt = gimple_build_builtin_unreachable (loc);
gsi_insert_before (&gsi, stmt, GSI_NEW_STMT);
split_block (gimple_bb (stmt), stmt);
changed = true;
@@ -641,7 +640,7 @@ unloop_loops (bitmap loop_closed_ssa_invalidated,
/* Create new basic block for the latch edge destination and wire
it in. */
- stmt = gimple_build_call (builtin_decl_implicit (BUILT_IN_UNREACHABLE), 0);
+ stmt = gimple_build_builtin_unreachable (locus);
latch_edge = make_edge (latch, create_basic_block (NULL, NULL, latch), flags);
latch_edge->probability = profile_probability::never ();
latch_edge->flags |= flags;
@@ -1539,8 +1538,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_loop_ivcanon != 0; }
- virtual unsigned int execute (function *fun);
+ bool gate (function *) final override { return flag_tree_loop_ivcanon != 0; }
+ unsigned int execute (function *fun) final override;
}; // class pass_iv_canon
@@ -1586,7 +1585,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_complete_unroll
@@ -1644,8 +1643,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize >= 2; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return optimize >= 2; }
+ unsigned int execute (function *) final override;
}; // class pass_complete_unrolli
diff --git a/gcc/tree-ssa-loop-ivopts.cc b/gcc/tree-ssa-loop-ivopts.cc
index 549168a..a6f926a 100644
--- a/gcc/tree-ssa-loop-ivopts.cc
+++ b/gcc/tree-ssa-loop-ivopts.cc
@@ -469,7 +469,7 @@ struct iv_cand
bitmap inv_vars; /* The list of invariant ssa_vars used in step of the
iv_cand. */
bitmap inv_exprs; /* If step is more complicated than a single ssa_var,
- hanlde it as a new invariant expression which will
+ handle it as a new invariant expression which will
be hoisted out of loop. */
struct iv *orig_iv; /* The original iv if this cand is added from biv with
smaller type. */
diff --git a/gcc/tree-ssa-loop-manip.cc b/gcc/tree-ssa-loop-manip.cc
index 6696425..c531f1f 100644
--- a/gcc/tree-ssa-loop-manip.cc
+++ b/gcc/tree-ssa-loop-manip.cc
@@ -183,12 +183,14 @@ find_sibling_superloop (class loop *use_loop, class loop *def_loop)
/* DEF_BB is a basic block containing a DEF that needs rewriting into
loop-closed SSA form. USE_BLOCKS is the set of basic blocks containing
uses of DEF that "escape" from the loop containing DEF_BB (i.e. blocks in
- USE_BLOCKS are dominated by DEF_BB but not in the loop father of DEF_B).
+ USE_BLOCKS are dominated by DEF_BB but not in the loop father of DEF_BB).
ALL_EXITS[I] is the set of all basic blocks that exit loop I.
+ DEF_LOOP_EXITS is a bitmap of loop exit blocks that exit the loop
+ containing DEF_BB or its outer loops.
- Compute the subset of LOOP_EXITS that exit the loop containing DEF_BB
- or one of its loop fathers, in which DEF is live. This set is returned
- in the bitmap LIVE_EXITS.
+ Compute the subset of loop exit destinations that exit the loop
+ containing DEF_BB or one of its loop fathers, in which DEF is live.
+ This set is returned in the bitmap LIVE_EXITS.
Instead of computing the complete livein set of the def, we use the loop
nesting tree as a form of poor man's structure analysis. This greatly
@@ -197,18 +199,17 @@ find_sibling_superloop (class loop *use_loop, class loop *def_loop)
static void
compute_live_loop_exits (bitmap live_exits, bitmap use_blocks,
- bitmap *loop_exits, basic_block def_bb)
+ basic_block def_bb, bitmap def_loop_exits)
{
unsigned i;
bitmap_iterator bi;
class loop *def_loop = def_bb->loop_father;
unsigned def_loop_depth = loop_depth (def_loop);
- bitmap def_loop_exits;
/* Normally the work list size is bounded by the number of basic
blocks in the largest loop. We don't know this number, but we
can be fairly sure that it will be relatively small. */
- auto_vec<basic_block> worklist (MAX (8, n_basic_blocks_for_fn (cfun) / 128));
+ auto_vec<basic_block, 8> worklist (MAX (8, n_basic_blocks_for_fn (cfun) / 128));
EXECUTE_IF_SET_IN_BITMAP (use_blocks, 0, i, bi)
{
@@ -272,13 +273,7 @@ compute_live_loop_exits (bitmap live_exits, bitmap use_blocks,
}
}
- def_loop_exits = BITMAP_ALLOC (&loop_renamer_obstack);
- for (class loop *loop = def_loop;
- loop != current_loops->tree_root;
- loop = loop_outer (loop))
- bitmap_ior_into (def_loop_exits, loop_exits[loop->num]);
bitmap_and_into (live_exits, def_loop_exits);
- BITMAP_FREE (def_loop_exits);
}
/* Add a loop-closing PHI for VAR in basic block EXIT. */
@@ -319,59 +314,85 @@ add_exit_phi (basic_block exit, tree var)
}
/* Add exit phis for VAR that is used in LIVEIN.
- Exits of the loops are stored in LOOP_EXITS. */
+ Exits of the loops are stored in LOOP_EXITS. Returns the number
+ of PHIs added for VAR. */
-static void
-add_exit_phis_var (tree var, bitmap use_blocks, bitmap *loop_exits)
+static unsigned
+add_exit_phis_var (tree var, bitmap use_blocks, bitmap def_loop_exits)
{
unsigned index;
bitmap_iterator bi;
basic_block def_bb = gimple_bb (SSA_NAME_DEF_STMT (var));
- bitmap live_exits = BITMAP_ALLOC (&loop_renamer_obstack);
gcc_checking_assert (! bitmap_bit_p (use_blocks, def_bb->index));
- compute_live_loop_exits (live_exits, use_blocks, loop_exits, def_bb);
+ auto_bitmap live_exits (&loop_renamer_obstack);
+ compute_live_loop_exits (live_exits, use_blocks, def_bb, def_loop_exits);
+ unsigned cnt = 0;
EXECUTE_IF_SET_IN_BITMAP (live_exits, 0, index, bi)
{
add_exit_phi (BASIC_BLOCK_FOR_FN (cfun, index), var);
+ cnt++;
}
+ return cnt;
+}
- BITMAP_FREE (live_exits);
+static int
+loop_name_cmp (const void *p1, const void *p2)
+{
+ auto l1 = (const std::pair<int, int> *)p1;
+ auto l2 = (const std::pair<int, int> *)p2;
+ if (l1->first < l2->first)
+ return -1;
+ else if (l1->first > l2->first)
+ return 1;
+ return 0;
}
/* Add exit phis for the names marked in NAMES_TO_RENAME.
Exits of the loops are stored in EXITS. Sets of blocks where the ssa
- names are used are stored in USE_BLOCKS. */
+ names are used are stored in USE_BLOCKS. Returns whether any name
+ required multiple LC PHI nodes. */
-static void
-add_exit_phis (bitmap names_to_rename, bitmap *use_blocks, bitmap *loop_exits)
+static bool
+add_exit_phis (bitmap names_to_rename, bitmap *use_blocks)
{
unsigned i;
bitmap_iterator bi;
+ bool multiple_p = false;
+ /* Sort names_to_rename after definition loop so we can avoid re-computing
+ def_loop_exits. */
+ auto_vec<std::pair<int, int> > names (bitmap_count_bits (names_to_rename));
EXECUTE_IF_SET_IN_BITMAP (names_to_rename, 0, i, bi)
{
- add_exit_phis_var (ssa_name (i), use_blocks[i], loop_exits);
+ tree name = ssa_name (i);
+ loop_p def_loop = gimple_bb (SSA_NAME_DEF_STMT (name))->loop_father;
+ names.quick_push (std::make_pair (def_loop->num, i));
}
-}
-
-/* Fill the array of bitmaps LOOP_EXITS with all loop exit edge targets. */
-
-static void
-get_loops_exits (bitmap *loop_exits)
-{
- unsigned j;
- edge e;
+ names.qsort (loop_name_cmp);
- for (auto loop : loops_list (cfun, 0))
+ auto_bitmap def_loop_exits (&loop_renamer_obstack);
+ loop_p last_def_loop = NULL;
+ for (auto p : names)
{
- auto_vec<edge> exit_edges = get_loop_exit_edges (loop);
- loop_exits[loop->num] = BITMAP_ALLOC (&loop_renamer_obstack);
- FOR_EACH_VEC_ELT (exit_edges, j, e)
- bitmap_set_bit (loop_exits[loop->num], e->dest->index);
+ loop_p def_loop = get_loop (cfun, p.first);
+ if (def_loop != last_def_loop)
+ {
+ bitmap_clear (def_loop_exits);
+ last_def_loop = def_loop;
+ for (class loop *loop = def_loop; loop != current_loops->tree_root;
+ loop = loop_outer (loop))
+ for (auto exit = loop->exits->next; exit->e; exit = exit->next)
+ bitmap_set_bit (def_loop_exits, exit->e->dest->index);
+ }
+ if (add_exit_phis_var (ssa_name (p.second), use_blocks[p.second],
+ def_loop_exits) > 1)
+ multiple_p = true;
}
+
+ return multiple_p;
}
/* For USE in BB, if it is used outside of the loop it is defined in,
@@ -498,94 +519,6 @@ find_uses_to_rename (bitmap changed_bbs, bitmap *use_blocks, bitmap need_phis,
find_uses_to_rename_bb (bb, use_blocks, need_phis, use_flags);
}
-/* Mark uses of DEF that are used outside of the loop they are defined in for
- rewrite. Record the set of blocks in which the ssa names are used to
- USE_BLOCKS. Record the SSA names that will need exit PHIs in NEED_PHIS. */
-
-static void
-find_uses_to_rename_def (tree def, bitmap *use_blocks, bitmap need_phis)
-{
- gimple *use_stmt;
- imm_use_iterator imm_iter;
-
- FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, def)
- {
- if (is_gimple_debug (use_stmt))
- continue;
-
- basic_block use_bb = gimple_bb (use_stmt);
-
- use_operand_p use_p;
- FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
- {
- if (gimple_code (use_stmt) == GIMPLE_PHI)
- {
- edge e = gimple_phi_arg_edge (as_a <gphi *> (use_stmt),
- PHI_ARG_INDEX_FROM_USE (use_p));
- use_bb = e->src;
- }
- find_uses_to_rename_use (use_bb, USE_FROM_PTR (use_p), use_blocks,
- need_phis);
- }
- }
-}
-
-/* Marks names matching USE_FLAGS that are defined in LOOP and used outside of
- it for rewrite. Records the set of blocks in which the ssa names are used to
- USE_BLOCKS. Record the SSA names that will need exit PHIs in NEED_PHIS. */
-
-static void
-find_uses_to_rename_in_loop (class loop *loop, bitmap *use_blocks,
- bitmap need_phis, int use_flags)
-{
- bool do_virtuals = (use_flags & SSA_OP_VIRTUAL_USES) != 0;
- bool do_nonvirtuals = (use_flags & SSA_OP_USE) != 0;
- int def_flags = ((do_virtuals ? SSA_OP_VIRTUAL_DEFS : 0)
- | (do_nonvirtuals ? SSA_OP_DEF : 0));
-
-
- basic_block *bbs = get_loop_body (loop);
-
- for (unsigned int i = 0; i < loop->num_nodes; i++)
- {
- basic_block bb = bbs[i];
-
- for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi);
- gsi_next (&bsi))
- {
- gphi *phi = bsi.phi ();
- tree res = gimple_phi_result (phi);
- bool virtual_p = virtual_operand_p (res);
- if ((virtual_p && do_virtuals)
- || (!virtual_p && do_nonvirtuals))
- find_uses_to_rename_def (res, use_blocks, need_phis);
- }
-
- for (gimple_stmt_iterator bsi = gsi_start_bb (bb); !gsi_end_p (bsi);
- gsi_next (&bsi))
- {
- gimple *stmt = gsi_stmt (bsi);
- /* FOR_EACH_SSA_TREE_OPERAND iterator does not allows
- SSA_OP_VIRTUAL_DEFS only. */
- if (def_flags == SSA_OP_VIRTUAL_DEFS)
- {
- tree vdef = gimple_vdef (stmt);
- if (vdef != NULL)
- find_uses_to_rename_def (vdef, use_blocks, need_phis);
- }
- else
- {
- tree var;
- ssa_op_iter iter;
- FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, def_flags)
- find_uses_to_rename_def (var, use_blocks, need_phis);
- }
- }
- }
-
- XDELETEVEC (bbs);
-}
-
/* Rewrites the program into a loop closed ssa form -- i.e. inserts extra
phi nodes to ensure that no variable is used outside the loop it is
defined in.
@@ -615,8 +548,7 @@ find_uses_to_rename_in_loop (class loop *loop, bitmap *use_blocks,
is not well-behaved, while the second one is an induction variable with
base 99 and step 1.
- If LOOP is non-null, only rewrite uses that have defs in LOOP. Otherwise,
- if CHANGED_BBS is not NULL, we look for uses outside loops only in the
+ If CHANGED_BBS is not NULL, we look for uses outside loops only in the
basic blocks in this set.
USE_FLAGS allows us to specify whether we want virtual, non-virtual or
@@ -625,9 +557,9 @@ find_uses_to_rename_in_loop (class loop *loop, bitmap *use_blocks,
UPDATE_FLAG is used in the call to update_ssa. See
TODO_update_ssa* for documentation. */
-void
+static void
rewrite_into_loop_closed_ssa_1 (bitmap changed_bbs, unsigned update_flag,
- int use_flags, class loop *loop)
+ int use_flags)
{
bitmap *use_blocks;
bitmap names_to_rename;
@@ -651,59 +583,47 @@ rewrite_into_loop_closed_ssa_1 (bitmap changed_bbs, unsigned update_flag,
because we know that we will only have entries for the SSA names
in NAMES_TO_RENAME. */
use_blocks = XNEWVEC (bitmap, num_ssa_names);
-
- if (loop != NULL)
- {
- gcc_assert (changed_bbs == NULL);
- find_uses_to_rename_in_loop (loop, use_blocks, names_to_rename,
- use_flags);
- }
- else
- {
- gcc_assert (loop == NULL);
- find_uses_to_rename (changed_bbs, use_blocks, names_to_rename, use_flags);
- }
+ find_uses_to_rename (changed_bbs, use_blocks, names_to_rename, use_flags);
if (!bitmap_empty_p (names_to_rename))
{
- /* An array of bitmaps where LOOP_EXITS[I] is the set of basic blocks
- that are the destination of an edge exiting loop number I. */
- bitmap *loop_exits = XNEWVEC (bitmap, number_of_loops (cfun));
- get_loops_exits (loop_exits);
+ bool release_recorded_exits_p = false;
+ if (!loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS))
+ {
+ /* Doing one scan over the whole function is cheaper than
+ traversing the loop tree and gathering BBs of each loop. */
+ record_loop_exits ();
+ release_recorded_exits_p = true;
+ }
/* Add the PHI nodes on exits of the loops for the names we need to
- rewrite. */
- add_exit_phis (names_to_rename, use_blocks, loop_exits);
+ rewrite. When no variable required multiple LC PHI nodes to be
+ inserted then we know that all uses outside of the loop are
+ dominated by the single LC SSA definition and no further PHI
+ node insertions are required. */
+ bool need_phis_p = add_exit_phis (names_to_rename, use_blocks);
- free (loop_exits);
+ if (release_recorded_exits_p)
+ release_recorded_exits (cfun);
/* Fix up all the names found to be used outside their original
loops. */
- update_ssa (TODO_update_ssa);
+ update_ssa (need_phis_p ? TODO_update_ssa : TODO_update_ssa_no_phi);
}
bitmap_obstack_release (&loop_renamer_obstack);
free (use_blocks);
}
-/* Rewrites the non-virtual defs and uses into a loop closed ssa form. If
- CHANGED_BBS is not NULL, we look for uses outside loops only in the basic
+/* Rewrites the defs and uses into a loop closed ssa form.
+ If CHANGED_BBS is not NULL, we look for uses outside loops only in the basic
blocks in this set. UPDATE_FLAG is used in the call to update_ssa. See
TODO_update_ssa* for documentation. */
void
rewrite_into_loop_closed_ssa (bitmap changed_bbs, unsigned update_flag)
{
- rewrite_into_loop_closed_ssa_1 (changed_bbs, update_flag, SSA_OP_USE, NULL);
-}
-
-/* Rewrites virtual defs and uses with def in LOOP into loop closed ssa
- form. */
-
-void
-rewrite_virtuals_into_loop_closed_ssa (class loop *loop)
-{
- rewrite_into_loop_closed_ssa_1 (NULL, 0, SSA_OP_VIRTUAL_USES, loop);
+ rewrite_into_loop_closed_ssa_1 (changed_bbs, update_flag, SSA_OP_ALL_USES);
}
/* Check invariants of the loop closed ssa form for the def in DEF_BB. */
@@ -736,8 +656,7 @@ check_loop_closed_ssa_bb (basic_block bb)
{
gphi *phi = bsi.phi ();
- if (!virtual_operand_p (PHI_RESULT (phi)))
- check_loop_closed_ssa_def (bb, PHI_RESULT (phi));
+ check_loop_closed_ssa_def (bb, PHI_RESULT (phi));
}
for (gimple_stmt_iterator bsi = gsi_start_nondebug_bb (bb); !gsi_end_p (bsi);
@@ -747,7 +666,7 @@ check_loop_closed_ssa_bb (basic_block bb)
tree var;
gimple *stmt = gsi_stmt (bsi);
- FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_DEF)
+ FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_DEFS)
check_loop_closed_ssa_def (bb, var);
}
}
@@ -1421,8 +1340,8 @@ tree_transform_and_unroll_loop (class loop *loop, unsigned factor,
}
basic_block rest = new_exit->dest;
- new_exit->probability = profile_probability::always ()
- .apply_scale (1, new_est_niter + 1);
+ new_exit->probability
+ = (profile_probability::always () / (new_est_niter + 1));
rest->count += new_exit->count ();
@@ -1463,8 +1382,7 @@ tree_transform_and_unroll_loop (class loop *loop, unsigned factor,
&& TREE_CODE (desc->niter) == INTEGER_CST)
{
/* The + 1 converts latch counts to iteration counts. */
- profile_count new_header_count
- = (in_count.apply_scale (new_est_niter + 1, 1));
+ profile_count new_header_count = in_count * (new_est_niter + 1);
basic_block *body = get_loop_body (loop);
scale_bbs_frequencies_profile_count (body, loop->num_nodes,
new_header_count,
@@ -1502,8 +1420,8 @@ tree_transform_and_unroll_loop (class loop *loop, unsigned factor,
e->dest->count / e->src->count ~= new e->probability
for every outgoing edge e of NEW_EXIT->src. */
- profile_probability new_exit_prob = profile_probability::always ()
- .apply_scale (1, new_est_niter + 1);
+ profile_probability new_exit_prob
+ = profile_probability::always () / (new_est_niter + 1);
change_edge_frequency (new_exit, new_exit_prob);
}
diff --git a/gcc/tree-ssa-loop-manip.h b/gcc/tree-ssa-loop-manip.h
index 0029319..924cac0 100644
--- a/gcc/tree-ssa-loop-manip.h
+++ b/gcc/tree-ssa-loop-manip.h
@@ -24,10 +24,7 @@ typedef void (*transform_callback)(class loop *, void *);
extern void create_iv (tree, tree, tree, class loop *, gimple_stmt_iterator *,
bool, tree *, tree *);
-extern void rewrite_into_loop_closed_ssa_1 (bitmap, unsigned, int,
- class loop *);
extern void rewrite_into_loop_closed_ssa (bitmap, unsigned);
-extern void rewrite_virtuals_into_loop_closed_ssa (class loop *);
extern void verify_loop_closed_ssa (bool, class loop * = NULL);
static inline void
diff --git a/gcc/tree-ssa-loop-prefetch.cc b/gcc/tree-ssa-loop-prefetch.cc
index aebd7c9..8f190ae 100644
--- a/gcc/tree-ssa-loop-prefetch.cc
+++ b/gcc/tree-ssa-loop-prefetch.cc
@@ -2069,8 +2069,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_prefetch_loop_arrays > 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override
+ {
+ return flag_prefetch_loop_arrays > 0;
+ }
+ unsigned int execute (function *) final override;
}; // class pass_loop_prefetch
diff --git a/gcc/tree-ssa-loop-split.cc b/gcc/tree-ssa-loop-split.cc
index b93ee4c..bccf621 100644
--- a/gcc/tree-ssa-loop-split.cc
+++ b/gcc/tree-ssa-loop-split.cc
@@ -491,8 +491,6 @@ static void
fix_loop_bb_probability (class loop *loop1, class loop *loop2, edge true_edge,
edge false_edge)
{
- update_ssa (TODO_update_ssa);
-
/* Proportion first loop's bb counts except those dominated by true
branch to avoid drop 1s down. */
basic_block *bbs1, *bbs2;
@@ -1668,7 +1666,8 @@ tree_ssa_split_loops (void)
if (loop->aux)
{
/* If any of our inner loops was split, don't split us,
- and mark our containing loop as having had splits as well. */
+ and mark our containing loop as having had splits as well.
+ This allows for delaying SSA update. */
loop_outer (loop)->aux = loop;
continue;
}
@@ -1724,8 +1723,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_split_loops != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_split_loops != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_loop_split
diff --git a/gcc/tree-ssa-loop-unswitch.cc b/gcc/tree-ssa-loop-unswitch.cc
index 50b66c1..7d6781d 100644
--- a/gcc/tree-ssa-loop-unswitch.cc
+++ b/gcc/tree-ssa-loop-unswitch.cc
@@ -139,7 +139,7 @@ struct unswitch_predicate
auto range_op = range_op_handler (code, TREE_TYPE (lhs));
int_range<2> rhs_range (TREE_TYPE (rhs));
if (CONSTANT_CLASS_P (rhs))
- rhs_range.set (rhs);
+ rhs_range.set (rhs, rhs);
if (!range_op.op1_range (true_range, TREE_TYPE (lhs),
int_range<2> (boolean_true_node,
boolean_true_node), rhs_range)
@@ -535,7 +535,7 @@ find_unswitching_predicates_for_bb (basic_block bb, class loop *loop,
else
{
cmp = fold_build2 (EQ_EXPR, boolean_type_node, idx, low);
- lab_range.set (low);
+ lab_range.set (low, low);
}
/* Combine the expression with the existing one. */
@@ -980,7 +980,7 @@ tree_unswitch_single_loop (class loop *loop, dump_user_location_t loc,
free_original_copy_tables ();
/* Update the SSA form after unswitching. */
- update_ssa (TODO_update_ssa);
+ update_ssa (TODO_update_ssa_no_phi);
/* Invoke itself on modified loops. */
bitmap handled_copy = BITMAP_ALLOC (NULL);
@@ -1068,8 +1068,6 @@ tree_unswitch_outer_loop (class loop *loop)
auto_vec<gimple *> dbg_to_reset;
while ((guard = find_loop_guard (loop, dbg_to_reset)))
{
- if (! changed)
- rewrite_virtuals_into_loop_closed_ssa (loop);
hoist_guard (loop, guard);
for (gimple *debug_stmt : dbg_to_reset)
{
@@ -1614,8 +1612,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_unswitch_loops != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_unswitch_loops != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_tree_unswitch
diff --git a/gcc/tree-ssa-loop.cc b/gcc/tree-ssa-loop.cc
index 73aa466..1c058b0 100644
--- a/gcc/tree-ssa-loop.cc
+++ b/gcc/tree-ssa-loop.cc
@@ -67,9 +67,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_loop_optimize; }
+ bool gate (function *) final override { return flag_tree_loop_optimize; }
- virtual unsigned int execute (function *fn);
+ unsigned int execute (function *fn) final override;
}; // class pass_fix_loops
unsigned int
@@ -134,7 +134,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fn) { return gate_loop (fn); }
+ bool gate (function *fn) final override { return gate_loop (fn); }
}; // class pass_tree_loop
@@ -189,7 +189,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fn) { return gate_oacc_kernels (fn); }
+ bool gate (function *fn) final override { return gate_oacc_kernels (fn); }
}; // class pass_oacc_kernels
@@ -226,7 +226,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize
&& flag_openacc
@@ -303,7 +303,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fn) { return !gate_loop (fn); }
+ bool gate (function *fn) final override { return !gate_loop (fn); }
}; // class pass_tree_no_loop
@@ -341,7 +341,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_tree_loop_init
@@ -395,8 +395,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_scev_cprop; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_tree_scev_cprop; }
+ unsigned int execute (function *) final override;
}; // class pass_scev_cprop
@@ -446,8 +446,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_ivopts != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_ivopts != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_iv_optimize
@@ -503,7 +503,10 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *) { return tree_ssa_loop_done (); }
+ unsigned int execute (function *) final override
+ {
+ return tree_ssa_loop_done ();
+ }
}; // class pass_tree_loop_done
diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc
index ce1df01..a4492c9 100644
--- a/gcc/tree-ssa-math-opts.cc
+++ b/gcc/tree-ssa-math-opts.cc
@@ -920,8 +920,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return optimize && flag_reciprocal_math; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override
+ {
+ return optimize && flag_reciprocal_math;
+ }
+ unsigned int execute (function *) final override;
}; // class pass_cse_reciprocals
@@ -2249,14 +2252,14 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* We no longer require either sincos or cexp, since powi expansion
piggybacks on this pass. */
return optimize;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_cse_sincos
@@ -4892,12 +4895,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_expensive_optimizations && optimize;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_optimize_widening_mul
@@ -4915,7 +4918,7 @@ public:
/* The actual actions performed in the walk. */
- virtual void after_dom_children (basic_block);
+ void after_dom_children (basic_block) final override;
/* Set of results of chains of multiply and add statement combinations that
were not transformed into FMAs because of active deferring. */
diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc
index e61d973..2f4bebe 100644
--- a/gcc/tree-ssa-phiopt.cc
+++ b/gcc/tree-ssa-phiopt.cc
@@ -2978,8 +2978,8 @@ public:
: dom_walker (direction), m_nontrapping (ps), m_seen_refs (128)
{}
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
private:
@@ -3960,14 +3960,14 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_phiopt (m_ctxt); }
- void set_pass_param (unsigned n, bool param)
+ opt_pass * clone () final override { return new pass_phiopt (m_ctxt); }
+ void set_pass_param (unsigned n, bool param) final override
{
gcc_assert (n == 0);
early_p = param;
}
- virtual bool gate (function *) { return flag_ssa_phiopt; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_ssa_phiopt; }
+ unsigned int execute (function *) final override
{
return tree_ssa_phiopt_worker (false,
!early_p ? gate_hoist_loads () : false,
@@ -4009,8 +4009,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_cselim; }
- virtual unsigned int execute (function *) { return tree_ssa_cs_elim (); }
+ bool gate (function *) final override { return flag_tree_cselim; }
+ unsigned int execute (function *) final override
+ {
+ return tree_ssa_cs_elim ();
+ }
}; // class pass_cselim
diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc
index 7bbfc8c..965f1d1 100644
--- a/gcc/tree-ssa-phiprop.cc
+++ b/gcc/tree-ssa-phiprop.cc
@@ -476,8 +476,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_phiprop; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return flag_tree_phiprop; }
+ unsigned int execute (function *) final override;
}; // class pass_phiprop
diff --git a/gcc/tree-ssa-pre.cc b/gcc/tree-ssa-pre.cc
index 09a5e20..e029bd3 100644
--- a/gcc/tree-ssa-pre.cc
+++ b/gcc/tree-ssa-pre.cc
@@ -4339,9 +4339,9 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{ return flag_tree_pre != 0 || flag_code_hoisting != 0; }
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_pre
diff --git a/gcc/tree-ssa-propagate.cc b/gcc/tree-ssa-propagate.cc
index 5983f02..9dc4bfd 100644
--- a/gcc/tree-ssa-propagate.cc
+++ b/gcc/tree-ssa-propagate.cc
@@ -679,8 +679,8 @@ public:
BITMAP_FREE (need_eh_cleanup);
}
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block bb)
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block bb) final override
{
substitute_and_fold_engine->post_fold_bb (bb);
}
@@ -1272,7 +1272,21 @@ clean_up_loop_closed_phi (function *fun)
rhs = gimple_phi_arg_def (phi, 0);
lhs = gimple_phi_result (phi);
- if (rhs && may_propagate_copy (lhs, rhs))
+ if (virtual_operand_p (rhs))
+ {
+ imm_use_iterator iter;
+ use_operand_p use_p;
+ gimple *stmt;
+
+ FOR_EACH_IMM_USE_STMT (stmt, iter, lhs)
+ FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
+ SET_USE (use_p, rhs);
+
+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs) = 1;
+ remove_phi_node (&gsi, true);
+ }
+ else if (may_propagate_copy (lhs, rhs))
{
/* Dump details. */
if (dump_file && (dump_flags & TDF_DETAILS))
diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc
index 406523b..e13e2cb 100644
--- a/gcc/tree-ssa-reassoc.cc
+++ b/gcc/tree-ssa-reassoc.cc
@@ -7132,15 +7132,15 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_reassoc (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass * clone () final override { return new pass_reassoc (m_ctxt); }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
insert_powi_p = param;
bias_loop_carried_phi_ranks_p = !param;
}
- virtual bool gate (function *) { return flag_tree_reassoc != 0; }
- virtual unsigned int execute (function *)
+ bool gate (function *) final override { return flag_tree_reassoc != 0; }
+ unsigned int execute (function *) final override
{
return execute_reassoc (insert_powi_p, bias_loop_carried_phi_ranks_p);
}
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index ed68557..f41d503 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -2493,8 +2493,8 @@ public:
eliminate_dom_walker (cdi_direction, bitmap);
~eliminate_dom_walker ();
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
virtual tree eliminate_avail (basic_block, tree op);
virtual void eliminate_push_avail (basic_block, tree op);
@@ -2534,9 +2534,9 @@ public:
: eliminate_dom_walker (CDI_DOMINATORS, NULL), entry (entry_),
m_avail_freelist (NULL) {}
- virtual tree eliminate_avail (basic_block, tree op);
+ tree eliminate_avail (basic_block, tree op) final override;
- virtual void eliminate_push_avail (basic_block, tree);
+ void eliminate_push_avail (basic_block, tree) final override;
basic_block entry;
/* Freelist of avail entries which are allocated from the vn_ssa_aux
@@ -3275,6 +3275,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
copy_reference_ops_from_ref (rhs1, &rhs);
/* Apply an extra offset to the inner MEM_REF of the RHS. */
+ bool force_no_tbaa = false;
if (maybe_ne (extra_off, 0))
{
if (rhs.length () < 2)
@@ -3287,6 +3288,10 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
rhs[ix].op0 = int_const_binop (PLUS_EXPR, rhs[ix].op0,
build_int_cst (TREE_TYPE (rhs[ix].op0),
extra_off));
+ /* When we have offsetted the RHS, reading only parts of it,
+ we can no longer use the original TBAA type, force alias-set
+ zero. */
+ force_no_tbaa = true;
}
/* Save the operands since we need to use the original ones for
@@ -3339,8 +3344,11 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
/* Adjust *ref from the new operands. */
ao_ref rhs1_ref;
ao_ref_init (&rhs1_ref, rhs1);
- if (!ao_ref_init_from_vn_reference (&r, ao_ref_alias_set (&rhs1_ref),
- ao_ref_base_alias_set (&rhs1_ref),
+ if (!ao_ref_init_from_vn_reference (&r,
+ force_no_tbaa ? 0
+ : ao_ref_alias_set (&rhs1_ref),
+ force_no_tbaa ? 0
+ : ao_ref_base_alias_set (&rhs1_ref),
vr->type, vr->operands))
return (void *)-1;
/* This can happen with bitfields. */
@@ -4235,9 +4243,10 @@ vn_nary_op_insert_into (vn_nary_op_t vno, vn_nary_op_table_type *table)
if (dominated_by_p (CDI_DOMINATORS, vno_bb, val_bb))
/* Value registered with more generic predicate. */
return *slot;
- else if (dominated_by_p (CDI_DOMINATORS, val_bb, vno_bb))
+ else if (flag_checking)
/* Shouldn't happen, we insert in RPO order. */
- gcc_unreachable ();
+ gcc_assert (!dominated_by_p (CDI_DOMINATORS,
+ val_bb, vno_bb));
}
/* Append value. */
*next = (vn_pval *) obstack_alloc (&vn_tables_obstack,
@@ -4983,7 +4992,7 @@ valueized_wider_op (tree wide_type, tree op, bool allow_truncate)
/* For constants simply extend it. */
if (TREE_CODE (op) == INTEGER_CST)
- return wide_int_to_tree (wide_type, wi::to_wide (op));
+ return wide_int_to_tree (wide_type, wi::to_widest (op));
return NULL_TREE;
}
@@ -6807,7 +6816,7 @@ eliminate_dom_walker::eliminate_stmt (basic_block b, gimple_stmt_iterator *gsi)
if (targets.length () == 1)
fn = targets[0]->decl;
else
- fn = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
+ fn = builtin_decl_unreachable ();
if (dump_enabled_p ())
{
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
@@ -8295,17 +8304,17 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_fre (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass * clone () final override { return new pass_fre (m_ctxt); }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
may_iterate = param;
}
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_tree_fre != 0 && (may_iterate || optimize > 1);
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
private:
bool may_iterate;
diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc
index 8ce4403..2e744d6 100644
--- a/gcc/tree-ssa-sink.cc
+++ b/gcc/tree-ssa-sink.cc
@@ -230,8 +230,7 @@ select_best_block (basic_block early_bb,
if (bb_loop_depth (best_bb) == bb_loop_depth (early_bb)
/* If result of comparsion is unknown, prefer EARLY_BB.
Thus use !(...>=..) rather than (...<...) */
- && !(best_bb->count.apply_scale (100, 1)
- >= early_bb->count.apply_scale (threshold, 1)))
+ && !(best_bb->count * 100 >= early_bb->count * threshold))
return best_bb;
/* No better block found, so return EARLY_BB, which happens to be the
@@ -829,10 +828,10 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_sink != 0; }
- virtual unsigned int execute (function *);
- opt_pass *clone (void) { return new pass_sink_code (m_ctxt); }
- void set_pass_param (unsigned n, bool param)
+ bool gate (function *) final override { return flag_tree_sink != 0; }
+ unsigned int execute (function *) final override;
+ opt_pass *clone (void) final override { return new pass_sink_code (m_ctxt); }
+ void set_pass_param (unsigned n, bool param) final override
{
gcc_assert (n == 0);
unsplit_edges = param;
diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc
index 1d4c0f7..7b3e389 100644
--- a/gcc/tree-ssa-strlen.cc
+++ b/gcc/tree-ssa-strlen.cc
@@ -243,8 +243,8 @@ public:
~strlen_pass ();
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
bool check_and_optimize_stmt (bool *cleanup_eh);
bool check_and_optimize_call (bool *zero_write);
@@ -5962,8 +5962,8 @@ public:
: gimple_opt_pass (pass_data_warn_printf, ctxt)
{}
- virtual bool gate (function *);
- virtual unsigned int execute (function *fun)
+ bool gate (function *) final override;
+ unsigned int execute (function *fun) final override
{
return printf_strlen_execute (fun, true);
}
@@ -5999,10 +5999,10 @@ public:
: gimple_opt_pass (pass_data_strlen, ctxt)
{}
- opt_pass * clone () { return new pass_strlen (m_ctxt); }
+ opt_pass * clone () final override { return new pass_strlen (m_ctxt); }
- virtual bool gate (function *);
- virtual unsigned int execute (function *fun)
+ bool gate (function *) final override;
+ unsigned int execute (function *fun) final override
{
return printf_strlen_execute (fun, false);
}
diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc
index 581bdcf..dcf13d9 100644
--- a/gcc/tree-ssa-structalias.cc
+++ b/gcc/tree-ssa-structalias.cc
@@ -8085,7 +8085,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_pta; }
+ bool gate (function *) final override { return flag_tree_pta; }
}; // class pass_build_alias
@@ -8123,7 +8123,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_pta; }
+ bool gate (function *) final override { return flag_tree_pta; }
}; // class pass_build_ealias
@@ -8737,7 +8737,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (optimize
&& flag_ipa_pta
@@ -8745,9 +8745,12 @@ public:
&& !seen_error ());
}
- opt_pass * clone () { return new pass_ipa_pta (m_ctxt); }
+ opt_pass * clone () final override { return new pass_ipa_pta (m_ctxt); }
- virtual unsigned int execute (function *) { return ipa_pta_execute (); }
+ unsigned int execute (function *) final override
+ {
+ return ipa_pta_execute ();
+ }
}; // class pass_ipa_pta
diff --git a/gcc/tree-ssa-threadedge.cc b/gcc/tree-ssa-threadedge.cc
index a70aebd..e64e4f2 100644
--- a/gcc/tree-ssa-threadedge.cc
+++ b/gcc/tree-ssa-threadedge.cc
@@ -1377,7 +1377,9 @@ jt_state::register_equivs_stmt (gimple *stmt, basic_block bb,
SET_USE (use_p, tmp);
}
- cached_lhs = simplifier->simplify (stmt, stmt, bb, this);
+ /* Do not pass state to avoid calling the ranger with the
+ temporarily altered IL. */
+ cached_lhs = simplifier->simplify (stmt, stmt, bb, /*state=*/NULL);
/* Restore the statement's original uses/defs. */
i = 0;
diff --git a/gcc/tree-ssa-uncprop.cc b/gcc/tree-ssa-uncprop.cc
index aea7d69..900bf33 100644
--- a/gcc/tree-ssa-uncprop.cc
+++ b/gcc/tree-ssa-uncprop.cc
@@ -298,8 +298,8 @@ class uncprop_dom_walker : public dom_walker
public:
uncprop_dom_walker (cdi_direction direction) : dom_walker (direction) {}
- virtual edge before_dom_children (basic_block);
- virtual void after_dom_children (basic_block);
+ edge before_dom_children (basic_block) final override;
+ void after_dom_children (basic_block) final override;
private:
@@ -453,9 +453,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_uncprop (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_dom != 0; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_uncprop (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_dom != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_uncprop
diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc
index f326f17..06a1982 100644
--- a/gcc/tree-ssa-uninit.cc
+++ b/gcc/tree-ssa-uninit.cc
@@ -1320,9 +1320,12 @@ public:
{}
/* opt_pass methods: */
- opt_pass *clone () { return new pass_late_warn_uninitialized (m_ctxt); }
- virtual bool gate (function *) { return gate_warn_uninitialized (); }
- virtual unsigned int execute (function *);
+ opt_pass *clone () final override
+ {
+ return new pass_late_warn_uninitialized (m_ctxt);
+ }
+ bool gate (function *) final override { return gate_warn_uninitialized (); }
+ unsigned int execute (function *) final override;
}; // class pass_late_warn_uninitialized
@@ -1462,8 +1465,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_warn_uninitialized (); }
- virtual unsigned int execute (function *fun)
+ bool gate (function *) final override { return gate_warn_uninitialized (); }
+ unsigned int execute (function *fun) final override
{
return execute_early_warn_uninitialized (fun);
}
diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc
index 05536cd..bc22ece 100644
--- a/gcc/tree-ssanames.cc
+++ b/gcc/tree-ssanames.cc
@@ -920,7 +920,7 @@ public:
{}
/* opt_pass methods: */
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_release_ssa_names
diff --git a/gcc/tree-stdarg.cc b/gcc/tree-stdarg.cc
index 9038cd4..ed4c8d8 100644
--- a/gcc/tree-stdarg.cc
+++ b/gcc/tree-stdarg.cc
@@ -1126,7 +1126,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
/* Always run this pass, in order to expand va_arg internal_fns. We
also need to do that if fun->stdarg == 0, because a va_arg may also
@@ -1135,7 +1135,7 @@ public:
return true;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_stdarg
@@ -1185,12 +1185,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (cfun->curr_properties & PROP_gimple_lva) == 0;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_lower_vaarg
diff --git a/gcc/tree-switch-conversion.cc b/gcc/tree-switch-conversion.cc
index 50a1792..5291fb8 100644
--- a/gcc/tree-switch-conversion.cc
+++ b/gcc/tree-switch-conversion.cc
@@ -1782,7 +1782,7 @@ switch_decision_tree::analyze_switch_statement ()
tree high = CASE_HIGH (elt);
profile_probability p
- = case_edge->probability.apply_scale (1, (intptr_t) (case_edge->aux));
+ = case_edge->probability / ((intptr_t) (case_edge->aux));
clusters.quick_push (new simple_cluster (low, high, elt, case_edge->dest,
p));
m_case_bbs.quick_push (case_edge->dest);
@@ -2057,7 +2057,7 @@ switch_decision_tree::balance_case_nodes (case_tree_node **head,
/* Split this list if it is long enough for that to help. */
npp = head;
left = *npp;
- profile_probability pivot_prob = prob.apply_scale (1, 2);
+ profile_probability pivot_prob = prob / 2;
/* Find the place in the list that bisects the list's total cost
by probability. */
@@ -2259,12 +2259,11 @@ switch_decision_tree::emit_case_nodes (basic_block bb, tree index,
redirect_edge_succ (single_pred_edge (test_bb),
single_succ_edge (bb)->dest);
- p = ((node->m_right->m_c->m_subtree_prob
- + default_prob.apply_scale (1, 2))
+ p = ((node->m_right->m_c->m_subtree_prob + default_prob / 2)
/ (node->m_c->m_subtree_prob + default_prob));
bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_high (),
GT_EXPR, test_bb, p, loc);
- default_prob = default_prob.apply_scale (1, 2);
+ default_prob /= 2;
/* Handle the left-hand subtree. */
bb = emit_case_nodes (bb, index, node->m_left,
@@ -2293,11 +2292,11 @@ switch_decision_tree::emit_case_nodes (basic_block bb, tree index,
if (node->m_right->has_child ()
|| !node->m_right->m_c->is_single_value_p ())
{
- p = (default_prob.apply_scale (1, 2)
+ p = ((default_prob / 2)
/ (node->m_c->m_subtree_prob + default_prob));
bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_low (),
LT_EXPR, m_default_bb, p, loc);
- default_prob = default_prob.apply_scale (1, 2);
+ default_prob /= 2;
bb = emit_case_nodes (bb, index, node->m_right, default_prob,
index_type, loc);
@@ -2320,11 +2319,11 @@ switch_decision_tree::emit_case_nodes (basic_block bb, tree index,
if (node->m_left->has_child ()
|| !node->m_left->m_c->is_single_value_p ())
{
- p = (default_prob.apply_scale (1, 2)
+ p = ((default_prob / 2)
/ (node->m_c->m_subtree_prob + default_prob));
bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_high (),
GT_EXPR, m_default_bb, p, loc);
- default_prob = default_prob.apply_scale (1, 2);
+ default_prob /= 2;
bb = emit_case_nodes (bb, index, node->m_left, default_prob,
index_type, loc);
@@ -2357,29 +2356,29 @@ switch_decision_tree::emit_case_nodes (basic_block bb, tree index,
profile_probability right_prob = profile_probability::never ();
if (node->m_right)
right_prob = node->m_right->m_c->m_subtree_prob;
- p = ((right_prob + default_prob.apply_scale (1, 2))
- / (node->m_c->m_subtree_prob + default_prob));
+ p = ((right_prob + default_prob / 2)
+ / (node->m_c->m_subtree_prob + default_prob));
- bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_high (),
- GT_EXPR, test_bb, p, loc);
- default_prob = default_prob.apply_scale (1, 2);
+ bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_high (),
+ GT_EXPR, test_bb, p, loc);
+ default_prob /= 2;
- /* Value belongs to this node or to the left-hand subtree. */
- p = node->m_c->m_prob / (node->m_c->m_subtree_prob + default_prob);
- bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_low (),
- GE_EXPR, node->m_c->m_case_bb, p, loc);
+ /* Value belongs to this node or to the left-hand subtree. */
+ p = node->m_c->m_prob / (node->m_c->m_subtree_prob + default_prob);
+ bb = emit_cmp_and_jump_insns (bb, index, node->m_c->get_low (),
+ GE_EXPR, node->m_c->m_case_bb, p, loc);
- /* Handle the left-hand subtree. */
- bb = emit_case_nodes (bb, index, node->m_left,
- default_prob, index_type, loc);
+ /* Handle the left-hand subtree. */
+ bb = emit_case_nodes (bb, index, node->m_left, default_prob,
+ index_type, loc);
- /* If the left-hand subtree fell through,
- don't let it fall into the right-hand subtree. */
- if (bb && m_default_bb)
- emit_jump (bb, m_default_bb);
+ /* If the left-hand subtree fell through,
+ don't let it fall into the right-hand subtree. */
+ if (bb && m_default_bb)
+ emit_jump (bb, m_default_bb);
- bb = emit_case_nodes (test_bb, index, node->m_right,
- default_prob, index_type, loc);
+ bb = emit_case_nodes (test_bb, index, node->m_right, default_prob,
+ index_type, loc);
}
else
{
@@ -2428,8 +2427,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return flag_tree_switch_conversion != 0; }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override
+ {
+ return flag_tree_switch_conversion != 0;
+ }
+ unsigned int execute (function *) final override;
}; // class pass_convert_switch
@@ -2507,18 +2509,18 @@ public:
static const pass_data data;
opt_pass *
- clone ()
+ clone () final override
{
return new pass_lower_switch<O0> (m_ctxt);
}
- virtual bool
- gate (function *)
+ bool
+ gate (function *) final override
{
return !O0 || !optimize;
}
- virtual unsigned int execute (function *fun);
+ unsigned int execute (function *fun) final override;
}; // class pass_lower_switch
template <bool O0>
diff --git a/gcc/tree-switch-conversion.h b/gcc/tree-switch-conversion.h
index 2b677d9..6861572 100644
--- a/gcc/tree-switch-conversion.h
+++ b/gcc/tree-switch-conversion.h
@@ -130,19 +130,19 @@ public:
{}
cluster_type
- get_type ()
+ get_type () final override
{
return SIMPLE_CASE;
}
tree
- get_low ()
+ get_low () final override
{
return m_low;
}
tree
- get_high ()
+ get_high () final override
{
return m_high;
}
@@ -153,13 +153,13 @@ public:
}
void
- debug ()
+ debug () final override
{
dump (stderr);
}
void
- dump (FILE *f, bool details ATTRIBUTE_UNUSED = false)
+ dump (FILE *f, bool details ATTRIBUTE_UNUSED = false) final override
{
PRINT_CASE (f, get_low ());
if (get_low () != get_high ())
@@ -170,12 +170,12 @@ public:
fprintf (f, " ");
}
- void emit (tree, tree, tree, basic_block, location_t)
+ void emit (tree, tree, tree, basic_block, location_t) final override
{
gcc_unreachable ();
}
- bool is_single_value_p ()
+ bool is_single_value_p () final override
{
return tree_int_cst_equal (get_low (), get_high ());
}
@@ -224,24 +224,24 @@ public:
~group_cluster ();
tree
- get_low ()
+ get_low () final override
{
return m_cases[0]->get_low ();
}
tree
- get_high ()
+ get_high () final override
{
return m_cases[m_cases.length () - 1]->get_high ();
}
void
- debug ()
+ debug () final override
{
dump (stderr);
}
- void dump (FILE *f, bool details = false);
+ void dump (FILE *f, bool details = false) final override;
/* List of simple clusters handled by the group. */
vec<simple_cluster *> m_cases;
@@ -249,7 +249,7 @@ public:
/* Concrete subclass of group_cluster representing a collection
of cases to be implemented as a jump table.
- The "emit" vfunc gernerates a nested switch statement which
+ The "emit" vfunc generates a nested switch statement which
is later lowered to a jump table. */
class jump_table_cluster: public group_cluster
@@ -261,13 +261,14 @@ public:
{}
cluster_type
- get_type ()
+ get_type () final override
{
return JUMP_TABLE;
}
void emit (tree index_expr, tree index_type,
- tree default_label_expr, basic_block default_bb, location_t loc);
+ tree default_label_expr, basic_block default_bb, location_t loc)
+ final override;
/* Find jump tables of given CLUSTERS, where all members of the vector
are of type simple_cluster. New clusters are returned. */
@@ -366,7 +367,7 @@ public:
{}
cluster_type
- get_type ()
+ get_type () final override
{
return BIT_TEST;
}
@@ -388,7 +389,8 @@ public:
There *MUST* be max_case_bit_tests or less unique case
node targets. */
void emit (tree index_expr, tree index_type,
- tree default_label_expr, basic_block default_bb, location_t loc);
+ tree default_label_expr, basic_block default_bb, location_t loc)
+ final override;
/* Find bit tests of given CLUSTERS, where all members of the vector
are of type simple_cluster. New clusters are returned. */
diff --git a/gcc/tree-tailcall.cc b/gcc/tree-tailcall.cc
index 5a3466e..6745d57 100644
--- a/gcc/tree-tailcall.cc
+++ b/gcc/tree-tailcall.cc
@@ -1261,9 +1261,12 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_tail_recursion (m_ctxt); }
- virtual bool gate (function *) { return gate_tail_calls (); }
- virtual unsigned int execute (function *)
+ opt_pass * clone () final override
+ {
+ return new pass_tail_recursion (m_ctxt);
+ }
+ bool gate (function *) final override { return gate_tail_calls (); }
+ unsigned int execute (function *) final override
{
return tree_optimize_tail_calls_1 (false);
}
@@ -1301,8 +1304,11 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return gate_tail_calls (); }
- virtual unsigned int execute (function *) { return execute_tail_calls (); }
+ bool gate (function *) final override { return gate_tail_calls (); }
+ unsigned int execute (function *) final override
+ {
+ return execute_tail_calls ();
+ }
}; // class pass_tail_calls
diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index 92aba5d..3501295 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -2418,12 +2418,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
return !(fun->curr_properties & PROP_gimple_lvec);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return expand_vector_operations ();
}
@@ -2462,8 +2462,11 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_lower_vector_ssa (m_ctxt); }
- virtual unsigned int execute (function *)
+ opt_pass * clone () final override
+ {
+ return new pass_lower_vector_ssa (m_ctxt);
+ }
+ unsigned int execute (function *) final override
{
return expand_vector_operations ();
}
diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
index e81de45..2c2b4f7 100644
--- a/gcc/tree-vect-loop-manip.cc
+++ b/gcc/tree-vect-loop-manip.cc
@@ -920,9 +920,22 @@ vect_set_loop_condition_normal (class loop *loop, tree niters, tree step,
if (final_iv)
{
- gassign *assign = gimple_build_assign (final_iv, MINUS_EXPR,
- indx_after_incr, init);
- gsi_insert_on_edge_immediate (single_exit (loop), assign);
+ gassign *assign;
+ edge exit = single_exit (loop);
+ gcc_assert (single_pred_p (exit->dest));
+ tree phi_dest
+ = integer_zerop (init) ? final_iv : copy_ssa_name (indx_after_incr);
+ /* Make sure to maintain LC SSA form here and elide the subtraction
+ if the value is zero. */
+ gphi *phi = create_phi_node (phi_dest, exit->dest);
+ add_phi_arg (phi, indx_after_incr, exit, UNKNOWN_LOCATION);
+ if (!integer_zerop (init))
+ {
+ assign = gimple_build_assign (final_iv, MINUS_EXPR,
+ phi_dest, init);
+ gimple_stmt_iterator gsi = gsi_after_labels (exit->dest);
+ gsi_insert_before (&gsi, assign, GSI_SAME_STMT);
+ }
}
return cond_stmt;
@@ -2683,14 +2696,11 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
class loop *first_loop = loop;
bool irred_flag = loop_preheader_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP;
- /* We might have a queued need to update virtual SSA form. As we
- delete the update SSA machinery below after doing a regular
- incremental SSA update during loop copying make sure we don't
- lose that fact.
- ??? Needing to update virtual SSA form by renaming is unfortunate
- but not all of the vectorizer code inserting new loads / stores
- properly assigns virtual operands to those statements. */
- update_ssa (TODO_update_ssa_only_virtuals);
+ /* SSA form needs to be up-to-date since we are going to manually
+ update SSA form in slpeel_tree_duplicate_loop_to_edge_cfg and delete all
+ update SSA state after that, so we have to make sure to not lose any
+ pending update needs. */
+ gcc_assert (!need_ssa_update_p (cfun));
create_lcssa_for_virtual_phi (loop);
@@ -3696,7 +3706,7 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
}
}
- update_ssa (TODO_update_ssa);
+ update_ssa (TODO_update_ssa_no_phi);
}
/* Split the cost model check off to a separate BB. Costing assumes
diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index e05f8e8..3a70c15 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -157,7 +157,7 @@ along with GCC; see the file COPYING3. If not see
static void vect_estimate_min_profitable_iters (loop_vec_info, int *, int *,
unsigned *);
static stmt_vec_info vect_is_simple_reduction (loop_vec_info, stmt_vec_info,
- bool *, bool *);
+ bool *, bool *, bool);
/* Subroutine of vect_determine_vf_for_stmt that handles only one
statement. VECTYPE_MAYBE_SET_P is true if STMT_VINFO_VECTYPE
@@ -463,10 +463,12 @@ vect_inner_phi_in_double_reduction_p (loop_vec_info loop_vinfo, gphi *phi)
Examine the cross iteration def-use cycles of scalar variables
in LOOP. LOOP_VINFO represents the loop that is now being
considered for vectorization (can be LOOP, or an outer-loop
- enclosing LOOP). */
+ enclosing LOOP). SLP indicates there will be some subsequent
+ slp analyses or not. */
static void
-vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop)
+vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop,
+ bool slp)
{
basic_block bb = loop->header;
tree init, step;
@@ -545,7 +547,7 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop)
stmt_vec_info reduc_stmt_info
= vect_is_simple_reduction (loop_vinfo, stmt_vinfo, &double_reduc,
- &reduc_chain);
+ &reduc_chain, slp);
if (reduc_stmt_info)
{
STMT_VINFO_REDUC_DEF (stmt_vinfo) = reduc_stmt_info;
@@ -616,11 +618,11 @@ vect_analyze_scalar_cycles_1 (loop_vec_info loop_vinfo, class loop *loop)
a[i] = i; */
static void
-vect_analyze_scalar_cycles (loop_vec_info loop_vinfo)
+vect_analyze_scalar_cycles (loop_vec_info loop_vinfo, bool slp)
{
class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
- vect_analyze_scalar_cycles_1 (loop_vinfo, loop);
+ vect_analyze_scalar_cycles_1 (loop_vinfo, loop, slp);
/* When vectorizing an outer-loop, the inner-loop is executed sequentially.
Reductions in such inner-loop therefore have different properties than
@@ -632,7 +634,7 @@ vect_analyze_scalar_cycles (loop_vec_info loop_vinfo)
current checks are too strict. */
if (loop->inner)
- vect_analyze_scalar_cycles_1 (loop_vinfo, loop->inner);
+ vect_analyze_scalar_cycles_1 (loop_vinfo, loop->inner, slp);
}
/* Transfer group and reduction information from STMT_INFO to its
@@ -2223,12 +2225,18 @@ vect_determine_partial_vectors_and_peeling (loop_vec_info loop_vinfo,
/* Function vect_analyze_loop_2.
- Apply a set of analyses on LOOP, and create a loop_vec_info struct
- for it. The different analyses will record information in the
- loop_vec_info struct. */
+ Apply a set of analyses on LOOP specified by LOOP_VINFO, the different
+ analyses will record information in some members of LOOP_VINFO. FATAL
+ indicates if some analysis meets fatal error. If one non-NULL pointer
+ SUGGESTED_UNROLL_FACTOR is provided, it's intent to be filled with one
+ worked out suggested unroll factor, while one NULL pointer shows it's
+ going to apply the suggested unroll factor. SLP_DONE_FOR_SUGGESTED_UF
+ is to hold the slp decision when the suggested unroll factor is worked
+ out. */
static opt_result
vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal,
- unsigned *suggested_unroll_factor)
+ unsigned *suggested_unroll_factor,
+ bool& slp_done_for_suggested_uf)
{
opt_result ok = opt_result::success ();
int res;
@@ -2290,9 +2298,18 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal,
return ok;
}
+ /* Check if we are applying unroll factor now. */
+ bool applying_suggested_uf = loop_vinfo->suggested_unroll_factor > 1;
+ gcc_assert (!applying_suggested_uf || !suggested_unroll_factor);
+
+ /* If the slp decision is false when suggested unroll factor is worked
+ out, and we are applying suggested unroll factor, we can simply skip
+ all slp related analyses this time. */
+ bool slp = !applying_suggested_uf || slp_done_for_suggested_uf;
+
/* Classify all cross-iteration scalar data-flow cycles.
Cross-iteration cycles caused by virtual phis are analyzed separately. */
- vect_analyze_scalar_cycles (loop_vinfo);
+ vect_analyze_scalar_cycles (loop_vinfo, slp);
vect_pattern_recog (loop_vinfo);
@@ -2359,26 +2376,30 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo, bool &fatal,
poly_uint64 saved_vectorization_factor = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
- /* Check the SLP opportunities in the loop, analyze and build SLP trees. */
- ok = vect_analyze_slp (loop_vinfo, LOOP_VINFO_N_STMTS (loop_vinfo));
- if (!ok)
- return ok;
-
- /* If there are any SLP instances mark them as pure_slp. */
- bool slp = vect_make_slp_decision (loop_vinfo);
if (slp)
{
- /* Find stmts that need to be both vectorized and SLPed. */
- vect_detect_hybrid_slp (loop_vinfo);
+ /* Check the SLP opportunities in the loop, analyze and build
+ SLP trees. */
+ ok = vect_analyze_slp (loop_vinfo, LOOP_VINFO_N_STMTS (loop_vinfo));
+ if (!ok)
+ return ok;
+
+ /* If there are any SLP instances mark them as pure_slp. */
+ slp = vect_make_slp_decision (loop_vinfo);
+ if (slp)
+ {
+ /* Find stmts that need to be both vectorized and SLPed. */
+ vect_detect_hybrid_slp (loop_vinfo);
- /* Update the vectorization factor based on the SLP decision. */
- vect_update_vf_for_slp (loop_vinfo);
+ /* Update the vectorization factor based on the SLP decision. */
+ vect_update_vf_for_slp (loop_vinfo);
- /* Optimize the SLP graph with the vectorization factor fixed. */
- vect_optimize_slp (loop_vinfo);
+ /* Optimize the SLP graph with the vectorization factor fixed. */
+ vect_optimize_slp (loop_vinfo);
- /* Gather the loads reachable from the SLP graph entries. */
- vect_gather_slp_loads (loop_vinfo);
+ /* Gather the loads reachable from the SLP graph entries. */
+ vect_gather_slp_loads (loop_vinfo);
+ }
}
bool saved_can_use_partial_vectors_p
@@ -2394,7 +2415,7 @@ start_over:
/* Apply the suggested unrolling factor, this was determined by the backend
during finish_cost the first time we ran the analyzis for this
vector mode. */
- if (loop_vinfo->suggested_unroll_factor > 1)
+ if (applying_suggested_uf)
LOOP_VINFO_VECT_FACTOR (loop_vinfo) *= loop_vinfo->suggested_unroll_factor;
/* Now the vectorization factor is final. */
@@ -2665,6 +2686,8 @@ start_over:
gcc_assert (known_eq (vectorization_factor,
LOOP_VINFO_VECT_FACTOR (loop_vinfo)));
+ slp_done_for_suggested_uf = slp;
+
/* Ok to vectorize! */
LOOP_VINFO_VECTORIZABLE_P (loop_vinfo) = 1;
return opt_result::success ();
@@ -2678,6 +2701,12 @@ again:
if (!slp)
return ok;
+ /* If the slp decision is true when suggested unroll factor is worked
+ out, and we are applying suggested unroll factor, we don't need to
+ re-try any more. */
+ if (applying_suggested_uf && slp_done_for_suggested_uf)
+ return ok;
+
/* If there are reduction chains re-trying will fail anyway. */
if (! LOOP_VINFO_REDUCTION_CHAINS (loop_vinfo).is_empty ())
return ok;
@@ -2864,10 +2893,12 @@ vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared,
machine_mode vector_mode = vector_modes[mode_i];
loop_vinfo->vector_mode = vector_mode;
unsigned int suggested_unroll_factor = 1;
+ bool slp_done_for_suggested_uf;
/* Run the main analysis. */
opt_result res = vect_analyze_loop_2 (loop_vinfo, fatal,
- &suggested_unroll_factor);
+ &suggested_unroll_factor,
+ slp_done_for_suggested_uf);
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"***** Analysis %s with vector mode %s\n",
@@ -2879,13 +2910,15 @@ vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared,
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
"***** Re-trying analysis for unrolling"
- " with unroll factor %d.\n",
- suggested_unroll_factor);
+ " with unroll factor %d and slp %s.\n",
+ suggested_unroll_factor,
+ slp_done_for_suggested_uf ? "on" : "off");
loop_vec_info unroll_vinfo
= vect_create_loop_vinfo (loop, shared, loop_form_info, main_loop_vinfo);
unroll_vinfo->vector_mode = vector_mode;
unroll_vinfo->suggested_unroll_factor = suggested_unroll_factor;
- opt_result new_res = vect_analyze_loop_2 (unroll_vinfo, fatal, NULL);
+ opt_result new_res = vect_analyze_loop_2 (unroll_vinfo, fatal, NULL,
+ slp_done_for_suggested_uf);
if (new_res)
{
delete loop_vinfo;
@@ -3598,7 +3631,7 @@ check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi,
static stmt_vec_info
vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
- bool *double_reduc, bool *reduc_chain_p)
+ bool *double_reduc, bool *reduc_chain_p, bool slp)
{
gphi *phi = as_a <gphi *> (phi_info->stmt);
gimple *phi_use_stmt = NULL;
@@ -3787,7 +3820,7 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info,
continue;
reduc_chain.safe_push (stmt_info);
}
- if (is_slp_reduc && reduc_chain.length () > 1)
+ if (slp && is_slp_reduc && reduc_chain.length () > 1)
{
for (unsigned i = 0; i < reduc_chain.length () - 1; ++i)
{
@@ -4533,6 +4566,31 @@ have_whole_vector_shift (machine_mode mode)
return true;
}
+/* Return true if (a) STMT_INFO is a DOT_PROD_EXPR reduction whose
+ multiplication operands have differing signs and (b) we intend
+ to emulate the operation using a series of signed DOT_PROD_EXPRs.
+ See vect_emulate_mixed_dot_prod for the actual sequence used. */
+
+static bool
+vect_is_emulated_mixed_dot_prod (loop_vec_info loop_vinfo,
+ stmt_vec_info stmt_info)
+{
+ gassign *assign = dyn_cast<gassign *> (stmt_info->stmt);
+ if (!assign || gimple_assign_rhs_code (assign) != DOT_PROD_EXPR)
+ return false;
+
+ tree rhs1 = gimple_assign_rhs1 (assign);
+ tree rhs2 = gimple_assign_rhs2 (assign);
+ if (TYPE_SIGN (TREE_TYPE (rhs1)) == TYPE_SIGN (TREE_TYPE (rhs2)))
+ return false;
+
+ stmt_vec_info reduc_info = info_for_reduction (loop_vinfo, stmt_info);
+ gcc_assert (reduc_info->is_reduc_info);
+ return !directly_supported_p (DOT_PROD_EXPR,
+ STMT_VINFO_REDUC_VECTYPE_IN (reduc_info),
+ optab_vector_mixed_sign);
+}
+
/* TODO: Close dependency between vect_model_*_cost and vectorizable_*
functions. Design better to avoid maintenance issues. */
@@ -4568,6 +4626,8 @@ vect_model_reduction_cost (loop_vec_info loop_vinfo,
if (!gimple_extract_op (orig_stmt_info->stmt, &op))
gcc_unreachable ();
+ bool emulated_mixed_dot_prod
+ = vect_is_emulated_mixed_dot_prod (loop_vinfo, stmt_info);
if (reduction_type == EXTRACT_LAST_REDUCTION)
/* No extra instructions are needed in the prologue. The loop body
operations are costed in vectorizable_condition. */
@@ -4595,11 +4655,20 @@ vect_model_reduction_cost (loop_vec_info loop_vinfo,
}
else
{
- /* Add in cost for initial definition.
- For cond reduction we have four vectors: initial index, step,
- initial result of the data reduction, initial value of the index
- reduction. */
- int prologue_stmts = reduction_type == COND_REDUCTION ? 4 : 1;
+ /* Add in the cost of the initial definitions. */
+ int prologue_stmts;
+ if (reduction_type == COND_REDUCTION)
+ /* For cond reductions we have four vectors: initial index, step,
+ initial result of the data reduction, initial value of the index
+ reduction. */
+ prologue_stmts = 4;
+ else if (emulated_mixed_dot_prod)
+ /* We need the initial reduction value and two invariants:
+ one that contains the minimum signed value and one that
+ contains half of its negative. */
+ prologue_stmts = 3;
+ else
+ prologue_stmts = 1;
prologue_cost += record_stmt_cost (cost_vec, prologue_stmts,
scalar_to_vec, stmt_info, 0,
vect_prologue);
@@ -6764,11 +6833,6 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
bool lane_reduc_code_p = (op.code == DOT_PROD_EXPR
|| op.code == WIDEN_SUM_EXPR
|| op.code == SAD_EXPR);
- enum optab_subtype optab_query_kind = optab_vector;
- if (op.code == DOT_PROD_EXPR
- && (TYPE_SIGN (TREE_TYPE (op.ops[0]))
- != TYPE_SIGN (TREE_TYPE (op.ops[1]))))
- optab_query_kind = optab_vector_mixed_sign;
if (!POINTER_TYPE_P (op.type) && !INTEGRAL_TYPE_P (op.type)
&& !SCALAR_FLOAT_TYPE_P (op.type))
@@ -7295,9 +7359,17 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
/* 4. Supportable by target? */
bool ok = true;
- /* 4.1. check support for the operation in the loop */
+ /* 4.1. check support for the operation in the loop
+
+ This isn't necessary for the lane reduction codes, since they
+ can only be produced by pattern matching, and it's up to the
+ pattern matcher to test for support. The main reason for
+ specifically skipping this step is to avoid rechecking whether
+ mixed-sign dot-products can be implemented using signed
+ dot-products. */
machine_mode vec_mode = TYPE_MODE (vectype_in);
- if (!directly_supported_p (op.code, vectype_in, optab_query_kind))
+ if (!lane_reduc_code_p
+ && !directly_supported_p (op.code, vectype_in))
{
if (dump_enabled_p ())
dump_printf (MSG_NOTE, "op not supported by target.\n");
@@ -7365,7 +7437,14 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
vect_transform_reduction. Otherwise this is costed by the
separate vectorizable_* routines. */
if (single_defuse_cycle || lane_reduc_code_p)
- record_stmt_cost (cost_vec, ncopies, vector_stmt, stmt_info, 0, vect_body);
+ {
+ int factor = 1;
+ if (vect_is_emulated_mixed_dot_prod (loop_vinfo, stmt_info))
+ /* Three dot-products and a subtraction. */
+ factor = 4;
+ record_stmt_cost (cost_vec, ncopies * factor, vector_stmt,
+ stmt_info, 0, vect_body);
+ }
if (dump_enabled_p ()
&& reduction_type == FOLD_LEFT_REDUCTION)
@@ -7424,6 +7503,81 @@ vectorizable_reduction (loop_vec_info loop_vinfo,
return true;
}
+/* STMT_INFO is a dot-product reduction whose multiplication operands
+ have different signs. Emit a sequence to emulate the operation
+ using a series of signed DOT_PROD_EXPRs and return the last
+ statement generated. VEC_DEST is the result of the vector operation
+ and VOP lists its inputs. */
+
+static gassign *
+vect_emulate_mixed_dot_prod (loop_vec_info loop_vinfo, stmt_vec_info stmt_info,
+ gimple_stmt_iterator *gsi, tree vec_dest,
+ tree vop[3])
+{
+ tree wide_vectype = signed_type_for (TREE_TYPE (vec_dest));
+ tree narrow_vectype = signed_type_for (TREE_TYPE (vop[0]));
+ tree narrow_elttype = TREE_TYPE (narrow_vectype);
+ gimple *new_stmt;
+
+ /* Make VOP[0] the unsigned operand VOP[1] the signed operand. */
+ if (!TYPE_UNSIGNED (TREE_TYPE (vop[0])))
+ std::swap (vop[0], vop[1]);
+
+ /* Convert all inputs to signed types. */
+ for (int i = 0; i < 3; ++i)
+ if (TYPE_UNSIGNED (TREE_TYPE (vop[i])))
+ {
+ tree tmp = make_ssa_name (signed_type_for (TREE_TYPE (vop[i])));
+ new_stmt = gimple_build_assign (tmp, NOP_EXPR, vop[i]);
+ vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, gsi);
+ vop[i] = tmp;
+ }
+
+ /* In the comments below we assume 8-bit inputs for simplicity,
+ but the approach works for any full integer type. */
+
+ /* Create a vector of -128. */
+ tree min_narrow_elttype = TYPE_MIN_VALUE (narrow_elttype);
+ tree min_narrow = build_vector_from_val (narrow_vectype,
+ min_narrow_elttype);
+
+ /* Create a vector of 64. */
+ auto half_wi = wi::lrshift (wi::to_wide (min_narrow_elttype), 1);
+ tree half_narrow = wide_int_to_tree (narrow_elttype, half_wi);
+ half_narrow = build_vector_from_val (narrow_vectype, half_narrow);
+
+ /* Emit: SUB_RES = VOP[0] - 128. */
+ tree sub_res = make_ssa_name (narrow_vectype);
+ new_stmt = gimple_build_assign (sub_res, PLUS_EXPR, vop[0], min_narrow);
+ vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, gsi);
+
+ /* Emit:
+
+ STAGE1 = DOT_PROD_EXPR <VOP[1], 64, VOP[2]>;
+ STAGE2 = DOT_PROD_EXPR <VOP[1], 64, STAGE1>;
+ STAGE3 = DOT_PROD_EXPR <SUB_RES, -128, STAGE2>;
+
+ on the basis that x * y == (x - 128) * y + 64 * y + 64 * y
+ Doing the two 64 * y steps first allows more time to compute x. */
+ tree stage1 = make_ssa_name (wide_vectype);
+ new_stmt = gimple_build_assign (stage1, DOT_PROD_EXPR,
+ vop[1], half_narrow, vop[2]);
+ vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, gsi);
+
+ tree stage2 = make_ssa_name (wide_vectype);
+ new_stmt = gimple_build_assign (stage2, DOT_PROD_EXPR,
+ vop[1], half_narrow, stage1);
+ vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, gsi);
+
+ tree stage3 = make_ssa_name (wide_vectype);
+ new_stmt = gimple_build_assign (stage3, DOT_PROD_EXPR,
+ sub_res, vop[1], stage2);
+ vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, gsi);
+
+ /* Convert STAGE3 to the reduction type. */
+ return gimple_build_assign (vec_dest, CONVERT_EXPR, stage3);
+}
+
/* Transform the definition stmt STMT_INFO of a reduction PHI backedge
value. */
@@ -7530,12 +7684,17 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
: &vec_oprnds2));
}
+ bool emulated_mixed_dot_prod
+ = vect_is_emulated_mixed_dot_prod (loop_vinfo, stmt_info);
FOR_EACH_VEC_ELT (vec_oprnds0, i, def0)
{
gimple *new_stmt;
tree vop[3] = { def0, vec_oprnds1[i], NULL_TREE };
if (masked_loop_p && !mask_by_cond_expr)
{
+ /* No conditional ifns have been defined for dot-product yet. */
+ gcc_assert (code != DOT_PROD_EXPR);
+
/* Make sure that the reduction accumulator is vop[0]. */
if (reduc_index == 1)
{
@@ -7564,8 +7723,12 @@ vect_transform_reduction (loop_vec_info loop_vinfo,
build_vect_cond_expr (code, vop, mask, gsi);
}
- new_stmt = gimple_build_assign (vec_dest, code,
- vop[0], vop[1], vop[2]);
+ if (emulated_mixed_dot_prod)
+ new_stmt = vect_emulate_mixed_dot_prod (loop_vinfo, stmt_info, gsi,
+ vec_dest, vop);
+ else
+ new_stmt = gimple_build_assign (vec_dest, code,
+ vop[0], vop[1], vop[2]);
new_temp = make_ssa_name (vec_dest, new_stmt);
gimple_assign_set_lhs (new_stmt, new_temp);
vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, gsi);
@@ -9343,13 +9506,12 @@ scale_profile_for_vect_loop (class loop *loop, unsigned vf)
in loop's preheader. */
if (!(freq_e == profile_count::zero ()))
freq_e = freq_e.force_nonzero ();
- p = freq_e.apply_scale (new_est_niter + 1, 1).probability_in (freq_h);
+ p = (freq_e * (new_est_niter + 1)).probability_in (freq_h);
scale_loop_frequencies (loop, p);
}
edge exit_e = single_exit (loop);
- exit_e->probability = profile_probability::always ()
- .apply_scale (1, new_est_niter + 1);
+ exit_e->probability = profile_probability::always () / (new_est_niter + 1);
edge exit_l = single_pred_edge (loop->latch);
profile_probability prob = exit_l->probability;
diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
index 8f62486..dfbfb71 100644
--- a/gcc/tree-vect-patterns.cc
+++ b/gcc/tree-vect-patterns.cc
@@ -760,12 +760,16 @@ vect_convert_input (vec_info *vinfo, stmt_vec_info stmt_info, tree type,
vect_unpromoted_value *unprom, tree vectype,
enum optab_subtype subtype = optab_default)
{
-
/* Update the type if the signs differ. */
- if (subtype == optab_vector_mixed_sign
- && TYPE_SIGN (type) != TYPE_SIGN (TREE_TYPE (unprom->op)))
- type = build_nonstandard_integer_type (TYPE_PRECISION (type),
- TYPE_SIGN (unprom->type));
+ if (subtype == optab_vector_mixed_sign)
+ {
+ gcc_assert (!TYPE_UNSIGNED (type));
+ if (TYPE_UNSIGNED (TREE_TYPE (unprom->op)))
+ {
+ type = unsigned_type_for (type);
+ vectype = unsigned_type_for (vectype);
+ }
+ }
/* Check for a no-op conversion. */
if (types_compatible_p (type, TREE_TYPE (unprom->op)))
@@ -1139,16 +1143,34 @@ vect_recog_dot_prod_pattern (vec_info *vinfo,
is signed; otherwise, the result has the same sign as the operands. */
if (TYPE_PRECISION (unprom_mult.type) != TYPE_PRECISION (type)
&& (subtype == optab_vector_mixed_sign
- ? TYPE_UNSIGNED (unprom_mult.type)
- : TYPE_SIGN (unprom_mult.type) != TYPE_SIGN (half_type)))
+ ? TYPE_UNSIGNED (unprom_mult.type)
+ : TYPE_SIGN (unprom_mult.type) != TYPE_SIGN (half_type)))
return NULL;
vect_pattern_detected ("vect_recog_dot_prod_pattern", last_stmt);
+ /* If the inputs have mixed signs, canonicalize on using the signed
+ input type for analysis. This also helps when emulating mixed-sign
+ operations using signed operations. */
+ if (subtype == optab_vector_mixed_sign)
+ half_type = signed_type_for (half_type);
+
tree half_vectype;
if (!vect_supportable_direct_optab_p (vinfo, type, DOT_PROD_EXPR, half_type,
type_out, &half_vectype, subtype))
- return NULL;
+ {
+ /* We can emulate a mixed-sign dot-product using a sequence of
+ signed dot-products; see vect_emulate_mixed_dot_prod for details. */
+ if (subtype != optab_vector_mixed_sign
+ || !vect_supportable_direct_optab_p (vinfo, signed_type_for (type),
+ DOT_PROD_EXPR, half_type,
+ type_out, &half_vectype,
+ optab_vector))
+ return NULL;
+
+ *type_out = signed_or_unsigned_type_for (TYPE_UNSIGNED (type),
+ *type_out);
+ }
/* Get the inputs in the appropriate types. */
tree mult_oprnd[2];
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 346d8ce..01d982e 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -1638,8 +1638,10 @@ vect_finish_stmt_generation (vec_info *vinfo,
&& ((is_gimple_assign (vec_stmt)
&& !is_gimple_reg (gimple_assign_lhs (vec_stmt)))
|| (is_gimple_call (vec_stmt)
- && !(gimple_call_flags (vec_stmt)
- & (ECF_CONST|ECF_PURE|ECF_NOVOPS)))))
+ && (!(gimple_call_flags (vec_stmt)
+ & (ECF_CONST|ECF_PURE|ECF_NOVOPS))
+ || (gimple_call_lhs (vec_stmt)
+ && !is_gimple_reg (gimple_call_lhs (vec_stmt)))))))
{
tree new_vdef = copy_ssa_name (vuse, vec_stmt);
gimple_set_vdef (vec_stmt, new_vdef);
@@ -4245,6 +4247,14 @@ vectorizable_simd_clone_call (vec_info *vinfo, stmt_vec_info stmt_info,
if (!vec_stmt) /* transformation not required. */
{
+ /* When the original call is pure or const but the SIMD ABI dictates
+ an aggregate return we will have to use a virtual definition and
+ in a loop eventually even need to add a virtual PHI. That's
+ not straight-forward so allow to fix this up via renaming. */
+ if (gimple_call_lhs (stmt)
+ && !gimple_vdef (stmt)
+ && TREE_CODE (TREE_TYPE (TREE_TYPE (bestn->decl))) == ARRAY_TYPE)
+ vinfo->any_known_not_updated_vssa = true;
STMT_VINFO_SIMD_CLONE_INFO (stmt_info).safe_push (bestn->decl);
for (i = 0; i < nargs; i++)
if ((bestn->simdclone->args[i].arg_type
@@ -8979,6 +8989,9 @@ vectorizable_load (vec_info *vinfo,
dump_printf_loc (MSG_NOTE, vect_location,
"Vectorizing an unaligned access.\n");
+ if (memory_access_type == VMAT_LOAD_STORE_LANES)
+ vinfo->any_known_not_updated_vssa = true;
+
STMT_VINFO_TYPE (stmt_info) = load_vec_info_type;
vect_model_load_cost (vinfo, stmt_info, ncopies, vf, memory_access_type,
alignment_support_scheme, misalignment,
@@ -9024,9 +9037,16 @@ vectorizable_load (vec_info *vinfo,
"hoisting out of the vectorized loop: %G", stmt);
scalar_dest = copy_ssa_name (scalar_dest);
tree rhs = unshare_expr (gimple_assign_rhs1 (stmt));
- gsi_insert_on_edge_immediate
- (loop_preheader_edge (loop),
- gimple_build_assign (scalar_dest, rhs));
+ edge pe = loop_preheader_edge (loop);
+ gphi *vphi = get_virtual_phi (loop->header);
+ tree vuse;
+ if (vphi)
+ vuse = PHI_ARG_DEF_FROM_EDGE (vphi, pe);
+ else
+ vuse = gimple_vuse (gsi_stmt (*gsi));
+ gimple *new_stmt = gimple_build_assign (scalar_dest, rhs);
+ gimple_set_vuse (new_stmt, vuse);
+ gsi_insert_on_edge_immediate (pe, new_stmt);
}
/* These copies are all equivalent, but currently the representation
requires a separate STMT_VINFO_VEC_STMT for each one. */
@@ -9769,6 +9789,8 @@ vectorizable_load (vec_info *vinfo,
tree ref = build2 (MEM_REF, ltype, ptr,
build_int_cst (ref_type, 0));
new_stmt = gimple_build_assign (elt, ref);
+ gimple_set_vuse (new_stmt,
+ gimple_vuse (gsi_stmt (*gsi)));
gimple_seq_add_stmt (&stmts, new_stmt);
CONSTRUCTOR_APPEND_ELT (ctor_elts, NULL_TREE, elt);
}
diff --git a/gcc/tree-vectorizer.cc b/gcc/tree-vectorizer.cc
index a63fa39..6ec4951 100644
--- a/gcc/tree-vectorizer.cc
+++ b/gcc/tree-vectorizer.cc
@@ -82,6 +82,7 @@ along with GCC; see the file COPYING3. If not see
#include "opt-problem.h"
#include "internal-fn.h"
#include "tree-ssa-sccvn.h"
+#include "tree-into-ssa.h"
/* Loop or bb location, with hotness information. */
dump_user_location_t vect_location;
@@ -982,7 +983,7 @@ set_uid_loop_bbs (loop_vec_info loop_vinfo, gimple *loop_vectorized_call,
/* Generate vectorized code for LOOP and its epilogues. */
-static void
+static unsigned
vect_transform_loops (hash_table<simduid_to_vf> *&simduid_to_vf_htab,
loop_p loop, gimple *loop_vectorized_call,
function *fun)
@@ -1020,9 +1021,25 @@ vect_transform_loops (hash_table<simduid_to_vf> *&simduid_to_vf_htab,
= simduid_to_vf_data;
}
+ /* We should not have to update virtual SSA form here but some
+ transforms involve creating new virtual definitions which makes
+ updating difficult.
+ We delay the actual update to the end of the pass but avoid
+ confusing ourselves by forcing need_ssa_update_p () to false. */
+ unsigned todo = 0;
+ if (need_ssa_update_p (cfun))
+ {
+ gcc_assert (loop_vinfo->any_known_not_updated_vssa);
+ fun->gimple_df->ssa_renaming_needed = false;
+ todo |= TODO_update_ssa_only_virtuals;
+ }
+ gcc_assert (!need_ssa_update_p (cfun));
+
/* Epilogue of vectorized loop must be vectorized too. */
if (new_loop)
- vect_transform_loops (simduid_to_vf_htab, new_loop, NULL, fun);
+ todo |= vect_transform_loops (simduid_to_vf_htab, new_loop, NULL, fun);
+
+ return todo;
}
/* Try to vectorize LOOP. */
@@ -1133,7 +1150,8 @@ try_vectorize_loop_1 (hash_table<simduid_to_vf> *&simduid_to_vf_htab,
(*num_vectorized_loops)++;
/* Transform LOOP and its epilogues. */
- vect_transform_loops (simduid_to_vf_htab, loop, loop_vectorized_call, fun);
+ ret |= vect_transform_loops (simduid_to_vf_htab, loop,
+ loop_vectorized_call, fun);
if (loop_vectorized_call)
{
@@ -1193,12 +1211,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *fun)
+ bool gate (function *fun) final override
{
return flag_tree_loop_vectorize || fun->has_force_vectorize_loops;
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_vectorize
@@ -1332,6 +1350,11 @@ pass_vectorize::execute (function *fun)
if (num_vectorized_loops > 0)
{
+ /* We are collecting some corner cases where we need to update
+ virtual SSA form via the TODO but delete the queued update-SSA
+ state. Force renaming if we think that might be necessary. */
+ if (ret & TODO_update_ssa_only_virtuals)
+ mark_virtual_operands_for_renaming (cfun);
/* If we vectorized any loop only virtual SSA form needs to be updated.
??? Also while we try hard to update loop-closed SSA form we fail
to properly do this in some corner-cases (see PR56286). */
@@ -1405,9 +1428,12 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_simduid_cleanup (m_ctxt); }
- virtual bool gate (function *fun) { return fun->has_simduid_loops; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override
+ {
+ return new pass_simduid_cleanup (m_ctxt);
+ }
+ bool gate (function *fun) final override { return fun->has_simduid_loops; }
+ unsigned int execute (function *) final override;
}; // class pass_simduid_cleanup
@@ -1463,9 +1489,9 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_slp_vectorize (m_ctxt); }
- virtual bool gate (function *) { return flag_tree_slp_vectorize != 0; }
- virtual unsigned int execute (function *);
+ opt_pass * clone () final override { return new pass_slp_vectorize (m_ctxt); }
+ bool gate (function *) final override { return flag_tree_slp_vectorize != 0; }
+ unsigned int execute (function *) final override;
}; // class pass_slp_vectorize
@@ -1696,12 +1722,15 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return flag_section_anchors && flag_tree_loop_vectorize;
}
- virtual unsigned int execute (function *) { return increase_alignment (); }
+ unsigned int execute (function *) final override
+ {
+ return increase_alignment ();
+ }
}; // class pass_ipa_increase_alignment
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 642eb0a..e5fdc9e 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -444,6 +444,10 @@ public:
/* Whether the above mapping is complete. */
bool stmt_vec_info_ro;
+ /* Whether we've done a transform we think OK to not update virtual
+ SSA form. */
+ bool any_known_not_updated_vssa;
+
/* The SLP graph. */
auto_vec<slp_instance> slp_instances;
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
index 30022da..ed881be 100644
--- a/gcc/tree-vrp.cc
+++ b/gcc/tree-vrp.cc
@@ -1024,7 +1024,8 @@ range_fold_unary_symbolics_p (value_range *vr,
{
/* ~X is simply -1 - X. */
value_range minusone;
- minusone.set (build_int_cst (vr0->type (), -1));
+ tree t = build_int_cst (vr0->type (), -1);
+ minusone.set (t, t);
range_fold_binary_expr (vr, MINUS_EXPR, expr_type, &minusone, vr0);
return true;
}
@@ -4388,25 +4389,42 @@ const pass_data pass_data_vrp =
( TODO_cleanup_cfg | TODO_update_ssa ), /* todo_flags_finish */
};
+const pass_data pass_data_early_vrp =
+{
+ GIMPLE_PASS, /* type */
+ "evrp", /* name */
+ OPTGROUP_NONE, /* optinfo_flags */
+ TV_TREE_EARLY_VRP, /* tv_id */
+ PROP_ssa, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ ( TODO_cleanup_cfg | TODO_update_ssa | TODO_verify_all ),
+};
+
static int vrp_pass_num = 0;
class pass_vrp : public gimple_opt_pass
{
public:
- pass_vrp (gcc::context *ctxt)
- : gimple_opt_pass (pass_data_vrp, ctxt), warn_array_bounds_p (false),
- my_pass (++vrp_pass_num)
+ pass_vrp (gcc::context *ctxt, const pass_data &data_)
+ : gimple_opt_pass (data_, ctxt), data (data_), warn_array_bounds_p (false),
+ my_pass (vrp_pass_num++)
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_vrp (m_ctxt); }
- void set_pass_param (unsigned int n, bool param)
+ opt_pass * clone () final override { return new pass_vrp (m_ctxt, data); }
+ void set_pass_param (unsigned int n, bool param) final override
{
gcc_assert (n == 0);
warn_array_bounds_p = param;
}
- virtual bool gate (function *) { return flag_tree_vrp != 0; }
- virtual unsigned int execute (function *fun)
+ bool gate (function *) final override { return flag_tree_vrp != 0; }
+ unsigned int execute (function *fun) final override
{
+ // Early VRP pass.
+ if (my_pass == 0)
+ return execute_ranger_vrp (fun, /*warn_array_bounds_p=*/false);
+
if ((my_pass == 1 && param_vrp1_mode == VRP_MODE_RANGER)
|| (my_pass == 2 && param_vrp2_mode == VRP_MODE_RANGER))
return execute_ranger_vrp (fun, warn_array_bounds_p);
@@ -4414,6 +4432,7 @@ public:
}
private:
+ const pass_data &data;
bool warn_array_bounds_p;
int my_pass;
}; // class pass_vrp
@@ -4423,5 +4442,11 @@ public:
gimple_opt_pass *
make_pass_vrp (gcc::context *ctxt)
{
- return new pass_vrp (ctxt);
+ return new pass_vrp (ctxt, pass_data_vrp);
+}
+
+gimple_opt_pass *
+make_pass_early_vrp (gcc::context *ctxt)
+{
+ return new pass_vrp (ctxt, pass_data_early_vrp);
}
diff --git a/gcc/tree.cc b/gcc/tree.cc
index 2bfb674..84000dd 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -71,6 +71,8 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-range.h"
#include "gomp-constants.h"
#include "dfp.h"
+#include "asan.h"
+#include "ubsan.h"
/* Tree code classes. */
@@ -9649,6 +9651,7 @@ build_common_builtin_nodes (void)
}
if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)
+ || !builtin_decl_explicit_p (BUILT_IN_TRAP)
|| !builtin_decl_explicit_p (BUILT_IN_ABORT))
{
ftype = build_function_type (void_type_node, void_list_node);
@@ -9662,6 +9665,10 @@ build_common_builtin_nodes (void)
local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT,
"abort",
ECF_LEAF | ECF_NORETURN | ECF_CONST | ECF_COLD);
+ if (!builtin_decl_explicit_p (BUILT_IN_TRAP))
+ local_define_builtin ("__builtin_trap", ftype, BUILT_IN_TRAP,
+ "__builtin_trap",
+ ECF_NORETURN | ECF_NOTHROW | ECF_LEAF | ECF_COLD);
}
if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
@@ -10779,6 +10786,39 @@ build_alloca_call_expr (tree size, unsigned int align, HOST_WIDE_INT max_size)
}
}
+/* The built-in decl to use to mark code points believed to be unreachable.
+ Typically __builtin_unreachable, but __builtin_trap if
+ -fsanitize=unreachable -fsanitize-trap=unreachable. If only
+ -fsanitize=unreachable, we rely on sanopt to replace calls with the
+ appropriate ubsan function. When building a call directly, use
+ {gimple_},build_builtin_unreachable instead. */
+
+tree
+builtin_decl_unreachable ()
+{
+ enum built_in_function fncode = BUILT_IN_UNREACHABLE;
+
+ if (sanitize_flags_p (SANITIZE_UNREACHABLE)
+ ? (flag_sanitize_trap & SANITIZE_UNREACHABLE)
+ : flag_unreachable_traps)
+ fncode = BUILT_IN_TRAP;
+ /* For non-trapping sanitize, we will rewrite __builtin_unreachable () later,
+ in the sanopt pass. */
+
+ return builtin_decl_explicit (fncode);
+}
+
+/* Build a call to __builtin_unreachable, possibly rewritten by
+ -fsanitize=unreachable. Use this rather than the above when practical. */
+
+tree
+build_builtin_unreachable (location_t loc)
+{
+ tree data = NULL_TREE;
+ tree fn = sanitize_unreachable_fn (&data, loc);
+ return build_call_expr_loc (loc, fn, data != NULL_TREE, data);
+}
+
/* Create a new constant string literal of type ELTYPE[SIZE] (or LEN
if SIZE == -1) and return a tree node representing char* pointer to
it as an ADDR_EXPR (ARRAY_REF (ELTYPE, ...)). When STR is nonnull
diff --git a/gcc/tree.h b/gcc/tree.h
index 507ea25..6f6ad5a 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -5858,6 +5858,11 @@ builtin_decl_implicit (enum built_in_function fncode)
return builtin_info[uns_fncode].decl;
}
+/* For BUILTIN_UNREACHABLE, use one of these or
+ gimple_build_builtin_unreachable instead of one of the above. */
+extern tree builtin_decl_unreachable ();
+extern tree build_builtin_unreachable (location_t);
+
/* Set explicit builtin function nodes and whether it is an implicit
function. */
diff --git a/gcc/tsan.cc b/gcc/tsan.cc
index 02e8ac7..79d4582 100644
--- a/gcc/tsan.cc
+++ b/gcc/tsan.cc
@@ -909,13 +909,13 @@ public:
{}
/* opt_pass methods: */
- opt_pass * clone () { return new pass_tsan (m_ctxt); }
- virtual bool gate (function *)
+ opt_pass * clone () final override { return new pass_tsan (m_ctxt); }
+ bool gate (function *) final override
{
return sanitize_flags_p (SANITIZE_THREAD);
}
- virtual unsigned int execute (function *) { return tsan_pass (); }
+ unsigned int execute (function *) final override { return tsan_pass (); }
}; // class pass_tsan
@@ -950,12 +950,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (sanitize_flags_p (SANITIZE_THREAD) && !optimize);
}
- virtual unsigned int execute (function *) { return tsan_pass (); }
+ unsigned int execute (function *) final override { return tsan_pass (); }
}; // class pass_tsan_O0
diff --git a/gcc/ubsan.cc b/gcc/ubsan.cc
index 6c05814..e51d1e4 100644
--- a/gcc/ubsan.cc
+++ b/gcc/ubsan.cc
@@ -638,27 +638,44 @@ ubsan_create_data (const char *name, int loccnt, const location_t *ploc, ...)
return var;
}
-/* Instrument the __builtin_unreachable call. We just call the libubsan
- routine instead. */
+/* Shared between *build_builtin_unreachable. */
-bool
-ubsan_instrument_unreachable (gimple_stmt_iterator *gsi)
+tree
+sanitize_unreachable_fn (tree *data, location_t loc)
{
- gimple *g;
- location_t loc = gimple_location (gsi_stmt (*gsi));
-
- if (flag_sanitize_undefined_trap_on_error)
- g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
+ tree fn = NULL_TREE;
+ bool san = sanitize_flags_p (SANITIZE_UNREACHABLE);
+ if (san
+ ? (flag_sanitize_trap & SANITIZE_UNREACHABLE)
+ : flag_unreachable_traps)
+ {
+ fn = builtin_decl_explicit (BUILT_IN_TRAP);
+ *data = NULL_TREE;
+ }
+ else if (san)
+ {
+ /* Call ubsan_create_data first as it initializes SANITIZER built-ins. */
+ *data = ubsan_create_data ("__ubsan_unreachable_data", 1, &loc,
+ NULL_TREE, NULL_TREE);
+ fn = builtin_decl_explicit (BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE);
+ *data = build_fold_addr_expr_loc (loc, *data);
+ }
else
{
- tree data = ubsan_create_data ("__ubsan_unreachable_data", 1, &loc,
- NULL_TREE, NULL_TREE);
- data = build_fold_addr_expr_loc (loc, data);
- tree fn
- = builtin_decl_explicit (BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE);
- g = gimple_build_call (fn, 1, data);
+ fn = builtin_decl_explicit (BUILT_IN_UNREACHABLE);
+ *data = NULL_TREE;
}
- gimple_set_location (g, loc);
+ return fn;
+}
+
+/* Rewrite a gcall to __builtin_unreachable for -fsanitize=unreachable. Called
+ by the sanopt pass. */
+
+bool
+ubsan_instrument_unreachable (gimple_stmt_iterator *gsi)
+{
+ location_t loc = gimple_location (gsi_stmt (*gsi));
+ gimple *g = gimple_build_builtin_unreachable (loc);
gsi_replace (gsi, g, false);
return false;
}
@@ -719,7 +736,7 @@ ubsan_expand_bounds_ifn (gimple_stmt_iterator *gsi)
/* Generate __ubsan_handle_out_of_bounds call. */
*gsi = gsi_after_labels (then_bb);
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_BOUNDS)
g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -827,7 +844,8 @@ ubsan_expand_null_ifn (gimple_stmt_iterator *gsip)
set_immediate_dominator (CDI_DOMINATORS, then_bb, cond_bb);
/* Put the ubsan builtin call into the newly created BB. */
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & ((check_align ? SANITIZE_ALIGNMENT + 0 : 0)
+ | (check_null ? SANITIZE_NULL + 0 : 0)))
g = gimple_build_call (builtin_decl_implicit (BUILT_IN_TRAP), 0);
else
{
@@ -997,7 +1015,7 @@ ubsan_expand_objsize_ifn (gimple_stmt_iterator *gsi)
}
/* Generate __ubsan_handle_type_mismatch call. */
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_OBJECT_SIZE)
g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -1143,7 +1161,7 @@ ubsan_expand_ptr_ifn (gimple_stmt_iterator *gsip)
}
/* Put the ubsan builtin call into the newly created BB. */
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_POINTER_OVERFLOW)
g = gimple_build_call (builtin_decl_implicit (BUILT_IN_TRAP), 0);
else
{
@@ -1518,7 +1536,7 @@ tree
ubsan_build_overflow_builtin (tree_code code, location_t loc, tree lhstype,
tree op0, tree op1, tree *datap)
{
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_SI_OVERFLOW)
return build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP), 0);
tree data;
@@ -1741,7 +1759,8 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi)
}
gsi2 = gsi_after_labels (then_bb);
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & (TREE_CODE (type) == BOOLEAN_TYPE
+ ? SANITIZE_BOOL : SANITIZE_ENUM))
g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -1904,7 +1923,7 @@ ubsan_instrument_float_cast (location_t loc, tree type, tree expr)
if (integer_zerop (t))
return NULL_TREE;
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_FLOAT_CAST)
fn = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -1974,7 +1993,7 @@ instrument_nonnull_arg (gimple_stmt_iterator *gsi)
gsi_insert_after (gsi, g, GSI_NEW_STMT);
*gsi = gsi_after_labels (then_bb);
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_NONNULL_ATTRIBUTE)
g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -2030,7 +2049,7 @@ instrument_nonnull_return (gimple_stmt_iterator *gsi)
gsi_insert_after (gsi, g, GSI_NEW_STMT);
*gsi = gsi_after_labels (then_bb);
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_RETURNS_NONNULL_ATTRIBUTE)
g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -2279,7 +2298,7 @@ instrument_builtin (gimple_stmt_iterator *gsi)
gsi_insert_after (gsi, g, GSI_NEW_STMT);
*gsi = gsi_after_labels (then_bb);
- if (flag_sanitize_undefined_trap_on_error)
+ if (flag_sanitize_trap & SANITIZE_BUILTIN)
g = gimple_build_call (builtin_decl_explicit (BUILT_IN_TRAP), 0);
else
{
@@ -2329,7 +2348,7 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return sanitize_flags_p ((SANITIZE_NULL | SANITIZE_SI_OVERFLOW
| SANITIZE_BOOL | SANITIZE_ENUM
@@ -2341,7 +2360,7 @@ public:
| SANITIZE_BUILTIN));
}
- virtual unsigned int execute (function *);
+ unsigned int execute (function *) final override;
}; // class pass_ubsan
diff --git a/gcc/ubsan.h b/gcc/ubsan.h
index 17c5254..71a40a3 100644
--- a/gcc/ubsan.h
+++ b/gcc/ubsan.h
@@ -65,5 +65,6 @@ extern tree ubsan_build_overflow_builtin (tree_code, location_t, tree, tree,
tree, tree *);
extern tree ubsan_instrument_float_cast (location_t, tree, tree);
extern tree ubsan_get_source_location_type (void);
+extern tree sanitize_unreachable_fn (tree *data, location_t loc);
#endif /* GCC_UBSAN_H */
diff --git a/gcc/value-range-equiv.cc b/gcc/value-range-equiv.cc
index b0ae128..bd58e5a 100644
--- a/gcc/value-range-equiv.cc
+++ b/gcc/value-range-equiv.cc
@@ -162,7 +162,7 @@ bool
value_range_equiv::equal_p (const value_range_equiv &other,
bool ignore_equivs) const
{
- return (value_range::equal_p (other)
+ return (value_range::operator== (other)
&& (ignore_equivs || vr_bitmap_equal_p (m_equiv, other.m_equiv)));
}
diff --git a/gcc/value-range-storage.cc b/gcc/value-range-storage.cc
new file mode 100644
index 0000000..ac62bfa
--- /dev/null
+++ b/gcc/value-range-storage.cc
@@ -0,0 +1,217 @@
+/* Support routines for vrange storage.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ Contributed by Aldy Hernandez <aldyh@redhat.com>.
+
+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/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "backend.h"
+#include "tree.h"
+#include "gimple.h"
+#include "ssa.h"
+#include "tree-pretty-print.h"
+#include "fold-const.h"
+#include "gimple-range.h"
+#include "value-range-storage.h"
+
+// Return a newly allocated slot holding R.
+
+void *
+vrange_storage::alloc_slot (const vrange &r)
+{
+ gcc_checking_assert (m_alloc);
+
+ if (is_a <irange> (r))
+ return irange_storage_slot::alloc_slot (*m_alloc, as_a <irange> (r));
+
+ gcc_unreachable ();
+ return NULL;
+}
+
+// Set SLOT to R.
+
+void
+vrange_storage::set_vrange (void *slot, const vrange &r)
+{
+ if (is_a <irange> (r))
+ {
+ irange_storage_slot *s = static_cast <irange_storage_slot *> (slot);
+ gcc_checking_assert (s->fits_p (as_a <irange> (r)));
+ s->set_irange (as_a <irange> (r));
+ }
+ else
+ gcc_unreachable ();
+}
+
+// Restore R from SLOT. TYPE is the type of R.
+
+void
+vrange_storage::get_vrange (const void *slot, vrange &r, tree type)
+{
+ if (is_a <irange> (r))
+ {
+ const irange_storage_slot *s
+ = static_cast <const irange_storage_slot *> (slot);
+ s->get_irange (as_a <irange> (r), type);
+ }
+ else
+ gcc_unreachable ();
+}
+
+// Return TRUE if SLOT can fit R.
+
+bool
+vrange_storage::fits_p (const void *slot, const vrange &r)
+{
+ if (is_a <irange> (r))
+ {
+ const irange_storage_slot *s
+ = static_cast <const irange_storage_slot *> (slot);
+ return s->fits_p (as_a <irange> (r));
+ }
+ gcc_unreachable ();
+ return false;
+}
+
+// Factory that creates a new irange_storage_slot object containing R.
+// This is the only way to construct an irange slot as stack creation
+// is disallowed.
+
+irange_storage_slot *
+irange_storage_slot::alloc_slot (vrange_allocator &allocator, const irange &r)
+{
+ size_t size = irange_storage_slot::size (r);
+ irange_storage_slot *p
+ = static_cast <irange_storage_slot *> (allocator.alloc (size));
+ new (p) irange_storage_slot (r);
+ return p;
+}
+
+// Initialize the current slot with R.
+
+irange_storage_slot::irange_storage_slot (const irange &r)
+{
+ gcc_checking_assert (!r.undefined_p ());
+
+ unsigned prec = TYPE_PRECISION (r.type ());
+ unsigned n = num_wide_ints_needed (r);
+ if (n > MAX_INTS)
+ {
+ int_range<MAX_PAIRS> squash (r);
+ m_ints.set_precision (prec, num_wide_ints_needed (squash));
+ set_irange (squash);
+ }
+ else
+ {
+ m_ints.set_precision (prec, n);
+ set_irange (r);
+ }
+}
+
+// Store R into the current slot.
+
+void
+irange_storage_slot::set_irange (const irange &r)
+{
+ gcc_checking_assert (fits_p (r));
+
+ // Avoid calling unsupported get_nonzero_bits on legacy.
+ if (r.legacy_mode_p ())
+ m_ints[0] = -1;
+ else
+ m_ints[0] = r.get_nonzero_bits ();
+
+ unsigned pairs = r.num_pairs ();
+ for (unsigned i = 0; i < pairs; ++i)
+ {
+ m_ints[i*2 + 1] = r.lower_bound (i);
+ m_ints[i*2 + 2] = r.upper_bound (i);
+ }
+}
+
+// Restore a range of TYPE from the current slot into R.
+
+void
+irange_storage_slot::get_irange (irange &r, tree type) const
+{
+ gcc_checking_assert (TYPE_PRECISION (type) == m_ints.get_precision ());
+
+ r.set_undefined ();
+ unsigned nelements = m_ints.num_elements ();
+ for (unsigned i = 1; i < nelements; i += 2)
+ {
+ int_range<2> tmp (type, m_ints[i], m_ints[i + 1]);
+ r.union_ (tmp);
+ }
+ r.set_nonzero_bits (get_nonzero_bits ());
+}
+
+// Return the size in bytes to allocate a slot that can hold R.
+
+size_t
+irange_storage_slot::size (const irange &r)
+{
+ gcc_checking_assert (!r.undefined_p ());
+
+ unsigned prec = TYPE_PRECISION (r.type ());
+ unsigned n = num_wide_ints_needed (r);
+ if (n > MAX_INTS)
+ n = MAX_INTS;
+ return (sizeof (irange_storage_slot)
+ + trailing_wide_ints<MAX_INTS>::extra_size (prec, n));
+}
+
+// Return the number of wide ints needed to represent R.
+
+unsigned int
+irange_storage_slot::num_wide_ints_needed (const irange &r)
+{
+ return r.num_pairs () * 2 + 1;
+}
+
+// Return TRUE if R fits in the current slot.
+
+bool
+irange_storage_slot::fits_p (const irange &r) const
+{
+ return m_ints.num_elements () >= num_wide_ints_needed (r);
+}
+
+// Dump the current slot.
+
+void
+irange_storage_slot::dump () const
+{
+ fprintf (stderr, "raw irange_storage_slot:\n");
+ for (unsigned i = 1; i < m_ints.num_elements (); i += 2)
+ {
+ m_ints[i].dump ();
+ m_ints[i + 1].dump ();
+ }
+ fprintf (stderr, "NONZERO ");
+ wide_int nz = get_nonzero_bits ();
+ nz.dump ();
+}
+
+DEBUG_FUNCTION void
+debug (const irange_storage_slot &storage)
+{
+ storage.dump ();
+ fprintf (stderr, "\n");
+}
diff --git a/gcc/value-range-storage.h b/gcc/value-range-storage.h
new file mode 100644
index 0000000..7e005e4
--- /dev/null
+++ b/gcc/value-range-storage.h
@@ -0,0 +1,190 @@
+/* Support routines for vrange storage.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ Contributed by Aldy Hernandez <aldyh@redhat.com>.
+
+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/>. */
+
+#ifndef GCC_VALUE_RANGE_STORAGE_H
+#define GCC_VALUE_RANGE_STORAGE_H
+
+// This class is used to allocate the minimum amount of storage needed
+// for a given range. Storage is automatically freed at destruction
+// of the class.
+
+class vrange_allocator
+{
+public:
+ vrange_allocator () { }
+ virtual ~vrange_allocator () { }
+ // Allocate a range of TYPE.
+ vrange *alloc_vrange (tree type);
+ // Allocate a memory block of BYTES.
+ virtual void *alloc (unsigned bytes) = 0;
+ virtual void free (void *p) = 0;
+ // Return a clone of SRC.
+ template <typename T> T *clone (const T &src);
+private:
+ irange *alloc_irange (unsigned pairs);
+ void operator= (const vrange_allocator &) = delete;
+};
+
+// This class is used to allocate chunks of memory that can store
+// ranges as memory efficiently as possible. It is meant to be used
+// when long term storage of a range is needed. The class can be used
+// with any vrange_allocator (i.e. alloca or GC).
+
+class vrange_storage
+{
+public:
+ vrange_storage (vrange_allocator *alloc) : m_alloc (alloc) { }
+ void *alloc_slot (const vrange &r);
+ void free (void *slot) { m_alloc->free (slot); }
+ void get_vrange (const void *slot, vrange &r, tree type);
+ void set_vrange (void *slot, const vrange &r);
+ static bool fits_p (const void *slot, const vrange &r);
+private:
+ DISABLE_COPY_AND_ASSIGN (vrange_storage);
+ vrange_allocator *m_alloc;
+};
+
+// A chunk of memory pointing to an irange storage.
+
+class GTY ((variable_size)) irange_storage_slot
+{
+public:
+ static irange_storage_slot *alloc_slot (vrange_allocator &, const irange &r);
+ void set_irange (const irange &r);
+ void get_irange (irange &r, tree type) const;
+ wide_int get_nonzero_bits () const { return m_ints[0]; }
+ bool fits_p (const irange &r) const;
+ static size_t size (const irange &r);
+ void dump () const;
+private:
+ DISABLE_COPY_AND_ASSIGN (irange_storage_slot);
+ friend void gt_ggc_mx_irange_storage_slot (void *);
+ friend void gt_pch_p_19irange_storage_slot (void *, void *,
+ gt_pointer_operator, void *);
+ friend void gt_pch_nx_irange_storage_slot (void *);
+
+ // This is the maximum number of wide_int's allowed in the trailing
+ // ints structure, without going over 16 bytes (128 bits) in the
+ // control word that preceeds the HOST_WIDE_INTs in
+ // trailing_wide_ints::m_val[].
+ static const unsigned MAX_INTS = 12;
+
+ // Maximum number of range pairs we can handle, considering the
+ // nonzero bits take one wide_int.
+ static const unsigned MAX_PAIRS = (MAX_INTS - 1) / 2;
+
+ // Constructor is private to disallow stack initialization. Use
+ // alloc_slot() to create objects.
+ irange_storage_slot (const irange &r);
+
+ static unsigned num_wide_ints_needed (const irange &r);
+
+ trailing_wide_ints<MAX_INTS> m_ints;
+};
+
+class obstack_vrange_allocator : public vrange_allocator
+{
+public:
+ obstack_vrange_allocator ()
+ {
+ obstack_init (&m_obstack);
+ }
+ virtual ~obstack_vrange_allocator () final override
+ {
+ obstack_free (&m_obstack, NULL);
+ }
+ virtual void *alloc (unsigned bytes) final override
+ {
+ return obstack_alloc (&m_obstack, bytes);
+ }
+ virtual void free (void *) final override { }
+private:
+ obstack m_obstack;
+};
+
+class ggc_vrange_allocator : public vrange_allocator
+{
+public:
+ ggc_vrange_allocator () { }
+ virtual ~ggc_vrange_allocator () final override { }
+ virtual void *alloc (unsigned bytes) final override
+ {
+ return ggc_internal_alloc (bytes);
+ }
+ virtual void free (void *p) final override
+ {
+ return ggc_free (p);
+ }
+};
+
+// Return a new range to hold ranges of TYPE. The newly allocated
+// range is initialized to VR_UNDEFINED.
+
+inline vrange *
+vrange_allocator::alloc_vrange (tree type)
+{
+ if (irange::supports_p (type))
+ return alloc_irange (2);
+
+ gcc_unreachable ();
+}
+
+// Return a new range with NUM_PAIRS.
+
+inline irange *
+vrange_allocator::alloc_irange (unsigned num_pairs)
+{
+ // Never allocate 0 pairs.
+ // Don't allocate 1 either, or we get legacy value_range's.
+ if (num_pairs < 2)
+ num_pairs = 2;
+
+ size_t nbytes = sizeof (tree) * 2 * num_pairs;
+
+ // Allocate the irange and required memory for the vector.
+ void *r = alloc (sizeof (irange));
+ tree *mem = static_cast <tree *> (alloc (nbytes));
+ return new (r) irange (mem, num_pairs);
+}
+
+// Return a clone of an irange.
+
+template <>
+inline irange *
+vrange_allocator::clone <irange> (const irange &src)
+{
+ irange *r = alloc_irange (src.num_pairs ());
+ *r = src;
+ return r;
+}
+
+// Return a clone of a vrange.
+
+template <>
+inline vrange *
+vrange_allocator::clone <vrange> (const vrange &src)
+{
+ if (is_a <irange> (src))
+ return clone <irange> (as_a <irange> (src));
+
+ gcc_unreachable ();
+}
+
+#endif // GCC_VALUE_RANGE_STORAGE_H
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 815cb78..a02fab4 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -274,6 +274,9 @@ irange::operator= (const irange &src)
m_num_ranges = lim;
m_kind = src.m_kind;
+ m_nonzero_mask = src.m_nonzero_mask;
+ if (flag_checking)
+ verify_range ();
return *this;
}
@@ -392,6 +395,7 @@ irange::irange_set (tree min, tree max)
m_base[1] = max;
m_num_ranges = 1;
m_kind = VR_RANGE;
+ m_nonzero_mask = NULL;
normalize_kind ();
if (flag_checking)
@@ -465,6 +469,7 @@ irange::irange_set_anti_range (tree min, tree max)
}
m_kind = VR_RANGE;
+ m_nonzero_mask = NULL;
normalize_kind ();
if (flag_checking)
@@ -524,6 +529,7 @@ irange::set (tree min, tree max, value_range_kind kind)
m_base[0] = min;
m_base[1] = max;
m_num_ranges = 1;
+ m_nonzero_mask = NULL;
return;
}
@@ -573,6 +579,7 @@ irange::set (tree min, tree max, value_range_kind kind)
m_base[0] = min;
m_base[1] = max;
m_num_ranges = 1;
+ m_nonzero_mask = NULL;
normalize_kind ();
if (flag_checking)
verify_range ();
@@ -587,10 +594,14 @@ irange::verify_range ()
if (m_kind == VR_UNDEFINED)
{
gcc_checking_assert (m_num_ranges == 0);
+ gcc_checking_assert (!m_nonzero_mask);
return;
}
+ if (m_nonzero_mask)
+ gcc_checking_assert (wi::to_wide (m_nonzero_mask) != -1);
if (m_kind == VR_VARYING)
{
+ gcc_checking_assert (!m_nonzero_mask);
gcc_checking_assert (m_num_ranges == 1);
gcc_checking_assert (varying_compatible_p ());
return;
@@ -680,15 +691,19 @@ irange::legacy_equal_p (const irange &other) const
if (m_kind == VR_UNDEFINED)
return true;
if (m_kind == VR_VARYING)
- return range_compatible_p (type (), other.type ());
+ {
+ return (range_compatible_p (type (), other.type ())
+ && vrp_operand_equal_p (m_nonzero_mask, other.m_nonzero_mask));
+ }
return (vrp_operand_equal_p (tree_lower_bound (0),
other.tree_lower_bound (0))
&& vrp_operand_equal_p (tree_upper_bound (0),
- other.tree_upper_bound (0)));
+ other.tree_upper_bound (0))
+ && vrp_operand_equal_p (m_nonzero_mask, other.m_nonzero_mask));
}
bool
-irange::equal_p (const irange &other) const
+irange::operator== (const irange &other) const
{
if (legacy_mode_p ())
{
@@ -716,7 +731,7 @@ irange::equal_p (const irange &other) const
|| !operand_equal_p (ub, ub_other, 0))
return false;
}
- return true;
+ return vrp_operand_equal_p (m_nonzero_mask, other.m_nonzero_mask);
}
/* Return TRUE if this is a symbolic range. */
@@ -858,6 +873,14 @@ irange::contains_p (tree cst) const
}
gcc_checking_assert (TREE_CODE (cst) == INTEGER_CST);
+
+ if (m_nonzero_mask)
+ {
+ wide_int cstw = wi::to_wide (cst);
+ if (cstw != 0 && wi::bit_and (wi::to_wide (m_nonzero_mask), cstw) == 0)
+ return false;
+ }
+
signop sign = TYPE_SIGN (TREE_TYPE (cst));
wide_int v = wi::to_wide (cst);
for (unsigned r = 0; r < m_num_ranges; ++r)
@@ -1739,6 +1762,8 @@ irange::legacy_verbose_intersect (const irange *other)
// Perform an efficient union with R when both ranges have only a single pair.
// Excluded are VARYING and UNDEFINED ranges.
+//
+// NOTE: It is the caller's responsibility to set the nonzero mask.
bool
irange::irange_single_pair_union (const irange &r)
@@ -1757,11 +1782,7 @@ irange::irange_single_pair_union (const irange &r)
// Check for overlap/touching ranges, or single target range.
if (m_max_ranges == 1
|| wi::to_widest (m_base[1]) + 1 >= wi::to_widest (r.m_base[0]))
- {
- m_base[1] = r.m_base[1];
- if (varying_compatible_p ())
- m_kind = VR_VARYING;
- }
+ m_base[1] = r.m_base[1];
else
{
// This is a dual range result.
@@ -1769,8 +1790,8 @@ irange::irange_single_pair_union (const irange &r)
m_base[3] = r.m_base[1];
m_num_ranges = 2;
}
- if (flag_checking)
- verify_range ();
+ if (varying_compatible_p ())
+ m_kind = VR_VARYING;
return true;
}
@@ -1797,8 +1818,8 @@ irange::irange_single_pair_union (const irange &r)
m_base[3] = m_base[1];
m_base[1] = r.m_base[1];
}
- if (flag_checking)
- verify_range ();
+ if (varying_compatible_p ())
+ m_kind = VR_VARYING;
return true;
}
@@ -1809,22 +1830,47 @@ irange::irange_union (const irange &r)
{
gcc_checking_assert (!legacy_mode_p () && !r.legacy_mode_p ());
- if (r.undefined_p () || varying_p ())
+ if (r.undefined_p ())
return false;
- if (undefined_p () || r.varying_p ())
+ if (undefined_p ())
{
operator= (r);
+ if (flag_checking)
+ verify_range ();
+ return true;
+ }
+
+ if (varying_p ())
+ return false;
+
+ if (r.varying_p ())
+ {
+ set_varying (type ());
return true;
}
+ // Save the nonzero mask in case the set operations below clobber it.
+ bool ret_nz = union_nonzero_bits (r);
+ tree saved_nz = m_nonzero_mask;
+
+ // The union_nonzero_bits may have turned things into a varying.
+ if (varying_p ())
+ return true;
+
// Special case one range union one range.
if (m_num_ranges == 1 && r.m_num_ranges == 1)
- return irange_single_pair_union (r);
+ {
+ bool ret = irange_single_pair_union (r);
+ set_nonzero_bits (saved_nz);
+ if (flag_checking)
+ verify_range ();
+ return ret || ret_nz;
+ }
// If this ranges fully contains R, then we need do nothing.
if (irange_contains_p (r))
- return false;
+ return ret_nz;
// Do not worry about merging and such by reserving twice as many
// pairs as needed, and then simply sort the 2 ranges into this
@@ -1912,6 +1958,7 @@ irange::irange_union (const irange &r)
m_num_ranges = i / 2;
m_kind = VR_RANGE;
+ m_nonzero_mask = saved_nz;
normalize_kind ();
if (flag_checking)
@@ -1974,25 +2021,44 @@ irange::irange_intersect (const irange &r)
gcc_checking_assert (undefined_p () || r.undefined_p ()
|| range_compatible_p (type (), r.type ()));
- if (undefined_p () || r.varying_p ())
+ if (undefined_p ())
return false;
if (r.undefined_p ())
{
set_undefined ();
return true;
}
+
+ // Save the nonzero mask in case the set operations below clobber it.
+ bool ret_nz = intersect_nonzero_bits (r);
+ tree saved_nz = m_nonzero_mask;
+
+ if (r.varying_p ())
+ return ret_nz;
+
if (varying_p ())
{
operator= (r);
+ if (saved_nz)
+ set_nonzero_bits (saved_nz);
+ if (flag_checking)
+ verify_range ();
return true;
}
if (r.num_pairs () == 1)
- return intersect (r.lower_bound (), r.upper_bound ());
+ {
+ bool res = intersect (r.lower_bound (), r.upper_bound ());
+ if (undefined_p ())
+ return true;
+
+ set_nonzero_bits (saved_nz);
+ return res || saved_nz;
+ }
// If R fully contains this, then intersection will change nothing.
if (r.irange_contains_p (*this))
- return false;
+ return ret_nz;
signop sign = TYPE_SIGN (TREE_TYPE(m_base[0]));
unsigned bld_pair = 0;
@@ -2063,6 +2129,8 @@ irange::irange_intersect (const irange &r)
m_num_ranges = bld_pair;
m_kind = VR_RANGE;
+ if (!undefined_p ())
+ m_nonzero_mask = saved_nz;
normalize_kind ();
if (flag_checking)
@@ -2074,6 +2142,8 @@ irange::irange_intersect (const irange &r)
// Multirange intersect for a specified wide_int [lb, ub] range.
// Return TRUE if intersect changed anything.
+//
+// NOTE: It is the caller's responsibility to intersect the nonzero masks.
bool
irange::intersect (const wide_int& lb, const wide_int& ub)
@@ -2277,6 +2347,104 @@ irange::invert ()
verify_range ();
}
+void
+irange::set_nonzero_bits (tree mask)
+{
+ gcc_checking_assert (!undefined_p ());
+
+ if (!mask)
+ {
+ if (m_nonzero_mask)
+ {
+ m_nonzero_mask = NULL;
+ // Clearing the mask may have turned a range into VARYING.
+ normalize_kind ();
+ }
+ return;
+ }
+ m_nonzero_mask = mask;
+ // Setting the mask may have turned a VARYING into a range.
+ if (m_kind == VR_VARYING)
+ m_kind = VR_RANGE;
+
+ if (flag_checking)
+ verify_range ();
+}
+
+void
+irange::set_nonzero_bits (const wide_int_ref &bits)
+{
+ gcc_checking_assert (!undefined_p ());
+
+ if (bits == -1)
+ {
+ set_nonzero_bits (NULL);
+ return;
+ }
+ set_nonzero_bits (wide_int_to_tree (type (), bits));
+}
+
+wide_int
+irange::get_nonzero_bits () const
+{
+ gcc_checking_assert (!undefined_p ());
+ // Nonzero bits are unsupported in legacy mode. The mask may be set
+ // as a consequence of propagation or reading global ranges, but no
+ // one from legacy land should be querying this.
+ gcc_checking_assert (!legacy_mode_p ());
+
+ // Calculate the nonzero bits inherent in the range.
+ wide_int min = lower_bound ();
+ wide_int max = upper_bound ();
+ wide_int xorv = min ^ max;
+ if (xorv != 0)
+ {
+ unsigned prec = TYPE_PRECISION (type ());
+ xorv = wi::mask (prec - wi::clz (xorv), false, prec);
+ }
+ wide_int mask = min | xorv;
+
+ // Return the nonzero bits augmented by the range.
+ if (m_nonzero_mask)
+ return mask & wi::to_wide (m_nonzero_mask);
+
+ return mask;
+}
+
+// Intersect the nonzero bits in R into THIS.
+
+bool
+irange::intersect_nonzero_bits (const irange &r)
+{
+ gcc_checking_assert (!undefined_p () && !r.undefined_p ());
+
+ if (m_nonzero_mask || r.m_nonzero_mask)
+ {
+ wide_int nz = wi::bit_and (get_nonzero_bits (),
+ r.get_nonzero_bits ());
+ set_nonzero_bits (nz);
+ return true;
+ }
+ return false;
+}
+
+// Union the nonzero bits in R into THIS.
+
+bool
+irange::union_nonzero_bits (const irange &r)
+{
+ gcc_checking_assert (!undefined_p () && !r.undefined_p ());
+
+ if (m_nonzero_mask || r.m_nonzero_mask)
+ {
+ wide_int nz = wi::bit_or (get_nonzero_bits (),
+ r.get_nonzero_bits ());
+ set_nonzero_bits (nz);
+ return true;
+ }
+ return false;
+}
+
static void
dump_bound_with_infinite_markers (FILE *file, tree bound)
{
@@ -2312,6 +2480,7 @@ irange::dump (FILE *file) const
if (varying_p ())
{
fprintf (file, "VARYING");
+ dump_bitmasks (file);
return;
}
if (legacy_mode_p ())
@@ -2321,6 +2490,7 @@ irange::dump (FILE *file) const
fprintf (file, ", ");
dump_bound_with_infinite_markers (file, max ());
fprintf (file, "]");
+ dump_bitmasks (file);
return;
}
for (unsigned i = 0; i < m_num_ranges; ++i)
@@ -2333,6 +2503,21 @@ irange::dump (FILE *file) const
dump_bound_with_infinite_markers (file, ub);
fprintf (file, "]");
}
+ dump_bitmasks (file);
+}
+
+void
+irange::dump_bitmasks (FILE *file) const
+{
+ if (m_nonzero_mask && !legacy_mode_p ())
+ {
+ wide_int nz = get_nonzero_bits ();
+ if (nz != -1)
+ {
+ fprintf (file, " NONZERO ");
+ print_hex (nz, file);
+ }
+ }
}
void
@@ -2899,6 +3084,68 @@ range_tests_misc ()
ASSERT_TRUE (r0.contains_p (UINT (2)));
}
+static void
+range_tests_nonzero_bits ()
+{
+ int_range<2> r0, r1;
+
+ // Adding nonzero bits to a varying drops the varying.
+ r0.set_varying (integer_type_node);
+ r0.set_nonzero_bits (255);
+ ASSERT_TRUE (!r0.varying_p ());
+ // Dropping the nonzero bits brings us back to varying.
+ r0.set_nonzero_bits (-1);
+ ASSERT_TRUE (r0.varying_p ());
+
+ // Test contains_p with nonzero bits.
+ r0.set_zero (integer_type_node);
+ ASSERT_TRUE (r0.contains_p (INT (0)));
+ ASSERT_FALSE (r0.contains_p (INT (1)));
+ r0.set_nonzero_bits (0xfe);
+ ASSERT_FALSE (r0.contains_p (INT (0x100)));
+ ASSERT_FALSE (r0.contains_p (INT (0x3)));
+
+ // Union of nonzero bits.
+ r0.set_varying (integer_type_node);
+ r0.set_nonzero_bits (0xf0);
+ r1.set_varying (integer_type_node);
+ r1.set_nonzero_bits (0xf);
+ r0.union_ (r1);
+ ASSERT_TRUE (r0.get_nonzero_bits () == 0xff);
+
+ // Union where the mask of nonzero bits is implicit from the range.
+ r0.set_varying (integer_type_node);
+ r0.set_nonzero_bits (0xf00);
+ r1.set_zero (integer_type_node); // nonzero mask is implicitly 0
+ r0.union_ (r1);
+ ASSERT_TRUE (r0.get_nonzero_bits () == 0xf00);
+
+ // Intersect of nonzero bits.
+ r0.set (INT (0), INT (255));
+ r0.set_nonzero_bits (0xfe);
+ r1.set_varying (integer_type_node);
+ r1.set_nonzero_bits (0xf0);
+ r0.intersect (r1);
+ ASSERT_TRUE (r0.get_nonzero_bits () == 0xf0);
+
+ // Intersect where the mask of nonzero bits is implicit from the range.
+ r0.set_varying (integer_type_node);
+ r1.set (INT (0), INT (255));
+ r0.intersect (r1);
+ ASSERT_TRUE (r0.get_nonzero_bits () == 0xff);
+
+ // The union of a mask of 0xff..ffff00 with a mask of 0xff spans the
+ // entire domain, and makes the range a varying.
+ r0.set_varying (integer_type_node);
+ wide_int x = wi::shwi (0xff, TYPE_PRECISION (integer_type_node));
+ x = wi::bit_not (x);
+ r0.set_nonzero_bits (x); // 0xff..ff00
+ r1.set_varying (integer_type_node);
+ r1.set_nonzero_bits (0xff);
+ r0.union_ (r1);
+ ASSERT_TRUE (r0.varying_p ());
+}
+
void
range_tests ()
{
@@ -2906,6 +3153,7 @@ range_tests ()
range_tests_irange3 ();
range_tests_int_range_max ();
range_tests_strict_enum ();
+ range_tests_nonzero_bits ();
range_tests_misc ();
}
diff --git a/gcc/value-range.h b/gcc/value-range.h
index dc6f6b0..0e34118 100644
--- a/gcc/value-range.h
+++ b/gcc/value-range.h
@@ -109,6 +109,7 @@ protected:
class GTY((user)) irange : public vrange
{
friend class vrange_allocator;
+ friend class irange_storage_slot; // For legacy_mode_p checks.
public:
// In-place setters.
virtual void set (tree, tree, value_range_kind = VR_RANGE) override;
@@ -149,6 +150,10 @@ public:
virtual bool fits_p (const vrange &r) const override;
virtual void dump (FILE * = stderr) const override;
+ // Nonzero masks.
+ wide_int get_nonzero_bits () const;
+ void set_nonzero_bits (const wide_int_ref &bits);
+
// Deprecated legacy public methods.
tree min () const; // DEPRECATED
tree max () const; // DEPRECATED
@@ -157,8 +162,6 @@ public:
void normalize_symbolics (); // DEPRECATED
void normalize_addresses (); // DEPRECATED
bool may_contain_p (tree) const; // DEPRECATED
- void set (tree); // DEPRECATED
- bool equal_p (const irange &) const; // DEPRECATED
bool legacy_verbose_union_ (const class irange *); // DEPRECATED
bool legacy_verbose_intersect (const irange *); // DEPRECATED
@@ -198,10 +201,15 @@ private:
void irange_set_1bit_anti_range (tree, tree);
bool varying_compatible_p () const;
+ void set_nonzero_bits (tree mask);
+ bool intersect_nonzero_bits (const irange &r);
+ bool union_nonzero_bits (const irange &r);
+ void dump_bitmasks (FILE *) const;
bool intersect (const wide_int& lb, const wide_int& ub);
unsigned char m_num_ranges;
unsigned char m_max_ranges;
+ tree m_nonzero_mask;
tree *m_base;
};
@@ -547,7 +555,8 @@ irange::varying_compatible_p () const
signop sign = TYPE_SIGN (t);
if (INTEGRAL_TYPE_P (t))
return (wi::to_wide (l) == wi::min_value (prec, sign)
- && wi::to_wide (u) == wi::max_value (prec, sign));
+ && wi::to_wide (u) == wi::max_value (prec, sign)
+ && !m_nonzero_mask);
if (POINTER_TYPE_P (t))
return (wi::to_wide (l) == 0
&& wi::to_wide (u) == wi::max_value (prec, sign));
@@ -610,6 +619,8 @@ gt_ggc_mx (irange *x)
gt_ggc_mx (x->m_base[i * 2]);
gt_ggc_mx (x->m_base[i * 2 + 1]);
}
+ if (x->m_nonzero_mask)
+ gt_ggc_mx (x->m_nonzero_mask);
}
inline void
@@ -620,6 +631,8 @@ gt_pch_nx (irange *x)
gt_pch_nx (x->m_base[i * 2]);
gt_pch_nx (x->m_base[i * 2 + 1]);
}
+ if (x->m_nonzero_mask)
+ gt_pch_nx (x->m_nonzero_mask);
}
inline void
@@ -630,6 +643,8 @@ gt_pch_nx (irange *x, gt_pointer_operator op, void *cookie)
op (&x->m_base[i * 2], NULL, cookie);
op (&x->m_base[i * 2 + 1], NULL, cookie);
}
+ if (x->m_nonzero_mask)
+ op (&x->m_nonzero_mask, NULL, cookie);
}
template<unsigned N>
@@ -720,16 +735,11 @@ int_range<N>::operator= (const int_range &src)
}
inline void
-irange::set (tree val)
-{
- set (val, val);
-}
-
-inline void
irange::set_undefined ()
{
m_kind = VR_UNDEFINED;
m_num_ranges = 0;
+ m_nonzero_mask = NULL;
}
inline void
@@ -737,6 +747,7 @@ irange::set_varying (tree type)
{
m_kind = VR_VARYING;
m_num_ranges = 1;
+ m_nonzero_mask = NULL;
if (INTEGRAL_TYPE_P (type))
{
@@ -765,12 +776,6 @@ irange::set_varying (tree type)
m_base[0] = m_base[1] = error_mark_node;
}
-inline bool
-irange::operator== (const irange &r) const
-{
- return equal_p (r);
-}
-
// Return the lower bound of a sub-range. PAIR is the sub-range in
// question.
@@ -846,7 +851,7 @@ irange::set_zero (tree type)
{
tree z = build_int_cst (type, 0);
if (legacy_mode_p ())
- set (z);
+ set (z, z);
else
irange_set (z, z);
}
@@ -857,7 +862,7 @@ inline void
irange::normalize_kind ()
{
if (m_num_ranges == 0)
- m_kind = VR_UNDEFINED;
+ set_undefined ();
else if (varying_compatible_p ())
{
if (m_kind == VR_RANGE)
@@ -896,98 +901,4 @@ vrp_val_min (const_tree type)
return NULL_TREE;
}
-// This is the range storage class. It is used to allocate the
-// minimum amount of storage needed for a given range. Storage is
-// automatically freed at destruction of the class.
-
-class vrange_allocator
-{
-public:
- vrange_allocator ();
- ~vrange_allocator ();
- // Allocate a range of TYPE.
- vrange *alloc_vrange (tree type);
- // Allocate a memory block of BYTES.
- void *alloc (unsigned bytes);
- // Return a clone of SRC.
- template <typename T> T *clone (const T &src);
-private:
- irange *alloc_irange (unsigned pairs);
- DISABLE_COPY_AND_ASSIGN (vrange_allocator);
- struct obstack m_obstack;
-};
-
-inline
-vrange_allocator::vrange_allocator ()
-{
- obstack_init (&m_obstack);
-}
-
-inline
-vrange_allocator::~vrange_allocator ()
-{
- obstack_free (&m_obstack, NULL);
-}
-
-// Provide a hunk of memory from the obstack.
-
-inline void *
-vrange_allocator::alloc (unsigned bytes)
-{
- return obstack_alloc (&m_obstack, bytes);
-}
-
-// Return a new range to hold ranges of TYPE. The newly allocated
-// range is initialized to VR_UNDEFINED.
-
-inline vrange *
-vrange_allocator::alloc_vrange (tree type)
-{
- if (irange::supports_p (type))
- return alloc_irange (2);
-
- gcc_unreachable ();
-}
-
-// Return a new range with NUM_PAIRS.
-
-inline irange *
-vrange_allocator::alloc_irange (unsigned num_pairs)
-{
- // Never allocate 0 pairs.
- // Don't allocate 1 either, or we get legacy value_range's.
- if (num_pairs < 2)
- num_pairs = 2;
-
- size_t nbytes = sizeof (tree) * 2 * num_pairs;
-
- // Allocate the irange and required memory for the vector.
- void *r = alloc (sizeof (irange));
- tree *mem = static_cast <tree *> (alloc (nbytes));
- return new (r) irange (mem, num_pairs);
-}
-
-// Return a clone of an irange.
-
-template <>
-inline irange *
-vrange_allocator::clone <irange> (const irange &src)
-{
- irange *r = alloc_irange (src.num_pairs ());
- *r = src;
- return r;
-}
-
-// Return a clone of a vrange.
-
-template <>
-inline vrange *
-vrange_allocator::clone <vrange> (const vrange &src)
-{
- if (is_a <irange> (src))
- return clone <irange> (as_a <irange> (src));
-
- gcc_unreachable ();
-}
-
#endif // GCC_VALUE_RANGE_H
diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc
index 85d159f..13ce441 100644
--- a/gcc/value-relation.cc
+++ b/gcc/value-relation.cc
@@ -184,6 +184,71 @@ relation_transitive (relation_kind r1, relation_kind r2)
return rr_transitive_table[r1][r2];
}
+// This vector maps a relation to the equivalent tree code.
+
+tree_code relation_to_code [VREL_LAST + 1] = {
+ ERROR_MARK, ERROR_MARK, LT_EXPR, LE_EXPR, GT_EXPR, GE_EXPR, EQ_EXPR,
+ NE_EXPR };
+
+// This routine validates that a relation can be applied to a specific set of
+// ranges. In particular, floating point x == x may not be true if the NaN bit
+// is set in the range. Symbolically the oracle will determine x == x,
+// but specific range instances may override this.
+// To verify, attempt to fold the relation using the supplied ranges.
+// One would expect [1,1] to be returned, anything else means there is something
+// in the range preventing the relation from applying.
+// If there is no mechanism to verify, assume the relation is acceptable.
+
+relation_kind
+relation_oracle::validate_relation (relation_kind rel, vrange &op1, vrange &op2)
+{
+ // If there is no mapping to a tree code, leave the relation as is.
+ tree_code code = relation_to_code [rel];
+ if (code == ERROR_MARK)
+ return rel;
+
+ // Undefined ranges cannot be checked either.
+ if (op1.undefined_p () || op2.undefined_p ())
+ return rel;
+
+ tree t1 = op1.type ();
+ tree t2 = op2.type ();
+
+ // If the range types are not compatible, no relation can exist.
+ if (!range_compatible_p (t1, t2))
+ return VREL_VARYING;
+
+ // If there is no handler, leave the relation as is.
+ range_op_handler handler (code, t1);
+ if (!handler)
+ return rel;
+
+ // If the relation cannot be folded for any reason, leave as is.
+ Value_Range result (boolean_type_node);
+ if (!handler.fold_range (result, boolean_type_node, op1, op2, rel))
+ return rel;
+
+ // The expression op1 REL op2 using REL should fold to [1,1].
+ // Any other result means the relation is not verified to be true.
+ if (result.varying_p () || result.zero_p ())
+ return VREL_VARYING;
+
+ return rel;
+}
+
+// If no range is available, create a varying range for each SSA name and
+// verify.
+
+relation_kind
+relation_oracle::validate_relation (relation_kind rel, tree ssa1, tree ssa2)
+{
+ Value_Range op1, op2;
+ op1.set_varying (TREE_TYPE (ssa1));
+ op2.set_varying (TREE_TYPE (ssa2));
+
+ return validate_relation (rel, op1, op2);
+}
+
// Given an equivalence set EQUIV, set all the bits in B that are still valid
// members of EQUIV in basic block BB.
@@ -602,7 +667,8 @@ private:
inline void
value_relation::set_relation (relation_kind r, tree n1, tree n2)
{
- gcc_checking_assert (SSA_NAME_VERSION (n1) != SSA_NAME_VERSION (n2));
+ gcc_checking_assert (SSA_NAME_VERSION (n1) != SSA_NAME_VERSION (n2)
+ || r == VREL_EQ);
related = r;
name1 = n1;
name2 = n2;
@@ -1199,7 +1265,7 @@ dom_oracle::query_relation (basic_block bb, tree ssa1, tree ssa2)
if (kind != VREL_VARYING)
return kind;
- // Query using the equiovalence sets.
+ // Query using the equivalence sets.
kind = query_relation (bb, equiv1, equiv2);
return kind;
}
diff --git a/gcc/value-relation.h b/gcc/value-relation.h
index 478729b..77e1208 100644
--- a/gcc/value-relation.h
+++ b/gcc/value-relation.h
@@ -95,15 +95,19 @@ public:
virtual void register_relation (basic_block, relation_kind, tree, tree) = 0;
// Query for a relation between two ssa names in a basic block.
virtual relation_kind query_relation (basic_block, tree, tree) = 0;
- // Query for a relation between two equivalency stes in a basic block.
- virtual relation_kind query_relation (basic_block, const_bitmap,
- const_bitmap) = 0;
+
+ relation_kind validate_relation (relation_kind, tree, tree);
+ relation_kind validate_relation (relation_kind, vrange &, vrange &);
virtual void dump (FILE *, basic_block) const = 0;
virtual void dump (FILE *) const = 0;
void debug () const;
protected:
void valid_equivs (bitmap b, const_bitmap equivs, basic_block bb);
+ // Query for a relation between two equivalency sets in a basic block.
+ virtual relation_kind query_relation (basic_block, const_bitmap,
+ const_bitmap) = 0;
+ friend class path_oracle;
};
// This class represents an equivalency set, and contains a link to the next
diff --git a/gcc/var-tracking.cc b/gcc/var-tracking.cc
index 7c3ad0a..235981d 100644
--- a/gcc/var-tracking.cc
+++ b/gcc/var-tracking.cc
@@ -10592,12 +10592,12 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *)
+ bool gate (function *) final override
{
return (flag_var_tracking && !targetm.delay_vartrack);
}
- virtual unsigned int execute (function *)
+ unsigned int execute (function *) final override
{
return variable_tracking_main ();
}
diff --git a/gcc/varasm.cc b/gcc/varasm.cc
index 826a9ca..4db8506 100644
--- a/gcc/varasm.cc
+++ b/gcc/varasm.cc
@@ -4716,7 +4716,10 @@ narrowing_initializer_constant_valid_p (tree value, tree endtype, tree *cache)
{
tree inner = TREE_OPERAND (op0, 0);
if (inner == error_mark_node
- || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
+ || ! INTEGRAL_TYPE_P (TREE_TYPE (op0))
+ || ! SCALAR_INT_MODE_P (TYPE_MODE (TREE_TYPE (op0)))
+ || ! INTEGRAL_TYPE_P (TREE_TYPE (inner))
+ || ! SCALAR_INT_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
|| (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (op0)))
> GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (inner)))))
break;
@@ -4728,7 +4731,10 @@ narrowing_initializer_constant_valid_p (tree value, tree endtype, tree *cache)
{
tree inner = TREE_OPERAND (op1, 0);
if (inner == error_mark_node
- || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
+ || ! INTEGRAL_TYPE_P (TREE_TYPE (op1))
+ || ! SCALAR_INT_MODE_P (TYPE_MODE (TREE_TYPE (op1)))
+ || ! INTEGRAL_TYPE_P (TREE_TYPE (inner))
+ || ! SCALAR_INT_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
|| (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (op1)))
> GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (inner)))))
break;
diff --git a/gcc/vr-values.cc b/gcc/vr-values.cc
index 38f204e..6b9c630 100644
--- a/gcc/vr-values.cc
+++ b/gcc/vr-values.cc
@@ -831,14 +831,14 @@ vr_values::extract_range_from_binary_expr (value_range_equiv *vr,
if (TREE_CODE (op0) == SSA_NAME)
vr0 = *(get_value_range (op0));
else if (is_gimple_min_invariant (op0))
- vr0.set (op0);
+ vr0.set (op0, op0);
else
vr0.set_varying (TREE_TYPE (op0));
if (TREE_CODE (op1) == SSA_NAME)
vr1 = *(get_value_range (op1));
else if (is_gimple_min_invariant (op1))
- vr1.set (op1);
+ vr1.set (op1, op1);
else
vr1.set_varying (TREE_TYPE (op1));
@@ -936,7 +936,7 @@ vr_values::extract_range_from_binary_expr (value_range_equiv *vr,
/* Try with [OP0, OP0] and VR1. */
else
- n_vr0.set (op0);
+ n_vr0.set (op0, op0);
range_fold_binary_expr (vr, code, expr_type, &n_vr0, &vr1);
}
@@ -976,7 +976,7 @@ vr_values::extract_range_from_unary_expr (value_range_equiv *vr,
if (TREE_CODE (op0) == SSA_NAME)
vr0 = *(get_value_range (op0));
else if (is_gimple_min_invariant (op0))
- vr0.set (op0);
+ vr0.set (op0, op0);
else
vr0.set_varying (type);
@@ -1064,14 +1064,14 @@ check_for_binary_op_overflow (range_query *query,
if (TREE_CODE (op0) == SSA_NAME)
vr0 = *query->get_value_range (op0, s);
else if (TREE_CODE (op0) == INTEGER_CST)
- vr0.set (op0);
+ vr0.set (op0, op0);
else
vr0.set_varying (TREE_TYPE (op0));
if (TREE_CODE (op1) == SSA_NAME)
vr1 = *query->get_value_range (op1, s);
else if (TREE_CODE (op1) == INTEGER_CST)
- vr1.set (op1);
+ vr1.set (op1, op1);
else
vr1.set_varying (TREE_TYPE (op1));
@@ -1747,7 +1747,7 @@ bounds_of_var_in_loop (tree *min, tree *max, range_query *query,
if (TREE_CODE (init) == SSA_NAME)
query->range_of_expr (vr0, init, stmt);
else if (is_gimple_min_invariant (init))
- vr0.set (init);
+ vr0.set (init, init);
else
vr0.set_varying (TREE_TYPE (init));
tree tem = wide_int_to_tree (TREE_TYPE (init), wtmp);
@@ -1763,7 +1763,7 @@ bounds_of_var_in_loop (tree *min, tree *max, range_query *query,
if (TREE_CODE (init) == SSA_NAME)
query->range_of_expr (initvr, init, stmt);
else if (is_gimple_min_invariant (init))
- initvr.set (init);
+ initvr.set (init, init);
else
return false;
@@ -3291,14 +3291,14 @@ simplify_using_ranges::simplify_bit_ops_using_ranges
if (TREE_CODE (op0) == SSA_NAME)
vr0 = *(query->get_value_range (op0, stmt));
else if (is_gimple_min_invariant (op0))
- vr0.set (op0);
+ vr0.set (op0, op0);
else
return false;
if (TREE_CODE (op1) == SSA_NAME)
vr1 = *(query->get_value_range (op1, stmt));
else if (is_gimple_min_invariant (op1))
- vr1.set (op1);
+ vr1.set (op1, op1);
else
return false;
diff --git a/gcc/vr-values.h b/gcc/vr-values.h
index f018d0d..8c8f031 100644
--- a/gcc/vr-values.h
+++ b/gcc/vr-values.h
@@ -41,6 +41,7 @@ public:
// ?? These should be cleaned, merged, and made private.
tree vrp_evaluate_conditional (tree_code, tree, tree, gimple *);
void vrp_visit_cond_stmt (gcond *, edge *);
+ bool fold_cond (gcond *);
tree vrp_evaluate_conditional_warnv_with_ops (gimple *stmt, enum tree_code,
tree, tree, bool,
bool *, bool *);
@@ -53,7 +54,6 @@ private:
bool simplify_bit_ops_using_ranges (gimple_stmt_iterator *, gimple *);
bool simplify_min_or_max_using_ranges (gimple_stmt_iterator *, gimple *);
bool simplify_cond_using_ranges_1 (gcond *);
- bool fold_cond (gcond *);
bool simplify_switch_using_ranges (gswitch *);
bool simplify_float_conversion_using_ranges (gimple_stmt_iterator *,
gimple *);
diff --git a/gcc/vtable-verify.cc b/gcc/vtable-verify.cc
index 48f9987..24894e7 100644
--- a/gcc/vtable-verify.cc
+++ b/gcc/vtable-verify.cc
@@ -818,8 +818,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return (flag_vtable_verify); }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return (flag_vtable_verify); }
+ unsigned int execute (function *) final override;
}; // class pass_vtable_verify
diff --git a/gcc/web.cc b/gcc/web.cc
index a5874a9..bd0ec94 100644
--- a/gcc/web.cc
+++ b/gcc/web.cc
@@ -323,8 +323,8 @@ public:
{}
/* opt_pass methods: */
- virtual bool gate (function *) { return (optimize > 0 && flag_web); }
- virtual unsigned int execute (function *);
+ bool gate (function *) final override { return (optimize > 0 && flag_web); }
+ unsigned int execute (function *) final override;
}; // class pass_web
diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc
index f61b9fe..1fee078 100644
--- a/gcc/wide-int.cc
+++ b/gcc/wide-int.cc
@@ -842,6 +842,13 @@ wi::shifted_mask (HOST_WIDE_INT *val, unsigned int start, unsigned int width,
val[i++] = negate ? block : ~block;
}
+ if (end >= prec)
+ {
+ if (!shift)
+ val[i++] = negate ? 0 : -1;
+ return i;
+ }
+
while (i < end / HOST_BITS_PER_WIDE_INT)
/* 1111111 */
val[i++] = negate ? 0 : -1;
@@ -853,7 +860,7 @@ wi::shifted_mask (HOST_WIDE_INT *val, unsigned int start, unsigned int width,
HOST_WIDE_INT block = (HOST_WIDE_INT_1U << shift) - 1;
val[i++] = negate ? ~block : block;
}
- else if (end < prec)
+ else
val[i++] = negate ? -1 : 0;
return i;
@@ -2583,6 +2590,10 @@ wide_int_cc_tests ()
run_all_wide_int_tests <widest_int> ();
test_overflow ();
test_round_for_mask ();
+ ASSERT_EQ (wi::mask (128, false, 128),
+ wi::shifted_mask (0, 128, false, 128));
+ ASSERT_EQ (wi::mask (128, true, 128),
+ wi::shifted_mask (0, 128, true, 128));
}
} // namespace selftest
diff --git a/gcc/wide-int.h b/gcc/wide-int.h
index 8041b61..d6807e3 100644
--- a/gcc/wide-int.h
+++ b/gcc/wide-int.h
@@ -1373,10 +1373,13 @@ namespace wi
: public int_traits <wide_int_storage> {};
}
-/* An array of N wide_int-like objects that can be put at the end of
- a variable-sized structure. Use extra_size to calculate how many
- bytes beyond the sizeof need to be allocated. Use set_precision
- to initialize the structure. */
+/* A variable-length array of wide_int-like objects that can be put
+ at the end of a variable-sized structure. The number of objects is
+ at most N and can be set at runtime by using set_precision().
+
+ Use extra_size to calculate how many bytes beyond the
+ sizeof need to be allocated. Use set_precision to initialize the
+ structure. */
template <int N>
struct GTY((user)) trailing_wide_ints
{
@@ -1387,6 +1390,9 @@ private:
/* The shared maximum length of each number. */
unsigned char m_max_len;
+ /* The number of elements. */
+ unsigned char m_num_elements;
+
/* The current length of each number.
Avoid char array so the whole structure is not a typeless storage
that will, in turn, turn off TBAA on gimple, trees and RTL. */
@@ -1399,12 +1405,15 @@ private:
public:
typedef WIDE_INT_REF_FOR (trailing_wide_int_storage) const_reference;
- void set_precision (unsigned int);
+ void set_precision (unsigned int precision, unsigned int num_elements = N);
unsigned int get_precision () const { return m_precision; }
+ unsigned int num_elements () const { return m_num_elements; }
trailing_wide_int operator [] (unsigned int);
const_reference operator [] (unsigned int) const;
- static size_t extra_size (unsigned int);
- size_t extra_size () const { return extra_size (m_precision); }
+ static size_t extra_size (unsigned int precision,
+ unsigned int num_elements = N);
+ size_t extra_size () const { return extra_size (m_precision,
+ m_num_elements); }
};
inline trailing_wide_int_storage::
@@ -1457,11 +1466,14 @@ trailing_wide_int_storage::operator = (const T &x)
}
/* Initialize the structure and record that all elements have precision
- PRECISION. */
+ PRECISION. NUM_ELEMENTS can be no more than N. */
template <int N>
inline void
-trailing_wide_ints <N>::set_precision (unsigned int precision)
+trailing_wide_ints <N>::set_precision (unsigned int precision,
+ unsigned int num_elements)
{
+ gcc_checking_assert (num_elements <= N);
+ m_num_elements = num_elements;
m_precision = precision;
m_max_len = ((precision + HOST_BITS_PER_WIDE_INT - 1)
/ HOST_BITS_PER_WIDE_INT);
@@ -1484,15 +1496,19 @@ trailing_wide_ints <N>::operator [] (unsigned int index) const
m_len[index].len, m_precision);
}
-/* Return how many extra bytes need to be added to the end of the structure
- in order to handle N wide_ints of precision PRECISION. */
+/* Return how many extra bytes need to be added to the end of the
+ structure in order to handle NUM_ELEMENTS wide_ints of precision
+ PRECISION. NUM_ELEMENTS is the number of elements, and defaults
+ to N. */
template <int N>
inline size_t
-trailing_wide_ints <N>::extra_size (unsigned int precision)
+trailing_wide_ints <N>::extra_size (unsigned int precision,
+ unsigned int num_elements)
{
unsigned int max_len = ((precision + HOST_BITS_PER_WIDE_INT - 1)
/ HOST_BITS_PER_WIDE_INT);
- return (N * max_len - 1) * sizeof (HOST_WIDE_INT);
+ gcc_checking_assert (num_elements <= N);
+ return (num_elements * max_len - 1) * sizeof (HOST_WIDE_INT);
}
/* This macro is used in structures that end with a trailing_wide_ints field
diff --git a/include/ChangeLog b/include/ChangeLog
index 4eab21e..07f2b7c 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,16 @@
+2022-07-06 Thomas Schwinge <thomas@codesourcery.com>
+
+ * gomp-constants.h (OMP_REQUIRES_[...]): Update comment.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * gomp-constants.h (GOMP_VERSION): Bump to 2.
+ (GOMP_REQUIRES_UNIFIED_ADDRESS, GOMP_REQUIRES_UNIFIED_SHARED_MEMORY,
+ GOMP_REQUIRES_REVERSE_OFFLOAD, GOMP_REQUIRES_TARGET_USED):
+ New defines.
+
2022-06-13 Jakub Jelinek <jakub@redhat.com>
* gomp-constants.h (GOMP_DEVICE_INVALID): Define.
diff --git a/include/gomp-constants.h b/include/gomp-constants.h
index e4dd8ef..84316f9 100644
--- a/include/gomp-constants.h
+++ b/include/gomp-constants.h
@@ -282,7 +282,7 @@ enum gomp_map_kind
/* Versions of libgomp and device-specific plugins. GOMP_VERSION
should be incremented whenever an ABI-incompatible change is introduced
to the plugin interface defined in libgomp/libgomp.h. */
-#define GOMP_VERSION 1
+#define GOMP_VERSION 2
#define GOMP_VERSION_NVIDIA_PTX 1
#define GOMP_VERSION_INTEL_MIC 0
#define GOMP_VERSION_GCN 2
@@ -341,6 +341,12 @@ enum gomp_map_kind
#define GOMP_DEPEND_MUTEXINOUTSET 4
#define GOMP_DEPEND_INOUTSET 5
+/* Flag values for OpenMP 'requires' directive features. */
+#define GOMP_REQUIRES_UNIFIED_ADDRESS 0x10
+#define GOMP_REQUIRES_UNIFIED_SHARED_MEMORY 0x20
+#define GOMP_REQUIRES_REVERSE_OFFLOAD 0x80
+#define GOMP_REQUIRES_TARGET_USED 0x200
+
/* HSA specific data structures. */
/* Identifiers of device-specific target arguments. */
diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index b1331d3..291ba2d 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,3 +1,26 @@
+2022-07-08 Ian Lance Taylor <iant@golang.org>
+
+ * configure.ac: Check for sys/link.h. Use either link.h or
+ sys/link.h when checking for dl_iterate_phdr.
+ * elf.c: Include sys/link.h if available.
+ * configure, config.h.in: Regenerate.
+
+2022-07-07 Ian Lance Taylor <iant@golang.org>
+
+ * macho.c (backtrace_initialize) [HAVE_MACH_O_DYLD_H]: Don't exit
+ loop if we can't find debug info for one shared library.
+
+2022-07-07 Ian Lance Taylor <iant@golang.org>
+
+ * Makefile.am (MAKETESTS): New variable split out of TESTS.
+ (CLEANFILES): Replace TESTS with BUILDTESTS and MAKETESTS.
+ * Makefile.in: Regenerate.
+
+2022-06-27 Ian Lance Taylor <iant@golang.org>
+
+ * configure.ac: Use grep instead of fgrep.
+ * configure, Makefile.in: Regenerate.
+
2022-05-28 Ian Lance Taylor <iant@golang.org>
PR libbacktrace/105721
diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
index bf507b7..9f8516d 100644
--- a/libbacktrace/Makefile.am
+++ b/libbacktrace/Makefile.am
@@ -85,13 +85,19 @@ libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD)
# Testsuite.
-# Add a test to this variable if you want it to be built.
+# Add a test to this variable if you want it to be built as a program,
+# with SOURCES, etc.
check_PROGRAMS =
# Add a test to this variable if you want it to be run.
TESTS =
-# Add a test to this variable if you want it to be built and run.
+# Add a test to this variable if you want it to be built as a Makefile
+# target and run.
+MAKETESTS =
+
+# Add a test to this variable if you want it to be built as a program,
+# with SOURCES, etc., and run.
BUILDTESTS =
# Add a file to this variable if you want it to be built for testing.
@@ -250,7 +256,7 @@ b2test_LDFLAGS = -Wl,--build-id
b2test_LDADD = libbacktrace_elf_for_test.la
check_PROGRAMS += b2test
-TESTS += b2test_buildid
+MAKETESTS += b2test_buildid
if HAVE_DWZ
@@ -260,7 +266,7 @@ b3test_LDFLAGS = -Wl,--build-id
b3test_LDADD = libbacktrace_elf_for_test.la
check_PROGRAMS += b3test
-TESTS += b3test_dwz_buildid
+MAKETESTS += b3test_dwz_buildid
endif HAVE_DWZ
@@ -311,11 +317,11 @@ if HAVE_DWZ
cp $< $@; \
fi
-TESTS += btest_dwz
+MAKETESTS += btest_dwz
if HAVE_OBJCOPY_DEBUGLINK
-TESTS += btest_dwz_gnudebuglink
+MAKETESTS += btest_dwz_gnudebuglink
endif HAVE_OBJCOPY_DEBUGLINK
@@ -416,7 +422,7 @@ endif HAVE_PTHREAD
if HAVE_OBJCOPY_DEBUGLINK
-TESTS += btest_gnudebuglink
+MAKETESTS += btest_gnudebuglink
%_gnudebuglink: %
$(OBJCOPY) --only-keep-debug $< $@.debug
@@ -494,7 +500,7 @@ endif USE_DSYMUTIL
if HAVE_MINIDEBUG
-TESTS += mtest_minidebug
+MAKETESTS += mtest_minidebug
%_minidebug: %
$(NM) -D $< -P --defined-only | $(AWK) '{ print $$1 }' | sort > $<.dsyms
@@ -536,10 +542,11 @@ endif HAVE_ELF
check_PROGRAMS += $(BUILDTESTS)
-TESTS += $(BUILDTESTS)
+TESTS += $(MAKETESTS) $(BUILDTESTS)
CLEANFILES = \
- $(TESTS) *.debug elf_for_test.c edtest2_build.c gen_edtest2_build \
+ $(MAKETESTS) $(BUILDTESTS) *.debug elf_for_test.c edtest2_build.c \
+ gen_edtest2_build \
*.dsyms *.fsyms *.keepsyms *.dbg *.mdbg *.mdbg.xz *.strip
clean-local:
diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in
index 08cdd21..268edda 100644
--- a/libbacktrace/Makefile.in
+++ b/libbacktrace/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
# Makefile.am -- Backtrace Makefile.
-# Copyright (C) 2012-2021 Free Software Foundation, Inc.
+# Copyright (C) 2012-2022 Free Software Foundation, Inc.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -122,9 +122,7 @@ host_triplet = @host@
target_triplet = @target@
check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
$(am__EXEEXT_14)
-TESTS = $(am__append_4) $(am__append_7) $(am__append_9) \
- $(am__append_12) $(am__append_13) $(am__append_20) \
- $(am__append_26) $(am__EXEEXT_14)
+TESTS = $(am__append_4) $(MAKETESTS) $(am__EXEEXT_14)
@HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_1 = libbacktrace_elf_for_test.la
@NATIVE_TRUE@am__append_2 = test_elf_32 test_elf_64 test_macho \
@NATIVE_TRUE@ test_xcoff_32 test_xcoff_64 test_pecoff \
@@ -988,7 +986,13 @@ libbacktrace_la_LIBADD = \
libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD)
-# Add a test to this variable if you want it to be built and run.
+# Add a test to this variable if you want it to be built as a Makefile
+# target and run.
+MAKETESTS = $(am__append_7) $(am__append_9) $(am__append_12) \
+ $(am__append_13) $(am__append_20) $(am__append_26)
+
+# Add a test to this variable if you want it to be built as a program,
+# with SOURCES, etc., and run.
BUILDTESTS = $(am__append_2) $(am__append_10) $(am__append_11) \
$(am__append_16) $(am__append_17) $(am__append_18) \
$(am__append_21) $(am__append_22) $(am__append_24) \
@@ -1130,7 +1134,8 @@ libbacktrace_TEST_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) -g
@HAVE_ELF_TRUE@xztest_alloc_LDADD = libbacktrace_alloc.la \
@HAVE_ELF_TRUE@ $(am__append_28) $(CLOCK_GETTIME_LINK)
CLEANFILES = \
- $(TESTS) *.debug elf_for_test.c edtest2_build.c gen_edtest2_build \
+ $(MAKETESTS) $(BUILDTESTS) *.debug elf_for_test.c edtest2_build.c \
+ gen_edtest2_build \
*.dsyms *.fsyms *.keepsyms *.dbg *.mdbg *.mdbg.xz *.strip
diff --git a/libbacktrace/config.h.in b/libbacktrace/config.h.in
index cdb416e..a21e2ea 100644
--- a/libbacktrace/config.h.in
+++ b/libbacktrace/config.h.in
@@ -85,6 +85,9 @@
/* Define to 1 if you have the <sys/ldr.h> header file. */
#undef HAVE_SYS_LDR_H
+/* Define to 1 if you have the <sys/link.h> header file. */
+#undef HAVE_SYS_LINK_H
+
/* Define to 1 if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H
diff --git a/libbacktrace/configure b/libbacktrace/configure
index 17f470a..705b71b 100755
--- a/libbacktrace/configure
+++ b/libbacktrace/configure
@@ -13267,26 +13267,31 @@ fi
# Check for dl_iterate_phdr.
-for ac_header in link.h
+for ac_header in link.h sys/link.h
do :
- ac_fn_c_check_header_mongrel "$LINENO" "link.h" "ac_cv_header_link_h" "$ac_includes_default"
-if test "x$ac_cv_header_link_h" = xyes; then :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_LINK_H 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
fi
done
-if test "$ac_cv_header_link_h" = "no"; then
+if test "$ac_cv_header_link_h" = "no" -a "$ac_cv_header_sys_link_h" = "no"; then
have_dl_iterate_phdr=no
else
if test -n "${with_target_subdir}"; then
+ link_h=link.h
+ if test "$ac_cv_header_link_h" = "no"; then
+ link_h=sys/link.h
+ fi
# When built as a GCC target library, we can't do a link test.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <link.h>
+#include <$link_h>
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
@@ -13831,7 +13836,7 @@ else
libbacktrace_cv_objcopy_debuglink=no
elif ! test -n "${OBJCOPY}"; then
libbacktrace_cv_objcopy_debuglink=no
-elif ${OBJCOPY} --help | fgrep add-gnu-debuglink >/dev/null 2>&1; then
+elif ${OBJCOPY} --help | grep add-gnu-debuglink >/dev/null 2>&1; then
libbacktrace_cv_objcopy_debuglink=yes
else
libbacktrace_cv_objcopy_debuglink=no
diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac
index 597c970..1daaa2f6 100644
--- a/libbacktrace/configure.ac
+++ b/libbacktrace/configure.ac
@@ -335,13 +335,17 @@ fi
AC_SUBST(BACKTRACE_USES_MALLOC)
# Check for dl_iterate_phdr.
-AC_CHECK_HEADERS(link.h)
-if test "$ac_cv_header_link_h" = "no"; then
+AC_CHECK_HEADERS(link.h sys/link.h)
+if test "$ac_cv_header_link_h" = "no" -a "$ac_cv_header_sys_link_h" = "no"; then
have_dl_iterate_phdr=no
else
if test -n "${with_target_subdir}"; then
+ link_h=link.h
+ if test "$ac_cv_header_link_h" = "no"; then
+ link_h=sys/link.h
+ fi
# When built as a GCC target library, we can't do a link test.
- AC_EGREP_HEADER([dl_iterate_phdr], [link.h], [have_dl_iterate_phdr=yes],
+ AC_EGREP_HEADER([dl_iterate_phdr], [$link_h], [have_dl_iterate_phdr=yes],
[have_dl_iterate_phdr=no])
else
AC_CHECK_FUNC([dl_iterate_phdr], [have_dl_iterate_phdr=yes],
@@ -500,7 +504,7 @@ AC_CACHE_CHECK([whether objcopy supports debuglink],
libbacktrace_cv_objcopy_debuglink=no
elif ! test -n "${OBJCOPY}"; then
libbacktrace_cv_objcopy_debuglink=no
-elif ${OBJCOPY} --help | fgrep add-gnu-debuglink >/dev/null 2>&1; then
+elif ${OBJCOPY} --help | grep add-gnu-debuglink >/dev/null 2>&1; then
libbacktrace_cv_objcopy_debuglink=yes
else
libbacktrace_cv_objcopy_debuglink=no
diff --git a/libbacktrace/elf.c b/libbacktrace/elf.c
index 8b82dd4..181d195 100644
--- a/libbacktrace/elf.c
+++ b/libbacktrace/elf.c
@@ -40,7 +40,12 @@ POSSIBILITY OF SUCH DAMAGE. */
#include <unistd.h>
#ifdef HAVE_DL_ITERATE_PHDR
-#include <link.h>
+ #ifdef HAVE_LINK_H
+ #include <link.h>
+ #endif
+ #ifdef HAVE_SYS_LINK_H
+ #include <sys/link.h>
+ #endif
#endif
#include "backtrace.h"
diff --git a/libbacktrace/macho.c b/libbacktrace/macho.c
index 3f40811..16f4065 100644
--- a/libbacktrace/macho.c
+++ b/libbacktrace/macho.c
@@ -1268,7 +1268,7 @@ backtrace_initialize (struct backtrace_state *state, const char *filename,
mff = macho_nodebug;
if (!macho_add (state, name, d, 0, NULL, base_address, 0,
error_callback, data, &mff, &mfs))
- return 0;
+ continue;
if (mff != macho_nodebug)
macho_fileline_fn = mff;
diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog
index acb4b56..e4b21c8 100644
--- a/libcc1/ChangeLog
+++ b/libcc1/ChangeLog
@@ -1,3 +1,9 @@
+2022-06-27 Sergei Trofimovich <siarheit@google.com>
+
+ PR c++/106102
+ * libcc1plugin.cc: Include <memory> via "system.h".
+ * libcp1plugin.cc: Ditto.
+
2022-06-01 David Seifert <soap@gentoo.org>
PR plugins/95648
diff --git a/libcc1/libcc1plugin.cc b/libcc1/libcc1plugin.cc
index 12ab5a57..bdd0bda 100644
--- a/libcc1/libcc1plugin.cc
+++ b/libcc1/libcc1plugin.cc
@@ -31,6 +31,7 @@
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
+#define INCLUDE_MEMORY
#include "gcc-plugin.h"
#include "system.h"
#include "coretypes.h"
diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc
index 83dab7f..e2d5039 100644
--- a/libcc1/libcp1plugin.cc
+++ b/libcc1/libcp1plugin.cc
@@ -32,6 +32,7 @@
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
+#define INCLUDE_MEMORY
#include "gcc-plugin.h"
#include "system.h"
#include "coretypes.h"
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index a2e6171..6b883a0 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,20 @@
+2022-07-07 David Malcolm <dmalcolm@redhat.com>
+
+ * include/line-map.h: Include <utility>.
+ (class label_text): Delete maybe_free method in favor of a
+ destructor. Add move ctor and assignment operator. Add deletion
+ of the copy ctor and copy-assignment operator. Rename field
+ m_caller_owned to m_owned. Add std::move where necessary; add
+ moved_from member function.
+
+2022-06-28 Lewis Hyatt <lhyatt@gmail.com>
+
+ * ucnid.h: Regenerated for Unicode 14.0.
+
+2022-06-26 Lewis Hyatt <lhyatt@gmail.com>
+
+ * generated_cpp_wcwidth.h: Generated from updated Unicode data files.
+
2022-05-29 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/105732
diff --git a/libcpp/generated_cpp_wcwidth.h b/libcpp/generated_cpp_wcwidth.h
index abe1be3..200e176 100644
--- a/libcpp/generated_cpp_wcwidth.h
+++ b/libcpp/generated_cpp_wcwidth.h
@@ -1,5 +1,5 @@
/* Generated by contrib/unicode/gen_wcwidth.py, with the help of glibc's
- utf8_gen.py, using version 13.0.0 of the Unicode standard. */
+ utf8_gen.py, using version 14.0.0 of the Unicode standard. */
static const cppchar_t wcwidth_range_ends[] = {
0x2ff, 0x36f, 0x482, 0x489, 0x590, 0x5bd, 0x5be, 0x5bf,
@@ -8,56 +8,56 @@ static const cppchar_t wcwidth_range_ends[] = {
0x6de, 0x6e4, 0x6e6, 0x6e8, 0x6e9, 0x6ed, 0x710, 0x711,
0x72f, 0x74a, 0x7a5, 0x7b0, 0x7ea, 0x7f3, 0x7fc, 0x7fd,
0x815, 0x819, 0x81a, 0x823, 0x824, 0x827, 0x828, 0x82d,
- 0x858, 0x85b, 0x8d2, 0x8e1, 0x8e2, 0x902, 0x939, 0x93a,
- 0x93b, 0x93c, 0x940, 0x948, 0x94c, 0x94d, 0x950, 0x957,
- 0x961, 0x963, 0x980, 0x981, 0x9bb, 0x9bc, 0x9c0, 0x9c4,
- 0x9cc, 0x9cd, 0x9e1, 0x9e3, 0x9fd, 0x9fe, 0xa00, 0xa02,
- 0xa3b, 0xa3c, 0xa40, 0xa42, 0xa46, 0xa48, 0xa4a, 0xa4d,
- 0xa50, 0xa51, 0xa6f, 0xa71, 0xa74, 0xa75, 0xa80, 0xa82,
- 0xabb, 0xabc, 0xac0, 0xac5, 0xac6, 0xac8, 0xacc, 0xacd,
- 0xae1, 0xae3, 0xaf9, 0xaff, 0xb00, 0xb01, 0xb3b, 0xb3c,
- 0xb3e, 0xb3f, 0xb40, 0xb44, 0xb4c, 0xb4d, 0xb54, 0xb56,
- 0xb61, 0xb63, 0xb81, 0xb82, 0xbbf, 0xbc0, 0xbcc, 0xbcd,
- 0xbff, 0xc00, 0xc03, 0xc04, 0xc3d, 0xc40, 0xc45, 0xc48,
- 0xc49, 0xc4d, 0xc54, 0xc56, 0xc61, 0xc63, 0xc80, 0xc81,
- 0xcbb, 0xcbc, 0xcbe, 0xcbf, 0xcc5, 0xcc6, 0xccb, 0xccd,
- 0xce1, 0xce3, 0xcff, 0xd01, 0xd3a, 0xd3c, 0xd40, 0xd44,
- 0xd4c, 0xd4d, 0xd61, 0xd63, 0xd80, 0xd81, 0xdc9, 0xdca,
- 0xdd1, 0xdd4, 0xdd5, 0xdd6, 0xe30, 0xe31, 0xe33, 0xe3a,
- 0xe46, 0xe4e, 0xeb0, 0xeb1, 0xeb3, 0xebc, 0xec7, 0xecd,
- 0xf17, 0xf19, 0xf34, 0xf35, 0xf36, 0xf37, 0xf38, 0xf39,
- 0xf70, 0xf7e, 0xf7f, 0xf84, 0xf85, 0xf87, 0xf8c, 0xf97,
- 0xf98, 0xfbc, 0xfc5, 0xfc6, 0x102c, 0x1030, 0x1031, 0x1037,
- 0x1038, 0x103a, 0x103c, 0x103e, 0x1057, 0x1059, 0x105d, 0x1060,
- 0x1070, 0x1074, 0x1081, 0x1082, 0x1084, 0x1086, 0x108c, 0x108d,
- 0x109c, 0x109d, 0x10ff, 0x115f, 0x11ff, 0x135c, 0x135f, 0x1711,
- 0x1714, 0x1731, 0x1734, 0x1751, 0x1753, 0x1771, 0x1773, 0x17b3,
- 0x17b5, 0x17b6, 0x17bd, 0x17c5, 0x17c6, 0x17c8, 0x17d3, 0x17dc,
- 0x17dd, 0x180a, 0x180e, 0x1884, 0x1886, 0x18a8, 0x18a9, 0x191f,
- 0x1922, 0x1926, 0x1928, 0x1931, 0x1932, 0x1938, 0x193b, 0x1a16,
- 0x1a18, 0x1a1a, 0x1a1b, 0x1a55, 0x1a56, 0x1a57, 0x1a5e, 0x1a5f,
- 0x1a60, 0x1a61, 0x1a62, 0x1a64, 0x1a6c, 0x1a72, 0x1a7c, 0x1a7e,
- 0x1a7f, 0x1aaf, 0x1ac0, 0x1aff, 0x1b03, 0x1b33, 0x1b34, 0x1b35,
- 0x1b3a, 0x1b3b, 0x1b3c, 0x1b41, 0x1b42, 0x1b6a, 0x1b73, 0x1b7f,
- 0x1b81, 0x1ba1, 0x1ba5, 0x1ba7, 0x1ba9, 0x1baa, 0x1bad, 0x1be5,
- 0x1be6, 0x1be7, 0x1be9, 0x1bec, 0x1bed, 0x1bee, 0x1bf1, 0x1c2b,
- 0x1c33, 0x1c35, 0x1c37, 0x1ccf, 0x1cd2, 0x1cd3, 0x1ce0, 0x1ce1,
- 0x1ce8, 0x1cec, 0x1ced, 0x1cf3, 0x1cf4, 0x1cf7, 0x1cf9, 0x1dbf,
- 0x1df9, 0x1dfa, 0x1dff, 0x200a, 0x200f, 0x2029, 0x202e, 0x205f,
- 0x2064, 0x2065, 0x206f, 0x20cf, 0x20f0, 0x2319, 0x231b, 0x2328,
- 0x232a, 0x23e8, 0x23ec, 0x23ef, 0x23f0, 0x23f2, 0x23f3, 0x25fc,
- 0x25fe, 0x2613, 0x2615, 0x2647, 0x2653, 0x267e, 0x267f, 0x2692,
- 0x2693, 0x26a0, 0x26a1, 0x26a9, 0x26ab, 0x26bc, 0x26be, 0x26c3,
- 0x26c5, 0x26cd, 0x26ce, 0x26d3, 0x26d4, 0x26e9, 0x26ea, 0x26f1,
- 0x26f3, 0x26f4, 0x26f5, 0x26f9, 0x26fa, 0x26fc, 0x26fd, 0x2704,
- 0x2705, 0x2709, 0x270b, 0x2727, 0x2728, 0x274b, 0x274c, 0x274d,
- 0x274e, 0x2752, 0x2755, 0x2756, 0x2757, 0x2794, 0x2797, 0x27af,
- 0x27b0, 0x27be, 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f, 0x2b50, 0x2b54,
- 0x2b55, 0x2cee, 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf, 0x2dff, 0x2e7f,
- 0x2e99, 0x2e9a, 0x2ef3, 0x2eff, 0x2fd5, 0x2fef, 0x2ffb, 0x2fff,
- 0x3029, 0x302d, 0x303e, 0x3040, 0x3096, 0x3098, 0x309a, 0x30ff,
- 0x3104, 0x312f, 0x3130, 0x318e, 0x318f, 0x31e3, 0x31ef, 0x321e,
- 0x321f, 0x9ffc, 0x9fff, 0xa48c, 0xa48f, 0xa4c6, 0xa66e, 0xa672,
+ 0x858, 0x85b, 0x897, 0x89f, 0x8c9, 0x8e1, 0x8e2, 0x902,
+ 0x939, 0x93a, 0x93b, 0x93c, 0x940, 0x948, 0x94c, 0x94d,
+ 0x950, 0x957, 0x961, 0x963, 0x980, 0x981, 0x9bb, 0x9bc,
+ 0x9c0, 0x9c4, 0x9cc, 0x9cd, 0x9e1, 0x9e3, 0x9fd, 0x9fe,
+ 0xa00, 0xa02, 0xa3b, 0xa3c, 0xa40, 0xa42, 0xa46, 0xa48,
+ 0xa4a, 0xa4d, 0xa50, 0xa51, 0xa6f, 0xa71, 0xa74, 0xa75,
+ 0xa80, 0xa82, 0xabb, 0xabc, 0xac0, 0xac5, 0xac6, 0xac8,
+ 0xacc, 0xacd, 0xae1, 0xae3, 0xaf9, 0xaff, 0xb00, 0xb01,
+ 0xb3b, 0xb3c, 0xb3e, 0xb3f, 0xb40, 0xb44, 0xb4c, 0xb4d,
+ 0xb54, 0xb56, 0xb61, 0xb63, 0xb81, 0xb82, 0xbbf, 0xbc0,
+ 0xbcc, 0xbcd, 0xbff, 0xc00, 0xc03, 0xc04, 0xc3b, 0xc3c,
+ 0xc3d, 0xc40, 0xc45, 0xc48, 0xc49, 0xc4d, 0xc54, 0xc56,
+ 0xc61, 0xc63, 0xc80, 0xc81, 0xcbb, 0xcbc, 0xcbe, 0xcbf,
+ 0xcc5, 0xcc6, 0xccb, 0xccd, 0xce1, 0xce3, 0xcff, 0xd01,
+ 0xd3a, 0xd3c, 0xd40, 0xd44, 0xd4c, 0xd4d, 0xd61, 0xd63,
+ 0xd80, 0xd81, 0xdc9, 0xdca, 0xdd1, 0xdd4, 0xdd5, 0xdd6,
+ 0xe30, 0xe31, 0xe33, 0xe3a, 0xe46, 0xe4e, 0xeb0, 0xeb1,
+ 0xeb3, 0xebc, 0xec7, 0xecd, 0xf17, 0xf19, 0xf34, 0xf35,
+ 0xf36, 0xf37, 0xf38, 0xf39, 0xf70, 0xf7e, 0xf7f, 0xf84,
+ 0xf85, 0xf87, 0xf8c, 0xf97, 0xf98, 0xfbc, 0xfc5, 0xfc6,
+ 0x102c, 0x1030, 0x1031, 0x1037, 0x1038, 0x103a, 0x103c, 0x103e,
+ 0x1057, 0x1059, 0x105d, 0x1060, 0x1070, 0x1074, 0x1081, 0x1082,
+ 0x1084, 0x1086, 0x108c, 0x108d, 0x109c, 0x109d, 0x10ff, 0x115f,
+ 0x11ff, 0x135c, 0x135f, 0x1711, 0x1714, 0x1731, 0x1733, 0x1751,
+ 0x1753, 0x1771, 0x1773, 0x17b3, 0x17b5, 0x17b6, 0x17bd, 0x17c5,
+ 0x17c6, 0x17c8, 0x17d3, 0x17dc, 0x17dd, 0x180a, 0x180f, 0x1884,
+ 0x1886, 0x18a8, 0x18a9, 0x191f, 0x1922, 0x1926, 0x1928, 0x1931,
+ 0x1932, 0x1938, 0x193b, 0x1a16, 0x1a18, 0x1a1a, 0x1a1b, 0x1a55,
+ 0x1a56, 0x1a57, 0x1a5e, 0x1a5f, 0x1a60, 0x1a61, 0x1a62, 0x1a64,
+ 0x1a6c, 0x1a72, 0x1a7c, 0x1a7e, 0x1a7f, 0x1aaf, 0x1ace, 0x1aff,
+ 0x1b03, 0x1b33, 0x1b34, 0x1b35, 0x1b3a, 0x1b3b, 0x1b3c, 0x1b41,
+ 0x1b42, 0x1b6a, 0x1b73, 0x1b7f, 0x1b81, 0x1ba1, 0x1ba5, 0x1ba7,
+ 0x1ba9, 0x1baa, 0x1bad, 0x1be5, 0x1be6, 0x1be7, 0x1be9, 0x1bec,
+ 0x1bed, 0x1bee, 0x1bf1, 0x1c2b, 0x1c33, 0x1c35, 0x1c37, 0x1ccf,
+ 0x1cd2, 0x1cd3, 0x1ce0, 0x1ce1, 0x1ce8, 0x1cec, 0x1ced, 0x1cf3,
+ 0x1cf4, 0x1cf7, 0x1cf9, 0x1dbf, 0x1dff, 0x200a, 0x200f, 0x2029,
+ 0x202e, 0x205f, 0x2064, 0x2065, 0x206f, 0x20cf, 0x20f0, 0x2319,
+ 0x231b, 0x2328, 0x232a, 0x23e8, 0x23ec, 0x23ef, 0x23f0, 0x23f2,
+ 0x23f3, 0x25fc, 0x25fe, 0x2613, 0x2615, 0x2647, 0x2653, 0x267e,
+ 0x267f, 0x2692, 0x2693, 0x26a0, 0x26a1, 0x26a9, 0x26ab, 0x26bc,
+ 0x26be, 0x26c3, 0x26c5, 0x26cd, 0x26ce, 0x26d3, 0x26d4, 0x26e9,
+ 0x26ea, 0x26f1, 0x26f3, 0x26f4, 0x26f5, 0x26f9, 0x26fa, 0x26fc,
+ 0x26fd, 0x2704, 0x2705, 0x2709, 0x270b, 0x2727, 0x2728, 0x274b,
+ 0x274c, 0x274d, 0x274e, 0x2752, 0x2755, 0x2756, 0x2757, 0x2794,
+ 0x2797, 0x27af, 0x27b0, 0x27be, 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f,
+ 0x2b50, 0x2b54, 0x2b55, 0x2cee, 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf,
+ 0x2dff, 0x2e7f, 0x2e99, 0x2e9a, 0x2ef3, 0x2eff, 0x2fd5, 0x2fef,
+ 0x2ffb, 0x2fff, 0x3029, 0x302d, 0x303e, 0x3040, 0x3096, 0x3098,
+ 0x309a, 0x30ff, 0x3104, 0x312f, 0x3130, 0x318e, 0x318f, 0x31e3,
+ 0x31ef, 0x321e, 0x321f, 0xa48c, 0xa48f, 0xa4c6, 0xa66e, 0xa672,
0xa673, 0xa67d, 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, 0xa801, 0xa802,
0xa805, 0xa806, 0xa80a, 0xa80b, 0xa824, 0xa826, 0xa82b, 0xa82c,
0xa8c3, 0xa8c5, 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, 0xa925, 0xa92d,
@@ -73,8 +73,9 @@ static const cppchar_t wcwidth_range_ends[] = {
0xffdf, 0xffe6, 0xfff8, 0xfffb, 0x101fc, 0x101fd, 0x102df, 0x102e0,
0x10375, 0x1037a, 0x10a00, 0x10a03, 0x10a04, 0x10a06, 0x10a0b, 0x10a0f,
0x10a37, 0x10a3a, 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, 0x10d23, 0x10d27,
- 0x10eaa, 0x10eac, 0x10f45, 0x10f50, 0x11000, 0x11001, 0x11037, 0x11046,
- 0x1107e, 0x11081, 0x110b2, 0x110b6, 0x110b8, 0x110ba, 0x110ff, 0x11102,
+ 0x10eaa, 0x10eac, 0x10f45, 0x10f50, 0x10f81, 0x10f85, 0x11000, 0x11001,
+ 0x11037, 0x11046, 0x1106f, 0x11070, 0x11072, 0x11074, 0x1107e, 0x11081,
+ 0x110b2, 0x110b6, 0x110b8, 0x110ba, 0x110c1, 0x110c2, 0x110ff, 0x11102,
0x11126, 0x1112b, 0x1112c, 0x11134, 0x11172, 0x11173, 0x1117f, 0x11181,
0x111b5, 0x111be, 0x111c8, 0x111cc, 0x111ce, 0x111cf, 0x1122e, 0x11231,
0x11233, 0x11234, 0x11235, 0x11237, 0x1123d, 0x1123e, 0x112de, 0x112df,
@@ -95,26 +96,28 @@ static const cppchar_t wcwidth_range_ends[] = {
0x11d8f, 0x11d91, 0x11d94, 0x11d95, 0x11d96, 0x11d97, 0x11ef2, 0x11ef4,
0x1342f, 0x13438, 0x16aef, 0x16af4, 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f,
0x16f8e, 0x16f92, 0x16fdf, 0x16fe3, 0x16fe4, 0x16fef, 0x16ff1, 0x16fff,
- 0x187f7, 0x187ff, 0x18cd5, 0x18cff, 0x18d08, 0x1afff, 0x1b11e, 0x1b14f,
- 0x1b152, 0x1b163, 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f,
- 0x1bca3, 0x1d166, 0x1d169, 0x1d172, 0x1d182, 0x1d184, 0x1d18b, 0x1d1a9,
- 0x1d1ad, 0x1d241, 0x1d244, 0x1d9ff, 0x1da36, 0x1da3a, 0x1da6c, 0x1da74,
- 0x1da75, 0x1da83, 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0, 0x1daaf, 0x1dfff,
- 0x1e006, 0x1e007, 0x1e018, 0x1e01a, 0x1e021, 0x1e022, 0x1e024, 0x1e025,
- 0x1e02a, 0x1e12f, 0x1e136, 0x1e2eb, 0x1e2ef, 0x1e8cf, 0x1e8d6, 0x1e943,
- 0x1e94a, 0x1f003, 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190,
- 0x1f19a, 0x1f1ff, 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f,
- 0x1f251, 0x1f25f, 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, 0x1f335, 0x1f336,
- 0x1f37c, 0x1f37d, 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df,
- 0x1f3f0, 0x1f3f3, 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, 0x1f440, 0x1f441,
- 0x1f4fc, 0x1f4fe, 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, 0x1f567, 0x1f579,
- 0x1f57a, 0x1f594, 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f,
- 0x1f6c5, 0x1f6cb, 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, 0x1f6d7, 0x1f6ea,
- 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f90b, 0x1f93a, 0x1f93b,
- 0x1f945, 0x1f946, 0x1f978, 0x1f979, 0x1f9cb, 0x1f9cc, 0x1f9ff, 0x1fa6f,
- 0x1fa74, 0x1fa77, 0x1fa7a, 0x1fa7f, 0x1fa86, 0x1fa8f, 0x1faa8, 0x1faaf,
- 0x1fab6, 0x1fabf, 0x1fac2, 0x1facf, 0x1fad6, 0x1ffff, 0x2a6dd, 0x2a6ff,
- 0x2b734, 0x2b73f, 0x2b81d, 0x2b81f, 0x2cea1, 0x2ceaf, 0x2ebe0, 0x2f7ff,
+ 0x187f7, 0x187ff, 0x18cd5, 0x18cff, 0x18d08, 0x1afef, 0x1aff3, 0x1aff4,
+ 0x1affb, 0x1affc, 0x1affe, 0x1afff, 0x1b122, 0x1b14f, 0x1b152, 0x1b163,
+ 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, 0x1bca3, 0x1ceff,
+ 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, 0x1d182, 0x1d184,
+ 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d9ff, 0x1da36, 0x1da3a,
+ 0x1da6c, 0x1da74, 0x1da75, 0x1da83, 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0,
+ 0x1daaf, 0x1dfff, 0x1e006, 0x1e007, 0x1e018, 0x1e01a, 0x1e021, 0x1e022,
+ 0x1e024, 0x1e025, 0x1e02a, 0x1e12f, 0x1e136, 0x1e2ad, 0x1e2ae, 0x1e2eb,
+ 0x1e2ef, 0x1e8cf, 0x1e8d6, 0x1e943, 0x1e94a, 0x1f003, 0x1f004, 0x1f0ce,
+ 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190, 0x1f19a, 0x1f1ff, 0x1f202, 0x1f20f,
+ 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f, 0x1f251, 0x1f25f, 0x1f265, 0x1f2ff,
+ 0x1f320, 0x1f32c, 0x1f335, 0x1f336, 0x1f37c, 0x1f37d, 0x1f393, 0x1f39f,
+ 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df, 0x1f3f0, 0x1f3f3, 0x1f3f4, 0x1f3f7,
+ 0x1f43e, 0x1f43f, 0x1f440, 0x1f441, 0x1f4fc, 0x1f4fe, 0x1f53d, 0x1f54a,
+ 0x1f54e, 0x1f54f, 0x1f567, 0x1f579, 0x1f57a, 0x1f594, 0x1f596, 0x1f5a3,
+ 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f, 0x1f6c5, 0x1f6cb, 0x1f6cc, 0x1f6cf,
+ 0x1f6d2, 0x1f6d4, 0x1f6d7, 0x1f6dc, 0x1f6df, 0x1f6ea, 0x1f6ec, 0x1f6f3,
+ 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f7ef, 0x1f7f0, 0x1f90b, 0x1f93a, 0x1f93b,
+ 0x1f945, 0x1f946, 0x1f9ff, 0x1fa6f, 0x1fa74, 0x1fa77, 0x1fa7c, 0x1fa7f,
+ 0x1fa86, 0x1fa8f, 0x1faac, 0x1faaf, 0x1faba, 0x1fabf, 0x1fac5, 0x1facf,
+ 0x1fad9, 0x1fadf, 0x1fae7, 0x1faef, 0x1faf6, 0x1ffff, 0x2a6df, 0x2a6ff,
+ 0x2b738, 0x2b73f, 0x2b81d, 0x2b81f, 0x2cea1, 0x2ceaf, 0x2ebe0, 0x2f7ff,
0x2fa1d, 0x2ffff, 0x3134a, 0xe0000, 0xe0001, 0xe001f, 0xe007f, 0xe00ff,
0xe01ef,
};
@@ -129,16 +132,16 @@ static const unsigned char wcwidth_widths[] = {
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
- 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, 2, 1, 0, 2,
- 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, 2, 1,
+ 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 2, 1, 2,
@@ -150,10 +153,11 @@ static const unsigned char wcwidth_widths[] = {
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 1,
- 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ 1, 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
+ 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
+ 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
index 8033572..c6379ce 100644
--- a/libcpp/include/line-map.h
+++ b/libcpp/include/line-map.h
@@ -22,6 +22,8 @@ along with this program; see the file COPYING3. If not see
#ifndef LIBCPP_LINE_MAP_H
#define LIBCPP_LINE_MAP_H
+#include <utility>
+
#ifndef GTY
#define GTY(x) /* nothing */
#endif
@@ -1836,43 +1838,71 @@ class label_text
{
public:
label_text ()
- : m_buffer (NULL), m_caller_owned (false)
+ : m_buffer (NULL), m_owned (false)
{}
- void maybe_free ()
+ ~label_text ()
+ {
+ if (m_owned)
+ free (m_buffer);
+ }
+
+ /* Move ctor. */
+ label_text (label_text &&other)
+ : m_buffer (other.m_buffer), m_owned (other.m_owned)
+ {
+ other.moved_from ();
+ }
+
+ /* Move assignment. */
+ label_text & operator= (label_text &&other)
{
- if (m_caller_owned)
+ if (m_owned)
free (m_buffer);
+ m_buffer = other.m_buffer;
+ m_owned = other.m_owned;
+ other.moved_from ();
+ return *this;
}
+ /* Delete the copy ctor and copy-assignment operator. */
+ label_text (const label_text &) = delete;
+ label_text & operator= (const label_text &) = delete;
+
/* Create a label_text instance that borrows BUFFER from a
longer-lived owner. */
static label_text borrow (const char *buffer)
{
- return label_text (const_cast <char *> (buffer), false);
+ return std::move (label_text (const_cast <char *> (buffer), false));
}
/* Create a label_text instance that takes ownership of BUFFER. */
static label_text take (char *buffer)
{
- return label_text (buffer, true);
+ return std::move (label_text (buffer, true));
}
/* Take ownership of the buffer, copying if necessary. */
char *take_or_copy ()
{
- if (m_caller_owned)
+ if (m_owned)
return m_buffer;
else
return xstrdup (m_buffer);
}
+ void moved_from ()
+ {
+ m_buffer = NULL;
+ m_owned = false;
+ }
+
char *m_buffer;
- bool m_caller_owned;
+ bool m_owned;
private:
label_text (char *buffer, bool owned)
- : m_buffer (buffer), m_caller_owned (owned)
+ : m_buffer (buffer), m_owned (owned)
{}
};
diff --git a/libcpp/ucnid.h b/libcpp/ucnid.h
index b15c123..1384b9a 100644
--- a/libcpp/ucnid.h
+++ b/libcpp/ucnid.h
@@ -437,11 +437,16 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x085b },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x085f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x086a },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x089f },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x08b4 },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x08b5 },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x08c7 },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x08d2 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x086f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0887 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0888 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x088e },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0897 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x0898 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x089b },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x089f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x08c9 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x08ce },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x08d3 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x08e1 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x08e2 },
@@ -698,7 +703,8 @@ static const struct ucnrange ucnranges[] = {
{ C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c33 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c34 },
{ C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c39 },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c3c },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c3b },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 7, 0x0c3c },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c3d },
{ C99| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x0c44 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c45 },
@@ -712,6 +718,8 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 91, 0x0c56 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c57 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c5a },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5c },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c5d },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5f },
{ C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c61 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x0c63 },
@@ -748,7 +756,8 @@ static const struct ucnrange ucnranges[] = {
{ C99| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x0ccd },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cd4 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 0, 0x0cd6 },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdd },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdc },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0cdd },
{ C99| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0cde },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdf },
{ C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0ce1 },
@@ -1059,12 +1068,10 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16ed },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16f8 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16ff },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x170c },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x170d },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1711 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1713 },
-{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x1714 },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x171f },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x1715 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x171e },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1731 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1733 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x1734 },
@@ -1092,7 +1099,6 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x180a },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x180d },
{ 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x180e },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x180f },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1819 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x181f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1878 },
@@ -1148,6 +1154,11 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1abd },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1abe },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1ac0 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ac2 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1ac4 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ac9 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1aca },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ace },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1aff },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1b04 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b05 },
@@ -1174,7 +1185,7 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1b42 },
{ 0| 0| 0|C11| 0|CXX23|NXX23| 0|NFC|NKC| 0, 0, 0x1b43 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x1b44 },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b4b },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b4c },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1b4f },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1b59 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1b6a },
@@ -1253,7 +1264,7 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 232, 0x1df6 },
{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 228, 0x1df8 },
{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1df9 },
-{ 0| 0| 0|C11|N11| 0| 0|CID|NFC|NKC| 0, 0, 0x1dfa },
+{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 218, 0x1dfa },
{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1dfb },
{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 233, 0x1dfc },
{ 0| 0| 0|C11|N11|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1dfd },
@@ -1455,10 +1466,6 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2775 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2793 },
{ 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2bff },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2c2e },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2c2f },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2c5e },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2c5f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2c7b },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0x2c7d },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2ce4 },
@@ -1641,8 +1648,6 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x4dbf },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x4dff },
{ C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x9fa5 },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x9ffc },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x9fff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa48c },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa4cf },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa4fd },
@@ -1670,10 +1675,15 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa770 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa788 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa78a },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7bf },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7c1 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7ca },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7f4 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7cf },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d1 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7d2 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d3 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7d4 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d9 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7f1 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa7f4 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7f7 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa7f9 },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa801 },
@@ -1962,12 +1972,35 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10527 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1052f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10563 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1056f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1057a },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1057b },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1058a },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1058b },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10592 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10593 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10595 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10596 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x105a1 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x105a2 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x105b1 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x105b2 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x105b9 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x105ba },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x105bc },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x105ff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10736 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1073f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10755 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1075f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10767 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1077f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10780 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0x10785 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10786 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0x107b0 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x107b1 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0x107ba },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x107ff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10805 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10807 },
@@ -2063,6 +2096,12 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10f4b },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x10f4c },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10f50 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10f6f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10f81 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x10f82 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10f83 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x10f84 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10f85 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10faf },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10fc4 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10fdf },
@@ -2074,6 +2113,10 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x11046 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11065 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1106f },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x11070 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11072 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11074 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11075 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1107e },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x1107f },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11082 },
@@ -2087,6 +2130,8 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x110b8 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x110b9 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 7, 0x110ba },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x110c1 },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x110c2 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x110cf },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x110e8 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x110ef },
@@ -2252,6 +2297,8 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x1172b },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1172f },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11739 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1173f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11746 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x117ff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1182b },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11838 },
@@ -2316,7 +2363,7 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x11a99 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11a9c },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11a9d },
-{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11abf },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11aaf },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11af8 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11bff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11c08 },
@@ -2381,6 +2428,8 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1246e },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1247f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x12543 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x12f8f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x12ff0 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x12fff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1342e },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x143ff },
@@ -2391,6 +2440,10 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16a5e },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16a5f },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x16a69 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16a6f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16abe },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16abf },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x16ac9 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16acf },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16aed },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16aef },
@@ -2430,8 +2483,14 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18cd5 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x18cff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18d08 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1afef },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1aff3 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1aff4 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1affb },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1affc },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1affe },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1afff },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b11e },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b122 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1b14f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b152 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1b163 },
@@ -2449,6 +2508,10 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1bc9c },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1bc9d },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 1, 0x1bc9e },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1ceff },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1cf2d },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1cf2f },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1cf46 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1d15d },
{ 0| 0| 0|C11| 0| 0| 0| 0| 0| 0| 0, 0, 0x1d164 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 216, 0x1d166 },
@@ -2541,6 +2604,8 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1da9f },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1daa0 },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1daaf },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1deff },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1df1e },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1dfff },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e006 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e007 },
@@ -2560,10 +2625,21 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1e149 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e14d },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e14e },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e28f },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e2ad },
+{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e2ae },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e2bf },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e2eb },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e2ef },
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1e2f9 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7df },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e7e6 },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7e7 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e7eb },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7ec },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e7ee },
+{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7ef },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e7fe },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7ff },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e8c4 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e8cf },
@@ -2663,9 +2739,9 @@ static const struct ucnrange ucnranges[] = {
{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC| 0| 0, 0, 0x1fbf9 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1fffd },
{ 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1ffff },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2a6dd },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2a6df },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2a6ff },
-{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b734 },
+{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b738 },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2b73f },
{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b81d },
{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2b81f },
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 88c860b..f4591e1 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,21 @@
+2022-06-25 Jeff Law <jeffreyalaw@gmail.com>
+
+ * config.host: Removed tilegx and tilepro entries.
+ * config/tilegx/sfp-machine.h: Removed.
+ * config/tilegx/sfp-machine32.h: Removed.
+ * config/tilegx/sfp-machine64.h: Removed.
+ * config/tilegx/t-crtstuff: Removed.
+ * config/tilegx/t-softfp: Removed.
+ * config/tilegx/t-tilegx: Removed.
+ * config/tilepro/atomic.c: Removed.
+ * config/tilepro/atomic.h: Removed.
+ * config/tilepro/linux-unwind.h: Removed.
+ * config/tilepro/sfp-machine.h: Removed.
+ * config/tilepro/softdivide.c: Removed.
+ * config/tilepro/softmpy.S: Removed.
+ * config/tilepro/t-crtstuff: Removed.
+ * config/tilepro/t-tilepro: Removed.
+
2022-06-09 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp>
* config/xtensa/lib1funcs.S (__clrsbsi2): New function.
diff --git a/libgcc/config.host b/libgcc/config.host
index 927d34a..b2a0a8e 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -212,12 +212,6 @@ s390*-*-*)
sh[123456789lbe]*-*-*)
cpu_type=sh
;;
-tilegx*-*-*)
- cpu_type=tilegx
- ;;
-tilepro*-*-*)
- cpu_type=tilepro
- ;;
v850*-*-*)
cpu_type=v850
;;
@@ -1487,17 +1481,6 @@ tic6x-*-elf)
extra_parts="$extra_parts crtbeginS.o crtendS.o crti.o crtn.o"
unwind_header=config/c6x/unwind-c6x.h
;;
-tilegx*-*-linux*)
- if test "${host_address}" = 64; then
- tmake_file="${tmake_file} tilegx/t-softfp"
- fi
- tmake_file="${tmake_file} tilegx/t-crtstuff t-softfp-sfdf t-softfp tilegx/t-tilegx"
- md_unwind_header=tilepro/linux-unwind.h
- ;;
-tilepro*-*-linux*)
- tmake_file="${tmake_file} tilepro/t-crtstuff t-softfp-sfdf t-softfp tilepro/t-tilepro t-slibgcc-libgcc"
- md_unwind_header=tilepro/linux-unwind.h
- ;;
v850*-*-*)
tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
;;
diff --git a/libgcc/config/tilegx/sfp-machine.h b/libgcc/config/tilegx/sfp-machine.h
deleted file mode 100644
index 1ce84e1..0000000
--- a/libgcc/config/tilegx/sfp-machine.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifdef __tilegx32__
-#include "config/tilegx/sfp-machine32.h"
-#else
-#include "config/tilegx/sfp-machine64.h"
-#endif
diff --git a/libgcc/config/tilegx/sfp-machine32.h b/libgcc/config/tilegx/sfp-machine32.h
deleted file mode 100644
index 9fc281c..0000000
--- a/libgcc/config/tilegx/sfp-machine32.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#define _FP_W_TYPE_SIZE 32
-#define _FP_W_TYPE unsigned long
-#define _FP_WS_TYPE signed long
-#define _FP_I_TYPE long
-
-typedef int TItype __attribute__ ((mode (TI)));
-typedef unsigned int UTItype __attribute__ ((mode (TI)));
-
-#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
-
-/* The type of the result of a floating point comparison. This must
- match `__libgcc_cmp_return__' in GCC for the target. */
-typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
-#define CMPtype __gcc_CMPtype
-
-#define _FP_MUL_MEAT_S(R,X,Y) \
- _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
-#define _FP_MUL_MEAT_D(R,X,Y) \
- _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
-#define _FP_MUL_MEAT_Q(R,X,Y) \
- _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
-
-#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
-#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
-#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
-
-#define _FP_NANFRAC_S _FP_QNANBIT_S
-#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
-#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
-#define _FP_NANSIGN_S 1
-#define _FP_NANSIGN_D 1
-#define _FP_NANSIGN_Q 1
-
-#define _FP_KEEPNANFRACP 1
-#define _FP_QNANNEGATEDP 0
-
-#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
- do { \
- if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
- && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
- { \
- R##_s = Y##_s; \
- _FP_FRAC_COPY_##wc(R,Y); \
- } \
- else \
- { \
- R##_s = X##_s; \
- _FP_FRAC_COPY_##wc(R,X); \
- } \
- R##_c = FP_CLS_NAN; \
- } while (0)
-
-#define _FP_TININESS_AFTER_ROUNDING 0
-
-#define __LITTLE_ENDIAN 1234
-#define __BIG_ENDIAN 4321
-
-#if defined __BIG_ENDIAN__
-#define __BYTE_ORDER __BIG_ENDIAN
-#else
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#endif
-
-/* Define ALIASNAME as a strong alias for NAME. */
-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-# define _strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
-
diff --git a/libgcc/config/tilegx/sfp-machine64.h b/libgcc/config/tilegx/sfp-machine64.h
deleted file mode 100644
index 5dbbe60..0000000
--- a/libgcc/config/tilegx/sfp-machine64.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#define _FP_W_TYPE_SIZE 64
-#define _FP_W_TYPE unsigned long
-#define _FP_WS_TYPE signed long
-#define _FP_I_TYPE long
-
-typedef int TItype __attribute__ ((mode (TI)));
-typedef unsigned int UTItype __attribute__ ((mode (TI)));
-
-#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
-
-/* The type of the result of a floating point comparison. This must
- match `__libgcc_cmp_return__' in GCC for the target. */
-typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
-#define CMPtype __gcc_CMPtype
-
-#define _FP_MUL_MEAT_S(R,X,Y) \
- _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y)
-#define _FP_MUL_MEAT_D(R,X,Y) \
- _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
-#define _FP_MUL_MEAT_Q(R,X,Y) \
- _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
-
-#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm)
-#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y)
-#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
-
-#define _FP_NANFRAC_S _FP_QNANBIT_S
-#define _FP_NANFRAC_D _FP_QNANBIT_D
-#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
-#define _FP_NANSIGN_S 1
-#define _FP_NANSIGN_D 1
-#define _FP_NANSIGN_Q 1
-
-#define _FP_KEEPNANFRACP 1
-#define _FP_QNANNEGATEDP 0
-
-#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
- do { \
- if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
- && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
- { \
- R##_s = Y##_s; \
- _FP_FRAC_COPY_##wc(R,Y); \
- } \
- else \
- { \
- R##_s = X##_s; \
- _FP_FRAC_COPY_##wc(R,X); \
- } \
- R##_c = FP_CLS_NAN; \
- } while (0)
-
-#define _FP_TININESS_AFTER_ROUNDING 0
-
-#define __LITTLE_ENDIAN 1234
-#define __BIG_ENDIAN 4321
-
-#if defined __BIG_ENDIAN__
-#define __BYTE_ORDER __BIG_ENDIAN
-#else
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#endif
-
-/* Define ALIASNAME as a strong alias for NAME. */
-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-# define _strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
-
diff --git a/libgcc/config/tilegx/t-crtstuff b/libgcc/config/tilegx/t-crtstuff
deleted file mode 100644
index 870318c..0000000
--- a/libgcc/config/tilegx/t-crtstuff
+++ /dev/null
@@ -1,8 +0,0 @@
-# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
-# because then __FRAME_END__ might not be the last thing in .eh_frame
-# section.
-CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
-CRTSTUFF_T_CFLAGS_S += -fno-asynchronous-unwind-tables
-
-# Compile crtbeginS.o and crtendS.o with -mcmodel=large
-CRTSTUFF_T_CFLAGS_S += -mcmodel=large
diff --git a/libgcc/config/tilegx/t-softfp b/libgcc/config/tilegx/t-softfp
deleted file mode 100644
index a1e3513..0000000
--- a/libgcc/config/tilegx/t-softfp
+++ /dev/null
@@ -1 +0,0 @@
-softfp_int_modes += ti
diff --git a/libgcc/config/tilegx/t-tilegx b/libgcc/config/tilegx/t-tilegx
deleted file mode 100644
index 2fb6445..0000000
--- a/libgcc/config/tilegx/t-tilegx
+++ /dev/null
@@ -1,26 +0,0 @@
-LIB2ADD += \
- $(srcdir)/config/tilepro/atomic.c
-
-SOFTDIVIDE_FUNCS := \
- _tile_udivsi3 \
- _tile_divsi3 \
- _tile_udivdi3 \
- _tile_divdi3 \
- _tile_umodsi3 \
- _tile_modsi3 \
- _tile_umoddi3 \
- _tile_moddi3
-
-softdivide-o = $(patsubst %,%$(objext),$(SOFTDIVIDE_FUNCS))
-$(softdivide-o): %$(objext): $(srcdir)/config/tilepro/softdivide.c
- $(gcc_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $< \
- $(vis_hide)
-libgcc-objects += $(softdivide-o)
-
-ifeq ($(enable_shared),yes)
-softdivide-s-o = $(patsubst %,%_s$(objext),$(SOFTDIVIDE_FUNCS))
-$(softdivide-s-o): %_s$(objext): $(srcdir)/config/tilepro/softdivide.c
- $(gcc_s_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $<
-libgcc-s-objects += $(softdivide-s-o)
-libgcc-eh-objects += _tile_divdi3.o _tile_umoddi3.o
-endif
diff --git a/libgcc/config/tilepro/atomic.c b/libgcc/config/tilepro/atomic.c
deleted file mode 100644
index 5de2b7c..0000000
--- a/libgcc/config/tilepro/atomic.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/* TILE atomics.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- This file 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.
-
- This file 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.
-
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
-
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-#include "tconfig.h"
-#include "coretypes.h"
-#include "atomic.h"
-
-#define bool unsigned char
-
-/* This code should be inlined by the compiler, but for now support
- it as out-of-line methods in libgcc. */
-
-static inline void
-pre_atomic_barrier (int model)
-{
- switch (model)
- {
- case __ATOMIC_RELEASE:
- case __ATOMIC_ACQ_REL:
- case __ATOMIC_SEQ_CST:
- __atomic_thread_fence (model);
- break;
- default:
- break;
- }
- return;
-}
-
-static inline void
-post_atomic_barrier (int model)
-{
- switch (model)
- {
- case __ATOMIC_ACQUIRE:
- case __ATOMIC_ACQ_REL:
- case __ATOMIC_SEQ_CST:
- __atomic_thread_fence (model);
- break;
- default:
- break;
- }
- return;
-}
-
-#define __unused __attribute__((unused))
-
-#define __fetch_and_do(proto, type, size, opname, top, bottom) \
-proto \
-{ \
- top; \
- type rv = arch_atomic_##opname(p, i); \
- bottom; \
- return rv; \
-}
-
-#define __atomic_fetch_and_do(type, size, opname) \
- __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
- type, size, opname, \
- pre_atomic_barrier(model), \
- post_atomic_barrier(model)) \
-
-__atomic_fetch_and_do (int, 4, add)
-__atomic_fetch_and_do (int, 4, sub)
-__atomic_fetch_and_do (int, 4, or)
-__atomic_fetch_and_do (int, 4, and)
-__atomic_fetch_and_do (int, 4, xor)
-__atomic_fetch_and_do (int, 4, nand)
-__atomic_fetch_and_do (long long, 8, add)
-__atomic_fetch_and_do (long long, 8, sub)
-__atomic_fetch_and_do (long long, 8, or)
-__atomic_fetch_and_do (long long, 8, and)
-__atomic_fetch_and_do (long long, 8, xor)
-__atomic_fetch_and_do (long long, 8, nand)
-
-#define __sync_fetch_and_do(type, size, opname) \
- __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
- type, size, opname, \
- arch_atomic_write_barrier(), \
- arch_atomic_read_barrier())
-
-__sync_fetch_and_do (int, 4, add)
-__sync_fetch_and_do (int, 4, sub)
-__sync_fetch_and_do (int, 4, or)
-__sync_fetch_and_do (int, 4, and)
-__sync_fetch_and_do (int, 4, xor)
-__sync_fetch_and_do (int, 4, nand)
-__sync_fetch_and_do (long long, 8, add)
-__sync_fetch_and_do (long long, 8, sub)
-__sync_fetch_and_do (long long, 8, or)
-__sync_fetch_and_do (long long, 8, and)
-__sync_fetch_and_do (long long, 8, xor)
-__sync_fetch_and_do (long long, 8, nand)
-
-#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
-proto \
-{ \
- top; \
- type rv = op2 (arch_atomic_##opname(p, i) op i); \
- bottom; \
- return rv; \
-}
-
-#define __atomic_do_and_fetch(type, size, opname, op, op2) \
- __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
- type, size, opname, op, op2, \
- pre_atomic_barrier(model), \
- post_atomic_barrier(model)) \
-
-__atomic_do_and_fetch (int, 4, add, +, )
-__atomic_do_and_fetch (int, 4, sub, -, )
-__atomic_do_and_fetch (int, 4, or, |, )
-__atomic_do_and_fetch (int, 4, and, &, )
-__atomic_do_and_fetch (int, 4, xor, |, )
-__atomic_do_and_fetch (int, 4, nand, &, ~)
-__atomic_do_and_fetch (long long, 8, add, +, )
-__atomic_do_and_fetch (long long, 8, sub, -, )
-__atomic_do_and_fetch (long long, 8, or, |, )
-__atomic_do_and_fetch (long long, 8, and, &, )
-__atomic_do_and_fetch (long long, 8, xor, |, )
-__atomic_do_and_fetch (long long, 8, nand, &, ~)
-
-#define __sync_do_and_fetch(type, size, opname, op, op2) \
- __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
- type, size, opname, op, op2, \
- arch_atomic_write_barrier(), \
- arch_atomic_read_barrier()) \
-
-__sync_do_and_fetch (int, 4, add, +, )
-__sync_do_and_fetch (int, 4, sub, -, )
-__sync_do_and_fetch (int, 4, or, |, )
-__sync_do_and_fetch (int, 4, and, &, )
-__sync_do_and_fetch (int, 4, xor, |, )
-__sync_do_and_fetch (int, 4, nand, &, ~)
-__sync_do_and_fetch (long long, 8, add, +, )
-__sync_do_and_fetch (long long, 8, sub, -, )
-__sync_do_and_fetch (long long, 8, or, |, )
-__sync_do_and_fetch (long long, 8, and, &, )
-__sync_do_and_fetch (long long, 8, xor, |, )
-__sync_do_and_fetch (long long, 8, nand, &, ~)
-
-#define __atomic_exchange_methods(type, size) \
-bool \
-__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
- type newval, bool weak __unused, \
- int models, int modelf __unused) \
-{ \
- type oldval = *oldvalp; \
- pre_atomic_barrier(models); \
- type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
- post_atomic_barrier(models); \
- bool success = (retval == oldval); \
- *oldvalp = retval; \
- return success; \
-} \
- \
-type \
-__atomic_exchange_##size(volatile type* ptr, type val, int model) \
-{ \
- pre_atomic_barrier(model); \
- type retval = arch_atomic_exchange(ptr, val); \
- post_atomic_barrier(model); \
- return retval; \
-}
-
-__atomic_exchange_methods (int, 4)
-__atomic_exchange_methods (long long, 8)
-
-#define __sync_exchange_methods(type, size) \
-type \
-__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
-{ \
- arch_atomic_write_barrier(); \
- type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
- arch_atomic_read_barrier(); \
- return retval; \
-} \
- \
-bool \
-__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
-{ \
- arch_atomic_write_barrier(); \
- bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
- arch_atomic_read_barrier(); \
- return retval; \
-} \
- \
-type \
-__sync_lock_test_and_set_##size(type* ptr, type val) \
-{ \
- type retval = arch_atomic_exchange(ptr, val); \
- arch_atomic_acquire_barrier_value(retval); \
- return retval; \
-}
-
-__sync_exchange_methods (int, 4)
-__sync_exchange_methods (long long, 8)
-
-#ifdef __LITTLE_ENDIAN__
-#define BIT_OFFSET(n, type) ((n) * 8)
-#else
-#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
-#endif
-
-/* Subword methods require the same approach for both TILEPro and
- TILE-Gx. We load the background data for the word, insert the
- desired subword piece, then compare-and-exchange it into place. */
-#define u8 unsigned char
-#define u16 unsigned short
-
-#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
- ({ \
- unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
- const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
- const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
- const unsigned int bgmask = ~(valmask << shift); \
- unsigned int oldword = *p; \
- type oldval = (oldword >> shift) & valmask; \
- if (__builtin_expect((oldval == guess), 1)) { \
- unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
- oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
- oldval = (oldword >> shift) & valmask; \
- } \
- oldval; \
- }) \
-
-#define __atomic_subword_cmpxchg(type, size) \
- \
-bool \
-__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
- type val, bool weak __unused, int models, \
- int modelf __unused) \
-{ \
- pre_atomic_barrier(models); \
- type guess = *guess_ptr; \
- type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
- post_atomic_barrier(models); \
- bool success = (oldval == guess); \
- *guess_ptr = oldval; \
- return success; \
-}
-
-__atomic_subword_cmpxchg (u8, 1)
-__atomic_subword_cmpxchg (u16, 2)
-
-#define __sync_subword_cmpxchg(type, size) \
- \
-type \
-__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
-{ \
- arch_atomic_write_barrier(); \
- type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
- arch_atomic_read_barrier(); \
- return oldval; \
-} \
- \
-bool \
-__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
-{ \
- type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
- return oldval == guess; \
-}
-
-__sync_subword_cmpxchg (u8, 1)
-__sync_subword_cmpxchg (u16, 2)
-
-/* For the atomic-update subword methods, we use the same approach as
- above, but we retry until we succeed if the compare-and-exchange
- fails. */
-#define __subword(type, proto, top, expr, bottom) \
-proto \
-{ \
- top \
- unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
- const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
- const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
- const unsigned int bgmask = ~(valmask << shift); \
- unsigned int oldword, xword = *p; \
- type val, oldval; \
- do { \
- oldword = xword; \
- oldval = (oldword >> shift) & valmask; \
- val = expr; \
- unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
- xword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
- } while (__builtin_expect(xword != oldword, 0)); \
- bottom \
-}
-
-#define __atomic_subword_fetch(type, funcname, expr, retval) \
- __subword(type, \
- type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
- pre_atomic_barrier(model);, \
- expr, \
- post_atomic_barrier(model); return retval;)
-
-__atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
-__atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
-__atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
-__atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
-__atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
-__atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
-
-__atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
-__atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
-__atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
-__atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
-__atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
-__atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
-
-__atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
-__atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
-__atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
-__atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
-__atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
-__atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
-
-__atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
-__atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
-__atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
-__atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
-__atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
-__atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
-
-#define __sync_subword_fetch(type, funcname, expr, retval) \
- __subword(type, \
- type __sync_ ## funcname(type *ptr, type i), \
- arch_atomic_read_barrier();, \
- expr, \
- arch_atomic_write_barrier(); return retval;)
-
-__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
-__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
-__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
-__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
-__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
-__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
-
-__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
-__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
-__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
-__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
-__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
-__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
-
-__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
-__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
-__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
-__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
-__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
-__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
-
-__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
-__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
-__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
-__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
-__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
-__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
-
-#define __atomic_subword_lock(type, size) \
- __subword(type, \
- type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
- pre_atomic_barrier(model);, \
- nval, \
- post_atomic_barrier(model); return oldval;)
-
-__atomic_subword_lock (u8, 1)
-__atomic_subword_lock (u16, 2)
-
-#define __sync_subword_lock(type, size) \
- __subword(type, \
- type __sync_lock_test_and_set_##size(type* ptr, type nval), \
- , \
- nval, \
- arch_atomic_acquire_barrier_value(oldval); return oldval;)
-
-__sync_subword_lock (u8, 1)
-__sync_subword_lock (u16, 2)
diff --git a/libgcc/config/tilepro/atomic.h b/libgcc/config/tilepro/atomic.h
deleted file mode 100644
index 34547bb..0000000
--- a/libgcc/config/tilepro/atomic.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/* Macros for atomic functionality for tile.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- This file 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.
-
- This file 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.
-
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
-
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-
-/* Provides macros for common atomic functionality. */
-
-#ifndef _ATOMIC_H_
-#define _ATOMIC_H_
-
-#ifdef __tilegx__
-/* Atomic instruction macros
-
- The macros provided by atomic.h simplify access to the TILE-Gx
- architecture's atomic instructions. The architecture provides a
- variety of atomic instructions, including "exchange", "compare and
- exchange", "fetch and ADD", "fetch and AND", "fetch and OR", and
- "fetch and ADD if greater than or equal to zero".
-
- No barrier or fence semantics are implied by any of the atomic
- instructions for manipulating memory; you must specify the barriers
- that you wish explicitly, using the provided macros.
-
- Any integral 32- or 64-bit value can be used as the argument
- to these macros, such as "int", "long long", "unsigned long", etc.
- The pointers must be aligned to 4 or 8 bytes for 32- or 64-bit data.
- The "exchange" and "compare and exchange" macros may also take
- pointer values. We use the pseudo-type "VAL" in the documentation
- to indicate the use of an appropriate type. */
-#else
-/* Atomic instruction macros
-
- The macros provided by atomic.h simplify access to the Tile
- architecture's atomic instructions. Since the architecture
- supports test-and-set as its only in-silicon atomic operation, many
- of the operations provided by this header are implemented as
- fast-path calls to Linux emulation routines.
-
- Using the kernel for atomic operations allows userspace to take
- advantage of the kernel's existing atomic-integer support (managed
- by a distributed array of locks). The kernel provides proper
- ordering among simultaneous atomic operations on different cores,
- and guarantees a process cannot be context-switched part way
- through an atomic operation. By virtue of sharing the kernel
- atomic implementation, the userspace atomic operations
- are compatible with the atomic methods provided by the kernel's
- futex() syscall API. Note that these operations never cause Linux
- kernel scheduling, and are in fact invisible to the kernel; they
- simply act as regular function calls but with an elevated privilege
- level. Note that the kernel's distributed lock array is hashed by
- using only VA bits from the atomic value's address (to avoid the
- performance hit of page table locking and multiple page-table
- lookups to get the PA) and only the VA bits that are below page
- granularity (to properly lock simultaneous accesses to the same
- page mapped at different VAs). As a result, simultaneous atomic
- operations on values whose addresses are at the same offset on a
- page will contend in the kernel for the same lock array element.
-
- No barrier or fence semantics are implied by any of the atomic
- instructions for manipulating memory; you must specify the barriers
- that you wish explicitly, using the provided macros.
-
- Any integral 32- or 64-bit value can be used as the argument
- to these macros, such as "int", "long long", "unsigned long", etc.
- The pointers must be aligned to 4 or 8 bytes for 32- or 64-bit data.
- The "exchange" and "compare and exchange" macros may also take
- pointer values. We use the pseudo-type "VAL" in the documentation
- to indicate the use of an appropriate type.
-
- The 32-bit routines are implemented using a single kernel fast
- syscall, as is the 64-bit compare-and-exchange. The other 64-bit
- routines are implemented by looping over the 64-bit
- compare-and-exchange routine, so may be potentially less efficient. */
-#endif
-
-#ifdef __tilegx__
-#define SPR_CMPEXCH_VALUE 0x2780
-#else
-#define __NR_FAST_cmpxchg -1
-#define __NR_FAST_atomic_update -2
-#define __NR_FAST_cmpxchg64 -3
-#endif
-
-
-/* 32-bit integer compare-and-exchange. */
-static __inline __attribute__ ((always_inline))
- int arch_atomic_val_compare_and_exchange_4 (volatile int *mem,
- int oldval, int newval)
-{
-#ifdef __tilegx__
- __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
- return __insn_cmpexch4 (mem, newval);
-#else
- int result;
- __asm__ __volatile__ ("swint1":"=R00" (result),
- "=m" (*mem):"R10" (__NR_FAST_cmpxchg), "R00" (mem),
- "R01" (oldval), "R02" (newval), "m" (*mem):"r20",
- "r21", "r22", "r23", "r24", "r25", "r26", "r27",
- "r28", "r29", "memory");
- return result;
-#endif
-}
-
-/* 64-bit integer compare-and-exchange. */
-static __inline __attribute__ ((always_inline))
- long long arch_atomic_val_compare_and_exchange_8 (volatile long long
- *mem, long long oldval,
- long long newval)
-{
-#ifdef __tilegx__
- __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
- return __insn_cmpexch (mem, newval);
-#else
- unsigned int result_lo, result_hi;
- unsigned int oldval_lo = oldval & 0xffffffffu, oldval_hi = oldval >> 32;
- unsigned int newval_lo = newval & 0xffffffffu, newval_hi = newval >> 32;
- __asm__ __volatile__ ("swint1":"=R00" (result_lo), "=R01" (result_hi),
- "=m" (*mem):"R10" (__NR_FAST_cmpxchg64), "R00" (mem),
- "R02" (oldval_lo), "R03" (oldval_hi),
- "R04" (newval_lo), "R05" (newval_hi),
- "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
- "r26", "r27", "r28", "r29", "memory");
- return ((long long) result_hi) << 32 | result_lo;
-#endif
-}
-
-/* This non-existent symbol is called for sizes other than "4" and "8",
- indicating a bug in the caller. */
-extern int __arch_atomic_error_bad_argument_size (void)
- __attribute__ ((warning ("sizeof atomic argument not 4 or 8")));
-
-
-#define arch_atomic_val_compare_and_exchange(mem, o, n) \
- __extension__ ({ \
- (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
- ((sizeof(*(mem)) == 8) ? \
- arch_atomic_val_compare_and_exchange_8( \
- (volatile long long*)(mem), (__typeof((o)-(o)))(o), \
- (__typeof((n)-(n)))(n)) : \
- (sizeof(*(mem)) == 4) ? \
- arch_atomic_val_compare_and_exchange_4( \
- (volatile int*)(mem), (__typeof((o)-(o)))(o), \
- (__typeof((n)-(n)))(n)) : \
- __arch_atomic_error_bad_argument_size()); \
- })
-
-#define arch_atomic_bool_compare_and_exchange(mem, o, n) \
- __extension__ ({ \
- __typeof(o) __o = (o); \
- __builtin_expect( \
- __o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \
- })
-
-
-/* Loop with compare_and_exchange until we guess the correct value.
- Normally "expr" will be an expression using __old and __value. */
-#define __arch_atomic_update_cmpxchg(mem, value, expr) \
- __extension__ ({ \
- __typeof(value) __value = (value); \
- __typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \
- do { \
- __guess = __old; \
- __old = arch_atomic_val_compare_and_exchange(__mem, __old, (expr)); \
- } while (__builtin_expect(__old != __guess, 0)); \
- __old; \
- })
-
-#ifdef __tilegx__
-
-/* Generic atomic op with 8- or 4-byte variant.
- The _mask, _addend, and _expr arguments are ignored on tilegx. */
-#define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \
- __extension__ ({ \
- ((__typeof(*(mem))) \
- ((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \
- (volatile void *)(mem), \
- (long long)(__typeof((value)-(value)))(value)) : \
- (sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \
- (volatile void *)(mem), \
- (int)(__typeof((value)-(value)))(value)) : \
- __arch_atomic_error_bad_argument_size())); \
- })
-
-#else
-
-/* This uses TILEPro's fast syscall support to atomically compute:
-
- int old = *ptr;
- *ptr = (old & mask) + addend;
- return old;
-
- This primitive can be used for atomic exchange, add, or, and.
- Only 32-bit support is provided. */
-static __inline __attribute__ ((always_inline))
- int
- __arch_atomic_update_4 (volatile int *mem, int mask, int addend)
-{
- int result;
- __asm__ __volatile__ ("swint1":"=R00" (result),
- "=m" (*mem):"R10" (__NR_FAST_atomic_update),
- "R00" (mem), "R01" (mask), "R02" (addend),
- "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
- "r26", "r27", "r28", "r29", "memory");
- return result;
-}
-
-/* Generic atomic op with 8- or 4-byte variant.
- The _op argument is ignored on tilepro. */
-#define __arch_atomic_update(mem, value, _op, mask, addend, expr) \
- __extension__ ({ \
- (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
- ((sizeof(*(mem)) == 8) ? \
- __arch_atomic_update_cmpxchg((mem), (value), (expr)) : \
- (sizeof(*(mem)) == 4) ? \
- __arch_atomic_update_4((volatile int*)(mem), \
- (__typeof((mask)-(mask)))(mask), \
- (__typeof((addend)-(addend)))(addend)) : \
- __arch_atomic_error_bad_argument_size()); \
- })
-
-#endif /* __tilegx__ */
-
-
-#define arch_atomic_exchange(mem, newvalue) \
- __arch_atomic_update(mem, newvalue, exch, 0, newvalue, __value)
-
-#define arch_atomic_add(mem, value) \
- __arch_atomic_update(mem, value, fetchadd, -1, value, __old + __value)
-
-#define arch_atomic_sub(mem, value) arch_atomic_add((mem), -(value))
-
-#define arch_atomic_increment(mem) arch_atomic_add((mem), 1)
-
-#define arch_atomic_decrement(mem) arch_atomic_add((mem), -1)
-
-#define arch_atomic_and(mem, mask) \
- __arch_atomic_update(mem, mask, fetchand, mask, 0, __old & __value)
-
-#define arch_atomic_or(mem, mask) \
- __arch_atomic_update(mem, mask, fetchor, ~mask, mask, __old | __value)
-
-#define arch_atomic_xor(mem, mask) \
- __arch_atomic_update_cmpxchg(mem, mask, __old ^ __value)
-
-#define arch_atomic_nand(mem, mask) \
- __arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value))
-
-#define arch_atomic_bit_set(mem, bit) \
- __extension__ ({ \
- __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
- __mask & arch_atomic_or((mem), __mask); \
- })
-
-#define arch_atomic_bit_clear(mem, bit) \
- __extension__ ({ \
- __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
- __mask & arch_atomic_and((mem), ~__mask); \
- })
-
-#ifdef __tilegx__
-/* Atomically store a new value to memory.
- Note that you can freely use types of any size here, unlike the
- other atomic routines, which require 32- or 64-bit types.
- This accessor is provided for compatibility with TILEPro, which
- required an explicit atomic operation for stores that needed
- to be atomic with respect to other atomic methods in this header. */
-#define arch_atomic_write(mem, value) ((void) (*(mem) = (value)))
-#else
-#define arch_atomic_write(mem, value) \
- do { \
- __typeof(mem) __aw_mem = (mem); \
- __typeof(value) __aw_val = (value); \
- unsigned int *__aw_mem32, __aw_intval, __aw_val32, __aw_off, __aw_mask; \
- __aw_intval = (__typeof((value) - (value)))__aw_val; \
- switch (sizeof(*__aw_mem)) { \
- case 8: \
- __arch_atomic_update_cmpxchg(__aw_mem, __aw_val, __value); \
- break; \
- case 4: \
- __arch_atomic_update_4((int *)__aw_mem, 0, __aw_intval); \
- break; \
- case 2: \
- __aw_off = 8 * ((long)__aw_mem & 0x2); \
- __aw_mask = 0xffffU << __aw_off; \
- __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x2); \
- __aw_val32 = (__aw_intval << __aw_off) & __aw_mask; \
- __arch_atomic_update_cmpxchg(__aw_mem32, __aw_val32, \
- (__old & ~__aw_mask) | __value); \
- break; \
- case 1: \
- __aw_off = 8 * ((long)__aw_mem & 0x3); \
- __aw_mask = 0xffU << __aw_off; \
- __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x3); \
- __aw_val32 = (__aw_intval << __aw_off) & __aw_mask; \
- __arch_atomic_update_cmpxchg(__aw_mem32, __aw_val32, \
- (__old & ~__aw_mask) | __value); \
- break; \
- } \
- } while (0)
-#endif
-
-/* Compiler barrier.
-
- This macro prevents loads or stores from being moved by the compiler
- across the macro. Any loaded value that was loaded before this
- macro must then be reloaded by the compiler. */
-#define arch_atomic_compiler_barrier() __asm__ __volatile__("" ::: "memory")
-
-/* Full memory barrier.
-
- This macro has the semantics of arch_atomic_compiler_barrer(), but also
- ensures that previous stores are visible to other cores, and that
- all previous loaded values have been placed into their target
- register on this core. */
-#define arch_atomic_full_barrier() __insn_mf()
-
-/* Read memory barrier.
-
- Ensure that all reads by this processor that occurred prior to the
- read memory barrier have completed, and that no reads that occur
- after the read memory barrier on this processor are initiated
- before the barrier.
-
- On current TILE chips a read barrier is implemented as a full barrier,
- but this may not be true in later versions of the architecture.
-
- See also arch_atomic_acquire_barrier() for the appropriate idiom to use
- to ensure no reads are lifted above an atomic lock instruction. */
-#define arch_atomic_read_barrier() arch_atomic_full_barrier()
-
-/* Write memory barrier.
-
- Ensure that all writes by this processor that occurred prior to the
- write memory barrier have completed, and that no writes that occur
- after the write memory barrier on this processor are initiated
- before the barrier.
-
- On current TILE chips a write barrier is implemented as a full barrier,
- but this may not be true in later versions of the architecture.
-
- See also arch_atomic_release_barrier() for the appropriate idiom to use
- to ensure all writes are complete prior to an atomic unlock instruction. */
-#define arch_atomic_write_barrier() arch_atomic_full_barrier()
-
-/* Lock acquisition barrier.
-
- Ensure that no load operations that follow this macro in the
- program can issue prior to the barrier. Without such a barrier,
- the compiler can reorder them to issue earlier, or the hardware can
- issue them speculatively. The latter is not currently done in the
- Tile microarchitecture, but using this operation improves
- portability to future implementations.
-
- This operation is intended to be used as part of the "acquire"
- path for locking, that is, when entering a critical section.
- This should be done after the atomic operation that actually
- acquires the lock, and in conjunction with a "control dependency"
- that checks the atomic operation result to see if the lock was
- in fact acquired. See the arch_atomic_read_barrier() macro
- for a heavier-weight barrier to use in certain unusual constructs,
- or arch_atomic_acquire_barrier_value() if no control dependency exists. */
-#define arch_atomic_acquire_barrier() arch_atomic_compiler_barrier()
-
-/* Lock release barrier.
-
- Ensure that no store operations that precede this macro in the
- program complete subsequent to the barrier. Without such a
- barrier, the compiler can reorder stores to issue later, or stores
- can be still outstanding in the memory network.
-
- This operation is intended to be used as part of the "release" path
- for locking, that is, when leaving a critical section. This should
- be done before the operation (such as a store of zero) that
- actually releases the lock. */
-#define arch_atomic_release_barrier() arch_atomic_write_barrier()
-
-/* Barrier until the read of a particular value is complete.
-
- This is occasionally useful when constructing certain locking
- scenarios. For example, you might write a routine that issues an
- atomic instruction to enter a critical section, then reads one or
- more values within the critical section without checking to see if
- the critical section was in fact acquired, and only later checks
- the atomic instruction result to see if the lock was acquired. If
- so the routine could properly release the lock and know that the
- values that were read were valid.
-
- In this scenario, it is required to wait for the result of the
- atomic instruction, even if the value itself is not checked. This
- guarantees that if the atomic instruction succeeded in taking the lock,
- the lock was held before any reads in the critical section issued. */
-#define arch_atomic_acquire_barrier_value(val) \
- __asm__ __volatile__("move %0, %0" :: "r"(val))
-
-/* Access the given variable in memory exactly once.
-
- In some contexts, an algorithm may need to force access to memory,
- since otherwise the compiler may think it can optimize away a
- memory load or store; for example, in a loop when polling memory to
- see if another cpu has updated it yet. Generally this is only
- required for certain very carefully hand-tuned algorithms; using it
- unnecessarily may result in performance losses.
-
- A related use of this macro is to ensure that the compiler does not
- rematerialize the value of "x" by reloading it from memory
- unexpectedly; the "volatile" marking will prevent the compiler from
- being able to rematerialize. This is helpful if an algorithm needs
- to read a variable without locking, but needs it to have the same
- value if it ends up being used several times within the algorithm.
-
- Note that multiple uses of this macro are guaranteed to be ordered,
- i.e. the compiler will not reorder stores or loads that are wrapped
- in arch_atomic_access_once(). */
-#define arch_atomic_access_once(x) (*(volatile __typeof(x) *)&(x))
-
-
-
-#endif /* !_ATOMIC_H_ */
diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
deleted file mode 100644
index a6874e8..0000000
--- a/libgcc/config/tilepro/linux-unwind.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* DWARF2 EH unwinding support for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
-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.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#ifndef inhibit_libc
-
-#include <arch/abi.h>
-#include <signal.h>
-#include <sys/ucontext.h>
-#include <linux/unistd.h>
-
-/* Macro to define a copy of the kernel's __rt_sigreturn function
- (in arch/tile/kernel/entry.S). If that function is changed,
- this one needs to be changed to match it. */
-#define _sigreturn_asm(REG, NR) asm( \
- ".pushsection .text.__rt_sigreturn,\"a\"\n" \
- ".global __rt_sigreturn\n" \
- ".type __rt_sigreturn,@function\n" \
- "__rt_sigreturn:\n" \
- "moveli " #REG ", " #NR "\n" \
- "swint1\n" \
- ".size __rt_sigreturn, . - __rt_sigreturn\n" \
- ".popsection")
-#define sigreturn_asm(REG, NR) _sigreturn_asm(REG, NR)
-sigreturn_asm (TREG_SYSCALL_NR_NAME, __NR_rt_sigreturn);
-#define SIGRETURN_LEN 16
-extern char __rt_sigreturn[];
-
-#define MD_FALLBACK_FRAME_STATE_FOR tile_fallback_frame_state
-
-static _Unwind_Reason_Code
-tile_fallback_frame_state (struct _Unwind_Context *context,
- _Unwind_FrameState *fs)
-{
- unsigned char *pc = context->ra;
- struct sigcontext *sc;
- long new_cfa;
- int i;
-
- struct rt_sigframe {
- unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
- siginfo_t info;
- ucontext_t uc;
- } *rt_;
-
- /* Return if this is not a signal handler. */
- if (memcmp (pc, __rt_sigreturn, SIGRETURN_LEN) != 0)
- return _URC_END_OF_STACK;
-
- /* It was a signal handler; update the reported PC to point to our
- copy, since that will be findable with dladdr() and therefore
- somewhat easier to help understand what actually happened. */
- context->ra = __rt_sigreturn;
-
- rt_ = context->cfa;
- sc = &rt_->uc.uc_mcontext;
-
- new_cfa = sc->sp;
- fs->regs.cfa_how = CFA_REG_OFFSET;
- fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
- fs->regs.cfa_offset = new_cfa - (long) context->cfa;
-
- for (i = 0; i < 56; ++i)
- {
- fs->regs.reg[i].how = REG_SAVED_OFFSET;
- fs->regs.reg[i].loc.offset
- = (long)&sc->gregs[i] - new_cfa;
- }
-
- fs->regs.reg[56].how = REG_SAVED_OFFSET;
- fs->regs.reg[56].loc.offset = (long)&sc->pc - new_cfa;
- fs->retaddr_column = 56;
- fs->signal_frame = 1;
-
- return _URC_NO_REASON;
-}
-
-#endif /* ifdef inhibit_libc */
diff --git a/libgcc/config/tilepro/sfp-machine.h b/libgcc/config/tilepro/sfp-machine.h
deleted file mode 100644
index 6953d8d..0000000
--- a/libgcc/config/tilepro/sfp-machine.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#define _FP_W_TYPE_SIZE 32
-#define _FP_W_TYPE unsigned long
-#define _FP_WS_TYPE signed long
-#define _FP_I_TYPE long
-
-/* The type of the result of a floating point comparison. This must
- match `__libgcc_cmp_return__' in GCC for the target. */
-typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
-#define CMPtype __gcc_CMPtype
-
-#define _FP_MUL_MEAT_S(R,X,Y) \
- _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
-#define _FP_MUL_MEAT_D(R,X,Y) \
- _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
-#define _FP_MUL_MEAT_Q(R,X,Y) \
- _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
-
-#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
-#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
-#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
-
-#define _FP_NANFRAC_S _FP_QNANBIT_S
-#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
-#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
-#define _FP_NANSIGN_S 1
-#define _FP_NANSIGN_D 1
-#define _FP_NANSIGN_Q 1
-
-#define _FP_KEEPNANFRACP 1
-#define _FP_QNANNEGATEDP 0
-
-#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
- do { \
- if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
- && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
- { \
- R##_s = Y##_s; \
- _FP_FRAC_COPY_##wc(R,Y); \
- } \
- else \
- { \
- R##_s = X##_s; \
- _FP_FRAC_COPY_##wc(R,X); \
- } \
- R##_c = FP_CLS_NAN; \
- } while (0)
-
-#define _FP_TININESS_AFTER_ROUNDING 0
-
-#define __LITTLE_ENDIAN 1234
-#define __BIG_ENDIAN 4321
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-/* Define ALIASNAME as a strong alias for NAME. */
-# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
-# define _strong_alias(name, aliasname) \
- extern __typeof (name) aliasname __attribute__ ((alias (#name)));
-
diff --git a/libgcc/config/tilepro/softdivide.c b/libgcc/config/tilepro/softdivide.c
deleted file mode 100644
index fea45bd..0000000
--- a/libgcc/config/tilepro/softdivide.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/* Division and remainder routines for Tile.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- This file 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.
-
- This file 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.
-
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
-
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-typedef int int32_t;
-typedef unsigned uint32_t;
-typedef long long int64_t;
-typedef unsigned long long uint64_t;
-
-/* Raise signal 8 (SIGFPE) with code 1 (FPE_INTDIV). */
-static inline void
-raise_intdiv (void)
-{
- asm ("{ raise; moveli zero, 8 + (1 << 6) }");
-}
-
-
-#ifndef __tilegx__
-/*__udivsi3 - 32 bit integer unsigned divide */
-static inline uint32_t __attribute__ ((always_inline))
-__udivsi3_inline (uint32_t dividend, uint32_t divisor)
-{
- /* Divide out any power of two factor from dividend and divisor.
- Note that when dividing by zero the divisor will remain zero,
- which is all we need to detect that case below. */
- const int power_of_two_factor = __insn_ctz (divisor);
- divisor >>= power_of_two_factor;
- dividend >>= power_of_two_factor;
-
- /* Checks for division by power of two or division by zero. */
- if (divisor <= 1)
- {
- if (divisor == 0)
- {
- raise_intdiv ();
- return 0;
- }
- return dividend;
- }
-
- /* Compute (a / b) by repeatedly finding the largest N
- such that (b << N) <= a. For each such N, set bit N in the
- quotient, subtract (b << N) from a, and keep going. Think of this as
- the reverse of the "shift-and-add" that a multiply does. The values
- of N are precisely those shift counts.
-
- Finding N is easy. First, use clz(b) - clz(a) to find the N
- that lines up the high bit of (b << N) with the high bit of a.
- Any larger value of N would definitely make (b << N) > a,
- which is too big.
-
- Then, if (b << N) > a (because it has larger low bits), decrement
- N by one. This adjustment will definitely make (b << N) less
- than a, because a's high bit is now one higher than b's. */
-
- /* Precomputing the max_ values allows us to avoid a subtract
- in the inner loop and just right shift by clz(remainder). */
- const int divisor_clz = __insn_clz (divisor);
- const uint32_t max_divisor = divisor << divisor_clz;
- const uint32_t max_qbit = 1 << divisor_clz;
-
- uint32_t quotient = 0;
- uint32_t remainder = dividend;
-
- while (remainder >= divisor)
- {
- int shift = __insn_clz (remainder);
- uint32_t scaled_divisor = max_divisor >> shift;
- uint32_t quotient_bit = max_qbit >> shift;
-
- int too_big = (scaled_divisor > remainder);
- scaled_divisor >>= too_big;
- quotient_bit >>= too_big;
- remainder -= scaled_divisor;
- quotient |= quotient_bit;
- }
- return quotient;
-}
-#endif /* !__tilegx__ */
-
-
-/* __udivdi3 - 64 bit integer unsigned divide */
-static inline uint64_t __attribute__ ((always_inline))
-__udivdi3_inline (uint64_t dividend, uint64_t divisor)
-{
- /* Divide out any power of two factor from dividend and divisor.
- Note that when dividing by zero the divisor will remain zero,
- which is all we need to detect that case below. */
- const int power_of_two_factor = __builtin_ctzll (divisor);
- divisor >>= power_of_two_factor;
- dividend >>= power_of_two_factor;
-
- /* Checks for division by power of two or division by zero. */
- if (divisor <= 1)
- {
- if (divisor == 0)
- {
- raise_intdiv ();
- return 0;
- }
- return dividend;
- }
-
-#ifndef __tilegx__
- if (((uint32_t) (dividend >> 32) | ((uint32_t) (divisor >> 32))) == 0)
- {
- /* Operands both fit in 32 bits, so use faster 32 bit algorithm. */
- return __udivsi3_inline ((uint32_t) dividend, (uint32_t) divisor);
- }
-#endif /* !__tilegx__ */
-
- /* See algorithm description in __udivsi3 */
-
- const int divisor_clz = __builtin_clzll (divisor);
- const uint64_t max_divisor = divisor << divisor_clz;
- const uint64_t max_qbit = 1ULL << divisor_clz;
-
- uint64_t quotient = 0;
- uint64_t remainder = dividend;
-
- while (remainder >= divisor)
- {
- int shift = __builtin_clzll (remainder);
- uint64_t scaled_divisor = max_divisor >> shift;
- uint64_t quotient_bit = max_qbit >> shift;
-
- int too_big = (scaled_divisor > remainder);
- scaled_divisor >>= too_big;
- quotient_bit >>= too_big;
- remainder -= scaled_divisor;
- quotient |= quotient_bit;
- }
- return quotient;
-}
-
-
-#ifndef __tilegx__
-/* __umodsi3 - 32 bit integer unsigned modulo */
-static inline uint32_t __attribute__ ((always_inline))
-__umodsi3_inline (uint32_t dividend, uint32_t divisor)
-{
- /* Shortcircuit mod by a power of two (and catch mod by zero). */
- const uint32_t mask = divisor - 1;
- if ((divisor & mask) == 0)
- {
- if (divisor == 0)
- {
- raise_intdiv ();
- return 0;
- }
- return dividend & mask;
- }
-
- /* We compute the remainder (a % b) by repeatedly subtracting off
- multiples of b from a until a < b. The key is that subtracting
- off a multiple of b does not affect the result mod b.
-
- To make the algorithm run efficiently, we need to subtract
- off a large multiple of b at each step. We subtract the largest
- (b << N) that is <= a.
-
- Finding N is easy. First, use clz(b) - clz(a) to find the N
- that lines up the high bit of (b << N) with the high bit of a.
- Any larger value of N would definitely make (b << N) > a,
- which is too big.
-
- Then, if (b << N) > a (because it has larger low bits), decrement
- N by one. This adjustment will definitely make (b << N) less
- than a, because a's high bit is now one higher than b's. */
- const uint32_t max_divisor = divisor << __insn_clz (divisor);
-
- uint32_t remainder = dividend;
- while (remainder >= divisor)
- {
- const int shift = __insn_clz (remainder);
- uint32_t scaled_divisor = max_divisor >> shift;
- scaled_divisor >>= (scaled_divisor > remainder);
- remainder -= scaled_divisor;
- }
-
- return remainder;
-}
-#endif /* !__tilegx__ */
-
-
-/* __umoddi3 - 64 bit integer unsigned modulo */
-static inline uint64_t __attribute__ ((always_inline))
-__umoddi3_inline (uint64_t dividend, uint64_t divisor)
-{
-#ifndef __tilegx__
- if (((uint32_t) (dividend >> 32) | ((uint32_t) (divisor >> 32))) == 0)
- {
- /* Operands both fit in 32 bits, so use faster 32 bit algorithm. */
- return __umodsi3_inline ((uint32_t) dividend, (uint32_t) divisor);
- }
-#endif /* !__tilegx__ */
-
- /* Shortcircuit mod by a power of two (and catch mod by zero). */
- const uint64_t mask = divisor - 1;
- if ((divisor & mask) == 0)
- {
- if (divisor == 0)
- {
- raise_intdiv ();
- return 0;
- }
- return dividend & mask;
- }
-
- /* See algorithm description in __umodsi3 */
- const uint64_t max_divisor = divisor << __builtin_clzll (divisor);
-
- uint64_t remainder = dividend;
- while (remainder >= divisor)
- {
- const int shift = __builtin_clzll (remainder);
- uint64_t scaled_divisor = max_divisor >> shift;
- scaled_divisor >>= (scaled_divisor > remainder);
- remainder -= scaled_divisor;
- }
-
- return remainder;
-}
-
-
-uint32_t __udivsi3 (uint32_t dividend, uint32_t divisor);
-#ifdef L_tile_udivsi3
-uint32_t
-__udivsi3 (uint32_t dividend, uint32_t divisor)
-{
-#ifndef __tilegx__
- return __udivsi3_inline (dividend, divisor);
-#else /* !__tilegx__ */
- uint64_t n = __udivdi3_inline (((uint64_t) dividend), ((uint64_t) divisor));
- return (uint32_t) n;
-#endif /* !__tilegx__ */
-}
-#endif
-
-#define ABS(x) ((x) >= 0 ? (x) : -(x))
-
-int32_t __divsi3 (int32_t dividend, int32_t divisor);
-#ifdef L_tile_divsi3
-/* __divsi3 - 32 bit integer signed divide */
-int32_t
-__divsi3 (int32_t dividend, int32_t divisor)
-{
-#ifndef __tilegx__
- uint32_t n = __udivsi3_inline (ABS (dividend), ABS (divisor));
-#else /* !__tilegx__ */
- uint64_t n =
- __udivdi3_inline (ABS ((int64_t) dividend), ABS ((int64_t) divisor));
-#endif /* !__tilegx__ */
- if ((dividend ^ divisor) < 0)
- n = -n;
- return (int32_t) n;
-}
-#endif
-
-
-uint64_t __udivdi3 (uint64_t dividend, uint64_t divisor);
-#ifdef L_tile_udivdi3
-uint64_t
-__udivdi3 (uint64_t dividend, uint64_t divisor)
-{
- return __udivdi3_inline (dividend, divisor);
-}
-#endif
-
-/*__divdi3 - 64 bit integer signed divide */
-int64_t __divdi3 (int64_t dividend, int64_t divisor);
-#ifdef L_tile_divdi3
-int64_t
-__divdi3 (int64_t dividend, int64_t divisor)
-{
- uint64_t n = __udivdi3_inline (ABS (dividend), ABS (divisor));
- if ((dividend ^ divisor) < 0)
- n = -n;
- return (int64_t) n;
-}
-#endif
-
-
-uint32_t __umodsi3 (uint32_t dividend, uint32_t divisor);
-#ifdef L_tile_umodsi3
-uint32_t
-__umodsi3 (uint32_t dividend, uint32_t divisor)
-{
-#ifndef __tilegx__
- return __umodsi3_inline (dividend, divisor);
-#else /* !__tilegx__ */
- return __umoddi3_inline ((uint64_t) dividend, (uint64_t) divisor);
-#endif /* !__tilegx__ */
-}
-#endif
-
-
-/* __modsi3 - 32 bit integer signed modulo */
-int32_t __modsi3 (int32_t dividend, int32_t divisor);
-#ifdef L_tile_modsi3
-int32_t
-__modsi3 (int32_t dividend, int32_t divisor)
-{
-#ifndef __tilegx__
- uint32_t remainder = __umodsi3_inline (ABS (dividend), ABS (divisor));
-#else /* !__tilegx__ */
- uint64_t remainder =
- __umoddi3_inline (ABS ((int64_t) dividend), ABS ((int64_t) divisor));
-#endif /* !__tilegx__ */
- return (int32_t) ((dividend >= 0) ? remainder : -remainder);
-}
-#endif
-
-
-uint64_t __umoddi3 (uint64_t dividend, uint64_t divisor);
-#ifdef L_tile_umoddi3
-uint64_t
-__umoddi3 (uint64_t dividend, uint64_t divisor)
-{
- return __umoddi3_inline (dividend, divisor);
-}
-#endif
-
-
-/* __moddi3 - 64 bit integer signed modulo */
-int64_t __moddi3 (int64_t dividend, int64_t divisor);
-#ifdef L_tile_moddi3
-int64_t
-__moddi3 (int64_t dividend, int64_t divisor)
-{
- uint64_t remainder = __umoddi3_inline (ABS (dividend), ABS (divisor));
- return (int64_t) ((dividend >= 0) ? remainder : -remainder);
-}
-#endif
diff --git a/libgcc/config/tilepro/softmpy.S b/libgcc/config/tilepro/softmpy.S
deleted file mode 100644
index 0554a6f..0000000
--- a/libgcc/config/tilepro/softmpy.S
+++ /dev/null
@@ -1,94 +0,0 @@
-/* 64-bit multiplication support for TILEPro.
- Copyright (C) 2011-2022 Free Software Foundation, Inc.
- Contributed by Walter Lee (walt@tilera.com)
-
- This file 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.
-
- This file 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.
-
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
-
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* 64-bit multiplication support. */
-
- .file "softmpy.S"
-
-/* Parameters */
-#define lo0 r9 /* low 32 bits of n0 */
-#define hi0 r1 /* high 32 bits of n0 */
-#define lo1 r2 /* low 32 bits of n1 */
-#define hi1 r3 /* high 32 bits of n1 */
-
-/* temps */
-#define result1_a r4
-#define result1_b r5
-
-#define tmp0 r6
-#define tmp0_left_16 r7
-#define tmp1 r8
-
- .section .text.__muldi3, "ax"
- .align 8
- .globl __muldi3
- .type __muldi3, @function
-__muldi3:
- {
- move lo0, r0 /* so we can write "out r0" while "in r0" alive */
- mulhl_uu tmp0, lo1, r0
- }
- {
- mulll_uu result1_a, lo1, hi0
- }
- {
- move tmp1, tmp0
- mulhla_uu tmp0, lo0, lo1
- }
- {
- mulhlsa_uu result1_a, lo1, hi0
- }
- {
- mulll_uu result1_b, lo0, hi1
- slt_u tmp1, tmp0, tmp1
- }
- {
- mulhlsa_uu result1_a, lo0, hi1
- shli r0, tmp0, 16
- }
- {
- move tmp0_left_16, r0
- mulhha_uu result1_b, lo0, lo1
- }
- {
- mullla_uu r0, lo1, lo0
- shli tmp1, tmp1, 16
- }
- {
- mulhlsa_uu result1_b, hi0, lo1
- inthh tmp1, tmp1, tmp0
- }
- {
- mulhlsa_uu result1_a, hi1, lo0
- slt_u tmp0, r0, tmp0_left_16
- }
- /* NOTE: this will stall for a cycle here. Oh well. */
- {
- add r1, tmp0, tmp1
- add result1_a, result1_a, result1_b
- }
- {
- add r1, r1, result1_a
- jrp lr
- }
- .size __muldi3,.-__muldi3
diff --git a/libgcc/config/tilepro/t-crtstuff b/libgcc/config/tilepro/t-crtstuff
deleted file mode 100644
index eddc45c..0000000
--- a/libgcc/config/tilepro/t-crtstuff
+++ /dev/null
@@ -1,4 +0,0 @@
-# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
-# because then __FRAME_END__ might not be the last thing in .eh_frame
-# section.
-CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
diff --git a/libgcc/config/tilepro/t-tilepro b/libgcc/config/tilepro/t-tilepro
deleted file mode 100644
index eb6894c..0000000
--- a/libgcc/config/tilepro/t-tilepro
+++ /dev/null
@@ -1,33 +0,0 @@
-LIB2ADD += \
- $(srcdir)/config/tilepro/softmpy.S \
- $(srcdir)/config/tilepro/atomic.c
-
-LIB2FUNCS_EXCLUDE += \
- _divdi3 \
- _moddi3 \
- _muldi3 \
- _udivdi3 \
- _umoddi3
-
-SOFTDIVIDE_FUNCS := \
- _tile_udivsi3 \
- _tile_divsi3 \
- _tile_udivdi3 \
- _tile_divdi3 \
- _tile_umodsi3 \
- _tile_modsi3 \
- _tile_umoddi3 \
- _tile_moddi3
-
-softdivide-o = $(patsubst %,%$(objext),$(SOFTDIVIDE_FUNCS))
-$(softdivide-o): %$(objext): $(srcdir)/config/tilepro/softdivide.c
- $(gcc_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $< \
- $(vis_hide)
-libgcc-objects += $(softdivide-o)
-
-ifeq ($(enable_shared),yes)
-softdivide-s-o = $(patsubst %,%_s$(objext),$(SOFTDIVIDE_FUNCS))
-$(softdivide-s-o): %_s$(objext): $(srcdir)/config/tilepro/softdivide.c
- $(gcc_s_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $<
-libgcc-s-objects += $(softdivide-s-o)
-endif
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index bec97b4..d1b2b2c 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,95 @@
+2022-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ * mk-kinds-h.sh: Change __float128 to _Float128 in a comment.
+ * acinclude.m4 (LIBGFOR_CHECK_MATH_IEEE128): Use _Float128 instead of
+ __float128.
+ * libgfortran.h (isnan): Change __float128 to _Float128 in a comment.
+ (__acoshieee128, __acosieee128, __asinhieee128, __asinieee128,
+ __atan2ieee128, __atanhieee128, __atanieee128, __copysignieee128,
+ __coshieee128, __cosieee128, __erfcieee128, __erfieee128,
+ __expieee128, __fabsieee128, __fmaieee128, __fmodieee128, __jnieee128,
+ __log10ieee128, __logieee128, __powieee128, __sinhieee128,
+ __sinieee128, __sqrtieee128, __tanhieee128, __tanieee128,
+ __ynieee128, __strtoieee128): Use _Float128 instead of __float128.
+ * configure: Regenerated.
+
+2022-06-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/106137
+ * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Adjust comment.
+ Also test for __float128.
+ (HAVE_FLOAT128): Adjust description.
+ * config.h.in: Regenerated.
+ * configure: Regenerated.
+
+2022-06-28 Jakub Jelinek <jakub@redhat.com>
+
+ * configure.ac: Check for strtof128 and strfromf128.
+ Check for math and complex *f128 functions. Set
+ have_iec_60559_libc_support to yes if *f128 support is around, for
+ --enable-libquadmath-support default to "default" rather than yes if
+ have_iec_60559_libc_support is yes.
+ * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Test
+ _Float128/_Complex _Float128 rather than __float128 and
+ _Complex float __attribute__((mode(TC))). If libquadmath support
+ is defaulted and have_iec_60559_libc_support is yes, define and subst
+ USE_IEC_60559. Remove unused LIBGFOR_BUILD_QUAD conditional.
+ * Makefile.am (kinds.h): Pass @USE_IEC_60559@ as an extra
+ mk-kinds-h.sh argument.
+ * mk-kinds-h.sh: Accept 4th use_iec_60559 argument. Use
+ _Float128/_Complex _Float128 types instead of __float128 and
+ _Complex float __attribute__((mode(TC))), and if use_iec_60559 is yes,
+ use f128 suffix instead of q and define GFC_REAL_16_USE_IEC_60559.
+ * kinds-override.h: Use _Float128/_Complex _Float128 types instead of
+ __float128 and _Complex float __attribute__((mode(TC))), if
+ USE_IEC_60559 is defined, use f128 suffixes instead of q and
+ define GFC_REAL_17_USE_IEC_60559.
+ * libgfortran.h: Don't include quadmath_weak.h if USE_IEC_60559 is
+ defined.
+ (GFC_REAL_16_INFINITY, GFC_REAL_16_QUIET_NAN): Define
+ for GFC_REAL_16_USE_IEC_60559 differently.
+ * caf/single.c (convert_type): Use _Float128/_Complex _Float128
+ instead of __float128 and _Complex float __attribute__((mode(TC))).
+ For HAVE_GFC_REAL_10 when HAVE_GFC_REAL_16 isn't defined use
+ _Complex long double instead of long double.
+ * ieee/issignaling_fallback.h (ieee854_float128_shape_type): Use
+ _Float128 instead of __float128.
+ (__issignalingf128): Change argument type to _Float128.
+ (issignaling): Use _Float128 instead of __float128 in _Generic.
+ * intrinsics/cshift0.c (cshift0): Use _Float128 instead of __float128
+ in a comment. Fix a comment typo, logn double -> long double.
+ * intrinsics/erfc_scaled.c (_THRESH, _M_2_SQRTPI, _INF, _ERFC, _EXP):
+ Use different definitions if GFC_REAL_16_USE_IEC_60559.
+ (_THRESH, _M_2_SQRTPI): Use GFC_REAL_17_LITERAL macro.
+ (_ERFC, _EXP): Use different definitions if GFC_REAL_17_USE_IEC_60559.
+ * intrinsics/spread_generic.c (spread, spread_scalar): Use _Float128
+ instead of __float128 in a comment. Fix a comment typo,
+ logn double -> long double.
+ * intrinsics/trigd.c (ENABLE_SIND, ENABLE_COSD, ENABLE_TAND): Handle
+ GFC_REAL_16_USE_IEC_60559.
+ * intrinsics/pack_generic.c (pack): Use _Float128 instead of
+ __float128 in a comment. Fix a comment typo, logn double ->
+ long double.
+ * intrinsics/unpack_generic.c (unpack1, unpack0): Likewise.
+ * runtime/in_pack_generic.c (internal_pack): Likewise.
+ * runtime/in_unpack_generic.c (internal_unpack): Likewise.
+ * io/read.c (convert_real, convert_infnan): Handle
+ GFC_REAL_16_USE_IEC_60559 and GFC_REAL_17_USE_IEC_60559.
+ * io/transfer128.c (tmp1, tmp2): Don't define if libquadmath
+ isn't needed.
+ * io/write_float.def (gfor_strfromf128): New function.
+ (DTOA2Q, FDTOA2Q): Define differently if
+ GFC_REAL_16_USE_IEC_60559 or GFC_REAL_17_USE_IEC_60559.
+ * m4/mtype.m4: Use different suffix if GFC_REAL_16_USE_IEC_60559
+ or GFC_REAL_17_USE_IEC_60559.
+ * config.h.in: Regenerated.
+ * configure: Regenerated.
+ * Makefile.in: Regenerated.
+ * generated/bessel_r16.c: Regenerated.
+ * generated/bessel_r17.c: Regenerated.
+ * generated/norm2_r16.c: Regenerated.
+ * generated/norm2_r17.c: Regenerated.
+
2022-01-26 Francois-Xavier Coudert <fxcoudert@gmail.com>
PR libfortran/104233
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 5ce0cd7..454ad12 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -1167,7 +1167,9 @@ I_M4_DEPS8=$(I_M4_DEPS) m4/ifindloc1.m4
I_M4_DEPS9=$(I_M4_DEPS) m4/ifindloc2.m4
kinds.h: $(srcdir)/mk-kinds-h.sh
- $(SHELL) $(srcdir)/mk-kinds-h.sh '@LIBGOMP_CHECKED_INT_KINDS@' '@LIBGOMP_CHECKED_REAL_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
+ $(SHELL) $(srcdir)/mk-kinds-h.sh '@LIBGOMP_CHECKED_INT_KINDS@' \
+ '@LIBGOMP_CHECKED_REAL_KINDS@' \
+ '$(FCCOMPILE)' '@USE_IEC_60559@' > $@ || rm $@
kinds.inc: kinds.h $(srcdir)/kinds-override.h
cat kinds.h $(srcdir)/kinds-override.h | grep '^#' | grep -v include > $@
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 7ac6bfb..23df076 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -664,6 +664,7 @@ SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+USE_IEC_60559 = @USE_IEC_60559@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
@@ -7674,7 +7675,9 @@ ieee_arithmetic.mod: ieee_arithmetic.lo
@onestep_TRUE@ $(LTCOMPILE) -c -o $@ $^ -combine
kinds.h: $(srcdir)/mk-kinds-h.sh
- $(SHELL) $(srcdir)/mk-kinds-h.sh '@LIBGOMP_CHECKED_INT_KINDS@' '@LIBGOMP_CHECKED_REAL_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
+ $(SHELL) $(srcdir)/mk-kinds-h.sh '@LIBGOMP_CHECKED_INT_KINDS@' \
+ '@LIBGOMP_CHECKED_REAL_KINDS@' \
+ '$(FCCOMPILE)' '@USE_IEC_60559@' > $@ || rm $@
kinds.inc: kinds.h $(srcdir)/kinds-override.h
cat kinds.h $(srcdir)/kinds-override.h | grep '^#' | grep -v include > $@
diff --git a/libgfortran/acinclude.m4 b/libgfortran/acinclude.m4
index bf4cc78..b4cc0bd 100644
--- a/libgfortran/acinclude.m4
+++ b/libgfortran/acinclude.m4
@@ -261,44 +261,62 @@ __mingw_snprintf (NULL, 0, "%d\n", 1);
fi
])
-dnl Check whether we have a __float128 type
+dnl Check whether we have a __float128 and _Float128 type
AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
LIBQUADSPEC=
+ LIBQUADLIB=
+ LIBQUADLIB_DEP=
+ LIBQUADINCLUDE=
+ USE_IEC_60559=no
if test "x$enable_libquadmath_support" != xno; then
- AC_CACHE_CHECK([whether we have a usable __float128 type],
+ AC_CACHE_CHECK([whether we have a usable _Float128 type],
libgfor_cv_have_float128, [
GCC_TRY_COMPILE_OR_LINK([
- typedef _Complex float __attribute__((mode(TC))) __complex128;
-
- __float128 foo (__float128 x)
+ _Float128 foo (_Float128 x)
{
-
- __complex128 z1, z2;
+ _Complex _Float128 z1, z2;
z1 = x;
- z2 = x / 7.Q;
+ z2 = x / 7.F128;
z2 /= z1;
- return (__float128) z2;
+ return (_Float128) z2;
+ }
+
+ _Float128 bar (_Float128 x)
+ {
+ return x * __builtin_huge_valf128 ();
}
- __float128 bar (__float128 x)
+ __float128 baz (__float128 x)
{
- return x * __builtin_huge_valq ();
+ return x * __builtin_huge_valf128 ();
}
],[
+ foo (1.2F128);
+ bar (1.2F128);
+ baz (1.2F128);
foo (1.2Q);
bar (1.2Q);
+ baz (1.2Q);
],[
libgfor_cv_have_float128=yes
],[
libgfor_cv_have_float128=no
])])
+ if test "x$have_iec_60559_libc_support$enable_libquadmath_support$libgfor_cv_have_float128" = xyesdefaultyes; then
+ USE_IEC_60559=yes
+ fi
+
+
if test "x$libgfor_cv_have_float128" = xyes; then
- AC_DEFINE(HAVE_FLOAT128, 1, [Define if have a usable __float128 type.])
+ if test "x$USE_IEC_60559" = xyes; then
+ AC_DEFINE(USE_IEC_60559, 1, [Define if IEC 60559 *f128 APIs should be used for _Float128.])
+ fi
+ AC_DEFINE(HAVE_FLOAT128, 1, [Define if target has usable _Float128 and __float128 types.])
dnl Check whether -Wl,--as-needed resp. -Wl,-zignore is supported
dnl
@@ -339,26 +357,30 @@ AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
])
dnl For static libgfortran linkage, depend on libquadmath only if needed.
+ dnl If using *f128 APIs from libc/libm, depend on libquadmath only if needed
+ dnl even for dynamic libgfortran linkage, and don't link libgfortran against
+ dnl -lquadmath.
if test "x$libgfor_cv_have_as_needed" = xyes; then
- LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} -lquadmath %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
+ if test "x$USE_IEC_60559" = xyes; then
+ LIBQUADSPEC="$libgfor_cv_as_needed_option -lquadmath $libgfor_cv_no_as_needed_option"
+ else
+ LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} -lquadmath %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
+ fi
else
LIBQUADSPEC="-lquadmath"
fi
- if test -f ../libquadmath/libquadmath.la; then
- LIBQUADLIB=../libquadmath/libquadmath.la
- LIBQUADLIB_DEP=../libquadmath/libquadmath.la
- LIBQUADINCLUDE='-I$(srcdir)/../libquadmath'
- else
- LIBQUADLIB="-lquadmath"
- LIBQUADLIB_DEP=
- LIBQUADINCLUDE=
+ if test "x$USE_IEC_60559" != xyes; then
+ if test -f ../libquadmath/libquadmath.la; then
+ LIBQUADLIB=../libquadmath/libquadmath.la
+ LIBQUADLIB_DEP=../libquadmath/libquadmath.la
+ LIBQUADINCLUDE='-I$(srcdir)/../libquadmath'
+ else
+ LIBQUADLIB="-lquadmath"
+ fi
fi
- fi
else
- # for --disable-quadmath
- LIBQUADLIB=
- LIBQUADLIB_DEP=
- LIBQUADINCLUDE=
+ USE_IEC_60559=no
+ fi
fi
dnl For the spec file
@@ -366,9 +388,7 @@ AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
AC_SUBST(LIBQUADLIB)
AC_SUBST(LIBQUADLIB_DEP)
AC_SUBST(LIBQUADINCLUDE)
-
- dnl We need a conditional for the Makefile
- AM_CONDITIONAL(LIBGFOR_BUILD_QUAD, [test "x$libgfor_cv_have_float128" = xyes])
+ AC_SUBST(USE_IEC_60559)
])
@@ -517,8 +537,8 @@ AC_DEFUN([LIBGFOR_CHECK_MATH_IEEE128],
AC_REQUIRE([GCC_CHECK_MATH_HEADERS])
AC_CACHE_CHECK([for $1], [gcc_cv_math_func_$1],
[AC_LINK_IFELSE([AC_LANG_SOURCE([
-__float128 $1 (__float128);
-__float128 (*ptr)(__float128) = $1;
+_Float128 $1 (_Float128);
+_Float128 (*ptr)(_Float128) = $1;
int
main ()
diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c
index 36dfebf..24a391f 100644
--- a/libgfortran/caf/single.c
+++ b/libgfortran/caf/single.c
@@ -478,12 +478,11 @@ convert_type (void *dst, int dst_type, int dst_kind, void *src, int src_type,
typedef long double real128t;
typedef _Complex long double complex128t;
#elif defined(HAVE_GFC_REAL_16)
- typedef _Complex float __attribute__((mode(TC))) __complex128;
- typedef __float128 real128t;
- typedef __complex128 complex128t;
+ typedef _Float128 real128t;
+ typedef _Complex _Float128 complex128t;
#elif defined(HAVE_GFC_REAL_10)
typedef long double real128t;
- typedef long double complex128t;
+ typedef _Complex long double complex128t;
#else
typedef double real128t;
typedef _Complex double complex128t;
diff --git a/libgfortran/config.h.in b/libgfortran/config.h.in
index 24e31eb..da2c44c 100644
--- a/libgfortran/config.h.in
+++ b/libgfortran/config.h.in
@@ -12,12 +12,18 @@
/* Define to 1 if you have the `acosf' function. */
#undef HAVE_ACOSF
+/* Define to 1 if you have the `acosf128' function. */
+#undef HAVE_ACOSF128
+
/* Define to 1 if you have the `acosh' function. */
#undef HAVE_ACOSH
/* Define to 1 if you have the `acoshf' function. */
#undef HAVE_ACOSHF
+/* Define to 1 if you have the `acoshf128' function. */
+#undef HAVE_ACOSHF128
+
/* Define to 1 if you have the `acoshl' function. */
#undef HAVE_ACOSHL
@@ -33,12 +39,18 @@
/* Define to 1 if you have the `asinf' function. */
#undef HAVE_ASINF
+/* Define to 1 if you have the `asinf128' function. */
+#undef HAVE_ASINF128
+
/* Define to 1 if you have the `asinh' function. */
#undef HAVE_ASINH
/* Define to 1 if you have the `asinhf' function. */
#undef HAVE_ASINHF
+/* Define to 1 if you have the `asinhf128' function. */
+#undef HAVE_ASINHF128
+
/* Define to 1 if you have the `asinhl' function. */
#undef HAVE_ASINHL
@@ -54,18 +66,27 @@
/* Define to 1 if you have the `atan2f' function. */
#undef HAVE_ATAN2F
+/* Define to 1 if you have the `atan2f128' function. */
+#undef HAVE_ATAN2F128
+
/* Define to 1 if you have the `atan2l' function. */
#undef HAVE_ATAN2L
/* Define to 1 if you have the `atanf' function. */
#undef HAVE_ATANF
+/* Define to 1 if you have the `atanf128' function. */
+#undef HAVE_ATANF128
+
/* Define to 1 if you have the `atanh' function. */
#undef HAVE_ATANH
/* Define to 1 if you have the `atanhf' function. */
#undef HAVE_ATANHF
+/* Define to 1 if you have the `atanhf128' function. */
+#undef HAVE_ATANHF128
+
/* Define to 1 if you have the `atanhl' function. */
#undef HAVE_ATANHL
@@ -99,6 +120,9 @@
/* Define to 1 if you have the `cabsf' function. */
#undef HAVE_CABSF
+/* Define to 1 if you have the `cabsf128' function. */
+#undef HAVE_CABSF128
+
/* Define to 1 if you have the `cabsl' function. */
#undef HAVE_CABSL
@@ -108,12 +132,18 @@
/* Define to 1 if you have the `cacosf' function. */
#undef HAVE_CACOSF
+/* Define to 1 if you have the `cacosf128' function. */
+#undef HAVE_CACOSF128
+
/* Define to 1 if you have the `cacosh' function. */
#undef HAVE_CACOSH
/* Define to 1 if you have the `cacoshf' function. */
#undef HAVE_CACOSHF
+/* Define to 1 if you have the `cacoshf128' function. */
+#undef HAVE_CACOSHF128
+
/* Define to 1 if you have the `cacoshl' function. */
#undef HAVE_CACOSHL
@@ -126,6 +156,9 @@
/* Define to 1 if you have the `cargf' function. */
#undef HAVE_CARGF
+/* Define to 1 if you have the `cargf128' function. */
+#undef HAVE_CARGF128
+
/* Define to 1 if you have the `cargl' function. */
#undef HAVE_CARGL
@@ -135,12 +168,18 @@
/* Define to 1 if you have the `casinf' function. */
#undef HAVE_CASINF
+/* Define to 1 if you have the `casinf128' function. */
+#undef HAVE_CASINF128
+
/* Define to 1 if you have the `casinh' function. */
#undef HAVE_CASINH
/* Define to 1 if you have the `casinhf' function. */
#undef HAVE_CASINHF
+/* Define to 1 if you have the `casinhf128' function. */
+#undef HAVE_CASINHF128
+
/* Define to 1 if you have the `casinhl' function. */
#undef HAVE_CASINHL
@@ -153,12 +192,18 @@
/* Define to 1 if you have the `catanf' function. */
#undef HAVE_CATANF
+/* Define to 1 if you have the `catanf128' function. */
+#undef HAVE_CATANF128
+
/* Define to 1 if you have the `catanh' function. */
#undef HAVE_CATANH
/* Define to 1 if you have the `catanhf' function. */
#undef HAVE_CATANHF
+/* Define to 1 if you have the `catanhf128' function. */
+#undef HAVE_CATANHF128
+
/* Define to 1 if you have the `catanhl' function. */
#undef HAVE_CATANHL
@@ -171,12 +216,18 @@
/* Define to 1 if you have the `ccosf' function. */
#undef HAVE_CCOSF
+/* Define to 1 if you have the `ccosf128' function. */
+#undef HAVE_CCOSF128
+
/* Define to 1 if you have the `ccosh' function. */
#undef HAVE_CCOSH
/* Define to 1 if you have the `ccoshf' function. */
#undef HAVE_CCOSHF
+/* Define to 1 if you have the `ccoshf128' function. */
+#undef HAVE_CCOSHF128
+
/* Define to 1 if you have the `ccoshl' function. */
#undef HAVE_CCOSHL
@@ -189,6 +240,9 @@
/* Define to 1 if you have the `ceilf' function. */
#undef HAVE_CEILF
+/* Define to 1 if you have the `ceilf128' function. */
+#undef HAVE_CEILF128
+
/* Define to 1 if you have the `ceill' function. */
#undef HAVE_CEILL
@@ -198,6 +252,9 @@
/* Define to 1 if you have the `cexpf' function. */
#undef HAVE_CEXPF
+/* Define to 1 if you have the `cexpf128' function. */
+#undef HAVE_CEXPF128
+
/* Define to 1 if you have the `cexpl' function. */
#undef HAVE_CEXPL
@@ -222,12 +279,18 @@
/* Define to 1 if you have the `clog10f' function. */
#undef HAVE_CLOG10F
+/* Define to 1 if you have the `clog10f128' function. */
+#undef HAVE_CLOG10F128
+
/* Define to 1 if you have the `clog10l' function. */
#undef HAVE_CLOG10L
/* Define to 1 if you have the `clogf' function. */
#undef HAVE_CLOGF
+/* Define to 1 if you have the `clogf128' function. */
+#undef HAVE_CLOGF128
+
/* Define to 1 if you have the `clogl' function. */
#undef HAVE_CLOGL
@@ -240,6 +303,9 @@
/* Define to 1 if you have the `copysignf' function. */
#undef HAVE_COPYSIGNF
+/* Define to 1 if you have the `copysignf128' function. */
+#undef HAVE_COPYSIGNF128
+
/* Define to 1 if you have the `copysignl' function. */
#undef HAVE_COPYSIGNL
@@ -249,12 +315,18 @@
/* Define to 1 if you have the `cosf' function. */
#undef HAVE_COSF
+/* Define to 1 if you have the `cosf128' function. */
+#undef HAVE_COSF128
+
/* Define to 1 if you have the `cosh' function. */
#undef HAVE_COSH
/* Define to 1 if you have the `coshf' function. */
#undef HAVE_COSHF
+/* Define to 1 if you have the `coshf128' function. */
+#undef HAVE_COSHF128
+
/* Define to 1 if you have the `coshl' function. */
#undef HAVE_COSHL
@@ -267,6 +339,9 @@
/* Define to 1 if you have the `cpowf' function. */
#undef HAVE_CPOWF
+/* Define to 1 if you have the `cpowf128' function. */
+#undef HAVE_CPOWF128
+
/* Define to 1 if you have the `cpowl' function. */
#undef HAVE_CPOWL
@@ -279,12 +354,18 @@
/* Define to 1 if you have the `csinf' function. */
#undef HAVE_CSINF
+/* Define to 1 if you have the `csinf128' function. */
+#undef HAVE_CSINF128
+
/* Define to 1 if you have the `csinh' function. */
#undef HAVE_CSINH
/* Define to 1 if you have the `csinhf' function. */
#undef HAVE_CSINHF
+/* Define to 1 if you have the `csinhf128' function. */
+#undef HAVE_CSINHF128
+
/* Define to 1 if you have the `csinhl' function. */
#undef HAVE_CSINHL
@@ -297,6 +378,9 @@
/* Define to 1 if you have the `csqrtf' function. */
#undef HAVE_CSQRTF
+/* Define to 1 if you have the `csqrtf128' function. */
+#undef HAVE_CSQRTF128
+
/* Define to 1 if you have the `csqrtl' function. */
#undef HAVE_CSQRTL
@@ -306,12 +390,18 @@
/* Define to 1 if you have the `ctanf' function. */
#undef HAVE_CTANF
+/* Define to 1 if you have the `ctanf128' function. */
+#undef HAVE_CTANF128
+
/* Define to 1 if you have the `ctanh' function. */
#undef HAVE_CTANH
/* Define to 1 if you have the `ctanhf' function. */
#undef HAVE_CTANHF
+/* Define to 1 if you have the `ctanhf128' function. */
+#undef HAVE_CTANHF128
+
/* Define to 1 if you have the `ctanhl' function. */
#undef HAVE_CTANHL
@@ -333,18 +423,27 @@
/* Define to 1 if you have the `erfcf' function. */
#undef HAVE_ERFCF
+/* Define to 1 if you have the `erfcf128' function. */
+#undef HAVE_ERFCF128
+
/* Define to 1 if you have the `erfcl' function. */
#undef HAVE_ERFCL
/* Define to 1 if you have the `erff' function. */
#undef HAVE_ERFF
+/* Define to 1 if you have the `erff128' function. */
+#undef HAVE_ERFF128
+
/* Define to 1 if you have the `exp' function. */
#undef HAVE_EXP
/* Define to 1 if you have the `expf' function. */
#undef HAVE_EXPF
+/* Define to 1 if you have the `expf128' function. */
+#undef HAVE_EXPF128
+
/* Define to 1 if you have the `expl' function. */
#undef HAVE_EXPL
@@ -354,6 +453,9 @@
/* Define to 1 if you have the `fabsf' function. */
#undef HAVE_FABSF
+/* Define to 1 if you have the `fabsf128' function. */
+#undef HAVE_FABSF128
+
/* Define to 1 if you have the `fabsl' function. */
#undef HAVE_FABSL
@@ -366,7 +468,7 @@
/* Define to 1 if you have the <fenv.h> header file. */
#undef HAVE_FENV_H
-/* Define if have a usable __float128 type. */
+/* Define if target has usable _Float128 and __float128 types. */
#undef HAVE_FLOAT128
/* Define to 1 if you have the <floatingpoint.h> header file. */
@@ -378,6 +480,9 @@
/* Define to 1 if you have the `floorf' function. */
#undef HAVE_FLOORF
+/* Define to 1 if you have the `floorf128' function. */
+#undef HAVE_FLOORF128
+
/* Define to 1 if you have the `floorl' function. */
#undef HAVE_FLOORL
@@ -393,6 +498,9 @@
/* Define to 1 if you have the `fmaf' function. */
#undef HAVE_FMAF
+/* Define to 1 if you have the `fmaf128' function. */
+#undef HAVE_FMAF128
+
/* Define to 1 if you have the `fmal' function. */
#undef HAVE_FMAL
@@ -402,6 +510,9 @@
/* Define to 1 if you have the `fmodf' function. */
#undef HAVE_FMODF
+/* Define to 1 if you have the `fmodf128' function. */
+#undef HAVE_FMODF128
+
/* Define to 1 if you have the `fmodl' function. */
#undef HAVE_FMODL
@@ -450,6 +561,9 @@
/* Define to 1 if you have the `frexpf' function. */
#undef HAVE_FREXPF
+/* Define to 1 if you have the `frexpf128' function. */
+#undef HAVE_FREXPF128
+
/* Define to 1 if you have the `frexpl' function. */
#undef HAVE_FREXPL
@@ -507,6 +621,9 @@
/* Define to 1 if you have the `hypotf' function. */
#undef HAVE_HYPOTF
+/* Define to 1 if you have the `hypotf128' function. */
+#undef HAVE_HYPOTF128
+
/* Define to 1 if you have the `hypotl' function. */
#undef HAVE_HYPOTL
@@ -537,18 +654,27 @@
/* Define to 1 if you have the `j0f' function. */
#undef HAVE_J0F
+/* Define to 1 if you have the `j0f128' function. */
+#undef HAVE_J0F128
+
/* Define to 1 if you have the `j1' function. */
#undef HAVE_J1
/* Define to 1 if you have the `j1f' function. */
#undef HAVE_J1F
+/* Define to 1 if you have the `j1f128' function. */
+#undef HAVE_J1F128
+
/* Define to 1 if you have the `jn' function. */
#undef HAVE_JN
/* Define to 1 if you have the `jnf' function. */
#undef HAVE_JNF
+/* Define to 1 if you have the `jnf128' function. */
+#undef HAVE_JNF128
+
/* Define to 1 if you have the `jnl' function. */
#undef HAVE_JNL
@@ -561,6 +687,9 @@
/* Define to 1 if you have the `ldexpf' function. */
#undef HAVE_LDEXPF
+/* Define to 1 if you have the `ldexpf128' function. */
+#undef HAVE_LDEXPF128
+
/* Define to 1 if you have the `ldexpl' function. */
#undef HAVE_LDEXPL
@@ -570,6 +699,9 @@
/* Define to 1 if you have the `lgammaf' function. */
#undef HAVE_LGAMMAF
+/* Define to 1 if you have the `lgammaf128' function. */
+#undef HAVE_LGAMMAF128
+
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
@@ -582,6 +714,9 @@
/* Define to 1 if you have the `llroundf' function. */
#undef HAVE_LLROUNDF
+/* Define to 1 if you have the `llroundf128' function. */
+#undef HAVE_LLROUNDF128
+
/* Define to 1 if you have the `llroundl' function. */
#undef HAVE_LLROUNDL
@@ -597,12 +732,18 @@
/* Define to 1 if you have the `log10f' function. */
#undef HAVE_LOG10F
+/* Define to 1 if you have the `log10f128' function. */
+#undef HAVE_LOG10F128
+
/* Define to 1 if you have the `log10l' function. */
#undef HAVE_LOG10L
/* Define to 1 if you have the `logf' function. */
#undef HAVE_LOGF
+/* Define to 1 if you have the `logf128' function. */
+#undef HAVE_LOGF128
+
/* Define to 1 if you have the `logl' function. */
#undef HAVE_LOGL
@@ -612,6 +753,9 @@
/* Define to 1 if you have the `lroundf' function. */
#undef HAVE_LROUNDF
+/* Define to 1 if you have the `lroundf128' function. */
+#undef HAVE_LROUNDF128
+
/* Define to 1 if you have the `lroundl' function. */
#undef HAVE_LROUNDL
@@ -642,6 +786,9 @@
/* Define to 1 if you have the `nextafterf' function. */
#undef HAVE_NEXTAFTERF
+/* Define to 1 if you have the `nextafterf128' function. */
+#undef HAVE_NEXTAFTERF128
+
/* Define to 1 if you have the `nextafterl' function. */
#undef HAVE_NEXTAFTERL
@@ -657,6 +804,9 @@
/* Define to 1 if you have the `powf' function. */
#undef HAVE_POWF
+/* Define to 1 if you have the `powf128' function. */
+#undef HAVE_POWF128
+
/* Define to 1 if the system has the type `ptrdiff_t'. */
#undef HAVE_PTRDIFF_T
@@ -672,6 +822,9 @@
/* Define to 1 if you have the `roundf' function. */
#undef HAVE_ROUNDF
+/* Define to 1 if you have the `roundf128' function. */
+#undef HAVE_ROUNDF128
+
/* Define to 1 if you have the `roundl' function. */
#undef HAVE_ROUNDL
@@ -681,6 +834,9 @@
/* Define to 1 if you have the `scalbnf' function. */
#undef HAVE_SCALBNF
+/* Define to 1 if you have the `scalbnf128' function. */
+#undef HAVE_SCALBNF128
+
/* Define to 1 if you have the `scalbnl' function. */
#undef HAVE_SCALBNL
@@ -699,12 +855,18 @@
/* Define to 1 if you have the `sinf' function. */
#undef HAVE_SINF
+/* Define to 1 if you have the `sinf128' function. */
+#undef HAVE_SINF128
+
/* Define to 1 if you have the `sinh' function. */
#undef HAVE_SINH
/* Define to 1 if you have the `sinhf' function. */
#undef HAVE_SINHF
+/* Define to 1 if you have the `sinhf128' function. */
+#undef HAVE_SINHF128
+
/* Define to 1 if you have the `sinhl' function. */
#undef HAVE_SINHL
@@ -723,6 +885,9 @@
/* Define to 1 if you have the `sqrtf' function. */
#undef HAVE_SQRTF
+/* Define to 1 if you have the `sqrtf128' function. */
+#undef HAVE_SQRTF128
+
/* Define to 1 if you have the `sqrtl' function. */
#undef HAVE_SQRTL
@@ -744,6 +909,9 @@
/* Define if strerror_r takes two arguments and is available in <string.h>. */
#undef HAVE_STRERROR_R_2ARGS
+/* Define to 1 if you have the `strfromf128' function. */
+#undef HAVE_STRFROMF128
+
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
@@ -759,6 +927,9 @@
/* Define to 1 if you have the `strtof' function. */
#undef HAVE_STRTOF
+/* Define to 1 if you have the `strtof128' function. */
+#undef HAVE_STRTOF128
+
/* Define to 1 if you have the `strtold' function. */
#undef HAVE_STRTOLD
@@ -804,12 +975,18 @@
/* Define to 1 if you have the `tanf' function. */
#undef HAVE_TANF
+/* Define to 1 if you have the `tanf128' function. */
+#undef HAVE_TANF128
+
/* Define to 1 if you have the `tanh' function. */
#undef HAVE_TANH
/* Define to 1 if you have the `tanhf' function. */
#undef HAVE_TANHF
+/* Define to 1 if you have the `tanhf128' function. */
+#undef HAVE_TANHF128
+
/* Define to 1 if you have the `tanhl' function. */
#undef HAVE_TANHL
@@ -822,6 +999,9 @@
/* Define to 1 if you have the `tgammaf' function. */
#undef HAVE_TGAMMAF
+/* Define to 1 if you have the `tgammaf128' function. */
+#undef HAVE_TGAMMAF128
+
/* Define to 1 if you have the `times' function. */
#undef HAVE_TIMES
@@ -831,6 +1011,9 @@
/* Define to 1 if you have the `truncf' function. */
#undef HAVE_TRUNCF
+/* Define to 1 if you have the `truncf128' function. */
+#undef HAVE_TRUNCF128
+
/* Define to 1 if you have the `truncl' function. */
#undef HAVE_TRUNCL
@@ -876,18 +1059,27 @@
/* Define to 1 if you have the `y0f' function. */
#undef HAVE_Y0F
+/* Define to 1 if you have the `y0f128' function. */
+#undef HAVE_Y0F128
+
/* Define to 1 if you have the `y1' function. */
#undef HAVE_Y1
/* Define to 1 if you have the `y1f' function. */
#undef HAVE_Y1F
+/* Define to 1 if you have the `y1f128' function. */
+#undef HAVE_Y1F128
+
/* Define to 1 if you have the `yn' function. */
#undef HAVE_YN
/* Define to 1 if you have the `ynf' function. */
#undef HAVE_YNF
+/* Define to 1 if you have the `ynf128' function. */
+#undef HAVE_YNF128
+
/* Define to 1 if you have the `ynl' function. */
#undef HAVE_YNL
@@ -1006,6 +1198,9 @@
/* Define to 1 if the target supports weakref */
#undef SUPPORTS_WEAKREF
+/* Define if IEC 60559 *f128 APIs should be used for _Float128. */
+#undef USE_IEC_60559
+
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
diff --git a/libgfortran/configure b/libgfortran/configure
index ae64dca..581f1dc 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -645,8 +645,7 @@ IEEE_SUPPORT
IEEE_SUPPORT_FALSE
IEEE_SUPPORT_TRUE
FPU_HOST_HEADER
-LIBGFOR_BUILD_QUAD_FALSE
-LIBGFOR_BUILD_QUAD_TRUE
+USE_IEC_60559
LIBQUADINCLUDE
LIBQUADLIB_DEP
LIBQUADLIB
@@ -2673,6 +2672,8 @@ as_fn_append ac_func_list " newlocale"
as_fn_append ac_func_list " freelocale"
as_fn_append ac_func_list " uselocale"
as_fn_append ac_func_list " strerror_l"
+as_fn_append ac_func_list " strtof128"
+as_fn_append ac_func_list " strfromf128"
as_fn_append ac_header_list " math.h"
# Check that the precious variables saved in the cache have kept the same
# value.
@@ -12766,7 +12767,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12769 "configure"
+#line 12770 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12872,7 +12873,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12875 "configure"
+#line 12876 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17184,6 +17185,10 @@ done
+
+
+
+
fi
# Check strerror_r, cannot be above as versions with two and three arguments exist
@@ -25857,8 +25862,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __acoshieee128 (__float128);
-__float128 (*ptr)(__float128) = __acoshieee128;
+_Float128 __acoshieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __acoshieee128;
int
main ()
@@ -25899,8 +25904,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __acosieee128 (__float128);
-__float128 (*ptr)(__float128) = __acosieee128;
+_Float128 __acosieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __acosieee128;
int
main ()
@@ -25941,8 +25946,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __asinhieee128 (__float128);
-__float128 (*ptr)(__float128) = __asinhieee128;
+_Float128 __asinhieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __asinhieee128;
int
main ()
@@ -25983,8 +25988,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __asinieee128 (__float128);
-__float128 (*ptr)(__float128) = __asinieee128;
+_Float128 __asinieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __asinieee128;
int
main ()
@@ -26025,8 +26030,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __atan2ieee128 (__float128);
-__float128 (*ptr)(__float128) = __atan2ieee128;
+_Float128 __atan2ieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __atan2ieee128;
int
main ()
@@ -26067,8 +26072,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __atanhieee128 (__float128);
-__float128 (*ptr)(__float128) = __atanhieee128;
+_Float128 __atanhieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __atanhieee128;
int
main ()
@@ -26109,8 +26114,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __atanieee128 (__float128);
-__float128 (*ptr)(__float128) = __atanieee128;
+_Float128 __atanieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __atanieee128;
int
main ()
@@ -26151,8 +26156,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __coshieee128 (__float128);
-__float128 (*ptr)(__float128) = __coshieee128;
+_Float128 __coshieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __coshieee128;
int
main ()
@@ -26193,8 +26198,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __cosieee128 (__float128);
-__float128 (*ptr)(__float128) = __cosieee128;
+_Float128 __cosieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __cosieee128;
int
main ()
@@ -26235,8 +26240,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __erfieee128 (__float128);
-__float128 (*ptr)(__float128) = __erfieee128;
+_Float128 __erfieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __erfieee128;
int
main ()
@@ -26277,8 +26282,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __expieee128 (__float128);
-__float128 (*ptr)(__float128) = __expieee128;
+_Float128 __expieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __expieee128;
int
main ()
@@ -26319,8 +26324,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __fabsieee128 (__float128);
-__float128 (*ptr)(__float128) = __fabsieee128;
+_Float128 __fabsieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __fabsieee128;
int
main ()
@@ -26361,8 +26366,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __jnieee128 (__float128);
-__float128 (*ptr)(__float128) = __jnieee128;
+_Float128 __jnieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __jnieee128;
int
main ()
@@ -26403,8 +26408,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __log10ieee128 (__float128);
-__float128 (*ptr)(__float128) = __log10ieee128;
+_Float128 __log10ieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __log10ieee128;
int
main ()
@@ -26445,8 +26450,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __logieee128 (__float128);
-__float128 (*ptr)(__float128) = __logieee128;
+_Float128 __logieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __logieee128;
int
main ()
@@ -26487,8 +26492,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __powieee128 (__float128);
-__float128 (*ptr)(__float128) = __powieee128;
+_Float128 __powieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __powieee128;
int
main ()
@@ -26529,8 +26534,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __sinhieee128 (__float128);
-__float128 (*ptr)(__float128) = __sinhieee128;
+_Float128 __sinhieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __sinhieee128;
int
main ()
@@ -26571,8 +26576,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __sinieee128 (__float128);
-__float128 (*ptr)(__float128) = __sinieee128;
+_Float128 __sinieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __sinieee128;
int
main ()
@@ -26613,8 +26618,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __sqrtieee128 (__float128);
-__float128 (*ptr)(__float128) = __sqrtieee128;
+_Float128 __sqrtieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __sqrtieee128;
int
main ()
@@ -26655,8 +26660,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __tanhieee128 (__float128);
-__float128 (*ptr)(__float128) = __tanhieee128;
+_Float128 __tanhieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __tanhieee128;
int
main ()
@@ -26697,8 +26702,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __tanieee128 (__float128);
-__float128 (*ptr)(__float128) = __tanieee128;
+_Float128 __tanieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __tanieee128;
int
main ()
@@ -26739,8 +26744,8 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-__float128 __ynieee128 (__float128);
-__float128 (*ptr)(__float128) = __ynieee128;
+_Float128 __ynieee128 (_Float128);
+_Float128 (*ptr)(_Float128) = __ynieee128;
int
main ()
@@ -26997,6 +27002,2984 @@ _ACEOF
fi
fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acosf128" >&5
+$as_echo_n "checking for acosf128... " >&6; }
+if ${gcc_cv_math_func_acosf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())acosf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_acosf128=yes
+else
+ gcc_cv_math_func_acosf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_acosf128" >&5
+$as_echo "$gcc_cv_math_func_acosf128" >&6; }
+ if test $gcc_cv_math_func_acosf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ACOSF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acoshf128" >&5
+$as_echo_n "checking for acoshf128... " >&6; }
+if ${gcc_cv_math_func_acoshf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())acoshf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_acoshf128=yes
+else
+ gcc_cv_math_func_acoshf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_acoshf128" >&5
+$as_echo "$gcc_cv_math_func_acoshf128" >&6; }
+ if test $gcc_cv_math_func_acoshf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ACOSHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for asinf128" >&5
+$as_echo_n "checking for asinf128... " >&6; }
+if ${gcc_cv_math_func_asinf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())asinf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_asinf128=yes
+else
+ gcc_cv_math_func_asinf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_asinf128" >&5
+$as_echo "$gcc_cv_math_func_asinf128" >&6; }
+ if test $gcc_cv_math_func_asinf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ASINF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for asinhf128" >&5
+$as_echo_n "checking for asinhf128... " >&6; }
+if ${gcc_cv_math_func_asinhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())asinhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_asinhf128=yes
+else
+ gcc_cv_math_func_asinhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_asinhf128" >&5
+$as_echo "$gcc_cv_math_func_asinhf128" >&6; }
+ if test $gcc_cv_math_func_asinhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ASINHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atan2f128" >&5
+$as_echo_n "checking for atan2f128... " >&6; }
+if ${gcc_cv_math_func_atan2f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())atan2f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_atan2f128=yes
+else
+ gcc_cv_math_func_atan2f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_atan2f128" >&5
+$as_echo "$gcc_cv_math_func_atan2f128" >&6; }
+ if test $gcc_cv_math_func_atan2f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ATAN2F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atanf128" >&5
+$as_echo_n "checking for atanf128... " >&6; }
+if ${gcc_cv_math_func_atanf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())atanf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_atanf128=yes
+else
+ gcc_cv_math_func_atanf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_atanf128" >&5
+$as_echo "$gcc_cv_math_func_atanf128" >&6; }
+ if test $gcc_cv_math_func_atanf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ATANF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atanhf128" >&5
+$as_echo_n "checking for atanhf128... " >&6; }
+if ${gcc_cv_math_func_atanhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())atanhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_atanhf128=yes
+else
+ gcc_cv_math_func_atanhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_atanhf128" >&5
+$as_echo "$gcc_cv_math_func_atanhf128" >&6; }
+ if test $gcc_cv_math_func_atanhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ATANHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cargf128" >&5
+$as_echo_n "checking for cargf128... " >&6; }
+if ${gcc_cv_math_func_cargf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cargf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cargf128=yes
+else
+ gcc_cv_math_func_cargf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cargf128" >&5
+$as_echo "$gcc_cv_math_func_cargf128" >&6; }
+ if test $gcc_cv_math_func_cargf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CARGF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ceilf128" >&5
+$as_echo_n "checking for ceilf128... " >&6; }
+if ${gcc_cv_math_func_ceilf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ceilf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ceilf128=yes
+else
+ gcc_cv_math_func_ceilf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ceilf128" >&5
+$as_echo "$gcc_cv_math_func_ceilf128" >&6; }
+ if test $gcc_cv_math_func_ceilf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CEILF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for copysignf128" >&5
+$as_echo_n "checking for copysignf128... " >&6; }
+if ${gcc_cv_math_func_copysignf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())copysignf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_copysignf128=yes
+else
+ gcc_cv_math_func_copysignf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_copysignf128" >&5
+$as_echo "$gcc_cv_math_func_copysignf128" >&6; }
+ if test $gcc_cv_math_func_copysignf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_COPYSIGNF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cosf128" >&5
+$as_echo_n "checking for cosf128... " >&6; }
+if ${gcc_cv_math_func_cosf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cosf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cosf128=yes
+else
+ gcc_cv_math_func_cosf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cosf128" >&5
+$as_echo "$gcc_cv_math_func_cosf128" >&6; }
+ if test $gcc_cv_math_func_cosf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_COSF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccosf128" >&5
+$as_echo_n "checking for ccosf128... " >&6; }
+if ${gcc_cv_math_func_ccosf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ccosf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ccosf128=yes
+else
+ gcc_cv_math_func_ccosf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ccosf128" >&5
+$as_echo "$gcc_cv_math_func_ccosf128" >&6; }
+ if test $gcc_cv_math_func_ccosf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CCOSF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for coshf128" >&5
+$as_echo_n "checking for coshf128... " >&6; }
+if ${gcc_cv_math_func_coshf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())coshf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_coshf128=yes
+else
+ gcc_cv_math_func_coshf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_coshf128" >&5
+$as_echo "$gcc_cv_math_func_coshf128" >&6; }
+ if test $gcc_cv_math_func_coshf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_COSHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccoshf128" >&5
+$as_echo_n "checking for ccoshf128... " >&6; }
+if ${gcc_cv_math_func_ccoshf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ccoshf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ccoshf128=yes
+else
+ gcc_cv_math_func_ccoshf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ccoshf128" >&5
+$as_echo "$gcc_cv_math_func_ccoshf128" >&6; }
+ if test $gcc_cv_math_func_ccoshf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CCOSHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for expf128" >&5
+$as_echo_n "checking for expf128... " >&6; }
+if ${gcc_cv_math_func_expf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())expf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_expf128=yes
+else
+ gcc_cv_math_func_expf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_expf128" >&5
+$as_echo "$gcc_cv_math_func_expf128" >&6; }
+ if test $gcc_cv_math_func_expf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_EXPF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cexpf128" >&5
+$as_echo_n "checking for cexpf128... " >&6; }
+if ${gcc_cv_math_func_cexpf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cexpf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cexpf128=yes
+else
+ gcc_cv_math_func_cexpf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cexpf128" >&5
+$as_echo "$gcc_cv_math_func_cexpf128" >&6; }
+ if test $gcc_cv_math_func_cexpf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CEXPF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fabsf128" >&5
+$as_echo_n "checking for fabsf128... " >&6; }
+if ${gcc_cv_math_func_fabsf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())fabsf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_fabsf128=yes
+else
+ gcc_cv_math_func_fabsf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_fabsf128" >&5
+$as_echo "$gcc_cv_math_func_fabsf128" >&6; }
+ if test $gcc_cv_math_func_fabsf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FABSF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cabsf128" >&5
+$as_echo_n "checking for cabsf128... " >&6; }
+if ${gcc_cv_math_func_cabsf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cabsf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cabsf128=yes
+else
+ gcc_cv_math_func_cabsf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cabsf128" >&5
+$as_echo "$gcc_cv_math_func_cabsf128" >&6; }
+ if test $gcc_cv_math_func_cabsf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CABSF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for floorf128" >&5
+$as_echo_n "checking for floorf128... " >&6; }
+if ${gcc_cv_math_func_floorf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())floorf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_floorf128=yes
+else
+ gcc_cv_math_func_floorf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_floorf128" >&5
+$as_echo "$gcc_cv_math_func_floorf128" >&6; }
+ if test $gcc_cv_math_func_floorf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FLOORF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmaf128" >&5
+$as_echo_n "checking for fmaf128... " >&6; }
+if ${gcc_cv_math_func_fmaf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())fmaf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_fmaf128=yes
+else
+ gcc_cv_math_func_fmaf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_fmaf128" >&5
+$as_echo "$gcc_cv_math_func_fmaf128" >&6; }
+ if test $gcc_cv_math_func_fmaf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FMAF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmodf128" >&5
+$as_echo_n "checking for fmodf128... " >&6; }
+if ${gcc_cv_math_func_fmodf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())fmodf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_fmodf128=yes
+else
+ gcc_cv_math_func_fmodf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_fmodf128" >&5
+$as_echo "$gcc_cv_math_func_fmodf128" >&6; }
+ if test $gcc_cv_math_func_fmodf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FMODF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for frexpf128" >&5
+$as_echo_n "checking for frexpf128... " >&6; }
+if ${gcc_cv_math_func_frexpf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())frexpf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_frexpf128=yes
+else
+ gcc_cv_math_func_frexpf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_frexpf128" >&5
+$as_echo "$gcc_cv_math_func_frexpf128" >&6; }
+ if test $gcc_cv_math_func_frexpf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_FREXPF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hypotf128" >&5
+$as_echo_n "checking for hypotf128... " >&6; }
+if ${gcc_cv_math_func_hypotf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())hypotf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_hypotf128=yes
+else
+ gcc_cv_math_func_hypotf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_hypotf128" >&5
+$as_echo "$gcc_cv_math_func_hypotf128" >&6; }
+ if test $gcc_cv_math_func_hypotf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_HYPOTF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldexpf128" >&5
+$as_echo_n "checking for ldexpf128... " >&6; }
+if ${gcc_cv_math_func_ldexpf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ldexpf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ldexpf128=yes
+else
+ gcc_cv_math_func_ldexpf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ldexpf128" >&5
+$as_echo "$gcc_cv_math_func_ldexpf128" >&6; }
+ if test $gcc_cv_math_func_ldexpf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LDEXPF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for logf128" >&5
+$as_echo_n "checking for logf128... " >&6; }
+if ${gcc_cv_math_func_logf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())logf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_logf128=yes
+else
+ gcc_cv_math_func_logf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_logf128" >&5
+$as_echo "$gcc_cv_math_func_logf128" >&6; }
+ if test $gcc_cv_math_func_logf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LOGF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clogf128" >&5
+$as_echo_n "checking for clogf128... " >&6; }
+if ${gcc_cv_math_func_clogf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())clogf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_clogf128=yes
+else
+ gcc_cv_math_func_clogf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_clogf128" >&5
+$as_echo "$gcc_cv_math_func_clogf128" >&6; }
+ if test $gcc_cv_math_func_clogf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOGF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for log10f128" >&5
+$as_echo_n "checking for log10f128... " >&6; }
+if ${gcc_cv_math_func_log10f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())log10f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_log10f128=yes
+else
+ gcc_cv_math_func_log10f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_log10f128" >&5
+$as_echo "$gcc_cv_math_func_log10f128" >&6; }
+ if test $gcc_cv_math_func_log10f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LOG10F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clog10f128" >&5
+$as_echo_n "checking for clog10f128... " >&6; }
+if ${gcc_cv_math_func_clog10f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())clog10f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_clog10f128=yes
+else
+ gcc_cv_math_func_clog10f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_clog10f128" >&5
+$as_echo "$gcc_cv_math_func_clog10f128" >&6; }
+ if test $gcc_cv_math_func_clog10f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOG10F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nextafterf128" >&5
+$as_echo_n "checking for nextafterf128... " >&6; }
+if ${gcc_cv_math_func_nextafterf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())nextafterf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_nextafterf128=yes
+else
+ gcc_cv_math_func_nextafterf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_nextafterf128" >&5
+$as_echo "$gcc_cv_math_func_nextafterf128" >&6; }
+ if test $gcc_cv_math_func_nextafterf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_NEXTAFTERF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for powf128" >&5
+$as_echo_n "checking for powf128... " >&6; }
+if ${gcc_cv_math_func_powf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())powf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_powf128=yes
+else
+ gcc_cv_math_func_powf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_powf128" >&5
+$as_echo "$gcc_cv_math_func_powf128" >&6; }
+ if test $gcc_cv_math_func_powf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_POWF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cpowf128" >&5
+$as_echo_n "checking for cpowf128... " >&6; }
+if ${gcc_cv_math_func_cpowf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cpowf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cpowf128=yes
+else
+ gcc_cv_math_func_cpowf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cpowf128" >&5
+$as_echo "$gcc_cv_math_func_cpowf128" >&6; }
+ if test $gcc_cv_math_func_cpowf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CPOWF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for roundf128" >&5
+$as_echo_n "checking for roundf128... " >&6; }
+if ${gcc_cv_math_func_roundf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())roundf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_roundf128=yes
+else
+ gcc_cv_math_func_roundf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_roundf128" >&5
+$as_echo "$gcc_cv_math_func_roundf128" >&6; }
+ if test $gcc_cv_math_func_roundf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ROUNDF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lroundf128" >&5
+$as_echo_n "checking for lroundf128... " >&6; }
+if ${gcc_cv_math_func_lroundf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())lroundf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_lroundf128=yes
+else
+ gcc_cv_math_func_lroundf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_lroundf128" >&5
+$as_echo "$gcc_cv_math_func_lroundf128" >&6; }
+ if test $gcc_cv_math_func_lroundf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LROUNDF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for llroundf128" >&5
+$as_echo_n "checking for llroundf128... " >&6; }
+if ${gcc_cv_math_func_llroundf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())llroundf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_llroundf128=yes
+else
+ gcc_cv_math_func_llroundf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_llroundf128" >&5
+$as_echo "$gcc_cv_math_func_llroundf128" >&6; }
+ if test $gcc_cv_math_func_llroundf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LLROUNDF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for scalbnf128" >&5
+$as_echo_n "checking for scalbnf128... " >&6; }
+if ${gcc_cv_math_func_scalbnf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())scalbnf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_scalbnf128=yes
+else
+ gcc_cv_math_func_scalbnf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_scalbnf128" >&5
+$as_echo "$gcc_cv_math_func_scalbnf128" >&6; }
+ if test $gcc_cv_math_func_scalbnf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SCALBNF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sinf128" >&5
+$as_echo_n "checking for sinf128... " >&6; }
+if ${gcc_cv_math_func_sinf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())sinf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_sinf128=yes
+else
+ gcc_cv_math_func_sinf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_sinf128" >&5
+$as_echo "$gcc_cv_math_func_sinf128" >&6; }
+ if test $gcc_cv_math_func_sinf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SINF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for csinf128" >&5
+$as_echo_n "checking for csinf128... " >&6; }
+if ${gcc_cv_math_func_csinf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())csinf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_csinf128=yes
+else
+ gcc_cv_math_func_csinf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_csinf128" >&5
+$as_echo "$gcc_cv_math_func_csinf128" >&6; }
+ if test $gcc_cv_math_func_csinf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CSINF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sinhf128" >&5
+$as_echo_n "checking for sinhf128... " >&6; }
+if ${gcc_cv_math_func_sinhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())sinhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_sinhf128=yes
+else
+ gcc_cv_math_func_sinhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_sinhf128" >&5
+$as_echo "$gcc_cv_math_func_sinhf128" >&6; }
+ if test $gcc_cv_math_func_sinhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SINHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for csinhf128" >&5
+$as_echo_n "checking for csinhf128... " >&6; }
+if ${gcc_cv_math_func_csinhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())csinhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_csinhf128=yes
+else
+ gcc_cv_math_func_csinhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_csinhf128" >&5
+$as_echo "$gcc_cv_math_func_csinhf128" >&6; }
+ if test $gcc_cv_math_func_csinhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CSINHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrtf128" >&5
+$as_echo_n "checking for sqrtf128... " >&6; }
+if ${gcc_cv_math_func_sqrtf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())sqrtf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_sqrtf128=yes
+else
+ gcc_cv_math_func_sqrtf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_sqrtf128" >&5
+$as_echo "$gcc_cv_math_func_sqrtf128" >&6; }
+ if test $gcc_cv_math_func_sqrtf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SQRTF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for csqrtf128" >&5
+$as_echo_n "checking for csqrtf128... " >&6; }
+if ${gcc_cv_math_func_csqrtf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())csqrtf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_csqrtf128=yes
+else
+ gcc_cv_math_func_csqrtf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_csqrtf128" >&5
+$as_echo "$gcc_cv_math_func_csqrtf128" >&6; }
+ if test $gcc_cv_math_func_csqrtf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CSQRTF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tanf128" >&5
+$as_echo_n "checking for tanf128... " >&6; }
+if ${gcc_cv_math_func_tanf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())tanf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_tanf128=yes
+else
+ gcc_cv_math_func_tanf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_tanf128" >&5
+$as_echo "$gcc_cv_math_func_tanf128" >&6; }
+ if test $gcc_cv_math_func_tanf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_TANF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ctanf128" >&5
+$as_echo_n "checking for ctanf128... " >&6; }
+if ${gcc_cv_math_func_ctanf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ctanf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ctanf128=yes
+else
+ gcc_cv_math_func_ctanf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ctanf128" >&5
+$as_echo "$gcc_cv_math_func_ctanf128" >&6; }
+ if test $gcc_cv_math_func_ctanf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CTANF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tanhf128" >&5
+$as_echo_n "checking for tanhf128... " >&6; }
+if ${gcc_cv_math_func_tanhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())tanhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_tanhf128=yes
+else
+ gcc_cv_math_func_tanhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_tanhf128" >&5
+$as_echo "$gcc_cv_math_func_tanhf128" >&6; }
+ if test $gcc_cv_math_func_tanhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_TANHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ctanhf128" >&5
+$as_echo_n "checking for ctanhf128... " >&6; }
+if ${gcc_cv_math_func_ctanhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ctanhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ctanhf128=yes
+else
+ gcc_cv_math_func_ctanhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ctanhf128" >&5
+$as_echo "$gcc_cv_math_func_ctanhf128" >&6; }
+ if test $gcc_cv_math_func_ctanhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CTANHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for truncf128" >&5
+$as_echo_n "checking for truncf128... " >&6; }
+if ${gcc_cv_math_func_truncf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())truncf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_truncf128=yes
+else
+ gcc_cv_math_func_truncf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_truncf128" >&5
+$as_echo "$gcc_cv_math_func_truncf128" >&6; }
+ if test $gcc_cv_math_func_truncf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_TRUNCF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for erff128" >&5
+$as_echo_n "checking for erff128... " >&6; }
+if ${gcc_cv_math_func_erff128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())erff128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_erff128=yes
+else
+ gcc_cv_math_func_erff128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_erff128" >&5
+$as_echo "$gcc_cv_math_func_erff128" >&6; }
+ if test $gcc_cv_math_func_erff128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ERFF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for erfcf128" >&5
+$as_echo_n "checking for erfcf128... " >&6; }
+if ${gcc_cv_math_func_erfcf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())erfcf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_erfcf128=yes
+else
+ gcc_cv_math_func_erfcf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_erfcf128" >&5
+$as_echo "$gcc_cv_math_func_erfcf128" >&6; }
+ if test $gcc_cv_math_func_erfcf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ERFCF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for j0f128" >&5
+$as_echo_n "checking for j0f128... " >&6; }
+if ${gcc_cv_math_func_j0f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())j0f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_j0f128=yes
+else
+ gcc_cv_math_func_j0f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_j0f128" >&5
+$as_echo "$gcc_cv_math_func_j0f128" >&6; }
+ if test $gcc_cv_math_func_j0f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_J0F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for j1f128" >&5
+$as_echo_n "checking for j1f128... " >&6; }
+if ${gcc_cv_math_func_j1f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())j1f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_j1f128=yes
+else
+ gcc_cv_math_func_j1f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_j1f128" >&5
+$as_echo "$gcc_cv_math_func_j1f128" >&6; }
+ if test $gcc_cv_math_func_j1f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_J1F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jnf128" >&5
+$as_echo_n "checking for jnf128... " >&6; }
+if ${gcc_cv_math_func_jnf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())jnf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_jnf128=yes
+else
+ gcc_cv_math_func_jnf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_jnf128" >&5
+$as_echo "$gcc_cv_math_func_jnf128" >&6; }
+ if test $gcc_cv_math_func_jnf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_JNF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for y0f128" >&5
+$as_echo_n "checking for y0f128... " >&6; }
+if ${gcc_cv_math_func_y0f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())y0f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_y0f128=yes
+else
+ gcc_cv_math_func_y0f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_y0f128" >&5
+$as_echo "$gcc_cv_math_func_y0f128" >&6; }
+ if test $gcc_cv_math_func_y0f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_Y0F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for y1f128" >&5
+$as_echo_n "checking for y1f128... " >&6; }
+if ${gcc_cv_math_func_y1f128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())y1f128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_y1f128=yes
+else
+ gcc_cv_math_func_y1f128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_y1f128" >&5
+$as_echo "$gcc_cv_math_func_y1f128" >&6; }
+ if test $gcc_cv_math_func_y1f128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_Y1F128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ynf128" >&5
+$as_echo_n "checking for ynf128... " >&6; }
+if ${gcc_cv_math_func_ynf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())ynf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_ynf128=yes
+else
+ gcc_cv_math_func_ynf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_ynf128" >&5
+$as_echo "$gcc_cv_math_func_ynf128" >&6; }
+ if test $gcc_cv_math_func_ynf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_YNF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgammaf128" >&5
+$as_echo_n "checking for tgammaf128... " >&6; }
+if ${gcc_cv_math_func_tgammaf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())tgammaf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_tgammaf128=yes
+else
+ gcc_cv_math_func_tgammaf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_tgammaf128" >&5
+$as_echo "$gcc_cv_math_func_tgammaf128" >&6; }
+ if test $gcc_cv_math_func_tgammaf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_TGAMMAF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lgammaf128" >&5
+$as_echo_n "checking for lgammaf128... " >&6; }
+if ${gcc_cv_math_func_lgammaf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())lgammaf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_lgammaf128=yes
+else
+ gcc_cv_math_func_lgammaf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_lgammaf128" >&5
+$as_echo "$gcc_cv_math_func_lgammaf128" >&6; }
+ if test $gcc_cv_math_func_lgammaf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LGAMMAF128 1
+_ACEOF
+
+ fi
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cacosf128" >&5
+$as_echo_n "checking for cacosf128... " >&6; }
+if ${gcc_cv_math_func_cacosf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cacosf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cacosf128=yes
+else
+ gcc_cv_math_func_cacosf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cacosf128" >&5
+$as_echo "$gcc_cv_math_func_cacosf128" >&6; }
+ if test $gcc_cv_math_func_cacosf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CACOSF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cacoshf128" >&5
+$as_echo_n "checking for cacoshf128... " >&6; }
+if ${gcc_cv_math_func_cacoshf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())cacoshf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_cacoshf128=yes
+else
+ gcc_cv_math_func_cacoshf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_cacoshf128" >&5
+$as_echo "$gcc_cv_math_func_cacoshf128" >&6; }
+ if test $gcc_cv_math_func_cacoshf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CACOSHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for casinf128" >&5
+$as_echo_n "checking for casinf128... " >&6; }
+if ${gcc_cv_math_func_casinf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())casinf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_casinf128=yes
+else
+ gcc_cv_math_func_casinf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_casinf128" >&5
+$as_echo "$gcc_cv_math_func_casinf128" >&6; }
+ if test $gcc_cv_math_func_casinf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CASINF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for casinhf128" >&5
+$as_echo_n "checking for casinhf128... " >&6; }
+if ${gcc_cv_math_func_casinhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())casinhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_casinhf128=yes
+else
+ gcc_cv_math_func_casinhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_casinhf128" >&5
+$as_echo "$gcc_cv_math_func_casinhf128" >&6; }
+ if test $gcc_cv_math_func_casinhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CASINHF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catanf128" >&5
+$as_echo_n "checking for catanf128... " >&6; }
+if ${gcc_cv_math_func_catanf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())catanf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_catanf128=yes
+else
+ gcc_cv_math_func_catanf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_catanf128" >&5
+$as_echo "$gcc_cv_math_func_catanf128" >&6; }
+ if test $gcc_cv_math_func_catanf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CATANF128 1
+_ACEOF
+
+ fi
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catanhf128" >&5
+$as_echo_n "checking for catanhf128... " >&6; }
+if ${gcc_cv_math_func_catanhf128+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_COMPLEX_H
+#include <complex.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+
+int (*ptr)() = (int (*)())catanhf128;
+
+int
+main ()
+{
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gcc_cv_math_func_catanhf128=yes
+else
+ gcc_cv_math_func_catanhf128=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_math_func_catanhf128" >&5
+$as_echo "$gcc_cv_math_func_catanhf128" >&6; }
+ if test $gcc_cv_math_func_catanhf128 = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CATANHF128 1
+_ACEOF
+
+ fi
+
+
# Check whether the system has a working stat()
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the target stat is reliable" >&5
@@ -27099,27 +30082,44 @@ $as_echo "#define HAVE_MINGW_SNPRINTF 1" >>confdefs.h
fi
+have_iec_60559_libc_support=no
+if test "x$ac_cv_func_strtof128$ac_cv_func_strfromf128" = xyesyes \
+ && test "x$gcc_cv_math_func_sinf128$gcc_cv_math_func_cacosf128" = xyesyes; then
+ have_iec_60559_libc_support=yes
+fi
+
# Check whether libquadmath should be used
# Check whether --enable-libquadmath-support was given.
if test "${enable_libquadmath_support+set}" = set; then :
enableval=$enable_libquadmath_support; ENABLE_LIBQUADMATH_SUPPORT=$enableval
else
+ if test "x$have_iec_60559_libc_support" = xyes; then
+ ENABLE_LIBQUADMATH_SUPPORT=default
+else
ENABLE_LIBQUADMATH_SUPPORT=yes
fi
+fi
enable_libquadmath_support=
if test "${ENABLE_LIBQUADMATH_SUPPORT}" = "no" ; then
enable_libquadmath_support=no
+elif test "${ENABLE_LIBQUADMATH_SUPPORT}" = "default" ; then
+ enable_libquadmath_support=default
fi
-# Check whether we have a __float128 type, depends on enable_libquadmath_support
+# Check whether we have a _Float128 type, depends on enable_libquadmath_support
+# and have_iec_60559_libc_support.
LIBQUADSPEC=
+ LIBQUADLIB=
+ LIBQUADLIB_DEP=
+ LIBQUADINCLUDE=
+ USE_IEC_60559=no
if test "x$enable_libquadmath_support" != xno; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we have a usable __float128 type" >&5
-$as_echo_n "checking whether we have a usable __float128 type... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we have a usable _Float128 type" >&5
+$as_echo_n "checking whether we have a usable _Float128 type... " >&6; }
if ${libgfor_cv_have_float128+:} false; then :
$as_echo_n "(cached) " >&6
else
@@ -27128,31 +30128,37 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- typedef _Complex float __attribute__((mode(TC))) __complex128;
-
- __float128 foo (__float128 x)
+ _Float128 foo (_Float128 x)
{
-
- __complex128 z1, z2;
+ _Complex _Float128 z1, z2;
z1 = x;
- z2 = x / 7.Q;
+ z2 = x / 7.F128;
z2 /= z1;
- return (__float128) z2;
+ return (_Float128) z2;
}
- __float128 bar (__float128 x)
+ _Float128 bar (_Float128 x)
{
- return x * __builtin_huge_valq ();
+ return x * __builtin_huge_valf128 ();
+ }
+
+ __float128 baz (__float128 x)
+ {
+ return x * __builtin_huge_valf128 ();
}
int
main ()
{
+ foo (1.2F128);
+ bar (1.2F128);
+ baz (1.2F128);
foo (1.2Q);
bar (1.2Q);
+ baz (1.2Q);
;
return 0;
@@ -27175,31 +30181,37 @@ fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- typedef _Complex float __attribute__((mode(TC))) __complex128;
-
- __float128 foo (__float128 x)
+ _Float128 foo (_Float128 x)
{
-
- __complex128 z1, z2;
+ _Complex _Float128 z1, z2;
z1 = x;
- z2 = x / 7.Q;
+ z2 = x / 7.F128;
z2 /= z1;
- return (__float128) z2;
+ return (_Float128) z2;
+ }
+
+ _Float128 bar (_Float128 x)
+ {
+ return x * __builtin_huge_valf128 ();
}
- __float128 bar (__float128 x)
+ __float128 baz (__float128 x)
{
- return x * __builtin_huge_valq ();
+ return x * __builtin_huge_valf128 ();
}
int
main ()
{
+ foo (1.2F128);
+ bar (1.2F128);
+ baz (1.2F128);
foo (1.2Q);
bar (1.2Q);
+ baz (1.2Q);
;
return 0;
@@ -27221,7 +30233,17 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_float128" >&5
$as_echo "$libgfor_cv_have_float128" >&6; }
+ if test "x$have_iec_60559_libc_support$enable_libquadmath_support$libgfor_cv_have_float128" = xyesdefaultyes; then
+ USE_IEC_60559=yes
+ fi
+
+
if test "x$libgfor_cv_have_float128" = xyes; then
+ if test "x$USE_IEC_60559" = xyes; then
+
+$as_echo "#define USE_IEC_60559 1" >>confdefs.h
+
+ fi
$as_echo "#define HAVE_FLOAT128 1" >>confdefs.h
@@ -27301,26 +30323,27 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_as_needed" >&5
$as_echo "$libgfor_cv_have_as_needed" >&6; }
- if test "x$libgfor_cv_have_as_needed" = xyes; then
- LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} -lquadmath %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
+ if test "x$libgfor_cv_have_as_needed" = xyes; then
+ if test "x$USE_IEC_60559" = xyes; then
+ LIBQUADSPEC="$libgfor_cv_as_needed_option -lquadmath $libgfor_cv_no_as_needed_option"
+ else
+ LIBQUADSPEC="%{static-libgfortran:$libgfor_cv_as_needed_option} -lquadmath %{static-libgfortran:$libgfor_cv_no_as_needed_option}"
+ fi
else
LIBQUADSPEC="-lquadmath"
fi
- if test -f ../libquadmath/libquadmath.la; then
- LIBQUADLIB=../libquadmath/libquadmath.la
- LIBQUADLIB_DEP=../libquadmath/libquadmath.la
- LIBQUADINCLUDE='-I$(srcdir)/../libquadmath'
- else
- LIBQUADLIB="-lquadmath"
- LIBQUADLIB_DEP=
- LIBQUADINCLUDE=
+ if test "x$USE_IEC_60559" != xyes; then
+ if test -f ../libquadmath/libquadmath.la; then
+ LIBQUADLIB=../libquadmath/libquadmath.la
+ LIBQUADLIB_DEP=../libquadmath/libquadmath.la
+ LIBQUADINCLUDE='-I$(srcdir)/../libquadmath'
+ else
+ LIBQUADLIB="-lquadmath"
+ fi
fi
- fi
else
- # for --disable-quadmath
- LIBQUADLIB=
- LIBQUADLIB_DEP=
- LIBQUADINCLUDE=
+ USE_IEC_60559=no
+ fi
fi
@@ -27328,14 +30351,6 @@ $as_echo "$libgfor_cv_have_as_needed" >&6; }
- if test "x$libgfor_cv_have_float128" = xyes; then
- LIBGFOR_BUILD_QUAD_TRUE=
- LIBGFOR_BUILD_QUAD_FALSE='#'
-else
- LIBGFOR_BUILD_QUAD_TRUE='#'
- LIBGFOR_BUILD_QUAD_FALSE=
-fi
-
# Check for GNU libc feenableexcept
@@ -28519,10 +31534,6 @@ if test -z "${HAVE_HWCAP_TRUE}" && test -z "${HAVE_HWCAP_FALSE}"; then
as_fn_error $? "conditional \"HAVE_HWCAP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${LIBGFOR_BUILD_QUAD_TRUE}" && test -z "${LIBGFOR_BUILD_QUAD_FALSE}"; then
- as_fn_error $? "conditional \"LIBGFOR_BUILD_QUAD\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${IEEE_SUPPORT_TRUE}" && test -z "${IEEE_SUPPORT_FALSE}"; then
as_fn_error $? "conditional \"IEEE_SUPPORT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index 97cc490..07b9a48 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -356,7 +356,7 @@ else
getcwd localtime_r gmtime_r getpwuid_r ttyname_r clock_gettime \
getgid getpid getuid geteuid umask getegid \
secure_getenv __secure_getenv mkostemp strnlen strndup newlocale \
- freelocale uselocale strerror_l)
+ freelocale uselocale strerror_l strtof128 strfromf128)
fi
# Check strerror_r, cannot be above as versions with two and three arguments exist
@@ -582,24 +582,101 @@ GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([copysignl], [long double])
GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([fabs], [double])
GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([fabsl], [long double])
+GCC_CHECK_MATH_FUNC([acosf128])
+GCC_CHECK_MATH_FUNC([acoshf128])
+GCC_CHECK_MATH_FUNC([asinf128])
+GCC_CHECK_MATH_FUNC([asinhf128])
+GCC_CHECK_MATH_FUNC([atan2f128])
+GCC_CHECK_MATH_FUNC([atanf128])
+GCC_CHECK_MATH_FUNC([atanhf128])
+GCC_CHECK_MATH_FUNC([cargf128])
+GCC_CHECK_MATH_FUNC([ceilf128])
+GCC_CHECK_MATH_FUNC([copysignf128])
+GCC_CHECK_MATH_FUNC([cosf128])
+GCC_CHECK_MATH_FUNC([ccosf128])
+GCC_CHECK_MATH_FUNC([coshf128])
+GCC_CHECK_MATH_FUNC([ccoshf128])
+GCC_CHECK_MATH_FUNC([expf128])
+GCC_CHECK_MATH_FUNC([cexpf128])
+GCC_CHECK_MATH_FUNC([fabsf128])
+GCC_CHECK_MATH_FUNC([cabsf128])
+GCC_CHECK_MATH_FUNC([floorf128])
+GCC_CHECK_MATH_FUNC([fmaf128])
+GCC_CHECK_MATH_FUNC([fmodf128])
+GCC_CHECK_MATH_FUNC([frexpf128])
+GCC_CHECK_MATH_FUNC([hypotf128])
+GCC_CHECK_MATH_FUNC([ldexpf128])
+GCC_CHECK_MATH_FUNC([logf128])
+GCC_CHECK_MATH_FUNC([clogf128])
+GCC_CHECK_MATH_FUNC([log10f128])
+GCC_CHECK_MATH_FUNC([clog10f128])
+GCC_CHECK_MATH_FUNC([nextafterf128])
+GCC_CHECK_MATH_FUNC([powf128])
+GCC_CHECK_MATH_FUNC([cpowf128])
+GCC_CHECK_MATH_FUNC([roundf128])
+GCC_CHECK_MATH_FUNC([lroundf128])
+GCC_CHECK_MATH_FUNC([llroundf128])
+GCC_CHECK_MATH_FUNC([scalbnf128])
+GCC_CHECK_MATH_FUNC([sinf128])
+GCC_CHECK_MATH_FUNC([csinf128])
+GCC_CHECK_MATH_FUNC([sinhf128])
+GCC_CHECK_MATH_FUNC([csinhf128])
+GCC_CHECK_MATH_FUNC([sqrtf128])
+GCC_CHECK_MATH_FUNC([csqrtf128])
+GCC_CHECK_MATH_FUNC([tanf128])
+GCC_CHECK_MATH_FUNC([ctanf128])
+GCC_CHECK_MATH_FUNC([tanhf128])
+GCC_CHECK_MATH_FUNC([ctanhf128])
+GCC_CHECK_MATH_FUNC([truncf128])
+GCC_CHECK_MATH_FUNC([erff128])
+GCC_CHECK_MATH_FUNC([erfcf128])
+GCC_CHECK_MATH_FUNC([j0f128])
+GCC_CHECK_MATH_FUNC([j1f128])
+GCC_CHECK_MATH_FUNC([jnf128])
+GCC_CHECK_MATH_FUNC([y0f128])
+GCC_CHECK_MATH_FUNC([y1f128])
+GCC_CHECK_MATH_FUNC([ynf128])
+GCC_CHECK_MATH_FUNC([tgammaf128])
+GCC_CHECK_MATH_FUNC([lgammaf128])
+
+GCC_CHECK_MATH_FUNC([cacosf128])
+GCC_CHECK_MATH_FUNC([cacoshf128])
+GCC_CHECK_MATH_FUNC([casinf128])
+GCC_CHECK_MATH_FUNC([casinhf128])
+GCC_CHECK_MATH_FUNC([catanf128])
+GCC_CHECK_MATH_FUNC([catanhf128])
+
# Check whether the system has a working stat()
LIBGFOR_CHECK_WORKING_STAT
# Check whether __mingw_snprintf() is present
LIBGFOR_CHECK_MINGW_SNPRINTF
+have_iec_60559_libc_support=no
+if test "x$ac_cv_func_strtof128$ac_cv_func_strfromf128" = xyesyes \
+ && test "x$gcc_cv_math_func_sinf128$gcc_cv_math_func_cacosf128" = xyesyes; then
+ have_iec_60559_libc_support=yes
+fi
+
# Check whether libquadmath should be used
AC_ARG_ENABLE(libquadmath-support,
AS_HELP_STRING([--disable-libquadmath-support],
[disable libquadmath support for Fortran]),
ENABLE_LIBQUADMATH_SUPPORT=$enableval,
-ENABLE_LIBQUADMATH_SUPPORT=yes)
+if test "x$have_iec_60559_libc_support" = xyes; then
+ ENABLE_LIBQUADMATH_SUPPORT=default
+else
+ ENABLE_LIBQUADMATH_SUPPORT=yes
+fi)
enable_libquadmath_support=
if test "${ENABLE_LIBQUADMATH_SUPPORT}" = "no" ; then
enable_libquadmath_support=no
+elif test "${ENABLE_LIBQUADMATH_SUPPORT}" = "default" ; then
+ enable_libquadmath_support=default
fi
-# Check whether we have a __float128 type, depends on enable_libquadmath_support
+# Check whether we have a _Float128 type, depends on enable_libquadmath_support
+# and have_iec_60559_libc_support.
LIBGFOR_CHECK_FLOAT128
# Check for GNU libc feenableexcept
diff --git a/libgfortran/generated/bessel_r16.c b/libgfortran/generated/bessel_r16.c
index 60e6645..96f0d9d 100644
--- a/libgfortran/generated/bessel_r16.c
+++ b/libgfortran/generated/bessel_r16.c
@@ -29,7 +29,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#if defined(GFC_REAL_16_IS_FLOAT128)
+#if defined(GFC_REAL_16_USE_IEC_60559)
+#define MATHFUNC(funcname) funcname ## f128
+#else
#define MATHFUNC(funcname) funcname ## q
+#endif
#else
#define MATHFUNC(funcname) funcname ## l
#endif
diff --git a/libgfortran/generated/bessel_r17.c b/libgfortran/generated/bessel_r17.c
index cca2623..1ef4987c 100644
--- a/libgfortran/generated/bessel_r17.c
+++ b/libgfortran/generated/bessel_r17.c
@@ -30,6 +30,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#if defined(POWER_IEEE128)
#define MATHFUNC(funcname) __ ## funcname ## ieee128
+#elif defined(GFC_REAL_17_USE_IEC_60559)
+#define MATHFUNC(funcname) funcname ## f128
#else
#define MATHFUNC(funcname) funcname ## q
#endif
diff --git a/libgfortran/generated/norm2_r16.c b/libgfortran/generated/norm2_r16.c
index f5df8e40..269c612 100644
--- a/libgfortran/generated/norm2_r16.c
+++ b/libgfortran/generated/norm2_r16.c
@@ -30,7 +30,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_REAL_16) && (defined(GFC_REAL_16_IS_FLOAT128) || defined(HAVE_SQRTL)) && (defined(GFC_REAL_16_IS_FLOAT128) || defined(HAVE_FABSL))
#if defined(GFC_REAL_16_IS_FLOAT128)
+#if defined(GFC_REAL_16_USE_IEC_60559)
+#define MATHFUNC(funcname) funcname ## f128
+#else
#define MATHFUNC(funcname) funcname ## q
+#endif
#else
#define MATHFUNC(funcname) funcname ## l
#endif
diff --git a/libgfortran/generated/norm2_r17.c b/libgfortran/generated/norm2_r17.c
index d8a0fb7..75b4ac4 100644
--- a/libgfortran/generated/norm2_r17.c
+++ b/libgfortran/generated/norm2_r17.c
@@ -31,6 +31,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#if defined(POWER_IEEE128)
#define MATHFUNC(funcname) __ ## funcname ## ieee128
+#elif defined(GFC_REAL_17_USE_IEC_60559)
+#define MATHFUNC(funcname) funcname ## f128
#else
#define MATHFUNC(funcname) funcname ## q
#endif
diff --git a/libgfortran/ieee/issignaling_fallback.h b/libgfortran/ieee/issignaling_fallback.h
index 98b0b28..698c3f2 100644
--- a/libgfortran/ieee/issignaling_fallback.h
+++ b/libgfortran/ieee/issignaling_fallback.h
@@ -197,11 +197,11 @@ __issignalingl (long double x)
#if defined(GFC_REAL_16_IS_FLOAT128)
-/* We have a __float128 type. */
+/* We have a _Float128 type. */
typedef union
{
- __float128 value;
+ _Float128 value;
struct
{
#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__
@@ -215,7 +215,7 @@ typedef union
} ieee854_float128_shape_type;
static inline int
-__issignalingf128 (__float128 x)
+__issignalingf128 (_Float128 x)
{
uint64_t hxi, lxi;
ieee854_float128_shape_type u;
@@ -237,7 +237,7 @@ __issignalingf128 (__float128 x)
#if defined(GFC_REAL_16_IS_FLOAT128)
# define issignaling(X) \
_Generic ((X), \
- __float128: __issignalingf128, \
+ _Float128: __issignalingf128, \
float: __issignalingf, \
double: __issignaling, \
long double: __issignalingl)(X)
diff --git a/libgfortran/intrinsics/cshift0.c b/libgfortran/intrinsics/cshift0.c
index 05fee15..2fe4d04 100644
--- a/libgfortran/intrinsics/cshift0.c
+++ b/libgfortran/intrinsics/cshift0.c
@@ -132,7 +132,7 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -162,7 +162,7 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
diff --git a/libgfortran/intrinsics/erfc_scaled.c b/libgfortran/intrinsics/erfc_scaled.c
index 60982fb..df3352a 100644
--- a/libgfortran/intrinsics/erfc_scaled.c
+++ b/libgfortran/intrinsics/erfc_scaled.c
@@ -52,11 +52,19 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#ifdef GFC_REAL_16_IS_FLOAT128
-# define _THRESH -106.566990228185312813205074546585730Q
-# define _M_2_SQRTPI M_2_SQRTPIq
-# define _INF __builtin_infq()
-# define _ERFC(x) erfcq(x)
-# define _EXP(x) expq(x)
+# ifdef GFC_REAL_16_USE_IEC_60559
+# define _THRESH -106.566990228185312813205074546585730F128
+# define _M_2_SQRTPI M_2_SQRTPIf128
+# define _INF __builtin_inff128()
+# define _ERFC(x) erfcf128(x)
+# define _EXP(x) expf128(x)
+# else
+# define _THRESH -106.566990228185312813205074546585730Q
+# define _M_2_SQRTPI M_2_SQRTPIq
+# define _INF __builtin_infq()
+# define _ERFC(x) erfcq(x)
+# define _EXP(x) expq(x)
+# endif
#else
@@ -139,12 +147,15 @@ ERFC_SCALED(16)
/* For quadruple-precision, netlib's implementation is
not accurate enough. We provide another one. */
-# define _THRESH -106.566990228185312813205074546585730Q
-# define _M_2_SQRTPI M_2_SQRTPIq
+# define _THRESH GFC_REAL_17_LITERAL(-106.566990228185312813205074546585730)
+# define _M_2_SQRTPI GFC_REAL_17_LITERAL(M_2_SQRTPI)
# define _INF __builtin_inff128()
# ifdef POWER_IEEE128
# define _ERFC(x) __erfcieee128(x)
# define _EXP(x) __expieee128(x)
+# elif defined(GFC_REAL_17_USE_IEC_60559)
+# define _ERFC(x) erfcf128(x)
+# define _EXP(x) expf128(x)
# else
# define _ERFC(x) erfcq(x)
# define _EXP(x) expq(x)
diff --git a/libgfortran/intrinsics/pack_generic.c b/libgfortran/intrinsics/pack_generic.c
index 2d80c64..5c54fe3 100644
--- a/libgfortran/intrinsics/pack_generic.c
+++ b/libgfortran/intrinsics/pack_generic.c
@@ -307,7 +307,7 @@ pack (gfc_array_char *ret, const gfc_array_char *array,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -339,7 +339,7 @@ pack (gfc_array_char *ret, const gfc_array_char *array,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
diff --git a/libgfortran/intrinsics/spread_generic.c b/libgfortran/intrinsics/spread_generic.c
index e41b525..d659122 100644
--- a/libgfortran/intrinsics/spread_generic.c
+++ b/libgfortran/intrinsics/spread_generic.c
@@ -320,7 +320,7 @@ spread (gfc_array_char *ret, const gfc_array_char *source,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -352,7 +352,7 @@ spread (gfc_array_char *ret, const gfc_array_char *source,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -524,7 +524,7 @@ spread_scalar (gfc_array_char *ret, const char *source,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -556,7 +556,7 @@ spread_scalar (gfc_array_char *ret, const char *source,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
diff --git a/libgfortran/intrinsics/trigd.c b/libgfortran/intrinsics/trigd.c
index 5268916..36f46ac 100644
--- a/libgfortran/intrinsics/trigd.c
+++ b/libgfortran/intrinsics/trigd.c
@@ -261,6 +261,24 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif /* HAVE_FABSL && HAVE_FMODL && HAVE_COPYSIGNL */
+#elif defined(GFC_REAL_16_USE_IEC_60559)
+
+#if defined(HAVE_FABSF128) && defined(HAVE_FMODF128) && defined(HAVE_COPYSIGNF128)
+
+#ifdef HAVE_SINF128
+#define ENABLE_SIND
+#endif
+
+#ifdef HAVE_COSF128
+#define ENABLE_COSD
+#endif
+
+#ifdef HAVE_TANF128
+#define ENABLE_TAND
+#endif
+
+#endif /* HAVE_FABSF128 && HAVE_FMODF128 && HAVE_COPYSIGNF128 */
+
#else
/* libquadmath: HAVE_*Q are never defined. They must be available. */
diff --git a/libgfortran/intrinsics/unpack_generic.c b/libgfortran/intrinsics/unpack_generic.c
index 0366615..a24c284 100644
--- a/libgfortran/intrinsics/unpack_generic.c
+++ b/libgfortran/intrinsics/unpack_generic.c
@@ -265,7 +265,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -297,7 +297,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -486,7 +486,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -518,7 +518,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index 21e7851..8e9d50d 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -186,7 +186,11 @@ convert_real (st_parameter_dt *dtp, void *dest, const char *buffer, int length)
#if defined(HAVE_GFC_REAL_16)
# if defined(GFC_REAL_16_IS_FLOAT128)
case 16:
+# if defined(GFC_REAL_16_USE_IEC_60559)
+ *((GFC_REAL_16*) dest) = strtof128 (buffer, &endptr);
+# else
*((GFC_REAL_16*) dest) = __qmath_(strtoflt128) (buffer, &endptr);
+# endif
break;
# elif defined(HAVE_STRTOLD)
case 16:
@@ -199,6 +203,8 @@ convert_real (st_parameter_dt *dtp, void *dest, const char *buffer, int length)
case 17:
# if defined(POWER_IEEE128)
*((GFC_REAL_17*) dest) = __strtoieee128 (buffer, &endptr);
+# elif defined(GFC_REAL_17_USE_IEC_60559)
+ *((GFC_REAL_17*) dest) = strtof128 (buffer, &endptr);
# else
*((GFC_REAL_17*) dest) = __qmath_(strtoflt128) (buffer, &endptr);
# endif
@@ -272,7 +278,14 @@ convert_infnan (st_parameter_dt *dtp, void *dest, const char *buffer,
#if defined(HAVE_GFC_REAL_16)
# if defined(GFC_REAL_16_IS_FLOAT128)
case 16:
+# if defined(GFC_REAL_16_USE_IEC_60559)
+ if (is_inf)
+ *((GFC_REAL_16*) dest) = plus ? __builtin_inff128 () : -__builtin_inff128 ();
+ else
+ *((GFC_REAL_16*) dest) = plus ? __builtin_nanf128 ("") : -__builtin_nanf128 ("");
+# else
*((GFC_REAL_16*) dest) = __qmath_(strtoflt128) (buffer, NULL);
+# endif
break;
# else
case 16:
diff --git a/libgfortran/io/transfer128.c b/libgfortran/io/transfer128.c
index 7372ad7..8f30730 100644
--- a/libgfortran/io/transfer128.c
+++ b/libgfortran/io/transfer128.c
@@ -65,7 +65,9 @@ export_proto(transfer_complex128_write);
write_float; the pointer assignment with USED attribute make sure
that there is a non-weakref dependence if the quadmath functions
are used. That avoids segfault when libquadmath is statically linked. */
-# if !defined(HAVE_GFC_REAL_17) || !defined(POWER_IEEE128)
+# if (defined(HAVE_GFC_REAL_17) && !defined(POWER_IEEE128) \
+ && !defined(GFC_REAL_17_USE_IEC_60559)) \
+ || (!defined(HAVE_GFC_REAL_17) && !defined(GFC_REAL_16_USE_IEC_60559))
static void __attribute__((used)) *tmp1 = strtoflt128;
static void __attribute__((used)) *tmp2 = quadmath_snprintf;
# endif
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
index 1f4be0d..a4d8493 100644
--- a/libgfortran/io/write_float.def
+++ b/libgfortran/io/write_float.def
@@ -837,18 +837,60 @@ snprintf (buffer, size, "%+-#.*e", (prec), (val))
#define DTOA2L(prec,val) \
snprintf (buffer, size, "%+-#.*Le", (prec), (val))
+#if defined(GFC_REAL_16_USE_IEC_60559) || defined(GFC_REAL_17_USE_IEC_60559)
+/* strfromf128 unfortunately doesn't allow +, - and # modifiers
+ nor .* (only allows .number). For +, work around it by adding
+ leading + manually for !signbit values. For - I don't see why
+ we need it, when we don't specify field minimum width.
+ For #, add . if it is missing. Assume size is at least 2. */
+static int
+gfor_strfromf128 (char *buffer, size_t size, int kind, int prec, _Float128 val)
+{
+ int ret, n = 0;
+ char fmt[sizeof (int) * 3 + 5];
+ snprintf (fmt, sizeof fmt, "%%.%d%c", prec, kind);
+ if (!__builtin_signbit (val))
+ {
+ n = 1;
+ buffer[0] = '+';
+ }
+ ret = strfromf128 (buffer + n, size - n, fmt, val) + n;
+ if ((size_t) ret < size - 1)
+ {
+ size_t s = strcspn (buffer, ".e");
+ if (buffer[s] != '.')
+ {
+ if (buffer[s] == '\0')
+ buffer[s + 1] = '\0';
+ else
+ memmove (buffer + s + 1, buffer + s, ret + 1 - s);
+ buffer[s] = '.';
+ ++ret;
+ }
+ }
+ return ret;
+}
+#endif
#if defined(HAVE_GFC_REAL_17)
# if defined(POWER_IEEE128)
# define DTOA2Q(prec,val) \
__snprintfieee128 (buffer, size, "%+-#.*Le", (prec), (val))
+# elif defined(GFC_REAL_17_USE_IEC_60559)
+# define DTOA2Q(prec,val) \
+gfor_strfromf128 (buffer, size, 'e', (prec), (val))
# else
# define DTOA2Q(prec,val) \
quadmath_snprintf (buffer, size, "%+-#.*Qe", (prec), (val))
# endif
#elif defined(GFC_REAL_16_IS_FLOAT128)
-# define DTOA2Q(prec,val) \
+# if defined(GFC_REAL_16_USE_IEC_60559)
+# define DTOA2Q(prec,val) \
+gfor_strfromf128 (buffer, size, 'e', (prec), (val))
+# else
+# define DTOA2Q(prec,val) \
quadmath_snprintf (buffer, size, "%+-#.*Qe", (prec), (val))
+# endif
#endif
#define FDTOA(suff,prec,val) TOKENPASTE(FDTOA2,suff)(prec,val)
@@ -865,13 +907,21 @@ snprintf (buffer, size, "%+-#.*Lf", (prec), (val))
# if defined(POWER_IEEE128)
# define FDTOA2Q(prec,val) \
__snprintfieee128 (buffer, size, "%+-#.*Lf", (prec), (val))
+# elif defined(GFC_REAL_17_USE_IEC_60559)
+# define FDTOA2Q(prec,val) \
+gfor_strfromf128 (buffer, size, 'f', (prec), (val))
# else
# define FDTOA2Q(prec,val) \
quadmath_snprintf (buffer, size, "%+-#.*Qf", (prec), (val))
# endif
#elif defined(GFC_REAL_16_IS_FLOAT128)
-# define FDTOA2Q(prec,val) \
+# if defined(GFC_REAL_16_USE_IEC_60559)
+# define FDTOA2Q(prec,val) \
+gfor_strfromf128 (buffer, size, 'f', (prec), (val))
+# else
+# define FDTOA2Q(prec,val) \
quadmath_snprintf (buffer, size, "%+-#.*Qf", (prec), (val))
+# endif
#endif
diff --git a/libgfortran/kinds-override.h b/libgfortran/kinds-override.h
index d1456c2..3762ee2 100644
--- a/libgfortran/kinds-override.h
+++ b/libgfortran/kinds-override.h
@@ -26,18 +26,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Ensure that TFmode is available under. */
#if defined(GFC_REAL_16_IS_FLOAT128) && !defined(HAVE_FLOAT128)
-# error "Where has __float128 gone?"
+# error "Where has _Float128 gone?"
#endif
/* Keep these conditions on one line so grep can filter it out. */
#if defined(__powerpc64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG_DOUBLE__ == 16
-typedef __float128 GFC_REAL_17;
-typedef _Complex float __attribute__((mode(KC))) GFC_COMPLEX_17;
+typedef _Float128 GFC_REAL_17;
+typedef _Complex _Float128 GFC_COMPLEX_17;
#define HAVE_GFC_REAL_17
#define HAVE_GFC_COMPLEX_17
+#define GFC_REAL_17_IS_FLOAT128
+#ifdef USE_IEC_60559
+#define GFC_REAL_17_USE_IEC_60559
+#define GFC_REAL_17_HUGE 1.18973149535723176508575932662800702e4932f128
+#define GFC_REAL_17_LITERAL_SUFFIX f128
+#define GFC_REAL_17_LITERAL(X) (X ## f128)
+#else
#define GFC_REAL_17_HUGE 1.18973149535723176508575932662800702e4932q
#define GFC_REAL_17_LITERAL_SUFFIX q
#define GFC_REAL_17_LITERAL(X) (X ## q)
+#endif
#define GFC_REAL_17_DIGITS 113
#define GFC_REAL_17_RADIX 2
#endif
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h
index 4329d4c..0db3a35 100644
--- a/libgfortran/libgfortran.h
+++ b/libgfortran/libgfortran.h
@@ -58,8 +58,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* If we're support quad-precision floating-point type, include the
header to our support library. */
-#ifdef HAVE_FLOAT128
-# include "quadmath_weak.h"
+#if defined(HAVE_FLOAT128) && !defined(USE_IEC_60559)
+# include "quadmath_weak.h"
#endif
#ifdef __MINGW32__
@@ -247,7 +247,7 @@ extern int __mingw_snprintf (char *, size_t, const char *, ...)
Another advantage for GCC's builtins for these type-generic macros
is that it handles floating-point types that the system headers
- may not support (like __float128). */
+ may not support (like _Float128). */
#undef isnan
#define isnan(x) __builtin_isnan(x)
@@ -322,6 +322,8 @@ typedef GFC_UINTEGER_4 gfc_char4_t;
# ifdef HAVE_GFC_REAL_16
# ifdef GFC_REAL_16_IS_LONG_DOUBLE
# define GFC_REAL_16_INFINITY __builtin_infl ()
+# elif defined GFC_REAL_16_USE_IEC_60559
+# define GFC_REAL_16_INFINITY __builtin_inff128 ()
# else
# define GFC_REAL_16_INFINITY __builtin_infq ()
# endif
@@ -343,6 +345,8 @@ typedef GFC_UINTEGER_4 gfc_char4_t;
# ifdef HAVE_GFC_REAL_16
# ifdef GFC_REAL_16_IS_LONG_DOUBLE
# define GFC_REAL_16_QUIET_NAN __builtin_nanl ("")
+# elif defined GFC_REAL_16_USE_IEC_60559
+# define GFC_REAL_16_QUIET_NAN __builtin_nanf128 ("")
# else
# define GFC_REAL_16_QUIET_NAN nanq ("")
# endif
@@ -1956,59 +1960,59 @@ internal_proto(cshift1_16_c17);
/* Prototypes for the POWER __ieee128 functions. */
#ifdef POWER_IEEE128
-extern __float128 __acoshieee128 (__float128)
+extern _Float128 __acoshieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __acosieee128 (__float128)
+extern _Float128 __acosieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __asinhieee128 (__float128)
+extern _Float128 __asinhieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __asinieee128 (__float128)
+extern _Float128 __asinieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __atan2ieee128 (__float128)
+extern _Float128 __atan2ieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __atanhieee128 (__float128)
+extern _Float128 __atanhieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __atanieee128 (__float128)
+extern _Float128 __atanieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __copysignieee128 (__float128, __float128)
+extern _Float128 __copysignieee128 (_Float128, _Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __coshieee128 (__float128)
+extern _Float128 __coshieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __cosieee128 (__float128)
+extern _Float128 __cosieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __erfcieee128 (__float128)
+extern _Float128 __erfcieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __erfieee128 (__float128)
+extern _Float128 __erfieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __expieee128 (__float128)
+extern _Float128 __expieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __fabsieee128 (__float128)
+extern _Float128 __fabsieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __fmaieee128 (__float128, __float128, __float128)
+extern _Float128 __fmaieee128 (_Float128, _Float128, _Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __fmodieee128 (__float128, __float128)
+extern _Float128 __fmodieee128 (_Float128, _Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __jnieee128 (int, __float128)
+extern _Float128 __jnieee128 (int, _Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __log10ieee128 (__float128)
+extern _Float128 __log10ieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __logieee128 (__float128)
+extern _Float128 __logieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __powieee128 (__float128)
+extern _Float128 __powieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __sinhieee128 (__float128)
+extern _Float128 __sinhieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __sinieee128 (__float128)
+extern _Float128 __sinieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __sqrtieee128 (__float128)
+extern _Float128 __sqrtieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __tanhieee128 (__float128)
+extern _Float128 __tanhieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __tanieee128 (__float128)
+extern _Float128 __tanieee128 (_Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __ynieee128 (int , __float128)
+extern _Float128 __ynieee128 (int , _Float128)
__attribute__ ((__nothrow__, __leaf__));
-extern __float128 __strtoieee128 (const char *, char **)
+extern _Float128 __strtoieee128 (const char *, char **)
__attribute__ ((__nothrow__, __leaf__));
extern int __snprintfieee128 (char *, size_t, const char *, ...)
__attribute__ ((__nothrow__));
diff --git a/libgfortran/m4/mtype.m4 b/libgfortran/m4/mtype.m4
index 184ca0a..682a2a2 100644
--- a/libgfortran/m4/mtype.m4
+++ b/libgfortran/m4/mtype.m4
@@ -15,12 +15,18 @@ ifelse(kind,17,`1 /* FIXME: figure this out later. */',dnl
define(mathfunc_macro,`ifelse(kind,17,dnl
`#if defined(POWER_IEEE128)
#define MATHFUNC(funcname) __ ## funcname ## ieee128
+#elif defined(GFC_REAL_17_USE_IEC_60559)
+#define MATHFUNC(funcname) funcname ## f128
#else
#define MATHFUNC(funcname) funcname ## q
#endif',dnl
`ifelse(kind,16,dnl
`#if defined(GFC_REAL_16_IS_FLOAT128)
+#if defined(GFC_REAL_16_USE_IEC_60559)
+#define MATHFUNC(funcname) funcname ## f128
+#else
#define MATHFUNC(funcname) funcname ## q
+#endif
#else
#define MATHFUNC(funcname) funcname ## l
#endif',dnl
diff --git a/libgfortran/mk-kinds-h.sh b/libgfortran/mk-kinds-h.sh
index fb4232e..0e0ec19 100755
--- a/libgfortran/mk-kinds-h.sh
+++ b/libgfortran/mk-kinds-h.sh
@@ -2,8 +2,8 @@
LC_ALL=C
export LC_ALL
-if test "$#" -ne 3; then
- echo "Usage $0 int_kinds real_kinds compile"
+if test "$#" -ne 4; then
+ echo "Usage $0 int_kinds real_kinds compile use_iec_60559"
exit 1
fi
@@ -11,6 +11,7 @@ fi
possible_integer_kinds="$1"
possible_real_kinds="$2"
compile="$3"
+use_iec_60559="$4"
largest=""
smallest=""
@@ -49,7 +50,7 @@ echo ""
# Get the kind value for long double, so we may disambiguate it
-# from __float128.
+# from _Float128.
echo "use iso_c_binding; print *, c_long_double ; end" > tmq$$.f90
long_double_kind=`$compile -S -fdump-parse-tree tmq$$.f90 | grep TRANSFER \
| sed 's/ *TRANSFER *//'`
@@ -66,12 +67,17 @@ for k in $possible_real_kinds; do
8) ctype="double" ; cplxtype="complex double" ; suffix="" ;;
# If we have a REAL(KIND=10), it is always long double
10) ctype="long double" ; cplxtype="complex long double" ; suffix="l" ;;
- # If we have a REAL(KIND=16), it is either long double or __float128
+ # If we have a REAL(KIND=16), it is either long double or _Float128
16) if [ $long_double_kind -ne 16 ]; then
- ctype="__float128"
- cplxtype="_Complex float __attribute__((mode(TC)))"
- suffix="q"
+ ctype="_Float128"
+ cplxtype="_Complex _Float128"
echo "#define GFC_REAL_16_IS_FLOAT128"
+ if [ x$use_iec_60559 = xyes ]; then
+ suffix="f128"
+ echo "#define GFC_REAL_16_USE_IEC_60559"
+ else
+ suffix="q"
+ fi
else
ctype="long double"
cplxtype="complex long double"
diff --git a/libgfortran/runtime/in_pack_generic.c b/libgfortran/runtime/in_pack_generic.c
index cfd75d9..37c07aa 100644
--- a/libgfortran/runtime/in_pack_generic.c
+++ b/libgfortran/runtime/in_pack_generic.c
@@ -82,7 +82,7 @@ internal_pack (gfc_array_char * source)
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -106,7 +106,7 @@ internal_pack (gfc_array_char * source)
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
diff --git a/libgfortran/runtime/in_unpack_generic.c b/libgfortran/runtime/in_unpack_generic.c
index 37fc9eb..1bed7e1 100644
--- a/libgfortran/runtime/in_unpack_generic.c
+++ b/libgfortran/runtime/in_unpack_generic.c
@@ -89,7 +89,7 @@ internal_unpack (gfc_array_char * d, const void * s)
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
@@ -117,7 +117,7 @@ internal_unpack (gfc_array_char * d, const void * s)
/* FIXME: This here is a hack, which will have to be removed when
the array descriptor is reworked. Currently, we don't store the
kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
+ _Float128, we have sizeof(long double) == sizeof(_Float128),
we cannot discriminate here and have to fall back to the generic
handling (which is suboptimal). */
#if !defined(GFC_REAL_16_IS_FLOAT128)
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index a5d4b6a..b03e655 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -568,6 +568,7 @@ s-goroot: Makefile
rm -f goroot.go.tmp
echo "package runtime" > goroot.go.tmp
echo 'var defaultGOROOT = `$(prefix)`' >> goroot.go.tmp
+ echo 'var buildVersion = `'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'`' >> goroot.go.tmp
$(SHELL) $(srcdir)/mvifdiff.sh goroot.go.tmp goroot.go
$(STAMP) $@
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 22f48a5..16ed62a 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -2780,6 +2780,7 @@ s-goroot: Makefile
rm -f goroot.go.tmp
echo "package runtime" > goroot.go.tmp
echo 'var defaultGOROOT = `$(prefix)`' >> goroot.go.tmp
+ echo 'var buildVersion = `'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'`' >> goroot.go.tmp
$(SHELL) $(srcdir)/mvifdiff.sh goroot.go.tmp goroot.go
$(STAMP) $@
diff --git a/libgo/config.h.in b/libgo/config.h.in
index 25b8ab8..2c3c746 100644
--- a/libgo/config.h.in
+++ b/libgo/config.h.in
@@ -70,6 +70,9 @@
/* Define to 1 if you have the `fchownat' function. */
#undef HAVE_FCHOWNAT
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
/* Define to 1 if you have the `futimesat' function. */
#undef HAVE_FUTIMESAT
diff --git a/libgo/configure b/libgo/configure
index ffe17c9..61a4994 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -15249,7 +15249,7 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h
fi
-for ac_header in port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h
+for ac_header in fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -15546,7 +15546,14 @@ _ACEOF
fi
-ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" "$ac_includes_default"
+
+CFLAGS_hold="$CFLAGS"
+CFLAGS="$OSCFLAGS $CFLAGS"
+ac_fn_c_check_type "$LINENO" "loff_t" "ac_cv_type_loff_t" "
+#include <sys/types.h>
+#include <fcntl.h>
+
+"
if test "x$ac_cv_type_loff_t" = xyes; then :
cat >>confdefs.h <<_ACEOF
@@ -15556,6 +15563,7 @@ _ACEOF
fi
+CFLAGS="$CFLAGS_hold"
LIBS_hold="$LIBS"
LIBS="$LIBS -lm"
diff --git a/libgo/configure.ac b/libgo/configure.ac
index 7e2b98b..274fcfc 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -579,7 +579,7 @@ AC_C_BIGENDIAN
GCC_CHECK_UNWIND_GETIPINFO
-AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h)
+AC_CHECK_HEADERS(fcntl.h port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/sysctl.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/bpf.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h lwp.h)
AC_CHECK_HEADERS([netinet/icmp6.h], [], [],
[#include <netinet/in.h>
@@ -601,7 +601,14 @@ AC_STRUCT_DIRENT_D_TYPE
AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat open64 openat pipe2 removexattr renameat setxattr sync_file_range splice syscall tee unlinkat unshare utimensat)
AC_TYPE_OFF_T
-AC_CHECK_TYPES([loff_t])
+
+CFLAGS_hold="$CFLAGS"
+CFLAGS="$OSCFLAGS $CFLAGS"
+AC_CHECK_TYPES([loff_t], [], [], [[
+#include <sys/types.h>
+#include <fcntl.h>
+]])
+CFLAGS="$CFLAGS_hold"
LIBS_hold="$LIBS"
LIBS="$LIBS -lm"
diff --git a/libgo/go/runtime/extern.go b/libgo/go/runtime/extern.go
index a371d9c..8e22614 100644
--- a/libgo/go/runtime/extern.go
+++ b/libgo/go/runtime/extern.go
@@ -231,16 +231,6 @@ func GOROOT() string {
return defaultGOROOT
}
-// buildVersion is the Go tree's version string at build time.
-//
-// If any GOEXPERIMENTs are set to non-default values, it will include
-// "X:<GOEXPERIMENT>".
-//
-// This is set by the linker.
-//
-// This is accessed by "go version <binary>".
-var buildVersion string
-
// Version returns the Go tree's version string.
// It is either the commit hash and date at the time of the build or,
// when possible, a release tag like "go1.3".
diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
index 7bec2fb..19ae439 100644
--- a/libgo/go/syscall/libcall_linux.go
+++ b/libgo/go/syscall/libcall_linux.go
@@ -210,20 +210,20 @@ func Gettid() (tid int) {
//sys Setxattr(path string, attr string, data []byte, flags int) (err error)
//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
-//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
-//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
+//sys splice(rfd int, roff *_libgo_loff_t_type, wfd int, woff *_libgo_loff_t_type, len int, flags int) (n int64, err error)
+//splice(rfd _C_int, roff *_libgo_loff_t_type, wfd _C_int, woff *_libgo_loff_t_type, len Size_t, flags _C_uint) Ssize_t
func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
- var lroff _loff_t
- var plroff *_loff_t
+ var lroff _libgo_loff_t_type
+ var plroff *_libgo_loff_t_type
if roff != nil {
- lroff = _loff_t(*roff)
+ lroff = _libgo_loff_t_type(*roff)
plroff = &lroff
}
- var lwoff _loff_t
- var plwoff *_loff_t
+ var lwoff _libgo_loff_t_type
+ var plwoff *_libgo_loff_t_type
if woff != nil {
- lwoff = _loff_t(*woff)
+ lwoff = _libgo_loff_t_type(*woff)
plwoff = &lwoff
}
n, err = splice(rfd, plroff, wfd, plwoff, len, flags)
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index 0c52ea5..ea1fa17 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -127,6 +127,7 @@ fi
# The syscall numbers. We force the names to upper case.
grep '^const _SYS_' gen-sysinfo.go | \
+ grep -v '^const _SYS_SECCOMP = ' | \
sed -e 's/const _\(SYS_[^= ]*\).*$/\1/' | \
while read sys; do
sup=`echo $sys | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
@@ -403,11 +404,7 @@ fi
# Some basic types.
echo 'type Size_t _size_t' >> ${OUT}
echo "type Ssize_t _ssize_t" >> ${OUT}
-if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then
- echo "type Offset_t _off64_t" >> ${OUT}
-else
- echo "type Offset_t _off_t" >> ${OUT}
-fi
+echo "type Offset_t _libgo_off_t_type" >> ${OUT}
echo "type Mode_t _mode_t" >> ${OUT}
echo "type Pid_t _pid_t" >> ${OUT}
echo "type Uid_t _uid_t" >> ${OUT}
@@ -510,7 +507,7 @@ fi
# For historical reasons Go uses the suffix "timespec" instead of "tim" for
# stat_t's time fields on NetBSD.
-st_times='-e s/st_atim/Atim/ -e s/st_mtim/Mtim/ -e s/st_ctim/Ctim/'
+st_times='-e s/st_atim/Atim/g -e s/st_mtim/Mtim/g -e s/st_ctim/Ctim/g'
if test "${GOOS}" = "netbsd"; then
st_times='-e s/st_atim/Atimespec/ -e s/st_mtim/Mtimespec/ -e s/st_ctim/Ctimespec/'
fi
diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c
index 8ce061e..a4259c0 100644
--- a/libgo/sysinfo.c
+++ b/libgo/sysinfo.c
@@ -357,6 +357,18 @@ enum {
};
#endif
+#if defined(HAVE_LOFF_T)
+// loff_t can be defined as a macro; for -fgo-dump-spec make sure we
+// see a typedef.
+typedef loff_t libgo_loff_t_type;
+#endif
+
+#if defined(HAVE_OFF64_T)
+typedef off64_t libgo_off_t_type;
+#else
+typedef off_t libgo_off_t_type;
+#endif
+
// The following section introduces explicit references to types and
// constants of interest to support bootstrapping libgo using a
// compiler that doesn't support -fdump-go-spec (e.g., clang), via
@@ -537,7 +549,8 @@ SREF(timex);
// From sys/types.h
TREF(pid_t);
TREF(off_t);
-TREF(loff_t);
+TREF(libgo_loff_t_type);
+TREF(libgo_off_t_type);
TREF(size_t);
TREF(ssize_t);
TREF(mode_t);
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 893d20d..d3b8380 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,102 @@
+2022-07-08 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.c-c++-common/requires-1.c: Add 'dg-note's.
+ * testsuite/libgomp.c-c++-common/requires-2.c: Likewise.
+ * testsuite/libgomp.c-c++-common/requires-3.c: Likewise.
+ * testsuite/libgomp.c-c++-common/requires-7.c: Likewise.
+ * testsuite/libgomp.fortran/requires-1.f90: Likewise.
+
+2022-07-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * target.c (GOMP_offload_register, GOMP_offload_unregister):
+ Denote as legacy entry points.
+ * testsuite/lib/libgomp.exp
+ (check_effective_target_offload_target_any): New proc.
+ * testsuite/libgomp.c-c++-common/requires-1.c: Enable for
+ 'offload_target_any'.
+ * testsuite/libgomp.c-c++-common/requires-3.c: Likewise.
+ * testsuite/libgomp.c-c++-common/requires-7.c: Likewise.
+ * testsuite/libgomp.fortran/requires-1.f90: Likewise.
+
+2022-07-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.c-c++-common/requires-4.c: Enhance testing.
+ * testsuite/libgomp.c-c++-common/requires-5.c: Likewise.
+
+2022-07-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * testsuite/libgomp.c-c++-common/requires-3.c: Adjust.
+
+2022-07-06 Thomas Schwinge <thomas@codesourcery.com>
+
+ * target.c (GOMP_offload_register_ver): Clarify 'target_data' ->
+ 'data'.
+ (GOMP_offload_unregister_ver): Likewise. Fix up 'target_data'.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * libgomp.texi (OpenMP 5.2): Mark linear-clause change as 'Y'.
+
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * libgomp-plugin.h (GOMP_OFFLOAD_get_num_devices): Add
+ omp_requires_mask arg.
+ * plugin/plugin-gcn.c (GOMP_OFFLOAD_get_num_devices): Likewise;
+ return -1 when device available but omp_requires_mask != 0.
+ * plugin/plugin-nvptx.c (GOMP_OFFLOAD_get_num_devices): Likewise.
+ * oacc-host.c (host_get_num_devices, host_openacc_get_property):
+ Update call.
+ * oacc-init.c (resolve_device, acc_init_1, acc_shutdown_1,
+ goacc_attach_host_thread_to_device, acc_get_num_devices,
+ acc_set_device_num, get_property_any): Likewise.
+ * target.c (omp_requires_mask): New global var.
+ (gomp_requires_to_name): New.
+ (GOMP_offload_register_ver): Handle passed omp_requires_mask.
+ (gomp_target_init): Handle omp_requires_mask.
+ * libgomp.texi (OpenMP 5.0): Update requires impl. status.
+ (OpenMP 5.1): Add a missed item.
+ (OpenMP 5.2): Mark linear-clause change as supported in C/C++.
+ * testsuite/libgomp.c-c++-common/requires-1-aux.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-1.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-2-aux.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-2.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-3-aux.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-3.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-4-aux.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-4.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-5-aux.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-5.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-6.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-7-aux.c: New test.
+ * testsuite/libgomp.c-c++-common/requires-7.c: New test.
+ * testsuite/libgomp.fortran/requires-1-aux.f90: New test.
+ * testsuite/libgomp.fortran/requires-1.f90: New test.
+
+2022-07-01 Tobias Burnus <tobias@codesourcery.com>
+
+ * libgomp.texi (OpenMP 5.2): Mark target enter/exit data
+ with fromto as implemented.
+
+2022-06-28 Martin Liska <mliska@suse.cz>
+
+ * acinclude.m4: Fix typo in mold linker detection.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2022-06-21 Jakub Jelinek <jakub@redhat.com>
+ Paul Iannetta <piannetta@kalrayinc.com>
+
+ PR libgomp/106045
+ * testsuite/libgomp.c/target-31.c: Add private (i) clause.
+
+2022-06-17 Martin Liska <mliska@suse.cz>
+
+ * libgomp.texi: Add table header for new features of
+ OpenMP 5.2.
+
2022-06-15 Jakub Jelinek <jakub@redhat.com>
* testsuite/libgomp.c-c++-common/get-mapped-ptr-1.c (main): Initialize
diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in
index 8f6255f..8ffd45c 100644
--- a/libgomp/Makefile.in
+++ b/libgomp/Makefile.in
@@ -16,7 +16,7 @@
# Plugins for offload execution, Makefile.am fragment.
#
-# Copyright (C) 2014-2021 Free Software Foundation, Inc.
+# Copyright (C) 2014-2022 Free Software Foundation, Inc.
#
# Contributed by Mentor Embedded.
#
diff --git a/libgomp/acinclude.m4 b/libgomp/acinclude.m4
index b8154eb..12fbb20 100644
--- a/libgomp/acinclude.m4
+++ b/libgomp/acinclude.m4
@@ -154,7 +154,7 @@ AC_DEFUN([LIBGOMP_CHECK_LINKER_FEATURES], [
if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
libgomp_ld_is_gold=yes
elif $LD --version 2>/dev/null | grep 'mold'> /dev/null 2>&1; then
- libat_ld_is_mold=yes
+ libgomp_ld_is_mold=yes
fi
changequote(,)
ldver=`$LD --version 2>/dev/null |
diff --git a/libgomp/configure b/libgomp/configure
index 89f14e4..b11170e 100755
--- a/libgomp/configure
+++ b/libgomp/configure
@@ -16027,7 +16027,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
libgomp_ld_is_gold=yes
elif $LD --version 2>/dev/null | grep 'mold'> /dev/null 2>&1; then
- libat_ld_is_mold=yes
+ libgomp_ld_is_mold=yes
fi
ldver=`$LD --version 2>/dev/null |
diff --git a/libgomp/libgomp-plugin.h b/libgomp/libgomp-plugin.h
index 07ab700..ab3ed63 100644
--- a/libgomp/libgomp-plugin.h
+++ b/libgomp/libgomp-plugin.h
@@ -125,7 +125,7 @@ extern void GOMP_PLUGIN_fatal (const char *, ...)
extern const char *GOMP_OFFLOAD_get_name (void);
extern unsigned int GOMP_OFFLOAD_get_caps (void);
extern int GOMP_OFFLOAD_get_type (void);
-extern int GOMP_OFFLOAD_get_num_devices (void);
+extern int GOMP_OFFLOAD_get_num_devices (unsigned int);
extern bool GOMP_OFFLOAD_init_device (int);
extern bool GOMP_OFFLOAD_fini_device (int);
extern unsigned GOMP_OFFLOAD_version (void);
diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi
index f696f1d..8b7c030 100644
--- a/libgomp/libgomp.texi
+++ b/libgomp/libgomp.texi
@@ -189,8 +189,8 @@ The OpenMP 4.5 specification is fully supported.
env variable @tab Y @tab
@item Nested-parallel changes to @emph{max-active-levels-var} ICV @tab Y @tab
@item @code{requires} directive @tab P
- @tab Only fulfillable requirement are @code{atomic_default_mem_order}
- and @code{dynamic_allocators}
+ @tab complete but no non-host devices provides @code{unified_address},
+ @code{unified_shared_memory} or @code{reverse_offload}
@item @code{teams} construct outside an enclosing target region @tab Y @tab
@item Non-rectangular loop nests @tab Y @tab
@item @code{!=} as relational-op in canonical loop form for C/C++ @tab Y @tab
@@ -344,6 +344,8 @@ The OpenMP 4.5 specification is fully supported.
@item @code{unconstrained} and @code{reproducible} modifiers on @code{order}
clause @tab Y @tab
@item Support @code{begin/end declare target} syntax in C/C++ @tab N @tab
+@item Pointer predetermined firstprivate getting initialized
+to address of matching mapped list item per 5.1, Sect. 2.21.7.2 @tab N @tab
@end multitable
@@ -361,7 +363,7 @@ The OpenMP 4.5 specification is fully supported.
@item Clauses on @code{end} directive can be on directive @tab N @tab
@item Deprecation of no-argument @code{destroy} clause on @code{depobj}
@tab N @tab
-@item @code{linear} clause syntax changes and @code{step} modifier @tab N @tab
+@item @code{linear} clause syntax changes and @code{step} modifier @tab Y @tab
@item Deprecation of minus operator for reductions @tab N @tab
@item Deprecation of separating @code{map} modifiers without comma @tab N @tab
@item @code{declare mapper} with iterator and @code{present} modifiers
@@ -390,7 +392,7 @@ The OpenMP 4.5 specification is fully supported.
@tab Y @tab
@item @code{ompt_callback_work} @tab N @tab
@item Default map-type for @code{map} clause in @code{target enter/exit data}
- @tab N @tab
+ @tab Y @tab
@item New @code{doacross} clause as alias for @code{depend} with
@code{source}/@code{sink} modifier @tab N @tab
@item Deprecation of @code{depend} with @code{source}/@code{sink} modifier
diff --git a/libgomp/oacc-host.c b/libgomp/oacc-host.c
index 5bb8899..eb11b9c 100644
--- a/libgomp/oacc-host.c
+++ b/libgomp/oacc-host.c
@@ -54,7 +54,7 @@ host_get_type (void)
}
static int
-host_get_num_devices (void)
+host_get_num_devices (unsigned int omp_requires_mask __attribute__((unused)))
{
return 1;
}
@@ -229,7 +229,7 @@ host_openacc_get_property (int n, enum goacc_property prop)
{
union goacc_property_value nullval = { .val = 0 };
- if (n >= host_get_num_devices ())
+ if (n >= host_get_num_devices (0))
return nullval;
switch (prop)
diff --git a/libgomp/oacc-init.c b/libgomp/oacc-init.c
index 1565aa0..42c3e74e 100644
--- a/libgomp/oacc-init.c
+++ b/libgomp/oacc-init.c
@@ -148,7 +148,7 @@ resolve_device (acc_device_t d, bool fail_is_error)
if (dispatchers[d]
&& !strcasecmp (goacc_device_type,
get_openacc_name (dispatchers[d]->name))
- && dispatchers[d]->get_num_devices_func () > 0)
+ && dispatchers[d]->get_num_devices_func (0) > 0)
goto found;
if (fail_is_error)
@@ -169,7 +169,7 @@ resolve_device (acc_device_t d, bool fail_is_error)
case acc_device_not_host:
/* Find the first available device after acc_device_not_host. */
while (known_device_type_p (++d))
- if (dispatchers[d] && dispatchers[d]->get_num_devices_func () > 0)
+ if (dispatchers[d] && dispatchers[d]->get_num_devices_func (0) > 0)
goto found;
if (d_arg == acc_device_default)
{
@@ -302,7 +302,7 @@ acc_init_1 (acc_device_t d, acc_construct_t parent_construct, int implicit)
base_dev = resolve_device (d, true);
- ndevs = base_dev->get_num_devices_func ();
+ ndevs = base_dev->get_num_devices_func (0);
if (ndevs <= 0 || goacc_device_num >= ndevs)
acc_dev_num_out_of_range (d, goacc_device_num, ndevs);
@@ -351,7 +351,7 @@ acc_shutdown_1 (acc_device_t d)
/* Get the base device for this device type. */
base_dev = resolve_device (d, true);
- ndevs = base_dev->get_num_devices_func ();
+ ndevs = base_dev->get_num_devices_func (0);
/* Unload all the devices of this type that have been opened. */
for (i = 0; i < ndevs; i++)
@@ -520,7 +520,7 @@ goacc_attach_host_thread_to_device (int ord)
base_dev = cached_base_dev;
}
- num_devices = base_dev->get_num_devices_func ();
+ num_devices = base_dev->get_num_devices_func (0);
if (num_devices <= 0 || ord >= num_devices)
acc_dev_num_out_of_range (acc_device_type (base_dev->type), ord,
num_devices);
@@ -599,7 +599,7 @@ acc_get_num_devices (acc_device_t d)
if (!acc_dev)
return 0;
- n = acc_dev->get_num_devices_func ();
+ n = acc_dev->get_num_devices_func (0);
if (n < 0)
n = 0;
@@ -779,7 +779,7 @@ acc_set_device_num (int ord, acc_device_t d)
cached_base_dev = base_dev = resolve_device (d, true);
- num_devices = base_dev->get_num_devices_func ();
+ num_devices = base_dev->get_num_devices_func (0);
if (num_devices <= 0 || ord >= num_devices)
acc_dev_num_out_of_range (d, ord, num_devices);
@@ -814,7 +814,7 @@ get_property_any (int ord, acc_device_t d, acc_device_property_t prop)
struct gomp_device_descr *dev = resolve_device (d, true);
- int num_devices = dev->get_num_devices_func ();
+ int num_devices = dev->get_num_devices_func (0);
if (num_devices <= 0 || ord >= num_devices)
acc_dev_num_out_of_range (d, ord, num_devices);
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index 1c04368..ea327bf 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -3221,10 +3221,14 @@ GOMP_OFFLOAD_version (void)
/* Return the number of GCN devices on the system. */
int
-GOMP_OFFLOAD_get_num_devices (void)
+GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask)
{
if (!init_hsa_context ())
return 0;
+ /* Return -1 if no omp_requires_mask cannot be fulfilled but
+ devices were present. */
+ if (hsa_context.agent_count > 0 && omp_requires_mask != 0)
+ return -1;
return hsa_context.agent_count;
}
diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c
index 387bcbb..bc63e274 100644
--- a/libgomp/plugin/plugin-nvptx.c
+++ b/libgomp/plugin/plugin-nvptx.c
@@ -1175,9 +1175,14 @@ GOMP_OFFLOAD_get_type (void)
}
int
-GOMP_OFFLOAD_get_num_devices (void)
+GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask)
{
- return nvptx_get_num_devices ();
+ int num_devices = nvptx_get_num_devices ();
+ /* Return -1 if no omp_requires_mask cannot be fulfilled but
+ devices were present. */
+ if (num_devices > 0 && omp_requires_mask != 0)
+ return -1;
+ return num_devices;
}
bool
diff --git a/libgomp/target.c b/libgomp/target.c
index c0844f2..86f9d30 100644
--- a/libgomp/target.c
+++ b/libgomp/target.c
@@ -36,6 +36,7 @@
# include <inttypes.h> /* For PRIu64. */
#endif
#include <string.h>
+#include <stdio.h> /* For snprintf. */
#include <assert.h>
#include <errno.h>
@@ -98,6 +99,9 @@ static int num_devices;
/* Number of GOMP_OFFLOAD_CAP_OPENMP_400 devices. */
static int num_devices_openmp;
+/* OpenMP requires mask. */
+static int omp_requires_mask;
+
/* Similar to gomp_realloc, but release register_lock before gomp_fatal. */
static void *
@@ -2314,22 +2318,72 @@ gomp_unload_image_from_device (struct gomp_device_descr *devicep,
}
}
+static void
+gomp_requires_to_name (char *buf, size_t size, int requires_mask)
+{
+ char *end = buf + size, *p = buf;
+ if (requires_mask & GOMP_REQUIRES_UNIFIED_ADDRESS)
+ p += snprintf (p, end - p, "unified_address");
+ if (requires_mask & GOMP_REQUIRES_UNIFIED_SHARED_MEMORY)
+ p += snprintf (p, end - p, "%sunified_shared_memory",
+ (p == buf ? "" : ", "));
+ if (requires_mask & GOMP_REQUIRES_REVERSE_OFFLOAD)
+ p += snprintf (p, end - p, "%sreverse_offload",
+ (p == buf ? "" : ", "));
+}
+
/* This function should be called from every offload image while loading.
It gets the descriptor of the host func and var tables HOST_TABLE, TYPE of
- the target, and TARGET_DATA needed by target plugin. */
+ the target, and DATA. */
void
GOMP_offload_register_ver (unsigned version, const void *host_table,
- int target_type, const void *target_data)
+ int target_type, const void *data)
{
int i;
if (GOMP_VERSION_LIB (version) > GOMP_VERSION)
gomp_fatal ("Library too old for offload (version %u < %u)",
GOMP_VERSION, GOMP_VERSION_LIB (version));
-
+
+ int omp_req;
+ const void *target_data;
+ if (GOMP_VERSION_LIB (version) > 1)
+ {
+ omp_req = (int) (size_t) ((void **) data)[0];
+ target_data = &((void **) data)[1];
+ }
+ else
+ {
+ omp_req = 0;
+ target_data = data;
+ }
+
gomp_mutex_lock (&register_lock);
+ if (omp_req && omp_requires_mask && omp_requires_mask != omp_req)
+ {
+ char buf1[sizeof ("unified_address, unified_shared_memory, "
+ "reverse_offload")];
+ char buf2[sizeof ("unified_address, unified_shared_memory, "
+ "reverse_offload")];
+ gomp_requires_to_name (buf2, sizeof (buf2),
+ omp_req != GOMP_REQUIRES_TARGET_USED
+ ? omp_req : omp_requires_mask);
+ if (omp_req != GOMP_REQUIRES_TARGET_USED
+ && omp_requires_mask != GOMP_REQUIRES_TARGET_USED)
+ {
+ gomp_requires_to_name (buf1, sizeof (buf1), omp_requires_mask);
+ gomp_fatal ("OpenMP 'requires' directive with non-identical clauses "
+ "in multiple compilation units: '%s' vs. '%s'",
+ buf1, buf2);
+ }
+ else
+ gomp_fatal ("OpenMP 'requires' directive with '%s' specified only in "
+ "some compilation units", buf2);
+ }
+ omp_requires_mask = omp_req;
+
/* Load image to all initialized devices. */
for (i = 0; i < num_devices; i++)
{
@@ -2356,6 +2410,8 @@ GOMP_offload_register_ver (unsigned version, const void *host_table,
gomp_mutex_unlock (&register_lock);
}
+/* Legacy entry point. */
+
void
GOMP_offload_register (const void *host_table, int target_type,
const void *target_data)
@@ -2365,14 +2421,24 @@ GOMP_offload_register (const void *host_table, int target_type,
/* This function should be called from every offload image while unloading.
It gets the descriptor of the host func and var tables HOST_TABLE, TYPE of
- the target, and TARGET_DATA needed by target plugin. */
+ the target, and DATA. */
void
GOMP_offload_unregister_ver (unsigned version, const void *host_table,
- int target_type, const void *target_data)
+ int target_type, const void *data)
{
int i;
+ if (GOMP_VERSION_LIB (version) > GOMP_VERSION)
+ gomp_fatal ("Library too old for offload (version %u < %u)",
+ GOMP_VERSION, GOMP_VERSION_LIB (version));
+
+ const void *target_data;
+ if (GOMP_VERSION_LIB (version) > 1)
+ target_data = &((void **) data)[1];
+ else
+ target_data = data;
+
gomp_mutex_lock (&register_lock);
/* Unload image from all initialized devices. */
@@ -2398,6 +2464,8 @@ GOMP_offload_unregister_ver (unsigned version, const void *host_table,
gomp_mutex_unlock (&register_lock);
}
+/* Legacy entry point. */
+
void
GOMP_offload_unregister (const void *host_table, int target_type,
const void *target_data)
@@ -4125,8 +4193,30 @@ gomp_target_init (void)
if (gomp_load_plugin_for_device (&current_device, plugin_name))
{
- new_num_devs = current_device.get_num_devices_func ();
- if (new_num_devs >= 1)
+ int omp_req = omp_requires_mask & ~GOMP_REQUIRES_TARGET_USED;
+ new_num_devs = current_device.get_num_devices_func (omp_req);
+ if (gomp_debug_var > 0 && new_num_devs < 0)
+ {
+ bool found = false;
+ int type = current_device.get_type_func ();
+ for (int img = 0; img < num_offload_images; img++)
+ if (type == offload_images[img].type)
+ found = true;
+ if (found)
+ {
+ char buf[sizeof ("unified_address, unified_shared_memory, "
+ "reverse_offload")];
+ gomp_requires_to_name (buf, sizeof (buf), omp_req);
+ char *name = (char *) malloc (cur_len + 1);
+ memcpy (name, cur, cur_len);
+ name[cur_len] = '\0';
+ gomp_debug (1,
+ "%s devices present but 'omp requires %s' "
+ "cannot be fulfilled", name, buf);
+ free (name);
+ }
+ }
+ else if (new_num_devs >= 1)
{
/* Augment DEVICES and NUM_DEVICES. */
diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp
index 891f909..107a3c2 100644
--- a/libgomp/testsuite/lib/libgomp.exp
+++ b/libgomp/testsuite/lib/libgomp.exp
@@ -348,6 +348,11 @@ proc libgomp_check_effective_target_offload_target { target_name } {
return 0
}
+# Return 1 if compiling for any offload target.
+proc check_effective_target_offload_target_any { } {
+ return [libgomp_check_effective_target_offload_target ""]
+}
+
# Return 1 if compiling for offload target nvptx.
proc check_effective_target_offload_target_nvptx { } {
return [libgomp_check_effective_target_offload_target "nvptx"]
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-1-aux.c b/libgomp/testsuite/libgomp.c-c++-common/requires-1-aux.c
new file mode 100644
index 0000000..bdca662
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-1-aux.c
@@ -0,0 +1,11 @@
+/* { dg-skip-if "" { *-*-* } } */
+
+#pragma omp requires unified_address
+
+int x;
+
+void foo (void)
+{
+ #pragma omp target
+ x = 1;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-1.c b/libgomp/testsuite/libgomp.c-c++-common/requires-1.c
new file mode 100644
index 0000000..31996f1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-1.c
@@ -0,0 +1,26 @@
+/* { dg-do link { target offload_target_any } } */
+/* { dg-additional-sources requires-1-aux.c } */
+
+/* Check diagnostic by device-compiler's lto1.
+ Other file uses: 'requires unified_address'. */
+
+#pragma omp requires unified_shared_memory
+
+int a[10];
+extern void foo (void);
+
+int
+main (void)
+{
+ #pragma omp target
+ for (int i = 0; i < 10; i++)
+ a[i] = 0;
+
+ foo ();
+ return 0;
+}
+
+/* { dg-error "OpenMP 'requires' directive with non-identical clauses in multiple compilation units: 'unified_shared_memory' vs. 'unified_address'" "" { target *-*-* } 0 }
+ { dg-note {requires-1\.c' has 'unified_shared_memory'} {} { target *-*-* } 0 }
+ { dg-note {requires-1-aux\.c' has 'unified_address'} {} { target *-*-* } 0 } */
+/* { dg-excess-errors "Ignore messages like: errors during merging of translation units|mkoffload returned 1 exit status" } */
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-2-aux.c b/libgomp/testsuite/libgomp.c-c++-common/requires-2-aux.c
new file mode 100644
index 0000000..6175774
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-2-aux.c
@@ -0,0 +1,9 @@
+/* { dg-skip-if "" { *-*-* } } */
+
+int x;
+
+void foo (void)
+{
+ #pragma omp target
+ x = 1;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-2.c b/libgomp/testsuite/libgomp.c-c++-common/requires-2.c
new file mode 100644
index 0000000..b20e154
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-2.c
@@ -0,0 +1,27 @@
+/* { dg-do link { target offloading_enabled } } */
+/* { dg-additional-options "-foffload=disable -flto" } */
+/* { dg-additional-sources requires-2-aux.c } */
+
+/* Check diagnostic by host's lto1.
+ Other file does not have any 'omp requires'. */
+
+#pragma omp requires unified_shared_memory
+
+int a[10];
+extern void foo (void);
+
+int
+main (void)
+{
+ #pragma omp target
+ for (int i = 0; i < 10; i++)
+ a[i] = 0;
+
+ foo ();
+ return 0;
+}
+
+/* { dg-error "OpenMP 'requires' directive with 'unified_shared_memory' specified only in some compilation units" "" { target *-*-* } 0 }
+ { dg-note {requires-2\.c' has 'unified_shared_memory'} {} { target *-*-* } 0 }
+ { dg-note {but '[^']*requires-2-aux\.c' has not} {} { target *-*-* } 0 } */
+/* { dg-excess-errors "Ignore messages like: errors during merging of translation units|mkoffload returned 1 exit status" } */
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-3-aux.c b/libgomp/testsuite/libgomp.c-c++-common/requires-3-aux.c
new file mode 100644
index 0000000..bdca662
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-3-aux.c
@@ -0,0 +1,11 @@
+/* { dg-skip-if "" { *-*-* } } */
+
+#pragma omp requires unified_address
+
+int x;
+
+void foo (void)
+{
+ #pragma omp target
+ x = 1;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-3.c b/libgomp/testsuite/libgomp.c-c++-common/requires-3.c
new file mode 100644
index 0000000..a549a19
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-3.c
@@ -0,0 +1,26 @@
+/* { dg-do link { target offload_target_any } } */
+/* { dg-additional-sources requires-3-aux.c } */
+
+/* Check diagnostic by device-compiler's lto1.
+ Other file uses: 'requires unified_address'. */
+
+#pragma omp requires unified_address,unified_shared_memory
+
+int a[10];
+extern void foo (void);
+
+int
+main (void)
+{
+ #pragma omp target
+ for (int i = 0; i < 10; i++)
+ a[i] = 0;
+
+ foo ();
+ return 0;
+}
+
+/* { dg-error "OpenMP 'requires' directive with non-identical clauses in multiple compilation units: 'unified_address, unified_shared_memory' vs. 'unified_address'" "" { target *-*-* } 0 }
+ { dg-note {requires-3\.c' has 'unified_address, unified_shared_memory'} {} { target *-*-* } 0 }
+ { dg-note {requires-3-aux\.c' has 'unified_address'} {} { target *-*-* } 0 } */
+/* { dg-excess-errors "Ignore messages like: errors during merging of translation units|mkoffload returned 1 exit status" } */
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-4-aux.c b/libgomp/testsuite/libgomp.c-c++-common/requires-4-aux.c
new file mode 100644
index 0000000..b8b51ae
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-4-aux.c
@@ -0,0 +1,13 @@
+/* { dg-skip-if "" { *-*-* } } */
+
+#pragma omp requires reverse_offload
+
+/* Note: The file does not have neither of:
+ declare target directives, device constructs or device routines. */
+
+int x;
+
+void foo (void)
+{
+ x = 1;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-4.c b/libgomp/testsuite/libgomp.c-c++-common/requires-4.c
new file mode 100644
index 0000000..6ed5a5f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-4.c
@@ -0,0 +1,34 @@
+/* { dg-additional-options "-flto" } */
+/* { dg-additional-sources requires-4-aux.c } */
+
+/* Check no diagnostic by device-compiler's or host compiler's lto1.
+ Other file uses: 'requires reverse_offload', but that's inactive as
+ there are no declare target directives, device constructs nor device routines */
+
+/* Depending on offload device capabilities, it may print something like the
+ following (only) if GOMP_DEBUG=1:
+ "devices present but 'omp requires unified_address, unified_shared_memory, reverse_offload' cannot be fulfilled"
+ and in that case does host-fallback execution.
+
+ No offload devices support USM at present, so we may verify host-fallback
+ execution by presence of separate memory spaces. */
+
+#pragma omp requires unified_address,unified_shared_memory
+
+int a[10] = { 0 };
+extern void foo (void);
+
+int
+main (void)
+{
+ #pragma omp target map(to: a)
+ for (int i = 0; i < 10; i++)
+ a[i] = i;
+
+ for (int i = 0; i < 10; i++)
+ if (a[i] != i)
+ __builtin_abort ();
+
+ foo ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-5-aux.c b/libgomp/testsuite/libgomp.c-c++-common/requires-5-aux.c
new file mode 100644
index 0000000..d223749
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-5-aux.c
@@ -0,0 +1,11 @@
+/* { dg-skip-if "" { *-*-* } } */
+
+#pragma omp requires unified_shared_memory, unified_address, reverse_offload
+
+int x;
+
+void foo (void)
+{
+ #pragma omp target
+ x = 1;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-5.c b/libgomp/testsuite/libgomp.c-c++-common/requires-5.c
new file mode 100644
index 0000000..7fe0c73
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-5.c
@@ -0,0 +1,29 @@
+/* { dg-additional-sources requires-5-aux.c } */
+
+/* Depending on offload device capabilities, it may print something like the
+ following (only) if GOMP_DEBUG=1:
+ "devices present but 'omp requires unified_address, unified_shared_memory, reverse_offload' cannot be fulfilled"
+ and in that case does host-fallback execution.
+
+ As no offload devices support USM at present, we may verify host-fallback
+ execution by absence of separate memory spaces. */
+
+#pragma omp requires unified_shared_memory, unified_address, reverse_offload
+
+int a[10] = { 0 };
+extern void foo (void);
+
+int
+main (void)
+{
+ #pragma omp target map(to: a)
+ for (int i = 0; i < 10; i++)
+ a[i] = i;
+
+ for (int i = 0; i < 10; i++)
+ if (a[i] != i)
+ __builtin_abort ();
+
+ foo ();
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-6.c b/libgomp/testsuite/libgomp.c-c++-common/requires-6.c
new file mode 100644
index 0000000..b00c745
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-6.c
@@ -0,0 +1,17 @@
+#pragma omp requires unified_shared_memory, unified_address, reverse_offload
+
+/* The requires line is not active as there is none of:
+ declare target directives, device constructs or device routines.
+ Thus, this code is expected to work everywhere. */
+
+int a[10];
+extern void foo (void);
+
+int
+main (void)
+{
+ for (int i = 0; i < 10; i++)
+ a[i] = 0;
+
+ return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-7-aux.c b/libgomp/testsuite/libgomp.c-c++-common/requires-7-aux.c
new file mode 100644
index 0000000..0916db8
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-7-aux.c
@@ -0,0 +1,11 @@
+/* { dg-skip-if "" { *-*-* } } */
+
+#pragma omp requires unified_address
+
+int x;
+
+void foo (void)
+{
+ x = 1;
+ #pragma omp target enter data map(always,to: x)
+}
diff --git a/libgomp/testsuite/libgomp.c-c++-common/requires-7.c b/libgomp/testsuite/libgomp.c-c++-common/requires-7.c
new file mode 100644
index 0000000..63afcc9
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/requires-7.c
@@ -0,0 +1,32 @@
+/* { dg-do link { target offload_target_any } } */
+/* { dg-additional-sources requires-7-aux.c } */
+
+/* Check diagnostic by device-compiler's lto1.
+ Other file uses: 'requires unified_address'. */
+
+#pragma omp requires unified_shared_memory
+
+int a[10];
+extern void foo (void);
+
+int
+main (void)
+{
+ #pragma omp target
+ for (int i = 0; i < 10; i++)
+ a[i] = 0;
+
+ foo ();
+ return 0;
+}
+
+/* { dg-error "OpenMP 'requires' directive with non-identical clauses in multiple compilation units: 'unified_shared_memory' vs. 'unified_address'" "" { target *-*-* } 0 }
+ { dg-note {requires-7\.c' has 'unified_shared_memory'} {} { target *-*-* } 0 }
+ TODO We're currently not streaming location information for the OpenMP
+ directives used in 'requires-7-aux.c', so we're not seeing the source file
+ name here (but a temporary '*.o' instead; for details, see
+ <https://gcc.gnu.org/pipermail/gcc-patches/2022-July/598011.html>):
+ { dg-note {requires-7-aux\.c' has 'unified_address'} {} { xfail *-*-* } 0 }
+ ..., but we may still verify that the rest of the diagnostic is correct:
+ { dg-note {' has 'unified_address'} {} { target *-*-* } 0 } */
+/* { dg-excess-errors "Ignore messages like: errors during merging of translation units|mkoffload returned 1 exit status" } */
diff --git a/libgomp/testsuite/libgomp.c/target-31.c b/libgomp/testsuite/libgomp.c/target-31.c
index 8e63d28..1123b7e 100644
--- a/libgomp/testsuite/libgomp.c/target-31.c
+++ b/libgomp/testsuite/libgomp.c/target-31.c
@@ -76,7 +76,7 @@ main ()
m[1] += 3 * b;
}
use (&a, &b, &c, &d, e, f, g, h);
- #pragma omp parallel firstprivate (u1, u2)
+ #pragma omp parallel firstprivate (u1, u2) private (i)
{
int w = omp_get_thread_num ();
int x = 19;
diff --git a/libgomp/testsuite/libgomp.fortran/requires-1-aux.f90 b/libgomp/testsuite/libgomp.fortran/requires-1-aux.f90
new file mode 100644
index 0000000..a18caeb
--- /dev/null
+++ b/libgomp/testsuite/libgomp.fortran/requires-1-aux.f90
@@ -0,0 +1,14 @@
+! { dg-skip-if "" { *-*-* } }
+
+module m
+ integer x
+end module m
+
+subroutine foo
+ use m
+ implicit none
+ !$omp requires unified_address
+
+ x = 1
+ !$omp target enter data map(always,to: x)
+end
diff --git a/libgomp/testsuite/libgomp.fortran/requires-1.f90 b/libgomp/testsuite/libgomp.fortran/requires-1.f90
new file mode 100644
index 0000000..9a0c334
--- /dev/null
+++ b/libgomp/testsuite/libgomp.fortran/requires-1.f90
@@ -0,0 +1,34 @@
+! { dg-do link { target offload_target_any } }
+! { dg-additional-sources requires-1-aux.f90 }
+
+! Check diagnostic by device-compiler's lto1.
+! Other file uses: 'requires unified_address'.
+
+module m
+ integer :: a(10)
+ interface
+ subroutine foo
+ end
+ end interface
+end
+
+program main
+ !$omp requires unified_shared_memory
+
+ !$omp target
+ a = 0
+ !$omp end target
+
+ call foo ()
+end
+
+! { dg-error "OpenMP 'requires' directive with non-identical clauses in multiple compilation units: 'unified_shared_memory' vs. 'unified_address'" "" { target *-*-* } 0 }
+! { dg-note {requires-1\.f90' has 'unified_shared_memory'} {} { target *-*-* } 0 }
+! TODO We're currently not streaming location information for the OpenMP
+! directives used in 'requires-7-aux.c', so we're not seeing the source file
+! name here (but a temporary '*.o' instead; for details, see
+! <https://gcc.gnu.org/pipermail/gcc-patches/2022-July/598011.html>):
+! { dg-note {requires-1-aux\.f90' has 'unified_address'} {} { xfail *-*-* } 0 }
+! ..., but we may still verify that the rest of the diagnostic is correct:
+! { dg-note {' has 'unified_address'} {} { target *-*-* } 0 }
+! { dg-excess-errors "Ignore messages like: errors during merging of translation units|mkoffload returned 1 exit status" }
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 7d07c0b..547ef8b 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,23 @@
+2022-07-04 Nick Clifton <nickc@redhat.com>
+
+ * rust-demangle.c (demangle_const): Add a missing goto pass_return
+ at the end of the function.
+
+2022-07-04 Nick Clifton <nickc@redhat.com>
+
+ * rust-demangle.c (demangle_path_maybe_open_generics): Add
+ recursion limit.
+
+2022-07-01 Nick Clifton <nickc@redhat.com>
+
+ PR demangler/105039
+ * rust-demangle.c (demangle_const): Add recursion limit.
+
+2022-06-26 Simon Marchi <simon.marchi@efficios.com>
+
+ * configure.ac: Add AC_CONFIG_MACRO_DIRS call.
+ * configure: Re-generate.
+
2022-05-23 Nathan Sidwell <nathan@acm.org>
* cp-demangle.c (d_make_comp): Adjust.
diff --git a/libiberty/configure b/libiberty/configure
index 0a79725..1d42a5e3 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -2459,6 +2459,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
# This works around the fact that libtool configuration may change LD
# for this particular configuration, but some shells, instead of
# keeping the changes in LD private, export them just because LD is
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
index 84a7b37..28d996f 100644
--- a/libiberty/configure.ac
+++ b/libiberty/configure.ac
@@ -2,6 +2,7 @@ dnl Process this file with autoconf to produce a configure script
AC_INIT
AC_CONFIG_SRCDIR([xmalloc.c])
+AC_CONFIG_MACRO_DIRS([../config])
# This works around the fact that libtool configuration may change LD
# for this particular configuration, but some shells, instead of
diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c
index bb58d90..8dfeeac 100644
--- a/libiberty/rust-demangle.c
+++ b/libiberty/rust-demangle.c
@@ -126,7 +126,7 @@ parse_integer_62 (struct rust_demangler *rdm)
return 0;
x = 0;
- while (!eat (rdm, '_'))
+ while (!eat (rdm, '_') && !rdm->errored)
{
c = next (rdm);
x *= 62;
@@ -1082,6 +1082,18 @@ demangle_path_maybe_open_generics (struct rust_demangler *rdm)
if (rdm->errored)
return open;
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ {
+ ++ rdm->recursion;
+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT)
+ {
+ /* FIXME: There ought to be a way to report
+ that the recursion limit has been reached. */
+ rdm->errored = 1;
+ goto end_of_func;
+ }
+ }
+
if (eat (rdm, 'B'))
{
backref = parse_integer_62 (rdm);
@@ -1107,6 +1119,11 @@ demangle_path_maybe_open_generics (struct rust_demangler *rdm)
}
else
demangle_path (rdm, 0);
+
+ end_of_func:
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ -- rdm->recursion;
+
return open;
}
@@ -1148,6 +1165,15 @@ demangle_const (struct rust_demangler *rdm)
if (rdm->errored)
return;
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ {
+ ++ rdm->recursion;
+ if (rdm->recursion > RUST_MAX_RECURSION_COUNT)
+ /* FIXME: There ought to be a way to report
+ that the recursion limit has been reached. */
+ goto fail_return;
+ }
+
if (eat (rdm, 'B'))
{
backref = parse_integer_62 (rdm);
@@ -1158,7 +1184,7 @@ demangle_const (struct rust_demangler *rdm)
demangle_const (rdm);
rdm->next = old_next;
}
- return;
+ goto pass_return;
}
ty_tag = next (rdm);
@@ -1167,7 +1193,7 @@ demangle_const (struct rust_demangler *rdm)
/* Placeholder. */
case 'p':
PRINT ("_");
- return;
+ goto pass_return;
/* Unsigned integer types. */
case 'h':
@@ -1200,18 +1226,21 @@ demangle_const (struct rust_demangler *rdm)
break;
default:
- rdm->errored = 1;
- return;
+ goto fail_return;
}
- if (rdm->errored)
- return;
-
- if (rdm->verbose)
+ if (!rdm->errored && rdm->verbose)
{
PRINT (": ");
PRINT (basic_type (ty_tag));
}
+ goto pass_return;
+
+ fail_return:
+ rdm->errored = 1;
+ pass_return:
+ if (rdm->recursion != RUST_NO_RECURSION_LIMIT)
+ -- rdm->recursion;
}
static void
diff --git a/liboffloadmic/ChangeLog b/liboffloadmic/ChangeLog
index 4dbc6ba..208abbc 100644
--- a/liboffloadmic/ChangeLog
+++ b/liboffloadmic/ChangeLog
@@ -1,3 +1,10 @@
+2022-07-04 Tobias Burnus <tobias@codesourcery.com>
+ Chung-Lin Tang <cltang@codesourcery.com>
+ Thomas Schwinge <thomas@codesourcery.com>
+
+ * plugin/libgomp-plugin-intelmic.cpp (GOMP_OFFLOAD_get_num_devices):
+ Return -1 when device available but omp_requires_mask != 0.
+
2021-10-19 Martin Liska <mliska@suse.cz>
* include/coi/source/COIBuffer_source.h: Convert 2 chars to
diff --git a/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp b/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
index d1678d0..33bae06 100644
--- a/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
+++ b/liboffloadmic/plugin/libgomp-plugin-intelmic.cpp
@@ -168,8 +168,12 @@ GOMP_OFFLOAD_get_type (void)
}
extern "C" int
-GOMP_OFFLOAD_get_num_devices (void)
+GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask)
{
+ /* Return -1 if no omp_requires_mask cannot be fulfilled but
+ devices were present. */
+ if (num_devices > 0 && omp_requires_mask != 0)
+ return -1;
TRACE ("(): return %d", num_devices);
return num_devices;
}
diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog
index 2450d49..2d4abbb 100644
--- a/libphobos/ChangeLog
+++ b/libphobos/ChangeLog
@@ -1,3 +1,34 @@
+2022-07-06 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * libdruntime/MERGE: Merge upstream druntime 651389b5.
+ * src/MERGE: Merge upstream phobos 1516ecad9.
+
+2022-06-29 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add gcc/simd.d.
+ * libdruntime/Makefile.in: Regenerate.
+ * libdruntime/gcc/simd.d: New file.
+
+2022-06-28 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * libdruntime/gcc/attributes.d (simd): Define.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/105413
+ * libdruntime/gcc/attributes.d (register): Define.
+
+2022-06-24 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * libdruntime/MERGE: Merge upstream druntime 148608b7.
+
+2022-06-22 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ * libdruntime/MERGE: Merge upstream druntime e150cca1.
+ * src/MERGE: Merge upstream phobos a4a18d21c.
+ * testsuite/libphobos.cycles/cycles.exp (cycle_test_list): Update
+ expected result of deprecate test.
+
2022-06-15 Iain Buclaw <ibuclaw@gdcproject.org>
* libdruntime/gcc/attributes.d (no_sanitize): Define.
diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE
index 8b2839d..6e25a9d 100644
--- a/libphobos/libdruntime/MERGE
+++ b/libphobos/libdruntime/MERGE
@@ -1,4 +1,4 @@
-454471d8077d12ec6bf0ae8fcd9571aad1bce7be
+651389b52243dcadb338dd0c14dd27e7850cda8d
The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository.
diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am
index d963aa9..56b332d 100644
--- a/libphobos/libdruntime/Makefile.am
+++ b/libphobos/libdruntime/Makefile.am
@@ -207,14 +207,14 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
core/vararg.d core/volatile.d gcc/attribute.d gcc/attributes.d \
gcc/backtrace.d gcc/builtins.d gcc/deh.d gcc/emutls.d gcc/gthread.d \
gcc/sections/common.d gcc/sections/elf.d gcc/sections/macho.d \
- gcc/sections/package.d gcc/sections/pecoff.d gcc/unwind/arm.d \
- gcc/unwind/arm_common.d gcc/unwind/c6x.d gcc/unwind/generic.d \
- gcc/unwind/package.d gcc/unwind/pe.d object.d rt/aApply.d rt/aApplyR.d \
- rt/aaA.d rt/adi.d rt/arrayassign.d rt/arraycat.d rt/cast_.d \
- rt/config.d rt/critical_.d rt/deh.d rt/dmain2.d rt/ehalloc.d \
- rt/invariant.d rt/lifetime.d rt/memory.d rt/minfo.d rt/monitor_.d \
- rt/profilegc.d rt/sections.d rt/tlsgc.d rt/util/typeinfo.d \
- rt/util/utility.d
+ gcc/sections/package.d gcc/sections/pecoff.d gcc/simd.d \
+ gcc/unwind/arm.d gcc/unwind/arm_common.d gcc/unwind/c6x.d \
+ gcc/unwind/generic.d gcc/unwind/package.d gcc/unwind/pe.d object.d \
+ rt/aApply.d rt/aApplyR.d rt/aaA.d rt/adi.d rt/arrayassign.d \
+ rt/arraycat.d rt/cast_.d rt/config.d rt/critical_.d rt/deh.d \
+ rt/dmain2.d rt/ehalloc.d rt/invariant.d rt/lifetime.d rt/memory.d \
+ rt/minfo.d rt/monitor_.d rt/profilegc.d rt/sections.d rt/tlsgc.d \
+ rt/util/typeinfo.d rt/util/utility.d
DRUNTIME_DSOURCES_STDCXX = core/stdcpp/allocator.d core/stdcpp/array.d \
core/stdcpp/exception.d core/stdcpp/memory.d core/stdcpp/new_.d \
diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in
index 45e086a..24865fb 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -236,7 +236,7 @@ am__objects_1 = core/atomic.lo core/attribute.lo core/bitop.lo \
gcc/backtrace.lo gcc/builtins.lo gcc/deh.lo gcc/emutls.lo \
gcc/gthread.lo gcc/sections/common.lo gcc/sections/elf.lo \
gcc/sections/macho.lo gcc/sections/package.lo \
- gcc/sections/pecoff.lo gcc/unwind/arm.lo \
+ gcc/sections/pecoff.lo gcc/simd.lo gcc/unwind/arm.lo \
gcc/unwind/arm_common.lo gcc/unwind/c6x.lo \
gcc/unwind/generic.lo gcc/unwind/package.lo gcc/unwind/pe.lo \
object.lo rt/aApply.lo rt/aApplyR.lo rt/aaA.lo rt/adi.lo \
@@ -874,14 +874,14 @@ DRUNTIME_DSOURCES = core/atomic.d core/attribute.d core/bitop.d \
core/vararg.d core/volatile.d gcc/attribute.d gcc/attributes.d \
gcc/backtrace.d gcc/builtins.d gcc/deh.d gcc/emutls.d gcc/gthread.d \
gcc/sections/common.d gcc/sections/elf.d gcc/sections/macho.d \
- gcc/sections/package.d gcc/sections/pecoff.d gcc/unwind/arm.d \
- gcc/unwind/arm_common.d gcc/unwind/c6x.d gcc/unwind/generic.d \
- gcc/unwind/package.d gcc/unwind/pe.d object.d rt/aApply.d rt/aApplyR.d \
- rt/aaA.d rt/adi.d rt/arrayassign.d rt/arraycat.d rt/cast_.d \
- rt/config.d rt/critical_.d rt/deh.d rt/dmain2.d rt/ehalloc.d \
- rt/invariant.d rt/lifetime.d rt/memory.d rt/minfo.d rt/monitor_.d \
- rt/profilegc.d rt/sections.d rt/tlsgc.d rt/util/typeinfo.d \
- rt/util/utility.d
+ gcc/sections/package.d gcc/sections/pecoff.d gcc/simd.d \
+ gcc/unwind/arm.d gcc/unwind/arm_common.d gcc/unwind/c6x.d \
+ gcc/unwind/generic.d gcc/unwind/package.d gcc/unwind/pe.d object.d \
+ rt/aApply.d rt/aApplyR.d rt/aaA.d rt/adi.d rt/arrayassign.d \
+ rt/arraycat.d rt/cast_.d rt/config.d rt/critical_.d rt/deh.d \
+ rt/dmain2.d rt/ehalloc.d rt/invariant.d rt/lifetime.d rt/memory.d \
+ rt/minfo.d rt/monitor_.d rt/profilegc.d rt/sections.d rt/tlsgc.d \
+ rt/util/typeinfo.d rt/util/utility.d
DRUNTIME_DSOURCES_STDCXX = core/stdcpp/allocator.d core/stdcpp/array.d \
core/stdcpp/exception.d core/stdcpp/memory.d core/stdcpp/new_.d \
@@ -1340,6 +1340,7 @@ gcc/sections/elf.lo: gcc/sections/$(am__dirstamp)
gcc/sections/macho.lo: gcc/sections/$(am__dirstamp)
gcc/sections/package.lo: gcc/sections/$(am__dirstamp)
gcc/sections/pecoff.lo: gcc/sections/$(am__dirstamp)
+gcc/simd.lo: gcc/$(am__dirstamp)
gcc/unwind/$(am__dirstamp):
@$(MKDIR_P) gcc/unwind
@: > gcc/unwind/$(am__dirstamp)
diff --git a/libphobos/libdruntime/core/internal/parseoptions.d b/libphobos/libdruntime/core/internal/parseoptions.d
index 9920443..ed6251f 100644
--- a/libphobos/libdruntime/core/internal/parseoptions.d
+++ b/libphobos/libdruntime/core/internal/parseoptions.d
@@ -168,6 +168,7 @@ inout(char)[] find(alias pred)(inout(char)[] str)
}
bool parse(T : size_t)(const(char)[] optname, ref inout(char)[] str, ref T res, const(char)[] errName, bool mayHaveSuffix = false)
+if (is(T == size_t))
in { assert(str.length); }
do
{
@@ -242,6 +243,22 @@ do
if (v > res.max)
return parseError("a number " ~ T.max.stringof ~ " or below", optname, str[0 .. i], errName);
str = str[i .. $];
+ res = v;
+ return true;
+}
+
+bool parse(T : size_t)(const(char)[] optname, ref inout(char)[] str, ref T res, const(char)[] errName, bool mayHaveSuffix = false)
+if (!is(T == size_t))
+in { assert(str.length); }
+do
+{
+ const oldStr = str;
+ size_t v;
+ if (!parse!size_t(optname, str, v, errName, mayHaveSuffix))
+ return false;
+
+ if (v > res.max)
+ return parseError("a number " ~ T.max.stringof ~ " or below", optname, oldStr[0 .. $-str.length], errName);
res = cast(T) v;
return true;
}
diff --git a/libphobos/libdruntime/core/stdc/config.d b/libphobos/libdruntime/core/stdc/config.d
index 037af25..c576e99 100644
--- a/libphobos/libdruntime/core/stdc/config.d
+++ b/libphobos/libdruntime/core/stdc/config.d
@@ -185,6 +185,37 @@ else version (Posix)
alias ulong cpp_ulonglong;
}
}
+else version (WASI)
+{
+ static if ( (void*).sizeof > int.sizeof )
+ {
+ enum __c_longlong : long;
+ enum __c_ulonglong : ulong;
+
+ alias long c_long;
+ alias ulong c_ulong;
+
+ alias long cpp_long;
+ alias ulong cpp_ulong;
+
+ alias __c_longlong cpp_longlong;
+ alias __c_ulonglong cpp_ulonglong;
+ }
+ else
+ {
+ enum __c_long : int;
+ enum __c_ulong : uint;
+
+ alias int c_long;
+ alias uint c_ulong;
+
+ alias __c_long cpp_long;
+ alias __c_ulong cpp_ulong;
+
+ alias long cpp_longlong;
+ alias ulong cpp_ulonglong;
+ }
+}
version (GNU)
alias c_long_double = real;
diff --git a/libphobos/libdruntime/core/stdc/errno.d b/libphobos/libdruntime/core/stdc/errno.d
index 57bc15d..24b4138 100644
--- a/libphobos/libdruntime/core/stdc/errno.d
+++ b/libphobos/libdruntime/core/stdc/errno.d
@@ -2079,6 +2079,143 @@ else version (Haiku)
enum B_NO_TRANSLATOR = (B_TRANSLATION_ERROR_BASE + 1);
enum B_ILLEGAL_DATA = (B_TRANSLATION_ERROR_BASE + 2);
}
+else version (WASI)
+{
+ enum EPERM = 1;
+ enum ENOENT = 2;
+ enum ESRCH = 3;
+ enum EINTR = 4;
+ enum EIO = 5;
+ enum ENXIO = 6;
+ enum E2BIG = 7;
+ enum ENOEXEC = 8;
+ enum EBADF = 9;
+ enum ECHILD = 10;
+ enum EAGAIN = 11;
+ enum ENOMEM = 12;
+ enum EACCES = 13;
+ enum EFAULT = 14;
+ enum ENOTBLK = 15;
+ enum EBUSY = 16;
+ enum EEXIST = 17;
+ enum EXDEV = 18;
+ enum ENODEV = 19;
+ enum ENOTDIR = 20;
+ enum EISDIR = 21;
+ enum EINVAL = 22;
+ enum ENFILE = 23;
+ enum EMFILE = 24;
+ enum ENOTTY = 25;
+ enum ETXTBSY = 26;
+ enum EFBIG = 27;
+ enum ENOSPC = 28;
+ enum ESPIPE = 29;
+ enum EROFS = 30;
+ enum EMLINK = 31;
+ enum EPIPE = 32;
+ enum EDOM = 33;
+ enum ERANGE = 34;
+ enum EDEADLK = 35;
+ enum ENAMETOOLONG = 36;
+ enum ENOLCK = 37;
+ enum ENOSYS = 38;
+ enum ENOTEMPTY = 39;
+ enum ELOOP = 40;
+ enum EWOULDBLOCK = EAGAIN;
+ enum ENOMSG = 42;
+ enum EIDRM = 43;
+ enum ECHRNG = 44;
+ enum EL2NSYNC = 45;
+ enum EL3HLT = 46;
+ enum EL3RST = 47;
+ enum ELNRNG = 48;
+ enum EUNATCH = 49;
+ enum ENOCSI = 50;
+ enum EL2HLT = 51;
+ enum EBADE = 52;
+ enum EBADR = 53;
+ enum EXFULL = 54;
+ enum ENOANO = 55;
+ enum EBADRQC = 56;
+ enum EBADSLT = 57;
+ enum EDEADLOCK = EDEADLK;
+ enum EBFONT = 59;
+ enum ENOSTR = 60;
+ enum ENODATA = 61;
+ enum ETIME = 62;
+ enum ENOSR = 63;
+ enum ENONET = 64;
+ enum ENOPKG = 65;
+ enum EREMOTE = 66;
+ enum ENOLINK = 67;
+ enum EADV = 68;
+ enum ESRMNT = 69;
+ enum ECOMM = 70;
+ enum EPROTO = 71;
+ enum EMULTIHOP = 72;
+ enum EDOTDOT = 73;
+ enum EBADMSG = 74;
+ enum EOVERFLOW = 75;
+ enum ENOTUNIQ = 76;
+ enum EBADFD = 77;
+ enum EREMCHG = 78;
+ enum ELIBACC = 79;
+ enum ELIBBAD = 80;
+ enum ELIBSCN = 81;
+ enum ELIBMAX = 82;
+ enum ELIBEXEC = 83;
+ enum EILSEQ = 84;
+ enum ERESTART = 85;
+ enum ESTRPIPE = 86;
+ enum EUSERS = 87;
+ enum ENOTSOCK = 88;
+ enum EDESTADDRREQ = 89;
+ enum EMSGSIZE = 90;
+ enum EPROTOTYPE = 91;
+ enum ENOPROTOOPT = 92;
+ enum EPROTONOSUPPORT = 93;
+ enum ESOCKTNOSUPPORT = 94;
+ enum EOPNOTSUPP = 95;
+ enum ENOTSUP = EOPNOTSUPP;
+ enum EPFNOSUPPORT = 96;
+ enum EAFNOSUPPORT = 97;
+ enum EADDRINUSE = 98;
+ enum EADDRNOTAVAIL = 99;
+ enum ENETDOWN = 100;
+ enum ENETUNREACH = 101;
+ enum ENETRESET = 102;
+ enum ECONNABORTED = 103;
+ enum ECONNRESET = 104;
+ enum ENOBUFS = 105;
+ enum EISCONN = 106;
+ enum ENOTCONN = 107;
+ enum ESHUTDOWN = 108;
+ enum ETOOMANYREFS = 109;
+ enum ETIMEDOUT = 110;
+ enum ECONNREFUSED = 111;
+ enum EHOSTDOWN = 112;
+ enum EHOSTUNREACH = 113;
+ enum EALREADY = 114;
+ enum EINPROGRESS = 115;
+ enum ESTALE = 116;
+ enum EUCLEAN = 117;
+ enum ENOTNAM = 118;
+ enum ENAVAIL = 119;
+ enum EISNAM = 120;
+ enum EREMOTEIO = 121;
+ enum EDQUOT = 122;
+ enum ENOMEDIUM = 123;
+ enum EMEDIUMTYPE = 124;
+ enum ECANCELED = 125;
+ enum ENOKEY = 126;
+ enum EKEYEXPIRED = 127;
+ enum EKEYREVOKED = 128;
+ enum EKEYREJECTED = 129;
+ enum EOWNERDEAD = 130;
+ enum ENOTRECOVERABLE = 131;
+ enum ERFKILL = 132;
+ enum EHWPOISON = 133;
+}
else
{
static assert(false, "Unsupported platform");
diff --git a/libphobos/libdruntime/core/stdc/stdarg.d b/libphobos/libdruntime/core/stdc/stdarg.d
index 9a67f2e..646905e 100644
--- a/libphobos/libdruntime/core/stdc/stdarg.d
+++ b/libphobos/libdruntime/core/stdc/stdarg.d
@@ -47,6 +47,8 @@ version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
version (PPC64) version = PPC_Any;
+version (RISCV32) version = RISCV_Any;
+version (RISCV64) version = RISCV_Any;
version (GNU)
{
@@ -130,6 +132,12 @@ else version (AAPCS64)
{
alias va_list = core.internal.vararg.aarch64.va_list;
}
+else version (RISCV_Any)
+{
+ // The va_list type is void*, according to RISCV Calling Convention
+ // https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-cc.adoc
+ alias va_list = void*;
+}
else
{
alias va_list = char*; // incl. unknown platforms
@@ -259,6 +267,19 @@ T va_arg(T)(ref va_list ap)
ap += T.sizeof.alignUp;
return *p;
}
+ else version (RISCV_Any)
+ {
+ static if (T.sizeof > (size_t.sizeof << 1))
+ auto p = *cast(T**) ap;
+ else
+ {
+ static if (T.alignof == (size_t.sizeof << 1))
+ ap = ap.alignUp!(size_t.sizeof << 1);
+ auto p = cast(T*) ap;
+ }
+ ap += T.sizeof.alignUp;
+ return *p;
+ }
else
static assert(0, "Unsupported platform");
}
diff --git a/libphobos/libdruntime/core/stdc/stddef.d b/libphobos/libdruntime/core/stdc/stddef.d
index 1d1d962..56b3c9b 100644
--- a/libphobos/libdruntime/core/stdc/stddef.d
+++ b/libphobos/libdruntime/core/stdc/stddef.d
@@ -34,3 +34,8 @@ else version (Posix)
///
alias dchar wchar_t;
}
+else version (WASI)
+{
+ ///
+ alias dchar wchar_t;
+}
diff --git a/libphobos/libdruntime/core/stdc/stdint.d b/libphobos/libdruntime/core/stdc/stdint.d
index 556ac01..476c42f 100644
--- a/libphobos/libdruntime/core/stdc/stdint.d
+++ b/libphobos/libdruntime/core/stdc/stdint.d
@@ -377,6 +377,41 @@ else version (Solaris)
alias intmax_t = long; ///
alias uintmax_t = ulong; ///
}
+else version (WASI)
+{
+ alias int8_t = byte; ///
+ alias int16_t = short; ///
+ alias uint8_t = ubyte; ///
+ alias uint16_t = ushort; ///
+ alias int32_t = int; ///
+ alias uint32_t = uint; ///
+ alias int64_t = long; ///
+ alias uint64_t = ulong; ///
+
+ alias int_least8_t = byte; ///
+ alias uint_least8_t = ubyte; ///
+ alias int_least16_t = short; ///
+ alias uint_least16_t = ushort; ///
+ alias int_least32_t = int; ///
+ alias uint_least32_t = uint; ///
+ alias int_least64_t = long; ///
+ alias uint_least64_t = ulong; ///
+
+ alias int_fast8_t = byte; ///
+ alias uint_fast8_t = ubyte; ///
+ alias int_fast16_t = ptrdiff_t; ///
+ alias uint_fast16_t = size_t; ///
+ alias int_fast32_t = ptrdiff_t; ///
+ alias uint_fast32_t = size_t; ///
+
+ alias int_fast64_t = long; ///
+ alias uint_fast64_t = ulong; ///
+
+ alias intptr_t = ptrdiff_t; ///
+ alias uintptr_t = size_t; ///
+ alias intmax_t = long; ///
+ alias uintmax_t = ulong; ///
+}
else
{
static assert(false, "Unsupported architecture.");
diff --git a/libphobos/libdruntime/core/stdc/stdio.d b/libphobos/libdruntime/core/stdc/stdio.d
index cd53f0a..2e83811 100644
--- a/libphobos/libdruntime/core/stdc/stdio.d
+++ b/libphobos/libdruntime/core/stdc/stdio.d
@@ -347,6 +347,24 @@ else version (CRuntime_UClibc)
L_tmpnam = 20
}
}
+else version (WASI)
+{
+ enum
+ {
+ ///
+ BUFSIZ = 1024,
+ ///
+ EOF = -1,
+ ///
+ FOPEN_MAX = 1000,
+ ///
+ FILENAME_MAX = 4096,
+ ///
+ TMP_MAX = 10000,
+ ///
+ L_tmpnam = 20
+ }
+}
else
{
static assert( false, "Unsupported platform" );
@@ -449,6 +467,20 @@ else version (CRuntime_Glibc)
///
alias shared(_IO_FILE) FILE;
}
+else version (WASI)
+{
+ union fpos_t
+ {
+ char[16] __opaque = 0;
+ double __align;
+ }
+ struct _IO_FILE;
+
+ ///
+ alias _IO_FILE _iobuf; // needed for phobos
+ ///
+ alias shared(_IO_FILE) FILE;
+}
else version (CRuntime_Musl)
{
union fpos_t
@@ -1125,6 +1157,24 @@ else version (CRuntime_UClibc)
///
extern shared FILE* stderr;
}
+else version (WASI)
+{
+ // needs tail const
+ extern shared FILE* stdin;
+ ///
+ extern shared FILE* stdout;
+ ///
+ extern shared FILE* stderr;
+ enum
+ {
+ ///
+ _IOFBF = 0,
+ ///
+ _IOLBF = 1,
+ ///
+ _IONBF = 2,
+ }
+}
else
{
static assert( false, "Unsupported platform" );
@@ -1793,6 +1843,28 @@ else version (CRuntime_UClibc)
pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
+else version (WASI)
+{
+ // No unsafe pointer manipulation.
+ @trusted
+ {
+ ///
+ void rewind(FILE* stream);
+ ///
+ pure void clearerr(FILE* stream);
+ ///
+ pure int feof(FILE* stream);
+ ///
+ pure int ferror(FILE* stream);
+ ///
+ int fileno(FILE *);
+ }
+
+ ///
+ int snprintf(scope char* s, size_t n, scope const char* format, ...);
+ ///
+ int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
+}
else
{
static assert( false, "Unsupported platform" );
diff --git a/libphobos/libdruntime/core/stdc/stdlib.d b/libphobos/libdruntime/core/stdc/stdlib.d
index dbe55a4..920c311 100644
--- a/libphobos/libdruntime/core/stdc/stdlib.d
+++ b/libphobos/libdruntime/core/stdc/stdlib.d
@@ -99,6 +99,7 @@ else version (Solaris) enum RAND_MAX = 0x7fff;
else version (CRuntime_Bionic) enum RAND_MAX = 0x7fffffff;
else version (CRuntime_Musl) enum RAND_MAX = 0x7fffffff;
else version (CRuntime_UClibc) enum RAND_MAX = 0x7fffffff;
+else version (WASI) enum RAND_MAX = 0x7fffffff;
else static assert( false, "Unsupported platform" );
///
diff --git a/libphobos/libdruntime/core/sys/elf/package.d b/libphobos/libdruntime/core/sys/elf/package.d
index 69e5209..2dcfd20 100644
--- a/libphobos/libdruntime/core/sys/elf/package.d
+++ b/libphobos/libdruntime/core/sys/elf/package.d
@@ -2510,3 +2510,66 @@ enum R_TILEGX_GNU_VTINHERIT = 128;
enum R_TILEGX_GNU_VTENTRY = 129;
enum R_TILEGX_NUM = 130;
+
+enum EF_RISCV_RVC = 0x0001;
+enum EF_RISCV_FLOAT_ABI = 0x0006;
+enum EF_RISCV_FLOAT_ABI_SOFT = 0x0000;
+enum EF_RISCV_FLOAT_ABI_SINGLE = 0x0002;
+enum EF_RISCV_FLOAT_ABI_DOUBLE = 0x0004;
+enum EF_RISCV_FLOAT_ABI_QUAD = 0x0006;
+enum R_RISCV_NONE = 0;
+enum R_RISCV_32 = 1;
+enum R_RISCV_64 = 2;
+enum R_RISCV_RELATIVE = 3;
+enum R_RISCV_COPY = 4;
+enum R_RISCV_JUMP_SLOT = 5;
+enum R_RISCV_TLS_DTPMOD32 = 6;
+enum R_RISCV_TLS_DTPMOD64 = 7;
+enum R_RISCV_TLS_DTPREL32 = 8;
+enum R_RISCV_TLS_DTPREL64 = 9;
+enum R_RISCV_TLS_TPREL32 = 10;
+enum R_RISCV_TLS_TPREL64 = 11;
+enum R_RISCV_BRANCH = 16;
+enum R_RISCV_JAL = 17;
+enum R_RISCV_CALL = 18;
+enum R_RISCV_CALL_PLT = 19;
+enum R_RISCV_GOT_HI20 = 20;
+enum R_RISCV_TLS_GOT_HI20 = 21;
+enum R_RISCV_TLS_GD_HI20 = 22;
+enum R_RISCV_PCREL_HI20 = 23;
+enum R_RISCV_PCREL_LO12_I = 24;
+enum R_RISCV_PCREL_LO12_S = 25;
+enum R_RISCV_HI20 = 26;
+enum R_RISCV_LO12_I = 27;
+enum R_RISCV_LO12_S = 28;
+enum R_RISCV_TPREL_HI20 = 29;
+enum R_RISCV_TPREL_LO12_I = 30;
+enum R_RISCV_TPREL_LO12_S = 31;
+enum R_RISCV_TPREL_ADD = 32;
+enum R_RISCV_ADD8 = 33;
+enum R_RISCV_ADD16 = 34;
+enum R_RISCV_ADD32 = 35;
+enum R_RISCV_ADD64 = 36;
+enum R_RISCV_SUB8 = 37;
+enum R_RISCV_SUB16 = 38;
+enum R_RISCV_SUB32 = 39;
+enum R_RISCV_SUB64 = 40;
+enum R_RISCV_GNU_VTINHERIT = 41;
+enum R_RISCV_GNU_VTENTRY = 42;
+enum R_RISCV_ALIGN = 43;
+enum R_RISCV_RVC_BRANCH = 44;
+enum R_RISCV_RVC_JUMP = 45;
+enum R_RISCV_RVC_LUI = 46;
+enum R_RISCV_GPREL_I = 47;
+enum R_RISCV_GPREL_S = 48;
+enum R_RISCV_TPREL_I = 49;
+enum R_RISCV_TPREL_S = 50;
+enum R_RISCV_RELAX = 51;
+enum R_RISCV_SUB6 = 52;
+enum R_RISCV_SET6 = 53;
+enum R_RISCV_SET8 = 54;
+enum R_RISCV_SET16 = 55;
+enum R_RISCV_SET32 = 56;
+enum R_RISCV_32_PCREL = 57;
+enum R_RISCV_IRELATIVE = 58;
+enum R_RISCV_NUM = 59;
diff --git a/libphobos/libdruntime/core/sys/posix/fcntl.d b/libphobos/libdruntime/core/sys/posix/fcntl.d
index 3c196d2..dc0a183 100644
--- a/libphobos/libdruntime/core/sys/posix/fcntl.d
+++ b/libphobos/libdruntime/core/sys/posix/fcntl.d
@@ -123,6 +123,12 @@ version (linux)
enum F_SETLK = 6;
enum F_SETLKW = 7;
}
+ else version (RISCV64)
+ {
+ enum F_GETLK = 5;
+ enum F_SETLK = 6;
+ enum F_SETLKW = 7;
+ }
else version (SystemZ)
{
static assert(off_t.sizeof == 8);
diff --git a/libphobos/libdruntime/core/sys/windows/winsock2.d b/libphobos/libdruntime/core/sys/windows/winsock2.d
index 55a45be..8a4b1fd 100644
--- a/libphobos/libdruntime/core/sys/windows/winsock2.d
+++ b/libphobos/libdruntime/core/sys/windows/winsock2.d
@@ -45,15 +45,15 @@ enum NI_MAXSERV = 32;
@nogc
{
int WSAStartup(ushort wVersionRequested, LPWSADATA lpWSAData);
-int WSACleanup();
-SOCKET socket(int af, int type, int protocol);
+@trusted int WSACleanup();
+@trusted SOCKET socket(int af, int type, int protocol);
int ioctlsocket(SOCKET s, int cmd, uint* argp);
int bind(SOCKET s, const(sockaddr)* name, socklen_t namelen);
int connect(SOCKET s, const(sockaddr)* name, socklen_t namelen);
-int listen(SOCKET s, int backlog);
+@trusted int listen(SOCKET s, int backlog);
SOCKET accept(SOCKET s, sockaddr* addr, socklen_t* addrlen);
-int closesocket(SOCKET s);
-int shutdown(SOCKET s, int how);
+@trusted int closesocket(SOCKET s);
+@trusted int shutdown(SOCKET s, int how);
int getpeername(SOCKET s, sockaddr* name, socklen_t* namelen);
int getsockname(SOCKET s, sockaddr* name, socklen_t* namelen);
int send(SOCKET s, const(void)* buf, int len, int flags);
@@ -64,11 +64,11 @@ int getsockopt(SOCKET s, int level, int optname, void* optval, socklen_t* optlen
int setsockopt(SOCKET s, int level, int optname, const(void)* optval, socklen_t optlen);
uint inet_addr(const char* cp);
int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, const(timeval)* timeout);
-char* inet_ntoa(in_addr ina);
+@trusted char* inet_ntoa(in_addr ina);
hostent* gethostbyname(const char* name);
hostent* gethostbyaddr(const(void)* addr, int len, int type);
protoent* getprotobyname(const char* name);
-protoent* getprotobynumber(int number);
+@trusted protoent* getprotobynumber(int number);
servent* getservbyname(const char* name, const char* proto);
servent* getservbyport(int port, const char* proto);
}
diff --git a/libphobos/libdruntime/core/thread/osthread.d b/libphobos/libdruntime/core/thread/osthread.d
index ef073a9..415430c 100644
--- a/libphobos/libdruntime/core/thread/osthread.d
+++ b/libphobos/libdruntime/core/thread/osthread.d
@@ -2104,7 +2104,7 @@ private extern (D) void resume(ThreadBase _t) nothrow @nogc
* garbage collector on startup and before any other thread routines
* are called.
*/
-extern (C) void thread_init() @nogc
+extern (C) void thread_init() @nogc nothrow
{
// NOTE: If thread_init itself performs any allocations then the thread
// routines reserved for garbage collector use may be called while
@@ -2130,6 +2130,15 @@ extern (C) void thread_init() @nogc
}
else version (Posix)
{
+ version (OpenBSD)
+ {
+ // OpenBSD does not support SIGRTMIN or SIGRTMAX
+ // Use SIGUSR1 for SIGRTMIN, SIGUSR2 for SIGRTMIN + 1
+ // And use 32 for SIGRTMAX (32 is the max signal number on OpenBSD)
+ enum SIGRTMIN = SIGUSR1;
+ enum SIGRTMAX = 32;
+ }
+
if ( suspendSignalNumber == 0 )
{
suspendSignalNumber = SIGRTMIN;
@@ -2191,7 +2200,7 @@ package __gshared align(__traits(classInstanceAlignment, Thread)) MainThreadStor
* Terminates the thread module. No other thread routine may be called
* afterwards.
*/
-extern (C) void thread_term() @nogc
+extern (C) void thread_term() @nogc nothrow
{
thread_term_tpl!(Thread)(_mainThreadStore);
}
diff --git a/libphobos/libdruntime/core/thread/threadbase.d b/libphobos/libdruntime/core/thread/threadbase.d
index 217a33a..909bffc 100644
--- a/libphobos/libdruntime/core/thread/threadbase.d
+++ b/libphobos/libdruntime/core/thread/threadbase.d
@@ -569,14 +569,14 @@ package(core.thread):
__gshared align(mutexAlign) void[mutexClassInstanceSize] _slock;
__gshared align(mutexAlign) void[mutexClassInstanceSize] _criticalRegionLock;
- static void initLocks() @nogc
+ static void initLocks() @nogc nothrow
{
import core.lifetime : emplace;
emplace!Mutex(_slock[]);
emplace!Mutex(_criticalRegionLock[]);
}
- static void termLocks() @nogc
+ static void termLocks() @nogc nothrow
{
(cast(Mutex)_slock.ptr).__dtor();
(cast(Mutex)_criticalRegionLock.ptr).__dtor();
@@ -756,13 +756,13 @@ package(core.thread):
private alias attachThread = externDFunc!("core.thread.osthread.attachThread", ThreadBase function(ThreadBase) @nogc nothrow);
-extern (C) void _d_monitordelete_nogc(Object h) @nogc;
+extern (C) void _d_monitordelete_nogc(Object h) @nogc nothrow;
/**
* Terminates the thread module. No other thread routine may be called
* afterwards.
*/
-package void thread_term_tpl(ThreadT, MainThreadStore)(ref MainThreadStore _mainThreadStore) @nogc
+package void thread_term_tpl(ThreadT, MainThreadStore)(ref MainThreadStore _mainThreadStore) @nogc nothrow
{
assert(_mainThreadStore.ptr is cast(void*) ThreadBase.sm_main);
@@ -1332,13 +1332,13 @@ package
return cast(Mutex)ll_lock.ptr;
}
- void initLowlevelThreads() @nogc
+ void initLowlevelThreads() @nogc nothrow
{
import core.lifetime : emplace;
emplace(lowlevelLock());
}
- void termLowlevelThreads() @nogc
+ void termLowlevelThreads() @nogc nothrow
{
lowlevelLock.__dtor();
}
diff --git a/libphobos/libdruntime/core/time.d b/libphobos/libdruntime/core/time.d
index 91f218e..9b8391e 100644
--- a/libphobos/libdruntime/core/time.d
+++ b/libphobos/libdruntime/core/time.d
@@ -2488,7 +2488,7 @@ private immutable long[__traits(allMembers, ClockType).length] _ticksPerSecond;
// https://issues.dlang.org/show_bug.cgi?id=14863
// The assert will occur when someone attempts to use _ticksPerSecond for that
// value.
-extern(C) void _d_initMonoTime()
+extern(C) void _d_initMonoTime() @nogc nothrow
{
// We need a mutable pointer to the ticksPerSecond array. Although this
// would appear to break immutability, it is logically the same as a static
@@ -3823,7 +3823,7 @@ unittest
}
version (Darwin)
-long machTicksPerSecond()
+long machTicksPerSecond() @nogc nothrow
{
// Be optimistic that ticksPerSecond (1e9*denom/numer) is integral. So far
// so good on Darwin based platforms OS X, iOS.
diff --git a/libphobos/libdruntime/core/vararg.d b/libphobos/libdruntime/core/vararg.d
index 935b2bd..2c3e965 100644
--- a/libphobos/libdruntime/core/vararg.d
+++ b/libphobos/libdruntime/core/vararg.d
@@ -28,6 +28,8 @@ version (MIPS32) version = MIPS_Any;
version (MIPS64) version = MIPS_Any;
version (PPC) version = PPC_Any;
version (PPC64) version = PPC_Any;
+version (RISCV32) version = RISCV_Any;
+version (RISCV64) version = RISCV_Any;
version (ARM_Any)
{
@@ -136,6 +138,21 @@ void va_arg()(ref va_list ap, TypeInfo ti, void* parmn)
ap += tsize.alignUp;
parmn[0..tsize] = p[0..tsize];
}
+ else version (RISCV_Any)
+ {
+ const tsize = ti.tsize;
+ void* p;
+ if (tsize > (size_t.sizeof << 1))
+ p = *cast(void**) ap;
+ else
+ {
+ if (tsize == (size_t.sizeof << 1))
+ ap = ap.alignUp!(size_t.sizeof << 1);
+ p = cast(void*) ap;
+ }
+ ap += tsize.alignUp;
+ parmn[0..tsize] = p[0..tsize];
+ }
else
static assert(0, "Unsupported platform");
}
diff --git a/libphobos/libdruntime/gcc/attributes.d b/libphobos/libdruntime/gcc/attributes.d
index 710e8ab..9d7f2e1 100644
--- a/libphobos/libdruntime/gcc/attributes.d
+++ b/libphobos/libdruntime/gcc/attributes.d
@@ -302,6 +302,34 @@ auto optimize(A...)(A arguments)
}
/**
+ * The `@register` attribute specifies that a local or `__gshared` variable
+ * is to be given a register storage-class in the C99 sense of the term, and
+ * will be placed into a register named `registerName`.
+ *
+ * The variable needs to boiled down to a data type that fits the target
+ * register. It also cannot have either thread-local or `extern` storage.
+ * It is an error to take the address of a register variable.
+ *
+ * Example:
+ * ---
+ * import gcc.attributes;
+ *
+ * @register("ebx") __gshared int ebx = void;
+ *
+ * void func() { @register("r10") long r10 = 0x2a; }
+ * ---
+ */
+auto register(string registerName)
+{
+ return attribute("register", registerName);
+}
+
+auto register(A...)(A arguments)
+{
+ assert(false, "register attribute argument not a string constant");
+}
+
+/**
* The `@restrict` attribute specifies that a function parameter is to be
* restrict-qualified in the C99 sense of the term. The parameter needs to
* boil down to either a pointer or reference type, such as a D pointer,
@@ -344,6 +372,46 @@ auto section(A...)(A arguments)
}
/**
+ * The `@simd` attribute enables creation of one or more function versions that
+ * can process multiple arguments using SIMD instructions from a single
+ * invocation. Specifying this attribute allows compiler to assume that such
+ * versions are available at link time (provided in the same or another module).
+ * Generated versions are target-dependent and described in the corresponding
+ * Vector ABI document. For x86_64 target this document can be found here.
+ * https://sourceware.org/glibc/wiki/libmvec?action=AttachFile&do=view&target=VectorABI.txt
+ *
+ * The `@simd_clones` attribute is the same as `@simd`, but also includes a
+ * `mask` argument. Valid masks values are `notinbranch` or `inbranch`, and
+ * instructs the compiler to generate non-masked or masked clones
+ * correspondingly.
+ *
+ * Example:
+ * ---
+ * import gcc.attributes;
+ *
+ * @simd double sqrt(double x);
+ * @simd("notinbranch") double atan2(double y, double x);
+ * ---
+ */
+enum simd = attribute("simd");
+
+auto simd_clones(string mask)
+{
+ if (mask == "notinbranch" || mask == "inbranch")
+ return attribute("simd", mask);
+ else
+ {
+ assert(false, "unrecognized parameter `" ~ mask
+ ~ "` for `gcc.attribute.simd_clones`");
+ }
+}
+
+auto simd_clones(A...)(A arguments)
+{
+ assert(false, "simd_clones attribute argument not a string constant");
+}
+
+/**
* The `@symver` attribute creates a symbol version on ELF targets. The syntax
* of the string parameter is `name@nodename`. The `name` part of the parameter
* is the actual name of the symbol by which it will be externally referenced.
diff --git a/libphobos/libdruntime/gcc/simd.d b/libphobos/libdruntime/gcc/simd.d
new file mode 100644
index 0000000..ffca50f
--- /dev/null
+++ b/libphobos/libdruntime/gcc/simd.d
@@ -0,0 +1,359 @@
+// GNU D Compiler SIMD support functions and intrinsics.
+// Copyright (C) 2022 Free Software Foundation, Inc.
+
+// 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.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+module gcc.simd;
+
+pure:
+nothrow:
+@safe:
+@nogc:
+pragma(inline, true):
+
+/**
+* Emit prefetch instruction.
+* Params:
+* address = address to be prefetched
+* writeFetch = true for write fetch, false for read fetch
+* locality = 0..3 (0 meaning least local, 3 meaning most local)
+*/
+void prefetch(bool writeFetch, ubyte locality)(const(void)* address)
+{
+ static assert(locality < 4, "0..3 expected for locality");
+ import gcc.builtins : __builtin_prefetch;
+ __builtin_prefetch(address, writeFetch, locality);
+}
+
+/**
+ * Load unaligned vector from address.
+ * This is a compiler intrinsic.
+ * Params:
+ * p = pointer to vector
+ * Returns:
+ * vector
+ */
+V loadUnaligned(V)(const V* p) if (isVectorType!V);
+
+/**
+ * Store vector to unaligned address.
+ * This is a compiler intrinsic.
+ * Params:
+ * p = pointer to vector
+ * value = value to store
+ * Returns:
+ * value
+ */
+V storeUnaligned(V)(V* p, V value) if (isVectorType!V);
+
+/**
+ * Construct a permutation of elements from one or two vectors, returning a
+ * vector of the same type as the input vector(s). The `mask` is an integral
+ * vector with the same width and element count as the output vector.
+ * Params:
+ * op1 = input vector
+ * op2 = input vector
+ * mask = integer vector mask
+ * Returns:
+ * vector with the same type as `op1` and `op2`
+ * Example:
+ * ---
+ * int4 a = [1, 2, 3, 4];
+ * int4 b = [5, 6, 7, 8];
+ * int4 mask1 = [0, 1, 1, 3];
+ * int4 mask2 = [0, 4, 2, 5];
+ * assert(shuffle(a, mask1).array == [1, 2, 2, 4]);
+ * assert(shuffle(a, b, mask2).array == [1, 5, 3, 6]);
+ * ---
+ */
+template shuffle(V0, V1, M)
+{
+ static assert(isVectorType!V0, "first argument must be vector");
+ static assert(isVectorType!V1, "second argument must be vector");
+ static assert(is(BaseType!V0 == BaseType!V1),
+ "first and second argument vectors must have the same element type");
+ static assert(isVectorType!M && is(BaseType!M : long),
+ "last argument must be an integer vector");
+ static assert(numElements!V0 == numElements!M && numElements!V1 == numElements!M,
+ "argument vectors and mask vector should have the same number of elements");
+ static assert(BaseType!V0.sizeof == BaseType!M.sizeof,
+ "argument vectors and mask vector should have the same element type size");
+
+ V0 shuffle(V0 op1, V1 op2, M mask);
+}
+
+/// Ditto
+template shuffle(V, M)
+{
+ static assert(isVectorType!V, "first argument must be a vector");
+ static assert(isVectorType!M && is(BaseType!M : long),
+ "last argument must be an integer vector");
+ static assert(numElements!V == numElements!M,
+ "argument vector and mask vector should have the same number of elements");
+ static assert(BaseType!V.sizeof == BaseType!M.sizeof,
+ "argument vector and mask vector should have the same element type size");
+
+ V shuffle(V op1, M mask)
+ {
+ return shuffle(op1, op1, mask);
+ }
+}
+
+/**
+ * Construct a permutation of elements from two vectors, returning a vector with
+ * the same element type as the input vector(s), and same length as the `mask`.
+ * Params:
+ * op1 = input vector
+ * op2 = input vector
+ * index = elements indices of the vectors that should be extracted and returned
+ * Returns:
+ * vector with the same element type as `op1` and `op2`, but has an element count
+ * equal to the number of indices in `index`.
+ * Example:
+ * ---
+ * int8 a = [1, -2, 3, -4, 5, -6, 7, -8];
+ * int4 b = shufflevector(a, a, 0, 2, 4, 6);
+ * assert(b.array == [1, 3, 5, 7]);
+ * int4 c = [-2, -4, -6, -8];
+ * int d = shufflevector(c, b, 4, 0, 5, 1, 6, 2, 7, 3);
+ * assert(d.array == a.array);
+ * ---
+ */
+template shufflevector(V1, V2, M...)
+{
+ static assert(isVectorType!V1, "first argument must be vector");
+ static assert(isVectorType!V2, "second argument must be vector");
+ static assert(is(BaseType!V1 == BaseType!V2),
+ "first and second argument vectors must have the same element type");
+ static assert(isPowerOf2!(M.length),
+ "number of index arguments must be a power of 2");
+
+ __vector(BaseType!V1[M.length]) shufflevector(V1 op1, V2 op2, M index);
+}
+
+/// Ditto
+template shufflevector(V, index...)
+{
+ // Defined for compatibility with LDC.
+ static assert(isVectorType!V, "first argument must be a vector type");
+ static assert(numElements!V == index.length,
+ "number of index arguments must be the same number of vector elements");
+
+ private template ctfeConstants(m...)
+ {
+ static if (m.length == 0) enum ctfeConstants = 1;
+ else enum ctfeConstants = m[0] | ctfeConstants!(m[1 .. $]);
+ }
+ static assert(__traits(compiles, ctfeConstants!index),
+ "all index arguments must be compile time constants");
+
+ private template validIndexes(m...)
+ {
+ static if (m.length == 0) enum validIndexes = true;
+ else enum validIndexes = (cast(long)m[0] > -1) && validIndexes!(m[1 .. $]);
+ }
+ static assert(validIndexes!index,
+ "all index arguments must be greater than or equal to 0");
+
+ V shufflevector(V op1, V op2)
+ {
+ return shufflevector(op1, op2, index);
+ }
+}
+
+/**
+ * Extracts a single scalar element from a vector at a specified index.
+ * Defined for compatibility with LDC.
+ * Params:
+ * val = vector to extract element from
+ * idx = index indicating the position from which to extract the element
+ * Returns:
+ * scalar of the same type as the element type of val
+ * Example:
+ * ---
+ * int4 a = [0, 10, 20, 30];
+ * int k = extractelement!(int4, 2)(a);
+ * assert(k == 20);
+ * ---
+ */
+BaseType!V extractelement(V, int idx)(V val)
+ if (isVectorType!V && idx < numElements!V)
+{
+ return val[idx];
+}
+
+/**
+ * Inserts a scalar element into a vector at a specified index.
+ * Defined for compatibility with LDC.
+ * Params:
+ * val = vector to assign element to
+ * elt = scalar whose type is the element type of val
+ * idx = index indicating the position from which to extract the element
+ * Returns:
+ * vector of the same type as val
+ * Example:
+ * ---
+ * int4 a = [0, 10, 20, 30];
+ * int4 b = insertelement!(int4, 2)(a, 50);
+ * assert(b.array == [0, 10, 50, 30]);
+ * ---
+ */
+V insertelement(V, int idx)(V val, BaseType!V elt)
+ if (isVectorType!V && idx < numElements!V)
+{
+ val[idx] = elt;
+ return val;
+}
+
+/**
+ * Convert a vector from one integral or floating vector type to another.
+ * The result is an integral or floating vector that has had every element
+ * cast to the element type of the return type.
+ * Params:
+ * from = input vector
+ * Returns:
+ * converted vector
+ * Example:
+ * ---
+ * int4 a = [1, -2, 3, -4];
+ * float4 b = [1.5, -2.5, 3, 7];
+ * assert(convertvector!float4(a).array == [1, -2, 3, -4]);
+ * assert(convertvector!double4(a).array == [1, -2, 3, -4]);
+ * assert(convertvector!double4(b).array == [1.5, -2.5, 3, 7]);
+ * assert(convertvector!int4(b).array == [1, -2, 3, 7]);
+ * ---
+ */
+
+template convertvector(V, T)
+{
+ static assert(isVectorType!V && (is(BaseType!V : long) || is(BaseType!V : real)),
+ "first argument must be an integer or floating vector type");
+ static assert(isVectorType!T && (is(BaseType!T : long) || is(BaseType!T : real)),
+ "second argument must be an integer or floating vector");
+ static assert(numElements!V == numElements!T,
+ "first and second argument vectors should have the same number of elements");
+
+ V convertvector(T);
+}
+
+/**
+ * Construct a conditional merge of elements from two vectors, returning a
+ * vector of the same type as the input vector(s). The `mask` is an integral
+ * vector with the same width and element count as the output vector.
+ * Params:
+ * op1 = input vector
+ * op2 = input vector
+ * mask = integer vector mask
+ * Returns:
+ * vector with the same type as `op1` and `op2`
+ * Example:
+ * ---
+ * int4 a = [1, 2, 3, 4];
+ * int4 b = [5, 6, 7, 8];
+ * int4 mask1 = [0, 1, 1, 3];
+ * int4 mask2 = [0, 4, 2, 5];
+ * assert(shuffle(a, mask1).array == [1, 2, 2, 4]);
+ * assert(shuffle(a, b, mask2).array == [1, 5, 3, 6]);
+ * ---
+ */
+template blendvector(V0, V1, M)
+{
+ static assert(isVectorType!V0, "first argument must be vector");
+ static assert(isVectorType!V1, "second argument must be vector");
+ static assert(is(BaseType!V0 == BaseType!V1),
+ "first and second argument vectors must have the same element type");
+ static assert(isVectorType!M && is(BaseType!M : long),
+ "last argument must be an integer vector");
+ static assert(numElements!V0 == numElements!M && numElements!V1 == numElements!M,
+ "argument vectors and mask vector should have the same number of elements");
+ static assert(BaseType!V0.sizeof == BaseType!M.sizeof,
+ "argument vectors and mask vector should have the same element type size");
+
+ V0 blendvector(V0 op1, V1 op2, M mask);
+}
+
+/**
+ * Perform an element-wise comparison between two vectors, producing `0` when
+ * the comparison is false and `-1` (all bits are set to 1) otherwise.
+ * Params:
+ * op1 = input vector
+ * op2 = input vector
+ * Returns:
+ * vector of the same width and number of elements as the comparison
+ * operands with a signed integral element type
+ * Example:
+ * ---
+ * float4 a = [1, 3, 5, 7];
+ * float4 b = [2, 3, 4, 5];
+ * int4 c = greaterMask!float4(a, b);
+ * assert(c.array == [0, 0, -1, -1]);
+ * ---
+ */
+V equalMask(V)(V op1, V op2) if (isVectorType!V);
+/// Ditto
+V notEqualMask(V)(V op1, V op2) if (isVectorType!V);
+/// Ditto
+V greaterMask(V)(V op1, V op2) if (isVectorType!V);
+/// Ditto
+V greaterOrEqualMask(V)(V op1, V op2) if (isVectorType!V);
+
+/**
+ * Perform an element-wise logical comparison between two vectors, producing
+ * `0` when the comparison is false and `-1` (all bits are set to 1) otherwise.
+ * Params:
+ * op1 = input vector
+ * op2 = input vector
+ * Returns:
+ * vector of the same width and number of elements as the comparison
+ * operands with a signed integral element type
+ */
+V notMask(V)(V op1) if (isVectorType!V)
+{
+ return equalMask(op1, 0);
+}
+
+/// Ditto
+V andAndMask(V)(V op1, V op2) if (isVectorType!V)
+{
+ return notEqualMask(op1, 0) & notEqualMask(op2, 0);
+}
+
+/// Ditto
+V orOrMask(V)(V op1, V op2) if (isVectorType!V)
+{
+ return notEqualMask(op1, 0) | notEqualMask(op2, 0);
+}
+
+// Private helper templates.
+private:
+
+enum bool isVectorType(T) = is(T : __vector(V[N]), V, size_t N);
+
+template BaseType(V)
+{
+ alias typeof(V.array[0]) BaseType;
+}
+
+template numElements(V)
+{
+ enum numElements = V.sizeof / BaseType!(V).sizeof;
+}
+
+enum bool isPowerOf2(int Y) = Y && (Y & -Y) == Y;
diff --git a/libphobos/libdruntime/rt/aApply.d b/libphobos/libdruntime/rt/aApply.d
index bea441f..5d5ddb3 100644
--- a/libphobos/libdruntime/rt/aApply.d
+++ b/libphobos/libdruntime/rt/aApply.d
@@ -1,7 +1,5 @@
/**
- * This code handles decoding UTF strings for foreach loops. There are 6
- * combinations of conversions between char, wchar, and dchar, and 2 of each
- * of those.
+ * This code handles decoding UTF strings for foreach loops.
*
* Copyright: Copyright Digital Mars 2004 - 2010.
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
@@ -15,9 +13,64 @@ import core.internal.utf : decode, toUTF8;
/**********************************************/
/* 1 argument versions */
-// dg is D, but _aApplycd() is C
-extern (D) alias int delegate(void *) dg_t;
+/**
+Delegate type corresponding to transformed loop body
+
+The parameter is a pointer to the current `char`, `wchar` or `dchar`
+
+Returns: non-zero when a `break` statement is hit
+*/
+extern (D) alias dg_t = int delegate(void* c);
+
+// Note: dg is extern(D), but _aApplycd() is extern(C)
+
+/**
+Loop over a string while changing the UTF encoding
+
+There are 6 combinations of conversions between `char`, `wchar`, and `dchar`,
+and 2 of each of those.
+
+The naming convention is as follows:
+
+_aApply{c,d,w}{c,d,w}{1,2}
+The first letter corresponds to the input string encoding, and the second letter corresponds to the target character type.
+
+- c = `char`
+- w = `wchar`
+- d = `dchar`
+
+The `1` variant only produces the character, the `2` variant also produces a loop index.
+
+Examples:
+---
+void main()
+{
+ string str;
+ wtring wstr;
+ dstring dstr;
+
+ foreach (dchar c; str) {}
+ // _aApplycd1
+
+ foreach (wchar c; dstr) {}
+ // _aApplydw1
+
+ foreach (i, wchar c; str) {}
+ // _aApplycw2
+
+ foreach (wchar w; wstr) {}
+ // no conversion
+}
+---
+
+Params:
+ aa = input string
+ dg = foreach body transformed into a delegate, similar to `opApply`
+
+Returns:
+ non-zero when the loop was exited through a `break`
+*/
extern (C) int _aApplycd1(in char[] aa, dg_t dg)
{
int result;
@@ -78,8 +131,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplywd1(in wchar[] aa, dg_t dg)
{
int result;
@@ -140,8 +192,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplycw1(in char[] aa, dg_t dg)
{
int result;
@@ -215,8 +266,7 @@ unittest
assert(i == 5);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplywc1(in wchar[] aa, dg_t dg)
{
int result;
@@ -296,8 +346,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplydc1(in dchar[] aa, dg_t dg)
{
int result;
@@ -373,8 +422,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplydw1(in dchar[] aa, dg_t dg)
{
int result;
@@ -446,9 +494,20 @@ unittest
/****************************************************************************/
/* 2 argument versions */
-// dg is D, but _aApplycd2() is C
-extern (D) alias int delegate(void *, void *) dg2_t;
+/**
+Delegate type corresponding to transformed loop body
+
+Parameters are pointers to a `size_t` loop index, and the current `char`, `wchar` or `dchar`.
+Returns: non-zero when a `break` statement is hit
+*/
+extern (D) alias dg2_t = int delegate(void* i, void* c);
+
+// Note: dg is extern(D), but _aApplycd2() is extern(C)
+
+/**
+Variants of _aApplyXXX that include a loop index.
+*/
extern (C) int _aApplycd2(in char[] aa, dg2_t dg)
{
int result;
@@ -516,8 +575,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplywd2(in wchar[] aa, dg2_t dg)
{
int result;
@@ -585,8 +643,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplycw2(in char[] aa, dg2_t dg)
{
int result;
@@ -665,8 +722,7 @@ unittest
assert(i == 5);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplywc2(in wchar[] aa, dg2_t dg)
{
int result;
@@ -751,8 +807,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplydc2(in dchar[] aa, dg2_t dg)
{
int result;
@@ -832,8 +887,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplydw2(in dchar[] aa, dg2_t dg)
{ int result;
diff --git a/libphobos/libdruntime/rt/aApplyR.d b/libphobos/libdruntime/rt/aApplyR.d
index 7f19fa8..ce3bb9e 100644
--- a/libphobos/libdruntime/rt/aApplyR.d
+++ b/libphobos/libdruntime/rt/aApplyR.d
@@ -1,7 +1,5 @@
/**
- * This code handles decoding UTF strings for foreach_reverse loops. There are
- * 6 combinations of conversions between char, wchar, and dchar, and 2 of each
- * of those.
+ * This code handles decoding UTF strings for `foreach_reverse` loops.
*
* Copyright: Copyright Digital Mars 2004 - 2010.
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
@@ -15,9 +13,27 @@ import core.internal.utf;
/**********************************************/
/* 1 argument versions */
-// dg is D, but _aApplyRcd() is C
-extern (D) alias int delegate(void *) dg_t;
+// Note: dg is extern(D), but _aApplyRcd() is extern(C)
+/**
+Delegate type corresponding to transformed loop body
+
+The parameter is a pointer to the current `char`, `wchar` or `dchar`
+
+Returns: non-zero when a `break` statement is hit
+*/
+extern (D) alias dg_t = int delegate(void* c);
+
+/**
+Same as `_aApplyXXX` functions, but for `foreach_reverse`
+
+Params:
+ aa = input string
+ dg = foreach body transformed into a delegate, similar to `opApply`
+
+Returns:
+ non-zero when the loop was exited through a `break`
+*/
extern (C) int _aApplyRcd1(in char[] aa, dg_t dg)
{ int result;
@@ -90,8 +106,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRwd1(in wchar[] aa, dg_t dg)
{ int result;
@@ -154,8 +169,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRcw1(in char[] aa, dg_t dg)
{ int result;
@@ -241,8 +255,7 @@ unittest
assert(i == 5);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRwc1(in wchar[] aa, dg_t dg)
{ int result;
@@ -326,8 +339,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRdc1(in dchar[] aa, dg_t dg)
{ int result;
@@ -405,8 +417,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRdw1(in dchar[] aa, dg_t dg)
{ int result;
@@ -477,9 +488,20 @@ unittest
/****************************************************************************/
/* 2 argument versions */
-// dg is D, but _aApplyRcd2() is C
-extern (D) alias int delegate(void *, void *) dg2_t;
+/**
+Delegate type corresponding to transformed loop body
+
+Parameters are pointers to a `size_t` loop index, and the current `char`, `wchar` or `dchar`.
+Returns: non-zero when a `break` statement is hit
+*/
+extern (D) alias dg2_t = int delegate(void* i, void* c);
+
+// Note: dg is extern(D), but _aApplyRcd2() is extern(C)
+
+/**
+Variants of _aApplyRXXX that include a loop index.
+*/
extern (C) int _aApplyRcd2(in char[] aa, dg2_t dg)
{ int result;
size_t i;
@@ -555,8 +577,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRwd2(in wchar[] aa, dg2_t dg)
{ int result;
@@ -621,8 +642,7 @@ unittest
assert(i == 4);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRcw2(in char[] aa, dg2_t dg)
{ int result;
@@ -710,8 +730,7 @@ unittest
assert(i == 5);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRwc2(in wchar[] aa, dg2_t dg)
{ int result;
@@ -797,8 +816,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRdc2(in dchar[] aa, dg2_t dg)
{ int result;
@@ -877,8 +895,7 @@ unittest
assert(i == 9);
}
-/*****************************/
-
+/// ditto
extern (C) int _aApplyRdw2(in dchar[] aa, dg2_t dg)
{ int result;
diff --git a/libphobos/libdruntime/rt/aaA.d b/libphobos/libdruntime/rt/aaA.d
index ab93f19..f264b01 100644
--- a/libphobos/libdruntime/rt/aaA.d
+++ b/libphobos/libdruntime/rt/aaA.d
@@ -50,7 +50,7 @@ struct AA
private struct Impl
{
private:
- this(scope const TypeInfo_AssociativeArray ti, size_t sz = INIT_NUM_BUCKETS)
+ this(scope const TypeInfo_AssociativeArray ti, size_t sz = INIT_NUM_BUCKETS) nothrow
{
keysz = cast(uint) ti.key.tsize;
valsz = cast(uint) ti.value.tsize;
@@ -125,7 +125,7 @@ private:
}
}
- void grow(scope const TypeInfo keyti)
+ void grow(scope const TypeInfo keyti) pure nothrow
{
// If there are so many deleted entries, that growing would push us
// below the shrink threshold, we just purge deleted entries instead.
@@ -135,7 +135,7 @@ private:
resize(GROW_FAC * dim);
}
- void shrink(scope const TypeInfo keyti)
+ void shrink(scope const TypeInfo keyti) pure nothrow
{
if (dim > INIT_NUM_BUCKETS)
resize(dim / GROW_FAC);
@@ -233,7 +233,7 @@ package void entryDtor(void* p, const TypeInfo_Struct sti)
extra[1].destroy(p + talign(extra[0].tsize, extra[1].talign));
}
-private bool hasDtor(const TypeInfo ti)
+private bool hasDtor(const TypeInfo ti) pure nothrow
{
import rt.lifetime : unqualify;
@@ -246,7 +246,7 @@ private bool hasDtor(const TypeInfo ti)
return false;
}
-private immutable(void)* getRTInfo(const TypeInfo ti)
+private immutable(void)* getRTInfo(const TypeInfo ti) pure nothrow
{
// classes are references
const isNoClass = ti && typeid(ti) !is typeid(TypeInfo_Class);
@@ -254,7 +254,7 @@ private immutable(void)* getRTInfo(const TypeInfo ti)
}
// build type info for Entry with additional key and value fields
-TypeInfo_Struct fakeEntryTI(ref Impl aa, const TypeInfo keyti, const TypeInfo valti)
+TypeInfo_Struct fakeEntryTI(ref Impl aa, const TypeInfo keyti, const TypeInfo valti) nothrow
{
import rt.lifetime : unqualify;
@@ -319,7 +319,8 @@ TypeInfo_Struct fakeEntryTI(ref Impl aa, const TypeInfo keyti, const TypeInfo va
}
// build appropriate RTInfo at runtime
-immutable(void)* rtinfoEntry(ref Impl aa, immutable(size_t)* keyinfo, immutable(size_t)* valinfo, size_t* rtinfoData, size_t rtinfoSize)
+immutable(void)* rtinfoEntry(ref Impl aa, immutable(size_t)* keyinfo,
+ immutable(size_t)* valinfo, size_t* rtinfoData, size_t rtinfoSize) pure nothrow
{
enum bitsPerWord = 8 * size_t.sizeof;
@@ -456,7 +457,7 @@ private size_t mix(size_t h) @safe pure nothrow @nogc
return h;
}
-private size_t calcHash(scope const void* pkey, scope const TypeInfo keyti)
+private size_t calcHash(scope const void* pkey, scope const TypeInfo keyti) nothrow
{
immutable hash = keyti.getHash(pkey);
// highest bit is set to distinguish empty/deleted from filled buckets
@@ -485,6 +486,18 @@ pure nothrow @nogc unittest
// API Implementation
//------------------------------------------------------------------------------
+/** Allocate associative array data.
+ * Called for `new SomeAA` expression.
+ * Params:
+ * ti = TypeInfo for the associative array
+ * Returns:
+ * A new associative array.
+ */
+extern (C) Impl* _aaNew(const TypeInfo_AssociativeArray ti)
+{
+ return new Impl(ti);
+}
+
/// Determine number of entries in associative array.
extern (C) size_t _aaLen(scope const AA aa) pure nothrow @nogc
{
@@ -736,7 +749,15 @@ extern (C) int _aaApply2(AA aa, const size_t keysz, dg2_t dg)
return 0;
}
-/// Construct an associative array of type ti from keys and value
+/** Construct an associative array of type ti from corresponding keys and values.
+ * Called for an AA literal `[k1:v1, k2:v2]`.
+ * Params:
+ * ti = TypeInfo for the associative array
+ * keys = array of keys
+ * vals = array of values
+ * Returns:
+ * A new associative array opaque pointer, or null if `keys` is empty.
+ */
extern (C) Impl* _d_assocarrayliteralTX(const TypeInfo_AssociativeArray ti, void[] keys,
void[] vals)
{
diff --git a/libphobos/libdruntime/rt/arrayassign.d b/libphobos/libdruntime/rt/arrayassign.d
index 9a34ec7..c9db2fc 100644
--- a/libphobos/libdruntime/rt/arrayassign.d
+++ b/libphobos/libdruntime/rt/arrayassign.d
@@ -19,8 +19,10 @@ private
debug(PRINTF) import core.stdc.stdio;
}
-/**
- * Keep for backward binary compatibility. This function can be removed in the future.
+/*
+ * Superseded array assignment hook. Does not take into account destructors:
+ * https://issues.dlang.org/show_bug.cgi?id=13661
+ * Kept for backward binary compatibility. This function can be removed in the future.
*/
extern (C) void[] _d_arrayassign(TypeInfo ti, void[] from, void[] to)
{
@@ -40,15 +42,44 @@ extern (C) void[] _d_arrayassign(TypeInfo ti, void[] from, void[] to)
}
/**
- * Does array assignment (not construction) from another
- * lvalue array of the same element type.
- * Handles overlapping copies.
- * Input:
- * ti TypeInfo of the element type.
- * dst Points target memory. Its .length is equal to the element count, not byte length.
- * src Points source memory. Its .length is equal to the element count, not byte length.
- * ptmp Temporary memory for element swapping.
- */
+Does array assignment (not construction) from another array of the same
+element type.
+
+Handles overlapping copies.
+
+The `_d_arrayassign_l` variant assumes the right hand side is an lvalue,
+while `_d_arrayassign_r` assumes it's an rvalue, which means it doesn't have to call copy constructors.
+
+Used for static array assignment with non-POD element types:
+---
+struct S
+{
+ ~this() {} // destructor, so not Plain Old Data
+}
+
+void main()
+{
+ S[3] arr;
+ S[3] lvalue;
+
+ arr = lvalue;
+ // Generates:
+ // S _tmp;
+ // _d_arrayassign_l(typeid(S), (cast(void*) lvalue.ptr)[0..lvalue.length], (cast(void*) arr.ptr)[0..arr.length], &_tmp);
+
+ S[3] getRvalue() {return lvalue;}
+ arr = getRvalue();
+ // Similar, but `_d_arrayassign_r`
+}
+---
+
+Params:
+ ti = `TypeInfo` of the array element type.
+ dst = target memory. Its `.length` is equal to the element count, not byte length.
+ src = source memory. Its `.length` is equal to the element count, not byte length.
+ ptmp = Temporary memory for element swapping, must have capacity of `ti.tsize` bytes.
+Returns: `dst`
+*/
extern (C) void[] _d_arrayassign_l(TypeInfo ti, void[] src, void[] dst, void* ptmp)
{
debug(PRINTF) printf("_d_arrayassign_l(src = %p,%d, dst = %p,%d) size = %d\n", src.ptr, src.length, dst.ptr, dst.length, ti.tsize);
@@ -131,16 +162,7 @@ unittest // Bugzilla 14024
assert(op == "YzXy", op);
}
-/**
- * Does array assignment (not construction) from another
- * rvalue array of the same element type.
- * Input:
- * ti TypeInfo of the element type.
- * dst Points target memory. Its .length is equal to the element count, not byte length.
- * src Points source memory. Its .length is equal to the element count, not byte length.
- * It is always allocated on stack and never overlapping with dst.
- * ptmp Temporary memory for element swapping.
- */
+/// ditto
extern (C) void[] _d_arrayassign_r(TypeInfo ti, void[] src, void[] dst, void* ptmp)
{
debug(PRINTF) printf("_d_arrayassign_r(src = %p,%d, dst = %p,%d) size = %d\n", src.ptr, src.length, dst.ptr, dst.length, ti.tsize);
@@ -163,9 +185,22 @@ extern (C) void[] _d_arrayassign_r(TypeInfo ti, void[] src, void[] dst, void* pt
}
/**
- * Do assignment to an array.
- * p[0 .. count] = value;
- */
+Set all elements of an array to a single value.
+
+---
+p[0 .. count] = value;
+---
+
+Takes into account postblits and destructors, for Plain Old Data elements,
+`rt/memset.d` is used.
+
+Params:
+ p = pointer to start of array
+ value = bytes of the element to set. Size is derived from `ti`.
+ count = amount of array elements to set
+ ti = type info of the array element type / `value`
+Returns: `p`
+*/
extern (C) void* _d_arraysetassign(void* p, void* value, int count, TypeInfo ti)
{
void* pstart = p;
diff --git a/libphobos/libdruntime/rt/critical_.d b/libphobos/libdruntime/rt/critical_.d
index ae18122..36552a3 100644
--- a/libphobos/libdruntime/rt/critical_.d
+++ b/libphobos/libdruntime/rt/critical_.d
@@ -18,13 +18,13 @@ nothrow:
import rt.monitor_, core.atomic;
-extern (C) void _d_critical_init()
+extern (C) void _d_critical_init() @nogc nothrow
{
initMutex(cast(Mutex*)&gcs.mtx);
head = &gcs;
}
-extern (C) void _d_critical_term()
+extern (C) void _d_critical_term() @nogc nothrow
{
// This function is only ever called by the runtime shutdown code
// and therefore is single threaded so the following cast is fine.
diff --git a/libphobos/libdruntime/rt/dmain2.d b/libphobos/libdruntime/rt/dmain2.d
index 5ef2695..0739b74 100644
--- a/libphobos/libdruntime/rt/dmain2.d
+++ b/libphobos/libdruntime/rt/dmain2.d
@@ -62,22 +62,21 @@ struct UnitTestResult
bool summarize;
}
-extern (C) void _d_monitor_staticctor();
-extern (C) void _d_monitor_staticdtor();
-extern (C) void _d_critical_init();
-extern (C) void _d_critical_term();
+extern (C) void _d_monitor_staticctor() @nogc nothrow;
+extern (C) void _d_monitor_staticdtor() @nogc nothrow;
+extern (C) void _d_critical_init() @nogc nothrow;
+extern (C) void _d_critical_term() @nogc nothrow;
extern (C) void gc_init();
extern (C) void gc_term();
-extern (C) void thread_init() @nogc;
-extern (C) void thread_term() @nogc;
-extern (C) void lifetime_init();
+extern (C) void thread_init() @nogc nothrow;
+extern (C) void thread_term() @nogc nothrow;
extern (C) void rt_moduleCtor();
extern (C) void rt_moduleTlsCtor();
extern (C) void rt_moduleDtor();
extern (C) void rt_moduleTlsDtor();
extern (C) void thread_joinAll();
extern (C) UnitTestResult runModuleUnitTests();
-extern (C) void _d_initMonoTime();
+extern (C) void _d_initMonoTime() @nogc nothrow;
version (CRuntime_Microsoft)
{
@@ -134,7 +133,6 @@ extern (C) int rt_init()
thread_init();
// TODO: fixme - calls GC.addRange -> Initializes GC
initStaticDataGC();
- lifetime_init();
rt_moduleCtor();
rt_moduleTlsCtor();
return 1;
diff --git a/libphobos/libdruntime/rt/lifetime.d b/libphobos/libdruntime/rt/lifetime.d
index 5a18968..026001f 100644
--- a/libphobos/libdruntime/rt/lifetime.d
+++ b/libphobos/libdruntime/rt/lifetime.d
@@ -40,22 +40,47 @@ private
}
}
-extern (C) void lifetime_init()
+// Now-removed symbol, kept around for ABI
+// Some programs are dynamically linked, so best to err on the side of keeping symbols around for a while (especially extern(C) ones)
+// https://github.com/dlang/druntime/pull/3361
+deprecated extern (C) void lifetime_init()
{
- // this is run before static ctors, so it is safe to modify immutables
}
/**
- *
- */
+Allocate memory using the garbage collector
+
+DMD uses this to allocate closures:
+---
+void f(byte[24] x)
+{
+ return () => x; // `x` is on stack, must be moved to heap to keep it alive
+}
+---
+
+Params:
+ sz = number of bytes to allocate
+
+Returns: pointer to `sz` bytes of free, uninitialized memory, managed by the GC.
+*/
extern (C) void* _d_allocmemory(size_t sz) @weak
{
return GC.malloc(sz);
}
/**
- *
- */
+Create a new class instance.
+
+Allocates memory and sets fields to their initial value, but does not call a constructor.
+
+---
+new Object() // _d_newclass(typeid(Object))
+---
+Params:
+ ci = `TypeInfo_Class` object, to provide instance size and initial bytes to copy
+
+Returns: newly created object
+*/
extern (C) Object _d_newclass(const ClassInfo ci) @weak
{
import core.stdc.stdlib;
@@ -350,7 +375,7 @@ bool __setArrayAllocLength(ref BlkInfo info, size_t newlength, bool isshared, co
/**
get the allocation size of the array for the given block (without padding or type info)
*/
-size_t __arrayAllocLength(ref BlkInfo info, const TypeInfo tinext) pure nothrow
+private size_t __arrayAllocLength(ref BlkInfo info, const TypeInfo tinext) pure nothrow
{
if (info.size <= 256)
return *cast(ubyte *)(info.base + info.size - structTypeInfoSize(tinext) - SMALLPAD);
@@ -364,7 +389,7 @@ size_t __arrayAllocLength(ref BlkInfo info, const TypeInfo tinext) pure nothrow
/**
get the start of the array for the given block
*/
-void *__arrayStart(return scope BlkInfo info) nothrow pure
+private void *__arrayStart(return scope BlkInfo info) nothrow pure
{
return info.base + ((info.size & BIGLENGTHMASK) ? LARGEPREFIX : 0);
}
@@ -374,7 +399,7 @@ void *__arrayStart(return scope BlkInfo info) nothrow pure
NOT included in the passed in size. Therefore, do NOT call this function
with the size of an allocated block.
*/
-size_t __arrayPad(size_t size, const TypeInfo tinext) nothrow pure @trusted
+private size_t __arrayPad(size_t size, const TypeInfo tinext) nothrow pure @trusted
{
return size > MAXMEDSIZE ? LARGEPAD : ((size > MAXSMALLSIZE ? MEDPAD : SMALLPAD) + structTypeInfoSize(tinext));
}
@@ -399,7 +424,7 @@ private void __arrayClearPad(ref BlkInfo info, size_t arrsize, size_t padsize) n
allocate an array memory block by applying the proper padding and
assigning block attributes if not inherited from the existing block
*/
-BlkInfo __arrayAlloc(size_t arrsize, const scope TypeInfo ti, const TypeInfo tinext) nothrow pure
+private BlkInfo __arrayAlloc(size_t arrsize, const scope TypeInfo ti, const TypeInfo tinext) nothrow pure
{
import core.checkedint;
@@ -421,7 +446,7 @@ BlkInfo __arrayAlloc(size_t arrsize, const scope TypeInfo ti, const TypeInfo tin
return bi;
}
-BlkInfo __arrayAlloc(size_t arrsize, ref BlkInfo info, const scope TypeInfo ti, const TypeInfo tinext)
+private BlkInfo __arrayAlloc(size_t arrsize, ref BlkInfo info, const scope TypeInfo ti, const TypeInfo tinext)
{
import core.checkedint;
@@ -444,7 +469,7 @@ BlkInfo __arrayAlloc(size_t arrsize, ref BlkInfo info, const scope TypeInfo ti,
/**
cache for the lookup of the block info
*/
-enum N_CACHE_BLOCKS=8;
+private enum N_CACHE_BLOCKS=8;
// note this is TLS, so no need to sync.
BlkInfo *__blkcache_storage;
@@ -642,10 +667,15 @@ void __insertBlkInfoCache(BlkInfo bi, BlkInfo *curpos) nothrow
}
/**
- * Shrink the "allocated" length of an array to be the exact size of the array.
- * It doesn't matter what the current allocated length of the array is, the
- * user is telling the runtime that he knows what he is doing.
- */
+Shrink the "allocated" length of an array to be the exact size of the array.
+
+It doesn't matter what the current allocated length of the array is, the
+user is telling the runtime that he knows what he is doing.
+
+Params:
+ ti = `TypeInfo` of array type
+ arr = array to shrink. Its `.length` is element length, not byte length, despite `void` type
+*/
extern(C) void _d_arrayshrinkfit(const TypeInfo ti, void[] arr) /+nothrow+/
{
// note, we do not care about shared. We are setting the length no matter
@@ -688,7 +718,7 @@ extern(C) void _d_arrayshrinkfit(const TypeInfo ti, void[] arr) /+nothrow+/
}
}
-package bool hasPostblit(in TypeInfo ti)
+package bool hasPostblit(in TypeInfo ti) nothrow pure
{
return (&ti.postblit).funcptr !is &TypeInfo.postblit;
}
@@ -724,12 +754,21 @@ void __doPostblit(void *ptr, size_t len, const TypeInfo ti)
/**
- * set the array capacity. If the array capacity isn't currently large enough
- * to hold the requested capacity (in number of elements), then the array is
- * resized/reallocated to the appropriate size. Pass in a requested capacity
- * of 0 to get the current capacity. Returns the number of elements that can
- * actually be stored once the resizing is done.
- */
+Set the array capacity.
+
+If the array capacity isn't currently large enough
+to hold the requested capacity (in number of elements), then the array is
+resized/reallocated to the appropriate size.
+
+Pass in a requested capacity of 0 to get the current capacity.
+
+Params:
+ ti = type info of element type
+ newcapacity = requested new capacity
+ p = pointer to array to set. Its `length` is left unchanged.
+
+Returns: the number of elements that can actually be stored once the resizing is done
+*/
extern(C) size_t _d_arraysetcapacity(const TypeInfo ti, size_t newcapacity, void[]* p) @weak
in
{
@@ -900,9 +939,18 @@ Lcontinue:
}
/**
- * Allocate a new uninitialized array of length elements.
- * ti is the type of the resulting array, or pointer to element.
- */
+Allocate an array with the garbage collector.
+
+Has three variants:
+- `_d_newarrayU` leave elements uninitialized
+- `_d_newarrayT` initializes to 0 (e.g `new int[]`)
+- `_d_newarrayiT` initializes based on initializer retrieved from TypeInfo (e.g `new float[]`)
+
+Params:
+ ti = the type of the resulting array, (may also be the corresponding `array.ptr` type)
+ length = `.length` of resulting array
+Returns: newly allocated array
+*/
extern (C) void[] _d_newarrayU(const scope TypeInfo ti, size_t length) pure nothrow @weak
{
import core.exception : onOutOfMemoryError;
@@ -959,11 +1007,7 @@ Lcontinue:
return arrstart[0..length];
}
-/**
- * Allocate a new array of length elements.
- * ti is the type of the resulting array, or pointer to element.
- * (For when the array is initialized to 0)
- */
+/// ditto
extern (C) void[] _d_newarrayT(const TypeInfo ti, size_t length) pure nothrow @weak
{
import core.stdc.string;
@@ -976,9 +1020,7 @@ extern (C) void[] _d_newarrayT(const TypeInfo ti, size_t length) pure nothrow @w
return result;
}
-/**
- * For when the array has a non-zero initializer.
- */
+/// ditto
extern (C) void[] _d_newarrayiT(const TypeInfo ti, size_t length) pure nothrow @weak
{
import core.internal.traits : AliasSeq;
@@ -1014,10 +1056,10 @@ extern (C) void[] _d_newarrayiT(const TypeInfo ti, size_t length) pure nothrow @
}
-/**
- *
+/*
+ * Helper for creating multi-dimensional arrays
*/
-void[] _d_newarrayOpT(alias op)(const TypeInfo ti, size_t[] dims)
+private void[] _d_newarrayOpT(alias op)(const TypeInfo ti, size_t[] dims)
{
debug(PRINTF) printf("_d_newarrayOpT(ndims = %d)\n", dims.length);
if (dims.length == 0)
@@ -1056,8 +1098,30 @@ void[] _d_newarrayOpT(alias op)(const TypeInfo ti, size_t[] dims)
/**
- *
- */
+Create a new multi-dimensional array
+
+Has two variants:
+- `_d_newarraymTX` which initializes to 0
+- `_d_newarraymiTX` which initializes elements based on `TypeInfo`
+
+---
+void main()
+{
+ new int[][](10, 20);
+ // _d_newarraymTX(typeid(float), [10, 20]);
+
+ new float[][][](10, 20, 30);
+ // _d_newarraymiTX(typeid(float), [10, 20, 30]);
+}
+---
+
+Params:
+ ti = `TypeInfo` of the array type
+ dims = array length values for each dimension
+
+Returns:
+ newly allocated array
+*/
extern (C) void[] _d_newarraymTX(const TypeInfo ti, size_t[] dims) @weak
{
debug(PRINTF) printf("_d_newarraymT(dims.length = %d)\n", dims.length);
@@ -1070,10 +1134,7 @@ extern (C) void[] _d_newarraymTX(const TypeInfo ti, size_t[] dims) @weak
}
}
-
-/**
- *
- */
+/// ditto
extern (C) void[] _d_newarraymiTX(const TypeInfo ti, size_t[] dims) @weak
{
debug(PRINTF) printf("_d_newarraymiT(dims.length = %d)\n", dims.length);
@@ -1087,9 +1148,31 @@ extern (C) void[] _d_newarraymiTX(const TypeInfo ti, size_t[] dims) @weak
}
/**
- * Allocate an uninitialized non-array item.
- * This is an optimization to avoid things needed for arrays like the __arrayPad(size).
- */
+Allocate an uninitialized non-array item.
+
+This is an optimization to avoid things needed for arrays like the __arrayPad(size).
+
+- `_d_newitemU` leaves the item uninitialized
+- `_d_newitemT` zero initializes the item
+- `_d_newitemiT` uses a non-zero initializer from `TypeInfo`
+
+Used to allocate struct instances on the heap.
+---
+struct Sz {int x = 0;}
+struct Si {int x = 3;}
+
+void main()
+{
+ new Sz(); // _d_newitemT(typeid(Sz))
+ new Si(); // _d_newitemiT(typeid(Si))
+}
+---
+
+Params:
+ _ti = `TypeInfo` of item to allocate
+Returns:
+ newly allocated item
+*/
extern (C) void* _d_newitemU(scope const TypeInfo _ti) pure nothrow @weak
{
auto ti = unqualify(_ti);
@@ -1113,7 +1196,7 @@ extern (C) void* _d_newitemU(scope const TypeInfo _ti) pure nothrow @weak
return p;
}
-/// Same as above, zero initializes the item.
+/// ditto
extern (C) void* _d_newitemT(in TypeInfo _ti) pure nothrow @weak
{
import core.stdc.string;
@@ -1133,15 +1216,6 @@ extern (C) void* _d_newitemiT(in TypeInfo _ti) pure nothrow @weak
return p;
}
-/**
- *
- */
-struct Array
-{
- size_t length;
- byte* data;
-}
-
debug(PRINTF)
{
extern(C) void printArrayCache()
@@ -1424,6 +1498,7 @@ extern (C) void rt_finalize2(void* p, bool det = true, bool resetMemory = true)
}
}
+/// Backwards compatibility
extern (C) void rt_finalize(void* p, bool det = true) nothrow
{
rt_finalize2(p, det, true);
@@ -1442,8 +1517,29 @@ extern (C) void rt_finalizeFromGC(void* p, size_t size, uint attr) nothrow
/**
- * Resize dynamic arrays with 0 initializers.
- */
+Resize a dynamic array by setting the `.length` property
+
+Newly created elements are initialized to their default value.
+
+Has two variants:
+- `_d_arraysetlengthT` for arrays with elements that initialize to 0
+- `_d_arraysetlengthiT` for non-zero initializers retrieved from `TypeInfo`
+
+---
+void main()
+{
+ int[] a = [1, 2];
+ a.length = 3; // gets lowered to `_d_arraysetlengthT(typeid(int[]), 3, &a)`
+}
+---
+
+Params:
+ ti = `TypeInfo` of array
+ newlength = new value for the array's `.length`
+ p = pointer to array to update the `.length` of.
+ While it's cast to `void[]`, its `.length` is still treated as element length.
+Returns: `*p` after being updated
+*/
extern (C) void[] _d_arraysetlengthT(const TypeInfo ti, size_t newlength, void[]* p) @weak
in
{
@@ -1637,15 +1733,7 @@ do
return *p;
}
-
-/**
- * Resize arrays for non-zero initializers.
- * p pointer to array lvalue to be updated
- * newlength new .length property of array
- * sizeelem size of each element of array
- * initsize size of initializer
- * ... initializer
- */
+/// ditto
extern (C) void[] _d_arraysetlengthiT(const TypeInfo ti, size_t newlength, void[]* p) @weak
in
{
@@ -1857,8 +1945,31 @@ do
/**
- *
- */
+Given an array of length `size` that needs to be expanded to `newlength`,
+compute a new capacity.
+
+Better version by Dave Fladebo:
+This uses an inverse logorithmic algorithm to pre-allocate a bit more
+space for larger arrays.
+- Arrays smaller than PAGESIZE bytes are left as-is, so for the most
+common cases, memory allocation is 1 to 1. The small overhead added
+doesn't affect small array perf. (it's virtually the same as
+current).
+- Larger arrays have some space pre-allocated.
+- As the arrays grow, the relative pre-allocated space shrinks.
+- The logorithmic algorithm allocates relatively more space for
+mid-size arrays, making it very fast for medium arrays (for
+mid-to-large arrays, this turns out to be quite a bit faster than the
+equivalent realloc() code in C, on Linux at least. Small arrays are
+just as fast as GCC).
+- Perhaps most importantly, overall memory usage and stress on the GC
+is decreased significantly for demanding environments.
+
+Params:
+ newlength = new `.length`
+ size = old `.length`
+Returns: new capacity for array
+*/
size_t newCapacity(size_t newlength, size_t size)
{
version (none)
@@ -1867,24 +1978,6 @@ size_t newCapacity(size_t newlength, size_t size)
}
else
{
- /*
- * Better version by Dave Fladebo:
- * This uses an inverse logorithmic algorithm to pre-allocate a bit more
- * space for larger arrays.
- * - Arrays smaller than PAGESIZE bytes are left as-is, so for the most
- * common cases, memory allocation is 1 to 1. The small overhead added
- * doesn't affect small array perf. (it's virtually the same as
- * current).
- * - Larger arrays have some space pre-allocated.
- * - As the arrays grow, the relative pre-allocated space shrinks.
- * - The logorithmic algorithm allocates relatively more space for
- * mid-size arrays, making it very fast for medium arrays (for
- * mid-to-large arrays, this turns out to be quite a bit faster than the
- * equivalent realloc() code in C, on Linux at least. Small arrays are
- * just as fast as GCC).
- * - Perhaps most importantly, overall memory usage and stress on the GC
- * is decreased significantly for demanding environments.
- */
size_t newcap = newlength * size;
size_t newext = 0;
@@ -1938,10 +2031,17 @@ size_t newCapacity(size_t newlength, size_t size)
}
-/**************************************
- * Extend an array by n elements.
- * Caller must initialize those elements.
- */
+/**
+Extend an array by n elements.
+
+Caller must initialize those elements.
+
+Params:
+ ti = type info of array type (not element type)
+ px = array to append to, cast to `byte[]` while keeping the same `.length`. Will be updated.
+ n = number of elements to append
+Returns: `px` after being appended to
+*/
extern (C)
byte[] _d_arrayappendcTX(const TypeInfo ti, return scope ref byte[] px, size_t n) @weak
{
@@ -2045,8 +2145,21 @@ byte[] _d_arrayappendcTX(const TypeInfo ti, return scope ref byte[] px, size_t n
/**
- * Append dchar to char[]
- */
+Append `dchar` to `char[]`, converting UTF-32 to UTF-8
+
+---
+void main()
+{
+ char[] s;
+ s ~= 'α';
+}
+---
+
+Params:
+ x = array to append to cast to `byte[]`. Will be modified.
+ c = `dchar` to append
+Returns: updated `x` cast to `void[]`
+*/
extern (C) void[] _d_arrayappendcd(ref byte[] x, dchar c) @weak
{
// c could encode into from 1 to 4 characters
@@ -2127,8 +2240,23 @@ unittest
/**
- * Append dchar to wchar[]
- */
+Append `dchar` to `wchar[]`, converting UTF-32 to UTF-16
+
+---
+void main()
+{
+ dchar x;
+ wchar[] s;
+ s ~= 'α';
+}
+---
+
+Params:
+ x = array to append to cast to `byte[]`. Will be modified.
+ c = `dchar` to append
+
+Returns: updated `x` cast to `void[]`
+*/
extern (C) void[] _d_arrayappendwd(ref byte[] x, dchar c) @weak
{
// c could encode into from 1 to 2 w characters
@@ -2160,8 +2288,24 @@ extern (C) void[] _d_arrayappendwd(ref byte[] x, dchar c) @weak
/**
- *
- */
+Concatenate two arrays into a new array
+
+---
+void main()
+{
+ int[] x = [10, 20, 30];
+ int[] y = [40, 50];
+ int[] c = x ~ y; // _d_arraycatT(typeid(int[]), (cast(byte*) x)[0..x.length], (cast(byte*) y)[0..y.length]);
+}
+---
+
+Params:
+ ti = type that the two arrays share
+ x = left hand side array casted to `byte[]`. Despite this cast, its `.length` is original element length, not byte length
+ y = right hand side array casted to `byte[]`. Despite this cast, its `.length` is original element length, not byte length
+Returns:
+ resulting concatenated array, with `.length` equal to new element length despite `byte` type
+*/
extern (C) byte[] _d_arraycatT(const TypeInfo ti, byte[] x, byte[] y) @weak
out (result)
{
@@ -2226,8 +2370,27 @@ do
/**
- *
- */
+Concatenate multiple arrays at once
+
+This is more efficient than repeatedly concatenating pairs of arrays because the total size is known in advance.
+
+```
+void main()
+{
+ int[] a, b, c;
+ int[] res = a ~ b ~ c;
+ // _d_arraycatnTX(typeid(int[]),
+ // [(cast(byte*)a.ptr)[0..a.length], (cast(byte*)b.ptr)[0..b.length], (cast(byte*)c.ptr)[0..c.length]]);
+}
+```
+
+Params:
+ ti = type of arrays to concatenate and resulting array
+ arrs = array of arrays to concatenate, cast to `byte[]` while keeping `.length` the same
+
+Returns:
+ newly created concatenated array, `.length` equal to the total element length despite `void` type
+*/
extern (C) void[] _d_arraycatnTX(const TypeInfo ti, scope byte[][] arrs) @weak
{
import core.stdc.string;
@@ -2266,8 +2429,27 @@ extern (C) void[] _d_arraycatnTX(const TypeInfo ti, scope byte[][] arrs) @weak
/**
- * Allocate the array, rely on the caller to do the initialization of the array.
- */
+Allocate an array literal
+
+Rely on the caller to do the initialization of the array.
+
+---
+int[] getArr()
+{
+ return [10, 20];
+ // auto res = cast(int*) _d_arrayliteralTX(typeid(int[]), 2);
+ // res[0] = 10;
+ // res[1] = 20;
+ // return res[0..2];
+}
+---
+
+Params:
+ ti = `TypeInfo` of resulting array type
+ length = `.length` of array literal
+
+Returns: pointer to allocated array
+*/
extern (C)
void* _d_arrayliteralTX(const TypeInfo ti, size_t length) @weak
{
diff --git a/libphobos/libdruntime/rt/minfo.d b/libphobos/libdruntime/rt/minfo.d
index 0d5cd22..7489150 100644
--- a/libphobos/libdruntime/rt/minfo.d
+++ b/libphobos/libdruntime/rt/minfo.d
@@ -58,7 +58,7 @@ struct ModuleGroup
// target modules are involved in a cycle.
//
// The return value is malloc'd using C, so it must be freed after use.
- private size_t[] genCyclePath(size_t srcidx, size_t targetidx, int[][] edges)
+ private size_t[] genCyclePath(size_t srcidx, size_t targetidx, int[][] edges) nothrow
{
import core.bitop : bt, btc, bts;
@@ -109,7 +109,7 @@ struct ModuleGroup
// release mode.
if (distance[target] != curdist)
{
- throw new Error("internal error printing module cycle");
+ assert(0, "internal error printing module cycle");
}
// determine the path. This is tricky, because we have to
@@ -162,14 +162,13 @@ struct ModuleGroup
* Throws:
* Exception if it fails.
*/
- void sortCtors(string cycleHandling)
+ void sortCtors(string cycleHandling) nothrow
{
import core.bitop : bts, btr, bt, BitRange;
import core.internal.container.hashtab;
enum OnCycle
{
- deprecate,
abort,
print,
ignore
@@ -180,7 +179,9 @@ struct ModuleGroup
switch (cycleHandling) with(OnCycle)
{
case "deprecate":
- onCycle = deprecate;
+ import core.stdc.stdio : fprintf, stderr;
+ // Option deprecated in 2.101, remove in 2.111
+ fprintf(stderr, "`--DRT-oncycle=deprecate` is no longer supported, using `abort` instead\n");
break;
case "abort":
onCycle = abort;
@@ -196,7 +197,7 @@ struct ModuleGroup
break;
default:
// invalid cycle handling option.
- throw new Error("DRT invalid cycle handling option: " ~ cycleHandling);
+ assert(0, "DRT invalid cycle handling option: " ~ cycleHandling);
}
debug (printModuleDependencies)
@@ -280,7 +281,7 @@ struct ModuleGroup
.free(edges.ptr);
}
- void buildCycleMessage(size_t sourceIdx, size_t cycleIdx, scope void delegate(string) sink)
+ void buildCycleMessage(size_t sourceIdx, size_t cycleIdx, scope void delegate(string) nothrow sink)
{
version (Windows)
enum EOL = "\r\n";
@@ -312,7 +313,7 @@ struct ModuleGroup
//
// If a cycle is detected, returns the index of the module that completes the cycle.
// Returns: true for success, false for a deprecated cycle error
- bool findDeps(size_t idx, size_t* reachable)
+ bool findDeps(size_t idx, size_t* reachable) nothrow
{
static struct stackFrame
{
@@ -356,14 +357,6 @@ struct ModuleGroup
// was already started, this is a cycle.
final switch (onCycle) with(OnCycle)
{
- case deprecate:
- // check with old algorithm
- if (sortCtorsOld(edges))
- {
- // unwind to print deprecation message.
- return false; // deprecated cycle error
- }
- goto case abort; // fall through
case abort:
string errmsg = "";
@@ -418,7 +411,7 @@ struct ModuleGroup
// ctor/dtors that must be dealt with. It recurses only when it finds
// dependencies that also have static ctor/dtors.
// Returns: true for success, false for a deprecated cycle error
- bool processMod(size_t curidx)
+ bool processMod(size_t curidx) nothrow
{
immutable ModuleInfo* current = _modules[curidx];
@@ -461,7 +454,7 @@ struct ModuleGroup
}
// returns `false` if deprecated cycle error otherwise set `result`.
- bool doSort(size_t relevantFlags, ref immutable(ModuleInfo)*[] result)
+ bool doSort(size_t relevantFlags, ref immutable(ModuleInfo)*[] result) nothrow
{
clearFlags(relevant);
clearFlags(ctorstart);
@@ -533,193 +526,6 @@ struct ModuleGroup
sortCtors(rt_configOption("oncycle"));
}
- /******************************
- * This is the old ctor sorting algorithm that does not find all cycles.
- *
- * It is here to allow the deprecated behavior from the original algorithm
- * until people have fixed their code.
- *
- * If no cycles are found, the _ctors and _tlsctors are replaced with the
- * ones generated by this algorithm to preserve the old incorrect ordering
- * behavior.
- *
- * Params:
- * edges = The module edges as found in the `importedModules` member of
- * each ModuleInfo. Generated in sortCtors.
- * Returns:
- * true if no cycle is found, false if one was.
- */
- bool sortCtorsOld(int[][] edges)
- {
- immutable len = edges.length;
- assert(len == _modules.length);
-
- static struct StackRec
- {
- @property int mod()
- {
- return _mods[_idx];
- }
-
- int[] _mods;
- size_t _idx;
- }
-
- auto stack = (cast(StackRec*).calloc(len, StackRec.sizeof))[0 .. len];
- // TODO: reuse GCBits by moving it to core.internal.container
- immutable nwords = (len + 8 * size_t.sizeof - 1) / (8 * size_t.sizeof);
- auto ctorstart = cast(size_t*).malloc(nwords * size_t.sizeof);
- auto ctordone = cast(size_t*).malloc(nwords * size_t.sizeof);
- int[] initialEdges = (cast(int *)malloc(int.sizeof * len))[0 .. len];
- if (!stack.ptr || ctorstart is null || ctordone is null || !initialEdges.ptr)
- assert(0);
- scope (exit)
- {
- .free(stack.ptr);
- .free(ctorstart);
- .free(ctordone);
- .free(initialEdges.ptr);
- }
-
- // initialize the initial edges
- foreach (i, ref v; initialEdges)
- v = cast(int)i;
-
- bool sort(ref immutable(ModuleInfo)*[] ctors, uint mask)
- {
- import core.bitop;
-
- ctors = (cast(immutable(ModuleInfo)**).malloc(len * size_t.sizeof))[0 .. len];
- if (!ctors.ptr)
- assert(0);
-
- // clean flags
- memset(ctorstart, 0, nwords * size_t.sizeof);
- memset(ctordone, 0, nwords * size_t.sizeof);
- size_t stackidx = 0;
- size_t cidx;
-
- int[] mods = initialEdges;
-
- size_t idx;
- while (true)
- {
- while (idx < mods.length)
- {
- auto m = mods[idx];
-
- if (bt(ctordone, m))
- {
- // this module has already been processed, skip
- ++idx;
- continue;
- }
- else if (bt(ctorstart, m))
- {
- /* Trace back to the begin of the cycle.
- */
- bool ctorInCycle;
- size_t start = stackidx;
- while (start--)
- {
- auto sm = stack[start].mod;
- if (sm == m)
- break;
- assert(sm >= 0);
- if (bt(ctorstart, sm))
- ctorInCycle = true;
- }
- assert(stack[start].mod == m);
- if (ctorInCycle)
- {
- return false;
- }
- else
- {
- /* This is also a cycle, but the import chain does not constrain
- * the order of initialization, either because the imported
- * modules have no ctors or the ctors are standalone.
- */
- ++idx;
- }
- }
- else
- {
- auto curmod = _modules[m];
- if (curmod.flags & mask)
- {
- if (curmod.flags & MIstandalone || !edges[m].length)
- { // trivial ctor => sort in
- ctors[cidx++] = curmod;
- bts(ctordone, m);
- }
- else
- { // non-trivial ctor => defer
- bts(ctorstart, m);
- }
- }
- else // no ctor => mark as visited
- {
- bts(ctordone, m);
- }
-
- if (edges[m].length)
- {
- /* Internal runtime error, recursion exceeds number of modules.
- */
- (stackidx < len) || assert(0);
-
- // recurse
- stack[stackidx++] = StackRec(mods, idx);
- idx = 0;
- mods = edges[m];
- }
- }
- }
-
- if (stackidx)
- { // pop old value from stack
- --stackidx;
- mods = stack[stackidx]._mods;
- idx = stack[stackidx]._idx;
- auto m = mods[idx++];
- if (bt(ctorstart, m) && !bts(ctordone, m))
- ctors[cidx++] = _modules[m];
- }
- else // done
- break;
- }
- // store final number and shrink array
- ctors = (cast(immutable(ModuleInfo)**).realloc(ctors.ptr, cidx * size_t.sizeof))[0 .. cidx];
- return true;
- }
-
- /* Do two passes: ctor/dtor, tlsctor/tlsdtor
- */
- immutable(ModuleInfo)*[] _ctors2;
- immutable(ModuleInfo)*[] _tlsctors2;
- auto result = sort(_ctors2, MIctor | MIdtor) && sort(_tlsctors2, MItlsctor | MItlsdtor);
- if (result) // no cycle
- {
- // fall back to original ordering as part of the deprecation.
- if (_ctors.ptr)
- .free(_ctors.ptr);
- _ctors = _ctors2;
- if (_tlsctors.ptr)
- .free(_tlsctors.ptr);
- _tlsctors = _tlsctors2;
- }
- else
- {
- // free any allocated memory that will be forgotten
- if (_ctors2.ptr)
- .free(_ctors2.ptr);
- if (_tlsctors2.ptr)
- .free(_tlsctors2.ptr);
- }
- return result;
- }
-
void runCtors()
{
// run independent ctors
diff --git a/libphobos/libdruntime/rt/monitor_.d b/libphobos/libdruntime/rt/monitor_.d
index 0f1d0e9..c1f3f3c 100644
--- a/libphobos/libdruntime/rt/monitor_.d
+++ b/libphobos/libdruntime/rt/monitor_.d
@@ -54,7 +54,7 @@ extern (C) void _d_monitordelete(Object h, bool det)
}
// does not call dispose events, for internal use only
-extern (C) void _d_monitordelete_nogc(Object h) @nogc
+extern (C) void _d_monitordelete_nogc(Object h) @nogc nothrow
{
auto m = getMonitor(h);
if (m is null)
@@ -148,7 +148,7 @@ extern (C) void rt_detachDisposeEvent(Object h, DEvent e)
nothrow:
-extern (C) void _d_monitor_staticctor()
+extern (C) void _d_monitor_staticctor() @nogc nothrow
{
version (Posix)
{
@@ -158,7 +158,7 @@ extern (C) void _d_monitor_staticctor()
initMutex(&gmtx);
}
-extern (C) void _d_monitor_staticdtor()
+extern (C) void _d_monitor_staticdtor() @nogc nothrow
{
destroyMutex(&gmtx);
version (Posix)
diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE
index 30e9e80..744e5ad 100644
--- a/libphobos/src/MERGE
+++ b/libphobos/src/MERGE
@@ -1,4 +1,4 @@
-1206fc94f967b0183667a109049cbf596deaa696
+1516ecad932d88a1618163384e6f69009d125391
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.
diff --git a/libphobos/src/std/complex.d b/libphobos/src/std/complex.d
index 485b548..5a15538 100644
--- a/libphobos/src/std/complex.d
+++ b/libphobos/src/std/complex.d
@@ -935,7 +935,7 @@ Complex!(CommonType!(T, U)) fromPolar(T, U)(const T modulus, const U argument)
import std.math.operations : isClose;
import std.math.algebraic : sqrt;
import std.math.constants : PI_4;
- auto z = fromPolar(core.math.sqrt(2.0), PI_4);
+ auto z = fromPolar(core.math.sqrt(2.0L), PI_4);
assert(isClose(z.re, 1.0L));
assert(isClose(z.im, 1.0L));
}
@@ -1695,9 +1695,9 @@ Complex!T log(T)(Complex!T x) @safe pure nothrow @nogc
*/
Complex!T log10(T)(Complex!T x) @safe pure nothrow @nogc
{
- static import std.math;
+ import std.math.constants : LN10;
- return log(x) / Complex!T(std.math.log(10.0));
+ return log(x) / Complex!T(LN10);
}
///
diff --git a/libphobos/src/std/experimental/logger/core.d b/libphobos/src/std/experimental/logger/core.d
index efc4ef7..d899db7 100644
--- a/libphobos/src/std/experimental/logger/core.d
+++ b/libphobos/src/std/experimental/logger/core.d
@@ -12,56 +12,6 @@ import std.traits;
import std.experimental.logger.filelogger;
-/** This template evaluates if the passed `LogLevel` is active.
-The previously described version statements are used to decide if the
-`LogLevel` is active. The version statements only influence the compile
-unit they are used with, therefore this function can only disable logging this
-specific compile unit.
-*/
-template isLoggingActiveAt(LogLevel ll)
-{
- version (StdLoggerDisableLogging)
- {
- enum isLoggingActiveAt = false;
- }
- else
- {
- static if (ll == LogLevel.trace)
- {
- version (StdLoggerDisableTrace) enum isLoggingActiveAt = false;
- }
- else static if (ll == LogLevel.info)
- {
- version (StdLoggerDisableInfo) enum isLoggingActiveAt = false;
- }
- else static if (ll == LogLevel.warning)
- {
- version (StdLoggerDisableWarning) enum isLoggingActiveAt = false;
- }
- else static if (ll == LogLevel.error)
- {
- version (StdLoggerDisableError) enum isLoggingActiveAt = false;
- }
- else static if (ll == LogLevel.critical)
- {
- version (StdLoggerDisableCritical) enum isLoggingActiveAt = false;
- }
- else static if (ll == LogLevel.fatal)
- {
- version (StdLoggerDisableFatal) enum isLoggingActiveAt = false;
- }
- // If `isLoggingActiveAt` didn't get defined above to false,
- // we default it to true.
- static if (!is(typeof(isLoggingActiveAt) == bool))
- {
- enum isLoggingActiveAt = true;
- }
- }
-}
-
-/// This compile-time flag is `true` if logging is not statically disabled.
-enum isLoggingActive = isLoggingActiveAt!(LogLevel.all);
-
/** This functions is used at runtime to determine if a `LogLevel` is
active. The same previously defined version statements are used to disable
certain levels. Again the version statements are associated with a compile
@@ -71,26 +21,6 @@ pure bool isLoggingEnabled()(LogLevel ll) @safe nothrow @nogc
bool isLoggingEnabled()(LogLevel ll, LogLevel loggerLL,
LogLevel globalLL, lazy bool condition = true) @safe
{
- switch (ll)
- {
- case LogLevel.trace:
- version (StdLoggerDisableTrace) return false;
- else break;
- case LogLevel.info:
- version (StdLoggerDisableInfo) return false;
- else break;
- case LogLevel.warning:
- version (StdLoggerDisableWarning) return false;
- else break;
- case LogLevel.critical:
- version (StdLoggerDisableCritical) return false;
- else break;
- case LogLevel.fatal:
- version (StdLoggerDisableFatal) return false;
- else break;
- default: break;
- }
-
return ll >= globalLL
&& ll >= loggerLL
&& ll != LogLevel.off
@@ -99,66 +29,6 @@ bool isLoggingEnabled()(LogLevel ll, LogLevel loggerLL,
&& condition;
}
-/** This template returns the `LogLevel` named "logLevel" of type $(D
-LogLevel) defined in a user defined module where the filename has the
-suffix "_loggerconfig.d". This `LogLevel` sets the minimal `LogLevel`
-of the module.
-
-A minimal `LogLevel` can be defined on a per module basis.
-In order to define a module `LogLevel` a file with a modulename
-"MODULENAME_loggerconfig" must be found. If no such module exists and the
-module is a nested module, it is checked if there exists a
-"PARENT_MODULE_loggerconfig" module with such a symbol.
-If this module exists and it contains a `LogLevel` called logLevel this $(D
-LogLevel) will be used. This parent lookup is continued until there is no
-parent module. Then the moduleLogLevel is `LogLevel.all`.
-*/
-template moduleLogLevel(string moduleName)
-if (!moduleName.length)
-{
- // default
- enum moduleLogLevel = LogLevel.all;
-}
-
-///
-@system unittest
-{
- static assert(moduleLogLevel!"" == LogLevel.all);
-}
-
-/// ditto
-template moduleLogLevel(string moduleName)
-if (moduleName.length)
-{
- import std.string : format;
- mixin(q{
- static if (__traits(compiles, {import %1$s : logLevel;}))
- {
- import %1$s : logLevel;
- static assert(is(typeof(logLevel) : LogLevel),
- "Expect 'logLevel' to be of Type 'LogLevel'.");
- // don't enforce enum here
- alias moduleLogLevel = logLevel;
- }
- else
- // use logLevel of package or default
- alias moduleLogLevel = moduleLogLevel!(parentOf(moduleName));
- }.format(moduleName ~ "_loggerconfig"));
-}
-
-///
-@system unittest
-{
- static assert(moduleLogLevel!"not.amodule.path" == LogLevel.all);
-}
-
-private string parentOf(string mod)
-{
- foreach_reverse (i, c; mod)
- if (c == '.') return mod[0 .. i];
- return null;
-}
-
/* This function formates a `SysTime` into an `OutputRange`.
The `SysTime` is formatted similar to
@@ -200,14 +70,8 @@ void log(int line = __LINE__, string file = __FILE__,
lazy bool condition, lazy A args)
if (args.length != 1)
{
- static if (isLoggingActive)
- {
- if (ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.log!(line, file, funcName, prettyFuncName, moduleName)
- (ll, condition, args);
- }
- }
+ stdThreadLocalLog.log!(line, file, funcName, prettyFuncName, moduleName)
+ (ll, condition, args);
}
/// Ditto
@@ -215,14 +79,8 @@ void log(T, string moduleName = __MODULE__)(const LogLevel ll,
lazy bool condition, lazy T arg, int line = __LINE__, string file = __FILE__,
string funcName = __FUNCTION__, string prettyFuncName = __PRETTY_FUNCTION__)
{
- static if (isLoggingActive)
- {
- if (ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.log!(T,moduleName)(ll, condition, arg, line, file, funcName,
- prettyFuncName);
- }
- }
+ stdThreadLocalLog.log!(T,moduleName)(ll, condition, arg, line, file, funcName,
+ prettyFuncName);
}
/** This function logs data.
@@ -244,14 +102,8 @@ void log(int line = __LINE__, string file = __FILE__,
string moduleName = __MODULE__, A...)(const LogLevel ll, lazy A args)
if (args.length > 1 && !is(Unqual!(A[0]) : bool))
{
- static if (isLoggingActive)
- {
- if (ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.log!(line, file, funcName, prettyFuncName, moduleName)
- (ll, args);
- }
- }
+ stdThreadLocalLog.log!(line, file, funcName, prettyFuncName, moduleName)
+ (ll, args);
}
/// Ditto
@@ -259,14 +111,8 @@ void log(T, string moduleName = __MODULE__)(const LogLevel ll, lazy T arg,
int line = __LINE__, string file = __FILE__, string funcName = __FUNCTION__,
string prettyFuncName = __PRETTY_FUNCTION__)
{
- static if (isLoggingActive)
- {
- if (ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.log!T(ll, arg, line, file, funcName, prettyFuncName,
- moduleName);
- }
- }
+ stdThreadLocalLog.log!T(ll, arg, line, file, funcName, prettyFuncName,
+ moduleName);
}
/** This function logs data.
@@ -289,11 +135,8 @@ void log(int line = __LINE__, string file = __FILE__,
string moduleName = __MODULE__, A...)(lazy bool condition, lazy A args)
if (args.length != 1)
{
- static if (isLoggingActive)
- {
- stdThreadLocalLog.log!(line, file, funcName, prettyFuncName, moduleName)
- (stdThreadLocalLog.logLevel, condition, args);
- }
+ stdThreadLocalLog.log!(line, file, funcName, prettyFuncName, moduleName)
+ (stdThreadLocalLog.logLevel, condition, args);
}
/// Ditto
@@ -301,11 +144,8 @@ void log(T, string moduleName = __MODULE__)(lazy bool condition, lazy T arg,
int line = __LINE__, string file = __FILE__, string funcName = __FUNCTION__,
string prettyFuncName = __PRETTY_FUNCTION__)
{
- static if (isLoggingActive)
- {
- stdThreadLocalLog.log!(T,moduleName)(stdThreadLocalLog.logLevel,
- condition, arg, line, file, funcName, prettyFuncName);
- }
+ stdThreadLocalLog.log!(T,moduleName)(stdThreadLocalLog.logLevel,
+ condition, arg, line, file, funcName, prettyFuncName);
}
/** This function logs data.
@@ -328,22 +168,16 @@ if ((args.length > 1 && !is(Unqual!(A[0]) : bool)
&& !is(Unqual!(A[0]) == LogLevel))
|| args.length == 0)
{
- static if (isLoggingActive)
- {
- stdThreadLocalLog.log!(line, file, funcName,
- prettyFuncName, moduleName)(stdThreadLocalLog.logLevel, args);
- }
+ stdThreadLocalLog.log!(line, file, funcName,
+ prettyFuncName, moduleName)(stdThreadLocalLog.logLevel, args);
}
void log(T)(lazy T arg, int line = __LINE__, string file = __FILE__,
string funcName = __FUNCTION__, string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__)
{
- static if (isLoggingActive)
- {
- stdThreadLocalLog.log!T(stdThreadLocalLog.logLevel, arg, line, file,
- funcName, prettyFuncName, moduleName);
- }
+ stdThreadLocalLog.log!T(stdThreadLocalLog.logLevel, arg, line, file,
+ funcName, prettyFuncName, moduleName);
}
/** This function logs data in a `printf`-style manner.
@@ -369,14 +203,8 @@ void logf(int line = __LINE__, string file = __FILE__,
string moduleName = __MODULE__, A...)(const LogLevel ll,
lazy bool condition, lazy string msg, lazy A args)
{
- static if (isLoggingActive)
- {
- if (ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.logf!(line, file, funcName, prettyFuncName, moduleName)
- (ll, condition, msg, args);
- }
- }
+ stdThreadLocalLog.logf!(line, file, funcName, prettyFuncName, moduleName)
+ (ll, condition, msg, args);
}
/** This function logs data in a `printf`-style manner.
@@ -400,14 +228,8 @@ void logf(int line = __LINE__, string file = __FILE__,
string moduleName = __MODULE__, A...)(const LogLevel ll, lazy string msg,
lazy A args)
{
- static if (isLoggingActive)
- {
- if (ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.logf!(line, file, funcName, prettyFuncName, moduleName)
- (ll, msg, args);
- }
- }
+ stdThreadLocalLog.logf!(line, file, funcName, prettyFuncName, moduleName)
+ (ll, msg, args);
}
/** This function logs data in a `printf`-style manner.
@@ -431,11 +253,8 @@ void logf(int line = __LINE__, string file = __FILE__,
string moduleName = __MODULE__, A...)(lazy bool condition,
lazy string msg, lazy A args)
{
- static if (isLoggingActive)
- {
- stdThreadLocalLog.logf!(line, file, funcName, prettyFuncName, moduleName)
- (stdThreadLocalLog.logLevel, condition, msg, args);
- }
+ stdThreadLocalLog.logf!(line, file, funcName, prettyFuncName, moduleName)
+ (stdThreadLocalLog.logLevel, condition, msg, args);
}
/** This function logs data in a `printf`-style manner.
@@ -457,11 +276,8 @@ void logf(int line = __LINE__, string file = __FILE__,
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__, A...)(lazy string msg, lazy A args)
{
- static if (isLoggingActive)
- {
- stdThreadLocalLog.logf!(line, file, funcName,prettyFuncName, moduleName)
- (stdThreadLocalLog.logLevel, msg, args);
- }
+ stdThreadLocalLog.logf!(line, file, funcName,prettyFuncName, moduleName)
+ (stdThreadLocalLog.logLevel, msg, args);
}
/** This template provides the global log functions with the `LogLevel`
@@ -478,11 +294,8 @@ template defaultLogFunction(LogLevel ll)
string moduleName = __MODULE__, A...)(lazy A args)
if ((args.length > 0 && !is(Unqual!(A[0]) : bool)) || args.length == 0)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- {
stdThreadLocalLog.memLogFunctions!(ll).logImpl!(line, file, funcName,
prettyFuncName, moduleName)(args);
- }
}
void defaultLogFunction(int line = __LINE__, string file = __FILE__,
@@ -490,11 +303,8 @@ template defaultLogFunction(LogLevel ll)
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__, A...)(lazy bool condition, lazy A args)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.memLogFunctions!(ll).logImpl!(line, file, funcName,
- prettyFuncName, moduleName)(condition, args);
- }
+ stdThreadLocalLog.memLogFunctions!(ll).logImpl!(line, file, funcName,
+ prettyFuncName, moduleName)(condition, args);
}
}
@@ -551,11 +361,8 @@ template defaultLogFunctionf(LogLevel ll)
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__, A...)(lazy string msg, lazy A args)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.memLogFunctions!(ll).logImplf!(line, file, funcName,
- prettyFuncName, moduleName)(msg, args);
- }
+ stdThreadLocalLog.memLogFunctions!(ll).logImplf!(line, file, funcName,
+ prettyFuncName, moduleName)(msg, args);
}
void defaultLogFunctionf(int line = __LINE__, string file = __FILE__,
@@ -564,11 +371,8 @@ template defaultLogFunctionf(LogLevel ll)
string moduleName = __MODULE__, A...)(lazy bool condition,
lazy string msg, lazy A args)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- {
- stdThreadLocalLog.memLogFunctions!(ll).logImplf!(line, file, funcName,
- prettyFuncName, moduleName)(condition, msg, args);
- }
+ stdThreadLocalLog.memLogFunctions!(ll).logImplf!(line, file, funcName,
+ prettyFuncName, moduleName)(condition, msg, args);
}
}
@@ -816,32 +620,23 @@ abstract class Logger
Tid threadId, SysTime timestamp, Logger logger)
@safe
{
- static if (isLoggingActive)
- {
- msgAppender = appender!string();
- header = LogEntry(file, line, funcName, prettyFuncName,
- moduleName, logLevel, threadId, timestamp, null, logger);
- }
+ msgAppender = appender!string();
+ header = LogEntry(file, line, funcName, prettyFuncName,
+ moduleName, logLevel, threadId, timestamp, null, logger);
}
/** Logs a part of the log message. */
protected void logMsgPart(scope const(char)[] msg) @safe
{
- static if (isLoggingActive)
- {
- msgAppender.put(msg);
- }
+ msgAppender.put(msg);
}
/** Signals that the message has been written and no more calls to
`logMsgPart` follow. */
protected void finishLogMsg() @safe
{
- static if (isLoggingActive)
- {
- header.msg = msgAppender.data;
- this.writeLogMsg(header);
- }
+ header.msg = msgAppender.data;
+ this.writeLogMsg(header);
}
/** The `LogLevel` determines if the log call are processed or dropped
@@ -895,16 +690,13 @@ abstract class Logger
*/
void forwardMsg(ref LogEntry payload) @trusted
{
- static if (isLoggingActive) synchronized (mutex)
+ if (isLoggingEnabled(payload.logLevel, this.logLevel_,
+ globalLogLevel))
{
- if (isLoggingEnabled(payload.logLevel, this.logLevel_,
- globalLogLevel))
- {
- this.writeLogMsg(payload);
+ this.writeLogMsg(payload);
- if (payload.logLevel == LogLevel.fatal)
- this.fatalHandler_();
- }
+ if (payload.logLevel == LogLevel.fatal)
+ this.fatalHandler_();
}
}
@@ -944,8 +736,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(lazy A args)
if (args.length == 0 || (args.length > 0 && !is(A[0] : bool)))
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel))
{
@@ -991,8 +782,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(lazy bool condition,
lazy A args)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel,
condition))
@@ -1040,8 +830,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(lazy bool condition,
lazy string msg, lazy A args)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- synchronized (mutex)
+ synchronized (mutex)
{
import std.format.write : formattedWrite;
@@ -1088,8 +877,7 @@ abstract class Logger
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__, A...)(lazy string msg, lazy A args)
{
- static if (isLoggingActiveAt!ll && ll >= moduleLogLevel!moduleName)
- synchronized (mutex)
+ synchronized (mutex)
{
import std.format.write : formattedWrite;
@@ -1161,7 +949,7 @@ abstract class Logger
lazy bool condition, lazy A args)
if (args.length != 1)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel, condition))
{
@@ -1185,10 +973,9 @@ abstract class Logger
string file = __FILE__, string funcName = __FUNCTION__,
string prettyFuncName = __PRETTY_FUNCTION__)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
- if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel,
- condition) && ll >= moduleLogLevel!moduleName)
+ if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel, condition))
{
this.beginLogMsg(file, line, funcName, prettyFuncName,
moduleName, ll, thisTid, Clock.currTime, this);
@@ -1230,7 +1017,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(const LogLevel ll, lazy A args)
if ((args.length > 1 && !is(Unqual!(A[0]) : bool)) || args.length == 0)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel))
{
@@ -1254,7 +1041,7 @@ abstract class Logger
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(ll, this.logLevel_, globalLogLevel))
{
@@ -1299,7 +1086,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(lazy bool condition, lazy A args)
if (args.length != 1)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(this.logLevel_, this.logLevel_,
globalLogLevel, condition))
@@ -1324,7 +1111,7 @@ abstract class Logger
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(this.logLevel_, this.logLevel_, globalLogLevel,
condition))
@@ -1371,7 +1158,7 @@ abstract class Logger
&& !is(immutable A[0] == immutable LogLevel))
|| args.length == 0)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(this.logLevel_, this.logLevel_,
globalLogLevel))
@@ -1395,7 +1182,7 @@ abstract class Logger
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
if (isLoggingEnabled(this.logLevel_, this.logLevel_, globalLogLevel))
{
@@ -1442,7 +1229,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(const LogLevel ll,
lazy bool condition, lazy string msg, lazy A args)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
import std.format.write : formattedWrite;
@@ -1490,7 +1277,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(const LogLevel ll,
lazy string msg, lazy A args)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
import std.format.write : formattedWrite;
@@ -1539,7 +1326,7 @@ abstract class Logger
string moduleName = __MODULE__, A...)(lazy bool condition,
lazy string msg, lazy A args)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
import std.format.write : formattedWrite;
@@ -1585,7 +1372,7 @@ abstract class Logger
string prettyFuncName = __PRETTY_FUNCTION__,
string moduleName = __MODULE__, A...)(lazy string msg, lazy A args)
{
- static if (isLoggingActive) synchronized (mutex)
+ synchronized (mutex)
{
import std.format.write : formattedWrite;
diff --git a/libphobos/src/std/experimental/logger/package.d b/libphobos/src/std/experimental/logger/package.d
index 79245ec..89dc713 100644
--- a/libphobos/src/std/experimental/logger/package.d
+++ b/libphobos/src/std/experimental/logger/package.d
@@ -146,26 +146,6 @@ To gain more precise control over the logging process, additionally to
overriding the `writeLogMsg` method the methods `beginLogMsg`,
`logMsgPart` and `finishLogMsg` can be overridden.
-$(H3 Compile Time Disabling of `Logger`)
-In order to disable logging at compile time, pass `StdLoggerDisableLogging` as a
-version argument to the `D` compiler when compiling your program code.
-This will disable all logging functionality.
-Specific `LogLevel` can be disabled at compile time as well.
-In order to disable logging with the `trace` `LogLevel` pass
-`StdLoggerDisableTrace` as a version.
-The following table shows which version statement disables which
-`LogLevel`.
-$(TABLE
- $(TR $(TD `LogLevel.trace` ) $(TD StdLoggerDisableTrace))
- $(TR $(TD `LogLevel.info` ) $(TD StdLoggerDisableInfo))
- $(TR $(TD `LogLevel.warning` ) $(TD StdLoggerDisableWarning))
- $(TR $(TD `LogLevel.error` ) $(TD StdLoggerDisableError))
- $(TR $(TD `LogLevel.critical` ) $(TD StdLoggerDisableCritical))
- $(TR $(TD `LogLevel.fatal` ) $(TD StdLoggerDisableFatal))
-)
-Such a version statement will only disable logging in the associated compile
-unit.
-
$(H3 Provided Logger)
By default four `Logger` implementations are given. The `FileLogger`
logs data to files. It can also be used to log to `stdout` and `stderr`
diff --git a/libphobos/src/std/file.d b/libphobos/src/std/file.d
index 6bc7d4d..b8b4a8c 100644
--- a/libphobos/src/std/file.d
+++ b/libphobos/src/std/file.d
@@ -176,9 +176,9 @@ class FileException : Exception
private this(scope const(char)[] name, scope const(char)[] msg, string file, size_t line, uint errno) @safe pure
{
if (msg.empty)
- super(name.idup, file, line);
+ super(name is null ? "(null)" : name.idup, file, line);
else
- super(text(name, ": ", msg), file, line);
+ super(text(name is null ? "(null)" : name, ": ", msg), file, line);
this.errno = errno;
}
@@ -1067,11 +1067,38 @@ private void removeImpl(scope const(char)[] name, scope const(FSChar)* namez) @t
if (!name)
{
import core.stdc.string : strlen;
- auto len = strlen(namez);
+
+ auto len = namez ? strlen(namez) : 0;
name = namez[0 .. len];
}
cenforce(core.stdc.stdio.remove(namez) == 0,
- "Failed to remove file " ~ name);
+ "Failed to remove file " ~ (name is null ? "(null)" : name));
+ }
+}
+
+@safe unittest
+{
+ import std.exception : collectExceptionMsg, assertThrown;
+
+ string filename = null; // e.g. as returned by File.tmpfile.name
+
+ version (linux)
+ {
+ // exact exception message is OS-dependent
+ auto msg = filename.remove.collectExceptionMsg!FileException;
+ assert("Failed to remove file (null): Bad address" == msg, msg);
+ }
+ else version (Windows)
+ {
+ import std.algorithm.searching : startsWith;
+
+ // don't test exact message on windows, it's language dependent
+ auto msg = filename.remove.collectExceptionMsg!FileException;
+ assert(msg.startsWith("(null):"), msg);
+ }
+ else
+ {
+ assertThrown!FileException(filename.remove);
}
}
@@ -3610,7 +3637,7 @@ version (StdDdoc)
Throws:
$(LREF FileException) if the file does not exist.
+/
- this(string path);
+ this(return scope string path);
version (Windows)
{
@@ -3772,7 +3799,7 @@ else version (Windows)
public:
alias name this;
- this(string path)
+ this(return scope string path)
{
import std.datetime.systime : FILETIMEToSysTime;
@@ -3881,7 +3908,7 @@ else version (Posix)
public:
alias name this;
- this(string path)
+ this(return scope string path)
{
if (!path.exists)
throw new FileException(path, "File does not exist");
@@ -4424,7 +4451,7 @@ void rmdirRecurse(scope const(char)[] pathname) @safe
}
/// ditto
-void rmdirRecurse(ref DirEntry de) @safe
+void rmdirRecurse(ref scope DirEntry de) @safe
{
if (!de.isDir)
throw new FileException(de.name, "Not a directory");
@@ -4459,7 +4486,7 @@ void rmdirRecurse(ref DirEntry de) @safe
//"rmdirRecurse(in char[] pathname)" implementation. That is needlessly
//expensive.
//A DirEntry is a bit big (72B), so keeping the "by ref" signature is desirable.
-void rmdirRecurse(DirEntry de) @safe
+void rmdirRecurse(scope DirEntry de) @safe
{
rmdirRecurse(de);
}
@@ -4511,22 +4538,20 @@ version (Posix) @system unittest
enforce(!exists(deleteme));
}
-@system unittest
+@safe unittest
{
- void[] buf;
-
- buf = new void[10];
- (cast(byte[]) buf)[] = 3;
+ ubyte[] buf = new ubyte[10];
+ buf[] = 3;
string unit_file = deleteme ~ "-unittest_write.tmp";
if (exists(unit_file)) remove(unit_file);
- write(unit_file, buf);
+ write(unit_file, cast(void[]) buf);
void[] buf2 = read(unit_file);
- assert(buf == buf2);
+ assert(cast(void[]) buf == buf2);
string unit2_file = deleteme ~ "-unittest_write2.tmp";
copy(unit_file, unit2_file);
buf2 = read(unit2_file);
- assert(buf == buf2);
+ assert(cast(void[]) buf == buf2);
remove(unit_file);
assert(!exists(unit_file));
@@ -5042,7 +5067,7 @@ auto dirEntries(string path, string pattern, SpanMode mode,
return filter!f(DirIterator(path, mode, followSymlink));
}
-@system unittest
+@safe unittest
{
import std.stdio : writefln;
immutable dpath = deleteme ~ "_dir";
@@ -5059,11 +5084,11 @@ auto dirEntries(string path, string pattern, SpanMode mode,
mkdir(dpath);
write(fpath, "hello world");
- version (Posix)
+ version (Posix) () @trusted
{
core.sys.posix.unistd.symlink((dpath ~ '\0').ptr, (sdpath ~ '\0').ptr);
core.sys.posix.unistd.symlink((fpath ~ '\0').ptr, (sfpath ~ '\0').ptr);
- }
+ } ();
static struct Flags { bool dir, file, link; }
auto tests = [dpath : Flags(true), fpath : Flags(false, true)];
diff --git a/libphobos/src/std/math/algebraic.d b/libphobos/src/std/math/algebraic.d
index db70b7a..4791766 100644
--- a/libphobos/src/std/math/algebraic.d
+++ b/libphobos/src/std/math/algebraic.d
@@ -496,9 +496,9 @@ if (isFloatingPoint!T)
[ 1.0L, 4.0L, 8.0L, 9.0L ],
[ 4.0L, 4.0L, 7.0L, 9.0L ],
[ 12.0L, 16.0L, 21.0L, 29.0L ],
- [ 1e+8L, 1.0L, 1e-8L, 1e+8L ],
- [ 1.0L, 1e+8L, 1e-8L, 1e+8L ],
- [ 1e-8L, 1.0L, 1e+8L, 1e+8L ],
+ [ 1e+8L, 1.0L, 1e-8L, 1e+8L+5e-9L ],
+ [ 1.0L, 1e+8L, 1e-8L, 1e+8L+5e-9L ],
+ [ 1e-8L, 1.0L, 1e+8L, 1e+8L+5e-9L ],
[ 1e-2L, 1e-4L, 1e-4L, 0.010000999950004999375L ],
[ 2147483647.0L, 2147483647.0L, 2147483647.0L, 3719550785.027307813987L ]
];
diff --git a/libphobos/src/std/math/exponential.d b/libphobos/src/std/math/exponential.d
index daf2cec..e32330f 100644
--- a/libphobos/src/std/math/exponential.d
+++ b/libphobos/src/std/math/exponential.d
@@ -2862,14 +2862,16 @@ float ldexp(float n, int exp) @safe pure nothrow @nogc { return core.math.ldex
private
{
- import std.math : floatTraits, RealFormat;
-
- version (INLINE_YL2X) {} else
+ // Coefficients shared across log(), log2(), log10().
+ template LogCoeffs(T)
{
- static if (floatTraits!real.realFormat == RealFormat.ieeeQuadruple)
+ import std.math : floatTraits, RealFormat;
+
+ static if (floatTraits!T.realFormat == RealFormat.ieeeQuadruple)
{
- // Coefficients for log(1 + x) = x - x**2/2 + x**3 P(x)/Q(x)
- static immutable real[13] logCoeffsP = [
+ // Coefficients for log(1 + x) = x - x^^2/2 + x^^3 P(x)/Q(x)
+ // Theoretical peak relative error = 5.3e-37
+ static immutable real[13] logP = [
1.313572404063446165910279910527789794488E4L,
7.771154681358524243729929227226708890930E4L,
2.014652742082537582487669938141683759923E5L,
@@ -2884,7 +2886,7 @@ private
4.998469661968096229986658302195402690910E-1L,
1.538612243596254322971797716843006400388E-6L
];
- static immutable real[13] logCoeffsQ = [
+ static immutable real[13] logQ = [
3.940717212190338497730839731583397586124E4L,
2.626900195321832660448791748036714883242E5L,
7.777690340007566932935753241556479363645E5L,
@@ -2900,9 +2902,18 @@ private
1.0
];
- // Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2)
+ // log2 uses the same coefficients as log.
+ alias log2P = logP;
+ alias log2Q = logQ;
+
+ // log10 uses the same coefficients as log.
+ alias log10P = logP;
+ alias log10Q = logQ;
+
+ // Coefficients for log(x) = z + z^^3 P(z^^2)/Q(z^^2)
// where z = 2(x-1)/(x+1)
- static immutable real[6] logCoeffsR = [
+ // Theoretical peak relative error = 1.1e-35
+ static immutable real[6] logR = [
1.418134209872192732479751274970992665513E5L,
-8.977257995689735303686582344659576526998E4L,
2.048819892795278657810231591630928516206E4L,
@@ -2910,7 +2921,7 @@ private
8.057002716646055371965756206836056074715E1L,
-8.828896441624934385266096344596648080902E-1L
];
- static immutable real[7] logCoeffsS = [
+ static immutable real[7] logS = [
1.701761051846631278975701529965589676574E6L,
-1.332535117259762928288745111081235577029E6L,
4.001557694070773974936904547424676279307E5L,
@@ -2922,8 +2933,9 @@ private
}
else
{
- // Coefficients for log(1 + x) = x - x**2/2 + x**3 P(x)/Q(x)
- static immutable real[7] logCoeffsP = [
+ // Coefficients for log(1 + x) = x - x^^2/2 + x^^3 P(x)/Q(x)
+ // Theoretical peak relative error = 2.32e-20
+ static immutable real[7] logP = [
2.0039553499201281259648E1L,
5.7112963590585538103336E1L,
6.0949667980987787057556E1L,
@@ -2932,7 +2944,7 @@ private
4.9854102823193375972212E-1L,
4.5270000862445199635215E-5L,
];
- static immutable real[7] logCoeffsQ = [
+ static immutable real[7] logQ = [
6.0118660497603843919306E1L,
2.1642788614495947685003E2L,
3.0909872225312059774938E2L,
@@ -2942,15 +2954,42 @@ private
1.0000000000000000000000E0L,
];
- // Coefficients for log(x) = z + z^3 P(z^2)/Q(z^2)
+ // Coefficients for log(1 + x) = x - x^^2/2 + x^^3 P(x)/Q(x)
+ // Theoretical peak relative error = 6.2e-22
+ static immutable real[7] log2P = [
+ 1.0747524399916215149070E2L,
+ 3.4258224542413922935104E2L,
+ 4.2401812743503691187826E2L,
+ 2.5620629828144409632571E2L,
+ 7.7671073698359539859595E1L,
+ 1.0767376367209449010438E1L,
+ 4.9962495940332550844739E-1L,
+ ];
+ static immutable real[8] log2Q = [
+ 3.2242573199748645407652E2L,
+ 1.2695660352705325274404E3L,
+ 2.0307734695595183428202E3L,
+ 1.6911722418503949084863E3L,
+ 7.7952888181207260646090E2L,
+ 1.9444210022760132894510E2L,
+ 2.3479774160285863271658E1L,
+ 1.0000000000000000000000E0,
+ ];
+
+ // log10 uses the same coefficients as log2.
+ alias log10P = log2P;
+ alias log10Q = log2Q;
+
+ // Coefficients for log(x) = z + z^^3 P(z^^2)/Q(z^^2)
// where z = 2(x-1)/(x+1)
- static immutable real[4] logCoeffsR = [
+ // Theoretical peak relative error = 6.16e-22
+ static immutable real[4] logR = [
-3.5717684488096787370998E1L,
1.0777257190312272158094E1L,
-7.1990767473014147232598E-1L,
1.9757429581415468984296E-3L,
];
- static immutable real[4] logCoeffsS = [
+ static immutable real[4] logS = [
-4.2861221385716144629696E2L,
1.9361891836232102174846E2L,
-2.6201045551331104417768E1L,
@@ -2972,92 +3011,100 @@ private
*/
real log(real x) @safe pure nothrow @nogc
{
- import std.math.constants : LN2, LOG2, SQRT1_2;
- import std.math.traits : isInfinity, isNaN, signbit;
- import std.math.algebraic : poly;
-
version (INLINE_YL2X)
+ {
+ import std.math.constants : LN2;
return core.math.yl2x(x, LN2);
+ }
else
- {
- // C1 + C2 = LN2.
- enum real C1 = 6.93145751953125E-1L;
- enum real C2 = 1.428606820309417232121458176568075500134E-6L;
+ return logImpl(x);
+}
- // Special cases.
- if (isNaN(x))
- return x;
- if (isInfinity(x) && !signbit(x))
- return x;
- if (x == 0.0)
- return -real.infinity;
- if (x < 0.0)
- return real.nan;
+///
+@safe pure nothrow @nogc unittest
+{
+ import std.math.operations : feqrel;
+ import std.math.constants : E;
- // Separate mantissa from exponent.
- // Note, frexp is used so that denormal numbers will be handled properly.
- real y, z;
- int exp;
+ assert(feqrel(log(E), 1) >= real.mant_dig - 1);
+}
- x = frexp(x, exp);
+private T logImpl(T)(T x) @safe pure nothrow @nogc
+{
+ import std.math.constants : SQRT1_2;
+ import std.math.algebraic : poly;
+ import std.math.traits : isInfinity, isNaN, signbit;
- // Logarithm using log(x) = z + z^^3 R(z) / S(z),
- // where z = 2(x - 1)/(x + 1)
- if ((exp > 2) || (exp < -2))
- {
- if (x < SQRT1_2)
- { // 2(2x - 1)/(2x + 1)
- exp -= 1;
- z = x - 0.5;
- y = 0.5 * z + 0.5;
- }
- else
- { // 2(x - 1)/(x + 1)
- z = x - 0.5;
- z -= 0.5;
- y = 0.5 * x + 0.5;
- }
- x = z / y;
- z = x * x;
- z = x * (z * poly(z, logCoeffsR) / poly(z, logCoeffsS));
- z += exp * C2;
- z += x;
- z += exp * C1;
+ alias coeffs = LogCoeffs!T;
- return z;
- }
+ // C1 + C2 = LN2.
+ enum T C1 = 6.93145751953125E-1L;
+ enum T C2 = 1.428606820309417232121458176568075500134E-6L;
- // Logarithm using log(1 + x) = x - .5x^^2 + x^^3 P(x) / Q(x)
+ // Special cases.
+ if (isNaN(x))
+ return x;
+ if (isInfinity(x) && !signbit(x))
+ return x;
+ if (x == 0.0)
+ return -T.infinity;
+ if (x < 0.0)
+ return T.nan;
+
+ // Separate mantissa from exponent.
+ // Note, frexp is used so that denormal numbers will be handled properly.
+ T y, z;
+ int exp;
+
+ x = frexp(x, exp);
+
+ // Logarithm using log(x) = z + z^^3 R(z) / S(z),
+ // where z = 2(x - 1)/(x + 1)
+ if ((exp > 2) || (exp < -2))
+ {
if (x < SQRT1_2)
- {
+ { // 2(2x - 1)/(2x + 1)
exp -= 1;
- x = 2.0 * x - 1.0;
+ z = x - 0.5;
+ y = 0.5 * z + 0.5;
}
else
- {
- x = x - 1.0;
+ { // 2(x - 1)/(x + 1)
+ z = x - 0.5;
+ z -= 0.5;
+ y = 0.5 * x + 0.5;
}
+ x = z / y;
z = x * x;
- y = x * (z * poly(x, logCoeffsP) / poly(x, logCoeffsQ));
- y += exp * C2;
- z = y - 0.5 * z;
-
- // Note, the sum of above terms does not exceed x/4,
- // so it contributes at most about 1/4 lsb to the error.
+ z = x * (z * poly(z, coeffs.logR) / poly(z, coeffs.logS));
+ z += exp * C2;
z += x;
z += exp * C1;
return z;
}
-}
-///
-@safe pure nothrow @nogc unittest
-{
- import std.math.operations : feqrel;
- import std.math.constants : E;
+ // Logarithm using log(1 + x) = x - .5x^^2 + x^^3 P(x) / Q(x)
+ if (x < SQRT1_2)
+ {
+ exp -= 1;
+ x = 2.0 * x - 1.0;
+ }
+ else
+ {
+ x = x - 1.0;
+ }
+ z = x * x;
+ y = x * (z * poly(x, coeffs.logP) / poly(x, coeffs.logQ));
+ y += exp * C2;
+ z = y - 0.5 * z;
- assert(feqrel(log(E), 1) >= real.mant_dig - 1);
+ // Note, the sum of above terms does not exceed x/4,
+ // so it contributes at most about 1/4 lsb to the error.
+ z += x;
+ z += exp * C1;
+
+ return z;
}
/**************************************
@@ -3072,95 +3119,103 @@ real log(real x) @safe pure nothrow @nogc
*/
real log10(real x) @safe pure nothrow @nogc
{
- import std.math.constants : LOG2, LN2, SQRT1_2;
- import std.math.algebraic : poly;
- import std.math.traits : isNaN, isInfinity, signbit;
-
version (INLINE_YL2X)
+ {
+ import std.math.constants : LOG2;
return core.math.yl2x(x, LOG2);
+ }
else
- {
- // log10(2) split into two parts.
- enum real L102A = 0.3125L;
- enum real L102B = -1.14700043360188047862611052755069732318101185E-2L;
+ return log10Impl(x);
+}
- // log10(e) split into two parts.
- enum real L10EA = 0.5L;
- enum real L10EB = -6.570551809674817234887108108339491770560299E-2L;
+///
+@safe pure nothrow @nogc unittest
+{
+ import std.math.algebraic : fabs;
- // Special cases are the same as for log.
- if (isNaN(x))
- return x;
- if (isInfinity(x) && !signbit(x))
- return x;
- if (x == 0.0)
- return -real.infinity;
- if (x < 0.0)
- return real.nan;
+ assert(fabs(log10(1000) - 3) < .000001);
+}
- // Separate mantissa from exponent.
- // Note, frexp is used so that denormal numbers will be handled properly.
- real y, z;
- int exp;
+private T log10Impl(T)(T x) @safe pure nothrow @nogc
+{
+ import std.math.constants : SQRT1_2;
+ import std.math.algebraic : poly;
+ import std.math.traits : isNaN, isInfinity, signbit;
- x = frexp(x, exp);
+ alias coeffs = LogCoeffs!T;
- // Logarithm using log(x) = z + z^^3 R(z) / S(z),
- // where z = 2(x - 1)/(x + 1)
- if ((exp > 2) || (exp < -2))
- {
- if (x < SQRT1_2)
- { // 2(2x - 1)/(2x + 1)
- exp -= 1;
- z = x - 0.5;
- y = 0.5 * z + 0.5;
- }
- else
- { // 2(x - 1)/(x + 1)
- z = x - 0.5;
- z -= 0.5;
- y = 0.5 * x + 0.5;
- }
- x = z / y;
- z = x * x;
- y = x * (z * poly(z, logCoeffsR) / poly(z, logCoeffsS));
- goto Ldone;
- }
+ // log10(2) split into two parts.
+ enum T L102A = 0.3125L;
+ enum T L102B = -1.14700043360188047862611052755069732318101185E-2L;
+
+ // log10(e) split into two parts.
+ enum T L10EA = 0.5L;
+ enum T L10EB = -6.570551809674817234887108108339491770560299E-2L;
+
+ // Special cases are the same as for log.
+ if (isNaN(x))
+ return x;
+ if (isInfinity(x) && !signbit(x))
+ return x;
+ if (x == 0.0)
+ return -T.infinity;
+ if (x < 0.0)
+ return T.nan;
+
+ // Separate mantissa from exponent.
+ // Note, frexp is used so that denormal numbers will be handled properly.
+ T y, z;
+ int exp;
+
+ x = frexp(x, exp);
- // Logarithm using log(1 + x) = x - .5x^^2 + x^^3 P(x) / Q(x)
+ // Logarithm using log(x) = z + z^^3 R(z) / S(z),
+ // where z = 2(x - 1)/(x + 1)
+ if ((exp > 2) || (exp < -2))
+ {
if (x < SQRT1_2)
- {
+ { // 2(2x - 1)/(2x + 1)
exp -= 1;
- x = 2.0 * x - 1.0;
+ z = x - 0.5;
+ y = 0.5 * z + 0.5;
}
else
- x = x - 1.0;
-
+ { // 2(x - 1)/(x + 1)
+ z = x - 0.5;
+ z -= 0.5;
+ y = 0.5 * x + 0.5;
+ }
+ x = z / y;
z = x * x;
- y = x * (z * poly(x, logCoeffsP) / poly(x, logCoeffsQ));
- y = y - 0.5 * z;
-
- // Multiply log of fraction by log10(e) and base 2 exponent by log10(2).
- // This sequence of operations is critical and it may be horribly
- // defeated by some compiler optimizers.
- Ldone:
- z = y * L10EB;
- z += x * L10EB;
- z += exp * L102B;
- z += y * L10EA;
- z += x * L10EA;
- z += exp * L102A;
+ y = x * (z * poly(z, coeffs.logR) / poly(z, coeffs.logS));
+ goto Ldone;
+ }
- return z;
+ // Logarithm using log(1 + x) = x - .5x^^2 + x^^3 P(x) / Q(x)
+ if (x < SQRT1_2)
+ {
+ exp -= 1;
+ x = 2.0 * x - 1.0;
}
-}
+ else
+ x = x - 1.0;
-///
-@safe pure nothrow @nogc unittest
-{
- import std.math.algebraic : fabs;
+ z = x * x;
+ y = x * (z * poly(x, coeffs.log10P) / poly(x, coeffs.log10Q));
+ y = y - 0.5 * z;
- assert(fabs(log10(1000) - 3) < .000001);
+ // Multiply log of fraction by log10(e) and base 2 exponent by log10(2).
+ // This sequence of operations is critical and it may be horribly
+ // defeated by some compiler optimizers.
+Ldone:
+ z = y * L10EB;
+ z += x * L10EB;
+ z += exp * L102B;
+ z += y * L10EA;
+ z += x * L10EA;
+ z += exp * L102A;
+
+ return z;
}
/**
@@ -3179,29 +3234,15 @@ real log10(real x) @safe pure nothrow @nogc
*/
real log1p(real x) @safe pure nothrow @nogc
{
- import std.math.traits : isNaN, isInfinity, signbit;
- import std.math.constants : LN2;
-
version (INLINE_YL2X)
{
// On x87, yl2xp1 is valid if and only if -0.5 <= lg(x) <= 0.5,
// ie if -0.29 <= x <= 0.414
+ import std.math.constants : LN2;
return (core.math.fabs(x) <= 0.25) ? core.math.yl2xp1(x, LN2) : core.math.yl2x(x+1, LN2);
}
else
- {
- // Special cases.
- if (isNaN(x) || x == 0.0)
- return x;
- if (isInfinity(x) && !signbit(x))
- return x;
- if (x == -1.0)
- return -real.infinity;
- if (x < -1.0)
- return real.nan;
-
- return log(x + 1.0);
- }
+ return log1pImpl(x);
}
///
@@ -3220,6 +3261,23 @@ real log1p(real x) @safe pure nothrow @nogc
assert(log1p(real.infinity) == real.infinity);
}
+private T log1pImpl(T)(T x) @safe pure nothrow @nogc
+{
+ import std.math.traits : isNaN, isInfinity, signbit;
+
+ // Special cases.
+ if (isNaN(x) || x == 0.0)
+ return x;
+ if (isInfinity(x) && !signbit(x))
+ return x;
+ if (x == -1.0)
+ return -T.infinity;
+ if (x < -1.0)
+ return T.nan;
+
+ return logImpl(x + 1.0);
+}
+
/***************************************
* Calculates the base-2 logarithm of x:
* $(SUB log, 2)x
@@ -3233,78 +3291,10 @@ real log1p(real x) @safe pure nothrow @nogc
*/
real log2(real x) @safe pure nothrow @nogc
{
- import std.math.traits : isNaN, isInfinity, signbit;
- import std.math.constants : SQRT1_2, LOG2E;
- import std.math.algebraic : poly;
-
version (INLINE_YL2X)
return core.math.yl2x(x, 1.0L);
else
- {
- // Special cases are the same as for log.
- if (isNaN(x))
- return x;
- if (isInfinity(x) && !signbit(x))
- return x;
- if (x == 0.0)
- return -real.infinity;
- if (x < 0.0)
- return real.nan;
-
- // Separate mantissa from exponent.
- // Note, frexp is used so that denormal numbers will be handled properly.
- real y, z;
- int exp;
-
- x = frexp(x, exp);
-
- // Logarithm using log(x) = z + z^^3 R(z) / S(z),
- // where z = 2(x - 1)/(x + 1)
- if ((exp > 2) || (exp < -2))
- {
- if (x < SQRT1_2)
- { // 2(2x - 1)/(2x + 1)
- exp -= 1;
- z = x - 0.5;
- y = 0.5 * z + 0.5;
- }
- else
- { // 2(x - 1)/(x + 1)
- z = x - 0.5;
- z -= 0.5;
- y = 0.5 * x + 0.5;
- }
- x = z / y;
- z = x * x;
- y = x * (z * poly(z, logCoeffsR) / poly(z, logCoeffsS));
- goto Ldone;
- }
-
- // Logarithm using log(1 + x) = x - .5x^^2 + x^^3 P(x) / Q(x)
- if (x < SQRT1_2)
- {
- exp -= 1;
- x = 2.0 * x - 1.0;
- }
- else
- x = x - 1.0;
-
- z = x * x;
- y = x * (z * poly(x, logCoeffsP) / poly(x, logCoeffsQ));
- y = y - 0.5 * z;
-
- // Multiply log of fraction by log10(e) and base 2 exponent by log10(2).
- // This sequence of operations is critical and it may be horribly
- // defeated by some compiler optimizers.
- Ldone:
- z = y * (LOG2E - 1.0);
- z += x * (LOG2E - 1.0);
- z += y;
- z += x;
- z += exp;
-
- return z;
- }
+ return log2Impl(x);
}
///
@@ -3323,6 +3313,79 @@ real log2(real x) @safe pure nothrow @nogc
assert(isClose(log2(1024.0L), 10, 1e-18));
}
+private T log2Impl(T)(T x) @safe pure nothrow @nogc
+{
+ import std.math.traits : isNaN, isInfinity, signbit;
+ import std.math.constants : SQRT1_2, LOG2E;
+ import std.math.algebraic : poly;
+
+ alias coeffs = LogCoeffs!T;
+
+ // Special cases are the same as for log.
+ if (isNaN(x))
+ return x;
+ if (isInfinity(x) && !signbit(x))
+ return x;
+ if (x == 0.0)
+ return -T.infinity;
+ if (x < 0.0)
+ return T.nan;
+
+ // Separate mantissa from exponent.
+ // Note, frexp is used so that denormal numbers will be handled properly.
+ T y, z;
+ int exp;
+
+ x = frexp(x, exp);
+
+ // Logarithm using log(x) = z + z^^3 R(z) / S(z),
+ // where z = 2(x - 1)/(x + 1)
+ if ((exp > 2) || (exp < -2))
+ {
+ if (x < SQRT1_2)
+ { // 2(2x - 1)/(2x + 1)
+ exp -= 1;
+ z = x - 0.5;
+ y = 0.5 * z + 0.5;
+ }
+ else
+ { // 2(x - 1)/(x + 1)
+ z = x - 0.5;
+ z -= 0.5;
+ y = 0.5 * x + 0.5;
+ }
+ x = z / y;
+ z = x * x;
+ y = x * (z * poly(z, coeffs.logR) / poly(z, coeffs.logS));
+ goto Ldone;
+ }
+
+ // Logarithm using log(1 + x) = x - .5x^^2 + x^^3 P(x) / Q(x)
+ if (x < SQRT1_2)
+ {
+ exp -= 1;
+ x = 2.0 * x - 1.0;
+ }
+ else
+ x = x - 1.0;
+
+ z = x * x;
+ y = x * (z * poly(x, coeffs.log2P) / poly(x, coeffs.log2Q));
+ y = y - 0.5 * z;
+
+ // Multiply log of fraction by log10(e) and base 2 exponent by log10(2).
+ // This sequence of operations is critical and it may be horribly
+ // defeated by some compiler optimizers.
+Ldone:
+ z = y * (LOG2E - 1.0);
+ z += x * (LOG2E - 1.0);
+ z += y;
+ z += x;
+ z += exp;
+
+ return z;
+}
+
/*****************************************
* Extracts the exponent of x as a signed integral value.
*
@@ -3337,35 +3400,23 @@ real log2(real x) @safe pure nothrow @nogc
* $(TR $(TD $(PLUSMN)0.0) $(TD -$(INFIN)) $(TD yes) )
* )
*/
-real logb(real x) @trusted nothrow @nogc
+pragma(inline, true)
+real logb(real x) @trusted pure nothrow @nogc
{
version (InlineAsm_X87_MSVC)
- {
- version (X86_64)
- {
- asm pure nothrow @nogc
- {
- naked ;
- fld real ptr [RCX] ;
- fxtract ;
- fstp ST(0) ;
- ret ;
- }
- }
- else
- {
- asm pure nothrow @nogc
- {
- fld x ;
- fxtract ;
- fstp ST(0) ;
- }
- }
- }
+ return logbAsm(x);
else
- return core.stdc.math.logbl(x);
+ return logbImpl(x);
}
+/// ditto
+pragma(inline, true)
+double logb(double x) @trusted pure nothrow @nogc { return logbImpl(x); }
+
+/// ditto
+pragma(inline, true)
+float logb(float x) @trusted pure nothrow @nogc { return logbImpl(x); }
+
///
@safe @nogc nothrow unittest
{
@@ -3377,6 +3428,83 @@ real logb(real x) @trusted nothrow @nogc
assert(logb(-real.infinity) == real.infinity);
}
+@safe @nogc nothrow unittest
+{
+ import std.meta : AliasSeq;
+ import std.typecons : Tuple;
+ import std.math.traits : isNaN;
+ static foreach (F; AliasSeq!(float, double, real))
+ {{
+ alias T = Tuple!(F, F);
+ T[17] vals = // x, logb(x)
+ [
+ T(1.0 , 0 ),
+ T(100.0 , 6 ),
+ T(0.0 , -F.infinity),
+ T(-0.0 , -F.infinity),
+ T(1024 , 10 ),
+ T(-2000 , 10 ),
+ T(0x0.1p-127 , -131 ),
+ T(0x0.01p-127 , -135 ),
+ T(0x0.011p-127 , -135 ),
+ T(F.nan , F.nan ),
+ T(-F.nan , F.nan ),
+ T(F.infinity , F.infinity ),
+ T(-F.infinity , F.infinity ),
+ T(F.min_normal , F.min_exp-1),
+ T(-F.min_normal, F.min_exp-1),
+ T(F.max , F.max_exp-1),
+ T(-F.max , F.max_exp-1),
+ ];
+
+ foreach (elem; vals)
+ {
+ if (isNaN(elem[1]))
+ assert(isNaN(logb(elem[1])));
+ else
+ assert(logb(elem[0]) == elem[1]);
+ }
+ }}
+}
+
+version (InlineAsm_X87_MSVC)
+private T logbAsm(T)(T x) @trusted pure nothrow @nogc
+{
+ version (X86_64)
+ {
+ asm pure nothrow @nogc
+ {
+ naked ;
+ fld real ptr [RCX] ;
+ fxtract ;
+ fstp ST(0) ;
+ ret ;
+ }
+ }
+ else
+ {
+ asm pure nothrow @nogc
+ {
+ fld x ;
+ fxtract ;
+ fstp ST(0) ;
+ }
+ }
+}
+
+private T logbImpl(T)(T x) @trusted pure nothrow @nogc
+{
+ import std.math.traits : isFinite;
+
+ // Handle special cases.
+ if (!isFinite(x))
+ return x * x;
+ if (x == 0)
+ return -1 / (x * x);
+
+ return ilogb(x);
+}
+
/*************************************
* Efficiently calculates x * 2$(SUPERSCRIPT n).
*
diff --git a/libphobos/src/std/math/hardware.d b/libphobos/src/std/math/hardware.d
index 7bff07e..40e42da 100644
--- a/libphobos/src/std/math/hardware.d
+++ b/libphobos/src/std/math/hardware.d
@@ -674,9 +674,9 @@ nothrow @nogc:
enum : ExceptionMask
{
inexactException = 0x01,
- divByZeroException = 0x02,
- underflowException = 0x04,
- overflowException = 0x08,
+ divByZeroException = 0x08,
+ underflowException = 0x02,
+ overflowException = 0x04,
invalidException = 0x10,
severeExceptions = overflowException | divByZeroException
| invalidException,
diff --git a/libphobos/src/std/math/trigonometry.d b/libphobos/src/std/math/trigonometry.d
index 06a7cb1..a3d04c6 100644
--- a/libphobos/src/std/math/trigonometry.d
+++ b/libphobos/src/std/math/trigonometry.d
@@ -467,20 +467,20 @@ private T tanImpl(T)(T x) @safe pure nothrow @nogc
static immutable T[2][] vals =
[
// angle, tan
- [ .5, .54630248984],
- [ 1, 1.5574077247],
- [ 1.5, 14.101419947],
- [ 2, -2.1850398633],
- [ 2.5,-.74702229724],
- [ 3, -.14254654307],
- [ 3.5, .37458564016],
- [ 4, 1.1578212823],
- [ 4.5, 4.6373320546],
- [ 5, -3.3805150062],
- [ 5.5,-.99558405221],
- [ 6, -.29100619138],
- [ 6.5, .22027720035],
- [ 10, .64836082746],
+ [ .5, .546302489843790513255L],
+ [ 1, 1.55740772465490223050L],
+ [ 1.5, 14.1014199471717193876L],
+ [ 2, -2.18503986326151899164L],
+ [ 2.5,-.747022297238660279355L],
+ [ 3, -.142546543074277805295L],
+ [ 3.5, .374585640158594666330L],
+ [ 4, 1.15782128234957758313L],
+ [ 4.5, 4.63733205455118446831L],
+ [ 5, -3.38051500624658563698L],
+ [ 5.5,-.995584052213885017701L],
+ [ 6, -.291006191384749157053L],
+ [ 6.5, .220277200345896811825L],
+ [ 10, .648360827459086671259L],
// special angles
[ PI_4, 1],
@@ -857,11 +857,11 @@ private T atanImpl(T)(T x) @safe pure nothrow @nogc
static immutable T[2][] vals =
[
// x, atan(x)
- [ 0.25, 0.24497866313 ],
- [ 0.5, 0.46364760900 ],
- [ 1, PI_4 ],
- [ 1.5, 0.98279372325 ],
- [ 10, 1.47112767430 ],
+ [ 0.25, 0.244978663126864154172L ],
+ [ 0.5, 0.463647609000806116214L ],
+ [ 1, PI_4 ],
+ [ 1.5, 0.982793723247329067985L ],
+ [ 10, 1.471127674303734591852L ],
];
foreach (ref val; vals)
@@ -1075,10 +1075,10 @@ private T atan2Impl(T)(T y, T x) @safe pure nothrow @nogc
[ 3.0, -3.0, 3 * PI_4 ],
[ -4.0, -4.0, -3 * PI_4 ],
- [ 0.75, 0.25, 1.249045772398 ],
- [ -0.5, 0.375, -0.927295218002 ],
- [ 0.5, -0.125, 1.815774989922 ],
- [ -0.75, -0.5, -2.158798930342 ],
+ [ 0.75, 0.25, 1.2490457723982544258299L ],
+ [ -0.5, 0.375, -0.9272952180016122324285L ],
+ [ 0.5, -0.125, 1.8157749899217607734034L ],
+ [ -0.75, -0.5, -2.1587989303424641704769L ],
];
foreach (ref val; vals)
diff --git a/libphobos/src/std/numeric.d b/libphobos/src/std/numeric.d
index fd532b2..96d20c2 100644
--- a/libphobos/src/std/numeric.d
+++ b/libphobos/src/std/numeric.d
@@ -79,10 +79,12 @@ public enum CustomFloatFlags
none = 0
}
+private enum isIEEEQuadruple = floatTraits!real.realFormat == RealFormat.ieeeQuadruple;
+
private template CustomFloatParams(uint bits)
{
enum CustomFloatFlags flags = CustomFloatFlags.ieee
- ^ ((bits == 80) ? CustomFloatFlags.storeNormalized : CustomFloatFlags.none);
+ ^ ((bits == 80 && !isIEEEQuadruple) ? CustomFloatFlags.storeNormalized : CustomFloatFlags.none);
static if (bits == 8) alias CustomFloatParams = CustomFloatParams!( 4, 3, flags);
static if (bits == 16) alias CustomFloatParams = CustomFloatParams!(10, 5, flags);
static if (bits == 32) alias CustomFloatParams = CustomFloatParams!(23, 8, flags);
@@ -367,11 +369,36 @@ private:
public:
static if (precision == 64) // CustomFloat!80 support hack
{
- ulong significand;
- enum ulong significand_max = ulong.max;
- mixin(bitfields!(
- T_exp , "exponent", exponentWidth,
- bool , "sign" , flags & flags.signed ));
+ static if (isIEEEQuadruple)
+ {
+ // Only use highest 64 significand bits from 112 explicitly stored
+ align (1):
+ enum ulong significand_max = ulong.max;
+ version (LittleEndian)
+ {
+ private ubyte[6] _padding; // 48-bit of padding
+ ulong significand;
+ mixin(bitfields!(
+ T_exp , "exponent", exponentWidth,
+ bool , "sign" , flags & flags.signed ));
+ }
+ else
+ {
+ mixin(bitfields!(
+ T_exp , "exponent", exponentWidth,
+ bool , "sign" , flags & flags.signed ));
+ ulong significand;
+ private ubyte[6] _padding; // 48-bit of padding
+ }
+ }
+ else
+ {
+ ulong significand;
+ enum ulong significand_max = ulong.max;
+ mixin(bitfields!(
+ T_exp , "exponent", exponentWidth,
+ bool , "sign" , flags & flags.signed ));
+ }
}
else
{
@@ -631,23 +658,28 @@ public:
auto x = F(0.125);
assert(x.get!float == 0.125F);
assert(x.get!double == 0.125);
+ assert(x.get!real == 0.125L);
x -= 0.0625;
assert(x.get!float == 0.0625F);
assert(x.get!double == 0.0625);
+ assert(x.get!real == 0.0625L);
x *= 2;
assert(x.get!float == 0.125F);
assert(x.get!double == 0.125);
+ assert(x.get!real == 0.125L);
x /= 4;
assert(x.get!float == 0.03125);
assert(x.get!double == 0.03125);
+ assert(x.get!real == 0.03125L);
x = 0.5;
x ^^= 4;
assert(x.get!float == 1 / 16.0F);
assert(x.get!double == 1 / 16.0);
+ assert(x.get!real == 1 / 16.0L);
}
}
diff --git a/libphobos/src/std/stdio.d b/libphobos/src/std/stdio.d
index 1bde73d..8614dc9 100644
--- a/libphobos/src/std/stdio.d
+++ b/libphobos/src/std/stdio.d
@@ -498,17 +498,21 @@ struct File
private Impl* _p;
private string _name;
- package this(FILE* handle, string name, uint refs = 1, bool isPopened = false) @trusted
+ package this(FILE* handle, string name, uint refs = 1, bool isPopened = false) @trusted @nogc nothrow
{
import core.stdc.stdlib : malloc;
- import std.exception : enforce;
assert(!_p);
- _p = cast(Impl*) enforce(malloc(Impl.sizeof), "Out of memory");
+ _p = cast(Impl*) malloc(Impl.sizeof);
+ if (!_p)
+ {
+ import core.exception : onOutOfMemoryError;
+ onOutOfMemoryError();
+ }
initImpl(handle, name, refs, isPopened);
}
- private void initImpl(FILE* handle, string name, uint refs = 1, bool isPopened = false)
+ private void initImpl(FILE* handle, string name, uint refs = 1, bool isPopened = false) @nogc nothrow pure @safe
{
assert(_p);
_p.handle = handle;
diff --git a/libphobos/src/std/sumtype.d b/libphobos/src/std/sumtype.d
index f3d3152..1d375ef 100644
--- a/libphobos/src/std/sumtype.d
+++ b/libphobos/src/std/sumtype.d
@@ -635,9 +635,19 @@ public:
this.match!destroyIfOwner;
- mixin("Storage newStorage = { ",
- Storage.memberName!T, ": forward!rhs",
- " };");
+ static if (isCopyable!T)
+ {
+ // Workaround for https://issues.dlang.org/show_bug.cgi?id=21542
+ mixin("Storage newStorage = { ",
+ Storage.memberName!T, ": __ctfe ? rhs : forward!rhs",
+ " };");
+ }
+ else
+ {
+ mixin("Storage newStorage = { ",
+ Storage.memberName!T, ": forward!rhs",
+ " };");
+ }
storage = newStorage;
tag = tid;
@@ -678,7 +688,17 @@ public:
{
import core.lifetime : move;
- rhs.match!((ref value) { this = move(value); });
+ rhs.match!((ref value) {
+ static if (isCopyable!(typeof(value)))
+ {
+ // Workaround for https://issues.dlang.org/show_bug.cgi?id=21542
+ this = __ctfe ? value : move(value);
+ }
+ else
+ {
+ this = move(value);
+ }
+ });
return this;
}
}
@@ -1569,6 +1589,28 @@ version (D_BetterC) {} else
}
}
+// Assignment of struct with overloaded opAssign in CTFE
+// https://issues.dlang.org/show_bug.cgi?id=23182
+@safe unittest
+{
+ static struct HasOpAssign
+ {
+ void opAssign(HasOpAssign rhs) {}
+ }
+
+ static SumType!HasOpAssign test()
+ {
+ SumType!HasOpAssign s;
+ // Test both overloads
+ s = HasOpAssign();
+ s = SumType!HasOpAssign();
+ return s;
+ }
+
+ // Force CTFE
+ enum result = test();
+}
+
/// True if `T` is an instance of the `SumType` template, otherwise false.
private enum bool isSumTypeInstance(T) = is(T == SumType!Args, Args...);
diff --git a/libphobos/testsuite/libphobos.cycles/cycles.exp b/libphobos/testsuite/libphobos.cycles/cycles.exp
index 80bdf0e..fa3dfd4 100644
--- a/libphobos/testsuite/libphobos.cycles/cycles.exp
+++ b/libphobos/testsuite/libphobos.cycles/cycles.exp
@@ -23,7 +23,7 @@ set cycle_test_list [list \
{ ignore "" 0 } \
{ abort "object.Error@.*: Cyclic dependency between module mod. and mod." 1 } \
{ print "Cyclic dependency between module mod. and mod." 0 } \
- { deprecate "Deprecation 16211 warning:" 0 } \
+ { deprecate "deprecate is no longer supported, using abort instead" 1 } \
]
# Initialize dg.
diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cpp b/libsanitizer/sanitizer_common/sanitizer_linux.cpp
index e2c32d6..5ba0334 100644
--- a/libsanitizer/sanitizer_common/sanitizer_linux.cpp
+++ b/libsanitizer/sanitizer_common/sanitizer_linux.cpp
@@ -34,7 +34,7 @@
// format. Struct kernel_stat is defined as 'struct stat' in asm/stat.h. To
// access stat from asm/stat.h, without conflicting with definition in
// sys/stat.h, we use this trick.
-#if defined(__mips64)
+#if SANITIZER_MIPS64
#include <asm/unistd.h>
#include <sys/types.h>
#define stat kernel_stat
@@ -124,8 +124,9 @@ const int FUTEX_WAKE_PRIVATE = FUTEX_WAKE | FUTEX_PRIVATE_FLAG;
// Are we using 32-bit or 64-bit Linux syscalls?
// x32 (which defines __x86_64__) has SANITIZER_WORDSIZE == 32
// but it still needs to use 64-bit syscalls.
-#if SANITIZER_LINUX && (defined(__x86_64__) || defined(__powerpc64__) || \
- SANITIZER_WORDSIZE == 64)
+#if SANITIZER_LINUX && (defined(__x86_64__) || defined(__powerpc64__) || \
+ SANITIZER_WORDSIZE == 64 || \
+ (defined(__mips__) && _MIPS_SIM == _ABIN32))
# define SANITIZER_LINUX_USES_64BIT_SYSCALLS 1
#else
# define SANITIZER_LINUX_USES_64BIT_SYSCALLS 0
@@ -289,7 +290,7 @@ static void stat64_to_stat(struct stat64 *in, struct stat *out) {
}
#endif
-#if defined(__mips64)
+#if SANITIZER_MIPS64
// Undefine compatibility macros from <sys/stat.h>
// so that they would not clash with the kernel_stat
// st_[a|m|c]time fields
@@ -343,7 +344,8 @@ uptr internal_stat(const char *path, void *buf) {
#if SANITIZER_FREEBSD
return internal_syscall(SYSCALL(fstatat), AT_FDCWD, (uptr)path, (uptr)buf, 0);
# elif SANITIZER_LINUX
-# if SANITIZER_WORDSIZE == 64 || SANITIZER_X32
+# if SANITIZER_WORDSIZE == 64 || SANITIZER_X32 || \
+ (defined(__mips__) && _MIPS_SIM == _ABIN32)
return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
0);
# else
@@ -366,7 +368,8 @@ uptr internal_lstat(const char *path, void *buf) {
return internal_syscall(SYSCALL(fstatat), AT_FDCWD, (uptr)path, (uptr)buf,
AT_SYMLINK_NOFOLLOW);
# elif SANITIZER_LINUX
-# if defined(_LP64) || SANITIZER_X32
+# if defined(_LP64) || SANITIZER_X32 || \
+ (defined(__mips__) && _MIPS_SIM == _ABIN32)
return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
AT_SYMLINK_NOFOLLOW);
# else
@@ -1053,7 +1056,7 @@ uptr GetMaxVirtualAddress() {
return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1;
#elif SANITIZER_RISCV64
return (1ULL << 38) - 1;
-# elif defined(__mips64)
+# elif SANITIZER_MIPS64
return (1ULL << 40) - 1; // 0x000000ffffffffffUL;
# elif defined(__s390x__)
return (1ULL << 53) - 1; // 0x001fffffffffffffUL;
diff --git a/libsanitizer/sanitizer_common/sanitizer_platform.h b/libsanitizer/sanitizer_common/sanitizer_platform.h
index 8fe0d83..8bd9a32 100644
--- a/libsanitizer/sanitizer_common/sanitizer_platform.h
+++ b/libsanitizer/sanitizer_common/sanitizer_platform.h
@@ -159,7 +159,7 @@
#if defined(__mips__)
# define SANITIZER_MIPS 1
-# if defined(__mips64)
+# if defined(__mips64) && _MIPS_SIM == _ABI64
# define SANITIZER_MIPS32 0
# define SANITIZER_MIPS64 1
# else
diff --git a/libsanitizer/tsan/tsan_rtl_s390x.S b/libsanitizer/tsan/tsan_rtl_s390x.S
index fcff35f..2f445e8 100644
--- a/libsanitizer/tsan/tsan_rtl_s390x.S
+++ b/libsanitizer/tsan/tsan_rtl_s390x.S
@@ -45,3 +45,5 @@ intercept setjmp, _ZN14__interception11real_setjmpE
intercept _setjmp, _ZN14__interception12real__setjmpE
intercept sigsetjmp, _ZN14__interception14real_sigsetjmpE
intercept __sigsetjmp, _ZN14__interception16real___sigsetjmpE
+
+NO_EXEC_STACK_DIRECTIVE
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c061aeb..6abc8fe 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,357 @@
+2022-07-09 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/std/string: Remove obsolete comment about char_traits.h including
+ stl_algobase.h.
+
+2022-07-07 Jonathan Wakely <jwakely@redhat.com>
+
+ PR c++/89074
+ * include/bits/char_traits.h (__gnu_cxx::char_traits::move):
+ Remove workaround for front-end bug.
+
+2022-07-05 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/util/testsuite_fs.h (nonexistent_path): Explain
+ why we need the typecast.
+
+2022-07-05 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/util/testsuite_fs.h (nonexistent_path): Convert
+ the getpid result to an integral type.
+
+2022-07-01 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/106162
+ * include/Makefile.am (largefile-config.h): Add
+ stamp-${host_alias} prerequisite.
+ * include/Makefile.in: Regenerate.
+
+2022-07-01 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/fs_ops.h: Add nodiscard to all pure functions.
+ * include/experimental/bits/fs_ops.h: Likewise.
+ * testsuite/27_io/filesystem/operations/all.cc: Do not discard
+ results of absolute and canonical.
+ * testsuite/27_io/filesystem/operations/absolute.cc: Cast
+ discarded result to void.
+ * testsuite/27_io/filesystem/operations/canonical.cc: Likewise.
+ * testsuite/27_io/filesystem/operations/exists.cc: Likewise.
+ * testsuite/27_io/filesystem/operations/is_empty.cc: Likewise.
+ * testsuite/27_io/filesystem/operations/read_symlink.cc:
+ Likewise.
+ * testsuite/27_io/filesystem/operations/status.cc: Likewise.
+ * testsuite/27_io/filesystem/operations/symlink_status.cc:
+ Likewise.
+ * testsuite/27_io/filesystem/operations/temp_directory_path.cc:
+ Likewise.
+ * testsuite/experimental/filesystem/operations/canonical.cc:
+ Likewise.
+ * testsuite/experimental/filesystem/operations/exists.cc:
+ Likewise.
+ * testsuite/experimental/filesystem/operations/is_empty.cc:
+ Likewise.
+ * testsuite/experimental/filesystem/operations/read_symlink.cc:
+ Likewise.
+ * testsuite/experimental/filesystem/operations/temp_directory_path.cc:
+ Likewise.
+
+2022-07-01 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * configure: Regnerate.
+ * configure.ac (newlib, *-rtems*): Enable TLS support for all RTEMS
+ targets except bfin, lm32, mips, moxie, or1k, and v850.
+ For all RTEMS targets, define HAVE_ALIGNED_ALLOC, HAVE_AT_QUICK_EXIT,
+ HAVE_LINK, HAVE_POLL, HAVE_QUICK_EXIT, HAVE_READLINK, HAVE_SETENV,
+ HAVE_SLEEP, HAVE_SOCKATMARK, HAVE_STRERROR_L, HAVE_SYMLINK,
+ HAVE_TRUNCATE, and HAVE_USLEEP.
+ * crossconfig.m4 (*-rtems*): Remove.
+
+2022-06-30 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/utility.h: Fix comment typos.
+
+2022-06-30 Jonathan Wakely <jwakely@redhat.com>
+
+ * src/c++17/fs_ops.cc (fs::temp_directory_path()): Include path
+ in exception.
+ (fs::temp_directory_path(error_code&)): Rearrange to more
+ closely match the structure of the first overload.
+ * src/filesystem/ops.cc (fs::temp_directory_path): Likewise.
+ * testsuite/27_io/filesystem/operations/temp_directory_path.cc:
+ Check that exception contains the path.
+ * testsuite/experimental/filesystem/operations/temp_directory_path.cc:
+ Likewise.
+
+2022-06-30 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/88881
+ * src/filesystem/ops.cc (has_trailing_slash): New helper
+ function.
+ (fs::status): Strip trailing slashes.
+ (fs::symlink_status): Likewise.
+ * testsuite/experimental/filesystem/operations/temp_directory_path.cc:
+ Clean the environment before each test and use TMP instead of
+ TMPDIR so the test passes on Windows.
+
+2022-06-28 Jonathan Wakely <jwakely@redhat.com>
+
+ * src/filesystem/dir-common.h (_Dir_base::_At_path):
+ Use char_type consistently for paths.
+
+2022-06-28 Jonathan Wakely <jwakely@redhat.com>
+
+ * src/c++17/fs_dir.cc (_Dir::dir_and_pathname):: Replace with
+ current() returning _At_path.
+ (_Dir::_Dir, _Dir::open_subdir, _Dir::do_unlink): Adjust.
+ * src/filesystem/dir-common.h (_Dir_base::_At_path): New class.
+ (_Dir_base::_Dir_Base, _Dir_base::openat): Use _At_path.
+ * src/filesystem/dir.cc (_Dir::dir_and_pathname): Replace with
+ current() returning _At_path.
+ (_Dir::_Dir, _Dir::open_subdir): Adjust.
+
+2022-06-28 Jonathan Wakely <jwakely@redhat.com>
+
+ * src/c++17/fs_dir.cc (_Dir::_Dir) [!_GLIBCXX_HAVE_OPENAT]:
+ Always store pathname if we don't have openat or unlinkat,
+ because the full path is needed to open sub-directories and
+ remove entries.
+
+2022-06-28 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/20_util/from_chars/4.cc: Only use log2 if C99 math
+ functions are available.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/20_util/to_chars/long_double.cc: Use cmath
+ long double overloads for nexttoward and ldexp.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/experimental/simd/standard_abi_usable.cc: Require
+ cmath support.
+ * testsuite/experimental/simd/standard_abi_usable_2.cc:
+ Likewise.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/26_numerics/complex/proj.cc: Skip test in the
+ circumstances in which the implementation of proj is known to
+ be broken.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * src/c++17/fs_dir.cc (dir_and_pathname): Use dirfd if
+ _GLIBCXX_HAVE_OPENAT.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc
+ (test06): Don't create symlinks when NO_SYMLINKS is defined.
+
+2022-06-27 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/lib/dg-options.exp (add_options_for_net_ts):
+ Add -Wl,--gc-sections for RTEMS targets.
+ * testsuite/experimental/net/timer/waitable/dest.cc: Link-time
+ xfail on RTEMS.
+ * testsuite/experimental/net/timer/waitable/ops.cc: Likewise.
+ * testsuite/experimental/net/internet/resolver/ops/lookup.cc:
+ Execution-time xfail on RTEMS.
+ * testsuite/experimental/net/internet/resolver/ops/reverse.cc:
+ Likewise.
+
+2022-06-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/ext/mt_allocator/22309_thread.cc: Include <string>.
+
+2022-06-27 Joel Brobecker <brobecker@adacore.com>
+ Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/util/testsuite_fs.h (__gnu_test::nonexistent_path):
+ Always include a counter in the filename returned.
+
+2022-06-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/move_only_function.h (_Never_valueless_alt):
+ Define partial specialization for std::move_only_function.
+
+2022-06-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/variant (_Build_FUN::_S_fun): Define fallback case
+ as deleted.
+ (__accepted_index, _Extra_visit_slot_needed): Replace class
+ templates with variable templates.
+
+2022-06-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/fs_path.h (__is_path_iter_src): Replace class
+ template with variable template.
+
+2022-06-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/bits/chrono.h (is_clock_v): Define to false.
+ (is_clock_v<T>): Define partial specialization for true cases.
+ (is_clock): Define in terms of is_clock_v.
+
+2022-06-24 Xi Ruoyao <xry111@xry111.site>
+
+ * scripts/extract_symvers.in: Use grep -E instead of egrep.
+ * scripts/run_doxygen: Likewise.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * acinclude.m4 (GLIBCXX_CHECK_FILESYSTEM_DEPS): Check for
+ openat.
+ * configure, config.h.in: Rebuilt.
+ * src/filesystem/dir-common.h (openat): Use ::openat if
+ _GLIBCXX_HAVE_OPENAT.
+ * src/filesystem/dir.cc (dir_and_pathname): Use dirfd if
+ _GLIBCXX_HAVE_OPENAT.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/27_io/filesystem/operations/rename.cc: xfail on
+ rtems.
+ * testsuite/experimental/filesystem/operations/rename.cc:
+ Likewise.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/util/testsuite_fs.h (NO_LAST_WRITE_TIME): Define
+ when appropriate.
+ * testsuite/lib/libstdc++.exp
+ (check_v3_target_fs_last_write_time): New.
+ * testsuite/lib/dg-options.exp (dg-require-target-fs-lwt):
+ New.
+ * testsuite/27_io/filesystem/operations/last_write_time.cc:
+ Skip the test if the features are unavailable.
+ * testsuite/experimental/filesystem/operations/last_write_time.cc:
+ Likewise.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/util/testsuite_fs.h (NO_SPACE): Define if
+ appropriate.
+ * testsuite/lib/libstdc++.exp (check_v3_target_fs_space): New.
+ * testsuite/lib/dg-options.exp (dg-require-target-fs-space):
+ New.
+ * testsuite/27_io/filesystem/operations/space.cc: Require
+ target-fs-space.
+ * testsuite/experimental/filesystem/operations/space.cc:
+ Likewise.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/util/testsuite_fs.h (NO_SYMLINKS): Define on
+ mingw and when create_symlink is a dummy.
+ * testsuite/27_io/filesystem/operations/symlink_status.cc:
+ Drop mingw xfail.
+ (test01, test02): Don't create symlinks when NO_SYMLINKS is
+ defined.
+ * testsuite/27_io/filesystem/operations/canonical.cc (test03):
+ Likewise.
+ * testsuite/27_io/filesystem/operations/copy.cc (test02):
+ Likewise.
+ * testsuite/27_io/filesystem/operations/create_directories.cc
+ (test04): Likewise.
+ * testsuite/27_io/filesystem/operations/create_directory.cc
+ (test01): Likewise.
+ * testsuite/27_io/filesystem/operations/permissions.cc
+ (test03, test04): Likewise.
+ * testsuite/27_io/filesystem/operations/remove.cc (test01):
+ Likewise.
+ * testsuite/27_io/filesystem/operations/remove_all.cc (test01):
+ Likewise.
+ * testsuite/27_io/filesystem/operations/rename.cc
+ (test_symlinks): Likewise.
+ * testsuite/27_io/filesystem/operations/weakly_canonical.cc
+ (test01): Likewise.
+ * testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc
+ (test06): Likewise.
+ * testsuite/experimental/filesystem/operations/copy.cc
+ (test01): Likewise.
+ * testsuite/experimental/filesystem/operations/create_directories.cc
+ (test04): Likewise.
+ * testsuite/experimental/filesystem/operations/create_directory.cc
+ (test01): Likewise.
+ * testsuite/experimental/filesystem/operations/permissions.cc
+ (test03, test04): Likewise.
+ * testsuite/experimental/filesystem/operations/remove.cc
+ (test01): Likewise.
+ * testsuite/experimental/filesystem/operations/remove_all.cc
+ (test01): Likewise.
+ * testsuite/experimental/filesystem/operations/rename.cc
+ (test01): Likewise.
+ * testsuite/lib/libstdc++.exp
+ (v3_check_preprocessor_condition): Add optional inc parameter.
+ Add it to the test program after include bits/c++config.h.
+ (check_v3_target_fs_symlinks): New.
+ * testsuite/lib/dg-options.exp
+ (dg-require-target-fs-symlinks): New.
+ * testsuite/27_io/filesystem/operations/read_symlink.cc:
+ Replace mingw xfail with require target-fs-symlinks.
+ * testsuite/experimental/filesystem/operations/read_symlink.cc:
+ Likewise.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/27_io/filesystem/operations/copy.cc (test02):
+ Select TO after creating FROM.
+ (test03, test04): Likewise.
+ * testsuite/experimental/filesystem/operations/copy.cc
+ (test02, test03, test04): Likewise.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/30_threads/thread/native_handle/cancel.cc: Add an
+ explicit cancellation point in case sleep_for lacks one.
+
+2022-06-24 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/lib/dg-options.exp (add_options_for_net_ts): Add
+ -lbsd for RTEMS targets.
+
+2022-06-23 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/27_io/filesystem/iterators/error_reporting.cc: Use
+ rmdir to remove directories.
+ * testsuite/experimental/filesystem/iterators/error_reporting.cc:
+ Likewise.
+
+2022-06-23 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/26_numerics/random/random_device/entropy.cc: Use
+ numeric_limits<unsigned>::digits.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * libsupc++/eh_globals.cc [!_GLIBCXX_HAVE_TLS]
+ (__eh_globals_init::~__eh_globals_init): Clear _S_init first.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/30_threads/this_thread/60421.cc (test02): Call
+ sched_yield.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/20_util/to_chars/long_double.cc: Require cmath.
+
+2022-06-22 Alexandre Oliva <oliva@adacore.com>
+
+ * testsuite/23_containers/bitset/cons/dr1325-2.cc: Work around
+ global struct bitset.
+ * testsuite/23_containers/bitset/ext/15361.cc: Likewise.
+ * testsuite/23_containers/bitset/input/1.cc: Likewise.
+ * testsuite/23_containers/bitset/to_string/1.cc: Likewise.
+ * testsuite/23_containers/bitset/to_string/dr396.cc: Likewise.
+
+2022-06-17 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/21_strings/basic_string/cons/char/105995.cc: Add
+ missing #include.
+
2022-06-16 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/105995
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 138bd58d..e3cc3a8 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -4773,6 +4773,18 @@ dnl
AC_DEFINE(HAVE_DIRFD, 1, [Define if dirfd is available in <dirent.h>.])
fi
dnl
+ AC_CACHE_CHECK([for openat],
+ glibcxx_cv_openat, [dnl
+ GCC_TRY_COMPILE_OR_LINK(
+ [#include <fcntl.h>],
+ [int fd = ::openat(AT_FDCWD, "", 0);],
+ [glibcxx_cv_openat=yes],
+ [glibcxx_cv_openat=no])
+ ])
+ if test $glibcxx_cv_openat = yes; then
+ AC_DEFINE(HAVE_OPENAT, 1, [Define if openat is available in <fcntl.h>.])
+ fi
+dnl
AC_CACHE_CHECK([for unlinkat],
glibcxx_cv_unlinkat, [dnl
GCC_TRY_COMPILE_OR_LINK(
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index f30a8c5..2a3972e 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -292,6 +292,9 @@
/* Define if <math.h> defines obsolete isnan function. */
#undef HAVE_OBSOLETE_ISNAN
+/* Define if openat is available in <fcntl.h>. */
+#undef HAVE_OPENAT
+
/* Define if poll is available in <poll.h>. */
#undef HAVE_POLL
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 9b94fd7..19ca336 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -29237,6 +29237,45 @@ else
$as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h
+
+ case "${target}" in
+ *-rtems*)
+ case "${target}" in
+ bfin* | lm32* | mips* | moxie* | or1k* | v850*)
+ ;;
+ *)
+ $as_echo "#define HAVE_TLS 1" >>confdefs.h
+
+ ;;
+ esac
+ $as_echo "#define HAVE_ALIGNED_ALLOC 1" >>confdefs.h
+
+ $as_echo "#define HAVE_AT_QUICK_EXIT 1" >>confdefs.h
+
+ $as_echo "#define HAVE_LINK 1" >>confdefs.h
+
+ $as_echo "#define HAVE_POLL 1" >>confdefs.h
+
+ $as_echo "#define HAVE_QUICK_EXIT 1" >>confdefs.h
+
+ $as_echo "#define HAVE_READLINK 1" >>confdefs.h
+
+ $as_echo "#define HAVE_SETENV 1" >>confdefs.h
+
+ $as_echo "#define HAVE_SLEEP 1" >>confdefs.h
+
+ $as_echo "#define HAVE_SOCKATMARK 1" >>confdefs.h
+
+ $as_echo "#define HAVE_STRERROR_L 1" >>confdefs.h
+
+ $as_echo "#define HAVE_SYMLINK 1" >>confdefs.h
+
+ $as_echo "#define HAVE_TRUNCATE 1" >>confdefs.h
+
+ $as_echo "#define HAVE_USLEEP 1" >>confdefs.h
+
+ ;;
+ esac
elif test "x$with_headers" != "xno"; then
# Base decisions on target environment.
@@ -60920,5979 +60959,6 @@ $as_echo "$ac_ld_relro" >&6; }
$as_echo "#define HAVE_SINHL 1" >>confdefs.h
;;
- *-rtems*)
-
- # All these tests are for C++; save the language and the compiler flags.
- # The CXXFLAGS thing is suspicious, but based on similar bits previously
- # found in GLIBCXX_CONFIGURE.
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
-
- # Check for -ffunction-sections -fdata-sections
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for g++ that supports -ffunction-sections -fdata-sections" >&5
-$as_echo_n "checking for g++ that supports -ffunction-sections -fdata-sections... " >&6; }
- CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo; void bar() { };
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_fdsections=yes
-else
- ac_fdsections=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS="$ac_save_CXXFLAGS"
- else
- # this is the suspicious part
- CXXFLAGS=''
- fi
- if test x"$ac_fdsections" = x"yes"; then
- SECTION_FLAGS='-ffunction-sections -fdata-sections'
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_fdsections" >&5
-$as_echo "$ac_fdsections" >&6; }
-
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
- # If we're not using GNU ld, then there's no point in even trying these
- # tests. Check for that first. We should have already tested for gld
- # by now (in libtool), but require it now just to be safe...
- test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
- test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
-
-
-
- # The name set by libtool depends on the version of libtool. Shame on us
- # for depending on an impl detail, but c'est la vie. Older versions used
- # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
- # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
- # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
- # set (hence we're using an older libtool), then set it.
- if test x${with_gnu_ld+set} != xset; then
- if test x${ac_cv_prog_gnu_ld+set} != xset; then
- # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
- with_gnu_ld=no
- else
- with_gnu_ld=$ac_cv_prog_gnu_ld
- fi
- fi
-
- # Start by getting the version number. I think the libtool test already
- # does some of this, but throws away the result.
- glibcxx_ld_is_gold=no
- glibcxx_ld_is_mold=no
- if test x"$with_gnu_ld" = x"yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld version" >&5
-$as_echo_n "checking for ld version... " >&6; }
-
- if $LD --version 2>/dev/null | grep 'GNU gold' >/dev/null 2>&1; then
- glibcxx_ld_is_gold=yes
- elif $LD --version 2>/dev/null | grep 'mold' >/dev/null 2>&1; then
- glibcxx_ld_is_mold=yes
- fi
- ldver=`$LD --version 2>/dev/null |
- sed -e 's/[. ][0-9]\{8\}$//;s/.* \([^ ]\{1,\}\)$/\1/; q'`
-
- glibcxx_gnu_ld_version=`echo $ldver | \
- $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_gnu_ld_version" >&5
-$as_echo "$glibcxx_gnu_ld_version" >&6; }
- fi
-
- # Set --gc-sections.
- glibcxx_have_gc_sections=no
- if test "$glibcxx_ld_is_gold" = "yes" || test "$glibcxx_ld_is_mold" = "yes" ; then
- if $LD --help 2>/dev/null | grep gc-sections >/dev/null 2>&1; then
- glibcxx_have_gc_sections=yes
- fi
- else
- glibcxx_gcsections_min_ld=21602
- if test x"$with_gnu_ld" = x"yes" &&
- test $glibcxx_gnu_ld_version -gt $glibcxx_gcsections_min_ld ; then
- glibcxx_have_gc_sections=yes
- fi
- fi
- if test "$glibcxx_have_gc_sections" = "yes"; then
- # Sufficiently young GNU ld it is! Joy and bunny rabbits!
- # NB: This flag only works reliably after 2.16.1. Configure tests
- # for this are difficult, so hard wire a value that should work.
-
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS='-Wl,--gc-sections'
-
- # Check for -Wl,--gc-sections
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,--gc-sections" >&5
-$as_echo_n "checking for ld that supports -Wl,--gc-sections... " >&6; }
- if test x$gcc_no_link = xyes; then
- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
-fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- int one(void) { return 1; }
- int two(void) { return 2; }
-
-int
-main ()
-{
- two();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_gcsections=yes
-else
- ac_gcsections=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test "$ac_gcsections" = "yes"; then
- rm -f conftest.c
- touch conftest.c
- if $CC -c conftest.c; then
- if $LD --gc-sections -o conftest conftest.o 2>&1 | \
- grep "Warning: gc-sections option ignored" > /dev/null; then
- ac_gcsections=no
- fi
- fi
- rm -f conftest.c conftest.o conftest
- fi
- if test "$ac_gcsections" = "yes"; then
- SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_gcsections" >&5
-$as_echo "$ac_gcsections" >&6; }
-
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- else
- # this is the suspicious part
- CFLAGS=''
- fi
- fi
-
- # Set -z,relro.
- # Note this is only for shared objects.
- ac_ld_relro=no
- if test x"$with_gnu_ld" = x"yes"; then
- # cygwin and mingw uses PE, which has no ELF relro support,
- # multi target ld may confuse configure machinery
- case "$host" in
- *-*-cygwin*)
- ;;
- *-*-mingw*)
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,-z,relro" >&5
-$as_echo_n "checking for ld that supports -Wl,-z,relro... " >&6; }
- cxx_z_relo=`$LD -v --help 2>/dev/null | grep "z relro"`
- if test -n "$cxx_z_relo"; then
- OPT_LDFLAGS="-Wl,-z,relro"
- ac_ld_relro=yes
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ld_relro" >&5
-$as_echo "$ac_ld_relro" >&6; }
- esac
- fi
-
- # Set linker optimization flags.
- if test x"$with_gnu_ld" = x"yes"; then
- OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
- fi
-
-
-
-
-
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5
-$as_echo_n "checking for sin in -lm... " >&6; }
-if ${ac_cv_lib_m_sin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-if test x$gcc_no_link = xyes; then
- as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
-fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sin ();
-int
-main ()
-{
-return sin ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_sin=yes
-else
- ac_cv_lib_m_sin=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sin" >&5
-$as_echo "$ac_cv_lib_m_sin" >&6; }
-if test "x$ac_cv_lib_m_sin" = xyes; then :
- libm="-lm"
-fi
-
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $libm"
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isinf declaration" >&5
-$as_echo_n "checking for isinf declaration... " >&6; }
- if test x${glibcxx_cv_func_isinf_use+set} != xset; then
- if ${glibcxx_cv_func_isinf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isinf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_isinf_use=yes
-else
- glibcxx_cv_func_isinf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_isinf_use" >&5
-$as_echo "$glibcxx_cv_func_isinf_use" >&6; }
-
- if test x$glibcxx_cv_func_isinf_use = x"yes"; then
- for ac_func in isinf
-do :
- ac_fn_c_check_func "$LINENO" "isinf" "ac_cv_func_isinf"
-if test "x$ac_cv_func_isinf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ISINF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _isinf declaration" >&5
-$as_echo_n "checking for _isinf declaration... " >&6; }
- if test x${glibcxx_cv_func__isinf_use+set} != xset; then
- if ${glibcxx_cv_func__isinf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isinf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__isinf_use=yes
-else
- glibcxx_cv_func__isinf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__isinf_use" >&5
-$as_echo "$glibcxx_cv_func__isinf_use" >&6; }
-
- if test x$glibcxx_cv_func__isinf_use = x"yes"; then
- for ac_func in _isinf
-do :
- ac_fn_c_check_func "$LINENO" "_isinf" "ac_cv_func__isinf"
-if test "x$ac_cv_func__isinf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ISINF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isnan declaration" >&5
-$as_echo_n "checking for isnan declaration... " >&6; }
- if test x${glibcxx_cv_func_isnan_use+set} != xset; then
- if ${glibcxx_cv_func_isnan_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isnan(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_isnan_use=yes
-else
- glibcxx_cv_func_isnan_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_isnan_use" >&5
-$as_echo "$glibcxx_cv_func_isnan_use" >&6; }
-
- if test x$glibcxx_cv_func_isnan_use = x"yes"; then
- for ac_func in isnan
-do :
- ac_fn_c_check_func "$LINENO" "isnan" "ac_cv_func_isnan"
-if test "x$ac_cv_func_isnan" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ISNAN 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _isnan declaration" >&5
-$as_echo_n "checking for _isnan declaration... " >&6; }
- if test x${glibcxx_cv_func__isnan_use+set} != xset; then
- if ${glibcxx_cv_func__isnan_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isnan(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__isnan_use=yes
-else
- glibcxx_cv_func__isnan_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__isnan_use" >&5
-$as_echo "$glibcxx_cv_func__isnan_use" >&6; }
-
- if test x$glibcxx_cv_func__isnan_use = x"yes"; then
- for ac_func in _isnan
-do :
- ac_fn_c_check_func "$LINENO" "_isnan" "ac_cv_func__isnan"
-if test "x$ac_cv_func__isnan" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ISNAN 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for finite declaration" >&5
-$as_echo_n "checking for finite declaration... " >&6; }
- if test x${glibcxx_cv_func_finite_use+set} != xset; then
- if ${glibcxx_cv_func_finite_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- finite(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_finite_use=yes
-else
- glibcxx_cv_func_finite_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_finite_use" >&5
-$as_echo "$glibcxx_cv_func_finite_use" >&6; }
-
- if test x$glibcxx_cv_func_finite_use = x"yes"; then
- for ac_func in finite
-do :
- ac_fn_c_check_func "$LINENO" "finite" "ac_cv_func_finite"
-if test "x$ac_cv_func_finite" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FINITE 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _finite declaration" >&5
-$as_echo_n "checking for _finite declaration... " >&6; }
- if test x${glibcxx_cv_func__finite_use+set} != xset; then
- if ${glibcxx_cv_func__finite_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _finite(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__finite_use=yes
-else
- glibcxx_cv_func__finite_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__finite_use" >&5
-$as_echo "$glibcxx_cv_func__finite_use" >&6; }
-
- if test x$glibcxx_cv_func__finite_use = x"yes"; then
- for ac_func in _finite
-do :
- ac_fn_c_check_func "$LINENO" "_finite" "ac_cv_func__finite"
-if test "x$ac_cv_func__finite" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FINITE 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sincos declaration" >&5
-$as_echo_n "checking for sincos declaration... " >&6; }
- if test x${glibcxx_cv_func_sincos_use+set} != xset; then
- if ${glibcxx_cv_func_sincos_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- sincos(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_sincos_use=yes
-else
- glibcxx_cv_func_sincos_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_sincos_use" >&5
-$as_echo "$glibcxx_cv_func_sincos_use" >&6; }
-
- if test x$glibcxx_cv_func_sincos_use = x"yes"; then
- for ac_func in sincos
-do :
- ac_fn_c_check_func "$LINENO" "sincos" "ac_cv_func_sincos"
-if test "x$ac_cv_func_sincos" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SINCOS 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sincos declaration" >&5
-$as_echo_n "checking for _sincos declaration... " >&6; }
- if test x${glibcxx_cv_func__sincos_use+set} != xset; then
- if ${glibcxx_cv_func__sincos_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _sincos(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__sincos_use=yes
-else
- glibcxx_cv_func__sincos_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__sincos_use" >&5
-$as_echo "$glibcxx_cv_func__sincos_use" >&6; }
-
- if test x$glibcxx_cv_func__sincos_use = x"yes"; then
- for ac_func in _sincos
-do :
- ac_fn_c_check_func "$LINENO" "_sincos" "ac_cv_func__sincos"
-if test "x$ac_cv_func__sincos" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__SINCOS 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fpclass declaration" >&5
-$as_echo_n "checking for fpclass declaration... " >&6; }
- if test x${glibcxx_cv_func_fpclass_use+set} != xset; then
- if ${glibcxx_cv_func_fpclass_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- fpclass(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_fpclass_use=yes
-else
- glibcxx_cv_func_fpclass_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_fpclass_use" >&5
-$as_echo "$glibcxx_cv_func_fpclass_use" >&6; }
-
- if test x$glibcxx_cv_func_fpclass_use = x"yes"; then
- for ac_func in fpclass
-do :
- ac_fn_c_check_func "$LINENO" "fpclass" "ac_cv_func_fpclass"
-if test "x$ac_cv_func_fpclass" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FPCLASS 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _fpclass declaration" >&5
-$as_echo_n "checking for _fpclass declaration... " >&6; }
- if test x${glibcxx_cv_func__fpclass_use+set} != xset; then
- if ${glibcxx_cv_func__fpclass_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _fpclass(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__fpclass_use=yes
-else
- glibcxx_cv_func__fpclass_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__fpclass_use" >&5
-$as_echo "$glibcxx_cv_func__fpclass_use" >&6; }
-
- if test x$glibcxx_cv_func__fpclass_use = x"yes"; then
- for ac_func in _fpclass
-do :
- ac_fn_c_check_func "$LINENO" "_fpclass" "ac_cv_func__fpclass"
-if test "x$ac_cv_func__fpclass" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FPCLASS 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for qfpclass declaration" >&5
-$as_echo_n "checking for qfpclass declaration... " >&6; }
- if test x${glibcxx_cv_func_qfpclass_use+set} != xset; then
- if ${glibcxx_cv_func_qfpclass_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- qfpclass(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_qfpclass_use=yes
-else
- glibcxx_cv_func_qfpclass_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_qfpclass_use" >&5
-$as_echo "$glibcxx_cv_func_qfpclass_use" >&6; }
-
- if test x$glibcxx_cv_func_qfpclass_use = x"yes"; then
- for ac_func in qfpclass
-do :
- ac_fn_c_check_func "$LINENO" "qfpclass" "ac_cv_func_qfpclass"
-if test "x$ac_cv_func_qfpclass" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_QFPCLASS 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _qfpclass declaration" >&5
-$as_echo_n "checking for _qfpclass declaration... " >&6; }
- if test x${glibcxx_cv_func__qfpclass_use+set} != xset; then
- if ${glibcxx_cv_func__qfpclass_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _qfpclass(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__qfpclass_use=yes
-else
- glibcxx_cv_func__qfpclass_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__qfpclass_use" >&5
-$as_echo "$glibcxx_cv_func__qfpclass_use" >&6; }
-
- if test x$glibcxx_cv_func__qfpclass_use = x"yes"; then
- for ac_func in _qfpclass
-do :
- ac_fn_c_check_func "$LINENO" "_qfpclass" "ac_cv_func__qfpclass"
-if test "x$ac_cv_func__qfpclass" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__QFPCLASS 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hypot declaration" >&5
-$as_echo_n "checking for hypot declaration... " >&6; }
- if test x${glibcxx_cv_func_hypot_use+set} != xset; then
- if ${glibcxx_cv_func_hypot_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- hypot(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_hypot_use=yes
-else
- glibcxx_cv_func_hypot_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_hypot_use" >&5
-$as_echo "$glibcxx_cv_func_hypot_use" >&6; }
-
- if test x$glibcxx_cv_func_hypot_use = x"yes"; then
- for ac_func in hypot
-do :
- ac_fn_c_check_func "$LINENO" "hypot" "ac_cv_func_hypot"
-if test "x$ac_cv_func_hypot" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_HYPOT 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _hypot declaration" >&5
-$as_echo_n "checking for _hypot declaration... " >&6; }
- if test x${glibcxx_cv_func__hypot_use+set} != xset; then
- if ${glibcxx_cv_func__hypot_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _hypot(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__hypot_use=yes
-else
- glibcxx_cv_func__hypot_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__hypot_use" >&5
-$as_echo "$glibcxx_cv_func__hypot_use" >&6; }
-
- if test x$glibcxx_cv_func__hypot_use = x"yes"; then
- for ac_func in _hypot
-do :
- ac_fn_c_check_func "$LINENO" "_hypot" "ac_cv_func__hypot"
-if test "x$ac_cv_func__hypot" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__HYPOT 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for float trig functions" >&5
-$as_echo_n "checking for float trig functions... " >&6; }
- if ${glibcxx_cv_func_float_trig_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-acosf (0); asinf (0); atanf (0); cosf (0); sinf (0); tanf (0); coshf (0); sinhf (0); tanhf (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_float_trig_use=yes
-else
- glibcxx_cv_func_float_trig_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_float_trig_use" >&5
-$as_echo "$glibcxx_cv_func_float_trig_use" >&6; }
- if test x$glibcxx_cv_func_float_trig_use = x"yes"; then
- for ac_func in acosf asinf atanf cosf sinf tanf coshf sinhf tanhf
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _float trig functions" >&5
-$as_echo_n "checking for _float trig functions... " >&6; }
- if ${glibcxx_cv_func__float_trig_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_acosf (0); _asinf (0); _atanf (0); _cosf (0); _sinf (0); _tanf (0); _coshf (0); _sinhf (0); _tanhf (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__float_trig_use=yes
-else
- glibcxx_cv_func__float_trig_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__float_trig_use" >&5
-$as_echo "$glibcxx_cv_func__float_trig_use" >&6; }
- if test x$glibcxx_cv_func__float_trig_use = x"yes"; then
- for ac_func in _acosf _asinf _atanf _cosf _sinf _tanf _coshf _sinhf _tanhf
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for float round functions" >&5
-$as_echo_n "checking for float round functions... " >&6; }
- if ${glibcxx_cv_func_float_round_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-ceilf (0); floorf (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_float_round_use=yes
-else
- glibcxx_cv_func_float_round_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_float_round_use" >&5
-$as_echo "$glibcxx_cv_func_float_round_use" >&6; }
- if test x$glibcxx_cv_func_float_round_use = x"yes"; then
- for ac_func in ceilf floorf
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _float round functions" >&5
-$as_echo_n "checking for _float round functions... " >&6; }
- if ${glibcxx_cv_func__float_round_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_ceilf (0); _floorf (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__float_round_use=yes
-else
- glibcxx_cv_func__float_round_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__float_round_use" >&5
-$as_echo "$glibcxx_cv_func__float_round_use" >&6; }
- if test x$glibcxx_cv_func__float_round_use = x"yes"; then
- for ac_func in _ceilf _floorf
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for expf declaration" >&5
-$as_echo_n "checking for expf declaration... " >&6; }
- if test x${glibcxx_cv_func_expf_use+set} != xset; then
- if ${glibcxx_cv_func_expf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- expf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_expf_use=yes
-else
- glibcxx_cv_func_expf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_expf_use" >&5
-$as_echo "$glibcxx_cv_func_expf_use" >&6; }
-
- if test x$glibcxx_cv_func_expf_use = x"yes"; then
- for ac_func in expf
-do :
- ac_fn_c_check_func "$LINENO" "expf" "ac_cv_func_expf"
-if test "x$ac_cv_func_expf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_EXPF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _expf declaration" >&5
-$as_echo_n "checking for _expf declaration... " >&6; }
- if test x${glibcxx_cv_func__expf_use+set} != xset; then
- if ${glibcxx_cv_func__expf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _expf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__expf_use=yes
-else
- glibcxx_cv_func__expf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__expf_use" >&5
-$as_echo "$glibcxx_cv_func__expf_use" >&6; }
-
- if test x$glibcxx_cv_func__expf_use = x"yes"; then
- for ac_func in _expf
-do :
- ac_fn_c_check_func "$LINENO" "_expf" "ac_cv_func__expf"
-if test "x$ac_cv_func__expf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__EXPF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isnanf declaration" >&5
-$as_echo_n "checking for isnanf declaration... " >&6; }
- if test x${glibcxx_cv_func_isnanf_use+set} != xset; then
- if ${glibcxx_cv_func_isnanf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isnanf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_isnanf_use=yes
-else
- glibcxx_cv_func_isnanf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_isnanf_use" >&5
-$as_echo "$glibcxx_cv_func_isnanf_use" >&6; }
-
- if test x$glibcxx_cv_func_isnanf_use = x"yes"; then
- for ac_func in isnanf
-do :
- ac_fn_c_check_func "$LINENO" "isnanf" "ac_cv_func_isnanf"
-if test "x$ac_cv_func_isnanf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ISNANF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _isnanf declaration" >&5
-$as_echo_n "checking for _isnanf declaration... " >&6; }
- if test x${glibcxx_cv_func__isnanf_use+set} != xset; then
- if ${glibcxx_cv_func__isnanf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isnanf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__isnanf_use=yes
-else
- glibcxx_cv_func__isnanf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__isnanf_use" >&5
-$as_echo "$glibcxx_cv_func__isnanf_use" >&6; }
-
- if test x$glibcxx_cv_func__isnanf_use = x"yes"; then
- for ac_func in _isnanf
-do :
- ac_fn_c_check_func "$LINENO" "_isnanf" "ac_cv_func__isnanf"
-if test "x$ac_cv_func__isnanf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ISNANF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isinff declaration" >&5
-$as_echo_n "checking for isinff declaration... " >&6; }
- if test x${glibcxx_cv_func_isinff_use+set} != xset; then
- if ${glibcxx_cv_func_isinff_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isinff(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_isinff_use=yes
-else
- glibcxx_cv_func_isinff_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_isinff_use" >&5
-$as_echo "$glibcxx_cv_func_isinff_use" >&6; }
-
- if test x$glibcxx_cv_func_isinff_use = x"yes"; then
- for ac_func in isinff
-do :
- ac_fn_c_check_func "$LINENO" "isinff" "ac_cv_func_isinff"
-if test "x$ac_cv_func_isinff" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ISINFF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _isinff declaration" >&5
-$as_echo_n "checking for _isinff declaration... " >&6; }
- if test x${glibcxx_cv_func__isinff_use+set} != xset; then
- if ${glibcxx_cv_func__isinff_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isinff(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__isinff_use=yes
-else
- glibcxx_cv_func__isinff_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__isinff_use" >&5
-$as_echo "$glibcxx_cv_func__isinff_use" >&6; }
-
- if test x$glibcxx_cv_func__isinff_use = x"yes"; then
- for ac_func in _isinff
-do :
- ac_fn_c_check_func "$LINENO" "_isinff" "ac_cv_func__isinff"
-if test "x$ac_cv_func__isinff" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ISINFF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atan2f declaration" >&5
-$as_echo_n "checking for atan2f declaration... " >&6; }
- if test x${glibcxx_cv_func_atan2f_use+set} != xset; then
- if ${glibcxx_cv_func_atan2f_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- atan2f(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_atan2f_use=yes
-else
- glibcxx_cv_func_atan2f_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_atan2f_use" >&5
-$as_echo "$glibcxx_cv_func_atan2f_use" >&6; }
-
- if test x$glibcxx_cv_func_atan2f_use = x"yes"; then
- for ac_func in atan2f
-do :
- ac_fn_c_check_func "$LINENO" "atan2f" "ac_cv_func_atan2f"
-if test "x$ac_cv_func_atan2f" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ATAN2F 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _atan2f declaration" >&5
-$as_echo_n "checking for _atan2f declaration... " >&6; }
- if test x${glibcxx_cv_func__atan2f_use+set} != xset; then
- if ${glibcxx_cv_func__atan2f_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _atan2f(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__atan2f_use=yes
-else
- glibcxx_cv_func__atan2f_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__atan2f_use" >&5
-$as_echo "$glibcxx_cv_func__atan2f_use" >&6; }
-
- if test x$glibcxx_cv_func__atan2f_use = x"yes"; then
- for ac_func in _atan2f
-do :
- ac_fn_c_check_func "$LINENO" "_atan2f" "ac_cv_func__atan2f"
-if test "x$ac_cv_func__atan2f" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ATAN2F 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fabsf declaration" >&5
-$as_echo_n "checking for fabsf declaration... " >&6; }
- if test x${glibcxx_cv_func_fabsf_use+set} != xset; then
- if ${glibcxx_cv_func_fabsf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- fabsf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_fabsf_use=yes
-else
- glibcxx_cv_func_fabsf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_fabsf_use" >&5
-$as_echo "$glibcxx_cv_func_fabsf_use" >&6; }
-
- if test x$glibcxx_cv_func_fabsf_use = x"yes"; then
- for ac_func in fabsf
-do :
- ac_fn_c_check_func "$LINENO" "fabsf" "ac_cv_func_fabsf"
-if test "x$ac_cv_func_fabsf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FABSF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _fabsf declaration" >&5
-$as_echo_n "checking for _fabsf declaration... " >&6; }
- if test x${glibcxx_cv_func__fabsf_use+set} != xset; then
- if ${glibcxx_cv_func__fabsf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _fabsf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__fabsf_use=yes
-else
- glibcxx_cv_func__fabsf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__fabsf_use" >&5
-$as_echo "$glibcxx_cv_func__fabsf_use" >&6; }
-
- if test x$glibcxx_cv_func__fabsf_use = x"yes"; then
- for ac_func in _fabsf
-do :
- ac_fn_c_check_func "$LINENO" "_fabsf" "ac_cv_func__fabsf"
-if test "x$ac_cv_func__fabsf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FABSF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmodf declaration" >&5
-$as_echo_n "checking for fmodf declaration... " >&6; }
- if test x${glibcxx_cv_func_fmodf_use+set} != xset; then
- if ${glibcxx_cv_func_fmodf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- fmodf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_fmodf_use=yes
-else
- glibcxx_cv_func_fmodf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_fmodf_use" >&5
-$as_echo "$glibcxx_cv_func_fmodf_use" >&6; }
-
- if test x$glibcxx_cv_func_fmodf_use = x"yes"; then
- for ac_func in fmodf
-do :
- ac_fn_c_check_func "$LINENO" "fmodf" "ac_cv_func_fmodf"
-if test "x$ac_cv_func_fmodf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FMODF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _fmodf declaration" >&5
-$as_echo_n "checking for _fmodf declaration... " >&6; }
- if test x${glibcxx_cv_func__fmodf_use+set} != xset; then
- if ${glibcxx_cv_func__fmodf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _fmodf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__fmodf_use=yes
-else
- glibcxx_cv_func__fmodf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__fmodf_use" >&5
-$as_echo "$glibcxx_cv_func__fmodf_use" >&6; }
-
- if test x$glibcxx_cv_func__fmodf_use = x"yes"; then
- for ac_func in _fmodf
-do :
- ac_fn_c_check_func "$LINENO" "_fmodf" "ac_cv_func__fmodf"
-if test "x$ac_cv_func__fmodf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FMODF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for frexpf declaration" >&5
-$as_echo_n "checking for frexpf declaration... " >&6; }
- if test x${glibcxx_cv_func_frexpf_use+set} != xset; then
- if ${glibcxx_cv_func_frexpf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- frexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_frexpf_use=yes
-else
- glibcxx_cv_func_frexpf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_frexpf_use" >&5
-$as_echo "$glibcxx_cv_func_frexpf_use" >&6; }
-
- if test x$glibcxx_cv_func_frexpf_use = x"yes"; then
- for ac_func in frexpf
-do :
- ac_fn_c_check_func "$LINENO" "frexpf" "ac_cv_func_frexpf"
-if test "x$ac_cv_func_frexpf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FREXPF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _frexpf declaration" >&5
-$as_echo_n "checking for _frexpf declaration... " >&6; }
- if test x${glibcxx_cv_func__frexpf_use+set} != xset; then
- if ${glibcxx_cv_func__frexpf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _frexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__frexpf_use=yes
-else
- glibcxx_cv_func__frexpf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__frexpf_use" >&5
-$as_echo "$glibcxx_cv_func__frexpf_use" >&6; }
-
- if test x$glibcxx_cv_func__frexpf_use = x"yes"; then
- for ac_func in _frexpf
-do :
- ac_fn_c_check_func "$LINENO" "_frexpf" "ac_cv_func__frexpf"
-if test "x$ac_cv_func__frexpf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FREXPF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hypotf declaration" >&5
-$as_echo_n "checking for hypotf declaration... " >&6; }
- if test x${glibcxx_cv_func_hypotf_use+set} != xset; then
- if ${glibcxx_cv_func_hypotf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- hypotf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_hypotf_use=yes
-else
- glibcxx_cv_func_hypotf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_hypotf_use" >&5
-$as_echo "$glibcxx_cv_func_hypotf_use" >&6; }
-
- if test x$glibcxx_cv_func_hypotf_use = x"yes"; then
- for ac_func in hypotf
-do :
- ac_fn_c_check_func "$LINENO" "hypotf" "ac_cv_func_hypotf"
-if test "x$ac_cv_func_hypotf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_HYPOTF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _hypotf declaration" >&5
-$as_echo_n "checking for _hypotf declaration... " >&6; }
- if test x${glibcxx_cv_func__hypotf_use+set} != xset; then
- if ${glibcxx_cv_func__hypotf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _hypotf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__hypotf_use=yes
-else
- glibcxx_cv_func__hypotf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__hypotf_use" >&5
-$as_echo "$glibcxx_cv_func__hypotf_use" >&6; }
-
- if test x$glibcxx_cv_func__hypotf_use = x"yes"; then
- for ac_func in _hypotf
-do :
- ac_fn_c_check_func "$LINENO" "_hypotf" "ac_cv_func__hypotf"
-if test "x$ac_cv_func__hypotf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__HYPOTF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldexpf declaration" >&5
-$as_echo_n "checking for ldexpf declaration... " >&6; }
- if test x${glibcxx_cv_func_ldexpf_use+set} != xset; then
- if ${glibcxx_cv_func_ldexpf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- ldexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_ldexpf_use=yes
-else
- glibcxx_cv_func_ldexpf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_ldexpf_use" >&5
-$as_echo "$glibcxx_cv_func_ldexpf_use" >&6; }
-
- if test x$glibcxx_cv_func_ldexpf_use = x"yes"; then
- for ac_func in ldexpf
-do :
- ac_fn_c_check_func "$LINENO" "ldexpf" "ac_cv_func_ldexpf"
-if test "x$ac_cv_func_ldexpf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LDEXPF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ldexpf declaration" >&5
-$as_echo_n "checking for _ldexpf declaration... " >&6; }
- if test x${glibcxx_cv_func__ldexpf_use+set} != xset; then
- if ${glibcxx_cv_func__ldexpf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _ldexpf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__ldexpf_use=yes
-else
- glibcxx_cv_func__ldexpf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__ldexpf_use" >&5
-$as_echo "$glibcxx_cv_func__ldexpf_use" >&6; }
-
- if test x$glibcxx_cv_func__ldexpf_use = x"yes"; then
- for ac_func in _ldexpf
-do :
- ac_fn_c_check_func "$LINENO" "_ldexpf" "ac_cv_func__ldexpf"
-if test "x$ac_cv_func__ldexpf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__LDEXPF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for logf declaration" >&5
-$as_echo_n "checking for logf declaration... " >&6; }
- if test x${glibcxx_cv_func_logf_use+set} != xset; then
- if ${glibcxx_cv_func_logf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- logf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_logf_use=yes
-else
- glibcxx_cv_func_logf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_logf_use" >&5
-$as_echo "$glibcxx_cv_func_logf_use" >&6; }
-
- if test x$glibcxx_cv_func_logf_use = x"yes"; then
- for ac_func in logf
-do :
- ac_fn_c_check_func "$LINENO" "logf" "ac_cv_func_logf"
-if test "x$ac_cv_func_logf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LOGF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _logf declaration" >&5
-$as_echo_n "checking for _logf declaration... " >&6; }
- if test x${glibcxx_cv_func__logf_use+set} != xset; then
- if ${glibcxx_cv_func__logf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _logf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__logf_use=yes
-else
- glibcxx_cv_func__logf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__logf_use" >&5
-$as_echo "$glibcxx_cv_func__logf_use" >&6; }
-
- if test x$glibcxx_cv_func__logf_use = x"yes"; then
- for ac_func in _logf
-do :
- ac_fn_c_check_func "$LINENO" "_logf" "ac_cv_func__logf"
-if test "x$ac_cv_func__logf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__LOGF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for log10f declaration" >&5
-$as_echo_n "checking for log10f declaration... " >&6; }
- if test x${glibcxx_cv_func_log10f_use+set} != xset; then
- if ${glibcxx_cv_func_log10f_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- log10f(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_log10f_use=yes
-else
- glibcxx_cv_func_log10f_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_log10f_use" >&5
-$as_echo "$glibcxx_cv_func_log10f_use" >&6; }
-
- if test x$glibcxx_cv_func_log10f_use = x"yes"; then
- for ac_func in log10f
-do :
- ac_fn_c_check_func "$LINENO" "log10f" "ac_cv_func_log10f"
-if test "x$ac_cv_func_log10f" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LOG10F 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _log10f declaration" >&5
-$as_echo_n "checking for _log10f declaration... " >&6; }
- if test x${glibcxx_cv_func__log10f_use+set} != xset; then
- if ${glibcxx_cv_func__log10f_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _log10f(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__log10f_use=yes
-else
- glibcxx_cv_func__log10f_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__log10f_use" >&5
-$as_echo "$glibcxx_cv_func__log10f_use" >&6; }
-
- if test x$glibcxx_cv_func__log10f_use = x"yes"; then
- for ac_func in _log10f
-do :
- ac_fn_c_check_func "$LINENO" "_log10f" "ac_cv_func__log10f"
-if test "x$ac_cv_func__log10f" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__LOG10F 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for modff declaration" >&5
-$as_echo_n "checking for modff declaration... " >&6; }
- if test x${glibcxx_cv_func_modff_use+set} != xset; then
- if ${glibcxx_cv_func_modff_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- modff(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_modff_use=yes
-else
- glibcxx_cv_func_modff_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_modff_use" >&5
-$as_echo "$glibcxx_cv_func_modff_use" >&6; }
-
- if test x$glibcxx_cv_func_modff_use = x"yes"; then
- for ac_func in modff
-do :
- ac_fn_c_check_func "$LINENO" "modff" "ac_cv_func_modff"
-if test "x$ac_cv_func_modff" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MODFF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _modff declaration" >&5
-$as_echo_n "checking for _modff declaration... " >&6; }
- if test x${glibcxx_cv_func__modff_use+set} != xset; then
- if ${glibcxx_cv_func__modff_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _modff(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__modff_use=yes
-else
- glibcxx_cv_func__modff_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__modff_use" >&5
-$as_echo "$glibcxx_cv_func__modff_use" >&6; }
-
- if test x$glibcxx_cv_func__modff_use = x"yes"; then
- for ac_func in _modff
-do :
- ac_fn_c_check_func "$LINENO" "_modff" "ac_cv_func__modff"
-if test "x$ac_cv_func__modff" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__MODFF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for modf declaration" >&5
-$as_echo_n "checking for modf declaration... " >&6; }
- if test x${glibcxx_cv_func_modf_use+set} != xset; then
- if ${glibcxx_cv_func_modf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- modf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_modf_use=yes
-else
- glibcxx_cv_func_modf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_modf_use" >&5
-$as_echo "$glibcxx_cv_func_modf_use" >&6; }
-
- if test x$glibcxx_cv_func_modf_use = x"yes"; then
- for ac_func in modf
-do :
- ac_fn_c_check_func "$LINENO" "modf" "ac_cv_func_modf"
-if test "x$ac_cv_func_modf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MODF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _modf declaration" >&5
-$as_echo_n "checking for _modf declaration... " >&6; }
- if test x${glibcxx_cv_func__modf_use+set} != xset; then
- if ${glibcxx_cv_func__modf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _modf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__modf_use=yes
-else
- glibcxx_cv_func__modf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__modf_use" >&5
-$as_echo "$glibcxx_cv_func__modf_use" >&6; }
-
- if test x$glibcxx_cv_func__modf_use = x"yes"; then
- for ac_func in _modf
-do :
- ac_fn_c_check_func "$LINENO" "_modf" "ac_cv_func__modf"
-if test "x$ac_cv_func__modf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__MODF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for powf declaration" >&5
-$as_echo_n "checking for powf declaration... " >&6; }
- if test x${glibcxx_cv_func_powf_use+set} != xset; then
- if ${glibcxx_cv_func_powf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- powf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_powf_use=yes
-else
- glibcxx_cv_func_powf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_powf_use" >&5
-$as_echo "$glibcxx_cv_func_powf_use" >&6; }
-
- if test x$glibcxx_cv_func_powf_use = x"yes"; then
- for ac_func in powf
-do :
- ac_fn_c_check_func "$LINENO" "powf" "ac_cv_func_powf"
-if test "x$ac_cv_func_powf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_POWF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _powf declaration" >&5
-$as_echo_n "checking for _powf declaration... " >&6; }
- if test x${glibcxx_cv_func__powf_use+set} != xset; then
- if ${glibcxx_cv_func__powf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _powf(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__powf_use=yes
-else
- glibcxx_cv_func__powf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__powf_use" >&5
-$as_echo "$glibcxx_cv_func__powf_use" >&6; }
-
- if test x$glibcxx_cv_func__powf_use = x"yes"; then
- for ac_func in _powf
-do :
- ac_fn_c_check_func "$LINENO" "_powf" "ac_cv_func__powf"
-if test "x$ac_cv_func__powf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__POWF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrtf declaration" >&5
-$as_echo_n "checking for sqrtf declaration... " >&6; }
- if test x${glibcxx_cv_func_sqrtf_use+set} != xset; then
- if ${glibcxx_cv_func_sqrtf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- sqrtf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_sqrtf_use=yes
-else
- glibcxx_cv_func_sqrtf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_sqrtf_use" >&5
-$as_echo "$glibcxx_cv_func_sqrtf_use" >&6; }
-
- if test x$glibcxx_cv_func_sqrtf_use = x"yes"; then
- for ac_func in sqrtf
-do :
- ac_fn_c_check_func "$LINENO" "sqrtf" "ac_cv_func_sqrtf"
-if test "x$ac_cv_func_sqrtf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SQRTF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sqrtf declaration" >&5
-$as_echo_n "checking for _sqrtf declaration... " >&6; }
- if test x${glibcxx_cv_func__sqrtf_use+set} != xset; then
- if ${glibcxx_cv_func__sqrtf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _sqrtf(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__sqrtf_use=yes
-else
- glibcxx_cv_func__sqrtf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__sqrtf_use" >&5
-$as_echo "$glibcxx_cv_func__sqrtf_use" >&6; }
-
- if test x$glibcxx_cv_func__sqrtf_use = x"yes"; then
- for ac_func in _sqrtf
-do :
- ac_fn_c_check_func "$LINENO" "_sqrtf" "ac_cv_func__sqrtf"
-if test "x$ac_cv_func__sqrtf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__SQRTF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sincosf declaration" >&5
-$as_echo_n "checking for sincosf declaration... " >&6; }
- if test x${glibcxx_cv_func_sincosf_use+set} != xset; then
- if ${glibcxx_cv_func_sincosf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- sincosf(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_sincosf_use=yes
-else
- glibcxx_cv_func_sincosf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_sincosf_use" >&5
-$as_echo "$glibcxx_cv_func_sincosf_use" >&6; }
-
- if test x$glibcxx_cv_func_sincosf_use = x"yes"; then
- for ac_func in sincosf
-do :
- ac_fn_c_check_func "$LINENO" "sincosf" "ac_cv_func_sincosf"
-if test "x$ac_cv_func_sincosf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SINCOSF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sincosf declaration" >&5
-$as_echo_n "checking for _sincosf declaration... " >&6; }
- if test x${glibcxx_cv_func__sincosf_use+set} != xset; then
- if ${glibcxx_cv_func__sincosf_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _sincosf(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__sincosf_use=yes
-else
- glibcxx_cv_func__sincosf_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__sincosf_use" >&5
-$as_echo "$glibcxx_cv_func__sincosf_use" >&6; }
-
- if test x$glibcxx_cv_func__sincosf_use = x"yes"; then
- for ac_func in _sincosf
-do :
- ac_fn_c_check_func "$LINENO" "_sincosf" "ac_cv_func__sincosf"
-if test "x$ac_cv_func__sincosf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__SINCOSF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for finitef declaration" >&5
-$as_echo_n "checking for finitef declaration... " >&6; }
- if test x${glibcxx_cv_func_finitef_use+set} != xset; then
- if ${glibcxx_cv_func_finitef_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- finitef(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_finitef_use=yes
-else
- glibcxx_cv_func_finitef_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_finitef_use" >&5
-$as_echo "$glibcxx_cv_func_finitef_use" >&6; }
-
- if test x$glibcxx_cv_func_finitef_use = x"yes"; then
- for ac_func in finitef
-do :
- ac_fn_c_check_func "$LINENO" "finitef" "ac_cv_func_finitef"
-if test "x$ac_cv_func_finitef" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FINITEF 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _finitef declaration" >&5
-$as_echo_n "checking for _finitef declaration... " >&6; }
- if test x${glibcxx_cv_func__finitef_use+set} != xset; then
- if ${glibcxx_cv_func__finitef_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _finitef(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__finitef_use=yes
-else
- glibcxx_cv_func__finitef_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__finitef_use" >&5
-$as_echo "$glibcxx_cv_func__finitef_use" >&6; }
-
- if test x$glibcxx_cv_func__finitef_use = x"yes"; then
- for ac_func in _finitef
-do :
- ac_fn_c_check_func "$LINENO" "_finitef" "ac_cv_func__finitef"
-if test "x$ac_cv_func__finitef" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FINITEF 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double trig functions" >&5
-$as_echo_n "checking for long double trig functions... " >&6; }
- if ${glibcxx_cv_func_long_double_trig_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-acosl (0); asinl (0); atanl (0); cosl (0); sinl (0); tanl (0); coshl (0); sinhl (0); tanhl (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_long_double_trig_use=yes
-else
- glibcxx_cv_func_long_double_trig_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_long_double_trig_use" >&5
-$as_echo "$glibcxx_cv_func_long_double_trig_use" >&6; }
- if test x$glibcxx_cv_func_long_double_trig_use = x"yes"; then
- for ac_func in acosl asinl atanl cosl sinl tanl coshl sinhl tanhl
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _long double trig functions" >&5
-$as_echo_n "checking for _long double trig functions... " >&6; }
- if ${glibcxx_cv_func__long_double_trig_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_acosl (0); _asinl (0); _atanl (0); _cosl (0); _sinl (0); _tanl (0); _coshl (0); _sinhl (0); _tanhl (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__long_double_trig_use=yes
-else
- glibcxx_cv_func__long_double_trig_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__long_double_trig_use" >&5
-$as_echo "$glibcxx_cv_func__long_double_trig_use" >&6; }
- if test x$glibcxx_cv_func__long_double_trig_use = x"yes"; then
- for ac_func in _acosl _asinl _atanl _cosl _sinl _tanl _coshl _sinhl _tanhl
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double round functions" >&5
-$as_echo_n "checking for long double round functions... " >&6; }
- if ${glibcxx_cv_func_long_double_round_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-ceill (0); floorl (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_long_double_round_use=yes
-else
- glibcxx_cv_func_long_double_round_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_long_double_round_use" >&5
-$as_echo "$glibcxx_cv_func_long_double_round_use" >&6; }
- if test x$glibcxx_cv_func_long_double_round_use = x"yes"; then
- for ac_func in ceill floorl
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _long double round functions" >&5
-$as_echo_n "checking for _long double round functions... " >&6; }
- if ${glibcxx_cv_func__long_double_round_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
-_ceill (0); _floorl (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__long_double_round_use=yes
-else
- glibcxx_cv_func__long_double_round_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__long_double_round_use" >&5
-$as_echo "$glibcxx_cv_func__long_double_round_use" >&6; }
- if test x$glibcxx_cv_func__long_double_round_use = x"yes"; then
- for ac_func in _ceill _floorl
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isnanl declaration" >&5
-$as_echo_n "checking for isnanl declaration... " >&6; }
- if test x${glibcxx_cv_func_isnanl_use+set} != xset; then
- if ${glibcxx_cv_func_isnanl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isnanl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_isnanl_use=yes
-else
- glibcxx_cv_func_isnanl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_isnanl_use" >&5
-$as_echo "$glibcxx_cv_func_isnanl_use" >&6; }
-
- if test x$glibcxx_cv_func_isnanl_use = x"yes"; then
- for ac_func in isnanl
-do :
- ac_fn_c_check_func "$LINENO" "isnanl" "ac_cv_func_isnanl"
-if test "x$ac_cv_func_isnanl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ISNANL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _isnanl declaration" >&5
-$as_echo_n "checking for _isnanl declaration... " >&6; }
- if test x${glibcxx_cv_func__isnanl_use+set} != xset; then
- if ${glibcxx_cv_func__isnanl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isnanl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__isnanl_use=yes
-else
- glibcxx_cv_func__isnanl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__isnanl_use" >&5
-$as_echo "$glibcxx_cv_func__isnanl_use" >&6; }
-
- if test x$glibcxx_cv_func__isnanl_use = x"yes"; then
- for ac_func in _isnanl
-do :
- ac_fn_c_check_func "$LINENO" "_isnanl" "ac_cv_func__isnanl"
-if test "x$ac_cv_func__isnanl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ISNANL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isinfl declaration" >&5
-$as_echo_n "checking for isinfl declaration... " >&6; }
- if test x${glibcxx_cv_func_isinfl_use+set} != xset; then
- if ${glibcxx_cv_func_isinfl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- isinfl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_isinfl_use=yes
-else
- glibcxx_cv_func_isinfl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_isinfl_use" >&5
-$as_echo "$glibcxx_cv_func_isinfl_use" >&6; }
-
- if test x$glibcxx_cv_func_isinfl_use = x"yes"; then
- for ac_func in isinfl
-do :
- ac_fn_c_check_func "$LINENO" "isinfl" "ac_cv_func_isinfl"
-if test "x$ac_cv_func_isinfl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ISINFL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _isinfl declaration" >&5
-$as_echo_n "checking for _isinfl declaration... " >&6; }
- if test x${glibcxx_cv_func__isinfl_use+set} != xset; then
- if ${glibcxx_cv_func__isinfl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _isinfl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__isinfl_use=yes
-else
- glibcxx_cv_func__isinfl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__isinfl_use" >&5
-$as_echo "$glibcxx_cv_func__isinfl_use" >&6; }
-
- if test x$glibcxx_cv_func__isinfl_use = x"yes"; then
- for ac_func in _isinfl
-do :
- ac_fn_c_check_func "$LINENO" "_isinfl" "ac_cv_func__isinfl"
-if test "x$ac_cv_func__isinfl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ISINFL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atan2l declaration" >&5
-$as_echo_n "checking for atan2l declaration... " >&6; }
- if test x${glibcxx_cv_func_atan2l_use+set} != xset; then
- if ${glibcxx_cv_func_atan2l_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- atan2l(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_atan2l_use=yes
-else
- glibcxx_cv_func_atan2l_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_atan2l_use" >&5
-$as_echo "$glibcxx_cv_func_atan2l_use" >&6; }
-
- if test x$glibcxx_cv_func_atan2l_use = x"yes"; then
- for ac_func in atan2l
-do :
- ac_fn_c_check_func "$LINENO" "atan2l" "ac_cv_func_atan2l"
-if test "x$ac_cv_func_atan2l" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ATAN2L 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _atan2l declaration" >&5
-$as_echo_n "checking for _atan2l declaration... " >&6; }
- if test x${glibcxx_cv_func__atan2l_use+set} != xset; then
- if ${glibcxx_cv_func__atan2l_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _atan2l(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__atan2l_use=yes
-else
- glibcxx_cv_func__atan2l_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__atan2l_use" >&5
-$as_echo "$glibcxx_cv_func__atan2l_use" >&6; }
-
- if test x$glibcxx_cv_func__atan2l_use = x"yes"; then
- for ac_func in _atan2l
-do :
- ac_fn_c_check_func "$LINENO" "_atan2l" "ac_cv_func__atan2l"
-if test "x$ac_cv_func__atan2l" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__ATAN2L 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for expl declaration" >&5
-$as_echo_n "checking for expl declaration... " >&6; }
- if test x${glibcxx_cv_func_expl_use+set} != xset; then
- if ${glibcxx_cv_func_expl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- expl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_expl_use=yes
-else
- glibcxx_cv_func_expl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_expl_use" >&5
-$as_echo "$glibcxx_cv_func_expl_use" >&6; }
-
- if test x$glibcxx_cv_func_expl_use = x"yes"; then
- for ac_func in expl
-do :
- ac_fn_c_check_func "$LINENO" "expl" "ac_cv_func_expl"
-if test "x$ac_cv_func_expl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_EXPL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _expl declaration" >&5
-$as_echo_n "checking for _expl declaration... " >&6; }
- if test x${glibcxx_cv_func__expl_use+set} != xset; then
- if ${glibcxx_cv_func__expl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _expl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__expl_use=yes
-else
- glibcxx_cv_func__expl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__expl_use" >&5
-$as_echo "$glibcxx_cv_func__expl_use" >&6; }
-
- if test x$glibcxx_cv_func__expl_use = x"yes"; then
- for ac_func in _expl
-do :
- ac_fn_c_check_func "$LINENO" "_expl" "ac_cv_func__expl"
-if test "x$ac_cv_func__expl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__EXPL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fabsl declaration" >&5
-$as_echo_n "checking for fabsl declaration... " >&6; }
- if test x${glibcxx_cv_func_fabsl_use+set} != xset; then
- if ${glibcxx_cv_func_fabsl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- fabsl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_fabsl_use=yes
-else
- glibcxx_cv_func_fabsl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_fabsl_use" >&5
-$as_echo "$glibcxx_cv_func_fabsl_use" >&6; }
-
- if test x$glibcxx_cv_func_fabsl_use = x"yes"; then
- for ac_func in fabsl
-do :
- ac_fn_c_check_func "$LINENO" "fabsl" "ac_cv_func_fabsl"
-if test "x$ac_cv_func_fabsl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FABSL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _fabsl declaration" >&5
-$as_echo_n "checking for _fabsl declaration... " >&6; }
- if test x${glibcxx_cv_func__fabsl_use+set} != xset; then
- if ${glibcxx_cv_func__fabsl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _fabsl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__fabsl_use=yes
-else
- glibcxx_cv_func__fabsl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__fabsl_use" >&5
-$as_echo "$glibcxx_cv_func__fabsl_use" >&6; }
-
- if test x$glibcxx_cv_func__fabsl_use = x"yes"; then
- for ac_func in _fabsl
-do :
- ac_fn_c_check_func "$LINENO" "_fabsl" "ac_cv_func__fabsl"
-if test "x$ac_cv_func__fabsl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FABSL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmodl declaration" >&5
-$as_echo_n "checking for fmodl declaration... " >&6; }
- if test x${glibcxx_cv_func_fmodl_use+set} != xset; then
- if ${glibcxx_cv_func_fmodl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- fmodl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_fmodl_use=yes
-else
- glibcxx_cv_func_fmodl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_fmodl_use" >&5
-$as_echo "$glibcxx_cv_func_fmodl_use" >&6; }
-
- if test x$glibcxx_cv_func_fmodl_use = x"yes"; then
- for ac_func in fmodl
-do :
- ac_fn_c_check_func "$LINENO" "fmodl" "ac_cv_func_fmodl"
-if test "x$ac_cv_func_fmodl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FMODL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _fmodl declaration" >&5
-$as_echo_n "checking for _fmodl declaration... " >&6; }
- if test x${glibcxx_cv_func__fmodl_use+set} != xset; then
- if ${glibcxx_cv_func__fmodl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _fmodl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__fmodl_use=yes
-else
- glibcxx_cv_func__fmodl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__fmodl_use" >&5
-$as_echo "$glibcxx_cv_func__fmodl_use" >&6; }
-
- if test x$glibcxx_cv_func__fmodl_use = x"yes"; then
- for ac_func in _fmodl
-do :
- ac_fn_c_check_func "$LINENO" "_fmodl" "ac_cv_func__fmodl"
-if test "x$ac_cv_func__fmodl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FMODL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for frexpl declaration" >&5
-$as_echo_n "checking for frexpl declaration... " >&6; }
- if test x${glibcxx_cv_func_frexpl_use+set} != xset; then
- if ${glibcxx_cv_func_frexpl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- frexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_frexpl_use=yes
-else
- glibcxx_cv_func_frexpl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_frexpl_use" >&5
-$as_echo "$glibcxx_cv_func_frexpl_use" >&6; }
-
- if test x$glibcxx_cv_func_frexpl_use = x"yes"; then
- for ac_func in frexpl
-do :
- ac_fn_c_check_func "$LINENO" "frexpl" "ac_cv_func_frexpl"
-if test "x$ac_cv_func_frexpl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FREXPL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _frexpl declaration" >&5
-$as_echo_n "checking for _frexpl declaration... " >&6; }
- if test x${glibcxx_cv_func__frexpl_use+set} != xset; then
- if ${glibcxx_cv_func__frexpl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _frexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__frexpl_use=yes
-else
- glibcxx_cv_func__frexpl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__frexpl_use" >&5
-$as_echo "$glibcxx_cv_func__frexpl_use" >&6; }
-
- if test x$glibcxx_cv_func__frexpl_use = x"yes"; then
- for ac_func in _frexpl
-do :
- ac_fn_c_check_func "$LINENO" "_frexpl" "ac_cv_func__frexpl"
-if test "x$ac_cv_func__frexpl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FREXPL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hypotl declaration" >&5
-$as_echo_n "checking for hypotl declaration... " >&6; }
- if test x${glibcxx_cv_func_hypotl_use+set} != xset; then
- if ${glibcxx_cv_func_hypotl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- hypotl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_hypotl_use=yes
-else
- glibcxx_cv_func_hypotl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_hypotl_use" >&5
-$as_echo "$glibcxx_cv_func_hypotl_use" >&6; }
-
- if test x$glibcxx_cv_func_hypotl_use = x"yes"; then
- for ac_func in hypotl
-do :
- ac_fn_c_check_func "$LINENO" "hypotl" "ac_cv_func_hypotl"
-if test "x$ac_cv_func_hypotl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_HYPOTL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _hypotl declaration" >&5
-$as_echo_n "checking for _hypotl declaration... " >&6; }
- if test x${glibcxx_cv_func__hypotl_use+set} != xset; then
- if ${glibcxx_cv_func__hypotl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _hypotl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__hypotl_use=yes
-else
- glibcxx_cv_func__hypotl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__hypotl_use" >&5
-$as_echo "$glibcxx_cv_func__hypotl_use" >&6; }
-
- if test x$glibcxx_cv_func__hypotl_use = x"yes"; then
- for ac_func in _hypotl
-do :
- ac_fn_c_check_func "$LINENO" "_hypotl" "ac_cv_func__hypotl"
-if test "x$ac_cv_func__hypotl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__HYPOTL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldexpl declaration" >&5
-$as_echo_n "checking for ldexpl declaration... " >&6; }
- if test x${glibcxx_cv_func_ldexpl_use+set} != xset; then
- if ${glibcxx_cv_func_ldexpl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- ldexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_ldexpl_use=yes
-else
- glibcxx_cv_func_ldexpl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_ldexpl_use" >&5
-$as_echo "$glibcxx_cv_func_ldexpl_use" >&6; }
-
- if test x$glibcxx_cv_func_ldexpl_use = x"yes"; then
- for ac_func in ldexpl
-do :
- ac_fn_c_check_func "$LINENO" "ldexpl" "ac_cv_func_ldexpl"
-if test "x$ac_cv_func_ldexpl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LDEXPL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ldexpl declaration" >&5
-$as_echo_n "checking for _ldexpl declaration... " >&6; }
- if test x${glibcxx_cv_func__ldexpl_use+set} != xset; then
- if ${glibcxx_cv_func__ldexpl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _ldexpl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__ldexpl_use=yes
-else
- glibcxx_cv_func__ldexpl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__ldexpl_use" >&5
-$as_echo "$glibcxx_cv_func__ldexpl_use" >&6; }
-
- if test x$glibcxx_cv_func__ldexpl_use = x"yes"; then
- for ac_func in _ldexpl
-do :
- ac_fn_c_check_func "$LINENO" "_ldexpl" "ac_cv_func__ldexpl"
-if test "x$ac_cv_func__ldexpl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__LDEXPL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for logl declaration" >&5
-$as_echo_n "checking for logl declaration... " >&6; }
- if test x${glibcxx_cv_func_logl_use+set} != xset; then
- if ${glibcxx_cv_func_logl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- logl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_logl_use=yes
-else
- glibcxx_cv_func_logl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_logl_use" >&5
-$as_echo "$glibcxx_cv_func_logl_use" >&6; }
-
- if test x$glibcxx_cv_func_logl_use = x"yes"; then
- for ac_func in logl
-do :
- ac_fn_c_check_func "$LINENO" "logl" "ac_cv_func_logl"
-if test "x$ac_cv_func_logl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LOGL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _logl declaration" >&5
-$as_echo_n "checking for _logl declaration... " >&6; }
- if test x${glibcxx_cv_func__logl_use+set} != xset; then
- if ${glibcxx_cv_func__logl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _logl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__logl_use=yes
-else
- glibcxx_cv_func__logl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__logl_use" >&5
-$as_echo "$glibcxx_cv_func__logl_use" >&6; }
-
- if test x$glibcxx_cv_func__logl_use = x"yes"; then
- for ac_func in _logl
-do :
- ac_fn_c_check_func "$LINENO" "_logl" "ac_cv_func__logl"
-if test "x$ac_cv_func__logl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__LOGL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for log10l declaration" >&5
-$as_echo_n "checking for log10l declaration... " >&6; }
- if test x${glibcxx_cv_func_log10l_use+set} != xset; then
- if ${glibcxx_cv_func_log10l_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- log10l(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_log10l_use=yes
-else
- glibcxx_cv_func_log10l_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_log10l_use" >&5
-$as_echo "$glibcxx_cv_func_log10l_use" >&6; }
-
- if test x$glibcxx_cv_func_log10l_use = x"yes"; then
- for ac_func in log10l
-do :
- ac_fn_c_check_func "$LINENO" "log10l" "ac_cv_func_log10l"
-if test "x$ac_cv_func_log10l" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LOG10L 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _log10l declaration" >&5
-$as_echo_n "checking for _log10l declaration... " >&6; }
- if test x${glibcxx_cv_func__log10l_use+set} != xset; then
- if ${glibcxx_cv_func__log10l_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _log10l(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__log10l_use=yes
-else
- glibcxx_cv_func__log10l_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__log10l_use" >&5
-$as_echo "$glibcxx_cv_func__log10l_use" >&6; }
-
- if test x$glibcxx_cv_func__log10l_use = x"yes"; then
- for ac_func in _log10l
-do :
- ac_fn_c_check_func "$LINENO" "_log10l" "ac_cv_func__log10l"
-if test "x$ac_cv_func__log10l" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__LOG10L 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for modfl declaration" >&5
-$as_echo_n "checking for modfl declaration... " >&6; }
- if test x${glibcxx_cv_func_modfl_use+set} != xset; then
- if ${glibcxx_cv_func_modfl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- modfl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_modfl_use=yes
-else
- glibcxx_cv_func_modfl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_modfl_use" >&5
-$as_echo "$glibcxx_cv_func_modfl_use" >&6; }
-
- if test x$glibcxx_cv_func_modfl_use = x"yes"; then
- for ac_func in modfl
-do :
- ac_fn_c_check_func "$LINENO" "modfl" "ac_cv_func_modfl"
-if test "x$ac_cv_func_modfl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MODFL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _modfl declaration" >&5
-$as_echo_n "checking for _modfl declaration... " >&6; }
- if test x${glibcxx_cv_func__modfl_use+set} != xset; then
- if ${glibcxx_cv_func__modfl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _modfl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__modfl_use=yes
-else
- glibcxx_cv_func__modfl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__modfl_use" >&5
-$as_echo "$glibcxx_cv_func__modfl_use" >&6; }
-
- if test x$glibcxx_cv_func__modfl_use = x"yes"; then
- for ac_func in _modfl
-do :
- ac_fn_c_check_func "$LINENO" "_modfl" "ac_cv_func__modfl"
-if test "x$ac_cv_func__modfl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__MODFL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for powl declaration" >&5
-$as_echo_n "checking for powl declaration... " >&6; }
- if test x${glibcxx_cv_func_powl_use+set} != xset; then
- if ${glibcxx_cv_func_powl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- powl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_powl_use=yes
-else
- glibcxx_cv_func_powl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_powl_use" >&5
-$as_echo "$glibcxx_cv_func_powl_use" >&6; }
-
- if test x$glibcxx_cv_func_powl_use = x"yes"; then
- for ac_func in powl
-do :
- ac_fn_c_check_func "$LINENO" "powl" "ac_cv_func_powl"
-if test "x$ac_cv_func_powl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_POWL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _powl declaration" >&5
-$as_echo_n "checking for _powl declaration... " >&6; }
- if test x${glibcxx_cv_func__powl_use+set} != xset; then
- if ${glibcxx_cv_func__powl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _powl(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__powl_use=yes
-else
- glibcxx_cv_func__powl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__powl_use" >&5
-$as_echo "$glibcxx_cv_func__powl_use" >&6; }
-
- if test x$glibcxx_cv_func__powl_use = x"yes"; then
- for ac_func in _powl
-do :
- ac_fn_c_check_func "$LINENO" "_powl" "ac_cv_func__powl"
-if test "x$ac_cv_func__powl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__POWL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrtl declaration" >&5
-$as_echo_n "checking for sqrtl declaration... " >&6; }
- if test x${glibcxx_cv_func_sqrtl_use+set} != xset; then
- if ${glibcxx_cv_func_sqrtl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- sqrtl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_sqrtl_use=yes
-else
- glibcxx_cv_func_sqrtl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_sqrtl_use" >&5
-$as_echo "$glibcxx_cv_func_sqrtl_use" >&6; }
-
- if test x$glibcxx_cv_func_sqrtl_use = x"yes"; then
- for ac_func in sqrtl
-do :
- ac_fn_c_check_func "$LINENO" "sqrtl" "ac_cv_func_sqrtl"
-if test "x$ac_cv_func_sqrtl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SQRTL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sqrtl declaration" >&5
-$as_echo_n "checking for _sqrtl declaration... " >&6; }
- if test x${glibcxx_cv_func__sqrtl_use+set} != xset; then
- if ${glibcxx_cv_func__sqrtl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _sqrtl(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__sqrtl_use=yes
-else
- glibcxx_cv_func__sqrtl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__sqrtl_use" >&5
-$as_echo "$glibcxx_cv_func__sqrtl_use" >&6; }
-
- if test x$glibcxx_cv_func__sqrtl_use = x"yes"; then
- for ac_func in _sqrtl
-do :
- ac_fn_c_check_func "$LINENO" "_sqrtl" "ac_cv_func__sqrtl"
-if test "x$ac_cv_func__sqrtl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__SQRTL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sincosl declaration" >&5
-$as_echo_n "checking for sincosl declaration... " >&6; }
- if test x${glibcxx_cv_func_sincosl_use+set} != xset; then
- if ${glibcxx_cv_func_sincosl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- sincosl(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_sincosl_use=yes
-else
- glibcxx_cv_func_sincosl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_sincosl_use" >&5
-$as_echo "$glibcxx_cv_func_sincosl_use" >&6; }
-
- if test x$glibcxx_cv_func_sincosl_use = x"yes"; then
- for ac_func in sincosl
-do :
- ac_fn_c_check_func "$LINENO" "sincosl" "ac_cv_func_sincosl"
-if test "x$ac_cv_func_sincosl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SINCOSL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sincosl declaration" >&5
-$as_echo_n "checking for _sincosl declaration... " >&6; }
- if test x${glibcxx_cv_func__sincosl_use+set} != xset; then
- if ${glibcxx_cv_func__sincosl_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
-int
-main ()
-{
- _sincosl(0, 0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__sincosl_use=yes
-else
- glibcxx_cv_func__sincosl_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__sincosl_use" >&5
-$as_echo "$glibcxx_cv_func__sincosl_use" >&6; }
-
- if test x$glibcxx_cv_func__sincosl_use = x"yes"; then
- for ac_func in _sincosl
-do :
- ac_fn_c_check_func "$LINENO" "_sincosl" "ac_cv_func__sincosl"
-if test "x$ac_cv_func__sincosl" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__SINCOSL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for finitel declaration" >&5
-$as_echo_n "checking for finitel declaration... " >&6; }
- if test x${glibcxx_cv_func_finitel_use+set} != xset; then
- if ${glibcxx_cv_func_finitel_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- finitel(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_finitel_use=yes
-else
- glibcxx_cv_func_finitel_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_finitel_use" >&5
-$as_echo "$glibcxx_cv_func_finitel_use" >&6; }
-
- if test x$glibcxx_cv_func_finitel_use = x"yes"; then
- for ac_func in finitel
-do :
- ac_fn_c_check_func "$LINENO" "finitel" "ac_cv_func_finitel"
-if test "x$ac_cv_func_finitel" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FINITEL 1
-_ACEOF
-
-fi
-done
-
- else
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _finitel declaration" >&5
-$as_echo_n "checking for _finitel declaration... " >&6; }
- if test x${glibcxx_cv_func__finitel_use+set} != xset; then
- if ${glibcxx_cv_func__finitel_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
-
-int
-main ()
-{
- _finitel(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func__finitel_use=yes
-else
- glibcxx_cv_func__finitel_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func__finitel_use" >&5
-$as_echo "$glibcxx_cv_func__finitel_use" >&6; }
-
- if test x$glibcxx_cv_func__finitel_use = x"yes"; then
- for ac_func in _finitel
-do :
- ac_fn_c_check_func "$LINENO" "_finitel" "ac_cv_func__finitel"
-if test "x$ac_cv_func__finitel" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__FINITEL 1
-_ACEOF
-
-fi
-done
-
- fi
- fi
-
-
-
-
- LIBS="$ac_save_LIBS"
- CXXFLAGS="$ac_save_CXXFLAGS"
-
-
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for at_quick_exit declaration" >&5
-$as_echo_n "checking for at_quick_exit declaration... " >&6; }
- if test x${glibcxx_cv_func_at_quick_exit_use+set} != xset; then
- if ${glibcxx_cv_func_at_quick_exit_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
- at_quick_exit(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_at_quick_exit_use=yes
-else
- glibcxx_cv_func_at_quick_exit_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_at_quick_exit_use" >&5
-$as_echo "$glibcxx_cv_func_at_quick_exit_use" >&6; }
- if test x$glibcxx_cv_func_at_quick_exit_use = x"yes"; then
- for ac_func in at_quick_exit
-do :
- ac_fn_c_check_func "$LINENO" "at_quick_exit" "ac_cv_func_at_quick_exit"
-if test "x$ac_cv_func_at_quick_exit" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_AT_QUICK_EXIT 1
-_ACEOF
-
-fi
-done
-
- fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quick_exit declaration" >&5
-$as_echo_n "checking for quick_exit declaration... " >&6; }
- if test x${glibcxx_cv_func_quick_exit_use+set} != xset; then
- if ${glibcxx_cv_func_quick_exit_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
- quick_exit(0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_quick_exit_use=yes
-else
- glibcxx_cv_func_quick_exit_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_quick_exit_use" >&5
-$as_echo "$glibcxx_cv_func_quick_exit_use" >&6; }
- if test x$glibcxx_cv_func_quick_exit_use = x"yes"; then
- for ac_func in quick_exit
-do :
- ac_fn_c_check_func "$LINENO" "quick_exit" "ac_cv_func_quick_exit"
-if test "x$ac_cv_func_quick_exit" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_QUICK_EXIT 1
-_ACEOF
-
-fi
-done
-
- fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration" >&5
-$as_echo_n "checking for strtold declaration... " >&6; }
- if test x${glibcxx_cv_func_strtold_use+set} != xset; then
- if ${glibcxx_cv_func_strtold_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
- strtold(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_strtold_use=yes
-else
- glibcxx_cv_func_strtold_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_strtold_use" >&5
-$as_echo "$glibcxx_cv_func_strtold_use" >&6; }
- if test x$glibcxx_cv_func_strtold_use = x"yes"; then
- for ac_func in strtold
-do :
- ac_fn_c_check_func "$LINENO" "strtold" "ac_cv_func_strtold"
-if test "x$ac_cv_func_strtold" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRTOLD 1
-_ACEOF
-
-fi
-done
-
- fi
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtof declaration" >&5
-$as_echo_n "checking for strtof declaration... " >&6; }
- if test x${glibcxx_cv_func_strtof_use+set} != xset; then
- if ${glibcxx_cv_func_strtof_use+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-
- ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-int
-main ()
-{
- strtof(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- glibcxx_cv_func_strtof_use=yes
-else
- glibcxx_cv_func_strtof_use=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_func_strtof_use" >&5
-$as_echo "$glibcxx_cv_func_strtof_use" >&6; }
- if test x$glibcxx_cv_func_strtof_use = x"yes"; then
- for ac_func in strtof
-do :
- ac_fn_c_check_func "$LINENO" "strtof" "ac_cv_func_strtof"
-if test "x$ac_cv_func_strtof" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STRTOF 1
-_ACEOF
-
-fi
-done
-
- fi
-
-
-
-
- CXXFLAGS="$ac_save_CXXFLAGS"
-
- ;;
*-tpf)
SECTION_FLAGS='-ffunction-sections -fdata-sections'
SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
@@ -77178,6 +71244,61 @@ $as_echo "$glibcxx_cv_dirfd" >&6; }
$as_echo "#define HAVE_DIRFD 1" >>confdefs.h
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openat" >&5
+$as_echo_n "checking for openat... " >&6; }
+if ${glibcxx_cv_openat+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test x$gcc_no_link = xyes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fcntl.h>
+int
+main ()
+{
+int fd = ::openat(AT_FDCWD, "", 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ glibcxx_cv_openat=yes
+else
+ glibcxx_cv_openat=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ if test x$gcc_no_link = xyes; then
+ as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
+fi
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fcntl.h>
+int
+main ()
+{
+int fd = ::openat(AT_FDCWD, "", 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ glibcxx_cv_openat=yes
+else
+ glibcxx_cv_openat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $glibcxx_cv_openat" >&5
+$as_echo "$glibcxx_cv_openat" >&6; }
+ if test $glibcxx_cv_openat = yes; then
+
+$as_echo "#define HAVE_OPENAT 1" >>confdefs.h
+
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unlinkat" >&5
$as_echo_n "checking for unlinkat... " >&6; }
if ${glibcxx_cv_unlinkat+:} false; then :
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index e59bcdb..79512a3 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -353,6 +353,31 @@ else
AC_DEFINE(HAVE_ICONV)
AC_DEFINE(HAVE_MEMALIGN)
+
+ case "${target}" in
+ *-rtems*)
+ case "${target}" in
+ bfin* | lm32* | mips* | moxie* | or1k* | v850*)
+ ;;
+ *)
+ AC_DEFINE(HAVE_TLS)
+ ;;
+ esac
+ AC_DEFINE(HAVE_ALIGNED_ALLOC)
+ AC_DEFINE(HAVE_AT_QUICK_EXIT)
+ AC_DEFINE(HAVE_LINK)
+ AC_DEFINE(HAVE_POLL)
+ AC_DEFINE(HAVE_QUICK_EXIT)
+ AC_DEFINE(HAVE_READLINK)
+ AC_DEFINE(HAVE_SETENV)
+ AC_DEFINE(HAVE_SLEEP)
+ AC_DEFINE(HAVE_SOCKATMARK)
+ AC_DEFINE(HAVE_STRERROR_L)
+ AC_DEFINE(HAVE_SYMLINK)
+ AC_DEFINE(HAVE_TRUNCATE)
+ AC_DEFINE(HAVE_USLEEP)
+ ;;
+ esac
elif test "x$with_headers" != "xno"; then
GLIBCXX_CROSSCONFIG
fi
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
index ae5283b..e8ff89f 100644
--- a/libstdc++-v3/crossconfig.m4
+++ b/libstdc++-v3/crossconfig.m4
@@ -244,12 +244,6 @@ case "${host}" in
AC_DEFINE(HAVE_SINHF)
AC_DEFINE(HAVE_SINHL)
;;
- *-rtems*)
- GLIBCXX_CHECK_COMPILER_FEATURES
- GLIBCXX_CHECK_LINKER_FEATURES
- GLIBCXX_CHECK_MATH_SUPPORT
- GLIBCXX_CHECK_STDLIB_SUPPORT
- ;;
*-tpf)
SECTION_FLAGS='-ffunction-sections -fdata-sections'
SECTION_LDFLAGS='-Wl,--gc-sections $SECTION_LDFLAGS'
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index b46def7..069a16e 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1286,7 +1286,7 @@ stamp-float128:
endif
# This header is not installed, it's only used to build libstdc++ itself.
-${host_builddir}/largefile-config.h: ${CONFIG_HEADER}
+${host_builddir}/largefile-config.h: ${CONFIG_HEADER} stamp-${host_alias}
@rm -f $@.tmp
@-grep 'define _DARWIN_USE_64_BIT_INODE' ${CONFIG_HEADER} >> $@.tmp
@-grep 'define _FILE_OFFSET_BITS' ${CONFIG_HEADER} >> $@.tmp
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index f844008..36eff73 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -1780,7 +1780,7 @@ stamp-host: ${host_headers} ${bits_host_headers} ${ext_host_headers} ${host_head
@ENABLE_FLOAT128_FALSE@ echo 'undef _GLIBCXX_USE_FLOAT128' > stamp-float128
# This header is not installed, it's only used to build libstdc++ itself.
-${host_builddir}/largefile-config.h: ${CONFIG_HEADER}
+${host_builddir}/largefile-config.h: ${CONFIG_HEADER} stamp-${host_alias}
@rm -f $@.tmp
@-grep 'define _DARWIN_USE_64_BIT_INODE' ${CONFIG_HEADER} >> $@.tmp
@-grep 'define _FILE_OFFSET_BITS' ${CONFIG_HEADER} >> $@.tmp
diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h
index b856b1d..965ff29 100644
--- a/libstdc++-v3/include/bits/char_traits.h
+++ b/libstdc++-v3/include/bits/char_traits.h
@@ -215,14 +215,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
if (__s1 == __s2) // unlikely, but saves a lot of work
return __s1;
-#if __cpp_constexpr_dynamic_alloc
- // The overlap detection below fails due to PR c++/89074,
- // so use a temporary buffer instead.
- char_type* __tmp = new char_type[__n];
- copy(__tmp, __s2, __n);
- copy(__s1, __tmp, __n);
- delete[] __tmp;
-#else
const auto __end = __s2 + __n - 1;
bool __overlap = false;
for (std::size_t __i = 0; __i < __n - 1; ++__i)
@@ -244,7 +236,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
else
copy(__s1, __s2, __n);
-#endif
return __s1;
}
#endif
diff --git a/libstdc++-v3/include/bits/chrono.h b/libstdc++-v3/include/bits/chrono.h
index 745f9a8..05987ca 100644
--- a/libstdc++-v3/include/bits/chrono.h
+++ b/libstdc++-v3/include/bits/chrono.h
@@ -273,16 +273,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#endif // C++17
#if __cplusplus > 201703L
- template<typename _Tp>
- struct is_clock;
-
- template<typename _Tp>
- inline constexpr bool is_clock_v = is_clock<_Tp>::value;
-
#if __cpp_lib_concepts
template<typename _Tp>
- struct is_clock : false_type
- { };
+ inline constexpr bool is_clock_v = false;
template<typename _Tp>
requires requires {
@@ -298,32 +291,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
requires same_as<typename _Tp::time_point::duration,
typename _Tp::duration>;
}
- struct is_clock<_Tp> : true_type
- { };
+ inline constexpr bool is_clock_v<_Tp> = true;
#else
template<typename _Tp, typename = void>
- struct __is_clock_impl : false_type
- { };
+ inline constexpr bool is_clock_v = false;
template<typename _Tp>
- struct __is_clock_impl<_Tp,
- void_t<typename _Tp::rep, typename _Tp::period,
- typename _Tp::duration,
- typename _Tp::time_point::duration,
- decltype(_Tp::is_steady),
- decltype(_Tp::now())>>
- : __and_<is_same<typename _Tp::duration,
- duration<typename _Tp::rep, typename _Tp::period>>,
- is_same<typename _Tp::time_point::duration,
- typename _Tp::duration>,
- is_same<decltype(&_Tp::is_steady), const bool*>,
- is_same<decltype(_Tp::now()), typename _Tp::time_point>>::type
- { };
+ inline constexpr bool
+ is_clock_v<_Tp, void_t<typename _Tp::rep, typename _Tp::period,
+ typename _Tp::duration,
+ typename _Tp::time_point::duration,
+ decltype(_Tp::is_steady),
+ decltype(_Tp::now())>>
+ = __and_v<is_same<typename _Tp::duration,
+ duration<typename _Tp::rep, typename _Tp::period>>,
+ is_same<typename _Tp::time_point::duration,
+ typename _Tp::duration>,
+ is_same<decltype(&_Tp::is_steady), const bool*>,
+ is_same<decltype(_Tp::now()), typename _Tp::time_point>>;
+#endif
template<typename _Tp>
- struct is_clock : __is_clock_impl<_Tp>::type
+ struct is_clock
+ : bool_constant<is_clock_v<_Tp>>
{ };
-#endif
#endif // C++20
#if __cplusplus >= 201703L
diff --git a/libstdc++-v3/include/bits/fs_ops.h b/libstdc++-v3/include/bits/fs_ops.h
index 0281c65..1ae8fe1 100644
--- a/libstdc++-v3/include/bits/fs_ops.h
+++ b/libstdc++-v3/include/bits/fs_ops.h
@@ -44,10 +44,16 @@ namespace filesystem
* @{
*/
+ [[nodiscard]]
path absolute(const path& __p);
+
+ [[nodiscard]]
path absolute(const path& __p, error_code& __ec);
+ [[nodiscard]]
path canonical(const path& __p);
+
+ [[nodiscard]]
path canonical(const path& __p, error_code& __ec);
inline void
@@ -100,25 +106,34 @@ namespace filesystem
void create_symlink(const path& __to, const path& __new_symlink,
error_code& __ec) noexcept;
+ [[nodiscard]]
path current_path();
+
+ [[nodiscard]]
path current_path(error_code& __ec);
+
void current_path(const path& __p);
void current_path(const path& __p, error_code& __ec) noexcept;
+ [[nodiscard]]
bool
equivalent(const path& __p1, const path& __p2);
+ [[nodiscard]]
bool
equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept;
+ [[nodiscard]]
inline bool
exists(file_status __s) noexcept
{ return status_known(__s) && __s.type() != file_type::not_found; }
+ [[nodiscard]]
inline bool
exists(const path& __p)
{ return exists(status(__p)); }
+ [[nodiscard]]
inline bool
exists(const path& __p, error_code& __ec) noexcept
{
@@ -131,63 +146,85 @@ namespace filesystem
return false;
}
+ [[nodiscard]]
uintmax_t file_size(const path& __p);
+
+ [[nodiscard]]
uintmax_t file_size(const path& __p, error_code& __ec) noexcept;
+ [[nodiscard]]
uintmax_t hard_link_count(const path& __p);
+
+ [[nodiscard]]
uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept;
+ [[nodiscard]]
inline bool
is_block_file(file_status __s) noexcept
{ return __s.type() == file_type::block; }
+ [[nodiscard]]
inline bool
is_block_file(const path& __p)
{ return is_block_file(status(__p)); }
+ [[nodiscard]]
inline bool
is_block_file(const path& __p, error_code& __ec) noexcept
{ return is_block_file(status(__p, __ec)); }
+ [[nodiscard]]
inline bool
is_character_file(file_status __s) noexcept
{ return __s.type() == file_type::character; }
+ [[nodiscard]]
inline bool
is_character_file(const path& __p)
{ return is_character_file(status(__p)); }
+ [[nodiscard]]
inline bool
is_character_file(const path& __p, error_code& __ec) noexcept
{ return is_character_file(status(__p, __ec)); }
+ [[nodiscard]]
inline bool
is_directory(file_status __s) noexcept
{ return __s.type() == file_type::directory; }
+ [[nodiscard]]
inline bool
is_directory(const path& __p)
{ return is_directory(status(__p)); }
+ [[nodiscard]]
inline bool
is_directory(const path& __p, error_code& __ec) noexcept
{ return is_directory(status(__p, __ec)); }
+ [[nodiscard]]
bool is_empty(const path& __p);
+
+ [[nodiscard]]
bool is_empty(const path& __p, error_code& __ec);
+ [[nodiscard]]
inline bool
is_fifo(file_status __s) noexcept
{ return __s.type() == file_type::fifo; }
+ [[nodiscard]]
inline bool
is_fifo(const path& __p)
{ return is_fifo(status(__p)); }
+ [[nodiscard]]
inline bool
is_fifo(const path& __p, error_code& __ec) noexcept
{ return is_fifo(status(__p, __ec)); }
+ [[nodiscard]]
inline bool
is_other(file_status __s) noexcept
{
@@ -195,52 +232,67 @@ namespace filesystem
&& !is_symlink(__s);
}
+ [[nodiscard]]
inline bool
is_other(const path& __p)
{ return is_other(status(__p)); }
+ [[nodiscard]]
inline bool
is_other(const path& __p, error_code& __ec) noexcept
{ return is_other(status(__p, __ec)); }
+ [[nodiscard]]
inline bool
is_regular_file(file_status __s) noexcept
{ return __s.type() == file_type::regular; }
+ [[nodiscard]]
inline bool
is_regular_file(const path& __p)
{ return is_regular_file(status(__p)); }
+ [[nodiscard]]
inline bool
is_regular_file(const path& __p, error_code& __ec) noexcept
{ return is_regular_file(status(__p, __ec)); }
+ [[nodiscard]]
inline bool
is_socket(file_status __s) noexcept
{ return __s.type() == file_type::socket; }
+ [[nodiscard]]
inline bool
is_socket(const path& __p)
{ return is_socket(status(__p)); }
+ [[nodiscard]]
inline bool
is_socket(const path& __p, error_code& __ec) noexcept
{ return is_socket(status(__p, __ec)); }
+ [[nodiscard]]
inline bool
is_symlink(file_status __s) noexcept
{ return __s.type() == file_type::symlink; }
+ [[nodiscard]]
inline bool
is_symlink(const path& __p)
{ return is_symlink(symlink_status(__p)); }
+ [[nodiscard]]
inline bool
is_symlink(const path& __p, error_code& __ec) noexcept
{ return is_symlink(symlink_status(__p, __ec)); }
+ [[nodiscard]]
file_time_type last_write_time(const path& __p);
+
+ [[nodiscard]]
file_time_type last_write_time(const path& __p, error_code& __ec) noexcept;
+
void last_write_time(const path& __p, file_time_type __new_time);
void last_write_time(const path& __p, file_time_type __new_time,
error_code& __ec) noexcept;
@@ -257,19 +309,30 @@ namespace filesystem
permissions(const path& __p, perms __prms, perm_options __opts,
error_code& __ec) noexcept;
+ [[nodiscard]]
inline path proximate(const path& __p, error_code& __ec)
{ return proximate(__p, current_path(), __ec); }
+ [[nodiscard]]
path proximate(const path& __p, const path& __base = current_path());
+
+ [[nodiscard]]
path proximate(const path& __p, const path& __base, error_code& __ec);
+ [[nodiscard]]
path read_symlink(const path& __p);
+
+ [[nodiscard]]
path read_symlink(const path& __p, error_code& __ec);
+ [[nodiscard]]
inline path relative(const path& __p, error_code& __ec)
{ return relative(__p, current_path(), __ec); }
+ [[nodiscard]]
path relative(const path& __p, const path& __base = current_path());
+
+ [[nodiscard]]
path relative(const path& __p, const path& __base, error_code& __ec);
bool remove(const path& __p);
@@ -284,22 +347,38 @@ namespace filesystem
void resize_file(const path& __p, uintmax_t __size);
void resize_file(const path& __p, uintmax_t __size, error_code& __ec) noexcept;
+ [[nodiscard]]
space_info space(const path& __p);
+
+ [[nodiscard]]
space_info space(const path& __p, error_code& __ec) noexcept;
+ [[nodiscard]]
file_status status(const path& __p);
+
+ [[nodiscard]]
file_status status(const path& __p, error_code& __ec) noexcept;
+ [[nodiscard]]
inline bool status_known(file_status __s) noexcept
{ return __s.type() != file_type::none; }
+ [[nodiscard]]
file_status symlink_status(const path& __p);
+
+ [[nodiscard]]
file_status symlink_status(const path& __p, error_code& __ec) noexcept;
+ [[nodiscard]]
path temp_directory_path();
+
+ [[nodiscard]]
path temp_directory_path(error_code& __ec);
+ [[nodiscard]]
path weakly_canonical(const path& __p);
+
+ [[nodiscard]]
path weakly_canonical(const path& __p, error_code& __ec);
/// @} group filesystem
diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h
index d6202fd..6e7b366 100644
--- a/libstdc++-v3/include/bits/fs_path.h
+++ b/libstdc++-v3/include/bits/fs_path.h
@@ -102,19 +102,16 @@ namespace __detail
#endif
template<typename _Iter_traits, typename = void>
- struct __is_path_iter_src
- : false_type
- { };
+ inline constexpr bool __is_path_iter_src = false;
template<typename _Iter_traits>
- struct __is_path_iter_src<_Iter_traits,
- void_t<typename _Iter_traits::value_type>>
- : bool_constant<__is_encoded_char<typename _Iter_traits::value_type>>
- { };
+ inline constexpr bool
+ __is_path_iter_src<_Iter_traits, void_t<typename _Iter_traits::value_type>>
+ = __is_encoded_char<typename _Iter_traits::value_type>;
template<typename _Source>
inline constexpr bool __is_path_src
- = __is_path_iter_src<iterator_traits<decay_t<_Source>>>::value;
+ = __is_path_iter_src<iterator_traits<decay_t<_Source>>>;
template<>
inline constexpr bool __is_path_src<path> = false;
@@ -150,7 +147,7 @@ namespace __detail
// SFINAE constraint for InputIterator parameters as required by [fs.req].
template<typename _Iter, typename _Tr = __safe_iterator_traits<_Iter>>
- using _Path2 = enable_if_t<__is_path_iter_src<_Tr>::value, path>;
+ using _Path2 = enable_if_t<__is_path_iter_src<_Tr>, path>;
#if __cpp_lib_concepts
template<typename _Iter>
diff --git a/libstdc++-v3/include/bits/move_only_function.h b/libstdc++-v3/include/bits/move_only_function.h
index f96552a..71d5207 100644
--- a/libstdc++-v3/include/bits/move_only_function.h
+++ b/libstdc++-v3/include/bits/move_only_function.h
@@ -183,6 +183,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr bool __is_move_only_function_v<move_only_function<_Tp>> = true;
/// @endcond
+ namespace __detail::__variant
+ {
+ template<typename> struct _Never_valueless_alt; // see <variant>
+
+ // Provide the strong exception-safety guarantee when emplacing a
+ // move_only_function into a variant.
+ template<typename... _Signature>
+ struct _Never_valueless_alt<std::move_only_function<_Signature...>>
+ : true_type
+ { };
+ } // namespace __detail::__variant
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
diff --git a/libstdc++-v3/include/bits/utility.h b/libstdc++-v3/include/bits/utility.h
index 4a457af..e0e4030 100644
--- a/libstdc++-v3/include/bits/utility.h
+++ b/libstdc++-v3/include/bits/utility.h
@@ -125,7 +125,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
// The standard says this macro and alias template should be in <tuple> but we
-// we define them here, to be available in <array>, <utility> and <ranges> too.
+// define them here, to be available in <array>, <utility> and <ranges> too.
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3378. tuple_size_v/tuple_element_t should be available when
// tuple_size/tuple_element are
@@ -190,7 +190,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#if __cplusplus >= 201703L
- //
struct in_place_t {
explicit in_place_t() = default;
};
diff --git a/libstdc++-v3/include/experimental/bits/fs_ops.h b/libstdc++-v3/include/experimental/bits/fs_ops.h
index 773f27c..e37dc9a 100644
--- a/libstdc++-v3/include/experimental/bits/fs_ops.h
+++ b/libstdc++-v3/include/experimental/bits/fs_ops.h
@@ -51,10 +51,16 @@ inline namespace v1
* @{
*/
+ [[__nodiscard__]]
path absolute(const path& __p, const path& __base = current_path());
+ [[__nodiscard__]]
path canonical(const path& __p, const path& __base = current_path());
+
+ [[__nodiscard__]]
path canonical(const path& __p, error_code& __ec);
+
+ [[__nodiscard__]]
path canonical(const path& __p, const path& __base, error_code& __ec);
inline void
@@ -66,6 +72,7 @@ inline namespace v1
{ copy(__from, __to, copy_options::none, __ec); }
void copy(const path& __from, const path& __to, copy_options __options);
+
void copy(const path& __from, const path& __to, copy_options __options,
error_code& __ec) noexcept;
@@ -107,25 +114,34 @@ inline namespace v1
void create_symlink(const path& __to, const path& __new_symlink,
error_code& __ec) noexcept;
+ [[__nodiscard__]]
path current_path();
+
+ [[__nodiscard__]]
path current_path(error_code& __ec);
+
void current_path(const path& __p);
void current_path(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
bool
equivalent(const path& __p1, const path& __p2);
+ [[__nodiscard__]]
bool
equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept;
+ [[__nodiscard__]]
inline bool
exists(file_status __s) noexcept
{ return status_known(__s) && __s.type() != file_type::not_found; }
+ [[__nodiscard__]]
inline bool
exists(const path& __p)
{ return exists(status(__p)); }
+ [[__nodiscard__]]
inline bool
exists(const path& __p, error_code& __ec) noexcept
{
@@ -138,63 +154,84 @@ inline namespace v1
return false;
}
+ [[__nodiscard__]]
uintmax_t file_size(const path& __p);
+
+ [[__nodiscard__]]
uintmax_t file_size(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
uintmax_t hard_link_count(const path& __p);
+
+ [[__nodiscard__]]
uintmax_t hard_link_count(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
inline bool
is_block_file(file_status __s) noexcept
{ return __s.type() == file_type::block; }
+ [[__nodiscard__]]
inline bool
is_block_file(const path& __p)
{ return is_block_file(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_block_file(const path& __p, error_code& __ec) noexcept
{ return is_block_file(status(__p, __ec)); }
+ [[__nodiscard__]]
inline bool
is_character_file(file_status __s) noexcept
{ return __s.type() == file_type::character; }
+ [[__nodiscard__]]
inline bool
is_character_file(const path& __p)
{ return is_character_file(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_character_file(const path& __p, error_code& __ec) noexcept
{ return is_character_file(status(__p, __ec)); }
+ [[__nodiscard__]]
inline bool
is_directory(file_status __s) noexcept
{ return __s.type() == file_type::directory; }
+ [[__nodiscard__]]
inline bool
is_directory(const path& __p)
{ return is_directory(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_directory(const path& __p, error_code& __ec) noexcept
{ return is_directory(status(__p, __ec)); }
+ [[__nodiscard__]]
bool is_empty(const path& __p);
+ [[__nodiscard__]]
bool is_empty(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
inline bool
is_fifo(file_status __s) noexcept
{ return __s.type() == file_type::fifo; }
+ [[__nodiscard__]]
inline bool
is_fifo(const path& __p)
{ return is_fifo(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_fifo(const path& __p, error_code& __ec) noexcept
{ return is_fifo(status(__p, __ec)); }
+ [[__nodiscard__]]
inline bool
is_other(file_status __s) noexcept
{
@@ -202,52 +239,67 @@ inline namespace v1
&& !is_symlink(__s);
}
+ [[__nodiscard__]]
inline bool
is_other(const path& __p)
{ return is_other(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_other(const path& __p, error_code& __ec) noexcept
{ return is_other(status(__p, __ec)); }
+ [[__nodiscard__]]
inline bool
is_regular_file(file_status __s) noexcept
{ return __s.type() == file_type::regular; }
+ [[__nodiscard__]]
inline bool
is_regular_file(const path& __p)
{ return is_regular_file(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_regular_file(const path& __p, error_code& __ec) noexcept
{ return is_regular_file(status(__p, __ec)); }
+ [[__nodiscard__]]
inline bool
is_socket(file_status __s) noexcept
{ return __s.type() == file_type::socket; }
+ [[__nodiscard__]]
inline bool
is_socket(const path& __p)
{ return is_socket(status(__p)); }
+ [[__nodiscard__]]
inline bool
is_socket(const path& __p, error_code& __ec) noexcept
{ return is_socket(status(__p, __ec)); }
+ [[__nodiscard__]]
inline bool
is_symlink(file_status __s) noexcept
{ return __s.type() == file_type::symlink; }
+ [[__nodiscard__]]
inline bool
is_symlink(const path& __p)
{ return is_symlink(symlink_status(__p)); }
+ [[__nodiscard__]]
inline bool
is_symlink(const path& __p, error_code& __ec) noexcept
{ return is_symlink(symlink_status(__p, __ec)); }
+ [[__nodiscard__]]
file_time_type last_write_time(const path& __p);
+
+ [[__nodiscard__]]
file_time_type last_write_time(const path& __p, error_code& __ec) noexcept;
+
void last_write_time(const path& __p, file_time_type __new_time);
void last_write_time(const path& __p, file_time_type __new_time,
error_code& __ec) noexcept;
@@ -255,7 +307,10 @@ inline namespace v1
void permissions(const path& __p, perms __prms);
void permissions(const path& __p, perms __prms, error_code& __ec) noexcept;
+ [[__nodiscard__]]
path read_symlink(const path& __p);
+
+ [[__nodiscard__]]
path read_symlink(const path& __p, error_code& __ec);
bool remove(const path& __p);
@@ -270,22 +325,38 @@ inline namespace v1
void resize_file(const path& __p, uintmax_t __size);
void resize_file(const path& __p, uintmax_t __size, error_code& __ec) noexcept;
+ [[__nodiscard__]]
space_info space(const path& __p);
+
+ [[__nodiscard__]]
space_info space(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
file_status status(const path& __p);
+
+ [[__nodiscard__]]
file_status status(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
inline bool status_known(file_status __s) noexcept
{ return __s.type() != file_type::none; }
+ [[__nodiscard__]]
file_status symlink_status(const path& __p);
+
+ [[__nodiscard__]]
file_status symlink_status(const path& __p, error_code& __ec) noexcept;
+ [[__nodiscard__]]
path system_complete(const path& __p);
+
+ [[__nodiscard__]]
path system_complete(const path& __p, error_code& __ec);
+ [[__nodiscard__]]
path temp_directory_path();
+
+ [[__nodiscard__]]
path temp_directory_path(error_code& __ec);
/// @} group filesystem-ts
diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string
index 37a4aab..62ecdb3 100644
--- a/libstdc++-v3/include/std/string
+++ b/libstdc++-v3/include/std/string
@@ -37,7 +37,7 @@
#include <bits/c++config.h>
#include <bits/stringfwd.h>
-#include <bits/char_traits.h> // NB: In turn includes stl_algobase.h
+#include <bits/char_traits.h>
#include <bits/allocator.h>
#include <bits/cpp_type_traits.h>
#include <bits/localefwd.h> // For operators >>, <<, and getline.
diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant
index c5f25ef..5ff1e3e 100644
--- a/libstdc++-v3/include/std/variant
+++ b/libstdc++-v3/include/std/variant
@@ -764,7 +764,7 @@ namespace __variant
{
// This function means 'using _Build_FUN<I, T, Ti>::_S_fun;' is valid,
// but only static functions will be considered in the call below.
- void _S_fun();
+ void _S_fun() = delete;
};
// "... for which Ti x[] = {std::forward<T>(t)}; is well-formed."
@@ -795,29 +795,28 @@ namespace __variant
// The index selected for FUN(std::forward<T>(t)), or variant_npos if none.
template<typename _Tp, typename _Variant, typename = void>
- struct __accepted_index
- : integral_constant<size_t, variant_npos>
- { };
+ inline constexpr size_t
+ __accepted_index = variant_npos;
template<typename _Tp, typename _Variant>
- struct __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>>
- : _FUN_type<_Tp, _Variant>
- { };
+ inline constexpr size_t
+ __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>>
+ = _FUN_type<_Tp, _Variant>::value;
- template <typename _Maybe_variant_cookie, typename _Variant>
- struct _Extra_visit_slot_needed
- {
- template <typename> struct _Variant_never_valueless;
+ template<typename _Maybe_variant_cookie, typename _Variant,
+ typename = __remove_cvref_t<_Variant>>
+ inline constexpr bool
+ __extra_visit_slot_needed = false;
- template <typename... _Types>
- struct _Variant_never_valueless<variant<_Types...>>
- : bool_constant<__variant::__never_valueless<_Types...>()> {};
+ template<typename _Var, typename... _Types>
+ inline constexpr bool
+ __extra_visit_slot_needed<__variant_cookie, _Var, variant<_Types...>>
+ = !__variant::__never_valueless<_Types...>();
- static constexpr bool value =
- (is_same_v<_Maybe_variant_cookie, __variant_cookie>
- || is_same_v<_Maybe_variant_cookie, __variant_idx_cookie>)
- && !_Variant_never_valueless<__remove_cvref_t<_Variant>>::value;
- };
+ template<typename _Var, typename... _Types>
+ inline constexpr bool
+ __extra_visit_slot_needed<__variant_idx_cookie, _Var, variant<_Types...>>
+ = !__variant::__never_valueless<_Types...>();
// Used for storing a multi-dimensional vtable.
template<typename _Tp, size_t... _Dimensions>
@@ -874,7 +873,7 @@ namespace __variant
using _Variant = typename _Nth_type<__index, _Variants...>::type;
static constexpr int __do_cookie =
- _Extra_visit_slot_needed<_Ret, _Variant>::value ? 1 : 0;
+ __extra_visit_slot_needed<_Ret, _Variant> ? 1 : 0;
using _Tp = _Ret(*)(_Visitor, _Variants...);
@@ -953,7 +952,7 @@ namespace __variant
_S_apply_all_alts(_Array_type& __vtable,
std::index_sequence<__var_indices...>)
{
- if constexpr (_Extra_visit_slot_needed<_Result_type, _Next>::value)
+ if constexpr (__extra_visit_slot_needed<_Result_type, _Next>)
(_S_apply_single_alt<true, __var_indices>(
__vtable._M_arr[__var_indices + 1],
&(__vtable._M_arr[0])), ...);
@@ -1372,7 +1371,7 @@ namespace __variant
template<typename _Tp>
static constexpr size_t __accepted_index
- = __detail::__variant::__accepted_index<_Tp, variant>::value;
+ = __detail::__variant::__accepted_index<_Tp, variant>;
template<size_t _Np, typename = enable_if_t<(_Np < sizeof...(_Types))>>
using __to_type = typename _Nth_type<_Np, _Types...>::type;
diff --git a/libstdc++-v3/libsupc++/eh_globals.cc b/libstdc++-v3/libsupc++/eh_globals.cc
index 768425c..0aadb69 100644
--- a/libstdc++-v3/libsupc++/eh_globals.cc
+++ b/libstdc++-v3/libsupc++/eh_globals.cc
@@ -119,8 +119,13 @@ struct __eh_globals_init
~__eh_globals_init()
{
if (_S_init)
- __gthread_key_delete(_M_key);
- _S_init = false;
+ {
+ /* Set it before the call, so that, should
+ __gthread_key_delete throw an exception, it won't rely on
+ the key being deleted. */
+ _S_init = false;
+ __gthread_key_delete(_M_key);
+ }
}
__eh_globals_init(const __eh_globals_init&) = delete;
diff --git a/libstdc++-v3/scripts/extract_symvers.in b/libstdc++-v3/scripts/extract_symvers.in
index dd9f63d..d8ea623 100755
--- a/libstdc++-v3/scripts/extract_symvers.in
+++ b/libstdc++-v3/scripts/extract_symvers.in
@@ -54,8 +54,8 @@ SunOS)
${readelf} ${lib} |\
sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
sed -e 's/ \[<localentry>: [0-9]*\] //' |\
- egrep -v ' (LOCAL|UND) ' |\
- egrep -v ' (_DYNAMIC|_GLOBAL_OFFSET_TABLE_|_PROCEDURE_LINKAGE_TABLE_|_edata|_end|_etext)$' |\
+ grep -E -v ' (LOCAL|UND) ' |\
+ grep -E -v ' (_DYNAMIC|_GLOBAL_OFFSET_TABLE_|_PROCEDURE_LINKAGE_TABLE_|_edata|_end|_etext)$' |\
sed -e 's/ <processor specific>: / <processor_specific>:_/g' |\
sed -e 's/ <OS specific>: / <OS_specific>:_/g' |\
sed -e 's/ <unknown>: / <unknown>:_/g' |\
diff --git a/libstdc++-v3/scripts/run_doxygen b/libstdc++-v3/scripts/run_doxygen
index 86da071..50514c7 100644
--- a/libstdc++-v3/scripts/run_doxygen
+++ b/libstdc++-v3/scripts/run_doxygen
@@ -291,7 +291,7 @@ cxxflags="-Og -g -std=gnu++23"
$gxx $cppflags $cxxflags ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader || exit 1
# Doxygen outputs something like "\fC#include <unique_lock\&.h>\fP" and
# we want that internal header to be replaced with something like <mutex>.
-problematic=`egrep -l '#include <.*h>' [a-z]*.3`
+problematic=`grep -E -l '#include <.*h>' [a-z]*.3`
for f in $problematic; do
# this is also slow, but safe and easy to debug
oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f`
@@ -303,7 +303,7 @@ rm stdheader
# Some of the pages for generated modules have text that confuses certain
# implementations of man(1), e.g. on GNU/Linux. We need to have another
# top-level *roff tag to /stop/ the .SH NAME entry.
-problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3`
+problematic=`grep -E --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3`
#problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3'
for f in $problematic; do
diff --git a/libstdc++-v3/src/c++17/fs_dir.cc b/libstdc++-v3/src/c++17/fs_dir.cc
index c67fe76..2258399 100644
--- a/libstdc++-v3/src/c++17/fs_dir.cc
+++ b/libstdc++-v3/src/c++17/fs_dir.cc
@@ -46,9 +46,9 @@ struct fs::_Dir : _Dir_base
{
_Dir(const fs::path& p, bool skip_permission_denied, bool nofollow,
[[maybe_unused]] bool filename_only, error_code& ec)
- : _Dir_base(fdcwd(), p.c_str(), skip_permission_denied, nofollow, ec)
+ : _Dir_base(p.c_str(), skip_permission_denied, nofollow, ec)
{
-#if _GLIBCXX_HAVE_DIRFD
+#if _GLIBCXX_HAVE_DIRFD && _GLIBCXX_HAVE_OPENAT && _GLIBCXX_HAVE_UNLINKAT
if (filename_only)
return; // Do not store path p when we aren't going to use it.
#endif
@@ -117,18 +117,19 @@ struct fs::_Dir : _Dir_base
return false;
}
- // Return a file descriptor for the directory and current entry's path.
- // If dirfd is available, use it and return only the filename.
- // Otherwise, return AT_FDCWD and return the full path.
- pair<int, const posix::char_type*>
- dir_and_pathname() const noexcept
+ // Return a pathname for the current directory entry, as an _At_path.
+ _Dir_base::_At_path
+ current() const noexcept
{
const fs::path& p = entry.path();
#if _GLIBCXX_HAVE_DIRFD
- if (!p.empty())
- return {::dirfd(this->dirp), std::prev(p.end())->c_str()};
+ if (!p.empty()) [[__likely__]]
+ {
+ auto len = std::prev(p.end())->native().size();
+ return {::dirfd(this->dirp), p.c_str(), p.native().size() - len};
+ }
#endif
- return {this->fdcwd(), p.c_str()};
+ return p.c_str();
}
// Create a new _Dir for the directory this->entry.path().
@@ -136,8 +137,7 @@ struct fs::_Dir : _Dir_base
open_subdir(bool skip_permission_denied, bool nofollow,
error_code& ec) const noexcept
{
- auto [dirfd, pathname] = dir_and_pathname();
- _Dir_base d(dirfd, pathname, skip_permission_denied, nofollow, ec);
+ _Dir_base d(current(), skip_permission_denied, nofollow, ec);
// If this->path is empty, the new _Dir should have an empty path too.
const fs::path& p = this->path.empty() ? this->path : this->entry.path();
return _Dir(std::move(d), p);
@@ -147,8 +147,9 @@ struct fs::_Dir : _Dir_base
do_unlink(bool is_directory, error_code& ec) const noexcept
{
#if _GLIBCXX_HAVE_UNLINKAT
- auto [dirfd, pathname] = dir_and_pathname();
- if (::unlinkat(dirfd, pathname, is_directory ? AT_REMOVEDIR : 0) == -1)
+ const auto atp = current();
+ if (::unlinkat(atp.dir(), atp.path_at_dir(),
+ is_directory ? AT_REMOVEDIR : 0) == -1)
{
ec.assign(errno, std::generic_category());
return false;
diff --git a/libstdc++-v3/src/c++17/fs_ops.cc b/libstdc++-v3/src/c++17/fs_ops.cc
index 435368f..ed5e9f7 100644
--- a/libstdc++-v3/src/c++17/fs_ops.cc
+++ b/libstdc++-v3/src/c++17/fs_ops.cc
@@ -1571,25 +1571,37 @@ fs::path
fs::temp_directory_path()
{
error_code ec;
- path tmp = temp_directory_path(ec);
+ path p = fs::get_temp_directory_from_env(ec);
+ if (!ec)
+ {
+ auto st = status(p, ec);
+ if (!ec && !is_directory(st))
+ ec = std::make_error_code(std::errc::not_a_directory);
+ }
if (ec)
- _GLIBCXX_THROW_OR_ABORT(filesystem_error("temp_directory_path", ec));
- return tmp;
+ {
+ if (p.empty())
+ _GLIBCXX_THROW_OR_ABORT(filesystem_error("temp_directory_path", ec));
+ else
+ _GLIBCXX_THROW_OR_ABORT(filesystem_error("temp_directory_path", p, ec));
+ }
+ return p;
}
fs::path
fs::temp_directory_path(error_code& ec)
{
path p = fs::get_temp_directory_from_env(ec);
- if (ec)
- return p;
- auto st = status(p, ec);
- if (ec)
- p.clear();
- else if (!is_directory(st))
+ if (!ec)
{
- p.clear();
- ec = std::make_error_code(std::errc::not_a_directory);
+ auto st = status(p, ec);
+ if (ec)
+ p.clear();
+ else if (!is_directory(st))
+ {
+ p.clear();
+ ec = std::make_error_code(std::errc::not_a_directory);
+ }
}
return p;
}
diff --git a/libstdc++-v3/src/filesystem/dir-common.h b/libstdc++-v3/src/filesystem/dir-common.h
index 365fd52..228fab5 100644
--- a/libstdc++-v3/src/filesystem/dir-common.h
+++ b/libstdc++-v3/src/filesystem/dir-common.h
@@ -25,6 +25,7 @@
#ifndef _GLIBCXX_DIR_COMMON_H
#define _GLIBCXX_DIR_COMMON_H 1
+#include <stdint.h> // uint32_t
#include <string.h> // strcmp
#include <errno.h>
#if _GLIBCXX_FILESYSTEM_IS_WINDOWS
@@ -91,12 +92,54 @@ is_permission_denied_error(int e)
struct _Dir_base
{
+ // As well as the full pathname (including the directory iterator's path)
+ // this type contains a file descriptor for a directory and a second pathname
+ // relative to that directory. The file descriptor and relative pathname
+ // can be used with POSIX openat and unlinkat.
+ struct _At_path
+ {
+ // No file descriptor given, so interpret the pathname relative to the CWD.
+ _At_path(const posix::char_type* p) noexcept
+ : pathname(p), dir_fd(fdcwd()), offset(0)
+ { }
+
+ _At_path(int fd, const posix::char_type* p, size_t offset) noexcept
+ : pathname(p), dir_fd(fd), offset(offset)
+ { }
+
+ const posix::char_type*
+ path() const noexcept { return pathname; }
+
+ int
+ dir() const noexcept { return dir_fd; }
+
+ const posix::char_type*
+ path_at_dir() const noexcept { return pathname + offset; }
+
+ private:
+ const posix::char_type* pathname; // Full path relative to CWD.
+ int dir_fd; // A directory descriptor (either the parent dir, or AT_FDCWD).
+ uint32_t offset; // Offset into pathname for the part relative to dir_fd.
+
+ // Special value representing the current working directory.
+ // Not a valid file descriptor for an open directory stream.
+ static constexpr int
+ fdcwd() noexcept
+ {
+#ifdef AT_FDCWD
+ return AT_FDCWD;
+#else
+ return -1; // Use invalid fd if AT_FDCWD isn't supported.
+#endif
+ }
+ };
+
// If no error occurs then dirp is non-null,
// otherwise null (even if a permission denied error is ignored).
- _Dir_base(int fd, const posix::char_type* pathname,
+ _Dir_base(const _At_path& atp,
bool skip_permission_denied, bool nofollow,
error_code& ec) noexcept
- : dirp(_Dir_base::openat(fd, pathname, nofollow))
+ : dirp(_Dir_base::openat(atp, nofollow))
{
if (dirp)
ec.clear();
@@ -143,16 +186,6 @@ struct _Dir_base
}
}
- static constexpr int
- fdcwd() noexcept
- {
-#ifdef AT_FDCWD
- return AT_FDCWD;
-#else
- return -1; // Use invalid fd if AT_FDCWD isn't supported.
-#endif
- }
-
static bool is_dot_or_dotdot(const char* s) noexcept
{ return !strcmp(s, ".") || !strcmp(s, ".."); }
@@ -174,7 +207,7 @@ struct _Dir_base
}
static posix::DIR*
- openat(int fd, const posix::char_type* pathname, bool nofollow)
+ openat(const _At_path& atp, bool nofollow)
{
#if _GLIBCXX_HAVE_FDOPENDIR && defined O_RDONLY && defined O_DIRECTORY \
&& ! _GLIBCXX_FILESYSTEM_IS_WINDOWS
@@ -198,16 +231,17 @@ struct _Dir_base
nofollow = false;
#endif
+ int fd;
-#ifdef AT_FDCWD
- fd = ::openat(fd, pathname, flags);
+#if _GLIBCXX_HAVE_OPENAT
+ fd = ::openat(atp.dir(), atp.path_at_dir(), flags);
#else
// If we cannot use openat, there's no benefit to using posix::open unless
// we will use O_NOFOLLOW, so just use the simpler posix::opendir.
if (!nofollow)
- return posix::opendir(pathname);
+ return posix::opendir(atp.path());
- fd = ::open(pathname, flags);
+ fd = ::open(atp.path(), flags);
#endif
if (fd == -1)
@@ -220,7 +254,7 @@ struct _Dir_base
errno = err;
return nullptr;
#else
- return posix::opendir(pathname);
+ return posix::opendir(atp.path());
#endif
}
diff --git a/libstdc++-v3/src/filesystem/dir.cc b/libstdc++-v3/src/filesystem/dir.cc
index b451902..a66a677 100644
--- a/libstdc++-v3/src/filesystem/dir.cc
+++ b/libstdc++-v3/src/filesystem/dir.cc
@@ -53,7 +53,7 @@ struct fs::_Dir : std::filesystem::_Dir_base
{
_Dir(const fs::path& p, bool skip_permission_denied, bool nofollow,
error_code& ec)
- : _Dir_base(this->fdcwd(), p.c_str(), skip_permission_denied, nofollow, ec)
+ : _Dir_base(p.c_str(), skip_permission_denied, nofollow, ec)
{
if (!ec)
path = p;
@@ -113,17 +113,17 @@ struct fs::_Dir : std::filesystem::_Dir_base
return false;
}
- // Return a file descriptor for the directory and current entry's path.
- // If dirfd is available, use it and return only the filename.
- // Otherwise, return AT_FDCWD and return the full path.
- pair<int, const posix::char_type*>
- dir_and_pathname() const noexcept
+ // Return a pathname for the current directory entry, as an _At_path.
+ _Dir_base::_At_path
+ current() const noexcept
{
const fs::path& p = entry.path();
#if _GLIBCXX_HAVE_DIRFD
- return {::dirfd(this->dirp), std::prev(p.end())->c_str()};
+ auto len = std::prev(p.end())->native().size();
+ return {::dirfd(this->dirp), p.c_str(), p.native().size() - len};
+#else
+ return p.c_str();
#endif
- return {this->fdcwd(), p.c_str()};
}
// Create a new _Dir for the directory this->entry.path().
@@ -131,8 +131,7 @@ struct fs::_Dir : std::filesystem::_Dir_base
open_subdir(bool skip_permission_denied, bool nofollow,
error_code& ec) noexcept
{
- auto [dirfd, pathname] = dir_and_pathname();
- _Dir_base d(dirfd, pathname, skip_permission_denied, nofollow, ec);
+ _Dir_base d(current(), skip_permission_denied, nofollow, ec);
return _Dir(std::move(d), entry.path());
}
diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc
index 98ddff5..ab84eb8 100644
--- a/libstdc++-v3/src/filesystem/ops.cc
+++ b/libstdc++-v3/src/filesystem/ops.cc
@@ -1176,13 +1176,43 @@ fs::space(const path& p, error_code& ec) noexcept
return info;
}
+#if _GLIBCXX_FILESYSTEM_IS_WINDOWS
+static bool has_trailing_slash(const fs::path& p)
+{
+ wchar_t c = p.native().back();
+ return c == '/' || c == L'\\';
+}
+#endif
+
#ifdef _GLIBCXX_HAVE_SYS_STAT_H
fs::file_status
fs::status(const fs::path& p, error_code& ec) noexcept
{
file_status status;
+
+ auto str = p.c_str();
+
+#if _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ // stat() fails if there's a trailing slash (PR 88881)
+ path p2;
+ if (p.has_relative_path() && has_trailing_slash(p))
+ {
+ __try
+ {
+ p2 = p.parent_path();
+ str = p2.c_str();
+ }
+ __catch(const bad_alloc&)
+ {
+ ec = std::make_error_code(std::errc::not_enough_memory);
+ return status;
+ }
+ str = p2.c_str();
+ }
+#endif
+
stat_type st;
- if (posix::stat(p.c_str(), &st))
+ if (posix::stat(str, &st))
{
int err = errno;
ec.assign(err, std::generic_category());
@@ -1205,8 +1235,30 @@ fs::file_status
fs::symlink_status(const fs::path& p, std::error_code& ec) noexcept
{
file_status status;
+
+ auto str = p.c_str();
+
+#if _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ // stat() fails if there's a trailing slash (PR 88881)
+ path p2;
+ if (p.has_relative_path() && has_trailing_slash(p))
+ {
+ __try
+ {
+ p2 = p.parent_path();
+ str = p2.c_str();
+ }
+ __catch(const bad_alloc&)
+ {
+ ec = std::make_error_code(std::errc::not_enough_memory);
+ return status;
+ }
+ str = p2.c_str();
+ }
+#endif
+
stat_type st;
- if (posix::lstat(p.c_str(), &st))
+ if (posix::lstat(str, &st))
{
int err = errno;
ec.assign(err, std::generic_category());
@@ -1274,25 +1326,32 @@ fs::path
fs::temp_directory_path()
{
error_code ec;
- path tmp = temp_directory_path(ec);
- if (ec.value())
- _GLIBCXX_THROW_OR_ABORT(filesystem_error("temp_directory_path", ec));
- return tmp;
+ path p = fs::get_temp_directory_from_env(ec);
+ if (!ec)
+ {
+ auto st = status(p, ec);
+ if (!ec && !is_directory(st))
+ ec = std::make_error_code(std::errc::not_a_directory);
+ }
+ if (ec)
+ _GLIBCXX_THROW_OR_ABORT(filesystem_error("temp_directory_path", p, ec));
+ return p;
}
fs::path
fs::temp_directory_path(error_code& ec)
{
path p = fs::get_temp_directory_from_env(ec);
- if (ec)
- return p;
- auto st = status(p, ec);
- if (ec)
- p.clear();
- else if (!is_directory(st))
+ if (!ec)
{
- p.clear();
- ec = std::make_error_code(std::errc::not_a_directory);
+ auto st = status(p, ec);
+ if (ec)
+ p.clear();
+ else if (!is_directory(st))
+ {
+ p.clear();
+ ec = std::make_error_code(std::errc::not_a_directory);
+ }
}
return p;
}
diff --git a/libstdc++-v3/testsuite/20_util/from_chars/4.cc b/libstdc++-v3/testsuite/20_util/from_chars/4.cc
index dcd9f97..c27df4f 100644
--- a/libstdc++-v3/testsuite/20_util/from_chars/4.cc
+++ b/libstdc++-v3/testsuite/20_util/from_chars/4.cc
@@ -300,9 +300,11 @@ test_max_mantissa()
if (Float_limits::is_iec559 && Float_limits::digits < UInt_limits::digits)
{
+#ifdef _GLIBCXX_USE_C99_MATH_TR1
std::printf("Testing %d-bit float, using %zu-bit integer\n",
Float_limits::digits + (int)std::log2(Float_limits::max_exponent) + 1,
sizeof(UIntT) * __CHAR_BIT__);
+#endif
std::from_chars_result res;
FloatT flt;
diff --git a/libstdc++-v3/testsuite/20_util/to_chars/long_double.cc b/libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
index 94b5b59..4983881 100644
--- a/libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
+++ b/libstdc++-v3/testsuite/20_util/to_chars/long_double.cc
@@ -36,6 +36,7 @@
// { dg-require-effective-target ieee_floats }
// { dg-require-effective-target size32plus }
+// { dg-require-cmath "" }
#include <charconv>
@@ -53,11 +54,11 @@ namespace detail
{
long double
nextupl(long double x)
- { return nexttowardl(x, numeric_limits<long double>::infinity()); }
+ { return nexttoward(x, numeric_limits<long double>::infinity()); }
long double
nextdownl(long double x)
- { return nexttowardl(x, -numeric_limits<long double>::infinity()); }
+ { return nexttoward(x, -numeric_limits<long double>::infinity()); }
}
// The long double overloads of std::to_chars currently just go through printf
@@ -137,7 +138,7 @@ test01()
for (int exponent : {-11000, -3000, -300, -50, -7, 0, 7, 50, 300, 3000, 11000})
for (long double testcase : hex_testcases)
{
- testcase = ldexpl(testcase, exponent);
+ testcase = ldexp(testcase, exponent);
if (testcase == 0.0L || isinf(testcase))
continue;
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/105995.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/105995.cc
index aa8bcba..4764cef 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/105995.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/105995.cc
@@ -2,6 +2,8 @@
// { dg-do compile { target c++20 } }
// { dg-require-effective-target cxx11_abi }
+#include <string>
+
// PR libstdc++/105995
// Not required by the standard, but supported for QoI.
constexpr std::string pr105995_empty;
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc b/libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
index 4b79c9f..2371bef 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset/cons/dr1325-2.cc
@@ -39,6 +39,7 @@ template<std::size_t Nb, typename CharT>
void test01()
{
using namespace std;
+ using std::bitset; // Work around struct ::bitset on rtems.
const char s1[4] = { '0', '1', '0', '1' };
VERIFY( bitset<4>(s1, 4) == test01_ref<4>(s1, 4) );
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc b/libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc
index 40cb949..3924700 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset/ext/15361.cc
@@ -22,6 +22,7 @@
void test01()
{
using namespace std;
+ using std::bitset; // Work around struct ::bitset on rtems.
bitset<256> b;
b.set(225);
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/input/1.cc b/libstdc++-v3/testsuite/23_containers/bitset/input/1.cc
index 8738c77..939861b 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset/input/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset/input/1.cc
@@ -26,6 +26,7 @@
void test01()
{
using namespace std;
+ using std::bitset; // Work around struct ::bitset on rtems.
bitset<5> b5;
bitset<0> b0;
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc b/libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc
index f4af913..8384eb9 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset/to_string/1.cc
@@ -25,6 +25,7 @@
void test01()
{
using namespace std;
+ using std::bitset; // Work around struct ::bitset on rtems.
bitset<5> b5;
string s0 = b5.to_string<char, char_traits<char>, allocator<char> >();
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc b/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc
index 8faded3..dfba27e 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset/to_string/dr396.cc
@@ -26,6 +26,7 @@
void test01()
{
using namespace std;
+ using std::bitset; // Work around struct ::bitset on rtems.
bitset<5> b5;
string s0 = b5.to_string<char, char_traits<char>, allocator<char> >('a', 'b');
diff --git a/libstdc++-v3/testsuite/26_numerics/complex/proj.cc b/libstdc++-v3/testsuite/26_numerics/complex/proj.cc
index a053119..69f8153 100644
--- a/libstdc++-v3/testsuite/26_numerics/complex/proj.cc
+++ b/libstdc++-v3/testsuite/26_numerics/complex/proj.cc
@@ -397,6 +397,19 @@ test03()
int
main()
{
+ /* If neither of these macros is nonzero, proj calls a
+ specialization of the __complex_proj template, that just returns
+ its argument, without testing for infinities, rendering the whole
+ test pointless, and failing (as intended/noted in the
+ implementation) the cases that involve infinities. Alas, the
+ normal ways to skip tests may not work: we don't have a test for
+ C99_COMPLEX, and these macros may vary depending on -std=*, but
+ macro tests wouldn't take them into account. */
+#if ! (_GLIBCXX_USE_C99_COMPLEX || _GLIBCXX_USE_C99_MATH_TR1)
+ if (true)
+ return 0;
+#endif
+
test01();
test02();
test03();
diff --git a/libstdc++-v3/testsuite/26_numerics/random/random_device/entropy.cc b/libstdc++-v3/testsuite/26_numerics/random/random_device/entropy.cc
index 63b7043..9f529f5 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/random_device/entropy.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/random_device/entropy.cc
@@ -1,6 +1,7 @@
// { dg-do run { target c++11 } }
#include <random>
+#include <limits>
#include <testsuite_hooks.h>
#include <testsuite_random.h>
@@ -12,7 +13,7 @@ test01()
VERIFY( std::random_device(token).entropy() == 0.0 );
using result_type = std::random_device::result_type;
- const double max = std::log2(std::numeric_limits<result_type>::max() + 1.0);
+ const double max = std::numeric_limits<result_type>::digits;
for (auto token : { "/dev/random", "/dev/urandom" })
if (__gnu_test::random_device_available(token))
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc b/libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc
index 1c8ea4c..a26b29f 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc
@@ -107,7 +107,7 @@ void
test02()
{
namespace fs = std::filesystem;
- auto dir = __gnu_test::nonexistent_path();
+ const auto dir = __gnu_test::nonexistent_path();
fs::create_directories(dir/"subdir");
std::error_code ec;
@@ -137,7 +137,12 @@ test02()
}
#endif
- fs::remove_all(dir, ec);
+ // Cannot use fs::remove_all here because that uses
+ // recursive_directory_iterator which would use the fake readdir above.
+#ifndef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ ::rmdir((dir/"subdir").c_str());
+ ::rmdir(dir.c_str());
+#endif
}
int
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc b/libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc
index e67e2cf..e2f3613 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/iterators/recursive_directory_iterator.cc
@@ -187,7 +187,7 @@ test05()
void
test06()
{
-#if !(defined __MINGW32__ || defined __MINGW64__)
+#ifndef NO_SYMLINKS
auto p = __gnu_test::nonexistent_path();
create_directories(p/"d1/d2");
create_directory_symlink("d1", p/"link");
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
index 236e1b2..295b755 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/absolute.cc
@@ -84,7 +84,7 @@ test03()
VERIFY( eabs.empty() );
try {
- absolute(path{});
+ (void) absolute(path{});
VERIFY( false );
} catch (const std::filesystem::filesystem_error& e) {
VERIFY( e.code() == std::errc::invalid_argument );
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
index d5d6c87..3c8ab78 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/all.cc
@@ -42,11 +42,11 @@ main()
bool b [[maybe_unused]];
std::uintmax_t size;
- std::filesystem::absolute(p);
- std::filesystem::absolute(p, ec);
+ p2 = std::filesystem::absolute(p);
+ p2 = std::filesystem::absolute(p, ec);
- std::filesystem::canonical(p);
- std::filesystem::canonical(p, ec);
+ p2 = std::filesystem::canonical(p);
+ p2 = std::filesystem::canonical(p, ec);
std::filesystem::copy(p, p);
std::filesystem::copy(p, p, ec);
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
index bc7ef0d..cb916a6 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/canonical.cc
@@ -31,7 +31,7 @@ test01()
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
std::error_code ec;
auto p = __gnu_test::nonexistent_path();
- canonical( p, ec );
+ (void) canonical( p, ec );
VERIFY( ec );
create_directory(p);
@@ -90,7 +90,7 @@ test02()
#if __cpp_exceptions
fs::path e1, e2;
try {
- canonical(p);
+ (void) canonical(p);
} catch (const fs::filesystem_error& e) {
e1 = e.path1();
e2 = e.path2();
@@ -111,10 +111,13 @@ test03()
fs::path foo = dir/"foo", bar = dir/"bar";
fs::create_directory(foo);
fs::create_directory(bar);
+#ifdef NO_SYMLINKS
#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
const fs::path baz = dir/"foo\\\\..\\bar///";
#else
+ const fs::path baz = dir/"foo//../bar///";
+#endif
+#else
fs::create_symlink("../bar", foo/"baz");
const fs::path baz = dir/"foo//./baz///";
#endif
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
index b936e04..f9fb4df 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
@@ -66,14 +66,9 @@ test01()
void
test02()
{
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
- return;
-#endif
-
+#ifndef NO_SYMLINKS
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
auto from = __gnu_test::nonexistent_path();
- auto to = __gnu_test::nonexistent_path();
std::error_code ec;
ec = bad_ec;
@@ -81,6 +76,7 @@ test02()
VERIFY( !ec );
VERIFY( fs::exists(from) );
+ auto to = __gnu_test::nonexistent_path();
ec = bad_ec;
fs::copy(from, to, fs::copy_options::skip_symlinks, ec);
VERIFY( !ec );
@@ -110,6 +106,7 @@ test02()
remove(from, ec);
remove(to, ec);
+#endif
}
// Test is_regular_file(f) case.
@@ -117,12 +114,13 @@ void
test03()
{
auto from = __gnu_test::nonexistent_path();
- auto to = __gnu_test::nonexistent_path();
// test empty file
std::ofstream{from};
VERIFY( fs::exists(from) );
VERIFY( fs::file_size(from) == 0 );
+
+ auto to = __gnu_test::nonexistent_path();
fs::copy(from, to);
VERIFY( fs::exists(to) );
VERIFY( fs::file_size(to) == 0 );
@@ -145,11 +143,11 @@ test04()
{
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
auto from = __gnu_test::nonexistent_path();
- auto to = __gnu_test::nonexistent_path();
std::error_code ec;
create_directories(from/"a/b/c");
+ auto to = __gnu_test::nonexistent_path();
{
__gnu_test::scoped_file f(to);
copy(from, to, ec);
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
index 4a7ba1f..2b48c15 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
@@ -148,9 +148,7 @@ test03()
void
test04()
{
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // no symlinks
-#else
+#ifndef NO_SYMLINKS
// PR libstdc++/101510
// create_directories reports an error if the path is a symlink to a dir
std::error_code ec = make_error_code(std::errc::invalid_argument);
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
index 90f9830..aa59f7f 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
@@ -70,9 +70,7 @@ test01()
VERIFY( e.path1() == f );
}
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // no symlinks
-#else
+#ifndef NO_SYMLINKS
// PR libstdc++/101510 create_directory on an existing symlink to a directory
fs::create_directory(p/"dir");
auto link = p/"link";
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc
index b306356..f995697 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/exists.cc
@@ -95,7 +95,7 @@ test04()
ec.clear();
try
{
- exists(unr);
+ (void) exists(unr);
}
catch(const std::filesystem::filesystem_error& ex)
{
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
index 23246a4..d1dfd9f 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
@@ -40,7 +40,7 @@ test01()
VERIFY( !result );
try {
- fs::is_empty(p);
+ (void) fs::is_empty(p);
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
}
@@ -51,7 +51,7 @@ test01()
VERIFY( !result );
try {
- fs::is_empty(p/"f");
+ (void) fs::is_empty(p/"f");
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
}
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
index 7d6468a..f6460fb 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
@@ -17,6 +17,7 @@
// { dg-do run { target c++17 } }
// { dg-require-filesystem-ts "" }
+// { dg-require-target-fs-lwt "" }
// 15.25 Permissions [fs.op.last_write_time]
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
index deed759..ee5afd5 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
@@ -76,6 +76,7 @@ test02()
void
test03()
{
+#ifndef NO_SYMLINKS
using std::filesystem::perms;
using std::filesystem::perm_options;
@@ -111,11 +112,13 @@ test03()
VERIFY( !caught );
remove(p);
+#endif
}
void
test04()
{
+#ifndef NO_SYMLINKS
using perms = std::filesystem::perms;
auto p = __gnu_test::nonexistent_path();
@@ -137,6 +140,7 @@ test04()
VERIFY( ec == ec2 );
remove(p);
+#endif
}
void
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
index 68bbab3..28be8cc 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
@@ -17,7 +17,7 @@
// { dg-do run { target c++17 } }
// { dg-require-filesystem-ts "" }
-// { dg-xfail-if "symlinks not supported" { *-*-mingw* } }
+// { dg-require-target-fs-symlinks "" }
#include <filesystem>
#include <testsuite_hooks.h>
@@ -31,7 +31,7 @@ test01()
auto p = __gnu_test::nonexistent_path();
std::error_code ec;
- read_symlink(p, ec);
+ (void) read_symlink(p, ec);
VERIFY( ec );
fs::path tgt = ".";
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
index 26f2d54..f769723 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/remove.cc
@@ -41,9 +41,7 @@ test01()
VERIFY( !ec );
VERIFY( !n );
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
-#else
+#ifndef NO_SYMLINKS
auto link = __gnu_test::nonexistent_path();
create_symlink(p, link); // dangling symlink
ec = bad_ec;
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
index 943d85c..d5266a4 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/remove_all.cc
@@ -41,9 +41,7 @@ test01()
VERIFY( !ec );
VERIFY( n == 0 );
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
-#else
+#ifndef NO_SYMLINKS
auto link = __gnu_test::nonexistent_path();
create_symlink(p, link); // dangling symlink
ec = bad_ec;
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
index f23a286..983374f 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
@@ -17,6 +17,7 @@
// { dg-do run { target c++17 } }
// { dg-require-filesystem-ts "" }
+// { dg-xfail-run-if "rename is not POSIX-compliant" { *-*-rtems* } }
#include <filesystem>
#include <testsuite_hooks.h>
@@ -75,9 +76,7 @@ test01()
void
test_symlinks()
{
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
-#else
+#ifndef NO_SYMLINKS
std::error_code ec;
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
index 05997ca..daa1ce4 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
@@ -17,6 +17,7 @@
// { dg-do run { target c++17 } }
// { dg-require-filesystem-ts "" }
+// { dg-require-target-fs-space "" }
// 30.10.14.3 Permissions [fs.op.space]
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
index f2d2582..c43ba29 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
@@ -74,7 +74,7 @@ test03()
std::error_code ec2;
fs::path p, p2;
try {
- fs::symlink_status(f.path);
+ (void) fs::symlink_status(f.path);
} catch (const fs::filesystem_error& e) {
caught = true;
p = e.path1();
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
index ef973b7..c8fa5c0 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
@@ -17,7 +17,6 @@
// { dg-do run { target c++17 } }
// { dg-require-filesystem-ts "" }
-// { dg-xfail-if "symlinks not supported" { *-*-mingw* } }
#include <filesystem>
#include <testsuite_hooks.h>
@@ -39,6 +38,7 @@ test01()
fs::file_status st2 = fs::symlink_status(dot);
VERIFY( st2.type() == fs::file_type::directory );
+#ifndef NO_SYMLINKS
fs::path link = __gnu_test::nonexistent_path();
create_directory_symlink(dot, link);
__gnu_test::scoped_file l(link, __gnu_test::scoped_file::adopt_file);
@@ -49,6 +49,7 @@ test01()
st2 = fs::symlink_status(link, ec);
VERIFY( !ec );
VERIFY( st2.type() == fs::file_type::symlink );
+#endif
}
void
@@ -68,6 +69,7 @@ test02()
void
test03()
{
+#ifndef NO_SYMLINKS
if (!__gnu_test::permissions_are_testable())
return;
@@ -94,7 +96,7 @@ test03()
std::error_code ec2;
fs::path p, p2;
try {
- fs::symlink_status(f.path);
+ (void) fs::symlink_status(f.path);
} catch (const fs::filesystem_error& e) {
caught = true;
p = e.path1();
@@ -111,6 +113,7 @@ test03()
VERIFY( st2.type() == fs::file_type::symlink );
fs::permissions(dir, fs::perms::owner_all, ec);
+#endif
}
void
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
index b4ef77f..09d97c5 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
@@ -117,7 +117,7 @@ test03()
std::error_code ec2;
try {
- fs::temp_directory_path();
+ (void) fs::temp_directory_path();
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
}
@@ -140,12 +140,17 @@ test04()
VERIFY( r == fs::path() );
std::error_code ec2;
+ std::string failed_path;
try {
- fs::temp_directory_path();
+ (void) fs::temp_directory_path();
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
+ // On Windows the returned path will be in preferred form, i.e. using L'\\'
+ // and will have a trailing slash, so compare generic forms.
+ failed_path = e.path1().generic_string();
}
VERIFY( ec2 == ec );
+ VERIFY( failed_path.find(f.path.generic_string()) != std::string::npos );
}
int
diff --git a/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc b/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
index 244b753..ad164f5 100644
--- a/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
+++ b/libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
@@ -39,9 +39,7 @@ test01()
fs::create_directory(bar/"baz");
fs::path p;
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
-#else
+#ifndef NO_SYMLINKS
fs::create_symlink("../bar", foo/"bar");
p = fs::weakly_canonical(dir/"foo//./bar///../biz/.");
diff --git a/libstdc++-v3/testsuite/30_threads/this_thread/60421.cc b/libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
index ad6f9ae..12dbeba 100644
--- a/libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
+++ b/libstdc++-v3/testsuite/30_threads/this_thread/60421.cc
@@ -59,6 +59,7 @@ test02()
while (!sleeping)
{
// Wait for the thread to start sleeping.
+ sched_yield ();
}
while (sleeping)
{
diff --git a/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc b/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
index dca162b..3cef97e 100644
--- a/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
+++ b/libstdc++-v3/testsuite/30_threads/thread/native_handle/cancel.cc
@@ -30,7 +30,11 @@ void f(std::atomic<bool>& started)
{
started = true;
while (true)
- std::this_thread::sleep_for(std::chrono::milliseconds(100));
+ {
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
+ // In case the target system doesn't make sleep a cancellation point...
+ pthread_testcancel();
+ }
}
int main()
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc b/libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc
index 806c511..f005b7d 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/iterators/error_reporting.cc
@@ -99,7 +99,7 @@ void
test02()
{
namespace fs = std::experimental::filesystem;
- auto dir = __gnu_test::nonexistent_path();
+ const auto dir = __gnu_test::nonexistent_path();
fs::create_directories(dir/"subdir");
std::error_code ec;
@@ -129,7 +129,12 @@ test02()
}
#endif
- fs::remove_all(dir, ec);
+ // Cannot use fs::remove_all here because that depends on
+ // recursive_directory_iterator which would use the fake readdir above.
+#ifndef _GLIBCXX_FILESYSTEM_IS_WINDOWS
+ ::rmdir((dir/"subdir").c_str());
+ ::rmdir(dir.c_str());
+#endif
}
int
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc b/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc
index a201415..393fb31 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/iterators/recursive_directory_iterator.cc
@@ -188,7 +188,7 @@ test05()
void
test06()
{
-#if !(defined __MINGW32__ || defined __MINGW64__)
+#ifndef NO_SYMLINKS
auto p = __gnu_test::nonexistent_path();
create_directories(p/"d1/d2");
create_directory_symlink("d1", p/"link");
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc
index aef6725..92772db 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/canonical.cc
@@ -30,11 +30,11 @@ test01()
{
std::error_code ec;
auto p = __gnu_test::nonexistent_path();
- canonical( p, ec );
+ (void) canonical( p, ec );
VERIFY( ec );
p = fs::current_path();
- canonical( p, ec );
+ (void) canonical( p, ec );
VERIFY( !ec );
const auto root = fs::absolute("/");
@@ -67,7 +67,7 @@ test02()
fs::path p = "rel", base = __gnu_test::nonexistent_path();
fs::path e1, e2;
try {
- canonical(p, base);
+ (void) canonical(p, base);
} catch (const fs::filesystem_error& e) {
e1 = e.path1();
e2 = e.path2();
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc
index 5cd6b48..021897c 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/copy.cc
@@ -67,13 +67,8 @@ test01()
void
test02()
{
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
- return;
-#endif
-
+#ifndef NO_SYMLINKS
auto from = __gnu_test::nonexistent_path();
- auto to = __gnu_test::nonexistent_path();
std::error_code ec, bad = std::make_error_code(std::errc::invalid_argument);
ec = bad;
@@ -81,6 +76,7 @@ test02()
VERIFY( !ec );
VERIFY( fs::exists(from) );
+ auto to = __gnu_test::nonexistent_path();
ec = bad;
fs::copy(from, to, fs::copy_options::skip_symlinks, ec);
VERIFY( !ec );
@@ -109,6 +105,7 @@ test02()
remove(from, ec);
remove(to, ec);
+#endif
}
// Test is_regular_file(f) case.
@@ -116,12 +113,13 @@ void
test03()
{
auto from = __gnu_test::nonexistent_path();
- auto to = __gnu_test::nonexistent_path();
// test empty file
std::ofstream{from.c_str()};
VERIFY( fs::exists(from) );
VERIFY( fs::file_size(from) == 0 );
+
+ auto to = __gnu_test::nonexistent_path();
fs::copy(from, to);
VERIFY( fs::exists(to) );
VERIFY( fs::file_size(to) == 0 );
@@ -143,11 +141,11 @@ void
test04()
{
auto from = __gnu_test::nonexistent_path();
- auto to = __gnu_test::nonexistent_path();
std::error_code ec;
create_directories(from/"a/b/c");
+ auto to = __gnu_test::nonexistent_path();
{
__gnu_test::scoped_file f(to);
copy(from, to, ec);
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
index 03060c6..df27748 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directories.cc
@@ -147,9 +147,7 @@ test03()
void
test04()
{
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // no symlinks
-#else
+#ifndef NO_SYMLINKS
// PR libstdc++/101510
// create_directories reports an error if the path is a symlink to a dir
std::error_code ec = make_error_code(std::errc::invalid_argument);
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc
index 67e5fdd..5e9346d 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/create_directory.cc
@@ -69,9 +69,7 @@ test01()
VERIFY( e.path1() == f );
}
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // no symlinks
-#else
+#ifndef NO_SYMLINKS
// PR libstdc++/101510 create_directory on an existing symlink to a directory
fs::create_directory(p/"dir");
auto link = p/"link";
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc
index 5c274d0..271aff9 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/exists.cc
@@ -89,7 +89,7 @@ test04()
ec.clear();
try
{
- exists(unr);
+ (void) exists(unr);
}
catch(const std::experimental::filesystem::filesystem_error& ex)
{
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc
index 7472363..da21c8d 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/is_empty.cc
@@ -41,7 +41,7 @@ test01()
VERIFY( !result );
try {
- fs::is_empty(p);
+ (void) fs::is_empty(p);
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
}
@@ -52,7 +52,7 @@ test01()
VERIFY( !result );
try {
- fs::is_empty(p/"f");
+ (void) fs::is_empty(p/"f");
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
}
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc
index 38fafc3..a0bf01e 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/last_write_time.cc
@@ -18,6 +18,7 @@
// { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
// { dg-do run { target c++11 } }
// { dg-require-filesystem-ts "" }
+// { dg-require-target-fs-lwt "" }
// 15.25 Permissions [fs.op.last_write_time]
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc
index 833aa13..5866e33 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/permissions.cc
@@ -72,6 +72,7 @@ test02()
void
test03()
{
+#ifndef NO_SYMLINKS
using perms = std::experimental::filesystem::perms;
__gnu_test::scoped_file f;
@@ -95,11 +96,13 @@ test03()
VERIFY( ec == ec2 );
remove(p);
+#endif
}
void
test04()
{
+#ifndef NO_SYMLINKS
using perms = std::experimental::filesystem::perms;
auto p = __gnu_test::nonexistent_path();
@@ -120,6 +123,7 @@ test04()
VERIFY( ec == ec2 );
remove(p);
+#endif
}
void
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc
index 75dae3e..a29ceeb 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/read_symlink.cc
@@ -18,7 +18,7 @@
// { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
// { dg-do run { target c++11 } }
// { dg-require-filesystem-ts "" }
-// { dg-xfail-if "symlinks not supported" { *-*-mingw* } }
+// { dg-require-target-fs-symlinks "" }
#include <experimental/filesystem>
#include <testsuite_hooks.h>
@@ -32,7 +32,7 @@ test01()
auto p = __gnu_test::nonexistent_path();
std::error_code ec;
- read_symlink(p, ec);
+ (void) read_symlink(p, ec);
VERIFY( ec );
fs::path tgt = ".";
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc
index c01f140..4ffc740 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/remove.cc
@@ -42,10 +42,7 @@ test01()
VERIFY( !ec );
VERIFY( !n );
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
- return;
-#else
+#ifndef NO_SYMLINKS
auto link = __gnu_test::nonexistent_path();
create_symlink(p, link); // dangling symlink
ec = bad_ec;
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc
index 4b0ce85..11c07d4 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/remove_all.cc
@@ -42,9 +42,7 @@ test01()
VERIFY( !ec );
VERIFY( n == 0 );
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
-#else
+#ifndef NO_SYMLINKS
auto link = __gnu_test::nonexistent_path();
create_symlink(p, link); // dangling symlink
ec = bad_ec;
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc
index 46776e8..762b943 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/rename.cc
@@ -18,6 +18,7 @@
// { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
// { dg-do run { target c++11 } }
// { dg-require-filesystem-ts "" }
+// { dg-xfail-run-if "rename is not POSIX-compliant" { *-*-rtems* } }
#include <experimental/filesystem>
#include <testsuite_hooks.h>
@@ -75,9 +76,7 @@ test01()
void
test_symlinks()
{
-#if defined(__MINGW32__) || defined(__MINGW64__)
- // No symlink support
-#else
+#ifndef NO_SYMLINKS
std::error_code ec;
const std::error_code bad_ec = make_error_code(std::errc::invalid_argument);
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc
index 10ee0f0..c3745a2 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/space.cc
@@ -18,6 +18,7 @@
// { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
// { dg-do run { target c++11 } }
// { dg-require-filesystem-ts "" }
+// { dg-require-target-fs-space "" }
// 30.10.14.3 Permissions [fs.op.space]
diff --git a/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc b/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc
index 9e9cd44..d985f11 100644
--- a/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc
+++ b/libstdc++-v3/testsuite/experimental/filesystem/operations/temp_directory_path.cc
@@ -105,6 +105,8 @@ test03()
if (!__gnu_test::permissions_are_testable())
return;
+ clean_env();
+
auto p = __gnu_test::nonexistent_path();
create_directories(p/"tmp");
permissions(p, fs::perms::none);
@@ -116,7 +118,7 @@ test03()
std::error_code ec2;
try {
- fs::temp_directory_path();
+ (void) fs::temp_directory_path();
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
}
@@ -129,20 +131,27 @@ test03()
void
test04()
{
+ clean_env();
+
__gnu_test::scoped_file f;
- set_env("TMPDIR", f.path.string());
+ set_env("TMP", f.path.string());
std::error_code ec;
auto r = fs::temp_directory_path(ec);
VERIFY( ec == std::make_error_code(std::errc::not_a_directory) );
VERIFY( r == fs::path() );
std::error_code ec2;
+ std::string failed_path;
try {
- fs::temp_directory_path();
+ (void) fs::temp_directory_path();
} catch (const fs::filesystem_error& e) {
ec2 = e.code();
+ // On Windows the returned path will be in preferred form, i.e. using L'\\'
+ // and will have a trailing slash, so compare generic forms.
+ failed_path = e.path1().generic_string();
}
VERIFY( ec2 == ec );
+ VERIFY( failed_path.find(f.path.generic_string()) != std::string::npos );
}
int
diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
index eb411de..0ac9cb3 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/lookup.cc
@@ -18,6 +18,7 @@
// { dg-do run { target c++14 } }
// { dg-require-effective-target net_ts_ip }
// { dg-add-options net_ts }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
#include <experimental/internet>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
index 361df26..dfdf855 100644
--- a/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
+++ b/libstdc++-v3/testsuite/experimental/net/internet/resolver/ops/reverse.cc
@@ -18,6 +18,7 @@
// { dg-do run { target c++14 } }
// { dg-require-effective-target net_ts_ip }
// { dg-add-options net_ts }
+// { dg-xfail-run-if "io_context requires a working pipe" { *-*-rtems* } }
#include <experimental/internet>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
index f571f4a..384f768 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/dest.cc
@@ -17,6 +17,7 @@
// { dg-do run { target c++14 } }
// { dg-add-options libatomic }
+// { dg-xfail-if "poll not available" { *-*-rtems* } }
#include <experimental/timer>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
index 97ab629..815ad71 100644
--- a/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
+++ b/libstdc++-v3/testsuite/experimental/net/timer/waitable/ops.cc
@@ -17,6 +17,7 @@
// { dg-do run { target c++14 } }
// { dg-add-options libatomic }
+// { dg-xfail-if "poll not available" { *-*-rtems* } }
#include <experimental/timer>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc b/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc
index 4d7e672..1b686d9 100644
--- a/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc
+++ b/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc
@@ -1,5 +1,6 @@
// { dg-options "-std=c++17 -fno-fast-math" }
// { dg-do compile { target c++17 } }
+// { dg-require-cmath "" }
// Copyright (C) 2020-2022 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc b/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc
index a609ada..a0203d0 100644
--- a/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc
+++ b/libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=c++17 -ffast-math" }
// { dg-do compile }
+// { dg-require-cmath "" }
#include "standard_abi_usable.cc"
diff --git a/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc b/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
index 2d94ea3..99cbb0f 100644
--- a/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
+++ b/libstdc++-v3/testsuite/ext/mt_allocator/22309_thread.cc
@@ -22,6 +22,7 @@
#include <pthread.h>
#include <cstdlib>
#include <stdexcept>
+#include <string>
void
check_dlopen(void*& h)
diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp
index 203bb0d..cc312ed 100644
--- a/libstdc++-v3/testsuite/lib/dg-options.exp
+++ b/libstdc++-v3/testsuite/lib/dg-options.exp
@@ -241,6 +241,33 @@ proc dg-require-filesystem-ts { args } {
return
}
+proc dg-require-target-fs-symlinks { args } {
+ if { ![ check_v3_target_fs_symlinks ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
+proc dg-require-target-fs-space { args } {
+ if { ![ check_v3_target_fs_space ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
+proc dg-require-target-fs-lwt { args } {
+ if { ![ check_v3_target_fs_last_write_time ] } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ return
+ }
+ return
+}
+
proc add_options_for_no_pch { flags } {
# This forces any generated and possibly included PCH to be invalid.
return "-D__GLIBCXX__=99999999"
@@ -253,6 +280,8 @@ proc add_options_for_net_ts { flags } {
# libsocket and libnsl for networking applications.
if { [istarget *-*-solaris2*] } {
return "$flags -lsocket -lnsl"
+ } elseif { [istarget *-*-rtems*] } {
+ return "$flags -lbsd -Wl,--gc-sections"
}
return $flags
}
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 93fdfee..0338b50 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -974,13 +974,16 @@ proc v3_try_preprocess { name code flags } {
}
# Return 1 if COND evaluates to true in the preprocessor, 0 otherwise.
-# The <bits/c++config.h> config header is included.
-proc v3_check_preprocessor_condition { name cond } {
+# The <bits/c++config.h> config header is included, and INC, if given,
+# is pasted between it and the condition evaluation, so it can be used
+# for additional #include's.
+proc v3_check_preprocessor_condition { name cond { inc "" } } {
global cxxflags
global DEFAULT_CXXFLAGS
set code "
#include <bits/c++config.h>
+ $inc
#if ! ($cond)
#error '$cond' is false
#endif
@@ -1267,6 +1270,30 @@ proc check_v3_target_filesystem_ts { } {
}]
}
+# Return 1 if the libstdc++ filesystem create_symlinks implementation
+# is not an always-failing dummy.
+proc check_v3_target_fs_symlinks { } {
+ set inc "#include <testsuite_fs.h>"
+ set cond "!defined NO_SYMLINKS"
+ return [v3_check_preprocessor_condition fs_symlinks $cond $inc]
+}
+
+# Return 1 if the libstdc++ filesystem implementation of space is not an
+# always-failing dummy.
+proc check_v3_target_fs_space { } {
+ set inc "#include <testsuite_fs.h>"
+ set cond "!defined NO_SPACE"
+ return [v3_check_preprocessor_condition fs_space $cond $inc]
+}
+
+# Return 1 if the libstdc++ filesystem implementation of
+# last_write_time is not an always-failing dummy.
+proc check_v3_target_fs_last_write_time { } {
+ set inc "#include <testsuite_fs.h>"
+ set cond "!defined NO_LAST_WRITE_TIME"
+ return [v3_check_preprocessor_condition fs_last_write_time $cond $inc]
+}
+
# Return 1 if the "cxx11" ABI is in use using the current flags, 0 otherwise.
# Any flags provided by RUNTESTFLAGS or a target board will be used here.
# Flags added in the test by dg-options or dg-add-options will not be used.
diff --git a/libstdc++-v3/testsuite/util/testsuite_fs.h b/libstdc++-v3/testsuite/util/testsuite_fs.h
index 9358a04..0e28385 100644
--- a/libstdc++-v3/testsuite/util/testsuite_fs.h
+++ b/libstdc++-v3/testsuite/util/testsuite_fs.h
@@ -32,14 +32,28 @@ namespace test_fs = std::experimental::filesystem;
#endif
#include <algorithm>
#include <fstream>
+#include <random> // std::random_device
#include <string>
+#include <system_error>
#include <cstdio>
#include <unistd.h> // unlink, close, getpid, geteuid
#if defined(_GNU_SOURCE) || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
#include <stdlib.h> // mkstemp
-#else
-#include <random> // std::random_device
+#endif
+
+#ifndef _GLIBCXX_HAVE_SYMLINK
+#define NO_SYMLINKS
+#endif
+
+#if !defined (_GLIBCXX_HAVE_SYS_STATVFS_H) \
+ && !defined (_GLIBCXX_FILESYSTEM_IS_WINDOWS)
+#define NO_SPACE
+#endif
+
+#if !(_GLIBCXX_HAVE_SYS_STAT_H \
+ && (_GLIBCXX_USE_UTIMENSAT || _GLIBCXX_USE_UTIME))
+#define NO_LAST_WRITE_TIME 1
#endif
namespace __gnu_test
@@ -109,32 +123,52 @@ namespace __gnu_test
if (pos != file.npos)
file.erase(0, pos+1);
+ file.reserve(file.size() + 40);
+ file.insert(0, "filesystem-test.");
+
+ // A counter, starting from a random value, to be included as part
+ // of the filename being returned, and incremented each time
+ // this function is used. It allows us to ensure that two calls
+ // to this function can never return the same filename, something
+ // testcases do when they need multiple non-existent filenames
+ // for their purposes.
+ static unsigned counter = std::random_device{}();
+ file += '.';
+ file += std::to_string(counter++);
+ file += '.';
+
test_fs::path p;
#if defined(_GNU_SOURCE) || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
- char tmp[] = "filesystem-test.XXXXXX";
- int fd = ::mkstemp(tmp);
+
+ // Use mkstemp to determine the name of a file which does not exist yet.
+ //
+ // Note that we have seen on some systems (such as RTEMS, for instance)
+ // that mkstemp behaves very predictably, causing it to always try
+ // the same sequence of file names. In other words, if we call mkstemp
+ // with a pattern, delete the file it created (which is what we do, here),
+ // and call mkstemp with the same pattern again, it returns the same
+ // filename once more. While most implementations introduce a degree
+ // of randomness, it is not mandated by the standard, and this is why
+ // we also include a counter in the template passed to mkstemp.
+ file += "XXXXXX";
+ int fd = ::mkstemp(&file[0]);
if (fd == -1)
throw test_fs::filesystem_error("mkstemp failed",
std::error_code(errno, std::generic_category()));
- ::unlink(tmp);
+ ::unlink(file.c_str());
::close(fd);
- if (!file.empty())
- file.insert(0, 1, '-');
- file.insert(0, tmp);
- p = file;
+ p = std::move(file);
#else
if (file.length() > 64)
file.resize(64);
- char buf[128];
- static unsigned counter = std::random_device{}();
-#if _GLIBCXX_USE_C99_STDIO
- std::snprintf(buf, 128,
-#else
- std::sprintf(buf,
-#endif
- "filesystem-test.%u.%lu-%s", counter++, (unsigned long) ::getpid(),
- file.c_str());
- p = buf;
+ // The combination of random counter and PID should be unique for a given
+ // run of the testsuite. N.B. getpid() returns a pointer type on vxworks
+ // in kernel mode.
+ file += std::to_string((unsigned long) ::getpid());
+ p = std::move(file);
+ if (test_fs::exists(p))
+ throw test_fs::filesystem_error("Failed to generate unique pathname", p,
+ std::make_error_code(std::errc::file_exists));
#endif
return p;
}
diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog
index 7f88d49..16e44c8 100644
--- a/lto-plugin/ChangeLog
+++ b/lto-plugin/ChangeLog
@@ -1,3 +1,38 @@
+2022-07-07 Martin Liska <mliska@suse.cz>
+
+ PR lto/106170
+ * configure.ac: Configure HAVE_PTHREAD_LOCKING.
+ * lto-plugin.c (LOCK_SECTION): New.
+ (UNLOCK_SECTION): New.
+ (claim_file_handler): Use the newly added macros.
+ (onload): Likewise.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+
+2022-07-01 Pekka Seppänen <pexu@gcc.mail.kapsi.fi>
+
+ PR lto/106118
+ * configure.ac: Move -pthread from here...
+ * Makefile.am: ...to here.
+ * configure: Regenerate.
+ * Makefile.in: Likewise.
+
+2022-06-27 Martin Liska <mliska@suse.cz>
+
+ * lto-plugin.c (plugin_lock): New lock.
+ (claim_file_handler): Use mutex for critical section.
+ (onload): Initialize mutex.
+ * configure.ac: Check for pthread.h.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+
+2022-06-20 Martin Liska <mliska@suse.cz>
+
+ * lto-plugin.c (struct plugin_file_info): Add skip_file flag.
+ (write_resolution): Write resolution only if get_symbols != LDPS_NO_SYMS.
+ (all_symbols_read_handler): Ignore file if skip_file is true.
+ (onload): Handle LDPT_GET_SYMBOLS_V3.
+
2022-05-04 Martin Liska <mliska@suse.cz>
* lto-plugin.c (struct plugin_objfile): Use bool for offset
diff --git a/lto-plugin/Makefile.am b/lto-plugin/Makefile.am
index a96acc8..81362ea 100644
--- a/lto-plugin/Makefile.am
+++ b/lto-plugin/Makefile.am
@@ -9,7 +9,8 @@ libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(a
AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
-AM_LDFLAGS = @ac_lto_plugin_ldflags@
+# The plug-in depends on pthreads.
+AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
AM_LIBTOOLFLAGS = --tag=disable-static
override CFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(CFLAGS))
override LDFLAGS := $(filter-out -fsanitize=address -fsanitize=hwaddress,$(LDFLAGS))
diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in
index 5debcb2..2033dd9 100644
--- a/lto-plugin/Makefile.in
+++ b/lto-plugin/Makefile.in
@@ -344,7 +344,8 @@ gcc_version := $(shell @get_gcc_base_ver@ $(top_srcdir)/../gcc/BASE-VER)
libexecsubdir := $(libexecdir)/gcc/$(real_target_noncanonical)/$(gcc_version)$(accel_dir_suffix)
AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
AM_CFLAGS = @ac_lto_plugin_warn_cflags@ $(CET_HOST_FLAGS)
-AM_LDFLAGS = @ac_lto_plugin_ldflags@
+# The plug-in depends on pthreads.
+AM_LDFLAGS = -pthread @ac_lto_plugin_ldflags@
AM_LIBTOOLFLAGS = --tag=disable-static
libexecsub_LTLIBRARIES = liblto_plugin.la
in_gcc_libs = $(foreach lib, $(libexecsub_LTLIBRARIES), $(gcc_build_dir)/$(lib))
diff --git a/lto-plugin/config.h.in b/lto-plugin/config.h.in
index ddbde76..8eb9c8a 100644
--- a/lto-plugin/config.h.in
+++ b/lto-plugin/config.h.in
@@ -9,6 +9,9 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define if the system provides pthread locking mechanism. */
+#undef HAVE_PTHREAD_LOCKING
+
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
diff --git a/lto-plugin/configure b/lto-plugin/configure
index b820acc..870e49b 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6010,6 +6010,29 @@ else
fi
+# Check for thread headers.
+use_locking=no
+
+case $target in
+ riscv*)
+ # do not use locking as pthread depends on libatomic
+ ;;
+ *-linux*)
+ use_locking=yes
+ ;;
+esac
+
+if test x$use_locking = xyes; then
+ ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes; then :
+
+$as_echo "#define HAVE_PTHREAD_LOCKING 1" >>confdefs.h
+
+fi
+
+
+fi
+
case `pwd` in
*\ * | *\ *)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -12081,7 +12104,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12084 "configure"
+#line 12107 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12187,7 +12210,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12190 "configure"
+#line 12213 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
index bc5b618..18eb4f6 100644
--- a/lto-plugin/configure.ac
+++ b/lto-plugin/configure.ac
@@ -87,6 +87,23 @@ AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER, [test "x$lto_plugin_use_symver" != xno])
AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_GNU, [test "x$lto_plugin_use_symver" = xgnu])
AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun])
+# Check for thread headers.
+use_locking=no
+
+case $target in
+ riscv*)
+ # do not use locking as pthread depends on libatomic
+ ;;
+ *-linux*)
+ use_locking=yes
+ ;;
+esac
+
+if test x$use_locking = xyes; then
+ AC_CHECK_HEADER(pthread.h,
+ [AC_DEFINE(HAVE_PTHREAD_LOCKING, 1, [Define if the system provides pthread locking mechanism.])])
+fi
+
AM_PROG_LIBTOOL
ACX_LT_HOST_FLAGS
AC_SUBST(target_noncanonical)
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 4737843..7927dca 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -55,6 +55,9 @@ along with this program; see the file COPYING3. If not see
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
+#if HAVE_PTHREAD_LOCKING
+#include <pthread.h>
+#endif
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
@@ -136,6 +139,7 @@ struct plugin_file_info
void *handle;
struct plugin_symtab symtab;
struct plugin_symtab conflicts;
+ bool skip_file;
};
/* List item with name of the file with offloading. */
@@ -156,10 +160,21 @@ enum symbol_style
ss_uscore, /* Underscore prefix all symbols. */
};
+#if HAVE_PTHREAD_LOCKING
+/* Plug-in mutex. */
+static pthread_mutex_t plugin_lock;
+
+#define LOCK_SECTION pthread_mutex_lock (&plugin_lock)
+#define UNLOCK_SECTION pthread_mutex_unlock (&plugin_lock)
+#else
+#define LOCK_SECTION
+#define UNLOCK_SECTION
+#endif
+
static char *arguments_file_name;
static ld_plugin_register_claim_file register_claim_file;
static ld_plugin_register_all_symbols_read register_all_symbols_read;
-static ld_plugin_get_symbols get_symbols, get_symbols_v2;
+static ld_plugin_get_symbols get_symbols, get_symbols_v2, get_symbols_v3;
static ld_plugin_register_cleanup register_cleanup;
static ld_plugin_add_input_file add_input_file;
static ld_plugin_add_input_library add_input_library;
@@ -547,15 +562,13 @@ free_symtab (struct plugin_symtab *symtab)
static void
write_resolution (void)
{
- unsigned int i;
+ unsigned int i, included_files = 0;
FILE *f;
check (resolution_file, LDPL_FATAL, "resolution file not specified");
f = fopen (resolution_file, "w");
check (f, LDPL_FATAL, "could not open file");
- fprintf (f, "%d\n", num_claimed_files);
-
for (i = 0; i < num_claimed_files; i++)
{
struct plugin_file_info *info = &claimed_files[i];
@@ -563,13 +576,38 @@ write_resolution (void)
struct ld_plugin_symbol *syms = symtab->syms;
/* Version 2 of API supports IRONLY_EXP resolution that is
- accepted by GCC-4.7 and newer. */
- if (get_symbols_v2)
+ accepted by GCC-4.7 and newer.
+ Version 3 can return LDPS_NO_SYMS that means the object
+ will not be used at all. */
+ if (get_symbols_v3)
+ {
+ enum ld_plugin_status status
+ = get_symbols_v3 (info->handle, symtab->nsyms, syms);
+ if (status == LDPS_NO_SYMS)
+ {
+ info->skip_file = true;
+ continue;
+ }
+ }
+ else if (get_symbols_v2)
get_symbols_v2 (info->handle, symtab->nsyms, syms);
else
get_symbols (info->handle, symtab->nsyms, syms);
+ ++included_files;
+
finish_conflict_resolution (symtab, &info->conflicts);
+ }
+
+ fprintf (f, "%d\n", included_files);
+
+ for (i = 0; i < num_claimed_files; i++)
+ {
+ struct plugin_file_info *info = &claimed_files[i];
+ struct plugin_symtab *symtab = &info->symtab;
+
+ if (info->skip_file)
+ continue;
fprintf (f, "%s %d\n", info->name, symtab->nsyms + info->conflicts.nsyms);
dump_symtab (f, symtab);
@@ -833,7 +871,8 @@ all_symbols_read_handler (void)
{
struct plugin_file_info *info = &claimed_files[i];
- *lto_arg_ptr++ = info->name;
+ if (!info->skip_file)
+ *lto_arg_ptr++ = info->name;
}
*lto_arg_ptr++ = NULL;
@@ -1237,15 +1276,18 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
lto_file.symtab.syms);
check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
+ LOCK_SECTION;
num_claimed_files++;
claimed_files =
xrealloc (claimed_files,
num_claimed_files * sizeof (struct plugin_file_info));
claimed_files[num_claimed_files - 1] = lto_file;
+ UNLOCK_SECTION;
*claimed = 1;
}
+ LOCK_SECTION;
if (offload_files == NULL)
{
/* Add dummy item to the start of the list. */
@@ -1309,10 +1351,14 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
num_offload_files++;
}
+ UNLOCK_SECTION;
+
goto cleanup;
err:
+ LOCK_SECTION;
non_claimed_files++;
+ UNLOCK_SECTION;
free (lto_file.name);
cleanup:
@@ -1390,6 +1436,14 @@ onload (struct ld_plugin_tv *tv)
struct ld_plugin_tv *p;
enum ld_plugin_status status;
+#if HAVE_PTHREAD_LOCKING
+ if (pthread_mutex_init (&plugin_lock, NULL) != 0)
+ {
+ fprintf (stderr, "mutex init failed\n");
+ abort ();
+ }
+#endif
+
p = tv;
while (p->tv_tag)
{
@@ -1410,6 +1464,9 @@ onload (struct ld_plugin_tv *tv)
case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK:
register_all_symbols_read = p->tv_u.tv_register_all_symbols_read;
break;
+ case LDPT_GET_SYMBOLS_V3:
+ get_symbols_v3 = p->tv_u.tv_get_symbols;
+ break;
case LDPT_GET_SYMBOLS_V2:
get_symbols_v2 = p->tv_u.tv_get_symbols;
break;