mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 10:54:07 +08:00
e53b6e564a
ChangeLog: * MAINTAINERS: Rename .c names to .cc. contrib/ChangeLog: * filter-clang-warnings.py: Rename .c names to .cc. * gcc_update: Likewise. * paranoia.cc: Likewise. contrib/header-tools/ChangeLog: * README: Rename .c names to .cc. gcc/ChangeLog: * Makefile.in: Rename .c names to .cc. * alias.h: Likewise. * asan.cc: Likewise. * auto-profile.h: Likewise. * basic-block.h (struct basic_block_d): Likewise. * btfout.cc: Likewise. * builtins.cc (expand_builtin_longjmp): Likewise. (validate_arg): Likewise. (access_ref::offset_bounded): Likewise. * caller-save.cc (reg_restore_code): Likewise. (setup_save_areas): Likewise. * calls.cc (initialize_argument_information): Likewise. (expand_call): Likewise. (emit_library_call_value_1): Likewise. * cfg-flags.def (RTL): Likewise. (SIBCALL): Likewise. (CAN_FALLTHRU): Likewise. * cfganal.cc (post_order_compute): Likewise. * cfgcleanup.cc (try_simplify_condjump): Likewise. (merge_blocks_move_predecessor_nojumps): Likewise. (merge_blocks_move_successor_nojumps): Likewise. (merge_blocks_move): Likewise. (old_insns_match_p): Likewise. (try_crossjump_bb): Likewise. * cfgexpand.cc (expand_gimple_stmt): Likewise. * cfghooks.cc (split_block_before_cond_jump): Likewise. (profile_record_check_consistency): Likewise. * cfghooks.h: Likewise. * cfgrtl.cc (pass_free_cfg::execute): Likewise. (rtl_can_merge_blocks): Likewise. (try_redirect_by_replacing_jump): Likewise. (make_pass_outof_cfg_layout_mode): Likewise. (cfg_layout_can_merge_blocks_p): Likewise. * cgraph.cc (release_function_body): Likewise. (cgraph_node::get_fun): Likewise. * cgraph.h (struct cgraph_node): Likewise. (asmname_hasher::equal): Likewise. (cgraph_inline_failed_type): Likewise. (thunk_adjust): Likewise. (dump_callgraph_transformation): Likewise. (record_references_in_initializer): Likewise. (ipa_discover_variable_flags): Likewise. * cgraphclones.cc (GTY): Likewise. * cgraphunit.cc (symbol_table::finalize_compilation_unit): Likewise. * collect-utils.h (GCC_COLLECT_UTILS_H): Likewise. * collect2-aix.h (GCC_COLLECT2_AIX_H): Likewise. * collect2.cc (maybe_run_lto_and_relink): Likewise. * combine-stack-adj.cc: Likewise. * combine.cc (setup_incoming_promotions): Likewise. (combine_simplify_rtx): Likewise. (count_rtxs): Likewise. * common.opt: Likewise. * common/config/aarch64/aarch64-common.cc: Likewise. * common/config/arm/arm-common.cc (arm_asm_auto_mfpu): Likewise. * common/config/avr/avr-common.cc: Likewise. * common/config/i386/i386-isas.h (struct _isa_names_table): Likewise. * conditions.h: Likewise. * config.gcc: Likewise. * config/aarch64/aarch64-builtins.cc (aarch64_resolve_overloaded_memtag): Likewise. * config/aarch64/aarch64-protos.h (aarch64_classify_address): Likewise. (aarch64_get_extension_string_for_isa_flags): Likewise. * config/aarch64/aarch64-sve-builtins.cc (function_builder::add_function): Likewise. * config/aarch64/aarch64.cc (aarch64_regmode_natural_size): Likewise. (aarch64_sched_first_cycle_multipass_dfa_lookahead): Likewise. (aarch64_option_valid_attribute_p): Likewise. (aarch64_short_vector_p): Likewise. (aarch64_float_const_representable_p): Likewise. * config/aarch64/aarch64.h (DBX_REGISTER_NUMBER): Likewise. (ASM_OUTPUT_POOL_EPILOGUE): Likewise. (GTY): Likewise. * config/aarch64/cortex-a57-fma-steering.cc: Likewise. * config/aarch64/driver-aarch64.cc (contains_core_p): Likewise. * config/aarch64/t-aarch64: Likewise. * config/aarch64/x-aarch64: Likewise. * config/aarch64/x-darwin: Likewise. * config/alpha/alpha-protos.h: Likewise. * config/alpha/alpha.cc (alpha_scalar_mode_supported_p): Likewise. * config/alpha/alpha.h (LONG_DOUBLE_TYPE_SIZE): Likewise. (enum reg_class): Likewise. * config/alpha/alpha.md: Likewise. * config/alpha/driver-alpha.cc (AMASK_LOCKPFTCHOK): Likewise. * config/alpha/x-alpha: Likewise. * config/arc/arc-protos.h (arc_eh_uses): Likewise. * config/arc/arc.cc (ARC_OPT): Likewise. (arc_ccfsm_advance): Likewise. (arc_arg_partial_bytes): Likewise. (conditionalize_nonjump): Likewise. * config/arc/arc.md: Likewise. * config/arc/builtins.def: Likewise. * config/arc/t-arc: Likewise. * config/arm/arm-c.cc (arm_resolve_overloaded_builtin): Likewise. (arm_pragma_target_parse): Likewise. * config/arm/arm-protos.h (save_restore_target_globals): Likewise. (arm_cpu_cpp_builtins): Likewise. * config/arm/arm.cc (vfp3_const_double_index): Likewise. (shift_op): Likewise. (thumb2_final_prescan_insn): Likewise. (arm_final_prescan_insn): Likewise. (arm_asm_output_labelref): Likewise. (arm_small_register_classes_for_mode_p): Likewise. * config/arm/arm.h: Likewise. * config/arm/arm.md: Likewise. * config/arm/driver-arm.cc: Likewise. * config/arm/symbian.h: Likewise. * config/arm/t-arm: Likewise. * config/arm/thumb1.md: Likewise. * config/arm/x-arm: Likewise. * config/avr/avr-c.cc (avr_register_target_pragmas): Likewise. * config/avr/avr-fixed.md: Likewise. * config/avr/avr-log.cc (avr_log_vadump): Likewise. * config/avr/avr-mcus.def: Likewise. * config/avr/avr-modes.def (FRACTIONAL_INT_MODE): Likewise. * config/avr/avr-passes.def (INSERT_PASS_BEFORE): Likewise. * config/avr/avr-protos.h (make_avr_pass_casesi): Likewise. * config/avr/avr.cc (avr_option_override): Likewise. (avr_build_builtin_va_list): Likewise. (avr_mode_dependent_address_p): Likewise. (avr_function_arg_advance): Likewise. (avr_asm_output_aligned_decl_common): Likewise. * config/avr/avr.h (RETURN_ADDR_RTX): Likewise. (SUPPORTS_INIT_PRIORITY): Likewise. * config/avr/avr.md: Likewise. * config/avr/builtins.def: Likewise. * config/avr/gen-avr-mmcu-specs.cc (IN_GEN_AVR_MMCU_TEXI): Likewise. * config/avr/gen-avr-mmcu-texi.cc (IN_GEN_AVR_MMCU_TEXI): Likewise. (main): Likewise. * config/avr/t-avr: Likewise. * config/bfin/bfin.cc (frame_related_constant_load): Likewise. * config/bpf/bpf-protos.h (GCC_BPF_PROTOS_H): Likewise. * config/bpf/bpf.h (enum reg_class): Likewise. * config/bpf/t-bpf: Likewise. * config/c6x/c6x-protos.h (GCC_C6X_PROTOS_H): Likewise. * config/cr16/cr16-protos.h: Likewise. * config/cris/cris.cc (cris_address_cost): Likewise. (cris_side_effect_mode_ok): Likewise. (cris_init_machine_status): Likewise. (cris_emit_movem_store): Likewise. * config/cris/cris.h (INDEX_REG_CLASS): Likewise. (enum reg_class): Likewise. (struct cum_args): Likewise. * config/cris/cris.opt: Likewise. * config/cris/sync.md: Likewise. * config/csky/csky.cc (csky_expand_prologue): Likewise. * config/darwin-c.cc: Likewise. * config/darwin-f.cc: Likewise. * config/darwin-sections.def (zobj_const_section): Likewise. * config/darwin.cc (output_objc_section_asm_op): Likewise. (fprintf): Likewise. * config/darwin.h (GTY): Likewise. * config/elfos.h: Likewise. * config/epiphany/epiphany-sched.md: Likewise. * config/epiphany/epiphany.cc (epiphany_function_value): Likewise. * config/epiphany/epiphany.h (GTY): Likewise. (NO_FUNCTION_CSE): Likewise. * config/epiphany/mode-switch-use.cc: Likewise. * config/epiphany/predicates.md: Likewise. * config/epiphany/t-epiphany: Likewise. * config/fr30/fr30-protos.h: Likewise. * config/frv/frv-protos.h: Likewise. * config/frv/frv.cc (TLS_BIAS): Likewise. * config/frv/frv.h (ASM_OUTPUT_ALIGNED_LOCAL): Likewise. * config/ft32/ft32-protos.h: Likewise. * config/gcn/gcn-hsa.h (ASM_APP_OFF): Likewise. * config/gcn/gcn.cc (gcn_init_libfuncs): Likewise. * config/gcn/mkoffload.cc (copy_early_debug_info): Likewise. * config/gcn/t-gcn-hsa: Likewise. * config/gcn/t-omp-device: Likewise. * config/h8300/h8300-protos.h (GCC_H8300_PROTOS_H): Likewise. (same_cmp_following_p): Likewise. * config/h8300/h8300.cc (F): Likewise. * config/h8300/h8300.h (struct cum_arg): Likewise. (BRANCH_COST): Likewise. * config/i386/cygming.h (DEFAULT_PCC_STRUCT_RETURN): Likewise. * config/i386/djgpp.h (TARGET_ASM_LTO_END): Likewise. * config/i386/dragonfly.h (NO_PROFILE_COUNTERS): Likewise. * config/i386/driver-i386.cc (detect_caches_intel): Likewise. * config/i386/freebsd.h (NO_PROFILE_COUNTERS): Likewise. * config/i386/i386-c.cc (ix86_target_macros): Likewise. * config/i386/i386-expand.cc (get_mode_wider_vector): Likewise. * config/i386/i386-options.cc (ix86_set_func_type): Likewise. * config/i386/i386-protos.h (ix86_extract_perm_from_pool_constant): Likewise. (ix86_register_pragmas): Likewise. (ix86_d_has_stdcall_convention): Likewise. (i386_pe_seh_init_sections): Likewise. * config/i386/i386.cc (ix86_function_arg_regno_p): Likewise. (ix86_function_value_regno_p): Likewise. (ix86_compute_frame_layout): Likewise. (legitimize_pe_coff_symbol): Likewise. (output_pic_addr_const): Likewise. * config/i386/i386.h (defined): Likewise. (host_detect_local_cpu): Likewise. (CONSTANT_ADDRESS_P): Likewise. (DEFAULT_LARGE_SECTION_THRESHOLD): Likewise. (struct machine_frame_state): Likewise. * config/i386/i386.md: Likewise. * config/i386/lynx.h (ASM_OUTPUT_ALIGN): Likewise. * config/i386/mmx.md: Likewise. * config/i386/sse.md: Likewise. * config/i386/t-cygming: Likewise. * config/i386/t-djgpp: Likewise. * config/i386/t-gnu-property: Likewise. * config/i386/t-i386: Likewise. * config/i386/t-intelmic: Likewise. * config/i386/t-omp-device: Likewise. * config/i386/winnt-cxx.cc (i386_pe_type_dllimport_p): Likewise. (i386_pe_adjust_class_at_definition): Likewise. * config/i386/winnt.cc (gen_stdcall_or_fastcall_suffix): Likewise. (i386_pe_mangle_decl_assembler_name): Likewise. (i386_pe_encode_section_info): Likewise. * config/i386/x-cygwin: Likewise. * config/i386/x-darwin: Likewise. * config/i386/x-i386: Likewise. * config/i386/x-mingw32: Likewise. * config/i386/x86-tune-sched-core.cc: Likewise. * config/i386/x86-tune.def: Likewise. * config/i386/xm-djgpp.h (STANDARD_STARTFILE_PREFIX_1): Likewise. * config/ia64/freebsd.h: Likewise. * config/ia64/hpux.h (REGISTER_TARGET_PRAGMAS): Likewise. * config/ia64/ia64-protos.h (ia64_except_unwind_info): Likewise. * config/ia64/ia64.cc (ia64_function_value_regno_p): Likewise. (ia64_secondary_reload_class): Likewise. (bundling): Likewise. * config/ia64/ia64.h: Likewise. * config/ia64/ia64.md: Likewise. * config/ia64/predicates.md: Likewise. * config/ia64/sysv4.h: Likewise. * config/ia64/t-ia64: Likewise. * config/iq2000/iq2000.h (FUNCTION_MODE): Likewise. * config/iq2000/iq2000.md: Likewise. * config/linux.h (TARGET_HAS_BIONIC): Likewise. (if): Likewise. * config/m32c/m32c.cc (m32c_function_needs_enter): Likewise. * config/m32c/m32c.h (MAX_REGS_PER_ADDRESS): Likewise. * config/m32c/t-m32c: Likewise. * config/m32r/m32r-protos.h: Likewise. * config/m32r/m32r.cc (m32r_print_operand): Likewise. * config/m32r/m32r.h: Likewise. * config/m32r/m32r.md: Likewise. * config/m68k/m68k-isas.def: Likewise. * config/m68k/m68k-microarchs.def: Likewise. * config/m68k/m68k-protos.h (strict_low_part_peephole_ok): Likewise. (m68k_epilogue_uses): Likewise. * config/m68k/m68k.cc (m68k_call_tls_get_addr): Likewise. (m68k_sched_adjust_cost): Likewise. (m68k_sched_md_init): Likewise. * config/m68k/m68k.h (__transfer_from_trampoline): Likewise. (enum m68k_function_kind): Likewise. * config/m68k/m68k.md: Likewise. * config/m68k/m68kemb.h: Likewise. * config/m68k/uclinux.h (ENDFILE_SPEC): Likewise. * config/mcore/mcore-protos.h: Likewise. * config/mcore/mcore.cc (mcore_expand_insv): Likewise. (mcore_expand_prolog): Likewise. * config/mcore/mcore.h (TARGET_MCORE): Likewise. * config/mcore/mcore.md: Likewise. * config/microblaze/microblaze-protos.h: Likewise. * config/microblaze/microblaze.cc (microblaze_legitimate_pic_operand): Likewise. (microblaze_function_prologue): Likewise. (microblaze_function_epilogue): Likewise. (microblaze_select_section): Likewise. (microblaze_asm_output_mi_thunk): Likewise. (microblaze_eh_return): Likewise. * config/microblaze/microblaze.h: Likewise. * config/microblaze/microblaze.md: Likewise. * config/microblaze/t-microblaze: Likewise. * config/mips/driver-native.cc: Likewise. * config/mips/loongson2ef.md: Likewise. * config/mips/mips-protos.h (mips_expand_vec_cmp_expr): Likewise. * config/mips/mips.cc (mips_rtx_costs): Likewise. (mips_output_filename): Likewise. (mips_output_function_prologue): Likewise. (mips_output_function_epilogue): Likewise. (mips_output_mi_thunk): Likewise. * config/mips/mips.h: Likewise. * config/mips/mips.md: Likewise. * config/mips/t-mips: Likewise. * config/mips/x-native: Likewise. * config/mmix/mmix-protos.h: Likewise. * config/mmix/mmix.cc (mmix_option_override): Likewise. (mmix_dbx_register_number): Likewise. (mmix_expand_prologue): Likewise. * config/mmix/mmix.h: Likewise. * config/mmix/mmix.md: Likewise. * config/mmix/predicates.md: Likewise. * config/mn10300/mn10300.cc (mn10300_symbolic_operand): Likewise. (mn10300_legitimate_pic_operand_p): Likewise. * config/mn10300/mn10300.h (enum reg_class): Likewise. (NO_FUNCTION_CSE): Likewise. * config/moxie/moxie-protos.h: Likewise. * config/moxie/uclinux.h (TARGET_LIBC_HAS_FUNCTION): Likewise. * config/msp430/msp430-devices.cc (extract_devices_dir_from_exec_prefix): Likewise. * config/msp430/msp430.cc (msp430_gimplify_va_arg_expr): Likewise. (msp430_incoming_return_addr_rtx): Likewise. * config/msp430/msp430.h (msp430_get_linker_devices_include_path): Likewise. * config/msp430/t-msp430: Likewise. * config/nds32/nds32-cost.cc (nds32_rtx_costs_speed_prefer): Likewise. (nds32_rtx_costs_size_prefer): Likewise. (nds32_init_rtx_costs): Likewise. * config/nds32/nds32-doubleword.md: Likewise. * config/nds32/nds32.cc (nds32_memory_move_cost): Likewise. (nds32_builtin_decl): Likewise. * config/nds32/nds32.h (enum nds32_16bit_address_type): Likewise. (enum nds32_isr_nested_type): Likewise. (enum reg_class): Likewise. * config/nds32/predicates.md: Likewise. * config/nds32/t-nds32: Likewise. * config/nios2/nios2.cc (nios2_pragma_target_parse): Likewise. * config/nvptx/nvptx-protos.h: Likewise. * config/nvptx/nvptx.cc (nvptx_goacc_expand_var_decl): Likewise. * config/nvptx/nvptx.h (TARGET_CPU_CPP_BUILTINS): Likewise. * config/nvptx/t-nvptx: Likewise. * config/nvptx/t-omp-device: Likewise. * config/pa/elf.h: Likewise. * config/pa/pa-linux.h (GLOBAL_ASM_OP): Likewise. * config/pa/pa-netbsd.h (GLOBAL_ASM_OP): Likewise. * config/pa/pa-openbsd.h (TARGET_ASM_GLOBALIZE_LABEL): Likewise. * config/pa/pa-protos.h (pa_eh_return_handler_rtx): Likewise. (pa_legitimize_reload_address): Likewise. (pa_can_use_return_insn): Likewise. * config/pa/pa.cc (mem_shadd_or_shadd_rtx_p): Likewise. (som_output_text_section_asm_op): Likewise. * config/pa/pa.h (PROFILE_BEFORE_PROLOGUE): Likewise. * config/pa/pa.md: Likewise. * config/pa/som.h: Likewise. * config/pa/t-pa: Likewise. * config/pdp11/pdp11.cc (decode_pdp11_d): Likewise. * config/pdp11/pdp11.h: Likewise. * config/pdp11/pdp11.md: Likewise. * config/pdp11/t-pdp11: Likewise. * config/pru/pru.md: Likewise. * config/pru/t-pru: Likewise. * config/riscv/riscv-protos.h (NUM_SYMBOL_TYPES): Likewise. (riscv_gpr_save_operation_p): Likewise. (riscv_d_register_target_info): Likewise. (riscv_init_builtins): Likewise. * config/riscv/riscv.cc (riscv_output_mi_thunk): Likewise. * config/riscv/riscv.h (CSW_MAX_OFFSET): Likewise. * config/riscv/t-riscv: Likewise. * config/rl78/rl78.cc (rl78_asm_ctor_dtor): Likewise. * config/rl78/t-rl78: Likewise. * config/rs6000/aix.h: Likewise. * config/rs6000/aix71.h (ASM_SPEC_COMMON): Likewise. * config/rs6000/aix72.h (ASM_SPEC_COMMON): Likewise. * config/rs6000/aix73.h (ASM_SPEC_COMMON): Likewise. * config/rs6000/darwin.h (TARGET_ASM_GLOBALIZE_LABEL): Likewise. * config/rs6000/driver-rs6000.cc: Likewise. * config/rs6000/freebsd.h: Likewise. * config/rs6000/freebsd64.h: Likewise. * config/rs6000/lynx.h (ASM_OUTPUT_ALIGN): Likewise. * config/rs6000/rbtree.cc: Likewise. * config/rs6000/rbtree.h: Likewise. * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Likewise. * config/rs6000/rs6000-call.cc (rs6000_invalid_builtin): Likewise. (rs6000_expand_builtin): Likewise. (rs6000_init_builtins): Likewise. * config/rs6000/rs6000-cpus.def: Likewise. * config/rs6000/rs6000-gen-builtins.cc (write_init_ovld_table): Likewise. * config/rs6000/rs6000-internal.h (ALTIVEC_REG_BIT): Likewise. (quad_address_offset_p): Likewise. * config/rs6000/rs6000-logue.cc (interesting_frame_related_regno): Likewise. (rs6000_emit_epilogue): Likewise. * config/rs6000/rs6000-overload.def: Likewise. * config/rs6000/rs6000-p8swap.cc: Likewise. * config/rs6000/rs6000-protos.h (GCC_RS6000_PROTOS_H): Likewise. (rs6000_const_f32_to_i32): Likewise. * config/rs6000/rs6000.cc (legitimate_lo_sum_address_p): Likewise. (rs6000_debug_legitimize_address): Likewise. (rs6000_mode_dependent_address): Likewise. (rs6000_adjust_priority): Likewise. (rs6000_c_mode_for_suffix): Likewise. * config/rs6000/rs6000.h (defined): Likewise. (LONG_DOUBLE_TYPE_SIZE): Likewise. * config/rs6000/rs6000.md: Likewise. * config/rs6000/sysv4.h: Likewise. * config/rs6000/t-linux: Likewise. * config/rs6000/t-linux64: Likewise. * config/rs6000/t-rs6000: Likewise. * config/rs6000/x-darwin: Likewise. * config/rs6000/x-darwin64: Likewise. * config/rs6000/x-rs6000: Likewise. * config/rs6000/xcoff.h (ASM_OUTPUT_LABELREF): Likewise. * config/rx/rx.cc (rx_expand_builtin): Likewise. * config/s390/constraints.md: Likewise. * config/s390/driver-native.cc: Likewise. * config/s390/htmxlintrin.h: Likewise. * config/s390/s390-builtins.def (B_DEF): Likewise. (OB_DEF_VAR): Likewise. * config/s390/s390-builtins.h: Likewise. * config/s390/s390-c.cc: Likewise. * config/s390/s390-opts.h: Likewise. * config/s390/s390-protos.h (s390_check_symref_alignment): Likewise. (s390_register_target_pragmas): Likewise. * config/s390/s390.cc (s390_init_builtins): Likewise. (s390_expand_plus_operand): Likewise. (s390_expand_atomic): Likewise. (s390_valid_target_attribute_inner_p): Likewise. * config/s390/s390.h (LONG_DOUBLE_TYPE_SIZE): Likewise. * config/s390/s390.md: Likewise. * config/s390/t-s390: Likewise. * config/s390/vx-builtins.md: Likewise. * config/s390/x-native: Likewise. * config/sh/divtab-sh4-300.cc (main): Likewise. * config/sh/divtab-sh4.cc (main): Likewise. * config/sh/divtab.cc (main): Likewise. * config/sh/elf.h: Likewise. * config/sh/sh-protos.h (sh_fsca_int2sf): Likewise. * config/sh/sh.cc (SYMBOL_FLAG_FUNCVEC_FUNCTION): Likewise. (sh_struct_value_rtx): Likewise. (sh_remove_reg_dead_or_unused_notes): Likewise. * config/sh/sh.h (MIN_UNITS_PER_WORD): Likewise. * config/sh/t-sh: Likewise. * config/sol2-protos.h (solaris_override_options): Likewise. * config/sol2.h: Likewise. * config/sparc/driver-sparc.cc: Likewise. * config/sparc/freebsd.h: Likewise. * config/sparc/sparc-protos.h (make_pass_work_around_errata): Likewise. * config/sparc/sparc.cc (sparc_output_mi_thunk): Likewise. (sparc_asan_shadow_offset): Likewise. * config/sparc/sparc.h: Likewise. * config/sparc/sparc.md: Likewise. * config/sparc/t-sparc: Likewise. * config/sparc/x-sparc: Likewise. * config/stormy16/stormy16.cc (xstormy16_mode_dependent_address_p): Likewise. * config/t-darwin: Likewise. * config/t-dragonfly: Likewise. * config/t-freebsd: Likewise. * config/t-glibc: Likewise. * config/t-linux: Likewise. * config/t-netbsd: Likewise. * config/t-openbsd: Likewise. * config/t-pnt16-warn: Likewise. * config/t-sol2: Likewise. * config/t-vxworks: Likewise. * config/t-winnt: Likewise. * config/tilegx/t-tilegx: Likewise. * config/tilegx/tilegx-c.cc: Likewise. * config/tilegx/tilegx-protos.h (tilegx_function_profiler): Likewise. * config/tilegx/tilegx.md: Likewise. * config/tilepro/t-tilepro: Likewise. * config/tilepro/tilepro-c.cc: Likewise. * config/v850/t-v850: Likewise. * config/v850/v850-protos.h: Likewise. * config/v850/v850.cc (F): Likewise. * config/v850/v850.h (enum reg_class): Likewise. (SLOW_BYTE_ACCESS): Likewise. * config/vax/vax.cc (vax_mode_dependent_address_p): Likewise. * config/vax/vax.h (enum reg_class): Likewise. * config/vax/vax.md: Likewise. * config/visium/visium.cc (visium_legitimate_address_p): Likewise. * config/visium/visium.h: Likewise. * config/vms/t-vms: Likewise. * config/vms/vms-crtlmap.map: Likewise. * config/vms/vms-protos.h (vms_c_get_vms_ver): Likewise. * config/vx-common.h: Likewise. * config/x-darwin: Likewise. * config/x-hpux: Likewise. * config/x-linux: Likewise. * config/x-netbsd: Likewise. * config/x-openbsd: Likewise. * config/x-solaris: Likewise. * config/xtensa/xtensa-protos.h (xtensa_mem_offset): Likewise. * config/xtensa/xtensa.cc (xtensa_option_override): Likewise. * config/xtensa/xtensa.h: Likewise. * configure.ac: Likewise. * context.cc: Likewise. * convert.h: Likewise. * coretypes.h: Likewise. * coverage.cc: Likewise. * coverage.h: Likewise. * cppdefault.h (struct default_include): Likewise. * cprop.cc (local_cprop_pass): Likewise. (one_cprop_pass): Likewise. * cse.cc (hash_rtx_cb): Likewise. (fold_rtx): Likewise. * ctfc.h (ctfc_get_num_vlen_bytes): Likewise. * data-streamer.h (bp_unpack_var_len_int): Likewise. (streamer_write_widest_int): Likewise. * dbgcnt.def: Likewise. * dbxout.cc (dbxout_early_global_decl): Likewise. (dbxout_common_check): Likewise. * dbxout.h: Likewise. * debug.h (struct gcc_debug_hooks): Likewise. (dump_go_spec_init): Likewise. * df-core.cc: Likewise. * df-scan.cc (df_insn_info_delete): Likewise. (df_insn_delete): Likewise. * df.h (debug_df_chain): Likewise. (can_move_insns_across): Likewise. * dfp.cc (decimal_from_binary): Likewise. * diagnostic-color.cc: Likewise. * diagnostic-event-id.h: Likewise. * diagnostic-show-locus.cc (test_one_liner_labels): Likewise. * diagnostic.cc (bt_callback): Likewise. (num_digits): Likewise. * doc/avr-mmcu.texi: Likewise. * doc/cfg.texi: Likewise. * doc/contrib.texi: Likewise. * doc/cppinternals.texi: Likewise. * doc/extend.texi: Likewise. * doc/generic.texi: Likewise. * doc/gimple.texi: Likewise. * doc/gty.texi: Likewise. * doc/invoke.texi: Likewise. * doc/loop.texi: Likewise. * doc/lto.texi: Likewise. * doc/match-and-simplify.texi: Likewise. * doc/md.texi: Likewise. * doc/optinfo.texi: Likewise. * doc/options.texi: Likewise. * doc/passes.texi: Likewise. * doc/plugins.texi: Likewise. * doc/rtl.texi: Likewise. * doc/sourcebuild.texi: Likewise. * doc/tm.texi: Likewise. * doc/tm.texi.in: Likewise. * doc/tree-ssa.texi: Likewise. * dojump.cc (do_jump): Likewise. * dojump.h: Likewise. * dumpfile.cc (test_impl_location): Likewise. (test_capture_of_dump_calls): Likewise. * dumpfile.h (enum dump_kind): Likewise. (class dump_location_t): Likewise. (dump_enabled_p): Likewise. (enable_rtl_dump_file): Likewise. (dump_combine_total_stats): Likewise. * dwarf2asm.cc (dw2_asm_output_delta_uleb128): Likewise. * dwarf2ctf.h (ctf_debug_finish): Likewise. * dwarf2out.cc (dwarf2out_begin_prologue): Likewise. (struct loc_descr_context): Likewise. (rtl_for_decl_location): Likewise. (gen_subprogram_die): Likewise. (gen_label_die): Likewise. (is_trivial_indirect_ref): Likewise. (dwarf2out_late_global_decl): Likewise. (dwarf_file_hasher::hash): Likewise. (dwarf2out_end_source_file): Likewise. (dwarf2out_define): Likewise. (dwarf2out_early_finish): Likewise. * dwarf2out.h (struct dw_fde_node): Likewise. (struct dw_discr_list_node): Likewise. (output_loc_sequence_raw): Likewise. * emit-rtl.cc (gen_raw_REG): Likewise. (maybe_set_max_label_num): Likewise. * emit-rtl.h (struct rtl_data): Likewise. * errors.cc (internal_error): Likewise. (trim_filename): Likewise. * et-forest.cc: Likewise. * except.cc (init_eh_for_function): Likewise. * explow.cc (promote_ssa_mode): Likewise. (get_dynamic_stack_size): Likewise. * explow.h: Likewise. * expmed.h: Likewise. * expr.cc (safe_from_p): Likewise. (expand_expr_real_2): Likewise. (expand_expr_real_1): Likewise. * file-prefix-map.cc (remap_filename): Likewise. * final.cc (app_enable): Likewise. (make_pass_compute_alignments): Likewise. (final_scan_insn_1): Likewise. (final_scan_insn): Likewise. * fixed-value.h (fixed_from_string): Likewise. * flag-types.h (NO_DEBUG): Likewise. (DWARF2_DEBUG): Likewise. (VMS_DEBUG): Likewise. (BTF_DEBUG): Likewise. (enum ctf_debug_info_levels): Likewise. * fold-const.cc (const_binop): Likewise. (fold_binary_loc): Likewise. (fold_checksum_tree): Likewise. * fp-test.cc: Likewise. * function.cc (expand_function_end): Likewise. * function.h (struct function): Likewise. * fwprop.cc (should_replace_address): Likewise. * gcc-main.cc: Likewise. * gcc-rich-location.h (class gcc_rich_location): Likewise. * gcc-symtab.h: Likewise. * gcc.cc (MIN_FATAL_STATUS): Likewise. (driver_handle_option): Likewise. (quote_spec_arg): Likewise. (driver::finalize): Likewise. * gcc.h (set_input): Likewise. * gcov-dump.cc: Likewise. * gcov.cc (solve_flow_graph): Likewise. * gcse-common.cc: Likewise. * gcse.cc (make_pass_rtl_hoist): Likewise. * genattr-common.cc: Likewise. * genattrtab.cc (min_fn): Likewise. (write_const_num_delay_slots): Likewise. * genautomata.cc: Likewise. * genconditions.cc (write_one_condition): Likewise. * genconstants.cc: Likewise. * genemit.cc (gen_exp): Likewise. * generic-match-head.cc: Likewise. * genextract.cc: Likewise. * gengenrtl.cc (always_void_p): Likewise. * gengtype-parse.cc (gtymarker_opt): Likewise. * gengtype-state.cc (state_writer::state_writer): Likewise. (write_state_trailer): Likewise. (equals_type_number): Likewise. (read_state): Likewise. * gengtype.cc (open_base_files): Likewise. (struct file_rule_st): Likewise. (header_dot_h_frul): Likewise. * gengtype.h: Likewise. * genmatch.cc (main): Likewise. * genmddeps.cc: Likewise. * genmodes.cc (emit_mode_inner): Likewise. (emit_mode_unit_size): Likewise. * genpeep.cc (gen_peephole): Likewise. * genpreds.cc (write_tm_preds_h): Likewise. * genrecog.cc (validate_pattern): Likewise. (write_header): Likewise. (main): Likewise. * gensupport.cc (change_subst_attribute): Likewise. (traverse_c_tests): Likewise. (add_predicate): Likewise. (init_predicate_table): Likewise. * gensupport.h (struct optab_pattern): Likewise. (get_num_insn_codes): Likewise. (maybe_eval_c_test): Likewise. (struct pred_data): Likewise. * ggc-internal.h: Likewise. * gimple-fold.cc (maybe_fold_reference): Likewise. (get_range_strlen_tree): Likewise. * gimple-fold.h (gimple_stmt_integer_valued_real_p): Likewise. * gimple-low.cc: Likewise. * gimple-match-head.cc (directly_supported_p): Likewise. * gimple-pretty-print.h: Likewise. * gimple-ssa-sprintf.cc (format_percent): Likewise. (adjust_range_for_overflow): Likewise. * gimple-streamer.h: Likewise. * gimple.h (struct GTY): Likewise. (is_gimple_resx): Likewise. * gimplify.cc (gimplify_expr): Likewise. (gimplify_init_constructor): Likewise. (omp_construct_selector_matches): Likewise. (gimplify_omp_target_update): Likewise. (gimplify_omp_ordered): Likewise. (gimplify_va_arg_expr): Likewise. * graphite-isl-ast-to-gimple.cc (should_copy_to_new_region): Likewise. * haifa-sched.cc (increase_insn_priority): Likewise. (try_ready): Likewise. (sched_create_recovery_edges): Likewise. * ifcvt.cc (find_if_case_1): Likewise. (find_if_case_2): Likewise. * inchash.h: Likewise. * incpath.cc (add_env_var_paths): Likewise. * input.cc (dump_location_info): Likewise. (assert_loceq): Likewise. (test_lexer_string_locations_concatenation_1): Likewise. (test_lexer_string_locations_concatenation_2): Likewise. (test_lexer_string_locations_concatenation_3): Likewise. * input.h (BUILTINS_LOCATION): Likewise. (class string_concat_db): Likewise. * internal-fn.cc (expand_MUL_OVERFLOW): Likewise. (expand_LOOP_VECTORIZED): Likewise. * ipa-cp.cc (make_pass_ipa_cp): Likewise. * ipa-fnsummary.cc (remap_freqcounting_preds_after_dup): Likewise. (ipa_fn_summary_t::duplicate): Likewise. (make_pass_ipa_fn_summary): Likewise. * ipa-fnsummary.h (enum ipa_hints_vals): Likewise. * ipa-free-lang-data.cc (fld_simplified_type): Likewise. (free_lang_data_in_decl): Likewise. * ipa-inline.cc (compute_inlined_call_time): Likewise. (inline_always_inline_functions): Likewise. * ipa-inline.h (free_growth_caches): Likewise. (inline_account_function_p): Likewise. * ipa-modref.cc (modref_access_analysis::analyze_stmt): Likewise. (modref_eaf_analysis::analyze_ssa_name): Likewise. * ipa-param-manipulation.cc (ipa_param_body_adjustments::mark_dead_statements): Likewise. (ipa_param_body_adjustments::remap_with_debug_expressions): Likewise. * ipa-prop.cc (ipa_set_node_agg_value_chain): Likewise. * ipa-prop.h (IPA_UNDESCRIBED_USE): Likewise. (unadjusted_ptr_and_unit_offset): Likewise. * ipa-reference.cc (make_pass_ipa_reference): Likewise. * ipa-reference.h (GCC_IPA_REFERENCE_H): Likewise. * ipa-split.cc (consider_split): Likewise. * ipa-sra.cc (isra_read_node_info): Likewise. * ipa-utils.h (struct ipa_dfs_info): Likewise. (recursive_call_p): Likewise. (ipa_make_function_pure): Likewise. * ira-build.cc (ira_create_allocno): Likewise. (ira_flattening): Likewise. * ira-color.cc (do_coloring): Likewise. (update_curr_costs): Likewise. * ira-conflicts.cc (process_regs_for_copy): Likewise. * ira-int.h (struct ira_emit_data): Likewise. (ira_prohibited_mode_move_regs): Likewise. (ira_get_dup_out_num): Likewise. (ira_destroy): Likewise. (ira_tune_allocno_costs): Likewise. (ira_implicitly_set_insn_hard_regs): Likewise. (ira_build_conflicts): Likewise. (ira_color): Likewise. * ira-lives.cc (process_bb_node_lives): Likewise. * ira.cc (class ira_spilled_reg_stack_slot): Likewise. (setup_uniform_class_p): Likewise. (def_dominates_uses): Likewise. * ira.h (ira_nullify_asm_goto): Likewise. * langhooks.cc (lhd_post_options): Likewise. * langhooks.h (class substring_loc): Likewise. (struct lang_hooks_for_tree_inlining): Likewise. (struct lang_hooks_for_types): Likewise. (struct lang_hooks): Likewise. * libfuncs.h (synchronize_libfunc): Likewise. * loop-doloop.cc (doloop_condition_get): Likewise. * loop-init.cc (fix_loop_structure): Likewise. * loop-invariant.cc: Likewise. * lower-subreg.h: Likewise. * lra-constraints.cc (curr_insn_transform): Likewise. * lra-int.h (struct lra_insn_reg): Likewise. (lra_undo_inheritance): Likewise. (lra_setup_reload_pseudo_preferenced_hard_reg): Likewise. (lra_split_hard_reg_for): Likewise. (lra_coalesce): Likewise. (lra_final_code_change): Likewise. * lra-spills.cc (lra_final_code_change): Likewise. * lra.cc (lra_process_new_insns): Likewise. * lto-compress.h (struct lto_compression_stream): Likewise. * lto-streamer-out.cc (DFS::DFS_write_tree_body): Likewise. (write_symbol): Likewise. * lto-streamer.h (enum LTO_tags): Likewise. (lto_value_range_error): Likewise. (lto_append_block): Likewise. (lto_streamer_hooks_init): Likewise. (stream_read_tree_ref): Likewise. (lto_prepare_function_for_streaming): Likewise. (select_what_to_stream): Likewise. (omp_lto_input_declare_variant_alt): Likewise. (cl_optimization_stream_in): Likewise. * lto-wrapper.cc (append_compiler_options): Likewise. * machmode.def: Likewise. * machmode.h (struct int_n_data_t): Likewise. * main.cc (main): Likewise. * match.pd: Likewise. * omp-builtins.def (BUILT_IN_GOMP_CRITICAL_NAME_END): Likewise. (BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT): Likewise. * omp-expand.cc (expand_omp_atomic_fetch_op): Likewise. (make_pass_expand_omp_ssa): Likewise. * omp-low.cc (struct omp_context): Likewise. (struct omp_taskcopy_context): Likewise. (lower_omp): Likewise. * omp-oacc-neuter-broadcast.cc (omp_sese_active_worker_call): Likewise. (mask_name): Likewise. (omp_sese_dump_pars): Likewise. (worker_single_simple): Likewise. * omp-offload.cc (omp_finish_file): Likewise. (execute_oacc_loop_designation): Likewise. * optabs-query.cc (lshift_cheap_p): Likewise. * optc-gen.awk: Likewise. * optc-save-gen.awk: Likewise. * optinfo-emit-json.cc (optrecord_json_writer::optrecord_json_writer): Likewise. * opts-common.cc: Likewise. * output.h (app_enable): Likewise. (output_operand_lossage): Likewise. (insn_current_reference_address): Likewise. (get_insn_template): Likewise. (output_quoted_string): Likewise. * pass_manager.h (struct register_pass_info): Likewise. * plugin.cc: Likewise. * plugin.def (PLUGIN_ANALYZER_INIT): Likewise. * plugin.h (invoke_plugin_callbacks): Likewise. * pointer-query.cc (handle_mem_ref): Likewise. * postreload-gcse.cc (alloc_mem): Likewise. * predict.h (enum prediction): Likewise. (add_reg_br_prob_note): Likewise. * prefix.h: Likewise. * profile.h (get_working_sets): Likewise. * read-md.cc: Likewise. * read-md.h (struct mapping): Likewise. (class md_reader): Likewise. (class noop_reader): Likewise. * read-rtl-function.cc (function_reader::create_function): Likewise. (function_reader::extra_parsing_for_operand_code_0): Likewise. * read-rtl.cc (initialize_iterators): Likewise. * real.cc: Likewise. * real.h (struct real_value): Likewise. (format_helper::format_helper): Likewise. (real_hash): Likewise. (real_can_shorten_arithmetic): Likewise. * recog.cc (struct target_recog): Likewise. (offsettable_nonstrict_memref_p): Likewise. (constrain_operands): Likewise. * recog.h (MAX_RECOG_ALTERNATIVES): Likewise. (which_op_alt): Likewise. (struct insn_gen_fn): Likewise. * reg-notes.def (REG_NOTE): Likewise. * reg-stack.cc: Likewise. * regs.h (reg_is_parm_p): Likewise. * regset.h: Likewise. * reload.cc (push_reload): Likewise. (find_reloads): Likewise. (find_reloads_address_1): Likewise. (find_replacement): Likewise. (refers_to_regno_for_reload_p): Likewise. (refers_to_mem_for_reload_p): Likewise. * reload.h (push_reload): Likewise. (deallocate_reload_reg): Likewise. * reload1.cc (emit_input_reload_insns): Likewise. * reorg.cc (relax_delay_slots): Likewise. * rtl.def (UNKNOWN): Likewise. (SEQUENCE): Likewise. (BARRIER): Likewise. (ASM_OPERANDS): Likewise. (EQ_ATTR_ALT): Likewise. * rtl.h (struct GTY): Likewise. (LABEL_NAME): Likewise. (LABEL_ALT_ENTRY_P): Likewise. (SUBREG_BYTE): Likewise. (get_stack_check_protect): Likewise. (dump_rtx_statistics): Likewise. (unwrap_const_vec_duplicate): Likewise. (subreg_promoted_mode): Likewise. (gen_lowpart_common): Likewise. (operand_subword): Likewise. (immed_wide_int_const): Likewise. (decide_function_section): Likewise. (active_insn_p): Likewise. (delete_related_insns): Likewise. (try_split): Likewise. (val_signbit_known_clear_p): Likewise. (simplifiable_subregs): Likewise. (set_insn_deleted): Likewise. (subreg_get_info): Likewise. (remove_free_EXPR_LIST_node): Likewise. (finish_subregs_of_mode): Likewise. (get_mem_attrs): Likewise. (lookup_constant_def): Likewise. (rtx_to_tree_code): Likewise. (hash_rtx): Likewise. (condjump_in_parallel_p): Likewise. (validate_subreg): Likewise. (make_compound_operation): Likewise. (schedule_ebbs): Likewise. (print_inline_rtx): Likewise. (fixup_args_size_notes): Likewise. (expand_dec): Likewise. (prepare_copy_insn): Likewise. (mark_elimination): Likewise. (valid_mode_changes_for_regno): Likewise. (make_debug_expr_from_rtl): Likewise. (delete_vta_debug_insns): Likewise. (simplify_using_condition): Likewise. (set_insn_locations): Likewise. (fatal_insn_not_found): Likewise. (word_register_operation_p): Likewise. * rtlanal.cc (get_call_fndecl): Likewise. (side_effects_p): Likewise. (subreg_nregs): Likewise. (rtx_cost): Likewise. (canonicalize_condition): Likewise. * rtlanal.h (rtx_properties::try_to_add_note): Likewise. * run-rtl-passes.cc (run_rtl_passes): Likewise. * sanitizer.def (BUILT_IN_ASAN_VERSION_MISMATCH_CHECK): Likewise. * sched-deps.cc (add_dependence_1): Likewise. * sched-ebb.cc (begin_move_insn): Likewise. (add_deps_for_risky_insns): Likewise. (advance_target_bb): Likewise. * sched-int.h (reemit_notes): Likewise. (struct _haifa_insn_data): Likewise. (HID): Likewise. (DEP_CANCELLED): Likewise. (debug_ds): Likewise. (number_in_ready): Likewise. (schedule_ebbs_finish): Likewise. (find_modifiable_mems): Likewise. * sched-rgn.cc (debug_rgn_dependencies): Likewise. * sel-sched-dump.cc (dump_lv_set): Likewise. * sel-sched-dump.h: Likewise. * sel-sched-ir.cc (sel_insn_rtx_cost): Likewise. (setup_id_reg_sets): Likewise. (has_dependence_p): Likewise. (sel_num_cfg_preds_gt_1): Likewise. (bb_ends_ebb_p): Likewise. * sel-sched-ir.h (struct _list_node): Likewise. (struct idata_def): Likewise. (bb_next_bb): Likewise. * sel-sched.cc (vinsn_writes_one_of_regs_p): Likewise. (choose_best_pseudo_reg): Likewise. (verify_target_availability): Likewise. (can_speculate_dep_p): Likewise. (sel_rank_for_schedule): Likewise. * selftest-run-tests.cc (selftest::run_tests): Likewise. * selftest.h (class auto_fix_quotes): Likewise. * shrink-wrap.cc (handle_simple_exit): Likewise. * shrink-wrap.h: Likewise. * simplify-rtx.cc (simplify_context::simplify_associative_operation): Likewise. (simplify_context::simplify_gen_vec_select): Likewise. * spellcheck-tree.h: Likewise. * spellcheck.h: Likewise. * statistics.h (struct function): Likewise. * stmt.cc (conditional_probability): Likewise. * stmt.h: Likewise. * stor-layout.h: Likewise. * streamer-hooks.h: Likewise. * stringpool.h: Likewise. * symtab.cc (symbol_table::change_decl_assembler_name): Likewise. * target.def (HOOK_VECTOR_END): Likewise. (type.): Likewise. * target.h (union cumulative_args_t): Likewise. (by_pieces_ninsns): Likewise. (class predefined_function_abi): Likewise. * targhooks.cc (default_translate_mode_attribute): Likewise. * timevar.def: Likewise. * timevar.h (class timer): Likewise. * toplev.h (enable_rtl_dump_file): Likewise. * trans-mem.cc (collect_bb2reg): Likewise. * tree-call-cdce.cc (gen_conditions_for_pow): Likewise. * tree-cfg.cc (remove_bb): Likewise. (verify_gimple_debug): Likewise. (remove_edge_and_dominated_blocks): Likewise. (push_fndecl): Likewise. * tree-cfgcleanup.h (GCC_TREE_CFGCLEANUP_H): Likewise. * tree-complex.cc (expand_complex_multiplication): Likewise. (expand_complex_div_straight): Likewise. * tree-core.h (enum tree_index): Likewise. (enum operand_equal_flag): Likewise. * tree-eh.cc (honor_protect_cleanup_actions): Likewise. * tree-if-conv.cc (if_convertible_gimple_assign_stmt_p): Likewise. * tree-inline.cc (initialize_inlined_parameters): Likewise. * tree-inline.h (force_value_to_type): Likewise. * tree-nested.cc (get_chain_decl): Likewise. (walk_all_functions): Likewise. * tree-object-size.h: Likewise. * tree-outof-ssa.cc: Likewise. * tree-parloops.cc (create_parallel_loop): Likewise. * tree-pretty-print.cc (print_generic_expr_to_str): Likewise. (dump_generic_node): Likewise. * tree-profile.cc (tree_profiling): Likewise. * tree-sra.cc (maybe_add_sra_candidate): Likewise. * tree-ssa-address.cc: Likewise. * tree-ssa-alias.cc: Likewise. * tree-ssa-alias.h (ao_ref::max_size_known_p): Likewise. (dump_alias_stats): Likewise. * tree-ssa-ccp.cc: Likewise. * tree-ssa-coalesce.h: Likewise. * tree-ssa-live.cc (remove_unused_scope_block_p): Likewise. * tree-ssa-loop-manip.cc (copy_phi_node_args): Likewise. * tree-ssa-loop-unswitch.cc: Likewise. * tree-ssa-math-opts.cc: Likewise. * tree-ssa-operands.cc (class operands_scanner): Likewise. * tree-ssa-pre.cc: Likewise. * tree-ssa-reassoc.cc (optimize_ops_list): Likewise. (debug_range_entry): Likewise. * tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): Likewise. * tree-ssa-sccvn.h (TREE_SSA_SCCVN_H): Likewise. * tree-ssa-scopedtables.cc (add_expr_commutative): Likewise. (equal_mem_array_ref_p): Likewise. * tree-ssa-strlen.cc (is_strlen_related_p): Likewise. * tree-ssa-strlen.h (get_range_strlen_dynamic): Likewise. * tree-ssa-tail-merge.cc (stmt_local_def): Likewise. * tree-ssa-ter.h: Likewise. * tree-ssa-threadupdate.h (enum bb_dom_status): Likewise. * tree-streamer-in.cc (lto_input_ts_block_tree_pointers): Likewise. * tree-streamer-out.cc (pack_ts_block_value_fields): Likewise. (write_ts_block_tree_pointers): Likewise. * tree-streamer.h (struct streamer_tree_cache_d): Likewise. (streamer_read_tree_bitfields): Likewise. (streamer_write_integer_cst): Likewise. * tree-vect-patterns.cc (apply_binop_and_append_stmt): Likewise. (vect_synth_mult_by_constant): Likewise. * tree-vect-stmts.cc (vectorizable_operation): Likewise. * tree-vectorizer.cc: Likewise. * tree-vectorizer.h (class auto_purge_vect_location): Likewise. (vect_update_inits_of_drs): Likewise. (vect_get_mask_type_for_stmt): Likewise. (vect_rgroup_iv_might_wrap_p): Likewise. (cse_and_gimplify_to_preheader): Likewise. (vect_free_slp_tree): Likewise. (vect_pattern_recog): Likewise. (vect_stmt_dominates_stmt_p): Likewise. * tree.cc (initialize_tree_contains_struct): Likewise. (need_assembler_name_p): Likewise. (type_with_interoperable_signedness): Likewise. * tree.def (SWITCH_EXPR): Likewise. * tree.h (TYPE_SYMTAB_ADDRESS): Likewise. (poly_int_tree_p): Likewise. (inlined_function_outer_scope_p): Likewise. (tree_code_for_canonical_type_merging): Likewise. * value-prof.cc: Likewise. * value-prof.h (get_nth_most_common_value): Likewise. (find_func_by_profile_id): Likewise. * value-range.cc (vrp_operand_equal_p): Likewise. * value-range.h: Likewise. * var-tracking.cc: Likewise. * varasm.cc (default_function_section): Likewise. (function_section_1): Likewise. (assemble_variable): Likewise. (handle_vtv_comdat_section): Likewise. * vec.h (struct vec_prefix): Likewise. * vmsdbgout.cc (full_name): Likewise. * vtable-verify.cc: Likewise. * vtable-verify.h (struct vtv_graph_node): Likewise. * xcoffout.cc: Likewise. * xcoffout.h (DEBUG_SYMS_TEXT): Likewise. gcc/ada/ChangeLog: * Make-generated.in: Rename .c names to .cc. * adaint.c: Likewise. * ctrl_c.c (dummy_handler): Likewise. * gcc-interface/Makefile.in: Likewise. * gcc-interface/config-lang.in: Likewise. * gcc-interface/decl.cc (concat_name): Likewise. (init_gnat_decl): Likewise. * gcc-interface/gigi.h (concat_name): Likewise. (init_gnat_utils): Likewise. (build_call_raise_range): Likewise. (gnat_mark_addressable): Likewise. (gnat_protect_expr): Likewise. (gnat_rewrite_reference): Likewise. * gcc-interface/lang-specs.h (ADA_DUMPS_OPTIONS): Likewise. * gcc-interface/utils.cc (GTY): Likewise. (add_deferred_type_context): Likewise. (init_gnat_utils): Likewise. * gcc-interface/utils2.cc (gnat_stable_expr_p): Likewise. (gnat_protect_expr): Likewise. (gnat_stabilize_reference_1): Likewise. (gnat_rewrite_reference): Likewise. * gsocket.h: Likewise. * init.cc (__gnat_error_handler): Likewise. * libgnarl/s-intman.ads: Likewise. * libgnarl/s-osinte__android.ads: Likewise. * libgnarl/s-osinte__darwin.ads: Likewise. * libgnarl/s-osinte__hpux.ads: Likewise. * libgnarl/s-osinte__linux.ads: Likewise. * libgnarl/s-osinte__qnx.ads: Likewise. * libgnarl/s-taskin.ads: Likewise. * rtfinal.cc: Likewise. * s-oscons-tmplt.c (CND): Likewise. * set_targ.ads: Likewise. gcc/analyzer/ChangeLog: * analyzer.cc (is_special_named_call_p): Rename .c names to .cc. (is_named_call_p): Likewise. * region-model-asm.cc (deterministic_p): Likewise. * region.cc (field_region::get_relative_concrete_offset): Likewise. * sm-malloc.cc (method_p): Likewise. * supergraph.cc (superedge::dump_dot): Likewise. gcc/c-family/ChangeLog: * c-ada-spec.cc: Rename .c names to .cc. * c-ada-spec.h: Likewise. * c-common.cc (c_build_vec_convert): Likewise. (warning_candidate_p): Likewise. * c-common.h (enum rid): Likewise. (build_real_imag_expr): Likewise. (finish_label_address_expr): Likewise. (c_get_substring_location): Likewise. (c_build_bind_expr): Likewise. (conflict_marker_get_final_tok_kind): Likewise. (c_parse_error): Likewise. (check_missing_format_attribute): Likewise. (invalid_array_size_error): Likewise. (warn_for_multistatement_macros): Likewise. (build_attr_access_from_parms): Likewise. * c-cppbuiltin.cc (c_cpp_builtins): Likewise. * c-format.cc: Likewise. * c-gimplify.cc (c_gimplify_expr): Likewise. * c-indentation.h: Likewise. * c-objc.h (objc_prop_attr_kind_for_rid): Likewise. * c-omp.cc (c_omp_predetermined_mapping): Likewise. * c-opts.cc (c_common_post_options): Likewise. (set_std_cxx23): Likewise. * c-pragma.cc (handle_pragma_redefine_extname): Likewise. * c-pretty-print.h: Likewise. gcc/c/ChangeLog: * Make-lang.in: Rename .c names to .cc. * c-convert.cc: Likewise. * c-decl.cc (struct lang_identifier): Likewise. (pop_scope): Likewise. (finish_decl): Likewise. * c-objc-common.h (GCC_C_OBJC_COMMON): Likewise. * c-parser.cc (c_parser_skip_to_end_of_block_or_statement): Likewise. * c-parser.h (GCC_C_PARSER_H): Likewise. * c-tree.h (c_keyword_starts_typename): Likewise. (finish_declspecs): Likewise. (c_get_alias_set): Likewise. (enum c_oracle_request): Likewise. (tag_exists_p): Likewise. (set_c_expr_source_range): Likewise. * c-typeck.cc (c_common_type): Likewise. (c_finish_omp_clauses): Likewise. * config-lang.in: Likewise. gcc/cp/ChangeLog: * Make-lang.in: Rename .c names to .cc. * config-lang.in: Likewise. * constexpr.cc (cxx_eval_constant_expression): Likewise. * coroutines.cc (morph_fn_to_coro): Likewise. * cp-gimplify.cc (cp_gimplify_expr): Likewise. * cp-lang.cc (struct lang_hooks): Likewise. (get_template_argument_pack_elems_folded): Likewise. * cp-objcp-common.cc (cp_tree_size): Likewise. (cp_unit_size_without_reusable_padding): Likewise. (pop_file_scope): Likewise. (cp_pushdecl): Likewise. * cp-objcp-common.h (GCC_CP_OBJCP_COMMON): Likewise. (cxx_simulate_record_decl): Likewise. * cp-tree.h (struct named_label_entry): Likewise. (current_function_return_value): Likewise. (more_aggr_init_expr_args_p): Likewise. (get_function_version_dispatcher): Likewise. (common_enclosing_class): Likewise. (strip_fnptr_conv): Likewise. (current_decl_namespace): Likewise. (do_aggregate_paren_init): Likewise. (cp_check_const_attributes): Likewise. (qualified_name_lookup_error): Likewise. (generic_targs_for): Likewise. (mark_exp_read): Likewise. (is_global_friend): Likewise. (maybe_reject_flexarray_init): Likewise. (module_token_lang): Likewise. (handle_module_option): Likewise. (literal_integer_zerop): Likewise. (build_extra_args): Likewise. (build_if_nonnull): Likewise. (maybe_check_overriding_exception_spec): Likewise. (finish_omp_target_clauses): Likewise. (maybe_warn_zero_as_null_pointer_constant): Likewise. (cxx_print_error_function): Likewise. (decl_in_std_namespace_p): Likewise. (merge_exception_specifiers): Likewise. (mangle_module_global_init): Likewise. (cxx_block_may_fallthru): Likewise. (fold_builtin_source_location): Likewise. (enum cp_oracle_request): Likewise. (subsumes): Likewise. (cp_finish_injected_record_type): Likewise. (vtv_build_vtable_verify_fndecl): Likewise. (cp_tree_c_finish_parsing): Likewise. * cvt.cc (diagnose_ref_binding): Likewise. (convert_to_void): Likewise. (convert_force): Likewise. (type_promotes_to): Likewise. * decl.cc (make_unbound_class_template_raw): Likewise. (cxx_init_decl_processing): Likewise. (check_class_member_definition_namespace): Likewise. (cxx_maybe_build_cleanup): Likewise. * decl2.cc (maybe_emit_vtables): Likewise. * error.cc (dump_function_name): Likewise. * init.cc (is_class_type): Likewise. (build_new_1): Likewise. * lang-specs.h: Likewise. * method.cc (make_alias_for_thunk): Likewise. * module.cc (specialization_add): Likewise. (module_state::read_cluster): Likewise. * name-lookup.cc (check_extern_c_conflict): Likewise. * name-lookup.h (struct cxx_binding): Likewise. * parser.cc (cp_parser_identifier): Likewise. * parser.h (struct cp_parser): Likewise. * pt.cc (has_value_dependent_address): Likewise. (push_tinst_level_loc): Likewise. * semantics.cc (finish_omp_clauses): Likewise. (finish_omp_atomic): Likewise. * tree.cc (cp_save_expr): Likewise. (cp_free_lang_data): Likewise. * typeck.cc (cp_common_type): Likewise. (strip_array_domain): Likewise. (rationalize_conditional_expr): Likewise. (check_return_expr): Likewise. * vtable-class-hierarchy.cc: Likewise. gcc/d/ChangeLog: * d-gimplify.cc: Rename .c names to .cc. * d-incpath.cc: Likewise. * lang-specs.h: Likewise. gcc/fortran/ChangeLog: * check.cc (gfc_check_all_any): Rename .c names to .cc. * class.cc (find_intrinsic_vtab): Likewise. * config-lang.in: Likewise. * cpp.cc (cpp_define_builtins): Likewise. * data.cc (get_array_index): Likewise. * decl.cc (match_clist_expr): Likewise. (get_proc_name): Likewise. (gfc_verify_c_interop_param): Likewise. (gfc_get_pdt_instance): Likewise. (gfc_match_formal_arglist): Likewise. (gfc_get_type_attr_spec): Likewise. * dependency.cc: Likewise. * error.cc (gfc_format_decoder): Likewise. * expr.cc (check_restricted): Likewise. (gfc_build_default_init_expr): Likewise. * f95-lang.cc: Likewise. * gfc-internals.texi: Likewise. * gfortran.h (enum match): Likewise. (enum procedure_type): Likewise. (enum oacc_routine_lop): Likewise. (gfc_get_pdt_instance): Likewise. (gfc_end_source_files): Likewise. (gfc_mpz_set_hwi): Likewise. (gfc_get_option_string): Likewise. (gfc_find_sym_in_expr): Likewise. (gfc_errors_to_warnings): Likewise. (gfc_real_4_kind): Likewise. (gfc_free_finalizer): Likewise. (gfc_sym_get_dummy_args): Likewise. (gfc_check_intrinsic_standard): Likewise. (gfc_free_case_list): Likewise. (gfc_resolve_oacc_routines): Likewise. (gfc_check_vardef_context): Likewise. (gfc_free_association_list): Likewise. (gfc_implicit_pure_function): Likewise. (gfc_ref_dimen_size): Likewise. (gfc_compare_actual_formal): Likewise. (gfc_resolve_wait): Likewise. (gfc_dt_upper_string): Likewise. (gfc_generate_module_code): Likewise. (gfc_delete_bbt): Likewise. (debug): Likewise. (gfc_build_block_ns): Likewise. (gfc_dep_difference): Likewise. (gfc_invalid_null_arg): Likewise. (gfc_is_finalizable): Likewise. (gfc_fix_implicit_pure): Likewise. (gfc_is_size_zero_array): Likewise. (gfc_is_reallocatable_lhs): Likewise. * gfortranspec.cc: Likewise. * interface.cc (compare_actual_expr): Likewise. * intrinsic.cc (add_functions): Likewise. * iresolve.cc (gfc_resolve_matmul): Likewise. (gfc_resolve_alarm_sub): Likewise. * iso-c-binding.def: Likewise. * lang-specs.h: Likewise. * libgfortran.h (GFC_STDERR_UNIT_NUMBER): Likewise. * match.cc (gfc_match_label): Likewise. (gfc_match_symbol): Likewise. (match_derived_type_spec): Likewise. (copy_ts_from_selector_to_associate): Likewise. * match.h (gfc_match_call): Likewise. (gfc_get_common): Likewise. (gfc_match_omp_end_single): Likewise. (gfc_match_volatile): Likewise. (gfc_match_bind_c): Likewise. (gfc_match_literal_constant): Likewise. (gfc_match_init_expr): Likewise. (gfc_match_array_constructor): Likewise. (gfc_match_end_interface): Likewise. (gfc_match_print): Likewise. (gfc_match_expr): Likewise. * matchexp.cc (next_operator): Likewise. * mathbuiltins.def: Likewise. * module.cc (free_true_name): Likewise. * openmp.cc (gfc_resolve_omp_parallel_blocks): Likewise. (gfc_omp_save_and_clear_state): Likewise. * parse.cc (parse_union): Likewise. (set_syms_host_assoc): Likewise. * resolve.cc (resolve_actual_arglist): Likewise. (resolve_elemental_actual): Likewise. (check_host_association): Likewise. (resolve_typebound_function): Likewise. (resolve_typebound_subroutine): Likewise. (gfc_resolve_expr): Likewise. (resolve_assoc_var): Likewise. (resolve_typebound_procedures): Likewise. (resolve_equivalence_derived): Likewise. * simplify.cc (simplify_bound): Likewise. * symbol.cc (gfc_set_default_type): Likewise. (gfc_add_ext_attribute): Likewise. * target-memory.cc (gfc_target_interpret_expr): Likewise. * target-memory.h (gfc_target_interpret_expr): Likewise. * trans-array.cc (gfc_get_cfi_dim_sm): Likewise. (gfc_conv_shift_descriptor_lbound): Likewise. (gfc_could_be_alias): Likewise. (gfc_get_dataptr_offset): Likewise. * trans-const.cc: Likewise. * trans-decl.cc (trans_function_start): Likewise. (gfc_trans_deferred_vars): Likewise. (generate_local_decl): Likewise. (gfc_generate_function_code): Likewise. * trans-expr.cc (gfc_vptr_size_get): Likewise. (gfc_trans_class_array_init_assign): Likewise. (POWI_TABLE_SIZE): Likewise. (gfc_conv_procedure_call): Likewise. (gfc_trans_arrayfunc_assign): Likewise. * trans-intrinsic.cc (gfc_conv_intrinsic_len): Likewise. (gfc_conv_intrinsic_loc): Likewise. (conv_intrinsic_event_query): Likewise. * trans-io.cc (gfc_build_st_parameter): Likewise. * trans-openmp.cc (gfc_omp_check_optional_argument): Likewise. (gfc_omp_unshare_expr_r): Likewise. (gfc_trans_omp_array_section): Likewise. (gfc_trans_omp_clauses): Likewise. * trans-stmt.cc (trans_associate_var): Likewise. (gfc_trans_deallocate): Likewise. * trans-stmt.h (gfc_trans_class_init_assign): Likewise. (gfc_trans_deallocate): Likewise. (gfc_trans_oacc_declare): Likewise. * trans-types.cc: Likewise. * trans-types.h (enum gfc_packed): Likewise. * trans.cc (N_): Likewise. (trans_code): Likewise. * trans.h (gfc_build_compare_string): Likewise. (gfc_conv_expr_type): Likewise. (gfc_trans_deferred_vars): Likewise. (getdecls): Likewise. (gfc_get_array_descr_info): Likewise. (gfc_omp_firstprivatize_type_sizes): Likewise. (GTY): Likewise. gcc/go/ChangeLog: * config-lang.in: Rename .c names to .cc. * go-backend.cc: Likewise. * go-lang.cc: Likewise. * gospec.cc: Likewise. * lang-specs.h: Likewise. gcc/jit/ChangeLog: * config-lang.in: Rename .c names to .cc. * docs/_build/texinfo/libgccjit.texi: Likewise. * docs/internals/index.rst: Likewise. * jit-builtins.cc (builtins_manager::make_builtin_function): Likewise. * jit-playback.cc (fold_const_var): Likewise. (playback::context::~context): Likewise. (new_field): Likewise. (new_bitfield): Likewise. (new_compound_type): Likewise. (playback::compound_type::set_fields): Likewise. (global_set_init_rvalue): Likewise. (load_blob_in_ctor): Likewise. (new_global_initialized): Likewise. (double>): Likewise. (new_string_literal): Likewise. (as_truth_value): Likewise. (build_call): Likewise. (playback::context::build_cast): Likewise. (new_array_access): Likewise. (new_field_access): Likewise. (dereference): Likewise. (postprocess): Likewise. (add_jump): Likewise. (add_switch): Likewise. (build_goto_operands): Likewise. (playback::context::read_dump_file): Likewise. (init_types): Likewise. * jit-recording.cc (recording::context::get_int_type): Likewise. * jit-recording.h: Likewise. * libgccjit.cc (compatible_types): Likewise. (gcc_jit_context_acquire): Likewise. (gcc_jit_context_release): Likewise. (gcc_jit_context_new_child_context): Likewise. (gcc_jit_type_as_object): Likewise. (gcc_jit_context_get_type): Likewise. (gcc_jit_context_get_int_type): Likewise. (gcc_jit_type_get_pointer): Likewise. (gcc_jit_type_get_const): Likewise. (gcc_jit_type_get_volatile): Likewise. (gcc_jit_type_dyncast_array): Likewise. (gcc_jit_type_is_bool): Likewise. (gcc_jit_type_is_pointer): Likewise. (gcc_jit_type_is_integral): Likewise. (gcc_jit_type_dyncast_vector): Likewise. (gcc_jit_type_is_struct): Likewise. (gcc_jit_vector_type_get_num_units): Likewise. (gcc_jit_vector_type_get_element_type): Likewise. (gcc_jit_type_unqualified): Likewise. (gcc_jit_type_dyncast_function_ptr_type): Likewise. (gcc_jit_function_type_get_return_type): Likewise. (gcc_jit_function_type_get_param_count): Likewise. (gcc_jit_function_type_get_param_type): Likewise. (gcc_jit_context_new_array_type): Likewise. (gcc_jit_context_new_field): Likewise. (gcc_jit_field_as_object): Likewise. (gcc_jit_context_new_struct_type): Likewise. (gcc_jit_struct_as_type): Likewise. (gcc_jit_struct_set_fields): Likewise. (gcc_jit_struct_get_field_count): Likewise. (gcc_jit_context_new_union_type): Likewise. (gcc_jit_context_new_function_ptr_type): Likewise. (gcc_jit_param_as_rvalue): Likewise. (gcc_jit_context_new_function): Likewise. (gcc_jit_function_get_return_type): Likewise. (gcc_jit_function_dump_to_dot): Likewise. (gcc_jit_block_get_function): Likewise. (gcc_jit_global_set_initializer_rvalue): Likewise. (gcc_jit_rvalue_get_type): Likewise. (gcc_jit_context_new_rvalue_from_int): Likewise. (gcc_jit_context_one): Likewise. (gcc_jit_context_new_rvalue_from_double): Likewise. (gcc_jit_context_null): Likewise. (gcc_jit_context_new_string_literal): Likewise. (valid_binary_op_p): Likewise. (gcc_jit_context_new_binary_op): Likewise. (gcc_jit_context_new_comparison): Likewise. (gcc_jit_context_new_call): Likewise. (is_valid_cast): Likewise. (gcc_jit_context_new_cast): Likewise. (gcc_jit_object_get_context): Likewise. (gcc_jit_object_get_debug_string): Likewise. (gcc_jit_lvalue_access_field): Likewise. (gcc_jit_rvalue_access_field): Likewise. (gcc_jit_rvalue_dereference_field): Likewise. (gcc_jit_rvalue_dereference): Likewise. (gcc_jit_lvalue_get_address): Likewise. (gcc_jit_lvalue_set_tls_model): Likewise. (gcc_jit_lvalue_set_link_section): Likewise. (gcc_jit_function_new_local): Likewise. (gcc_jit_block_add_eval): Likewise. (gcc_jit_block_add_assignment): Likewise. (is_bool): Likewise. (gcc_jit_block_end_with_conditional): Likewise. (gcc_jit_block_add_comment): Likewise. (gcc_jit_block_end_with_jump): Likewise. (gcc_jit_block_end_with_return): Likewise. (gcc_jit_block_end_with_void_return): Likewise. (case_range_validator::case_range_validator): Likewise. (case_range_validator::validate): Likewise. (case_range_validator::get_wide_int): Likewise. (gcc_jit_block_end_with_switch): Likewise. (gcc_jit_context_set_str_option): Likewise. (gcc_jit_context_set_int_option): Likewise. (gcc_jit_context_set_bool_option): Likewise. (gcc_jit_context_set_bool_allow_unreachable_blocks): Likewise. (gcc_jit_context_set_bool_use_external_driver): Likewise. (gcc_jit_context_add_command_line_option): Likewise. (gcc_jit_context_add_driver_option): Likewise. (gcc_jit_context_enable_dump): Likewise. (gcc_jit_context_compile): Likewise. (gcc_jit_context_compile_to_file): Likewise. (gcc_jit_context_set_logfile): Likewise. (gcc_jit_context_dump_reproducer_to_file): Likewise. (gcc_jit_context_get_first_error): Likewise. (gcc_jit_context_get_last_error): Likewise. (gcc_jit_result_get_code): Likewise. (gcc_jit_result_get_global): Likewise. (gcc_jit_rvalue_set_bool_require_tail_call): Likewise. (gcc_jit_type_get_aligned): Likewise. (gcc_jit_type_get_vector): Likewise. (gcc_jit_function_get_address): Likewise. (gcc_jit_version_patchlevel): Likewise. (gcc_jit_block_add_extended_asm): Likewise. (gcc_jit_extended_asm_as_object): Likewise. (gcc_jit_extended_asm_set_volatile_flag): Likewise. (gcc_jit_extended_asm_set_inline_flag): Likewise. (gcc_jit_extended_asm_add_output_operand): Likewise. (gcc_jit_extended_asm_add_input_operand): Likewise. (gcc_jit_extended_asm_add_clobber): Likewise. * notes.txt: Likewise. gcc/lto/ChangeLog: * config-lang.in: Rename .c names to .cc. * lang-specs.h: Likewise. * lto-common.cc (gimple_register_canonical_type_1): Likewise. * lto-common.h: Likewise. * lto-dump.cc (lto_main): Likewise. * lto-lang.cc (handle_fnspec_attribute): Likewise. (lto_getdecls): Likewise. (lto_init): Likewise. * lto.cc (lto_main): Likewise. * lto.h: Likewise. gcc/objc/ChangeLog: * Make-lang.in: Rename .c names to .cc. * config-lang.in: Likewise. * lang-specs.h: Likewise. * objc-act.cc (objc_build_component_ref): Likewise. (objc_copy_binfo): Likewise. (lookup_method_in_hash_lists): Likewise. (objc_finish_foreach_loop): Likewise. * objc-act.h (objc_common_init_ts): Likewise. * objc-gnu-runtime-abi-01.cc: Likewise. * objc-lang.cc (struct lang_hooks): Likewise. * objc-map.cc: Likewise. * objc-next-runtime-abi-01.cc (generate_objc_symtab_decl): Likewise. * objc-runtime-shared-support.cc: Likewise. * objc-runtime-shared-support.h (build_protocol_initializer): Likewise. gcc/objcp/ChangeLog: * Make-lang.in: Rename .c names to .cc. * config-lang.in: Likewise. * lang-specs.h: Likewise. * objcp-decl.cc (objcp_end_compound_stmt): Likewise. * objcp-lang.cc (struct lang_hooks): Likewise. gcc/po/ChangeLog: * EXCLUDES: Rename .c names to .cc. libcpp/ChangeLog: * Makefile.in: Rename .c names to .cc. * charset.cc (convert_escape): Likewise. * directives.cc (directive_diagnostics): Likewise. (_cpp_handle_directive): Likewise. (lex_macro_node): Likewise. * include/cpplib.h (struct _cpp_file): Likewise. (PURE_ZERO): Likewise. (cpp_defined): Likewise. (cpp_error_at): Likewise. (cpp_forall_identifiers): Likewise. (cpp_compare_macros): Likewise. (cpp_get_converted_source): Likewise. (cpp_read_state): Likewise. (cpp_directive_only_process): Likewise. (struct cpp_decoded_char): Likewise. * include/line-map.h (enum lc_reason): Likewise. (enum location_aspect): Likewise. * include/mkdeps.h: Likewise. * init.cc (cpp_destroy): Likewise. (cpp_finish): Likewise. * internal.h (struct cpp_reader): Likewise. (_cpp_defined_macro_p): Likewise. (_cpp_backup_tokens_direct): Likewise. (_cpp_destroy_hashtable): Likewise. (_cpp_has_header): Likewise. (_cpp_expand_op_stack): Likewise. (_cpp_commit_buff): Likewise. (_cpp_restore_special_builtin): Likewise. (_cpp_bracket_include): Likewise. (_cpp_replacement_text_len): Likewise. (ufputs): Likewise. * line-map.cc (linemap_macro_loc_to_exp_point): Likewise. (linemap_check_files_exited): Likewise. (line_map_new_raw): Likewise. * traditional.cc (enum ls): Likewise.
2714 lines
65 KiB
C++
2714 lines
65 KiB
C++
/* A C version of Kahan's Floating Point Test "Paranoia"
|
|
|
|
Thos Sumner, UCSF, Feb. 1985
|
|
David Gay, BTL, Jan. 1986
|
|
|
|
This is a rewrite from the Pascal version by
|
|
|
|
B. A. Wichmann, 18 Jan. 1985
|
|
|
|
(and does NOT exhibit good C programming style).
|
|
|
|
Adjusted to use Standard C headers 19 Jan. 1992 (dmg);
|
|
|
|
(C) Apr 19 1983 in BASIC version by:
|
|
Professor W. M. Kahan,
|
|
567 Evans Hall
|
|
Electrical Engineering & Computer Science Dept.
|
|
University of California
|
|
Berkeley, California 94720
|
|
USA
|
|
|
|
converted to Pascal by:
|
|
B. A. Wichmann
|
|
National Physical Laboratory
|
|
Teddington Middx
|
|
TW11 OLW
|
|
UK
|
|
|
|
converted to C by:
|
|
|
|
David M. Gay and Thos Sumner
|
|
AT&T Bell Labs Computer Center, Rm. U-76
|
|
600 Mountain Avenue University of California
|
|
Murray Hill, NJ 07974 San Francisco, CA 94143
|
|
USA USA
|
|
|
|
with simultaneous corrections to the Pascal source (reflected
|
|
in the Pascal source available over netlib).
|
|
[A couple of bug fixes from dgh = sun!dhough incorporated 31 July 1986.]
|
|
|
|
Reports of results on various systems from all the versions
|
|
of Paranoia are being collected by Richard Karpinski at the
|
|
same address as Thos Sumner. This includes sample outputs,
|
|
bug reports, and criticisms.
|
|
|
|
You may copy this program freely if you acknowledge its source.
|
|
Comments on the Pascal version to NPL, please.
|
|
|
|
The following is from the introductory commentary from Wichmann's work:
|
|
|
|
The BASIC program of Kahan is written in Microsoft BASIC using many
|
|
facilities which have no exact analogy in Pascal. The Pascal
|
|
version below cannot therefore be exactly the same. Rather than be
|
|
a minimal transcription of the BASIC program, the Pascal coding
|
|
follows the conventional style of block-structured languages. Hence
|
|
the Pascal version could be useful in producing versions in other
|
|
structured languages.
|
|
|
|
Rather than use identifiers of minimal length (which therefore have
|
|
little mnemonic significance), the Pascal version uses meaningful
|
|
identifiers as follows [Note: A few changes have been made for C]:
|
|
|
|
|
|
BASIC C BASIC C BASIC C
|
|
|
|
A J S StickyBit
|
|
A1 AInverse J0 NoErrors T
|
|
B Radix [Failure] T0 Underflow
|
|
B1 BInverse J1 NoErrors T2 ThirtyTwo
|
|
B2 RadixD2 [SeriousDefect] T5 OneAndHalf
|
|
B9 BMinusU2 J2 NoErrors T7 TwentySeven
|
|
C [Defect] T8 TwoForty
|
|
C1 CInverse J3 NoErrors U OneUlp
|
|
D [Flaw] U0 UnderflowThreshold
|
|
D4 FourD K PageNo U1
|
|
E0 L Milestone U2
|
|
E1 M V
|
|
E2 Exp2 N V0
|
|
E3 N1 V8
|
|
E5 MinSqEr O Zero V9
|
|
E6 SqEr O1 One W
|
|
E7 MaxSqEr O2 Two X
|
|
E8 O3 Three X1
|
|
E9 O4 Four X8
|
|
F1 MinusOne O5 Five X9 Random1
|
|
F2 Half O8 Eight Y
|
|
F3 Third O9 Nine Y1
|
|
F6 P Precision Y2
|
|
F9 Q Y9 Random2
|
|
G1 GMult Q8 Z
|
|
G2 GDiv Q9 Z0 PseudoZero
|
|
G3 GAddSub R Z1
|
|
H R1 RMult Z2
|
|
H1 HInverse R2 RDiv Z9
|
|
I R3 RAddSub
|
|
IO NoTrials R4 RSqrt
|
|
I3 IEEE R9 Random9
|
|
|
|
SqRWrng
|
|
|
|
All the variables in BASIC are true variables and in consequence,
|
|
the program is more difficult to follow since the "constants" must
|
|
be determined (the glossary is very helpful). The Pascal version
|
|
uses Real constants, but checks are added to ensure that the values
|
|
are correctly converted by the compiler.
|
|
|
|
The major textual change to the Pascal version apart from the
|
|
identifiersis that named procedures are used, inserting parameters
|
|
wherehelpful. New procedures are also introduced. The
|
|
correspondence is as follows:
|
|
|
|
|
|
BASIC Pascal
|
|
lines
|
|
|
|
90- 140 Pause
|
|
170- 250 Instructions
|
|
380- 460 Heading
|
|
480- 670 Characteristics
|
|
690- 870 History
|
|
2940-2950 Random
|
|
3710-3740 NewD
|
|
4040-4080 DoesYequalX
|
|
4090-4110 PrintIfNPositive
|
|
4640-4850 TestPartialUnderflow
|
|
|
|
*/
|
|
|
|
/* This version of paranoia has been modified to work with GCC's internal
|
|
software floating point emulation library, as a sanity check of same.
|
|
|
|
I'm doing this in C++ so that I can do operator overloading and not
|
|
have to modify so damned much of the existing code. */
|
|
|
|
extern "C" {
|
|
#include <stdio.h>
|
|
#include <stddef.h>
|
|
#include <limits.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
#include <unistd.h>
|
|
#include <float.h>
|
|
|
|
/* This part is made all the more awful because many gcc headers are
|
|
not prepared at all to be parsed as C++. The biggest stickler
|
|
here is const structure members. So we include exactly the pieces
|
|
that we need. */
|
|
|
|
#define GTY(x)
|
|
|
|
#include "ansidecl.h"
|
|
#include "auto-host.h"
|
|
#include "hwint.h"
|
|
|
|
#undef EXTRA_MODES_FILE
|
|
|
|
struct rtx_def;
|
|
typedef struct rtx_def *rtx;
|
|
struct rtvec_def;
|
|
typedef struct rtvec_def *rtvec;
|
|
union tree_node;
|
|
typedef union tree_node *tree;
|
|
|
|
#define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
|
|
enum tree_code {
|
|
#include "tree.def"
|
|
LAST_AND_UNUSED_TREE_CODE
|
|
};
|
|
#undef DEFTREECODE
|
|
|
|
#define class klass
|
|
|
|
#include "real.h"
|
|
|
|
#undef class
|
|
}
|
|
|
|
/* We never produce signals from the library. Thus setjmp need do nothing. */
|
|
#undef setjmp
|
|
#define setjmp(x) (0)
|
|
|
|
static bool verbose = false;
|
|
static int verbose_index = 0;
|
|
|
|
/* ====================================================================== */
|
|
/* The implementation of the abstract floating point class based on gcc's
|
|
real.cc. I.e. the object of this exercise. Templated so that we can
|
|
all fp sizes. */
|
|
|
|
class real_c_float
|
|
{
|
|
public:
|
|
static const enum machine_mode MODE = SFmode;
|
|
|
|
private:
|
|
static const int external_max = 128 / 32;
|
|
static const int internal_max
|
|
= (sizeof (REAL_VALUE_TYPE) + sizeof (long) + 1) / sizeof (long);
|
|
long image[external_max < internal_max ? internal_max : external_max];
|
|
|
|
void from_long(long);
|
|
void from_str(const char *);
|
|
void binop(int code, const real_c_float&);
|
|
void unop(int code);
|
|
bool cmp(int code, const real_c_float&) const;
|
|
|
|
public:
|
|
real_c_float()
|
|
{ }
|
|
real_c_float(long l)
|
|
{ from_long(l); }
|
|
real_c_float(const char *s)
|
|
{ from_str(s); }
|
|
real_c_float(const real_c_float &b)
|
|
{ memcpy(image, b.image, sizeof(image)); }
|
|
|
|
const real_c_float& operator= (long l)
|
|
{ from_long(l); return *this; }
|
|
const real_c_float& operator= (const char *s)
|
|
{ from_str(s); return *this; }
|
|
const real_c_float& operator= (const real_c_float &b)
|
|
{ memcpy(image, b.image, sizeof(image)); return *this; }
|
|
|
|
const real_c_float& operator+= (const real_c_float &b)
|
|
{ binop(PLUS_EXPR, b); return *this; }
|
|
const real_c_float& operator-= (const real_c_float &b)
|
|
{ binop(MINUS_EXPR, b); return *this; }
|
|
const real_c_float& operator*= (const real_c_float &b)
|
|
{ binop(MULT_EXPR, b); return *this; }
|
|
const real_c_float& operator/= (const real_c_float &b)
|
|
{ binop(RDIV_EXPR, b); return *this; }
|
|
|
|
real_c_float operator- () const
|
|
{ real_c_float r(*this); r.unop(NEGATE_EXPR); return r; }
|
|
real_c_float abs () const
|
|
{ real_c_float r(*this); r.unop(ABS_EXPR); return r; }
|
|
|
|
bool operator < (const real_c_float &b) const { return cmp(LT_EXPR, b); }
|
|
bool operator <= (const real_c_float &b) const { return cmp(LE_EXPR, b); }
|
|
bool operator == (const real_c_float &b) const { return cmp(EQ_EXPR, b); }
|
|
bool operator != (const real_c_float &b) const { return cmp(NE_EXPR, b); }
|
|
bool operator >= (const real_c_float &b) const { return cmp(GE_EXPR, b); }
|
|
bool operator > (const real_c_float &b) const { return cmp(GT_EXPR, b); }
|
|
|
|
const char * str () const;
|
|
const char * hex () const;
|
|
long integer () const;
|
|
int exp () const;
|
|
void ldexp (int);
|
|
};
|
|
|
|
void
|
|
real_c_float::from_long (long l)
|
|
{
|
|
REAL_VALUE_TYPE f;
|
|
|
|
real_from_integer (&f, MODE, l, l < 0 ? -1 : 0, 0);
|
|
real_to_target (image, &f, MODE);
|
|
}
|
|
|
|
void
|
|
real_c_float::from_str (const char *s)
|
|
{
|
|
REAL_VALUE_TYPE f;
|
|
const char *p = s;
|
|
|
|
if (*p == '-' || *p == '+')
|
|
p++;
|
|
if (strcasecmp(p, "inf") == 0)
|
|
{
|
|
real_inf (&f);
|
|
if (*s == '-')
|
|
real_arithmetic (&f, NEGATE_EXPR, &f, NULL);
|
|
}
|
|
else if (strcasecmp(p, "nan") == 0)
|
|
real_nan (&f, "", 1, MODE);
|
|
else
|
|
real_from_string (&f, s);
|
|
|
|
real_to_target (image, &f, MODE);
|
|
}
|
|
|
|
void
|
|
real_c_float::binop (int code, const real_c_float &b)
|
|
{
|
|
REAL_VALUE_TYPE ai, bi, ri;
|
|
|
|
real_from_target (&ai, image, MODE);
|
|
real_from_target (&bi, b.image, MODE);
|
|
real_arithmetic (&ri, code, &ai, &bi);
|
|
real_to_target (image, &ri, MODE);
|
|
|
|
if (verbose)
|
|
{
|
|
char ab[64], bb[64], rb[64];
|
|
const real_format *fmt = real_format_for_mode[MODE - QFmode];
|
|
const int digits = (fmt->p * fmt->log2_b + 3) / 4;
|
|
char symbol_for_code;
|
|
|
|
real_from_target (&ri, image, MODE);
|
|
real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
|
|
real_to_hexadecimal (bb, &bi, sizeof(bb), digits, 0);
|
|
real_to_hexadecimal (rb, &ri, sizeof(rb), digits, 0);
|
|
|
|
switch (code)
|
|
{
|
|
case PLUS_EXPR:
|
|
symbol_for_code = '+';
|
|
break;
|
|
case MINUS_EXPR:
|
|
symbol_for_code = '-';
|
|
break;
|
|
case MULT_EXPR:
|
|
symbol_for_code = '*';
|
|
break;
|
|
case RDIV_EXPR:
|
|
symbol_for_code = '/';
|
|
break;
|
|
default:
|
|
abort ();
|
|
}
|
|
|
|
fprintf (stderr, "%6d: %s %c %s = %s\n", verbose_index++,
|
|
ab, symbol_for_code, bb, rb);
|
|
}
|
|
}
|
|
|
|
void
|
|
real_c_float::unop (int code)
|
|
{
|
|
REAL_VALUE_TYPE ai, ri;
|
|
|
|
real_from_target (&ai, image, MODE);
|
|
real_arithmetic (&ri, code, &ai, NULL);
|
|
real_to_target (image, &ri, MODE);
|
|
|
|
if (verbose)
|
|
{
|
|
char ab[64], rb[64];
|
|
const real_format *fmt = real_format_for_mode[MODE - QFmode];
|
|
const int digits = (fmt->p * fmt->log2_b + 3) / 4;
|
|
const char *symbol_for_code;
|
|
|
|
real_from_target (&ri, image, MODE);
|
|
real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
|
|
real_to_hexadecimal (rb, &ri, sizeof(rb), digits, 0);
|
|
|
|
switch (code)
|
|
{
|
|
case NEGATE_EXPR:
|
|
symbol_for_code = "-";
|
|
break;
|
|
case ABS_EXPR:
|
|
symbol_for_code = "abs ";
|
|
break;
|
|
default:
|
|
abort ();
|
|
}
|
|
|
|
fprintf (stderr, "%6d: %s%s = %s\n", verbose_index++,
|
|
symbol_for_code, ab, rb);
|
|
}
|
|
}
|
|
|
|
bool
|
|
real_c_float::cmp (int code, const real_c_float &b) const
|
|
{
|
|
REAL_VALUE_TYPE ai, bi;
|
|
bool ret;
|
|
|
|
real_from_target (&ai, image, MODE);
|
|
real_from_target (&bi, b.image, MODE);
|
|
ret = real_compare (code, &ai, &bi);
|
|
|
|
if (verbose)
|
|
{
|
|
char ab[64], bb[64];
|
|
const real_format *fmt = real_format_for_mode[MODE - QFmode];
|
|
const int digits = (fmt->p * fmt->log2_b + 3) / 4;
|
|
const char *symbol_for_code;
|
|
|
|
real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
|
|
real_to_hexadecimal (bb, &bi, sizeof(bb), digits, 0);
|
|
|
|
switch (code)
|
|
{
|
|
case LT_EXPR:
|
|
symbol_for_code = "<";
|
|
break;
|
|
case LE_EXPR:
|
|
symbol_for_code = "<=";
|
|
break;
|
|
case EQ_EXPR:
|
|
symbol_for_code = "==";
|
|
break;
|
|
case NE_EXPR:
|
|
symbol_for_code = "!=";
|
|
break;
|
|
case GE_EXPR:
|
|
symbol_for_code = ">=";
|
|
break;
|
|
case GT_EXPR:
|
|
symbol_for_code = ">";
|
|
break;
|
|
default:
|
|
abort ();
|
|
}
|
|
|
|
fprintf (stderr, "%6d: %s %s %s = %s\n", verbose_index++,
|
|
ab, symbol_for_code, bb, (ret ? "true" : "false"));
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
const char *
|
|
real_c_float::str() const
|
|
{
|
|
REAL_VALUE_TYPE f;
|
|
const real_format *fmt = real_format_for_mode[MODE - QFmode];
|
|
const int digits = int(fmt->p * fmt->log2_b * .30102999566398119521 + 1);
|
|
|
|
real_from_target (&f, image, MODE);
|
|
char *buf = new char[digits + 10];
|
|
real_to_decimal (buf, &f, digits+10, digits, 0);
|
|
|
|
return buf;
|
|
}
|
|
|
|
const char *
|
|
real_c_float::hex() const
|
|
{
|
|
REAL_VALUE_TYPE f;
|
|
const real_format *fmt = real_format_for_mode[MODE - QFmode];
|
|
const int digits = (fmt->p * fmt->log2_b + 3) / 4;
|
|
|
|
real_from_target (&f, image, MODE);
|
|
char *buf = new char[digits + 10];
|
|
real_to_hexadecimal (buf, &f, digits+10, digits, 0);
|
|
|
|
return buf;
|
|
}
|
|
|
|
long
|
|
real_c_float::integer() const
|
|
{
|
|
REAL_VALUE_TYPE f;
|
|
real_from_target (&f, image, MODE);
|
|
return real_to_integer (&f);
|
|
}
|
|
|
|
int
|
|
real_c_float::exp() const
|
|
{
|
|
REAL_VALUE_TYPE f;
|
|
real_from_target (&f, image, MODE);
|
|
return real_exponent (&f);
|
|
}
|
|
|
|
void
|
|
real_c_float::ldexp (int exp)
|
|
{
|
|
REAL_VALUE_TYPE ai;
|
|
|
|
real_from_target (&ai, image, MODE);
|
|
real_ldexp (&ai, &ai, exp);
|
|
real_to_target (image, &ai, MODE);
|
|
}
|
|
|
|
/* ====================================================================== */
|
|
/* An implementation of the abstract floating point class that uses native
|
|
arithmetic. Exists for reference and debugging. */
|
|
|
|
template<typename T>
|
|
class native_float
|
|
{
|
|
private:
|
|
// Force intermediate results back to memory.
|
|
volatile T image;
|
|
|
|
static T from_str (const char *);
|
|
static T do_abs (T);
|
|
static T verbose_binop (T, char, T, T);
|
|
static T verbose_unop (const char *, T, T);
|
|
static bool verbose_cmp (T, const char *, T, bool);
|
|
|
|
public:
|
|
native_float()
|
|
{ }
|
|
native_float(long l)
|
|
{ image = l; }
|
|
native_float(const char *s)
|
|
{ image = from_str(s); }
|
|
native_float(const native_float &b)
|
|
{ image = b.image; }
|
|
|
|
const native_float& operator= (long l)
|
|
{ image = l; return *this; }
|
|
const native_float& operator= (const char *s)
|
|
{ image = from_str(s); return *this; }
|
|
const native_float& operator= (const native_float &b)
|
|
{ image = b.image; return *this; }
|
|
|
|
const native_float& operator+= (const native_float &b)
|
|
{
|
|
image = verbose_binop(image, '+', b.image, image + b.image);
|
|
return *this;
|
|
}
|
|
const native_float& operator-= (const native_float &b)
|
|
{
|
|
image = verbose_binop(image, '-', b.image, image - b.image);
|
|
return *this;
|
|
}
|
|
const native_float& operator*= (const native_float &b)
|
|
{
|
|
image = verbose_binop(image, '*', b.image, image * b.image);
|
|
return *this;
|
|
}
|
|
const native_float& operator/= (const native_float &b)
|
|
{
|
|
image = verbose_binop(image, '/', b.image, image / b.image);
|
|
return *this;
|
|
}
|
|
|
|
native_float operator- () const
|
|
{
|
|
native_float r;
|
|
r.image = verbose_unop("-", image, -image);
|
|
return r;
|
|
}
|
|
native_float abs () const
|
|
{
|
|
native_float r;
|
|
r.image = verbose_unop("abs ", image, do_abs(image));
|
|
return r;
|
|
}
|
|
|
|
bool operator < (const native_float &b) const
|
|
{ return verbose_cmp(image, "<", b.image, image < b.image); }
|
|
bool operator <= (const native_float &b) const
|
|
{ return verbose_cmp(image, "<=", b.image, image <= b.image); }
|
|
bool operator == (const native_float &b) const
|
|
{ return verbose_cmp(image, "==", b.image, image == b.image); }
|
|
bool operator != (const native_float &b) const
|
|
{ return verbose_cmp(image, "!=", b.image, image != b.image); }
|
|
bool operator >= (const native_float &b) const
|
|
{ return verbose_cmp(image, ">=", b.image, image >= b.image); }
|
|
bool operator > (const native_float &b) const
|
|
{ return verbose_cmp(image, ">", b.image, image > b.image); }
|
|
|
|
const char * str () const;
|
|
const char * hex () const;
|
|
long integer () const
|
|
{ return long(image); }
|
|
int exp () const;
|
|
void ldexp (int);
|
|
};
|
|
|
|
template<typename T>
|
|
inline T
|
|
native_float<T>::from_str (const char *s)
|
|
{
|
|
return strtold (s, NULL);
|
|
}
|
|
|
|
template<>
|
|
inline float
|
|
native_float<float>::from_str (const char *s)
|
|
{
|
|
return strtof (s, NULL);
|
|
}
|
|
|
|
template<>
|
|
inline double
|
|
native_float<double>::from_str (const char *s)
|
|
{
|
|
return strtod (s, NULL);
|
|
}
|
|
|
|
template<typename T>
|
|
inline T
|
|
native_float<T>::do_abs (T image)
|
|
{
|
|
return fabsl (image);
|
|
}
|
|
|
|
template<>
|
|
inline float
|
|
native_float<float>::do_abs (float image)
|
|
{
|
|
return fabsf (image);
|
|
}
|
|
|
|
template<>
|
|
inline double
|
|
native_float<double>::do_abs (double image)
|
|
{
|
|
return fabs (image);
|
|
}
|
|
|
|
template<typename T>
|
|
T
|
|
native_float<T>::verbose_binop (T a, char symbol, T b, T r)
|
|
{
|
|
if (verbose)
|
|
{
|
|
const int digits = int(sizeof(T) * CHAR_BIT / 4) - 1;
|
|
#ifdef NO_LONG_DOUBLE
|
|
fprintf (stderr, "%6d: %.*a %c %.*a = %.*a\n", verbose_index++,
|
|
digits, (double)a, symbol,
|
|
digits, (double)b, digits, (double)r);
|
|
#else
|
|
fprintf (stderr, "%6d: %.*La %c %.*La = %.*La\n", verbose_index++,
|
|
digits, (long double)a, symbol,
|
|
digits, (long double)b, digits, (long double)r);
|
|
#endif
|
|
}
|
|
return r;
|
|
}
|
|
|
|
template<typename T>
|
|
T
|
|
native_float<T>::verbose_unop (const char *symbol, T a, T r)
|
|
{
|
|
if (verbose)
|
|
{
|
|
const int digits = int(sizeof(T) * CHAR_BIT / 4) - 1;
|
|
#ifdef NO_LONG_DOUBLE
|
|
fprintf (stderr, "%6d: %s%.*a = %.*a\n", verbose_index++,
|
|
symbol, digits, (double)a, digits, (double)r);
|
|
#else
|
|
fprintf (stderr, "%6d: %s%.*La = %.*La\n", verbose_index++,
|
|
symbol, digits, (long double)a, digits, (long double)r);
|
|
#endif
|
|
}
|
|
return r;
|
|
}
|
|
|
|
template<typename T>
|
|
bool
|
|
native_float<T>::verbose_cmp (T a, const char *symbol, T b, bool r)
|
|
{
|
|
if (verbose)
|
|
{
|
|
const int digits = int(sizeof(T) * CHAR_BIT / 4) - 1;
|
|
#ifndef NO_LONG_DOUBLE
|
|
fprintf (stderr, "%6d: %.*a %s %.*a = %s\n", verbose_index++,
|
|
digits, (double)a, symbol,
|
|
digits, (double)b, (r ? "true" : "false"));
|
|
#else
|
|
fprintf (stderr, "%6d: %.*La %s %.*La = %s\n", verbose_index++,
|
|
digits, (long double)a, symbol,
|
|
digits, (long double)b, (r ? "true" : "false"));
|
|
#endif
|
|
}
|
|
return r;
|
|
}
|
|
|
|
template<typename T>
|
|
const char *
|
|
native_float<T>::str() const
|
|
{
|
|
char *buf = new char[50];
|
|
const int digits = int(sizeof(T) * CHAR_BIT * .30102999566398119521 + 1);
|
|
#ifndef NO_LONG_DOUBLE
|
|
sprintf (buf, "%.*e", digits - 1, (double) image);
|
|
#else
|
|
sprintf (buf, "%.*Le", digits - 1, (long double) image);
|
|
#endif
|
|
return buf;
|
|
}
|
|
|
|
template<typename T>
|
|
const char *
|
|
native_float<T>::hex() const
|
|
{
|
|
char *buf = new char[50];
|
|
const int digits = int(sizeof(T) * CHAR_BIT / 4);
|
|
#ifndef NO_LONG_DOUBLE
|
|
sprintf (buf, "%.*a", digits - 1, (double) image);
|
|
#else
|
|
sprintf (buf, "%.*La", digits - 1, (long double) image);
|
|
#endif
|
|
return buf;
|
|
}
|
|
|
|
template<typename T>
|
|
int
|
|
native_float<T>::exp() const
|
|
{
|
|
int e;
|
|
frexp (image, &e);
|
|
return e;
|
|
}
|
|
|
|
template<typename T>
|
|
void
|
|
native_float<T>::ldexp (int exp)
|
|
{
|
|
image = ldexpl (image, exp);
|
|
}
|
|
|
|
template<>
|
|
void
|
|
native_float<float>::ldexp (int exp)
|
|
{
|
|
image = ldexpf (image, exp);
|
|
}
|
|
|
|
template<>
|
|
void
|
|
native_float<double>::ldexp (int exp)
|
|
{
|
|
image = ::ldexp (image, exp);
|
|
}
|
|
|
|
/* ====================================================================== */
|
|
/* Some libm routines that Paranoia expects to be available. */
|
|
|
|
template<typename FLOAT>
|
|
inline FLOAT
|
|
FABS (const FLOAT &f)
|
|
{
|
|
return f.abs();
|
|
}
|
|
|
|
template<typename FLOAT, typename RHS>
|
|
inline FLOAT
|
|
operator+ (const FLOAT &a, const RHS &b)
|
|
{
|
|
return FLOAT(a) += FLOAT(b);
|
|
}
|
|
|
|
template<typename FLOAT, typename RHS>
|
|
inline FLOAT
|
|
operator- (const FLOAT &a, const RHS &b)
|
|
{
|
|
return FLOAT(a) -= FLOAT(b);
|
|
}
|
|
|
|
template<typename FLOAT, typename RHS>
|
|
inline FLOAT
|
|
operator* (const FLOAT &a, const RHS &b)
|
|
{
|
|
return FLOAT(a) *= FLOAT(b);
|
|
}
|
|
|
|
template<typename FLOAT, typename RHS>
|
|
inline FLOAT
|
|
operator/ (const FLOAT &a, const RHS &b)
|
|
{
|
|
return FLOAT(a) /= FLOAT(b);
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
FLOOR (const FLOAT &f)
|
|
{
|
|
/* ??? This is only correct when F is representable as an integer. */
|
|
long i = f.integer();
|
|
FLOAT r;
|
|
|
|
r = i;
|
|
if (i < 0 && f != r)
|
|
r = i - 1;
|
|
|
|
return r;
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
SQRT (const FLOAT &f)
|
|
{
|
|
#if 0
|
|
FLOAT zero = long(0);
|
|
FLOAT two = 2;
|
|
FLOAT one = 1;
|
|
FLOAT diff, diff2;
|
|
FLOAT z, t;
|
|
|
|
if (f == zero)
|
|
return zero;
|
|
if (f < zero)
|
|
return zero / zero;
|
|
if (f == one)
|
|
return f;
|
|
|
|
z = f;
|
|
z.ldexp (-f.exp() / 2);
|
|
|
|
diff2 = FABS (z * z - f);
|
|
if (diff2 > zero)
|
|
while (1)
|
|
{
|
|
t = (f / (two * z)) + (z / two);
|
|
diff = FABS (t * t - f);
|
|
if (diff >= diff2)
|
|
break;
|
|
z = t;
|
|
diff2 = diff;
|
|
}
|
|
|
|
return z;
|
|
#elif defined(NO_LONG_DOUBLE)
|
|
double d;
|
|
char buf[64];
|
|
|
|
d = strtod (f.hex(), NULL);
|
|
d = sqrt (d);
|
|
sprintf(buf, "%.35a", d);
|
|
|
|
return FLOAT(buf);
|
|
#else
|
|
long double ld;
|
|
char buf[64];
|
|
|
|
ld = strtold (f.hex(), NULL);
|
|
ld = sqrtl (ld);
|
|
sprintf(buf, "%.35La", ld);
|
|
|
|
return FLOAT(buf);
|
|
#endif
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
LOG (FLOAT x)
|
|
{
|
|
#if 0
|
|
FLOAT zero = long(0);
|
|
FLOAT one = 1;
|
|
|
|
if (x <= zero)
|
|
return zero / zero;
|
|
if (x == one)
|
|
return zero;
|
|
|
|
int exp = x.exp() - 1;
|
|
x.ldexp(-exp);
|
|
|
|
FLOAT xm1 = x - one;
|
|
FLOAT y = xm1;
|
|
long n = 2;
|
|
|
|
FLOAT sum = xm1;
|
|
while (1)
|
|
{
|
|
y *= xm1;
|
|
FLOAT term = y / FLOAT (n);
|
|
FLOAT next = sum + term;
|
|
if (next == sum)
|
|
break;
|
|
sum = next;
|
|
if (++n == 1000)
|
|
break;
|
|
}
|
|
|
|
if (exp)
|
|
sum += FLOAT (exp) * FLOAT(".69314718055994530941");
|
|
|
|
return sum;
|
|
#elif defined (NO_LONG_DOUBLE)
|
|
double d;
|
|
char buf[64];
|
|
|
|
d = strtod (x.hex(), NULL);
|
|
d = log (d);
|
|
sprintf(buf, "%.35a", d);
|
|
|
|
return FLOAT(buf);
|
|
#else
|
|
long double ld;
|
|
char buf[64];
|
|
|
|
ld = strtold (x.hex(), NULL);
|
|
ld = logl (ld);
|
|
sprintf(buf, "%.35La", ld);
|
|
|
|
return FLOAT(buf);
|
|
#endif
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
EXP (const FLOAT &x)
|
|
{
|
|
/* Cheat. */
|
|
#ifdef NO_LONG_DOUBLE
|
|
double d;
|
|
char buf[64];
|
|
|
|
d = strtod (x.hex(), NULL);
|
|
d = exp (d);
|
|
sprintf(buf, "%.35a", d);
|
|
|
|
return FLOAT(buf);
|
|
#else
|
|
long double ld;
|
|
char buf[64];
|
|
|
|
ld = strtold (x.hex(), NULL);
|
|
ld = expl (ld);
|
|
sprintf(buf, "%.35La", ld);
|
|
|
|
return FLOAT(buf);
|
|
#endif
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
POW (const FLOAT &base, const FLOAT &exp)
|
|
{
|
|
/* Cheat. */
|
|
#ifdef NO_LONG_DOUBLE
|
|
double d1, d2;
|
|
char buf[64];
|
|
|
|
d1 = strtod (base.hex(), NULL);
|
|
d2 = strtod (exp.hex(), NULL);
|
|
d1 = pow (d1, d2);
|
|
sprintf(buf, "%.35a", d1);
|
|
|
|
return FLOAT(buf);
|
|
#else
|
|
long double ld1, ld2;
|
|
char buf[64];
|
|
|
|
ld1 = strtold (base.hex(), NULL);
|
|
ld2 = strtold (exp.hex(), NULL);
|
|
ld1 = powl (ld1, ld2);
|
|
sprintf(buf, "%.35La", ld1);
|
|
|
|
return FLOAT(buf);
|
|
#endif
|
|
}
|
|
|
|
/* ====================================================================== */
|
|
/* Real Paranoia begins again here. We wrap the thing in a template so
|
|
that we can instantiate it for each floating point type we care for. */
|
|
|
|
int NoTrials = 20; /*Number of tests for commutativity. */
|
|
bool do_pause = false;
|
|
|
|
enum Guard { No, Yes };
|
|
enum Rounding { Other, Rounded, Chopped };
|
|
enum Class { Failure, Serious, Defect, Flaw };
|
|
|
|
template<typename FLOAT>
|
|
struct Paranoia
|
|
{
|
|
FLOAT Radix, BInvrse, RadixD2, BMinusU2;
|
|
|
|
/* Small floating point constants. */
|
|
FLOAT Zero;
|
|
FLOAT Half;
|
|
FLOAT One;
|
|
FLOAT Two;
|
|
FLOAT Three;
|
|
FLOAT Four;
|
|
FLOAT Five;
|
|
FLOAT Eight;
|
|
FLOAT Nine;
|
|
FLOAT TwentySeven;
|
|
FLOAT ThirtyTwo;
|
|
FLOAT TwoForty;
|
|
FLOAT MinusOne;
|
|
FLOAT OneAndHalf;
|
|
|
|
/* Declarations of Variables. */
|
|
int Indx;
|
|
char ch[8];
|
|
FLOAT AInvrse, A1;
|
|
FLOAT C, CInvrse;
|
|
FLOAT D, FourD;
|
|
FLOAT E0, E1, Exp2, E3, MinSqEr;
|
|
FLOAT SqEr, MaxSqEr, E9;
|
|
FLOAT Third;
|
|
FLOAT F6, F9;
|
|
FLOAT H, HInvrse;
|
|
int I;
|
|
FLOAT StickyBit, J;
|
|
FLOAT MyZero;
|
|
FLOAT Precision;
|
|
FLOAT Q, Q9;
|
|
FLOAT R, Random9;
|
|
FLOAT T, Underflow, S;
|
|
FLOAT OneUlp, UfThold, U1, U2;
|
|
FLOAT V, V0, V9;
|
|
FLOAT W;
|
|
FLOAT X, X1, X2, X8, Random1;
|
|
FLOAT Y, Y1, Y2, Random2;
|
|
FLOAT Z, PseudoZero, Z1, Z2, Z9;
|
|
int ErrCnt[4];
|
|
int Milestone;
|
|
int PageNo;
|
|
int M, N, N1;
|
|
Guard GMult, GDiv, GAddSub;
|
|
Rounding RMult, RDiv, RAddSub, RSqrt;
|
|
int Break, Done, NotMonot, Monot, Anomaly, IEEE, SqRWrng, UfNGrad;
|
|
|
|
/* Computed constants. */
|
|
/*U1 gap below 1.0, i.e, 1.0-U1 is next number below 1.0 */
|
|
/*U2 gap above 1.0, i.e, 1.0+U2 is next number above 1.0 */
|
|
|
|
int main ();
|
|
|
|
FLOAT Sign (FLOAT);
|
|
FLOAT Random ();
|
|
void Pause ();
|
|
void BadCond (int, const char *);
|
|
void SqXMinX (int);
|
|
void TstCond (int, int, const char *);
|
|
void notify (const char *);
|
|
void IsYeqX ();
|
|
void NewD ();
|
|
void PrintIfNPositive ();
|
|
void SR3750 ();
|
|
void TstPtUf ();
|
|
|
|
// Pretend we're bss.
|
|
Paranoia() { memset(this, 0, sizeof (*this)); }
|
|
};
|
|
|
|
template<typename FLOAT>
|
|
int
|
|
Paranoia<FLOAT>::main()
|
|
{
|
|
/* First two assignments use integer right-hand sides. */
|
|
Zero = long(0);
|
|
One = long(1);
|
|
Two = long(2);
|
|
Three = long(3);
|
|
Four = long(4);
|
|
Five = long(5);
|
|
Eight = long(8);
|
|
Nine = long(9);
|
|
TwentySeven = long(27);
|
|
ThirtyTwo = long(32);
|
|
TwoForty = long(240);
|
|
MinusOne = long(-1);
|
|
Half = "0x1p-1";
|
|
OneAndHalf = "0x3p-1";
|
|
ErrCnt[Failure] = 0;
|
|
ErrCnt[Serious] = 0;
|
|
ErrCnt[Defect] = 0;
|
|
ErrCnt[Flaw] = 0;
|
|
PageNo = 1;
|
|
/*=============================================*/
|
|
Milestone = 7;
|
|
/*=============================================*/
|
|
printf ("Program is now RUNNING tests on small integers:\n");
|
|
|
|
TstCond (Failure, (Zero + Zero == Zero), "0+0 != 0");
|
|
TstCond (Failure, (One - One == Zero), "1-1 != 0");
|
|
TstCond (Failure, (One > Zero), "1 <= 0");
|
|
TstCond (Failure, (One + One == Two), "1+1 != 2");
|
|
|
|
Z = -Zero;
|
|
if (Z != Zero)
|
|
{
|
|
ErrCnt[Failure] = ErrCnt[Failure] + 1;
|
|
printf ("Comparison alleges that -0.0 is Non-zero!\n");
|
|
U2 = "0.001";
|
|
Radix = 1;
|
|
TstPtUf ();
|
|
}
|
|
|
|
TstCond (Failure, (Three == Two + One), "3 != 2+1");
|
|
TstCond (Failure, (Four == Three + One), "4 != 3+1");
|
|
TstCond (Failure, (Four + Two * (-Two) == Zero), "4 + 2*(-2) != 0");
|
|
TstCond (Failure, (Four - Three - One == Zero), "4-3-1 != 0");
|
|
|
|
TstCond (Failure, (MinusOne == (Zero - One)), "-1 != 0-1");
|
|
TstCond (Failure, (MinusOne + One == Zero), "-1+1 != 0");
|
|
TstCond (Failure, (One + MinusOne == Zero), "1+(-1) != 0");
|
|
TstCond (Failure, (MinusOne + FABS (One) == Zero), "-1+abs(1) != 0");
|
|
TstCond (Failure, (MinusOne + MinusOne * MinusOne == Zero),
|
|
"-1+(-1)*(-1) != 0");
|
|
|
|
TstCond (Failure, Half + MinusOne + Half == Zero, "1/2 + (-1) + 1/2 != 0");
|
|
|
|
/*=============================================*/
|
|
Milestone = 10;
|
|
/*=============================================*/
|
|
|
|
TstCond (Failure, (Nine == Three * Three), "9 != 3*3");
|
|
TstCond (Failure, (TwentySeven == Nine * Three), "27 != 9*3");
|
|
TstCond (Failure, (Eight == Four + Four), "8 != 4+4");
|
|
TstCond (Failure, (ThirtyTwo == Eight * Four), "32 != 8*4");
|
|
TstCond (Failure, (ThirtyTwo - TwentySeven - Four - One == Zero),
|
|
"32-27-4-1 != 0");
|
|
|
|
TstCond (Failure, Five == Four + One, "5 != 4+1");
|
|
TstCond (Failure, TwoForty == Four * Five * Three * Four, "240 != 4*5*3*4");
|
|
TstCond (Failure, TwoForty / Three - Four * Four * Five == Zero,
|
|
"240/3 - 4*4*5 != 0");
|
|
TstCond (Failure, TwoForty / Four - Five * Three * Four == Zero,
|
|
"240/4 - 5*3*4 != 0");
|
|
TstCond (Failure, TwoForty / Five - Four * Three * Four == Zero,
|
|
"240/5 - 4*3*4 != 0");
|
|
|
|
if (ErrCnt[Failure] == 0)
|
|
{
|
|
printf ("-1, 0, 1/2, 1, 2, 3, 4, 5, 9, 27, 32 & 240 are O.K.\n");
|
|
printf ("\n");
|
|
}
|
|
printf ("Searching for Radix and Precision.\n");
|
|
W = One;
|
|
do
|
|
{
|
|
W = W + W;
|
|
Y = W + One;
|
|
Z = Y - W;
|
|
Y = Z - One;
|
|
}
|
|
while (MinusOne + FABS (Y) < Zero);
|
|
/*.. now W is just big enough that |((W+1)-W)-1| >= 1 ... */
|
|
Precision = Zero;
|
|
Y = One;
|
|
do
|
|
{
|
|
Radix = W + Y;
|
|
Y = Y + Y;
|
|
Radix = Radix - W;
|
|
}
|
|
while (Radix == Zero);
|
|
if (Radix < Two)
|
|
Radix = One;
|
|
printf ("Radix = %s .\n", Radix.str());
|
|
if (Radix != One)
|
|
{
|
|
W = One;
|
|
do
|
|
{
|
|
Precision = Precision + One;
|
|
W = W * Radix;
|
|
Y = W + One;
|
|
}
|
|
while ((Y - W) == One);
|
|
}
|
|
/*... now W == Radix^Precision is barely too big to satisfy (W+1)-W == 1
|
|
... */
|
|
U1 = One / W;
|
|
U2 = Radix * U1;
|
|
printf ("Closest relative separation found is U1 = %s .\n\n", U1.str());
|
|
printf ("Recalculating radix and precision\n ");
|
|
|
|
/*save old values */
|
|
E0 = Radix;
|
|
E1 = U1;
|
|
E9 = U2;
|
|
E3 = Precision;
|
|
|
|
X = Four / Three;
|
|
Third = X - One;
|
|
F6 = Half - Third;
|
|
X = F6 + F6;
|
|
X = FABS (X - Third);
|
|
if (X < U2)
|
|
X = U2;
|
|
|
|
/*... now X = (unknown no.) ulps of 1+... */
|
|
do
|
|
{
|
|
U2 = X;
|
|
Y = Half * U2 + ThirtyTwo * U2 * U2;
|
|
Y = One + Y;
|
|
X = Y - One;
|
|
}
|
|
while (!((U2 <= X) || (X <= Zero)));
|
|
|
|
/*... now U2 == 1 ulp of 1 + ... */
|
|
X = Two / Three;
|
|
F6 = X - Half;
|
|
Third = F6 + F6;
|
|
X = Third - Half;
|
|
X = FABS (X + F6);
|
|
if (X < U1)
|
|
X = U1;
|
|
|
|
/*... now X == (unknown no.) ulps of 1 -... */
|
|
do
|
|
{
|
|
U1 = X;
|
|
Y = Half * U1 + ThirtyTwo * U1 * U1;
|
|
Y = Half - Y;
|
|
X = Half + Y;
|
|
Y = Half - X;
|
|
X = Half + Y;
|
|
}
|
|
while (!((U1 <= X) || (X <= Zero)));
|
|
/*... now U1 == 1 ulp of 1 - ... */
|
|
if (U1 == E1)
|
|
printf ("confirms closest relative separation U1 .\n");
|
|
else
|
|
printf ("gets better closest relative separation U1 = %s .\n", U1.str());
|
|
W = One / U1;
|
|
F9 = (Half - U1) + Half;
|
|
|
|
Radix = FLOOR (FLOAT ("0.01") + U2 / U1);
|
|
if (Radix == E0)
|
|
printf ("Radix confirmed.\n");
|
|
else
|
|
printf ("MYSTERY: recalculated Radix = %s .\n", Radix.str());
|
|
TstCond (Defect, Radix <= Eight + Eight,
|
|
"Radix is too big: roundoff problems");
|
|
TstCond (Flaw, (Radix == Two) || (Radix == 10)
|
|
|| (Radix == One), "Radix is not as good as 2 or 10");
|
|
/*=============================================*/
|
|
Milestone = 20;
|
|
/*=============================================*/
|
|
TstCond (Failure, F9 - Half < Half,
|
|
"(1-U1)-1/2 < 1/2 is FALSE, prog. fails?");
|
|
X = F9;
|
|
I = 1;
|
|
Y = X - Half;
|
|
Z = Y - Half;
|
|
TstCond (Failure, (X != One)
|
|
|| (Z == Zero), "Comparison is fuzzy,X=1 but X-1/2-1/2 != 0");
|
|
X = One + U2;
|
|
I = 0;
|
|
/*=============================================*/
|
|
Milestone = 25;
|
|
/*=============================================*/
|
|
/*... BMinusU2 = nextafter(Radix, 0) */
|
|
BMinusU2 = Radix - One;
|
|
BMinusU2 = (BMinusU2 - U2) + One;
|
|
/* Purify Integers */
|
|
if (Radix != One)
|
|
{
|
|
X = -TwoForty * LOG (U1) / LOG (Radix);
|
|
Y = FLOOR (Half + X);
|
|
if (FABS (X - Y) * Four < One)
|
|
X = Y;
|
|
Precision = X / TwoForty;
|
|
Y = FLOOR (Half + Precision);
|
|
if (FABS (Precision - Y) * TwoForty < Half)
|
|
Precision = Y;
|
|
}
|
|
if ((Precision != FLOOR (Precision)) || (Radix == One))
|
|
{
|
|
printf ("Precision cannot be characterized by an Integer number\n");
|
|
printf
|
|
("of significant digits but, by itself, this is a minor flaw.\n");
|
|
}
|
|
if (Radix == One)
|
|
printf
|
|
("logarithmic encoding has precision characterized solely by U1.\n");
|
|
else
|
|
printf ("The number of significant digits of the Radix is %s .\n",
|
|
Precision.str());
|
|
TstCond (Serious, U2 * Nine * Nine * TwoForty < One,
|
|
"Precision worse than 5 decimal figures ");
|
|
/*=============================================*/
|
|
Milestone = 30;
|
|
/*=============================================*/
|
|
/* Test for extra-precise subexpressions */
|
|
X = FABS (((Four / Three - One) - One / Four) * Three - One / Four);
|
|
do
|
|
{
|
|
Z2 = X;
|
|
X = (One + (Half * Z2 + ThirtyTwo * Z2 * Z2)) - One;
|
|
}
|
|
while (!((Z2 <= X) || (X <= Zero)));
|
|
X = Y = Z = FABS ((Three / Four - Two / Three) * Three - One / Four);
|
|
do
|
|
{
|
|
Z1 = Z;
|
|
Z = (One / Two - ((One / Two - (Half * Z1 + ThirtyTwo * Z1 * Z1))
|
|
+ One / Two)) + One / Two;
|
|
}
|
|
while (!((Z1 <= Z) || (Z <= Zero)));
|
|
do
|
|
{
|
|
do
|
|
{
|
|
Y1 = Y;
|
|
Y =
|
|
(Half - ((Half - (Half * Y1 + ThirtyTwo * Y1 * Y1)) + Half)) +
|
|
Half;
|
|
}
|
|
while (!((Y1 <= Y) || (Y <= Zero)));
|
|
X1 = X;
|
|
X = ((Half * X1 + ThirtyTwo * X1 * X1) - F9) + F9;
|
|
}
|
|
while (!((X1 <= X) || (X <= Zero)));
|
|
if ((X1 != Y1) || (X1 != Z1))
|
|
{
|
|
BadCond (Serious, "Disagreements among the values X1, Y1, Z1,\n");
|
|
printf ("respectively %s, %s, %s,\n", X1.str(), Y1.str(), Z1.str());
|
|
printf ("are symptoms of inconsistencies introduced\n");
|
|
printf ("by extra-precise evaluation of arithmetic subexpressions.\n");
|
|
notify ("Possibly some part of this");
|
|
if ((X1 == U1) || (Y1 == U1) || (Z1 == U1))
|
|
printf ("That feature is not tested further by this program.\n");
|
|
}
|
|
else
|
|
{
|
|
if ((Z1 != U1) || (Z2 != U2))
|
|
{
|
|
if ((Z1 >= U1) || (Z2 >= U2))
|
|
{
|
|
BadCond (Failure, "");
|
|
notify ("Precision");
|
|
printf ("\tU1 = %s, Z1 - U1 = %s\n", U1.str(), (Z1 - U1).str());
|
|
printf ("\tU2 = %s, Z2 - U2 = %s\n", U2.str(), (Z2 - U2).str());
|
|
}
|
|
else
|
|
{
|
|
if ((Z1 <= Zero) || (Z2 <= Zero))
|
|
{
|
|
printf ("Because of unusual Radix = %s", Radix.str());
|
|
printf (", or exact rational arithmetic a result\n");
|
|
printf ("Z1 = %s, or Z2 = %s ", Z1.str(), Z2.str());
|
|
notify ("of an\nextra-precision");
|
|
}
|
|
if (Z1 != Z2 || Z1 > Zero)
|
|
{
|
|
X = Z1 / U1;
|
|
Y = Z2 / U2;
|
|
if (Y > X)
|
|
X = Y;
|
|
Q = -LOG (X);
|
|
printf ("Some subexpressions appear to be calculated "
|
|
"extra precisely\n");
|
|
printf ("with about %s extra B-digits, i.e.\n",
|
|
(Q / LOG (Radix)).str());
|
|
printf ("roughly %s extra significant decimals.\n",
|
|
(Q / LOG (FLOAT (10))).str());
|
|
}
|
|
printf
|
|
("That feature is not tested further by this program.\n");
|
|
}
|
|
}
|
|
}
|
|
Pause ();
|
|
/*=============================================*/
|
|
Milestone = 35;
|
|
/*=============================================*/
|
|
if (Radix >= Two)
|
|
{
|
|
X = W / (Radix * Radix);
|
|
Y = X + One;
|
|
Z = Y - X;
|
|
T = Z + U2;
|
|
X = T - Z;
|
|
TstCond (Failure, X == U2,
|
|
"Subtraction is not normalized X=Y,X+Z != Y+Z!");
|
|
if (X == U2)
|
|
printf ("Subtraction appears to be normalized, as it should be.");
|
|
}
|
|
printf ("\nChecking for guard digit in *, /, and -.\n");
|
|
Y = F9 * One;
|
|
Z = One * F9;
|
|
X = F9 - Half;
|
|
Y = (Y - Half) - X;
|
|
Z = (Z - Half) - X;
|
|
X = One + U2;
|
|
T = X * Radix;
|
|
R = Radix * X;
|
|
X = T - Radix;
|
|
X = X - Radix * U2;
|
|
T = R - Radix;
|
|
T = T - Radix * U2;
|
|
X = X * (Radix - One);
|
|
T = T * (Radix - One);
|
|
if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero))
|
|
GMult = Yes;
|
|
else
|
|
{
|
|
GMult = No;
|
|
TstCond (Serious, false, "* lacks a Guard Digit, so 1*X != X");
|
|
}
|
|
Z = Radix * U2;
|
|
X = One + Z;
|
|
Y = FABS ((X + Z) - X * X) - U2;
|
|
X = One - U2;
|
|
Z = FABS ((X - U2) - X * X) - U1;
|
|
TstCond (Failure, (Y <= Zero)
|
|
&& (Z <= Zero), "* gets too many final digits wrong.\n");
|
|
Y = One - U2;
|
|
X = One + U2;
|
|
Z = One / Y;
|
|
Y = Z - X;
|
|
X = One / Three;
|
|
Z = Three / Nine;
|
|
X = X - Z;
|
|
T = Nine / TwentySeven;
|
|
Z = Z - T;
|
|
TstCond (Defect, X == Zero && Y == Zero && Z == Zero,
|
|
"Division lacks a Guard Digit, so error can exceed 1 ulp\n"
|
|
"or 1/3 and 3/9 and 9/27 may disagree");
|
|
Y = F9 / One;
|
|
X = F9 - Half;
|
|
Y = (Y - Half) - X;
|
|
X = One + U2;
|
|
T = X / One;
|
|
X = T - X;
|
|
if ((X == Zero) && (Y == Zero) && (Z == Zero))
|
|
GDiv = Yes;
|
|
else
|
|
{
|
|
GDiv = No;
|
|
TstCond (Serious, false, "Division lacks a Guard Digit, so X/1 != X");
|
|
}
|
|
X = One / (One + U2);
|
|
Y = X - Half - Half;
|
|
TstCond (Serious, Y < Zero, "Computed value of 1/1.000..1 >= 1");
|
|
X = One - U2;
|
|
Y = One + Radix * U2;
|
|
Z = X * Radix;
|
|
T = Y * Radix;
|
|
R = Z / Radix;
|
|
StickyBit = T / Radix;
|
|
X = R - X;
|
|
Y = StickyBit - Y;
|
|
TstCond (Failure, X == Zero && Y == Zero,
|
|
"* and/or / gets too many last digits wrong");
|
|
Y = One - U1;
|
|
X = One - F9;
|
|
Y = One - Y;
|
|
T = Radix - U2;
|
|
Z = Radix - BMinusU2;
|
|
T = Radix - T;
|
|
if ((X == U1) && (Y == U1) && (Z == U2) && (T == U2))
|
|
GAddSub = Yes;
|
|
else
|
|
{
|
|
GAddSub = No;
|
|
TstCond (Serious, false,
|
|
"- lacks Guard Digit, so cancellation is obscured");
|
|
}
|
|
if (F9 != One && F9 - One >= Zero)
|
|
{
|
|
BadCond (Serious, "comparison alleges (1-U1) < 1 although\n");
|
|
printf (" subtraction yields (1-U1) - 1 = 0 , thereby vitiating\n");
|
|
printf (" such precautions against division by zero as\n");
|
|
printf (" ... if (X == 1.0) {.....} else {.../(X-1.0)...}\n");
|
|
}
|
|
if (GMult == Yes && GDiv == Yes && GAddSub == Yes)
|
|
printf
|
|
(" *, /, and - appear to have guard digits, as they should.\n");
|
|
/*=============================================*/
|
|
Milestone = 40;
|
|
/*=============================================*/
|
|
Pause ();
|
|
printf ("Checking rounding on multiply, divide and add/subtract.\n");
|
|
RMult = Other;
|
|
RDiv = Other;
|
|
RAddSub = Other;
|
|
RadixD2 = Radix / Two;
|
|
A1 = Two;
|
|
Done = false;
|
|
do
|
|
{
|
|
AInvrse = Radix;
|
|
do
|
|
{
|
|
X = AInvrse;
|
|
AInvrse = AInvrse / A1;
|
|
}
|
|
while (!(FLOOR (AInvrse) != AInvrse));
|
|
Done = (X == One) || (A1 > Three);
|
|
if (!Done)
|
|
A1 = Nine + One;
|
|
}
|
|
while (!(Done));
|
|
if (X == One)
|
|
A1 = Radix;
|
|
AInvrse = One / A1;
|
|
X = A1;
|
|
Y = AInvrse;
|
|
Done = false;
|
|
do
|
|
{
|
|
Z = X * Y - Half;
|
|
TstCond (Failure, Z == Half, "X * (1/X) differs from 1");
|
|
Done = X == Radix;
|
|
X = Radix;
|
|
Y = One / X;
|
|
}
|
|
while (!(Done));
|
|
Y2 = One + U2;
|
|
Y1 = One - U2;
|
|
X = OneAndHalf - U2;
|
|
Y = OneAndHalf + U2;
|
|
Z = (X - U2) * Y2;
|
|
T = Y * Y1;
|
|
Z = Z - X;
|
|
T = T - X;
|
|
X = X * Y2;
|
|
Y = (Y + U2) * Y1;
|
|
X = X - OneAndHalf;
|
|
Y = Y - OneAndHalf;
|
|
if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T <= Zero))
|
|
{
|
|
X = (OneAndHalf + U2) * Y2;
|
|
Y = OneAndHalf - U2 - U2;
|
|
Z = OneAndHalf + U2 + U2;
|
|
T = (OneAndHalf - U2) * Y1;
|
|
X = X - (Z + U2);
|
|
StickyBit = Y * Y1;
|
|
S = Z * Y2;
|
|
T = T - Y;
|
|
Y = (U2 - Y) + StickyBit;
|
|
Z = S - (Z + U2 + U2);
|
|
StickyBit = (Y2 + U2) * Y1;
|
|
Y1 = Y2 * Y1;
|
|
StickyBit = StickyBit - Y2;
|
|
Y1 = Y1 - Half;
|
|
if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
|
|
&& (StickyBit == Zero) && (Y1 == Half))
|
|
{
|
|
RMult = Rounded;
|
|
printf ("Multiplication appears to round correctly.\n");
|
|
}
|
|
else if ((X + U2 == Zero) && (Y < Zero) && (Z + U2 == Zero)
|
|
&& (T < Zero) && (StickyBit + U2 == Zero) && (Y1 < Half))
|
|
{
|
|
RMult = Chopped;
|
|
printf ("Multiplication appears to chop.\n");
|
|
}
|
|
else
|
|
printf ("* is neither chopped nor correctly rounded.\n");
|
|
if ((RMult == Rounded) && (GMult == No))
|
|
notify ("Multiplication");
|
|
}
|
|
else
|
|
printf ("* is neither chopped nor correctly rounded.\n");
|
|
/*=============================================*/
|
|
Milestone = 45;
|
|
/*=============================================*/
|
|
Y2 = One + U2;
|
|
Y1 = One - U2;
|
|
Z = OneAndHalf + U2 + U2;
|
|
X = Z / Y2;
|
|
T = OneAndHalf - U2 - U2;
|
|
Y = (T - U2) / Y1;
|
|
Z = (Z + U2) / Y2;
|
|
X = X - OneAndHalf;
|
|
Y = Y - T;
|
|
T = T / Y1;
|
|
Z = Z - (OneAndHalf + U2);
|
|
T = (U2 - OneAndHalf) + T;
|
|
if (!((X > Zero) || (Y > Zero) || (Z > Zero) || (T > Zero)))
|
|
{
|
|
X = OneAndHalf / Y2;
|
|
Y = OneAndHalf - U2;
|
|
Z = OneAndHalf + U2;
|
|
X = X - Y;
|
|
T = OneAndHalf / Y1;
|
|
Y = Y / Y1;
|
|
T = T - (Z + U2);
|
|
Y = Y - Z;
|
|
Z = Z / Y2;
|
|
Y1 = (Y2 + U2) / Y2;
|
|
Z = Z - OneAndHalf;
|
|
Y2 = Y1 - Y2;
|
|
Y1 = (F9 - U1) / F9;
|
|
if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
|
|
&& (Y2 == Zero) && (Y2 == Zero) && (Y1 - Half == F9 - Half))
|
|
{
|
|
RDiv = Rounded;
|
|
printf ("Division appears to round correctly.\n");
|
|
if (GDiv == No)
|
|
notify ("Division");
|
|
}
|
|
else if ((X < Zero) && (Y < Zero) && (Z < Zero) && (T < Zero)
|
|
&& (Y2 < Zero) && (Y1 - Half < F9 - Half))
|
|
{
|
|
RDiv = Chopped;
|
|
printf ("Division appears to chop.\n");
|
|
}
|
|
}
|
|
if (RDiv == Other)
|
|
printf ("/ is neither chopped nor correctly rounded.\n");
|
|
BInvrse = One / Radix;
|
|
TstCond (Failure, (BInvrse * Radix - Half == Half),
|
|
"Radix * ( 1 / Radix ) differs from 1");
|
|
/*=============================================*/
|
|
Milestone = 50;
|
|
/*=============================================*/
|
|
TstCond (Failure, ((F9 + U1) - Half == Half)
|
|
&& ((BMinusU2 + U2) - One == Radix - One),
|
|
"Incomplete carry-propagation in Addition");
|
|
X = One - U1 * U1;
|
|
Y = One + U2 * (One - U2);
|
|
Z = F9 - Half;
|
|
X = (X - Half) - Z;
|
|
Y = Y - One;
|
|
if ((X == Zero) && (Y == Zero))
|
|
{
|
|
RAddSub = Chopped;
|
|
printf ("Add/Subtract appears to be chopped.\n");
|
|
}
|
|
if (GAddSub == Yes)
|
|
{
|
|
X = (Half + U2) * U2;
|
|
Y = (Half - U2) * U2;
|
|
X = One + X;
|
|
Y = One + Y;
|
|
X = (One + U2) - X;
|
|
Y = One - Y;
|
|
if ((X == Zero) && (Y == Zero))
|
|
{
|
|
X = (Half + U2) * U1;
|
|
Y = (Half - U2) * U1;
|
|
X = One - X;
|
|
Y = One - Y;
|
|
X = F9 - X;
|
|
Y = One - Y;
|
|
if ((X == Zero) && (Y == Zero))
|
|
{
|
|
RAddSub = Rounded;
|
|
printf ("Addition/Subtraction appears to round correctly.\n");
|
|
if (GAddSub == No)
|
|
notify ("Add/Subtract");
|
|
}
|
|
else
|
|
printf ("Addition/Subtraction neither rounds nor chops.\n");
|
|
}
|
|
else
|
|
printf ("Addition/Subtraction neither rounds nor chops.\n");
|
|
}
|
|
else
|
|
printf ("Addition/Subtraction neither rounds nor chops.\n");
|
|
S = One;
|
|
X = One + Half * (One + Half);
|
|
Y = (One + U2) * Half;
|
|
Z = X - Y;
|
|
T = Y - X;
|
|
StickyBit = Z + T;
|
|
if (StickyBit != Zero)
|
|
{
|
|
S = Zero;
|
|
BadCond (Flaw, "(X - Y) + (Y - X) is non zero!\n");
|
|
}
|
|
StickyBit = Zero;
|
|
if ((GMult == Yes) && (GDiv == Yes) && (GAddSub == Yes)
|
|
&& (RMult == Rounded) && (RDiv == Rounded)
|
|
&& (RAddSub == Rounded) && (FLOOR (RadixD2) == RadixD2))
|
|
{
|
|
printf ("Checking for sticky bit.\n");
|
|
X = (Half + U1) * U2;
|
|
Y = Half * U2;
|
|
Z = One + Y;
|
|
T = One + X;
|
|
if ((Z - One <= Zero) && (T - One >= U2))
|
|
{
|
|
Z = T + Y;
|
|
Y = Z - X;
|
|
if ((Z - T >= U2) && (Y - T == Zero))
|
|
{
|
|
X = (Half + U1) * U1;
|
|
Y = Half * U1;
|
|
Z = One - Y;
|
|
T = One - X;
|
|
if ((Z - One == Zero) && (T - F9 == Zero))
|
|
{
|
|
Z = (Half - U1) * U1;
|
|
T = F9 - Z;
|
|
Q = F9 - Y;
|
|
if ((T - F9 == Zero) && (F9 - U1 - Q == Zero))
|
|
{
|
|
Z = (One + U2) * OneAndHalf;
|
|
T = (OneAndHalf + U2) - Z + U2;
|
|
X = One + Half / Radix;
|
|
Y = One + Radix * U2;
|
|
Z = X * Y;
|
|
if (T == Zero && X + Radix * U2 - Z == Zero)
|
|
{
|
|
if (Radix != Two)
|
|
{
|
|
X = Two + U2;
|
|
Y = X / Two;
|
|
if ((Y - One == Zero))
|
|
StickyBit = S;
|
|
}
|
|
else
|
|
StickyBit = S;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (StickyBit == One)
|
|
printf ("Sticky bit apparently used correctly.\n");
|
|
else
|
|
printf ("Sticky bit used incorrectly or not at all.\n");
|
|
TstCond (Flaw, !(GMult == No || GDiv == No || GAddSub == No ||
|
|
RMult == Other || RDiv == Other || RAddSub == Other),
|
|
"lack(s) of guard digits or failure(s) to correctly round or chop\n\
|
|
(noted above) count as one flaw in the final tally below");
|
|
/*=============================================*/
|
|
Milestone = 60;
|
|
/*=============================================*/
|
|
printf ("\n");
|
|
printf ("Does Multiplication commute? ");
|
|
printf ("Testing on %d random pairs.\n", NoTrials);
|
|
Random9 = SQRT (FLOAT (3));
|
|
Random1 = Third;
|
|
I = 1;
|
|
do
|
|
{
|
|
X = Random ();
|
|
Y = Random ();
|
|
Z9 = Y * X;
|
|
Z = X * Y;
|
|
Z9 = Z - Z9;
|
|
I = I + 1;
|
|
}
|
|
while (!((I > NoTrials) || (Z9 != Zero)));
|
|
if (I == NoTrials)
|
|
{
|
|
Random1 = One + Half / Three;
|
|
Random2 = (U2 + U1) + One;
|
|
Z = Random1 * Random2;
|
|
Y = Random2 * Random1;
|
|
Z9 = (One + Half / Three) * ((U2 + U1) + One) - (One + Half /
|
|
Three) * ((U2 + U1) +
|
|
One);
|
|
}
|
|
if (!((I == NoTrials) || (Z9 == Zero)))
|
|
BadCond (Defect, "X * Y == Y * X trial fails.\n");
|
|
else
|
|
printf (" No failures found in %d integer pairs.\n", NoTrials);
|
|
/*=============================================*/
|
|
Milestone = 70;
|
|
/*=============================================*/
|
|
printf ("\nRunning test of square root(x).\n");
|
|
TstCond (Failure, (Zero == SQRT (Zero))
|
|
&& (-Zero == SQRT (-Zero))
|
|
&& (One == SQRT (One)), "Square root of 0.0, -0.0 or 1.0 wrong");
|
|
MinSqEr = Zero;
|
|
MaxSqEr = Zero;
|
|
J = Zero;
|
|
X = Radix;
|
|
OneUlp = U2;
|
|
SqXMinX (Serious);
|
|
X = BInvrse;
|
|
OneUlp = BInvrse * U1;
|
|
SqXMinX (Serious);
|
|
X = U1;
|
|
OneUlp = U1 * U1;
|
|
SqXMinX (Serious);
|
|
if (J != Zero)
|
|
Pause ();
|
|
printf ("Testing if sqrt(X * X) == X for %d Integers X.\n", NoTrials);
|
|
J = Zero;
|
|
X = Two;
|
|
Y = Radix;
|
|
if ((Radix != One))
|
|
do
|
|
{
|
|
X = Y;
|
|
Y = Radix * Y;
|
|
}
|
|
while (!((Y - X >= NoTrials)));
|
|
OneUlp = X * U2;
|
|
I = 1;
|
|
while (I <= NoTrials)
|
|
{
|
|
X = X + One;
|
|
SqXMinX (Defect);
|
|
if (J > Zero)
|
|
break;
|
|
I = I + 1;
|
|
}
|
|
printf ("Test for sqrt monotonicity.\n");
|
|
I = -1;
|
|
X = BMinusU2;
|
|
Y = Radix;
|
|
Z = Radix + Radix * U2;
|
|
NotMonot = false;
|
|
Monot = false;
|
|
while (!(NotMonot || Monot))
|
|
{
|
|
I = I + 1;
|
|
X = SQRT (X);
|
|
Q = SQRT (Y);
|
|
Z = SQRT (Z);
|
|
if ((X > Q) || (Q > Z))
|
|
NotMonot = true;
|
|
else
|
|
{
|
|
Q = FLOOR (Q + Half);
|
|
if (!(I > 0 || Radix == Q * Q))
|
|
Monot = true;
|
|
else if (I > 0)
|
|
{
|
|
if (I > 1)
|
|
Monot = true;
|
|
else
|
|
{
|
|
Y = Y * BInvrse;
|
|
X = Y - U1;
|
|
Z = Y + U1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Y = Q;
|
|
X = Y - U2;
|
|
Z = Y + U2;
|
|
}
|
|
}
|
|
}
|
|
if (Monot)
|
|
printf ("sqrt has passed a test for Monotonicity.\n");
|
|
else
|
|
{
|
|
BadCond (Defect, "");
|
|
printf ("sqrt(X) is non-monotonic for X near %s .\n", Y.str());
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 110;
|
|
/*=============================================*/
|
|
printf ("Seeking Underflow thresholds UfThold and E0.\n");
|
|
D = U1;
|
|
if (Precision != FLOOR (Precision))
|
|
{
|
|
D = BInvrse;
|
|
X = Precision;
|
|
do
|
|
{
|
|
D = D * BInvrse;
|
|
X = X - One;
|
|
}
|
|
while (X > Zero);
|
|
}
|
|
Y = One;
|
|
Z = D;
|
|
/* ... D is power of 1/Radix < 1. */
|
|
do
|
|
{
|
|
C = Y;
|
|
Y = Z;
|
|
Z = Y * Y;
|
|
}
|
|
while ((Y > Z) && (Z + Z > Z));
|
|
Y = C;
|
|
Z = Y * D;
|
|
do
|
|
{
|
|
C = Y;
|
|
Y = Z;
|
|
Z = Y * D;
|
|
}
|
|
while ((Y > Z) && (Z + Z > Z));
|
|
if (Radix < Two)
|
|
HInvrse = Two;
|
|
else
|
|
HInvrse = Radix;
|
|
H = One / HInvrse;
|
|
/* ... 1/HInvrse == H == Min(1/Radix, 1/2) */
|
|
CInvrse = One / C;
|
|
E0 = C;
|
|
Z = E0 * H;
|
|
/* ...1/Radix^(BIG Integer) << 1 << CInvrse == 1/C */
|
|
do
|
|
{
|
|
Y = E0;
|
|
E0 = Z;
|
|
Z = E0 * H;
|
|
}
|
|
while ((E0 > Z) && (Z + Z > Z));
|
|
UfThold = E0;
|
|
E1 = Zero;
|
|
Q = Zero;
|
|
E9 = U2;
|
|
S = One + E9;
|
|
D = C * S;
|
|
if (D <= C)
|
|
{
|
|
E9 = Radix * U2;
|
|
S = One + E9;
|
|
D = C * S;
|
|
if (D <= C)
|
|
{
|
|
BadCond (Failure,
|
|
"multiplication gets too many last digits wrong.\n");
|
|
Underflow = E0;
|
|
Y1 = Zero;
|
|
PseudoZero = Z;
|
|
Pause ();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Underflow = D;
|
|
PseudoZero = Underflow * H;
|
|
UfThold = Zero;
|
|
do
|
|
{
|
|
Y1 = Underflow;
|
|
Underflow = PseudoZero;
|
|
if (E1 + E1 <= E1)
|
|
{
|
|
Y2 = Underflow * HInvrse;
|
|
E1 = FABS (Y1 - Y2);
|
|
Q = Y1;
|
|
if ((UfThold == Zero) && (Y1 != Y2))
|
|
UfThold = Y1;
|
|
}
|
|
PseudoZero = PseudoZero * H;
|
|
}
|
|
while ((Underflow > PseudoZero)
|
|
&& (PseudoZero + PseudoZero > PseudoZero));
|
|
}
|
|
/* Comment line 4530 .. 4560 */
|
|
if (PseudoZero != Zero)
|
|
{
|
|
printf ("\n");
|
|
Z = PseudoZero;
|
|
/* ... Test PseudoZero for "phoney- zero" violates */
|
|
/* ... PseudoZero < Underflow or PseudoZero < PseudoZero + PseudoZero
|
|
... */
|
|
if (PseudoZero <= Zero)
|
|
{
|
|
BadCond (Failure, "Positive expressions can underflow to an\n");
|
|
printf ("allegedly negative value\n");
|
|
printf ("PseudoZero that prints out as: %s .\n", PseudoZero.str());
|
|
X = -PseudoZero;
|
|
if (X <= Zero)
|
|
{
|
|
printf ("But -PseudoZero, which should be\n");
|
|
printf ("positive, isn't; it prints out as %s .\n", X.str());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
BadCond (Flaw, "Underflow can stick at an allegedly positive\n");
|
|
printf ("value PseudoZero that prints out as %s .\n",
|
|
PseudoZero.str());
|
|
}
|
|
TstPtUf ();
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 120;
|
|
/*=============================================*/
|
|
if (CInvrse * Y > CInvrse * Y1)
|
|
{
|
|
S = H * S;
|
|
E0 = Underflow;
|
|
}
|
|
if (!((E1 == Zero) || (E1 == E0)))
|
|
{
|
|
BadCond (Defect, "");
|
|
if (E1 < E0)
|
|
{
|
|
printf ("Products underflow at a higher");
|
|
printf (" threshold than differences.\n");
|
|
if (PseudoZero == Zero)
|
|
E0 = E1;
|
|
}
|
|
else
|
|
{
|
|
printf ("Difference underflows at a higher");
|
|
printf (" threshold than products.\n");
|
|
}
|
|
}
|
|
printf ("Smallest strictly positive number found is E0 = %s .\n", E0.str());
|
|
Z = E0;
|
|
TstPtUf ();
|
|
Underflow = E0;
|
|
if (N == 1)
|
|
Underflow = Y;
|
|
I = 4;
|
|
if (E1 == Zero)
|
|
I = 3;
|
|
if (UfThold == Zero)
|
|
I = I - 2;
|
|
UfNGrad = true;
|
|
switch (I)
|
|
{
|
|
case 1:
|
|
UfThold = Underflow;
|
|
if ((CInvrse * Q) != ((CInvrse * Y) * S))
|
|
{
|
|
UfThold = Y;
|
|
BadCond (Failure, "Either accuracy deteriorates as numbers\n");
|
|
printf ("approach a threshold = %s\n", UfThold.str());
|
|
printf (" coming down from %s\n", C.str());
|
|
printf
|
|
(" or else multiplication gets too many last digits wrong.\n");
|
|
}
|
|
Pause ();
|
|
break;
|
|
|
|
case 2:
|
|
BadCond (Failure,
|
|
"Underflow confuses Comparison, which alleges that\n");
|
|
printf ("Q == Y while denying that |Q - Y| == 0; these values\n");
|
|
printf ("print out as Q = %s, Y = %s .\n", Q.str(), Y2.str());
|
|
printf ("|Q - Y| = %s .\n", FABS (Q - Y2).str());
|
|
UfThold = Q;
|
|
break;
|
|
|
|
case 3:
|
|
X = X;
|
|
break;
|
|
|
|
case 4:
|
|
if ((Q == UfThold) && (E1 == E0) && (FABS (UfThold - E1 / E9) <= E1))
|
|
{
|
|
UfNGrad = false;
|
|
printf ("Underflow is gradual; it incurs Absolute Error =\n");
|
|
printf ("(roundoff in UfThold) < E0.\n");
|
|
Y = E0 * CInvrse;
|
|
Y = Y * (OneAndHalf + U2);
|
|
X = CInvrse * (One + U2);
|
|
Y = Y / X;
|
|
IEEE = (Y == E0);
|
|
}
|
|
}
|
|
if (UfNGrad)
|
|
{
|
|
printf ("\n");
|
|
if (setjmp (ovfl_buf))
|
|
{
|
|
printf ("Underflow / UfThold failed!\n");
|
|
R = H + H;
|
|
}
|
|
else
|
|
R = SQRT (Underflow / UfThold);
|
|
if (R <= H)
|
|
{
|
|
Z = R * UfThold;
|
|
X = Z * (One + R * H * (One + H));
|
|
}
|
|
else
|
|
{
|
|
Z = UfThold;
|
|
X = Z * (One + H * H * (One + H));
|
|
}
|
|
if (!((X == Z) || (X - Z != Zero)))
|
|
{
|
|
BadCond (Flaw, "");
|
|
printf ("X = %s\n\tis not equal to Z = %s .\n", X.str(), Z.str());
|
|
Z9 = X - Z;
|
|
printf ("yet X - Z yields %s .\n", Z9.str());
|
|
printf (" Should this NOT signal Underflow, ");
|
|
printf ("this is a SERIOUS DEFECT\nthat causes ");
|
|
printf ("confusion when innocent statements like\n");;
|
|
printf (" if (X == Z) ... else");
|
|
printf (" ... (f(X) - f(Z)) / (X - Z) ...\n");
|
|
printf ("encounter Division by Zero although actually\n");
|
|
if (setjmp (ovfl_buf))
|
|
printf ("X / Z fails!\n");
|
|
else
|
|
printf ("X / Z = 1 + %s .\n", ((X / Z - Half) - Half).str());
|
|
}
|
|
}
|
|
printf ("The Underflow threshold is %s, below which\n", UfThold.str());
|
|
printf ("calculation may suffer larger Relative error than ");
|
|
printf ("merely roundoff.\n");
|
|
Y2 = U1 * U1;
|
|
Y = Y2 * Y2;
|
|
Y2 = Y * U1;
|
|
if (Y2 <= UfThold)
|
|
{
|
|
if (Y > E0)
|
|
{
|
|
BadCond (Defect, "");
|
|
I = 5;
|
|
}
|
|
else
|
|
{
|
|
BadCond (Serious, "");
|
|
I = 4;
|
|
}
|
|
printf ("Range is too narrow; U1^%d Underflows.\n", I);
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 130;
|
|
/*=============================================*/
|
|
Y = -FLOOR (Half - TwoForty * LOG (UfThold) / LOG (HInvrse)) / TwoForty;
|
|
Y2 = Y + Y;
|
|
printf ("Since underflow occurs below the threshold\n");
|
|
printf ("UfThold = (%s) ^ (%s)\nonly underflow ", HInvrse.str(), Y.str());
|
|
printf ("should afflict the expression\n\t(%s) ^ (%s);\n",
|
|
HInvrse.str(), Y2.str());
|
|
printf ("actually calculating yields:");
|
|
if (setjmp (ovfl_buf))
|
|
{
|
|
BadCond (Serious, "trap on underflow.\n");
|
|
}
|
|
else
|
|
{
|
|
V9 = POW (HInvrse, Y2);
|
|
printf (" %s .\n", V9.str());
|
|
if (!((V9 >= Zero) && (V9 <= (Radix + Radix + E9) * UfThold)))
|
|
{
|
|
BadCond (Serious, "this is not between 0 and underflow\n");
|
|
printf (" threshold = %s .\n", UfThold.str());
|
|
}
|
|
else if (!(V9 > UfThold * (One + E9)))
|
|
printf ("This computed value is O.K.\n");
|
|
else
|
|
{
|
|
BadCond (Defect, "this is not between 0 and underflow\n");
|
|
printf (" threshold = %s .\n", UfThold.str());
|
|
}
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 160;
|
|
/*=============================================*/
|
|
Pause ();
|
|
printf ("Searching for Overflow threshold:\n");
|
|
printf ("This may generate an error.\n");
|
|
Y = -CInvrse;
|
|
V9 = HInvrse * Y;
|
|
if (setjmp (ovfl_buf))
|
|
{
|
|
I = 0;
|
|
V9 = Y;
|
|
goto overflow;
|
|
}
|
|
do
|
|
{
|
|
V = Y;
|
|
Y = V9;
|
|
V9 = HInvrse * Y;
|
|
}
|
|
while (V9 < Y);
|
|
I = 1;
|
|
overflow:
|
|
Z = V9;
|
|
printf ("Can `Z = -Y' overflow?\n");
|
|
printf ("Trying it on Y = %s .\n", Y.str());
|
|
V9 = -Y;
|
|
V0 = V9;
|
|
if (V - Y == V + V0)
|
|
printf ("Seems O.K.\n");
|
|
else
|
|
{
|
|
printf ("finds a ");
|
|
BadCond (Flaw, "-(-Y) differs from Y.\n");
|
|
}
|
|
if (Z != Y)
|
|
{
|
|
BadCond (Serious, "");
|
|
printf ("overflow past %s\n\tshrinks to %s .\n", Y.str(), Z.str());
|
|
}
|
|
if (I)
|
|
{
|
|
Y = V * (HInvrse * U2 - HInvrse);
|
|
Z = Y + ((One - HInvrse) * U2) * V;
|
|
if (Z < V0)
|
|
Y = Z;
|
|
if (Y < V0)
|
|
V = Y;
|
|
if (V0 - V < V0)
|
|
V = V0;
|
|
}
|
|
else
|
|
{
|
|
V = Y * (HInvrse * U2 - HInvrse);
|
|
V = V + ((One - HInvrse) * U2) * Y;
|
|
}
|
|
printf ("Overflow threshold is V = %s .\n", V.str());
|
|
if (I)
|
|
printf ("Overflow saturates at V0 = %s .\n", V0.str());
|
|
else
|
|
printf ("There is no saturation value because "
|
|
"the system traps on overflow.\n");
|
|
V9 = V * One;
|
|
printf ("No Overflow should be signaled for V * 1 = %s\n", V9.str());
|
|
V9 = V / One;
|
|
printf (" nor for V / 1 = %s.\n", V9.str());
|
|
printf ("Any overflow signal separating this * from the one\n");
|
|
printf ("above is a DEFECT.\n");
|
|
/*=============================================*/
|
|
Milestone = 170;
|
|
/*=============================================*/
|
|
if (!(-V < V && -V0 < V0 && -UfThold < V && UfThold < V))
|
|
{
|
|
BadCond (Failure, "Comparisons involving ");
|
|
printf ("+-%s, +-%s\nand +-%s are confused by Overflow.",
|
|
V.str(), V0.str(), UfThold.str());
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 175;
|
|
/*=============================================*/
|
|
printf ("\n");
|
|
for (Indx = 1; Indx <= 3; ++Indx)
|
|
{
|
|
switch (Indx)
|
|
{
|
|
case 1:
|
|
Z = UfThold;
|
|
break;
|
|
case 2:
|
|
Z = E0;
|
|
break;
|
|
case 3:
|
|
Z = PseudoZero;
|
|
break;
|
|
}
|
|
if (Z != Zero)
|
|
{
|
|
V9 = SQRT (Z);
|
|
Y = V9 * V9;
|
|
if (Y / (One - Radix * E9) < Z || Y > (One + Radix * E9) * Z)
|
|
{ /* dgh: + E9 --> * E9 */
|
|
if (V9 > U1)
|
|
BadCond (Serious, "");
|
|
else
|
|
BadCond (Defect, "");
|
|
printf ("Comparison alleges that what prints as Z = %s\n",
|
|
Z.str());
|
|
printf (" is too far from sqrt(Z) ^ 2 = %s .\n", Y.str());
|
|
}
|
|
}
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 180;
|
|
/*=============================================*/
|
|
for (Indx = 1; Indx <= 2; ++Indx)
|
|
{
|
|
if (Indx == 1)
|
|
Z = V;
|
|
else
|
|
Z = V0;
|
|
V9 = SQRT (Z);
|
|
X = (One - Radix * E9) * V9;
|
|
V9 = V9 * X;
|
|
if (((V9 < (One - Two * Radix * E9) * Z) || (V9 > Z)))
|
|
{
|
|
Y = V9;
|
|
if (X < W)
|
|
BadCond (Serious, "");
|
|
else
|
|
BadCond (Defect, "");
|
|
printf ("Comparison alleges that Z = %s\n", Z.str());
|
|
printf (" is too far from sqrt(Z) ^ 2 (%s) .\n", Y.str());
|
|
}
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 190;
|
|
/*=============================================*/
|
|
Pause ();
|
|
X = UfThold * V;
|
|
Y = Radix * Radix;
|
|
if (X * Y < One || X > Y)
|
|
{
|
|
if (X * Y < U1 || X > Y / U1)
|
|
BadCond (Defect, "Badly");
|
|
else
|
|
BadCond (Flaw, "");
|
|
|
|
printf (" unbalanced range; UfThold * V = %s\n\t%s\n",
|
|
X.str(), "is too far from 1.\n");
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 200;
|
|
/*=============================================*/
|
|
for (Indx = 1; Indx <= 5; ++Indx)
|
|
{
|
|
X = F9;
|
|
switch (Indx)
|
|
{
|
|
case 2:
|
|
X = One + U2;
|
|
break;
|
|
case 3:
|
|
X = V;
|
|
break;
|
|
case 4:
|
|
X = UfThold;
|
|
break;
|
|
case 5:
|
|
X = Radix;
|
|
}
|
|
Y = X;
|
|
if (setjmp (ovfl_buf))
|
|
printf (" X / X traps when X = %s\n", X.str());
|
|
else
|
|
{
|
|
V9 = (Y / X - Half) - Half;
|
|
if (V9 == Zero)
|
|
continue;
|
|
if (V9 == -U1 && Indx < 5)
|
|
BadCond (Flaw, "");
|
|
else
|
|
BadCond (Serious, "");
|
|
printf (" X / X differs from 1 when X = %s\n", X.str());
|
|
printf (" instead, X / X - 1/2 - 1/2 = %s .\n", V9.str());
|
|
}
|
|
}
|
|
/*=============================================*/
|
|
Milestone = 210;
|
|
/*=============================================*/
|
|
MyZero = Zero;
|
|
printf ("\n");
|
|
printf ("What message and/or values does Division by Zero produce?\n");
|
|
printf (" Trying to compute 1 / 0 produces ...");
|
|
if (!setjmp (ovfl_buf))
|
|
printf (" %s .\n", (One / MyZero).str());
|
|
printf ("\n Trying to compute 0 / 0 produces ...");
|
|
if (!setjmp (ovfl_buf))
|
|
printf (" %s .\n", (Zero / MyZero).str());
|
|
/*=============================================*/
|
|
Milestone = 220;
|
|
/*=============================================*/
|
|
Pause ();
|
|
printf ("\n");
|
|
{
|
|
static const char *msg[] = {
|
|
"FAILUREs encountered =",
|
|
"SERIOUS DEFECTs discovered =",
|
|
"DEFECTs discovered =",
|
|
"FLAWs discovered ="
|
|
};
|
|
int i;
|
|
for (i = 0; i < 4; i++)
|
|
if (ErrCnt[i])
|
|
printf ("The number of %-29s %d.\n", msg[i], ErrCnt[i]);
|
|
}
|
|
printf ("\n");
|
|
if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[Defect] + ErrCnt[Flaw]) > 0)
|
|
{
|
|
if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[Defect] == 0)
|
|
&& (ErrCnt[Flaw] > 0))
|
|
{
|
|
printf ("The arithmetic diagnosed seems ");
|
|
printf ("Satisfactory though flawed.\n");
|
|
}
|
|
if ((ErrCnt[Failure] + ErrCnt[Serious] == 0) && (ErrCnt[Defect] > 0))
|
|
{
|
|
printf ("The arithmetic diagnosed may be Acceptable\n");
|
|
printf ("despite inconvenient Defects.\n");
|
|
}
|
|
if ((ErrCnt[Failure] + ErrCnt[Serious]) > 0)
|
|
{
|
|
printf ("The arithmetic diagnosed has ");
|
|
printf ("unacceptable Serious Defects.\n");
|
|
}
|
|
if (ErrCnt[Failure] > 0)
|
|
{
|
|
printf ("Potentially fatal FAILURE may have spoiled this");
|
|
printf (" program's subsequent diagnoses.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf ("No failures, defects nor flaws have been discovered.\n");
|
|
if (!((RMult == Rounded) && (RDiv == Rounded)
|
|
&& (RAddSub == Rounded) && (RSqrt == Rounded)))
|
|
printf ("The arithmetic diagnosed seems Satisfactory.\n");
|
|
else
|
|
{
|
|
if (StickyBit >= One &&
|
|
(Radix - Two) * (Radix - Nine - One) == Zero)
|
|
{
|
|
printf ("Rounding appears to conform to ");
|
|
printf ("the proposed IEEE standard P");
|
|
if ((Radix == Two) &&
|
|
((Precision - Four * Three * Two) *
|
|
(Precision - TwentySeven - TwentySeven + One) == Zero))
|
|
printf ("754");
|
|
else
|
|
printf ("854");
|
|
if (IEEE)
|
|
printf (".\n");
|
|
else
|
|
{
|
|
printf (",\nexcept for possibly Double Rounding");
|
|
printf (" during Gradual Underflow.\n");
|
|
}
|
|
}
|
|
printf ("The arithmetic diagnosed appears to be Excellent!\n");
|
|
}
|
|
}
|
|
printf ("END OF TEST.\n");
|
|
return 0;
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
Paranoia<FLOAT>::Sign (FLOAT X)
|
|
{
|
|
return X >= FLOAT (long (0)) ? 1 : -1;
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::Pause ()
|
|
{
|
|
if (do_pause)
|
|
{
|
|
fputs ("Press return...", stdout);
|
|
fflush (stdout);
|
|
getchar();
|
|
}
|
|
printf ("\nDiagnosis resumes after milestone Number %d", Milestone);
|
|
printf (" Page: %d\n\n", PageNo);
|
|
++Milestone;
|
|
++PageNo;
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::TstCond (int K, int Valid, const char *T)
|
|
{
|
|
if (!Valid)
|
|
{
|
|
BadCond (K, T);
|
|
printf (".\n");
|
|
}
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::BadCond (int K, const char *T)
|
|
{
|
|
static const char *msg[] = { "FAILURE", "SERIOUS DEFECT", "DEFECT", "FLAW" };
|
|
|
|
ErrCnt[K] = ErrCnt[K] + 1;
|
|
printf ("%s: %s", msg[K], T);
|
|
}
|
|
|
|
/* Random computes
|
|
X = (Random1 + Random9)^5
|
|
Random1 = X - FLOOR(X) + 0.000005 * X;
|
|
and returns the new value of Random1. */
|
|
|
|
template<typename FLOAT>
|
|
FLOAT
|
|
Paranoia<FLOAT>::Random ()
|
|
{
|
|
FLOAT X, Y;
|
|
|
|
X = Random1 + Random9;
|
|
Y = X * X;
|
|
Y = Y * Y;
|
|
X = X * Y;
|
|
Y = X - FLOOR (X);
|
|
Random1 = Y + X * FLOAT ("0.000005");
|
|
return (Random1);
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::SqXMinX (int ErrKind)
|
|
{
|
|
FLOAT XA, XB;
|
|
|
|
XB = X * BInvrse;
|
|
XA = X - XB;
|
|
SqEr = ((SQRT (X * X) - XB) - XA) / OneUlp;
|
|
if (SqEr != Zero)
|
|
{
|
|
if (SqEr < MinSqEr)
|
|
MinSqEr = SqEr;
|
|
if (SqEr > MaxSqEr)
|
|
MaxSqEr = SqEr;
|
|
J = J + 1;
|
|
BadCond (ErrKind, "\n");
|
|
printf ("sqrt(%s) - %s = %s\n", (X * X).str(), X.str(),
|
|
(OneUlp * SqEr).str());
|
|
printf ("\tinstead of correct value 0 .\n");
|
|
}
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::NewD ()
|
|
{
|
|
X = Z1 * Q;
|
|
X = FLOOR (Half - X / Radix) * Radix + X;
|
|
Q = (Q - X * Z) / Radix + X * X * (D / Radix);
|
|
Z = Z - Two * X * D;
|
|
if (Z <= Zero)
|
|
{
|
|
Z = -Z;
|
|
Z1 = -Z1;
|
|
}
|
|
D = Radix * D;
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::SR3750 ()
|
|
{
|
|
if (!((X - Radix < Z2 - Radix) || (X - Z2 > W - Z2)))
|
|
{
|
|
I = I + 1;
|
|
X2 = SQRT (X * D);
|
|
Y2 = (X2 - Z2) - (Y - Z2);
|
|
X2 = X8 / (Y - Half);
|
|
X2 = X2 - Half * X2 * X2;
|
|
SqEr = (Y2 + Half) + (Half - X2);
|
|
if (SqEr < MinSqEr)
|
|
MinSqEr = SqEr;
|
|
SqEr = Y2 - X2;
|
|
if (SqEr > MaxSqEr)
|
|
MaxSqEr = SqEr;
|
|
}
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::IsYeqX ()
|
|
{
|
|
if (Y != X)
|
|
{
|
|
if (N <= 0)
|
|
{
|
|
if (Z == Zero && Q <= Zero)
|
|
printf ("WARNING: computing\n");
|
|
else
|
|
BadCond (Defect, "computing\n");
|
|
printf ("\t(%s) ^ (%s)\n", Z.str(), Q.str());
|
|
printf ("\tyielded %s;\n", Y.str());
|
|
printf ("\twhich compared unequal to correct %s ;\n", X.str());
|
|
printf ("\t\tthey differ by %s .\n", (Y - X).str());
|
|
}
|
|
N = N + 1; /* ... count discrepancies. */
|
|
}
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::PrintIfNPositive ()
|
|
{
|
|
if (N > 0)
|
|
printf ("Similar discrepancies have occurred %d times.\n", N);
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::TstPtUf ()
|
|
{
|
|
N = 0;
|
|
if (Z != Zero)
|
|
{
|
|
printf ("Since comparison denies Z = 0, evaluating ");
|
|
printf ("(Z + Z) / Z should be safe.\n");
|
|
if (setjmp (ovfl_buf))
|
|
goto very_serious;
|
|
Q9 = (Z + Z) / Z;
|
|
printf ("What the machine gets for (Z + Z) / Z is %s .\n", Q9.str());
|
|
if (FABS (Q9 - Two) < Radix * U2)
|
|
{
|
|
printf ("This is O.K., provided Over/Underflow");
|
|
printf (" has NOT just been signaled.\n");
|
|
}
|
|
else
|
|
{
|
|
if ((Q9 < One) || (Q9 > Two))
|
|
{
|
|
very_serious:
|
|
N = 1;
|
|
ErrCnt[Serious] = ErrCnt[Serious] + 1;
|
|
printf ("This is a VERY SERIOUS DEFECT!\n");
|
|
}
|
|
else
|
|
{
|
|
N = 1;
|
|
ErrCnt[Defect] = ErrCnt[Defect] + 1;
|
|
printf ("This is a DEFECT!\n");
|
|
}
|
|
}
|
|
V9 = Z * One;
|
|
Random1 = V9;
|
|
V9 = One * Z;
|
|
Random2 = V9;
|
|
V9 = Z / One;
|
|
if ((Z == Random1) && (Z == Random2) && (Z == V9))
|
|
{
|
|
if (N > 0)
|
|
Pause ();
|
|
}
|
|
else
|
|
{
|
|
N = 1;
|
|
BadCond (Defect, "What prints as Z = ");
|
|
printf ("%s\n\tcompares different from ", Z.str());
|
|
if (Z != Random1)
|
|
printf ("Z * 1 = %s ", Random1.str());
|
|
if (!((Z == Random2) || (Random2 == Random1)))
|
|
printf ("1 * Z == %s\n", Random2.str());
|
|
if (!(Z == V9))
|
|
printf ("Z / 1 = %s\n", V9.str());
|
|
if (Random2 != Random1)
|
|
{
|
|
ErrCnt[Defect] = ErrCnt[Defect] + 1;
|
|
BadCond (Defect, "Multiplication does not commute!\n");
|
|
printf ("\tComparison alleges that 1 * Z = %s\n", Random2.str());
|
|
printf ("\tdiffers from Z * 1 = %s\n", Random1.str());
|
|
}
|
|
Pause ();
|
|
}
|
|
}
|
|
}
|
|
|
|
template<typename FLOAT>
|
|
void
|
|
Paranoia<FLOAT>::notify (const char *s)
|
|
{
|
|
printf ("%s test appears to be inconsistent...\n", s);
|
|
printf (" PLEASE NOTIFY KARPINKSI!\n");
|
|
}
|
|
|
|
/* ====================================================================== */
|
|
|
|
int main(int ac, char **av)
|
|
{
|
|
setbuf(stdout, NULL);
|
|
setbuf(stderr, NULL);
|
|
|
|
while (1)
|
|
switch (getopt (ac, av, "pvg:fdl"))
|
|
{
|
|
case -1:
|
|
return 0;
|
|
case 'p':
|
|
do_pause = true;
|
|
break;
|
|
case 'v':
|
|
verbose = true;
|
|
break;
|
|
case 'g':
|
|
{
|
|
static const struct {
|
|
const char *name;
|
|
const struct real_format *fmt;
|
|
} fmts[] = {
|
|
#define F(x) { #x, &x##_format }
|
|
F(ieee_single),
|
|
F(ieee_double),
|
|
F(ieee_extended_motorola),
|
|
F(ieee_extended_intel_96),
|
|
F(ieee_extended_intel_128),
|
|
F(ibm_extended),
|
|
F(ieee_quad),
|
|
F(vax_f),
|
|
F(vax_d),
|
|
F(vax_g),
|
|
F(i370_single),
|
|
F(i370_double),
|
|
F(real_internal),
|
|
#undef F
|
|
};
|
|
|
|
int i, n = sizeof (fmts)/sizeof(*fmts);
|
|
|
|
for (i = 0; i < n; ++i)
|
|
if (strcmp (fmts[i].name, optarg) == 0)
|
|
break;
|
|
|
|
if (i == n)
|
|
{
|
|
printf ("Unknown implementation \"%s\"; "
|
|
"available implementations:\n", optarg);
|
|
for (i = 0; i < n; ++i)
|
|
printf ("\t%s\n", fmts[i].name);
|
|
return 1;
|
|
}
|
|
|
|
// We cheat and use the same mode all the time, but vary
|
|
// the format used for that mode.
|
|
real_format_for_mode[int(real_c_float::MODE) - int(QFmode)]
|
|
= fmts[i].fmt;
|
|
|
|
Paranoia<real_c_float>().main();
|
|
break;
|
|
}
|
|
|
|
case 'f':
|
|
Paranoia < native_float<float> >().main();
|
|
break;
|
|
case 'd':
|
|
Paranoia < native_float<double> >().main();
|
|
break;
|
|
case 'l':
|
|
#ifndef NO_LONG_DOUBLE
|
|
Paranoia < native_float<long double> >().main();
|
|
#endif
|
|
break;
|
|
|
|
case '?':
|
|
puts ("-p\tpause between pages");
|
|
puts ("-g<FMT>\treal.c implementation FMT");
|
|
puts ("-f\tnative float");
|
|
puts ("-d\tnative double");
|
|
puts ("-l\tnative long double");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/* GCC stuff referenced by real.o. */
|
|
|
|
extern "C" void
|
|
fancy_abort ()
|
|
{
|
|
abort ();
|
|
}
|
|
|
|
int target_flags = 0;
|
|
|
|
extern "C" int
|
|
floor_log2_wide (unsigned HOST_WIDE_INT x)
|
|
{
|
|
int log = -1;
|
|
while (x != 0)
|
|
log++,
|
|
x >>= 1;
|
|
return log;
|
|
}
|